]> git.mxchange.org Git - quix0rs-apt-p2p.git/blob - xmlrpcclient.py
more constants
[quix0rs-apt-p2p.git] / xmlrpcclient.py
1 from twisted.internet.protocol import ClientFactory
2 from twisted.protocols.http import HTTPClient
3 from twisted.internet.defer import Deferred
4
5 from xmlrpclib import loads, dumps
6
7 USER_AGENT = 'Python/Twisted XMLRPC 0.1'
8 class XMLRPCClient(HTTPClient):
9     def connectionMade(self):
10         payload = dumps(self.args, self.method)
11         self.sendCommand('POST', '/RPC2')
12         self.sendHeader('User-Agent', USER_AGENT)
13         self.sendHeader('Content-Type', 'text/xml')
14         self.sendHeader('Content-Length', len(payload))
15         self.endHeaders()
16         self.transport.write(payload)
17         self.transport.write('\r\n')
18         
19     def handleResponse(self, buf):
20         try:
21             args, name = loads(buf)
22         except Exception, e:
23             print "response decode error: " + `e`
24             self.d.errback()
25         else:
26             l = []
27             for i in args:
28                 l.append(i)
29             l.append({'host' : self.transport.getHost()[1]})
30             apply(self.d.callback, (l,))
31
32 class XMLRPCClientFactory(ClientFactory):
33     def __init__(self, method, args, callback=None, errback=None):
34         self.method = method
35         self.args = args
36         self.d = Deferred()
37         if callback:
38             self.d.addCallback(callback)
39         if errback:
40             self.d.addErrback(errback)
41             
42     def buildProtocol(self, addr):
43         prot =  XMLRPCClient()
44         prot.method = self.method
45         prot.args = self.args
46         prot.d = self.d
47         return prot
48
49     def clientConnectionFailed(self, connector, reason):
50         self.d.errback()