|
- #!/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
|