summaryrefslogtreecommitdiff
path: root/sleekxmpp/xmlstream/xmlstream.py
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 /sleekxmpp/xmlstream/xmlstream.py
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.
Diffstat (limited to 'sleekxmpp/xmlstream/xmlstream.py')
-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")