diff options
Diffstat (limited to 'bitbake/lib/bb/server/xmlrpc.py')
| -rw-r--r-- | bitbake/lib/bb/server/xmlrpc.py | 48 |
1 files changed, 25 insertions, 23 deletions
diff --git a/bitbake/lib/bb/server/xmlrpc.py b/bitbake/lib/bb/server/xmlrpc.py index ace1cf646b..146ca17b51 100644 --- a/bitbake/lib/bb/server/xmlrpc.py +++ b/bitbake/lib/bb/server/xmlrpc.py | |||
| @@ -31,31 +31,33 @@ | |||
| 31 | in the server's main loop. | 31 | in the server's main loop. |
| 32 | """ | 32 | """ |
| 33 | 33 | ||
| 34 | import os | ||
| 35 | import sys | ||
| 36 | |||
| 37 | import hashlib | ||
| 38 | import time | ||
| 39 | import socket | ||
| 40 | import signal | ||
| 41 | import threading | ||
| 42 | import pickle | ||
| 43 | import inspect | ||
| 44 | import select | ||
| 45 | import http.client | ||
| 46 | import xmlrpc.client | ||
| 47 | from xmlrpc.server import SimpleXMLRPCServer, SimpleXMLRPCRequestHandler | ||
| 48 | |||
| 34 | import bb | 49 | import bb |
| 35 | import xmlrpclib, sys | ||
| 36 | from bb import daemonize | 50 | from bb import daemonize |
| 37 | from bb.ui import uievent | 51 | from bb.ui import uievent |
| 38 | import hashlib, time | 52 | from . import BitBakeBaseServer, BitBakeBaseServerConnection, BaseImplServer |
| 39 | import socket | ||
| 40 | import os, signal | ||
| 41 | import threading | ||
| 42 | try: | ||
| 43 | import cPickle as pickle | ||
| 44 | except ImportError: | ||
| 45 | import pickle | ||
| 46 | 53 | ||
| 47 | DEBUG = False | 54 | DEBUG = False |
| 48 | 55 | ||
| 49 | from SimpleXMLRPCServer import SimpleXMLRPCServer, SimpleXMLRPCRequestHandler | 56 | class BBTransport(xmlrpc.client.Transport): |
| 50 | import inspect, select, httplib | ||
| 51 | |||
| 52 | from . import BitBakeBaseServer, BitBakeBaseServerConnection, BaseImplServer | ||
| 53 | |||
| 54 | class BBTransport(xmlrpclib.Transport): | ||
| 55 | def __init__(self, timeout): | 57 | def __init__(self, timeout): |
| 56 | self.timeout = timeout | 58 | self.timeout = timeout |
| 57 | self.connection_token = None | 59 | self.connection_token = None |
| 58 | xmlrpclib.Transport.__init__(self) | 60 | xmlrpc.client.Transport.__init__(self) |
| 59 | 61 | ||
| 60 | # Modified from default to pass timeout to HTTPConnection | 62 | # Modified from default to pass timeout to HTTPConnection |
| 61 | def make_connection(self, host): | 63 | def make_connection(self, host): |
| @@ -67,7 +69,7 @@ class BBTransport(xmlrpclib.Transport): | |||
| 67 | # create a HTTP connection object from a host descriptor | 69 | # create a HTTP connection object from a host descriptor |
| 68 | chost, self._extra_headers, x509 = self.get_host_info(host) | 70 | chost, self._extra_headers, x509 = self.get_host_info(host) |
| 69 | #store the host argument along with the connection object | 71 | #store the host argument along with the connection object |
| 70 | self._connection = host, httplib.HTTPConnection(chost, timeout=self.timeout) | 72 | self._connection = host, http.client.HTTPConnection(chost, timeout=self.timeout) |
| 71 | return self._connection[1] | 73 | return self._connection[1] |
| 72 | 74 | ||
| 73 | def set_connection_token(self, token): | 75 | def set_connection_token(self, token): |
| @@ -76,11 +78,11 @@ class BBTransport(xmlrpclib.Transport): | |||
| 76 | def send_content(self, h, body): | 78 | def send_content(self, h, body): |
| 77 | if self.connection_token: | 79 | if self.connection_token: |
| 78 | h.putheader("Bitbake-token", self.connection_token) | 80 | h.putheader("Bitbake-token", self.connection_token) |
| 79 | xmlrpclib.Transport.send_content(self, h, body) | 81 | xmlrpc.client.Transport.send_content(self, h, body) |
| 80 | 82 | ||
| 81 | def _create_server(host, port, timeout = 60): | 83 | def _create_server(host, port, timeout = 60): |
| 82 | t = BBTransport(timeout) | 84 | t = BBTransport(timeout) |
| 83 | s = xmlrpclib.ServerProxy("http://%s:%d/" % (host, port), transport=t, allow_none=True) | 85 | s = xmlrpc.client.ServerProxy("http://%s:%d/" % (host, port), transport=t, allow_none=True, use_builtin_types=True) |
| 84 | return s, t | 86 | return s, t |
| 85 | 87 | ||
| 86 | class BitBakeServerCommands(): | 88 | class BitBakeServerCommands(): |
| @@ -128,7 +130,7 @@ class BitBakeServerCommands(): | |||
| 128 | def addClient(self): | 130 | def addClient(self): |
| 129 | if self.has_client: | 131 | if self.has_client: |
| 130 | return None | 132 | return None |
| 131 | token = hashlib.md5(str(time.time())).hexdigest() | 133 | token = hashlib.md5(str(time.time()).encode("utf-8")).hexdigest() |
| 132 | self.server.set_connection_token(token) | 134 | self.server.set_connection_token(token) |
| 133 | self.has_client = True | 135 | self.has_client = True |
| 134 | return token | 136 | return token |
| @@ -232,7 +234,7 @@ class XMLRPCServer(SimpleXMLRPCServer, BaseImplServer): | |||
| 232 | while not self.quit: | 234 | while not self.quit: |
| 233 | fds = [self] | 235 | fds = [self] |
| 234 | nextsleep = 0.1 | 236 | nextsleep = 0.1 |
| 235 | for function, data in self._idlefuns.items(): | 237 | for function, data in list(self._idlefuns.items()): |
| 236 | retval = None | 238 | retval = None |
| 237 | try: | 239 | try: |
| 238 | retval = function(self, data, False) | 240 | retval = function(self, data, False) |
| @@ -267,7 +269,7 @@ class XMLRPCServer(SimpleXMLRPCServer, BaseImplServer): | |||
| 267 | pass | 269 | pass |
| 268 | 270 | ||
| 269 | # Tell idle functions we're exiting | 271 | # Tell idle functions we're exiting |
| 270 | for function, data in self._idlefuns.items(): | 272 | for function, data in list(self._idlefuns.items()): |
| 271 | try: | 273 | try: |
| 272 | retval = function(self, data, True) | 274 | retval = function(self, data, True) |
| 273 | except: | 275 | except: |
| @@ -379,7 +381,7 @@ class BitBakeXMLRPCClient(BitBakeBaseServer): | |||
| 379 | bb.warn("Could not create socket for %s:%s (%s)" % (host, port, str(e))) | 381 | bb.warn("Could not create socket for %s:%s (%s)" % (host, port, str(e))) |
| 380 | raise e | 382 | raise e |
| 381 | try: | 383 | try: |
| 382 | self.serverImpl = XMLRPCProxyServer(host, port) | 384 | self.serverImpl = XMLRPCProxyServer(host, port, use_builtin_types=True) |
| 383 | self.connection = BitBakeXMLRPCServerConnection(self.serverImpl, (ip, 0), self.observer_only, featureset) | 385 | self.connection = BitBakeXMLRPCServerConnection(self.serverImpl, (ip, 0), self.observer_only, featureset) |
| 384 | return self.connection.connect(self.token) | 386 | return self.connection.connect(self.token) |
| 385 | except Exception as e: | 387 | except Exception as e: |
