forked from I2P_Developers/i2p.i2p
84 lines
2.2 KiB
Python
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()
|