This was needed to support the GENI AM because one of the GENI calls is Resolve, which means that there would be a methods/Resolve.py and a methods/resolve.py, which causes problems on filesystems (like HFS+) that don't support caps. So, now the GENI AM simply creates a mapping from Resolve to ResolveGENI.
This could also be useful if you wanted to host try new methods without replacing the old ones first.
if xrn:
call_options['geni_slice_urn'] = xrn
- rspec = server.ListResources([cred], call_options)
+ rspec = server.Purple([cred], call_options)
rspec = zlib.decompress(rspec.decode('base64'))
print rspec
def __init__(self, ip, port, key_file, cert_file):
SfaServer.__init__(self, ip, port, key_file, cert_file)
self.server.interface = 'geni_am'
-
+ self.server.method_map = {'Resolve': 'ResolveGENI'}
self.source = None
self.time_format = "%Y-%m-%d %H:%M:%S"
self.logger=get_sfa_logger()
+ self.method_map = {}
# load registries
from sfa.server.registry import Registries
self.source = source
return function(*args)
- def handle(self, source, data):
+
+ def handle(self, source, data, method_map):
"""
Handle an XML-RPC or SOAP request from the specified source.
"""
try:
interface = xmlrpclib
(args, method) = xmlrpclib.loads(data)
+ if method_map.has_key(method):
+ method = method_map[method]
methodresponse = True
+
except Exception, e:
if SOAPpy is not None:
interface = SOAPpy
# get arguments
request = self.rfile.read(int(self.headers["content-length"]))
remote_addr = (remote_ip, remote_port) = self.connection.getpeername()
- self.api.remote_addr = remote_addr
- response = self.api.handle(remote_addr, request)
+ self.api.remote_addr = remote_addr
+ response = self.api.handle(remote_addr, request, self.server.method_map)
except Exception, fault:
self.interface = None
self.key_file = key_file
self.cert_file = cert_file
+ self.method_map = {}
+
#for compatibility with python 2.4 (centos53)
if sys.version_info < (2, 5):
SimpleXMLRPCServer.SimpleXMLRPCDispatcher.__init__(self)
##
# Register functions that will be served by the XMLRPC server. This
- # function should be overrided by each descendant class.
+ # function should be overridden by each descendant class.
def register_functions(self):
self.server.register_function(self.noop)