diff options
Diffstat (limited to 'sleekxmpp')
-rwxr-xr-x | sleekxmpp/componentxmpp.py | 5 | ||||
-rw-r--r-- | sleekxmpp/xmlstream/xmlstream.py | 34 |
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): |