123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- import xmlrpclib, httplib, sys
- # Usage: python xmlrpc_test.py command [params...]
- #
- # python script for sending an xmlrpc command to ser's xmlrpc module.
- # Note: it uses a re-defined transport class that does not depend on the
- # server side closing the connection (it can be used to send multiple
- # commands without closing the connections and it will work without any
- # special workarounds in the ser.cfg xmlrpc route).
- #
- # Credits: the transport class comes from ser_ctl, heavily trimmed to a very
- # basic version (the ser_ctl version is much more complex, supports
- # authentication, ssl a.s.o). See
- # http://git.sip-router.org/cgi-bin/gitweb.cgi?p=ser;a=blob;f=ser_ctl/serctl/serxmlrpc.py#l73 for the original (better) version.
- #
- #
- # History:
- # --------
- # 2009-07-13 initial version (andrei)
- #
- XMLRPC_SERVER = "127.0.0.1"
- XMLRPC_PORT = 5060
- class Transport:
- def __init__(self):
- self.conn=httplib.HTTPConnection(XMLRPC_SERVER, str(XMLRPC_PORT));
- def _http_request(self, uripath, body, host):
- self.conn.request("POST", uripath, body, {})
- def request(self, host, uripath, body, verbose=0):
- self._http_request(uripath, body, host)
- response=self.conn.getresponse()
- if response.status != 200:
- raise xmlrpclib.ProtocolError(host+uripath, response.status,
- response.reason, response.msg)
- data=response.read()
- parser, unmarshaller=xmlrpclib.getparser()
- parser.feed(data)
- parser.close()
- return unmarshaller.close()
- if len(sys.argv) < 2:
- sys.exit("Usage: "+sys.argv[0]+" rpc_command [args...]");
- transport=Transport()
- c=xmlrpclib.ServerProxy("http://" + XMLRPC_SERVER+ ":" + str(XMLRPC_PORT),
- transport)
- res=getattr(c, sys.argv[1])(*sys.argv[2:])
- print res;
|