Reorganized stream level stanzas.
This commit is contained in:
13
sleekxmpp/stanza/stream/__init__.py
Normal file
13
sleekxmpp/stanza/stream/__init__.py
Normal file
@@ -0,0 +1,13 @@
|
||||
"""
|
||||
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.stream.error import StreamError
|
||||
from sleekxmpp.stanza.stream.features import StreamFeatures
|
||||
from sleekxmpp.stanza.stream.bind import Bind
|
||||
from sleekxmpp.stanza.stream.session import Session
|
||||
27
sleekxmpp/stanza/stream/bind.py
Normal file
27
sleekxmpp/stanza/stream/bind.py
Normal file
@@ -0,0 +1,27 @@
|
||||
"""
|
||||
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 import Iq
|
||||
from sleekxmpp.stanza.stream import StreamFeatures
|
||||
from sleekxmpp.xmlstream import ElementBase, ET, register_stanza_plugin
|
||||
|
||||
|
||||
class Bind(ElementBase):
|
||||
|
||||
"""
|
||||
"""
|
||||
|
||||
name = 'bind'
|
||||
namespace = 'urn:ietf:params:xml:ns:xmpp-bind'
|
||||
interfaces = set(('resource', 'jid'))
|
||||
sub_interfaces = interfaces
|
||||
plugin_attrib = 'bind'
|
||||
|
||||
|
||||
register_stanza_plugin(Iq, Bind)
|
||||
register_stanza_plugin(StreamFeatures, Bind)
|
||||
69
sleekxmpp/stanza/stream/error.py
Normal file
69
sleekxmpp/stanza/stream/error.py
Normal file
@@ -0,0 +1,69 @@
|
||||
"""
|
||||
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 StanzaBase, ElementBase, ET
|
||||
from sleekxmpp.xmlstream import register_stanza_plugin
|
||||
|
||||
|
||||
class StreamError(Error, StanzaBase):
|
||||
|
||||
"""
|
||||
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 mostly the same as the normal
|
||||
Error stanza, but with different namespaces and
|
||||
condition names.
|
||||
|
||||
Example error stanza:
|
||||
<stream:error>
|
||||
<not-well-formed xmlns="urn:ietf:params:xml:ns:xmpp-streams" />
|
||||
<text xmlns="urn:ietf:params:xml:ns:xmpp-streams">
|
||||
XML was not well-formed.
|
||||
</text>
|
||||
</stream:error>
|
||||
|
||||
Stanza Interface:
|
||||
condition -- The name of the condition element.
|
||||
text -- Human readable description of the error.
|
||||
|
||||
Attributes:
|
||||
conditions -- The set of allowable error condition elements.
|
||||
condition_ns -- The namespace for the condition element.
|
||||
|
||||
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'
|
||||
interfaces = set(('condition', 'text'))
|
||||
conditions = set((
|
||||
'bad-format', 'bad-namespace-prefix', 'conflict',
|
||||
'connection-timeout', 'host-gone', 'host-unknown',
|
||||
'improper-addressing', 'internal-server-error', 'invalid-from',
|
||||
'invalid-namespace', 'invalid-xml', 'not-authorized',
|
||||
'not-well-formed', 'policy-violation', 'remote-connection-failed',
|
||||
'reset', 'resource-constraint', 'restricted-xml', 'see-other-host',
|
||||
'system-shutdown', 'undefined-condition', 'unsupported-encoding',
|
||||
'unsupported-feature', 'unsupported-stanza-type',
|
||||
'unsupported-version'))
|
||||
condition_ns = 'urn:ietf:params:xml:ns:xmpp-streams'
|
||||
52
sleekxmpp/stanza/stream/features.py
Normal file
52
sleekxmpp/stanza/stream/features.py
Normal file
@@ -0,0 +1,52 @@
|
||||
"""
|
||||
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.xmlstream import ElementBase, StanzaBase, ET
|
||||
from sleekxmpp.xmlstream import register_stanza_plugin
|
||||
|
||||
|
||||
class StreamFeatures(StanzaBase):
|
||||
|
||||
"""
|
||||
"""
|
||||
|
||||
name = 'features'
|
||||
namespace = 'http://etherx.jabber.org/streams'
|
||||
interfaces = set(('features', 'required', 'optional'))
|
||||
sub_interfaces = interfaces
|
||||
|
||||
def setup(self, xml):
|
||||
StanzaBase.setup(self, xml)
|
||||
self.values = self.values
|
||||
|
||||
def get_features(self):
|
||||
"""
|
||||
"""
|
||||
return self.plugins
|
||||
|
||||
def set_features(self, value):
|
||||
"""
|
||||
"""
|
||||
pass
|
||||
|
||||
def del_features(self):
|
||||
"""
|
||||
"""
|
||||
pass
|
||||
|
||||
def get_required(self):
|
||||
"""
|
||||
"""
|
||||
features = self['features']
|
||||
return [f for n, f in features.items() if f['required']]
|
||||
|
||||
def get_optional(self):
|
||||
"""
|
||||
"""
|
||||
features = self['features']
|
||||
return [f for n, f in features.items() if not f['required']]
|
||||
104
sleekxmpp/stanza/stream/sasl.py
Normal file
104
sleekxmpp/stanza/stream/sasl.py
Normal file
@@ -0,0 +1,104 @@
|
||||
"""
|
||||
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 import StreamFeatures
|
||||
from sleekxmpp.xmlstream import ElementBase, StanzaBase, ET
|
||||
from sleekxmpp.xmlstream import register_stanza_plugin
|
||||
|
||||
|
||||
class Mechanisms(ElementBase):
|
||||
|
||||
"""
|
||||
"""
|
||||
|
||||
name = 'mechanisms'
|
||||
namespace = 'urn:ietf:params:xml:ns:xmpp-sasl'
|
||||
interfaces = set(('mechanisms', 'required'))
|
||||
plugin_attrib = name
|
||||
is_extension = True
|
||||
|
||||
def get_required(self):
|
||||
"""
|
||||
"""
|
||||
return True
|
||||
|
||||
def get_mechanisms(self):
|
||||
"""
|
||||
"""
|
||||
results = []
|
||||
mechs = self.findall('{%s}mechanism' % self.namespace)
|
||||
if mechs:
|
||||
for mech in mechs:
|
||||
results.append(mech.text)
|
||||
return results
|
||||
|
||||
def set_mechanisms(self, values):
|
||||
"""
|
||||
"""
|
||||
self.del_mechanisms()
|
||||
for val in values:
|
||||
mech = ET.Element('{%s}mechanism' % self.namespace)
|
||||
mech.text = val
|
||||
self.append(mech)
|
||||
|
||||
def del_mechanisms(self):
|
||||
"""
|
||||
"""
|
||||
mechs = self.findall('{%s}mechanism' % self.namespace)
|
||||
if mechs:
|
||||
for mech in mechs:
|
||||
self.xml.remove(mech)
|
||||
|
||||
|
||||
class Success(StanzaBase):
|
||||
|
||||
"""
|
||||
"""
|
||||
|
||||
name = 'success'
|
||||
namespace = 'urn:ietf:params:xml:ns:xmpp-sasl'
|
||||
interfaces = set()
|
||||
plugin_attrib = name
|
||||
|
||||
|
||||
class Failure(StanzaBase):
|
||||
|
||||
"""
|
||||
"""
|
||||
|
||||
name = 'failure'
|
||||
namespace = 'urn:ietf:params:xml:ns:xmpp-sasl'
|
||||
interfaces = set()
|
||||
plugin_attrib = name
|
||||
|
||||
|
||||
class Auth(StanzaBase):
|
||||
|
||||
"""
|
||||
"""
|
||||
|
||||
name = 'auth'
|
||||
namespace = 'urn:ietf:params:xml:ns:xmpp-sasl'
|
||||
interfaces = set(('mechanism', 'value'))
|
||||
plugin_attrib = name
|
||||
|
||||
def setup(self, xml):
|
||||
StanzaBase.setup(self, xml)
|
||||
self.xml.tag = self.tag_name()
|
||||
|
||||
def set_value(self, value):
|
||||
self.xml.text = value
|
||||
|
||||
def get_value(self):
|
||||
return self.xml.text
|
||||
|
||||
def del_value(self):
|
||||
self.xml.text = ''
|
||||
|
||||
|
||||
register_stanza_plugin(StreamFeatures, Mechanisms)
|
||||
26
sleekxmpp/stanza/stream/session.py
Normal file
26
sleekxmpp/stanza/stream/session.py
Normal file
@@ -0,0 +1,26 @@
|
||||
"""
|
||||
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 import Iq
|
||||
from sleekxmpp.stanza.stream import StreamFeatures
|
||||
from sleekxmpp.xmlstream import ElementBase, ET, register_stanza_plugin
|
||||
|
||||
|
||||
class Session(ElementBase):
|
||||
|
||||
"""
|
||||
"""
|
||||
|
||||
name = 'session'
|
||||
namespace = 'urn:ietf:params:xml:ns:xmpp-session'
|
||||
interfaces = set()
|
||||
plugin_attrib = 'session'
|
||||
|
||||
|
||||
register_stanza_plugin(Iq, Session)
|
||||
register_stanza_plugin(StreamFeatures, Session)
|
||||
50
sleekxmpp/stanza/stream/tls.py
Normal file
50
sleekxmpp/stanza/stream/tls.py
Normal file
@@ -0,0 +1,50 @@
|
||||
"""
|
||||
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 import StreamFeatures
|
||||
from sleekxmpp.xmlstream import StanzaBase, ElementBase
|
||||
from sleekxmpp.xmlstream import register_stanza_plugin
|
||||
|
||||
|
||||
class STARTTLS(ElementBase):
|
||||
|
||||
"""
|
||||
"""
|
||||
|
||||
name = 'starttls'
|
||||
namespace = 'urn:ietf:params:xml:ns:xmpp-tls'
|
||||
interfaces = set(('required',))
|
||||
plugin_attrib = name
|
||||
|
||||
def get_required(self):
|
||||
"""
|
||||
"""
|
||||
return True
|
||||
|
||||
|
||||
class Proceed(StanzaBase):
|
||||
|
||||
"""
|
||||
"""
|
||||
|
||||
name = 'proceed'
|
||||
namespace = 'urn:ietf:params:xml:ns:xmpp-tls'
|
||||
interfaces = set()
|
||||
|
||||
|
||||
class Failure(StanzaBase):
|
||||
|
||||
"""
|
||||
"""
|
||||
|
||||
name = 'failure'
|
||||
namespace = 'urn:ietf:params:xml:ns:xmpp-tls'
|
||||
interfaces = set()
|
||||
|
||||
|
||||
register_stanza_plugin(StreamFeatures, STARTTLS)
|
||||
Reference in New Issue
Block a user