diff options
author | mrDoctorWho <mrdoctorwho@gmail.com> | 2015-01-28 12:41:36 +0300 |
---|---|---|
committer | mrDoctorWho <mrdoctorwho@gmail.com> | 2015-01-28 12:41:36 +0300 |
commit | 1f1c00fd4e273387abb2764b56e4fad83a00bc02 (patch) | |
tree | f7e38637979dfa3a63645b0a298188e44251d97d | |
parent | 21b998ac45435545caf0ca4a881b1cbfa4dd40c2 (diff) |
Added socket.error filtering in send
Added additional features for forms
Fixed freeze when component tried to disconnect twice
-rw-r--r-- | README.md | 4 | ||||
-rw-r--r-- | xmpp/dispatcher.py | 7 | ||||
-rw-r--r-- | xmpp/protocol.py | 12 | ||||
-rw-r--r-- | xmpp/transports.py | 2 |
4 files changed, 14 insertions, 11 deletions
@@ -1,4 +1,6 @@ xmpppy ====== -Just another fork of xmpppy library. Provides full compability with standart xmpppy but also have a couple of security and performance fixes.
\ No newline at end of file +Just another fork of xmpppy library. Provides full compability with standart xmpppy but also have a couple of security, performance fixes and additional forms support. + +**xmpppy copyright © 2004 — 2009 Alexey "Snake" Nezhdanov**
\ No newline at end of file diff --git a/xmpp/dispatcher.py b/xmpp/dispatcher.py index 5b2cf09..f873ffd 100644 --- a/xmpp/dispatcher.py +++ b/xmpp/dispatcher.py @@ -480,8 +480,9 @@ class Dispatcher(PlugIn): """
Send a stream terminator and and handle all incoming stanzas before stream closure.
"""
- self._owner_send("</stream:stream>")
- while self.Process(1):
- pass
+ if self._owner.connected:
+ self._owner_send("</stream:stream>")
+ while self.Process(1):
+ pass
iter = type(send)(Process.__code__, Process.__globals__, name = "iter", argdefs = Process.__defaults__, closure = Process.__closure__)
diff --git a/xmpp/protocol.py b/xmpp/protocol.py index 7c70784..8cbc934 100644 --- a/xmpp/protocol.py +++ b/xmpp/protocol.py @@ -1164,14 +1164,14 @@ class DataReported(Node): """
return self.getTag("field", attrs={"var": name})
- def setField(self, name, typ=None, label=None, options=[]):
+ def setField(self, name, typ=None, label=None, desc=None, options=[]):
"""
Create if nessessary or get the existing datafield object with name "name" and return it.
If created, attributes "type" and "label" are applied to new datafield.
"""
field = self.getField(name)
if not field:
- field = self.addChild(node=DataField(name, None, typ, 0, label, options=options))
+ field = self.addChild(node=DataField(name, None, typ, 0, label, desc=desc, options=options))
return field
def asDict(self):
@@ -1236,13 +1236,13 @@ class DataItem(Node): """
return self.getTag("field", attrs={"var": name})
- def setField(self, name, value=None, typ=None, options=[]):
+ def setField(self, name, value=None, typ=None, desc=None, options=[]):
"""
Create if nessessary or get the existing datafield object with name "name" and return it.
"""
field = self.getField(name)
if not field:
- field = self.addChild(node=DataField(name, value, typ, options=options))
+ field = self.addChild(node=DataField(name, value, typ, desc=desc, options=options))
return field
def asDict(self):
@@ -1383,13 +1383,13 @@ class DataForm(Node): """
return self.getTag("field", attrs={"var": name})
- def setField(self, name, value=None, typ=None, options=[]):
+ def setField(self, name, value=None, typ=None, desc=None, options=[]):
"""
Create if nessessary or get the existing datafield object with name "name" and return it.
"""
field = self.getField(name)
if not field:
- field = self.addChild(node=DataField(name, value, typ, options=options))
+ field = self.addChild(node=DataField(name, value, typ, desc=desc, options=options))
return field
def asDict(self):
diff --git a/xmpp/transports.py b/xmpp/transports.py index c733011..5287033 100644 --- a/xmpp/transports.py +++ b/xmpp/transports.py @@ -263,7 +263,7 @@ class TCPsocket(PlugIn): with self._sequence:
try:
self._send(data)
- except Exception:
+ except (Exception, socket.error):
self.DEBUG("Socket error while sending data.", "error")
self._owner.disconnected()
else:
|