Files
i2p.i2p/apps/sam/python/src/i2p/BaseHTTPServer.py
2004-08-02 14:47:44 +00:00

84 lines
2.2 KiB
Python

#! /usr/bin/env python
"""
Emulation of Python BaseHTTPServer module using I2P sockets.
The Python module is described at
http://www.python.org/doc/current/lib/module-BaseHTTPServer.html
To get a server going, use:
>>> from i2p import BaseHTTPServer
>>> BaseHTTPServer.test().
Consult the documentation for function test() to change basic
server settings, such as the session name.
A fully customizable example:
>>> from i2p import BaseHTTPServer
>>> session = "mytestxxx.i2p" # SAM session name
>>> class MyServer(BaseHTTPServer.HTTPServer): pass
>>> class MyRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler): pass
>>> httpd = MyServer(session, MyRequestHandler)
>>> httpd.socket.dest
(Base64 Destination of server)
>>> httpd.serve_forever()
"""
# By aum.
# Hack to keep Python from importing from current directory:
# Use pylib package, then use = signs instead of from x import y.
import pylib
BaseHTTPServer = pylib.BaseHTTPServer
import sys
import i2p.SocketServer
__version__ = "0.3"
__all__ = ["HTTPServer", "BaseHTTPRequestHandler", "test"]
DEFAULT_ERROR_MESSAGE = BaseHTTPServer.DEFAULT_ERROR_MESSAGE
class HTTPServer(i2p.SocketServer.TCPServer, BaseHTTPServer.HTTPServer):
"""
Same interface as Python class
BaseHTTPServer.HTTPServer.
"""
class BaseHTTPRequestHandler(
i2p.SocketServer.StreamRequestHandler,
BaseHTTPServer.BaseHTTPRequestHandler):
"""
Same interface as Python class
BaseHTTPServer.BaseHTTPRequestHandler.
"""
def test(HandlerClass = BaseHTTPRequestHandler,
ServerClass = HTTPServer, protocol="HTTP/1.0",
session = "mytestxxx.i2p"):
"""
Test the HTTP request handler class.
This runs an I2P TCP server under SAM session 'session'.
If a single command line argument is given, the argument is used
instead as the SAM session name.
"""
if sys.argv[1:] and __name__ == '__main__':
session = sys.argv[1]
HandlerClass.protocol_version = protocol
httpd = ServerClass(session, HandlerClass)
print "Serving HTTP on", session, "..."
print "Destination follows:"
print httpd.socket.dest
httpd.serve_forever()
if __name__ == '__main__':
test()