X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=ModPython.py;fp=ModPython.py;h=e5f1174dc10cba2339359e1d5662be4dc3036634;hb=24d16d18acab3da7bccc3e09df4927e9cf2d3246;hp=0000000000000000000000000000000000000000;hpb=0a53498e5069b5e5359d171f1d3184de5043cbaa;p=plcapi.git diff --git a/ModPython.py b/ModPython.py new file mode 100644 index 0000000..e5f1174 --- /dev/null +++ b/ModPython.py @@ -0,0 +1,59 @@ +# +# Apache mod_python interface +# +# Aaron Klingaman +# Mark Huang +# +# Copyright (C) 2004-2006 The Trustees of Princeton University +# $Id$ +# + +import sys +import traceback +import xmlrpclib +from mod_python import apache + +from PLC.Debug import log + +from PLC.API import PLCAPI +api = PLCAPI() + +def handler(req): + try: + if req.method != "POST": + req.content_type = "text/html" + req.send_http_header() + req.write(""" + +PLCAPI XML-RPC/SOAP Interface + +

PLCAPI XML-RPC/SOAP Interface

+

Please use XML-RPC or SOAP to access the PLCAPI.

+ +""") + return apache.OK + + # Read request + request = req.read(int(req.headers_in['content-length'])) + + # mod_python < 3.2: The IP address portion of remote_addr is + # incorrect (always 0.0.0.0) when IPv6 is enabled. + # http://issues.apache.org/jira/browse/MODPYTHON-64?page=all + (remote_ip, remote_port) = req.connection.remote_addr + remote_addr = (req.connection.remote_ip, remote_port) + + # Handle request + response = api.handle(remote_addr, request) + + # Write response + req.content_type = "text/xml" + req.headers_out.add("Content-length", str(len(response))) + req.send_http_header() + req.write(response) + + return apache.OK + + except: + # Log error in /var/log/httpd/(ssl_)?error_log + print >> log, traceback.format_exc() + return apache.HTTP_INTERNAL_SERVER_ERROR