diff options
author | Lance Stout <lancestout@gmail.com> | 2011-06-01 15:10:44 -0700 |
---|---|---|
committer | Lance Stout <lancestout@gmail.com> | 2011-06-01 15:10:44 -0700 |
commit | 14693233504383d4df0ed092c870d5d7baea6538 (patch) | |
tree | 40901ed8ff906e8da8eda9d58ec9ffd2687f8248 /sleekxmpp | |
parent | a81162edd2434756e21d7f9a79d71d770a43db7b (diff) | |
download | slixmpp-14693233504383d4df0ed092c870d5d7baea6538.tar.gz slixmpp-14693233504383d4df0ed092c870d5d7baea6538.tar.bz2 slixmpp-14693233504383d4df0ed092c870d5d7baea6538.tar.xz slixmpp-14693233504383d4df0ed092c870d5d7baea6538.zip |
Cache stanza if sending fails.
The stanza will be sent first once the send queue is reactivated
after session start.
Stanzas sent by skipping the queue will not be cached.
Diffstat (limited to 'sleekxmpp')
-rw-r--r-- | sleekxmpp/xmlstream/xmlstream.py | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/sleekxmpp/xmlstream/xmlstream.py b/sleekxmpp/xmlstream/xmlstream.py index 2d72de5f..fd313536 100644 --- a/sleekxmpp/xmlstream/xmlstream.py +++ b/sleekxmpp/xmlstream/xmlstream.py @@ -192,6 +192,7 @@ class XMLStream(object): self.event_queue = queue.Queue() self.send_queue = queue.Queue() + self.__failed_send_stanza = None self.scheduler = Scheduler(self.event_queue, self.stop) self.namespace_map = {StanzaBase.xml_ns: 'xml'} @@ -1021,16 +1022,21 @@ class XMLStream(object): try: while not self.stop.isSet(): self.session_started_event.wait() - try: - data = self.send_queue.get(True, 1) - except queue.Empty: - continue + if self.__failed_send_stanza is not None: + data = self.__failed_send_stanza + self.__failed_send_stanza = None + else: + try: + data = self.send_queue.get(True, 1) + except queue.Empty: + continue log.debug("SEND: %s" % data) try: self.socket.send(data.encode('utf-8')) except Socket.error as serr: self.event('socket_error', serr) log.warning("Failed to send %s" % data) + self.__failed_send_stanza = data self.disconnect(self.auto_reconnect) except KeyboardInterrupt: log.debug("Keyboard Escape Detected in _send_thread") |