summaryrefslogtreecommitdiffstats
path: root/net/tools/testserver
diff options
context:
space:
mode:
authordavidben@chromium.org <davidben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-10 17:56:44 +0000
committerdavidben@chromium.org <davidben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-10 17:56:44 +0000
commit46b5cd9c68e6165d13608b41b5fafcfd93dbbac7 (patch)
treef906fb507286ebc033be52cdab407602e5d2a651 /net/tools/testserver
parentf8ef310be3f196ae5df2ed39e8b1057c5dddf782 (diff)
downloadchromium_src-46b5cd9c68e6165d13608b41b5fafcfd93dbbac7.zip
chromium_src-46b5cd9c68e6165d13608b41b5fafcfd93dbbac7.tar.gz
chromium_src-46b5cd9c68e6165d13608b41b5fafcfd93dbbac7.tar.bz2
Update tlslite to 0.4.6.
This lets us get drop many of our patches. It also adds NPN support for free. On the downside, it introduces a handful of new bugs that need additional patches. BUG=115301 Review URL: https://codereview.chromium.org/210323002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@263026 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/tools/testserver')
-rwxr-xr-xnet/tools/testserver/testserver.py44
-rw-r--r--net/tools/testserver/testserver_base.py8
2 files changed, 40 insertions, 12 deletions
diff --git a/net/tools/testserver/testserver.py b/net/tools/testserver/testserver.py
index 13aafcd..92aee0d 100755
--- a/net/tools/testserver/testserver.py
+++ b/net/tools/testserver/testserver.py
@@ -39,24 +39,37 @@ import zlib
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
ROOT_DIR = os.path.dirname(os.path.dirname(os.path.dirname(BASE_DIR)))
-import echo_message
-import testserver_base
+# Temporary hack to deal with tlslite 0.3.8 -> 0.4.6 upgrade.
+#
+# TODO(davidben): Remove this when it has cycled through all the bots and
+# developer checkouts or when http://crbug.com/356276 is resolved.
+try:
+ os.remove(os.path.join(ROOT_DIR, 'third_party', 'tlslite',
+ 'tlslite', 'utils', 'hmac.pyc'))
+except Exception:
+ pass
# Append at the end of sys.path, it's fine to use the system library.
sys.path.append(os.path.join(ROOT_DIR, 'third_party', 'pyftpdlib', 'src'))
-sys.path.append(os.path.join(ROOT_DIR, 'third_party', 'tlslite'))
-import pyftpdlib.ftpserver
-import tlslite
-import tlslite.api
-# Insert at the beginning of the path, we want this to be used
+# Insert at the beginning of the path, we want to use our copies of the library
# unconditionally.
sys.path.insert(0, os.path.join(ROOT_DIR, 'third_party', 'pywebsocket', 'src'))
+sys.path.insert(0, os.path.join(ROOT_DIR, 'third_party', 'tlslite'))
+
import mod_pywebsocket.standalone
from mod_pywebsocket.standalone import WebSocketServer
# import manually
mod_pywebsocket.standalone.ssl = ssl
+import pyftpdlib.ftpserver
+
+import tlslite
+import tlslite.api
+
+import echo_message
+import testserver_base
+
SERVER_HTTP = 0
SERVER_FTP = 1
SERVER_TCP_ECHO = 2
@@ -142,7 +155,8 @@ class HTTPSServer(tlslite.api.TLSSocketServerMixIn,
ssl_client_auth, ssl_client_cas, ssl_bulk_ciphers,
record_resume_info, tls_intolerant, signed_cert_timestamps,
fallback_scsv_enabled, ocsp_response):
- self.cert_chain = tlslite.api.X509CertChain().parseChain(pem_cert_and_key)
+ self.cert_chain = tlslite.api.X509CertChain()
+ self.cert_chain.parsePemList(pem_cert_and_key)
# Force using only python implementation - otherwise behavior is different
# depending on whether m2crypto Python module is present (error is thrown
# when it is). m2crypto uses a C (based on OpenSSL) implementation under
@@ -152,7 +166,10 @@ class HTTPSServer(tlslite.api.TLSSocketServerMixIn,
implementations=['python'])
self.ssl_client_auth = ssl_client_auth
self.ssl_client_cas = []
- self.tls_intolerant = tls_intolerant
+ if tls_intolerant == 0:
+ self.tls_intolerant = None
+ else:
+ self.tls_intolerant = (3, tls_intolerant)
self.signed_cert_timestamps = signed_cert_timestamps
self.fallback_scsv_enabled = fallback_scsv_enabled
self.ocsp_response = ocsp_response
@@ -1436,11 +1453,14 @@ class TestPageHandler(testserver_base.BasePageHandler):
self.send_header('Content-Type', 'text/plain')
self.end_headers()
try:
- for (action, sessionID) in self.server.session_cache.log:
- self.wfile.write('%s\t%s\n' % (action, sessionID.encode('hex')))
+ log = self.server.session_cache.log
except AttributeError:
self.wfile.write('Pass --https-record-resume in order to use' +
' this request')
+ return True
+
+ for (action, sessionID) in log:
+ self.wfile.write('%s\t%s\n' % (action, bytes(sessionID).encode('hex')))
return True
def SSLManySmallRecords(self):
@@ -1470,7 +1490,7 @@ class TestPageHandler(testserver_base.BasePageHandler):
self.send_response(200)
self.send_header('Content-Type', 'text/plain')
self.end_headers()
- channel_id = self.server.tlsConnection.channel_id.tostring()
+ channel_id = bytes(self.server.tlsConnection.channel_id)
self.wfile.write(hashlib.sha256(channel_id).digest().encode('base64'))
return True
diff --git a/net/tools/testserver/testserver_base.py b/net/tools/testserver/testserver_base.py
index 455ca5c..0d3f65f 100644
--- a/net/tools/testserver/testserver_base.py
+++ b/net/tools/testserver/testserver_base.py
@@ -14,6 +14,8 @@ import struct
import sys
import warnings
+import tlslite.errors
+
# Ignore deprecation warnings, they make our output more cluttered.
warnings.filterwarnings("ignore", category=DeprecationWarning)
@@ -71,6 +73,9 @@ class BrokenPipeHandlerMixIn:
def handle_error(self, request, client_address):
value = sys.exc_info()[1]
+ if isinstance(value, tlslite.errors.TLSClosedConnectionError):
+ print "testserver.py: Closed connection"
+ return
if isinstance(value, socket.error):
err = value.args[0]
if sys.platform in ('win32', 'cygwin'):
@@ -81,6 +86,9 @@ class BrokenPipeHandlerMixIn:
if err == pipe_err:
print "testserver.py: Broken pipe"
return
+ if err == errno.ECONNRESET:
+ print "testserver.py: Connection reset by peer"
+ return
SocketServer.BaseServer.handle_error(self, request, client_address)