Skip to content
This repository has been archived by the owner on Jan 30, 2018. It is now read-only.

Commit

Permalink
Add StreamError stanza and a stream_error event.
Browse files Browse the repository at this point in the history
Note that the stream may automatically attempt to
reconnect when a stream error is received.
  • Loading branch information
legastero committed Jan 16, 2011
1 parent cb85d4a commit 2004ddd
Show file tree
Hide file tree
Showing 4 changed files with 72 additions and 5 deletions.
16 changes: 12 additions & 4 deletions sleekxmpp/basexmpp.py
Expand Up @@ -15,7 +15,7 @@
import sleekxmpp
from sleekxmpp import plugins

from sleekxmpp.stanza import Message, Presence, Iq, Error
from sleekxmpp.stanza import Message, Presence, Iq, Error, StreamError
from sleekxmpp.stanza.roster import Roster
from sleekxmpp.stanza.nick import Nick
from sleekxmpp.stanza.htmlim import HTMLIM
Expand Down Expand Up @@ -128,16 +128,21 @@ def __init__(self, default_ns='jabber:client'):
Callback('Presence',
MatchXPath("{%s}presence" % self.default_ns),
self._handle_presence))
self.register_handler(
Callback('Stream Error',
MatchXPath("{%s}error" % self.stream_ns),
self._handle_stream_error))

self.add_event_handler('presence_subscribe',
self._handle_subscribe)
self.add_event_handler('disconnected',
self._handle_disconnected)

# Set up the XML stream with XMPP's root stanzas.
self.registerStanza(Message)
self.registerStanza(Iq)
self.registerStanza(Presence)
self.register_stanza(Message)
self.register_stanza(Iq)
self.register_stanza(Presence)
self.register_stanza(StreamError)

# Initialize a few default stanza plugins.
register_stanza_plugin(Iq, Roster)
Expand Down Expand Up @@ -579,6 +584,9 @@ def _handle_disconnected(self, event):
"""When disconnected, reset the roster"""
self.roster = {}

def _handle_stream_error(self, error):
self.event('stream_error', error)

def _handle_message(self, msg):
"""Process incoming message stanzas."""
self.event('message', msg)
Expand Down
1 change: 1 addition & 0 deletions sleekxmpp/stanza/__init__.py
Expand Up @@ -8,6 +8,7 @@


from sleekxmpp.stanza.error import Error
from sleekxmpp.stanza.stream_error import StreamError
from sleekxmpp.stanza.iq import Iq
from sleekxmpp.stanza.message import Message
from sleekxmpp.stanza.presence import Presence
1 change: 0 additions & 1 deletion sleekxmpp/stanza/iq.py
Expand Up @@ -224,4 +224,3 @@ def _set_stanza_values(self, values):
else:
StanzaBase._set_stanza_values(self, values)
return self

59 changes: 59 additions & 0 deletions sleekxmpp/stanza/stream_error.py
@@ -0,0 +1,59 @@
"""
SleekXMPP: The Sleek XMPP Library
Copyright (C) 2010 Nathanael C. Fritz
This file is part of SleekXMPP.
See the file LICENSE for copying permission.
"""

from sleekxmpp.stanza.error import Error
from sleekxmpp.xmlstream import ElementBase, ET, register_stanza_plugin


class StreamError(Error):

"""
XMPP stanzas of type 'error' should include an <error> stanza that
describes the nature of the error and how it should be handled.
Use the 'XEP-0086: Error Condition Mappings' plugin to include error
codes used in older XMPP versions.
The stream:error stanza is used to provide more information for
error that occur with the underlying XML stream itself, and not
a particular stanza.
Note: The StreamError stanza is the same as the normal Error stanza,
but with a different namespace.
Example error stanza:
<error type="cancel" code="404">
<item-not-found xmlns="urn:ietf:params:xml:ns:xmpp-stanzas" />
<text xmlns="urn:ietf:params:xml:ns:xmpp-stanzas">
The item was not found.
</text>
</error>
Stanza Interface:
code -- The error code used in older XMPP versions.
condition -- The name of the condition element.
text -- Human readable description of the error.
type -- Error type indicating how the error should be handled.
Attributes:
conditions -- The set of allowable error condition elements.
condition_ns -- The namespace for the condition element.
types -- A set of values indicating how the error
should be treated.
Methods:
setup -- Overrides ElementBase.setup.
get_condition -- Retrieve the name of the condition element.
set_condition -- Add a condition element.
del_condition -- Remove the condition element.
get_text -- Retrieve the contents of the <text> element.
set_text -- Set the contents of the <text> element.
del_text -- Remove the <text> element.
"""

namespace = 'http://etherx.jabber.org/streams'

0 comments on commit 2004ddd

Please sign in to comment.