summaryrefslogtreecommitdiff
path: root/sleekxmpp
diff options
context:
space:
mode:
Diffstat (limited to 'sleekxmpp')
-rwxr-xr-xsleekxmpp/componentxmpp.py5
-rw-r--r--sleekxmpp/xmlstream/xmlstream.py34
2 files changed, 26 insertions, 13 deletions
diff --git a/sleekxmpp/componentxmpp.py b/sleekxmpp/componentxmpp.py
index 4f1a190e..5bd596d2 100755
--- a/sleekxmpp/componentxmpp.py
+++ b/sleekxmpp/componentxmpp.py
@@ -76,7 +76,10 @@ class ComponentXMPP(basexmpp, XMLStream):
def start_stream_handler(self, xml):
sid = xml.get('id', '')
handshake = ET.Element('{jabber:component:accept}handshake')
- handshake.text = hashlib.sha1(bytes("%s%s" % (sid, self.secret), 'utf-8')).hexdigest().lower()
+ if sys.version_info < (3,0):
+ handshake.text = hashlib.sha1("%s%s" % (sid, self.secret)).hexdigest().lower()
+ else:
+ handshake.text = hashlib.sha1(bytes("%s%s" % (sid, self.secret), 'utf-8')).hexdigest().lower()
self.sendXML(handshake)
def _handleHandshake(self, xml):
diff --git a/sleekxmpp/xmlstream/xmlstream.py b/sleekxmpp/xmlstream/xmlstream.py
index 0cdfdf96..44f83840 100644
--- a/sleekxmpp/xmlstream/xmlstream.py
+++ b/sleekxmpp/xmlstream/xmlstream.py
@@ -66,6 +66,7 @@ class XMLStream(object):
self.stream_footer = "</stream>"
self.eventqueue = queue.Queue()
+ self.sendqueue = queue.Queue()
self.namespace_map = {}
@@ -139,12 +140,17 @@ class XMLStream(object):
for t in range(0, HANDLER_THREADS):
self.__thread['eventhandle%s' % t] = threading.Thread(name='eventhandle%s' % t, target=self._eventRunner)
self.__thread['eventhandle%s' % t].start()
+ self.__thread['sendthread'] = threading.Thread(name='sendthread', target=self._sendThread)
+ self.__thread['sendthread'].start()
if threaded:
self.__thread['process'] = threading.Thread(name='process', target=self._process)
self.__thread['process'].start()
else:
self._process()
+ def schedule(self, seconds, handler, args=None):
+ threading.Timer(seconds, handler, args).start()
+
def _process(self):
"Start processing the socket."
firstrun = True
@@ -222,19 +228,23 @@ class XMLStream(object):
if event == b'start':
edepth += 1
+ def _sendThread(self):
+ while True:
+ data = self.sendqueue.get(True)
+ logging.debug("SEND: %s" % data)
+ try:
+ self.socket.send(data.encode('utf-8'))
+ #self.socket.send(bytes(data, "utf-8"))
+ #except socket.error,(errno, strerror):
+ except:
+ self.state.set('connected', False)
+ if self.state.reconnect:
+ logging.error("Disconnected. Socket Error.")
+ traceback.print_exc()
+ self.disconnect(reconnect=True)
+
def sendRaw(self, data):
- logging.debug("SEND: %s" % data)
- try:
- self.socket.send(data.encode('utf-8'))
- #self.socket.send(bytes(data, "utf-8"))
- #except socket.error,(errno, strerror):
- except:
- self.state.set('connected', False)
- if self.state.reconnect:
- logging.error("Disconnected. Socket Error.")
- traceback.print_exc()
- self.disconnect(reconnect=True)
- return False
+ self.sendqueue.put(data)
return True
def disconnect(self, reconnect=False):