patch from Alexey: new function: SendAndCallForResponse.
It will help in resolving locking problems
This commit is contained in:
parent
e4692d22d6
commit
58705bbba5
|
@ -12,7 +12,7 @@
|
||||||
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
## GNU General Public License for more details.
|
## GNU General Public License for more details.
|
||||||
|
|
||||||
# $Id: auth.py,v 1.27 2005/04/30 10:17:20 snakeru Exp $
|
# $Id: auth.py,v 1.28 2005/05/07 02:42:04 snakeru Exp $
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Provides library with all Non-SASL and SASL authentication mechanisms.
|
Provides library with all Non-SASL and SASL authentication mechanisms.
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
## GNU General Public License for more details.
|
## GNU General Public License for more details.
|
||||||
|
|
||||||
# $Id: dispatcher.py,v 1.34 2005/05/02 08:36:41 snakeru Exp $
|
# $Id: dispatcher.py,v 1.35 2005/05/07 03:26:51 snakeru Exp $
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Main xmpppy mechanism. Provides library with methods to assign different handlers
|
Main xmpppy mechanism. Provides library with methods to assign different handlers
|
||||||
|
@ -44,7 +44,8 @@ class Dispatcher(PlugIn):
|
||||||
self._exported_methods=[self.Process,self.RegisterHandler,self.RegisterDefaultHandler,\
|
self._exported_methods=[self.Process,self.RegisterHandler,self.RegisterDefaultHandler,\
|
||||||
self.RegisterEventHandler,self.UnregisterCycleHandler,self.RegisterCycleHandler,\
|
self.RegisterEventHandler,self.UnregisterCycleHandler,self.RegisterCycleHandler,\
|
||||||
self.RegisterHandlerOnce,self.UnregisterHandler,self.RegisterProtocol,\
|
self.RegisterHandlerOnce,self.UnregisterHandler,self.RegisterProtocol,\
|
||||||
self.WaitForResponse,self.SendAndWaitForResponse,self.send,self.disconnect]
|
self.WaitForResponse,self.SendAndWaitForResponse,self.send,self.disconnect,\
|
||||||
|
self.SendAndCallForResponse, ]
|
||||||
|
|
||||||
def dumpHandlers(self):
|
def dumpHandlers(self):
|
||||||
""" Return set of user-registered callbacks in it's internal format.
|
""" Return set of user-registered callbacks in it's internal format.
|
||||||
|
@ -266,9 +267,16 @@ class Dispatcher(PlugIn):
|
||||||
|
|
||||||
output=''
|
output=''
|
||||||
if session._expected.has_key(ID):
|
if session._expected.has_key(ID):
|
||||||
session._expected[ID]=stanza
|
|
||||||
user=0
|
user=0
|
||||||
|
if type(session._expected[ID])==type(()):
|
||||||
|
cb,args=session._expected[ID]
|
||||||
|
session.DEBUG("Expected stanza arrived. Callback %s(%s) found!"%(cb,args),'ok')
|
||||||
|
try: cb(session,stanza,**args)
|
||||||
|
except Exception, typ:
|
||||||
|
if typ.__class__.__name__<>'NodeProcessed': raise
|
||||||
|
else:
|
||||||
session.DEBUG("Expected stanza arrived!",'ok')
|
session.DEBUG("Expected stanza arrived!",'ok')
|
||||||
|
session._expected[ID]=stanza
|
||||||
else: user=1
|
else: user=1
|
||||||
for handler in chain:
|
for handler in chain:
|
||||||
if user or handler['system']:
|
if user or handler['system']:
|
||||||
|
@ -307,6 +315,11 @@ class Dispatcher(PlugIn):
|
||||||
""" Put stanza on the wire and wait for recipient's response to it. """
|
""" Put stanza on the wire and wait for recipient's response to it. """
|
||||||
return self.WaitForResponse(self.send(stanza),timeout)
|
return self.WaitForResponse(self.send(stanza),timeout)
|
||||||
|
|
||||||
|
def SendAndCallForResponse(self, stanza, func, args={}):
|
||||||
|
""" Put stanza on the wire and call back when recipient replies.
|
||||||
|
Additional callback arguments can be specified in args. """
|
||||||
|
self._expected[self.send(stanza)]=(func,args)
|
||||||
|
|
||||||
def send(self,stanza):
|
def send(self,stanza):
|
||||||
""" Serialise stanza and put it on the wire. Assign an unique ID to it before send.
|
""" Serialise stanza and put it on the wire. Assign an unique ID to it before send.
|
||||||
Returns assigned ID."""
|
Returns assigned ID."""
|
||||||
|
|
Loading…
Reference in New Issue