aboutsummaryrefslogtreecommitdiffstats
path: root/netlib
diff options
context:
space:
mode:
Diffstat (limited to 'netlib')
-rw-r--r--netlib/debug.py8
-rw-r--r--netlib/exceptions.py4
-rw-r--r--netlib/http/http2/connections.py4
-rw-r--r--netlib/tcp.py11
-rw-r--r--netlib/websockets/protocol.py4
5 files changed, 24 insertions, 7 deletions
diff --git a/netlib/debug.py b/netlib/debug.py
index 303a2f6f..a395afcb 100644
--- a/netlib/debug.py
+++ b/netlib/debug.py
@@ -1,5 +1,6 @@
from __future__ import (absolute_import, print_function, division)
+import os
import sys
import threading
import signal
@@ -93,6 +94,7 @@ def dump_stacks(signal, frame, file=sys.stdout):
print("\n".join(code), file=file)
-def register_info_dumpers(): # pragma: no cover
- signal.signal(signal.SIGUSR1, dump_info)
- signal.signal(signal.SIGUSR2, dump_stacks)
+def register_info_dumpers():
+ if os.name != "nt":
+ signal.signal(signal.SIGUSR1, dump_info)
+ signal.signal(signal.SIGUSR2, dump_stacks)
diff --git a/netlib/exceptions.py b/netlib/exceptions.py
index 05f1054b..dec79c22 100644
--- a/netlib/exceptions.py
+++ b/netlib/exceptions.py
@@ -54,3 +54,7 @@ class TlsException(NetlibException):
class InvalidCertificateException(TlsException):
pass
+
+
+class Timeout(TcpException):
+ pass
diff --git a/netlib/http/http2/connections.py b/netlib/http/http2/connections.py
index 8667d370..8f246feb 100644
--- a/netlib/http/http2/connections.py
+++ b/netlib/http/http2/connections.py
@@ -5,7 +5,7 @@ import time
import hyperframe.frame
from hpack.hpack import Encoder, Decoder
-from netlib import utils
+from netlib import utils, strutils
from netlib.http import url
import netlib.http.headers
import netlib.http.response
@@ -230,7 +230,7 @@ class HTTP2Protocol(object):
headers = response.headers.copy()
if ':status' not in headers:
- headers.insert(0, b':status', str(response.status_code).encode('ascii'))
+ headers.insert(0, b':status', strutils.always_bytes(response.status_code))
if hasattr(response, 'stream_id'):
stream_id = response.stream_id
diff --git a/netlib/tcp.py b/netlib/tcp.py
index a8a68139..69dafc1f 100644
--- a/netlib/tcp.py
+++ b/netlib/tcp.py
@@ -967,3 +967,14 @@ class TCPServer(object):
"""
Called after server shutdown.
"""
+
+ def wait_for_silence(self, timeout=5):
+ start = time.time()
+ while 1:
+ if time.time() - start >= timeout:
+ raise exceptions.Timeout(
+ "%s service threads still alive" %
+ self.handler_counter.count
+ )
+ if self.handler_counter.count == 0:
+ return
diff --git a/netlib/websockets/protocol.py b/netlib/websockets/protocol.py
index c1b7be2c..af0eef7d 100644
--- a/netlib/websockets/protocol.py
+++ b/netlib/websockets/protocol.py
@@ -20,7 +20,7 @@ import os
import six
-from netlib import http
+from netlib import http, strutils
websockets_magic = b'258EAFA5-E914-47DA-95CA-C5AB0DC85B11'
VERSION = "13"
@@ -109,4 +109,4 @@ class WebsocketsProtocol(object):
@classmethod
def create_server_nonce(self, client_nonce):
- return base64.b64encode(hashlib.sha1(client_nonce + websockets_magic).digest())
+ return base64.b64encode(hashlib.sha1(strutils.always_bytes(client_nonce) + websockets_magic).digest())