From fbd9972dd36f360eca53f9c14c38d8e6d67e2e72 Mon Sep 17 00:00:00 2001 From: erickson Date: Sun, 20 Jan 2008 00:00:15 +0000 Subject: [PATCH] added the ability to wait forever by passing <0 to recv. explicitly setting sender address in messages to be correct. added ability to create a message from raw xml git-svn-id: svn://svn.open-ils.org/OpenSRF/trunk@1223 9efc2488-bf62-4759-914b-345cdb29e865 --- src/python/osrf/net.py | 24 ++++++++++++++++++++---- src/python/osrf/ses.py | 7 ++++--- src/python/osrf/stack.py | 1 + 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/src/python/osrf/net.py b/src/python/osrf/net.py index e79b43b..0fd1f95 100644 --- a/src/python/osrf/net.py +++ b/src/python/osrf/net.py @@ -14,12 +14,13 @@ # ----------------------------------------------------------------------- +import os, time, threading from pyxmpp.jabber.client import JabberClient from pyxmpp.message import Message from pyxmpp.jid import JID from socket import gethostname +import libxml2 import osrf.log -import os, time, threading THREAD_SESSIONS = {} @@ -62,6 +63,7 @@ class NetworkMessage(object): self.body = message.get_body() self.thread = message.get_thread() self.recipient = message.get_to() + self.router_command = None if message.xmlnode.hasProp('router_from') and \ message.xmlnode.prop('router_from') != '': self.sender = message.xmlnode.prop('router_from') @@ -74,10 +76,17 @@ class NetworkMessage(object): self.thread = args.get('thread') self.router_command = args.get('router_command') + @staticmethod + def from_xml(xml): + doc=libxml2.parseDoc(xml) + msg = Message(doc.getRootElement()) + return NetworkMessage(msg) + + def make_xmpp_msg(self): ''' Creates a pyxmpp.message.Message and adds custom attributes ''' - msg = Message(None, None, self.recipient, None, None, None, \ + msg = Message(None, self.sender, self.recipient, None, None, None, \ self.body, self.thread) if self.router_command: msg.xmlnode.newProp('router_command', self.router_command) @@ -131,6 +140,7 @@ class Network(JabberClient): def send(self, message): """Sends the provided network message.""" osrf.log.log_internal("jabber sending to %s: %s" % (message.recipient, message.body)) + message.sender = self.jid.as_utf8() msg = message.make_xmpp_msg() self.stream.send(msg) @@ -153,12 +163,18 @@ class Network(JabberClient): returned. """ + forever = False + if timeout < 0: + forever = True + timeout = None + if len(self.queue) == 0: - while timeout >= 0 and len(self.queue) == 0: + while (forever or timeout >= 0) and len(self.queue) == 0: starttime = time.time() act = self.get_stream().loop_iter(timeout) endtime = time.time() - starttime - timeout -= endtime + if not forever: + timeout -= endtime osrf.log.log_internal("exiting stream loop after %s seconds. " "act=%s, queue size=%d" % (str(endtime), act, len(self.queue))) if not act: diff --git a/src/python/osrf/ses.py b/src/python/osrf/ses.py index 4e66f24..92b271b 100644 --- a/src/python/osrf/ses.py +++ b/src/python/osrf/ses.py @@ -257,7 +257,7 @@ class Request(object): self.session.send(message) def recv(self, timeout=120): - """Waits up to seconds for a response to this request. + """ Waits up to seconds for a response to this request. If a message is received in time, the response message is returned. Returns None otherwise.""" @@ -265,10 +265,11 @@ class Request(object): self.session.wait(0) orig_timeout = timeout - while not self.complete and timeout >= 0 and len(self.queue) == 0: + while not self.complete and (timeout >= 0 or orig_timeout < 0) and len(self.queue) == 0: s = time.time() self.session.wait(timeout) - timeout -= time.time() - s + if orig_timeout >= 0: + timeout -= time.time() - s if self.reset_timeout: self.reset_timeout = False timeout = orig_timeout diff --git a/src/python/osrf/stack.py b/src/python/osrf/stack.py index e3da3d9..1c217cc 100644 --- a/src/python/osrf/stack.py +++ b/src/python/osrf/stack.py @@ -30,6 +30,7 @@ def push(net_msg): if not ses: # This is an incoming request from a client, create a new server session osrf.log.log_error("server-side sessions don't exist yet") + return ses.set_remote_id(net_msg.sender) -- 2.11.0