|
- #!/usr/bin/env python
- #
- # Copyright (c) 2001 actzero, inc. All rights reserved.
-
- import sys
- sys.path.insert(1, "..")
-
- from SOAPpy import *
-
- # Uncomment to see outgoing HTTP headers and SOAP and incoming
- Config.dumpSOAPIn = 1
- Config.dumpSOAPOut = 1
- Config.debug = 1
-
- # specify name of authorization function
- Config.authMethod = "_authorize"
-
- # Set this to 0 to test authorization
- allowAll = 1
-
- # ask for returned SOAP responses to be converted to basic python types
- Config.simplify_objects = 1
-
-
- # provide a mechanism to stop the server
- run = 1
- def quit():
- global run
- run=0;
-
-
- if Config.SSLserver:
- from M2Crypto import SSL
-
- def _authorize(*args, **kw):
- global allowAll, Config
-
- if Config.debug:
- print("Authorize (function) called! (result = %d)" % allowAll)
- print("Arguments: %s" % kw)
-
- if allowAll:
- return 1
- else:
- return 0
-
- # Simple echo
- def echo(s):
- global Config
-
- # Test of context retrieval
- ctx = Server.GetSOAPContext()
- if Config.debug:
- print("SOAP Context: ", ctx)
-
- return s + s
-
- # An echo class
- class echoBuilder2:
- def echo2(self, val):
- return val * 3
-
- # A class that has an instance variable which is an echo class
- class echoBuilder:
- def __init__(self):
- self.prop = echoBuilder2()
-
- def echo_ino(self, val):
- return val + val
- def _authorize(self, *args, **kw):
- global allowAll, Config
-
- if Config.debug:
- print("Authorize (method) called with arguments:")
- print("*args=%s" % str(args))
- print("**kw =%s" % str(kw))
- print("Approved -> %d" % allowAll)
-
- if allowAll:
- return 1
- else:
- return 0
-
- # Echo with context
- def echo_wc(s, _SOAPContext):
- global Config
-
- c = _SOAPContext
-
- sep = '-' * 72
-
- # The Context object has extra info about the call
- if Config.debug:
- print("-- XML", sep[7:])
- # The original XML request
- print(c.xmldata)
-
- print("-- Header", sep[10:])
- # The SOAP Header or None if not present
- print(c.header)
-
- if c.header:
- print("-- Header.mystring", sep[19:])
- # An element of the SOAP Header
- print(c.header.mystring)
-
- print("-- Body", sep[8:])
- # The whole Body object
- print(c.body)
-
- print("-- Peer", sep[8:])
- if not GSI:
- # The socket object, useful for
- print(c.connection.getpeername())
- else:
- # The socket object, useful for
- print(c.connection.get_remote_address())
- ctx = c.connection.get_security_context()
- print(ctx.inquire()[0].display())
-
- print("-- SOAPAction", sep[14:])
- # The SOAPaction HTTP header
- print(c.soapaction)
-
- print("-- HTTP headers", sep[16:])
- # All the HTTP headers
- print(c.httpheaders)
-
- return s + s
-
- # Echo with keyword arguments
- def echo_wkw(**kw):
- return kw['first'] + kw['second'] + kw['third']
-
- # Simple echo
- def echo_simple(*arg):
- return arg
-
- def echo_header(s, _SOAPContext):
- global Config
-
- c = _SOAPContext
- return s, c.header
-
-
- addr = ('localhost', 9900)
- GSI = 0
- SSL = 0
- if len(sys.argv) > 1 and sys.argv[1] == '-s':
- SSL = 1
- if not Config.SSLserver:
- raise RuntimeError("this Python installation doesn't have OpenSSL and M2Crypto")
- ssl_context = SSL.Context()
- ssl_context.load_cert('validate/server.pem')
- server = SOAPServer(addr, ssl_context = ssl_context)
- prefix = 'https'
- elif len(sys.argv) > 1 and sys.argv[1] == '-g':
- GSI = 1
- from SOAPpy.GSIServer import GSISOAPServer
- server = GSISOAPServer(addr)
- prefix = 'httpg'
- else:
- server = SOAPServer(addr)
- prefix = 'http'
-
- print("Server listening at: %s://%s:%d/" % (prefix, addr[0], addr[1]))
-
- # register the method
- server.registerFunction(echo)
- server.registerFunction(echo, path = "/pathtest")
- server.registerFunction(_authorize)
- server.registerFunction(_authorize, path = "/pathtest")
-
- # Register a whole object
- o = echoBuilder()
- server.registerObject(o, path = "/pathtest")
- server.registerObject(o)
-
- # Register a function which gets called with the Context object
- server.registerFunction(MethodSig(echo_wc, keywords = 0, context = 1),
- path = "/pathtest")
- server.registerFunction(MethodSig(echo_wc, keywords = 0, context = 1))
-
- # Register a function that takes keywords
- server.registerKWFunction(echo_wkw, path = "/pathtest")
- server.registerKWFunction(echo_wkw)
-
- server.registerFunction(echo_simple)
- server.registerFunction(MethodSig(echo_header, keywords=0, context=1))
- server.registerFunction(quit)
-
- # Start the server
- try:
- while run:
- server.handle_request()
- except KeyboardInterrupt:
- pass
|