Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Branch: master
Commits on Jul 10, 2013
  1. Do proper fallback for Request.stanzaType.

    If `stanzaType` is not passed to the constructor of
    `wokkel.generic.Request`, it should default to the value in the class
    variable, not `get`.
    Author: ralphm
    Fixes: #80
Commits on May 6, 2013
  1. Deprecate prepareIDNName.

    C{unicode.encode('idna')} does exactly the same as the recently
    introduced L{generic.prepareIDNName}.
Commits on Mar 5, 2013
  1. Make pyflakes happy.

  2. Compile against Twisted trunk and pypy, too.

    This also adds a pyflakes check step.
Commits on Jan 12, 2013
  1. Release Wokkel 0.7.1.

  2. Properly encode IDN domain names for SRV lookups.

    Before Twisted 12.3.0, the SRV lookup done for outgoing
    connections succeeded if passed a unicode string with all-ASCII
    code points. A recent change made the DNS code more strict, and
    only byte string are accepted as domain name.  See for details.
    This change makes sure domain names are encoded to their ASCII
    Compatible Equivalent (ACE) version before passing the resulting
    byte string to `twisted.names.srvconnect.SRVConnector`, as per
    RFC 3490.
    Note that while connecting to servers with an IDN domain name
    now works properly, authentication using MD5-Digest SASL mechanism
    will fail until has been
    Fixes: #77.
Commits on Oct 2, 2012
  1. Add travis-ci configuration.

Commits on Sep 1, 2012
  1. Send back an error if there is no known route to the stanza's destina…

    This is most useful in situations where there is no server-to-server
    component that acts as the default route (indexed by `None`).
Commits on May 15, 2012
  1. Make sure 'twisted' doesn't appear in the egg-info top_level.txt file.

    Wokkel provides a plugin for twistd. As with all twisted plugins, these
    need to be placed in a directory twisted/plugins so that the plugin mechanism
    can find them. This is not a real package, and when building eggs the
    directory must appear in the egg. However, 'twisted' should not occur in the
    top_level.txt file as this causes warnings when importing twisted, and
    triggers a bug in pip that removes all of twisted when a package with a
    twisted plugin is removed.
    This change overrides the way the top_level.txt file is written, by explicitly
    excluding 'twisted'.
    Author: ralphm.
    Fixes: #76.
Commits on May 9, 2012
  1. Add support for adding and updating roster items.

    Roster items can be added or updated by sending a roster set request using the
    new `wokkel.xmppim.RosterClientProtocol.setItem`. It takes a `RosterItem` as
    the only argument. Note that changes in presence subscriptions for the contact
    need to be done using presence as provided by
    Author: ralphm.
    Fixes: #56.
  2. Clean up of RosterItem and RosterClientProtocol.

     * Renamed attributes `jid` and `ask` to `entity` and
       `pendingOut` respectively.
     * Can represent roster items to be removed or that have been removed.
     * Now has `fromElement` and `toElement` methods.
    `RosterRequest` is a new class to represent roster request stanzas.
     * Roster returned from `getRoster` is now indexed by `JID`s (instead of
       the `unicode` representation of the JID).
     * Outgoing requests are now done using `RosterRequest`.
     * `onRosterSet` and `onRosterRemove` are deprecated in favor of
       `setReceived` and `removeReceived`, respectively. These are called with a
       `RosterRequest` to have access to addressing and roster version
    `RosterPushIgnored` can be raised to return a `service-unavailable` stanza
    error for unwanted pushes.
    This also fixes a problem with checking the sender address for roster pushes.
    Author: ralphm.
    Fixes: #71.
  3. Add convenience method Request.parseRequest.

    The new method `Request.parseRequest` is called from `Request.fromElement`
    with the child element of the iq that is passed to `fromElement`, providing
    a convenient hook for parsing the payload of incoming requests.
Commits on Feb 25, 2012
  1. Let wokkel.component.Component reconnect if first attempt fails.

    Author: ralphm.
    Fixes #75.
Commits on Jan 23, 2012
  1. Release Wokkel 0.7.0.

Commits on Jan 22, 2012
  1. Cleanups leading up to Wokkel 0.7.0.

    As we now depend on Twisted 10.0.0 or higher, the following classes and
    interfaces were deprecated:
     - wokkel.compat.BootstrapMixin
     - wokkel.compat.XmlStreamServerFactory
     - wokkel.iwokkel.IXMPPHandler
     - wokkel.iwokkel.IXMPPHandlerCollection
     - wokkel.subprotocols.XMPPHandlerCollection
    This also resolves all Pyflakes warnings, changes links for to and fixes the copyright notice in LICENSE to include 2012.
Commits on Jan 8, 2012
  1. Expose locked state of a room on join response with room created status.

    When the presence in response to a join includes the room created status code
    (201), the client should configure the room before it can be used. To enable
    this, the locked state of the room is now exposed through the `Room.locked`
    Also, update example MUC client to deal with newly created, locked rooms.
  2. Use symbolic constants instead of integers MUC status code.

    Instead of using normal constant values for representing MUC status codes,
    `UserPresence` now uses `twisted.python.constants` to define these. This
    makes code better to understand and helps debugging.
    If a user presence includes one or more status codes, they are stored in the
    `mucStatuses` attribute, as an instance of `Statuses`. This replaces the
    former `statusCodes` attribute.
Commits on Nov 23, 2011
Commits on Nov 14, 2011
  1. Add client side support for XMPP Multi-User Chat.

    Author: tofu, ralphm.
    Reviewer: ralphm.
    Fixes #24.
    This adds `wokkel.muc` with client side support for the XMPP Multi-User Chat
    protocol along with a simple MUC client example:
     * Adds parsers and containers for MUC protocol extensions to presence stanzas
       and for iq exchanges, tied together in a subprotocol handler
     * Provides a higher level handler `MUCClient` that keeps record of `Room`s
     * the
       client is in and `User`s that occupy it.
     * Adds read-only `status` property to `wokkel.xmppim.AvailabilityPresence`
       that is a single item view on the `statuses` instance variable.
     * Splits core functionality from `PresenceProtocol` into
       `BasePresenceProtocol`. This allows `MUCClientProtocol` to base off it,
       with different requirements to handling incoming presence and sending
       out MUC-annotated presence to rooms.
     * Add `wokkel.xmppim.Message`, a basic message container that derives from
       `wokkel.generic.Stanza` to parse and render message stanzas.
  2. Restore missing interface methods from a bad merge.

    branch : wokkel-muc-client-support-24
  3. Pyflakes cleanups.

    branch : wokkel-muc-client-support-24
Commits on Nov 10, 2011
  1. Add a simple MUC client example that responds to greetings, fix a typo.

    branch : wokkel-muc-client-support-24
  2. Merge in tip changes.

    branch : wokkel-muc-client-support-24
Commits on Nov 9, 2011
  1. Fix typo.

    branch : wokkel-muc-client-support-24
  2. Allow wokkel.data_form.Form to be used as a read-only dict.

    In [1334124db2fd] `wokkel.pubsub.PubSubRequest.options` was changed to be a
    `Form` instead of dictionary, which makes existing code using that field to be
    To reduce the impact of that change, this change implements various methods in
    `wokkel.data_form.Form` to emulate a read-only dictionary. It now maps the
    name of each field to its value, similar to the dictionary returned from
    `getValues`. The latter is now identical to `dict(form)`.
    * * *
    Address incompatible change concerning PubSubRequest.options.
    In changeset [1334124db2fd], `PubSubRequest.options` was changed to hold the
    `wokkel.data_form.Form` that represents the data form sent in the original
    request. This makes it easier to type check the form in a step separate from
    parsing the request. However, this is an incompatible change.
    To remedy this, we move the form to `optionsForm` and make options a property
    that returns the values of the form.
Something went wrong with that request. Please try again.