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

Unified Diff: platform_tools/nacl/httpd.py

Issue 1036283002: Remove all code related to NaCl (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Rebase Created 5 years, 9 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « platform_tools/nacl/favicon.ico ('k') | platform_tools/nacl/index.html » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: platform_tools/nacl/httpd.py
diff --git a/platform_tools/nacl/httpd.py b/platform_tools/nacl/httpd.py
deleted file mode 100755
index 2ad1d49438e532f2905d6f7edd68a7e7ddce2f39..0000000000000000000000000000000000000000
--- a/platform_tools/nacl/httpd.py
+++ /dev/null
@@ -1,212 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""A tiny web server.
-
-This is intended to be used for testing, and only run from within the examples
-directory.
-"""
-
-import BaseHTTPServer
-import logging
-import optparse
-import os
-import SimpleHTTPServer
-import SocketServer
-import sys
-import urlparse
-
-
-EXAMPLE_PATH=os.path.dirname(os.path.abspath(__file__))
-NACL_SDK_ROOT = os.getenv('NACL_SDK_ROOT', os.path.dirname(EXAMPLE_PATH))
-
-
-if os.path.exists(NACL_SDK_ROOT):
- sys.path.append(os.path.join(NACL_SDK_ROOT, 'tools'))
- import decode_dump
- import getos
-else:
- NACL_SDK_ROOT=None
-
-last_nexe = None
-last_nmf = None
-
-logging.getLogger().setLevel(logging.INFO)
-
-# Using 'localhost' means that we only accept connections
-# via the loop back interface.
-SERVER_PORT = 5103
-SERVER_HOST = ''
-
-# We only run from the examples directory so that not too much is exposed
-# via this HTTP server. Everything in the directory is served, so there should
-# never be anything potentially sensitive in the serving directory, especially
-# if the machine might be a multi-user machine and not all users are trusted.
-# We only serve via the loopback interface.
-def SanityCheckDirectory():
- httpd_path = os.path.abspath(os.path.dirname(__file__))
- serve_path = os.path.abspath(os.getcwd())
-
- # Verify we are serving from the directory this script came from, or bellow
- if serve_path[:len(httpd_path)] == httpd_path:
- return
- logging.error('For security, httpd.py should only be run from within the')
- logging.error('example directory tree.')
- logging.error('We are currently in %s.' % serve_path)
- sys.exit(1)
-
-
-# An HTTP server that will quit when |is_running| is set to False. We also use
-# SocketServer.ThreadingMixIn in order to handle requests asynchronously for
-# faster responses.
-class QuittableHTTPServer(SocketServer.ThreadingMixIn,
- BaseHTTPServer.HTTPServer):
- def serve_forever(self, timeout=0.5):
- self.is_running = True
- self.timeout = timeout
- while self.is_running:
- self.handle_request()
-
- def shutdown(self):
- self.is_running = False
- return 1
-
-
-# "Safely" split a string at |sep| into a [key, value] pair. If |sep| does not
-# exist in |str|, then the entire |str| is the key and the value is set to an
-# empty string.
-def KeyValuePair(str, sep='='):
- if sep in str:
- return str.split(sep)
- else:
- return [str, '']
-
-
-# A small handler that looks for '?quit=1' query in the path and shuts itself
-# down if it finds that parameter.
-class QuittableHTTPHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
- def send_head(self):
- """Common code for GET and HEAD commands.
-
- This sends the response code and MIME headers.
-
- Return value is either a file object (which has to be copied
- to the outputfile by the caller unless the command was HEAD,
- and must be closed by the caller under all circumstances), or
- None, in which case the caller has nothing further to do.
-
- """
- path = self.translate_path(self.path)
- f = None
- if os.path.isdir(path):
- if not self.path.endswith('/'):
- # redirect browser - doing basically what apache does
- self.send_response(301)
- self.send_header("Location", self.path + "/")
- self.end_headers()
- return None
- for index in "index.html", "index.htm":
- index = os.path.join(path, index)
- if os.path.exists(index):
- path = index
- break
- else:
- return self.list_directory(path)
- ctype = self.guess_type(path)
- try:
- # Always read in binary mode. Opening files in text mode may cause
- # newline translations, making the actual size of the content
- # transmitted *less* than the content-length!
- f = open(path, 'rb')
- except IOError:
- self.send_error(404, "File not found")
- return None
- self.send_response(200)
- self.send_header("Content-type", ctype)
- fs = os.fstat(f.fileno())
- self.send_header("Content-Length", str(fs[6]))
- self.send_header("Last-Modified", self.date_time_string(fs.st_mtime))
- self.send_header('Cache-Control','no-cache, must-revalidate')
- self.send_header('Expires','-1')
- self.end_headers()
- return f
-
- def do_GET(self):
- global last_nexe, last_nmf
- (_, _, path, query, _) = urlparse.urlsplit(self.path)
- url_params = dict([KeyValuePair(key_value)
- for key_value in query.split('&')])
- if 'quit' in url_params and '1' in url_params['quit']:
- self.send_response(200, 'OK')
- self.send_header('Content-type', 'text/html')
- self.send_header('Content-length', '0')
- self.end_headers()
- self.server.shutdown()
- return
-
- if path.endswith('.nexe'):
- last_nexe = path
- if path.endswith('.nmf'):
- last_nmf = path
-
- SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self)
-
- def do_POST(self):
- (_, _,path, query, _) = urlparse.urlsplit(self.path)
- if 'Content-Length' in self.headers:
- if not NACL_SDK_ROOT:
- self.wfile('Could not find NACL_SDK_ROOT to decode trace.')
- return
- data = self.rfile.read(int(self.headers['Content-Length']))
- nexe = '.' + last_nexe
- nmf = '.' + last_nmf
- addr = os.path.join(NACL_SDK_ROOT, 'toolchain',
- getos.GetPlatform() + '_x86_newlib',
- 'bin', 'x86_64-nacl-addr2line')
- decoder = decode_dump.CoreDecoder(nexe, nmf, addr, None, None)
- info = decoder.Decode(data)
- trace = decoder.StackTrace(info)
- decoder.PrintTrace(trace, sys.stdout)
- decoder.PrintTrace(trace, self.wfile)
-
-
-def Run(server_address,
- server_class=QuittableHTTPServer,
- handler_class=QuittableHTTPHandler):
- httpd = server_class(server_address, handler_class)
- logging.info("Starting local server on port %d", server_address[1])
- logging.info("To shut down send http://localhost:%d?quit=1",
- server_address[1])
- try:
- httpd.serve_forever()
- except KeyboardInterrupt:
- logging.info("Received keyboard interrupt.")
- httpd.server_close()
-
- logging.info("Shutting down local server on port %d", server_address[1])
-
-
-def main():
- usage_str = "usage: %prog [options] [optional_portnum]"
- parser = optparse.OptionParser(usage=usage_str)
- parser.add_option(
- '--no_dir_check', dest='do_safe_check',
- action='store_false', default=True,
- help='Do not ensure that httpd.py is being run from a safe directory.')
- (options, args) = parser.parse_args(sys.argv)
- if options.do_safe_check:
- SanityCheckDirectory()
- if len(args) > 2:
- print 'Too many arguments specified.'
- parser.print_help()
- elif len(args) == 2:
- Run((SERVER_HOST, int(args[1])))
- else:
- Run((SERVER_HOST, SERVER_PORT))
- return 0
-
-
-if __name__ == '__main__':
- sys.exit(main())
« no previous file with comments | « platform_tools/nacl/favicon.ico ('k') | platform_tools/nacl/index.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698