| Index: tools/playback_benchmark/proxy_handler.py
|
| diff --git a/tools/playback_benchmark/proxy_handler.py b/tools/playback_benchmark/proxy_handler.py
|
| deleted file mode 100644
|
| index b45f96067a6d3b5b931a60d8f082af9f0f580eef..0000000000000000000000000000000000000000
|
| --- a/tools/playback_benchmark/proxy_handler.py
|
| +++ /dev/null
|
| @@ -1,122 +0,0 @@
|
| -# Copyright (c) 2011 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.
|
| -"""HTTP proxy request handler with SSL support.
|
| -
|
| - RequestHandler: Utility class for parsing HTTP requests.
|
| - ProxyHandler: HTTP proxy handler.
|
| -"""
|
| -
|
| -import BaseHTTPServer
|
| -import cgi
|
| -import OpenSSL
|
| -import os
|
| -import socket
|
| -import SocketServer
|
| -import sys
|
| -import traceback
|
| -import urlparse
|
| -
|
| -
|
| -class RequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
|
| - """Class for reading HTTP requests and writing HTTP responses"""
|
| -
|
| - protocol_version = "HTTP/1.1"
|
| - request_version = protocol_version
|
| -
|
| - class HTTPRequestException(Exception): pass
|
| -
|
| - def __init__(self, rfile, wfile, server):
|
| - self.rfile = rfile
|
| - self.wfile = wfile
|
| - self.server = server
|
| -
|
| - def ReadRequest(self):
|
| - "Reads and parses single HTTP request from self.rfile"
|
| -
|
| - self.raw_requestline = self.rfile.readline()
|
| - if not self.raw_requestline:
|
| - self.close_connection = 1
|
| - raise HTTPRequestException('failed to read request line')
|
| - if not self.parse_request():
|
| - raise HTTPRequestException('failed to parse request')
|
| - self.headers = dict(self.headers)
|
| - self.body = None
|
| - if 'content-length' in self.headers:
|
| - self.body = self.rfile.read(int(self.headers['content-length']))
|
| -
|
| - def log_message(self, format, *args):
|
| - pass
|
| -
|
| -
|
| -class ProxyHandler(BaseHTTPServer.BaseHTTPRequestHandler):
|
| - "Request handler class for proxy server"
|
| -
|
| - server_version = "PlaybackProxy/0.0.1"
|
| - protocol_version = "HTTP/1.1"
|
| -
|
| - def do_CONNECT(self):
|
| - "Handles CONNECT HTTP request"
|
| -
|
| - server = self.path.split(':')[0]
|
| - certificate_file = os.path.join(self.certificate_directory, server)
|
| - if not os.path.isfile(certificate_file):
|
| - sys.stderr.write('request to connect %s is ignored\n' % server)
|
| - self.send_response(501)
|
| - self.send_header('Proxy-agent', self.version_string())
|
| - self.end_headers()
|
| - return
|
| -
|
| - # Send confirmation to browser.
|
| - self.send_response(200, 'Connection established')
|
| - self.send_header('Proxy-agent', self.version_string())
|
| - self.end_headers()
|
| -
|
| - # Create SSL context.
|
| - context = OpenSSL.SSL.Context(OpenSSL.SSL.SSLv23_METHOD)
|
| - context.use_privatekey_file(certificate_file)
|
| - context.use_certificate_file(certificate_file)
|
| -
|
| - # Create and initialize SSL connection atop of tcp socket.
|
| - ssl_connection = OpenSSL.SSL.Connection(context, self.connection)
|
| - ssl_connection.set_accept_state()
|
| - ssl_connection.do_handshake()
|
| - ssl_rfile = socket._fileobject(ssl_connection, "rb", self.rbufsize)
|
| - ssl_wfile = socket._fileobject(ssl_connection, "wb", self.wbufsize)
|
| -
|
| - # Handle http requests coming from ssl_connection.
|
| - handler = RequestHandler(ssl_rfile, ssl_wfile, self.path)
|
| - try:
|
| - handler.close_connection = 1
|
| - while True:
|
| - handler.ReadRequest()
|
| - self.driver.ProcessRequest(handler)
|
| - if handler.close_connection: break
|
| - except (OpenSSL.SSL.SysCallError, OpenSSL.SSL.ZeroReturnError):
|
| - pass
|
| - finally:
|
| - self.close_connection = 1
|
| -
|
| - def do_GET(self):
|
| - self.driver.ProcessRequest(self)
|
| -
|
| - def do_POST(self):
|
| - if 'content-length' in self.headers:
|
| - self.body = self.rfile.read(int(self.headers['content-length']))
|
| - self.driver.ProcessRequest(self)
|
| -
|
| - def log_message(self, format, *args):
|
| - sys.stdout.write((format % args) + '\n')
|
| -
|
| -
|
| -class ThreadingHTTPServer (SocketServer.ThreadingMixIn,
|
| - BaseHTTPServer.HTTPServer):
|
| - pass
|
| -
|
| -
|
| -def CreateServer(driver, port, certificate_directory=None):
|
| - if not certificate_directory:
|
| - certificate_directory = os.path.join(os.getcwd(), 'certificates')
|
| - ProxyHandler.driver = driver
|
| - ProxyHandler.certificate_directory = certificate_directory
|
| - return ThreadingHTTPServer(('', port), ProxyHandler)
|
|
|