1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
# Copyright (c) 2008, Media Modifications Ltd.
#Permission is hereby granted, free of charge, to any person obtaining a copy
#of this software and associated documentation files (the "Software"), to deal
#in the Software without restriction, including without limitation the rights
#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
#copies of the Software, and to permit persons to whom the Software is
#furnished to do so, subject to the following conditions:
#The above copyright notice and this permission notice shall be included in
#all copies or substantial portions of the Software.
#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
#THE SOFTWARE.
import urlparse
import urllib
import posixpath
import SimpleHTTPServer
import BaseHTTPServer
class Server(BaseHTTPServer.HTTPServer):
def __init__(self, server_address, logic):
BaseHTTPServer.HTTPServer.__init__(self, server_address, RegHandler)
self.logic = logic
#RegHandler extends SimpleHTTPServer.py (in python 2.4)
class RegHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
def do_POST( self ):
self.translate_path()
def do_GET( self ):
self.translate_path()
def do_HEAD( self ):
self.translate_path()
def translate_path(self):
#todo: compare with send_head in parent
urlp = urlparse.urlparse(self.path)
urls = urlp[2]
urls = posixpath.normpath(urllib.unquote(urls))
urlPath = urls.split('/')
urlPath = filter(None, urlPath)
params = urlp[4]
parama = []
allParams = params.split('&')
for i in range (0, len(allParams)):
parama.append(allParams[i].split('='))
result = self.server.logic.doServerLogic(self.path, urlPath, parama)
self.send_response(200)
for i in range (0, len(result.headers)):
self.send_header( result.headers[i][0], result.headers[i][1] )
self.end_headers()
self.wfile.write( result.txt )
|