Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(199)

Side by Side Diff: tests/translation_service/server.py

Issue 3356014: HTTP service that converts *.bc to *.nexe.... (Closed) Base URL: svn://svn.chromium.org/native_client/trunk/src/native_client/
Patch Set: '' Created 10 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « tests/translation_service/npp_gate.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Property Changes:
Added: svn:eol-style
+ LF
OLDNEW
(Empty)
1 import bc2nexe
2 import time
3 import sys
4 import urlparse
5 import urllib
6 import tempfile
7 import socket
8 import thread
9 from cache import *
10 from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
11
12 class TranslateHandler(BaseHTTPRequestHandler):
13 prefix = '/service?'
14 # 10Mb translation cache
15 cache = TranslationCache('./cache', 10 << 20)
16 def do_GET(self):
17 try:
18 print self.server.server_port, self.path
19 # You can't haz parent directories
20 path = os.path.normpath(self.path)
21 # Serve static data - for testing purposes
22 if not self.path.startswith(TranslateHandler.prefix):
23 f = open('.' + path, 'rb')
24 self.send_response(200)
25 self.end_headers()
26 self.wfile.write(f.read())
27 f.close()
28 return
29 params = path[len(TranslateHandler.prefix):]
30 params = urlparse.parse_qs(params, True)
31 if not params.has_key('arch'):
32 self.send_error(404, 'arch param not found')
33 return
34 arch = params['arch'][0]
35 if not arch in ['x86-32', 'x86-64', 'arm']:
36 self.send_error(404, 'arch param must be one of '
37 'x86-32, x86-64, arm')
38 return
39 if not params.has_key('url'):
40 self.send_error(404, 'url param not found')
41 url = params['url'][0]
42 if not url.startswith('http://') and not url.startswith('https://'):
43 url = 'http://' + url
44 t0 = time.time()
45 tmpFile = tempfile.NamedTemporaryFile()
46 try:
47 _, message = urllib.urlretrieve(url, tmpFile.name)
48 print "retrieve", "%.3f" % (time.time() - t0)
49 if url.endswith(".nexe"):
50 self.send_response(200)
51 self.send_header('Content-type', '')
52 self.end_headers()
53 self.wfile.write(tmpFile.read())
54 return
55 outFile = None
56 try:
57 nexe_file, bc_key = TranslateHandler.cache.get_nexe(
58 tmpFile.name, (arch,))
59 if nexe_file is None:
60 inst = bc2nexe.Compiler('../../..')
61 outFile = tempfile.NamedTemporaryFile()
62 inst.generateNEXE([tmpFile.name], arch, outFile.name)
63 TranslateHandler.cache.cache_nexe(
64 tmpFile.name, outFile.name,
65 (arch,), file_key = bc_key)
66 else:
67 outFile = open(nexe_file, 'rb')
68 self.send_response(200)
69 self.send_header('Content-type', 'application/x-nacl-srpc')
70 self.end_headers()
71 t0 = time.time()
72 self.wfile.write(outFile.read())
73 print "send", "%.3f" % (time.time() - t0)
74 finally:
75 if not (outFile is None):
76 outFile.close()
77 finally:
78 tmpFile.close()
79 except IOError, error:
80 print error
81 self.send_error(404, str(error))
82 except bc2nexe.TranslateError, error:
83 print error
84 self.send_error(500, str(error))
85 def startserver(port):
86 try:
87 server = HTTPServer(('', port), TranslateHandler)
88 server.serve_forever()
89 except KeyboardInterrupt:
90 server.socket.close()
91 sys.exit(0)
92 if __name__ == '__main__':
93 socket.setdefaulttimeout(30)
94 # Our servers are single-threaded, so we need one server to retrieve
95 # the bitcode and another server to compile it.
96 thread.start_new_thread(startserver, (4444,))
97 startserver(4445)
OLDNEW
« no previous file with comments | « tests/translation_service/npp_gate.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698