summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLance Stout <lancestout@gmail.com>2011-06-01 15:10:44 -0700
committerLance Stout <lancestout@gmail.com>2011-06-01 15:10:44 -0700
commit14693233504383d4df0ed092c870d5d7baea6538 (patch)
tree40901ed8ff906e8da8eda9d58ec9ffd2687f8248
parenta81162edd2434756e21d7f9a79d71d770a43db7b (diff)
downloadslixmpp-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.
-rw-r--r--sleekxmpp/xmlstream/xmlstream.py14
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")