aboutsummaryrefslogtreecommitdiffstats
path: root/netlib
diff options
context:
space:
mode:
Diffstat (limited to 'netlib')
-rw-r--r--netlib/h2/__init__.py28
-rw-r--r--netlib/h2/frame.py16
2 files changed, 30 insertions, 14 deletions
diff --git a/netlib/h2/__init__.py b/netlib/h2/__init__.py
index 054ba91c..c06f7a11 100644
--- a/netlib/h2/__init__.py
+++ b/netlib/h2/__init__.py
@@ -1,8 +1,11 @@
from __future__ import (absolute_import, print_function, division)
import itertools
+import logging
-from .. import utils
from .frame import *
+from .. import utils
+
+log = logging.getLogger(__name__)
class HTTP2Protocol(object):
@@ -49,7 +52,7 @@ class HTTP2Protocol(object):
if alp != self.ALPN_PROTO_H2:
raise NotImplementedError(
"H2Client can not handle unknown ALP: %s" % alp)
- print("-> Successfully negotiated 'h2' application layer protocol.")
+ log.debug("ALP 'h2' successfully negotiated.")
def send_connection_preface(self):
self.wfile.write(bytes(self.CLIENT_CONNECTION_PREFACE.decode('hex')))
@@ -60,7 +63,7 @@ class HTTP2Protocol(object):
self._apply_settings(frame.settings)
self.read_frame() # read setting ACK frame
- print("-> Connection Preface completed.")
+ log.debug("Connection Preface completed.")
def next_stream_id(self):
if self.current_stream_id is None:
@@ -88,13 +91,13 @@ class HTTP2Protocol(object):
old_value = '-'
self.http2_settings[setting] = value
- print("-> Setting changed: %s to %d (was %s)" % (
+ log.debug("Setting changed: %s to %d (was %s)" % (
SettingsFrame.SETTINGS.get_name(setting),
value,
str(old_value)))
self.send_frame(SettingsFrame(state=self, flags=Frame.FLAG_ACK))
- print("-> New settings acknowledged.")
+ log.debug("New settings acknowledged.")
def _create_headers(self, headers, stream_id, end_stream=True):
# TODO: implement max frame size checks and sending in chunks
@@ -103,11 +106,13 @@ class HTTP2Protocol(object):
if end_stream:
flags |= Frame.FLAG_END_STREAM
+ header_block_fragment = self.encoder.encode(headers)
+
bytes = HeadersFrame(
state=self,
flags=flags,
stream_id=stream_id,
- headers=headers).to_bytes()
+ header_block_fragment=header_block_fragment).to_bytes()
return [bytes]
def _create_body(self, body, stream_id):
@@ -150,8 +155,8 @@ class HTTP2Protocol(object):
if frame.flags | Frame.FLAG_END_HEADERS:
break
else:
- print("Unexpected frame received:")
- print(frame.human_readable())
+ log.debug("Unexpected frame received:")
+ log.debug(frame.human_readable())
while True:
frame = self.read_frame()
@@ -160,11 +165,14 @@ class HTTP2Protocol(object):
if frame.flags | Frame.FLAG_END_STREAM:
break
else:
- print("Unexpected frame received:")
- print(frame.human_readable())
+ log.debug("Unexpected frame received:")
+ log.debug(frame.human_readable())
headers = {}
for header, value in self.decoder.decode(header_block_fragment):
headers[header] = value
+ for header, value in headers.items():
+ log.debug("%s: %s" % (header, value))
+
return headers[':status'], headers, body
diff --git a/netlib/h2/frame.py b/netlib/h2/frame.py
index 0755c96c..018e822f 100644
--- a/netlib/h2/frame.py
+++ b/netlib/h2/frame.py
@@ -1,9 +1,14 @@
import struct
+import logging
+from functools import reduce
from hpack.hpack import Encoder, Decoder
from .. import utils
-from functools import reduce
+log = logging.getLogger(__name__)
+
+class FrameSizeError(Exception):
+ pass
class Frame(object):
@@ -57,10 +62,11 @@ class Frame(object):
else:
settings = HTTP2Protocol.HTTP2_DEFAULT_SETTINGS
- max_frame_size = settings[SettingsFrame.SETTINGS.SETTINGS_MAX_FRAME_SIZE]
+ max_frame_size = settings[
+ SettingsFrame.SETTINGS.SETTINGS_MAX_FRAME_SIZE]
if length > max_frame_size:
- raise NotImplementedError(
+ raise FrameSizeError(
"Frame size exceeded: %d, but only %d allowed." % (
length, max_frame_size))
@@ -248,7 +254,9 @@ class HeadersFrame(Frame):
if self.flags & self.FLAG_PADDED:
s.append("padding: %d" % self.pad_length)
- s.append("header_block_fragment: %s" % self.header_block_fragment.encode('hex'))
+ s.append(
+ "header_block_fragment: %s" %
+ self.header_block_fragment.encode('hex'))
return "\n".join(s)