diff --git a/chat/chat.py b/chat/chat.py index f4716ede..a5f3fc8a 100755 --- a/chat/chat.py +++ b/chat/chat.py @@ -344,7 +344,7 @@ class GroupChat(Chat): chat = BuddyChat(self, sender) sender.set_chat(chat) chat.activity_connect_to_shell() - chat.recv_message(sender, msg) + chat.recv_message(message) def run(self): try: diff --git a/chat/network.py b/chat/network.py index dc80a943..bc1aa8c8 100644 --- a/chat/network.py +++ b/chat/network.py @@ -75,6 +75,41 @@ class GlibXMLRPCServer(GlibTCPServer, SimpleXMLRPCServer.SimpleXMLRPCDispatcher) SimpleXMLRPCServer.SimpleXMLRPCDispatcher.__init__(self) GlibTCPServer.__init__(self, addr, requestHandler) + def _marshaled_dispatch(self, data, dispatch_method = None): + """Dispatches an XML-RPC method from marshalled (XML) data. + + XML-RPC methods are dispatched from the marshalled (XML) data + using the _dispatch method and the result is returned as + marshalled data. For backwards compatibility, a dispatch + function can be provided as an argument (see comment in + SimpleXMLRPCRequestHandler.do_POST) but overriding the + existing method through subclassing is the prefered means + of changing method dispatch behavior. + """ + + params, method = xmlrpclib.loads(data) + + # generate response + try: + if dispatch_method is not None: + response = dispatch_method(method, params) + else: + response = self._dispatch(method, params) + # wrap response in a singleton tuple + response = (response,) + response = xmlrpclib.dumps(response, methodresponse=1) + except Fault, fault: + response = xmlrpclib.dumps(fault) + except: + print "Exception while processing request:" + traceback.print_exc() + # report exception back to server + response = xmlrpclib.dumps( + xmlrpclib.Fault(1, "%s:%s" % (sys.exc_type, sys.exc_value)) + ) + + return response + class GroupChatController(object): diff --git a/chat/p2p.py b/chat/p2p.py index 381180b1..2a91beee 100644 --- a/chat/p2p.py +++ b/chat/p2p.py @@ -2,6 +2,7 @@ import os import pwd import xmlrpclib import socket +import traceback import presence import BuddyList @@ -14,7 +15,6 @@ class GroupRequestHandler(object): def message(self, message): address = network.get_authinfo() self._group.recv(address[0], message) - return True class Owner: instance = None @@ -93,9 +93,11 @@ class Group: peer = xmlrpclib.ServerProxy(addr) success = True try: + print self._serialize_msg(pipe_id, msg) peer.message(self._serialize_msg(pipe_id, msg)) - except (socket.error, xmlrpclib.Fault), e: - print str(e) + except (socket.error, xmlrpclib.Fault, xmlrpclib.ProtocolError), e: + print "Message Send Error:" + traceback.print_exc() success = False return success