move sfa.util.server into sfa.server.sfaserver
[sfa.git] / sfa / util / componentserver.py
index 86a00c2..8596977 100644 (file)
@@ -6,28 +6,22 @@
 # TODO: investigate ways to combine this with existing PLC server?
 ##
 
-### $Id: geniserver.py 15849 2009-11-23 01:36:21Z tmack $
-### $URL: https://svn.planet-lab.org/svn/sfa/trunk/sfa/util/geniserver.py $
-
 import sys
 import traceback
 import threading
 import socket, os
-
 import SocketServer
 import BaseHTTPServer
 import SimpleHTTPServer
 import SimpleXMLRPCServer
-
 from OpenSSL import SSL
 
+from sfa.util.sfalogging import logger
 from sfa.trust.certificate import Keypair, Certificate
 from sfa.trust.credential import *
-
 from sfa.util.faults import *
 from sfa.plc.api import ComponentAPI 
-from sfa.util.geniserver import verify_callback, SecureXMLRPCServer
-from sfa.util.debug import log
+from sfa.server.sfaserver import verify_callback, ThreadedServer 
 
 
 ##
@@ -49,7 +43,9 @@ class SecureXMLRpcRequestHandler(SimpleXMLRPCServer.SimpleXMLRPCRequestHandler):
         It was copied out from SimpleXMLRPCServer.py and modified to shutdown the socket cleanly.
         """
         try:
-            self.api = ComponentAPI(peer_cert = self.server.peer_cert, 
+            peer_cert = Certificate()
+            peer_cert.load_from_pyopenssl_x509(self.connection.get_peer_certificate())
+            self.api = ComponentAPI(peer_cert = peer_cert, 
                            interface = self.server.interface, 
                            key_file = self.server.key_file, 
                            cert_file = self.server.cert_file)
@@ -75,6 +71,7 @@ class SecureXMLRpcRequestHandler(SimpleXMLRPCServer.SimpleXMLRPCRequestHandler):
             # internal error, report as HTTP server error
             self.send_response(500)
             self.end_headers()
+            logger.log_exc("componentserver.SecureXMLRpcRequestHandler.do_POST")
         else:
             # got a valid XML RPC response
             self.send_response(200)
@@ -88,7 +85,7 @@ class SecureXMLRpcRequestHandler(SimpleXMLRPCServer.SimpleXMLRPCRequestHandler):
             self.connection.shutdown() # Modified here!
 
 ##
-# Implements an HTTPS XML-RPC server. Generally it is expected that GENI
+# Implements an HTTPS XML-RPC server. Generally it is expected that SFA
 # functions will take a credential string, which is passed to
 # decode_authentication. Decode_authentication() will verify the validity of
 # the credential, and verify that the user is using the key that matches the
@@ -97,7 +94,7 @@ class SecureXMLRpcRequestHandler(SimpleXMLRPCServer.SimpleXMLRPCRequestHandler):
 class ComponentServer(threading.Thread):
 
     ##
-    # Create a new GeniServer object.
+    # Create a new SfaServer object.
     #
     # @param ip the ip address to listen on
     # @param port the port to listen on
@@ -109,7 +106,7 @@ class ComponentServer(threading.Thread):
         threading.Thread.__init__(self)
         self.key = Keypair(filename = key_file)
         self.cert = Certificate(filename = cert_file)
-        self.server = SecureXMLRPCServer((ip, port), SecureXMLRpcRequestHandler, key_file, cert_file)
+        self.server = ThreadedServer((ip, port), SecureXMLRpcRequestHandler, key_file, cert_file)
         self.trusted_cert_list = None
         self.register_functions()