Merge branch 'master' into hacks
This commit is contained in:
commit
1f3cfb98f1
2
.gitignore
vendored
2
.gitignore
vendored
@ -2,3 +2,5 @@
|
|||||||
.project
|
.project
|
||||||
build/
|
build/
|
||||||
*.swp
|
*.swp
|
||||||
|
.pydevproject
|
||||||
|
.settings
|
||||||
|
@ -69,6 +69,8 @@ class ClientXMPP(basexmpp, XMLStream):
|
|||||||
#TODO: Use stream state here
|
#TODO: Use stream state here
|
||||||
self.authenticated = False
|
self.authenticated = False
|
||||||
self.sessionstarted = False
|
self.sessionstarted = False
|
||||||
|
self.bound = False
|
||||||
|
self.bindfail = False
|
||||||
self.registerHandler(Callback('Stream Features', MatchXPath('{http://etherx.jabber.org/streams}features'), self._handleStreamFeatures, thread=True))
|
self.registerHandler(Callback('Stream Features', MatchXPath('{http://etherx.jabber.org/streams}features'), self._handleStreamFeatures, thread=True))
|
||||||
self.registerHandler(Callback('Roster Update', MatchXPath('{%s}iq/{jabber:iq:roster}query' % self.default_ns), self._handleRoster, thread=True))
|
self.registerHandler(Callback('Roster Update', MatchXPath('{%s}iq/{jabber:iq:roster}query' % self.default_ns), self._handleRoster, thread=True))
|
||||||
#self.registerHandler(Callback('Roster Update', MatchXMLMask("<presence xmlns='%s' type='subscribe' />" % self.default_ns), self._handlePresenceSubscribe, thread=True))
|
#self.registerHandler(Callback('Roster Update', MatchXMLMask("<presence xmlns='%s' type='subscribe' />" % self.default_ns), self._handlePresenceSubscribe, thread=True))
|
||||||
@ -244,19 +246,23 @@ class ClientXMPP(basexmpp, XMLStream):
|
|||||||
response = iq.send()
|
response = iq.send()
|
||||||
#response = self.send(iq, self.Iq(sid=iq['id']))
|
#response = self.send(iq, self.Iq(sid=iq['id']))
|
||||||
self.set_jid(response.xml.find('{urn:ietf:params:xml:ns:xmpp-bind}bind/{urn:ietf:params:xml:ns:xmpp-bind}jid').text)
|
self.set_jid(response.xml.find('{urn:ietf:params:xml:ns:xmpp-bind}bind/{urn:ietf:params:xml:ns:xmpp-bind}jid').text)
|
||||||
|
self.bound = True
|
||||||
logging.info("Node set to: %s" % self.fulljid)
|
logging.info("Node set to: %s" % self.fulljid)
|
||||||
if "{urn:ietf:params:xml:ns:xmpp-session}session" not in self.features:
|
if "{urn:ietf:params:xml:ns:xmpp-session}session" not in self.features or self.bindfail:
|
||||||
logging.debug("Established Session")
|
logging.debug("Established Session")
|
||||||
self.sessionstarted = True
|
self.sessionstarted = True
|
||||||
self.event("session_start")
|
self.event("session_start")
|
||||||
|
|
||||||
def handler_start_session(self, xml):
|
def handler_start_session(self, xml):
|
||||||
if self.authenticated:
|
if self.authenticated and self.bound:
|
||||||
iq = self.makeIqSet(xml)
|
iq = self.makeIqSet(xml)
|
||||||
response = iq.send()
|
response = iq.send()
|
||||||
logging.debug("Established Session")
|
logging.debug("Established Session")
|
||||||
self.sessionstarted = True
|
self.sessionstarted = True
|
||||||
self.event("session_start")
|
self.event("session_start")
|
||||||
|
else:
|
||||||
|
#bind probably hasn't happened yet
|
||||||
|
self.bindfail = True
|
||||||
|
|
||||||
def _handleRoster(self, iq, request=False):
|
def _handleRoster(self, iq, request=False):
|
||||||
if iq['type'] == 'set' or (iq['type'] == 'result' and request):
|
if iq['type'] == 'set' or (iq['type'] == 'result' and request):
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
"""
|
"""
|
||||||
SleekXMPP: The Sleek XMPP Library
|
SleekXMPP: The Sleek XMPP Library
|
||||||
Copyright (C) 2010 Nathanael C. Fritz
|
Copyright (C) 2010 Nathanael C. Fritz
|
||||||
This file is part of SleekXMPP.
|
This file is part of SleekXMPP.
|
||||||
|
|
||||||
See the file license.txt for copying permission.
|
See the file license.txt for copying permission.
|
||||||
"""
|
"""
|
||||||
from __future__ import with_statement, unicode_literals
|
from __future__ import with_statement, unicode_literals
|
||||||
|
|
||||||
@ -91,20 +91,26 @@ class basexmpp(object):
|
|||||||
if not self.plugin[idx].post_inited: self.plugin[idx].post_init()
|
if not self.plugin[idx].post_inited: self.plugin[idx].post_init()
|
||||||
return super(basexmpp, self).process(*args, **kwargs)
|
return super(basexmpp, self).process(*args, **kwargs)
|
||||||
|
|
||||||
def registerPlugin(self, plugin, pconfig = {}):
|
def registerPlugin(self, plugin, pconfig = {}, pluginModule = None):
|
||||||
"""Register a plugin not in plugins.__init__.__all__ but in the plugins
|
"""Register a plugin not in plugins.__init__.__all__ but in the plugins
|
||||||
directory."""
|
directory."""
|
||||||
# discover relative "path" to the plugins module from the main app, and import it.
|
# discover relative "path" to the plugins module from the main app, and import it.
|
||||||
# TODO:
|
# TODO:
|
||||||
# gross, this probably isn't necessary anymore, especially for an installed module
|
# gross, this probably isn't necessary anymore, especially for an installed module
|
||||||
__import__("%s.%s" % (globals()['plugins'].__name__, plugin))
|
try:
|
||||||
# init the plugin class
|
if pluginModule:
|
||||||
self.plugin[plugin] = getattr(getattr(plugins, plugin), plugin)(self, pconfig) # eek
|
module = __import__(pluginModule, globals(), locals(), [plugin])
|
||||||
# all of this for a nice debug? sure.
|
else:
|
||||||
xep = ''
|
module = __import__("%s.%s" % (globals()['plugins'].__name__, plugin), globals(), locals(), [plugin])
|
||||||
if hasattr(self.plugin[plugin], 'xep'):
|
# init the plugin class
|
||||||
xep = "(XEP-%s) " % self.plugin[plugin].xep
|
self.plugin[plugin] = getattr(module, plugin)(self, pconfig) # eek
|
||||||
logging.debug("Loaded Plugin %s%s" % (xep, self.plugin[plugin].description))
|
# all of this for a nice debug? sure.
|
||||||
|
xep = ''
|
||||||
|
if hasattr(self.plugin[plugin], 'xep'):
|
||||||
|
xep = "(XEP-%s) " % self.plugin[plugin].xep
|
||||||
|
logging.debug("Loaded Plugin %s%s" % (xep, self.plugin[plugin].description))
|
||||||
|
except:
|
||||||
|
logging.error("Unable to load plugin: %s" %(plugin) )
|
||||||
|
|
||||||
def register_plugins(self):
|
def register_plugins(self):
|
||||||
"""Initiates all plugins in the plugins/__init__.__all__"""
|
"""Initiates all plugins in the plugins/__init__.__all__"""
|
||||||
|
Loading…
x
Reference in New Issue
Block a user