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

Unified Diff: Tools/Scripts/webkitpy/thirdparty/webpagereplay/replayspdyserver.py

Issue 18418010: Check in the thirdparty libs needed for webkitpy. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years, 5 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
Index: Tools/Scripts/webkitpy/thirdparty/webpagereplay/replayspdyserver.py
diff --git a/Tools/Scripts/webkitpy/thirdparty/webpagereplay/replayspdyserver.py b/Tools/Scripts/webkitpy/thirdparty/webpagereplay/replayspdyserver.py
new file mode 100755
index 0000000000000000000000000000000000000000..bdcd96e36223e501bf52d73258d67462f543a8cb
--- /dev/null
+++ b/Tools/Scripts/webkitpy/thirdparty/webpagereplay/replayspdyserver.py
@@ -0,0 +1,125 @@
+#!/usr/bin/env python
+# Copyright 2010 Google Inc. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import daemonserver
+import logging
+import httparchive
+import os
+import sys
+import threading
+import time
+
+import third_party
+from nbhttp import spdy_server
+from nbhttp import push_tcp
+from nbhttp import http_common
+
+CONTENT_LENGTH = 'content-length'
+STATUS = 'status'
+VERSION = 'version'
+
+class ReplaySpdyServer(daemonserver.DaemonServer):
+ def __init__(self, http_archive_fetch, custom_handlers,
+ host='localhost', port=80, certfile=None, keyfile=None):
+ """Initialize ReplaySpdyServer.
+
+ The private key may be stored in |certfile|. If so, |keyfile|
+ may be left unset.
+ """
+ #TODO(lzheng): figure out how to get the log level from main.
+ self.log = logging.getLogger('ReplaySpdyServer')
+ self.log.setLevel(logging.INFO)
+ self.http_archive_fetch = http_archive_fetch
+ self.custom_handlers = custom_handlers
+ self.host = host
+ self.port = port
+ self.use_ssl = certfile is not None
+ self.spdy_server = spdy_server.SpdyServer(
+ host, port, self.use_ssl, certfile, keyfile, self.request_handler,
+ self.log)
+
+ def serve_forever(self):
+ self.log.info('Replaying with SPDY on %s:%d', self.host, self.port)
+ push_tcp.run()
+
+ def cleanup(self):
+ push_tcp.stop()
+ self.log.info('Stopped spdy server')
+
+ def request_handler(self, method, uri, hdrs, res_start, req_pause):
+ """
+ Based on method, host and uri to fetch the matching response and reply
+ to browser using spdy.
+ """
+ dummy = http_common.dummy
+ def simple_responder(code, content):
+ res_hdrs = [('content-type', 'text/html'), ('version', 'HTTP/1.1')]
+ res_body, res_done = res_start(str(code), content, res_hdrs, dummy)
+ res_body(None)
+ res_done(None)
+
+ host = ''
+ for name, value in hdrs:
+ if name.lower() == 'host':
+ host = value
+ self.log.debug("request: %s, uri: %s, method: %s", host, uri, method)
+
+ if method == 'GET':
+ request = httparchive.ArchivedHttpRequest(
+ method, host, uri, None, dict(hdrs))
+ response_code = self.custom_handlers.handle(request)
+ if response_code:
+ simple_responder(response_code, "Handled by custom handlers")
+ return dummy, dummy
+ response = self.http_archive_fetch(request)
+ if response:
+ res_hdrs = [('version', 'HTTP/1.1')]
+ for name, value in response.headers:
+ name_lower = name.lower()
+ if name_lower == CONTENT_LENGTH:
+ res_hdrs.append((name, str(value)))
+ elif name_lower in (STATUS, VERSION):
+ pass
+ else:
+ res_hdrs.append((name_lower, value))
+ res_body, res_done = res_start(
+ str(response.status), response.reason, res_hdrs, dummy)
+ body = ''
+ for item in response.response_data:
+ res_body(item)
+ res_done(None)
+ else:
+ self.log.error("404 returned: %s %s", method, uri)
+ simple_responder(404, "file not found")
+ else:
+ # TODO(lzheng): Add support for other methods.
+ self.log.error("method: %s is not supported: %s", method, uri)
+ simple_responder(500, "Not supported")
+ return dummy, dummy
+
+
+if __name__ == "__main__":
+ logging.basicConfig()
+ log = logging.getLogger('server')
+ log.setLevel(logging.INFO)
+ filename = sys.argv[1]
+ host = '127.0.0.1'
+ port = 8088
+ server = ReplaySpdyServer(filename, host, port)
+ server_thread = threading.Thread(target=server.serve_forever)
+ server_thread.setDaemon(True)
+ server_thread.start()
+ time.sleep(60)
+ server.cleanup();

Powered by Google App Engine
This is Rietveld 408576698