55See the file 'doc/COPYING' for copying permission
66"""
77
8- from SimpleXMLRPCServer import SimpleXMLRPCServer
8+ import sys
9+ import xmlrpclib
910
10- from lib .controller .controller import start
11- from lib .core .datatype import AttribDict
12- from lib .core .data import cmdLineOptions
13- from lib .core .data import logger
14- from lib .core .option import init
15- from lib .core .settings import XML_RPC_SERVER_PORT
16- from lib .core .settings import UNICODE_ENCODING
11+ try :
12+ from SimpleXMLRPCServer import SimpleXMLRPCServer
13+
14+ from lib .controller .controller import start
15+ from lib .core .datatype import AttribDict
16+ from lib .core .data import cmdLineOptions
17+ from lib .core .data import logger
18+ from lib .core .option import init
19+ from lib .core .settings import UNICODE_ENCODING
20+ from lib .core .settings import XMLRPC_SERVER_PORT
21+ except ImportError :
22+ pass
1723
1824class XMLRPCServer :
19- def __init__ (self ):
25+ def __init__ (self , port ):
26+ self .port = port
2027 self .reset ()
2128
2229 def reset (self ):
@@ -36,11 +43,37 @@ def run(self):
3643 return start ()
3744
3845 def serve (self ):
39- server = SimpleXMLRPCServer (addr = ("" , XML_RPC_SERVER_PORT ), logRequests = False , allow_none = True , encoding = UNICODE_ENCODING )
40- server .register_introspection_functions ()
46+ server = SimpleXMLRPCServer (addr = ("" , self .port ), logRequests = False , allow_none = True , encoding = UNICODE_ENCODING )
4147 server .register_function (self .reset )
4248 server .register_function (self .set_option )
4349 server .register_function (self .get_option )
4450 server .register_function (self .get_option_names )
4551 server .register_function (self .run )
52+ logger .info ("Registering RPC methods: %s" % str (server .system_listMethods ()).strip ("[]" ))
53+ server .register_introspection_functions ()
54+ logger .info ("Running XML-RPC server at '0.0.0.0:%d'..." % self .port )
4655 server .serve_forever ()
56+
57+ if __name__ == "__main__" :
58+ try :
59+ import readline
60+ except ImportError :
61+ pass
62+
63+ server = xmlrpclib .ServerProxy ("http://localhost:%d" % (int (sys .argv [1 ]) if len (sys .argv ) > 1 else 8776 ))
64+
65+ print "[o] Server instance: 'server'"
66+ print "[i] Available RPC methods: %s" % str (server .system .listMethods ()).strip ("[]" )
67+ print "[i] Sample usage: 'server.system.listMethods()'"
68+
69+ while True :
70+ try :
71+ _ = raw_input ("> " )
72+ if not _ .startswith ("print" ):
73+ print eval (_ ) or ""
74+ else :
75+ exec (_ )
76+ except KeyboardInterrupt :
77+ exit (0 )
78+ except Exception , ex :
79+ print "[x] '%s'" % str (ex )
0 commit comments