Skip to content
This repository has been archived by the owner on Jan 13, 2021. It is now read-only.

Commit

Permalink
Allow unexpected frames.
Browse files Browse the repository at this point in the history
  • Loading branch information
Lukasa committed Jun 18, 2014
1 parent 9b22c98 commit f229d37
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 7 deletions.
13 changes: 10 additions & 3 deletions hyper/http20/connection.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,9 @@
from .stream import Stream
from .tls import wrap_socket
from .frame import (
DataFrame, HeadersFrame, PushPromiseFrame, RstStreamFrame, SettingsFrame,
Frame, WindowUpdateFrame, GoAwayFrame, PingFrame, BlockedFrame
FRAMES, DataFrame, HeadersFrame, PushPromiseFrame, RstStreamFrame,
SettingsFrame, Frame, WindowUpdateFrame, GoAwayFrame, PingFrame,
BlockedFrame
)
from .response import HTTP20Response, HTTP20Push
from .window import FlowControlManager
Expand Down Expand Up @@ -362,8 +363,14 @@ def receive_frame(self, frame):
f = WindowUpdateFrame(0)
f.window_increment = increment
self._send_cb(f, True)
else:
elif frame.type in FRAMES:
# This frame isn't valid at this point.
raise ValueError("Unexpected frame %s." % frame)
else: # pragma: no cover
# Unexpected frames belong to extensions. Just drop it on the
# floor, but log so that users know that something happened.
log.warning("Received unknown frame, type %d" % frame.type)
pass

def _update_settings(self, frame):
"""
Expand Down
17 changes: 13 additions & 4 deletions hyper/http20/stream.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,16 @@
the stream by the endpoint that initiated the stream.
"""
from .frame import (
FRAME_MAX_LEN, HeadersFrame, DataFrame, PushPromiseFrame, WindowUpdateFrame,
ContinuationFrame, BlockedFrame
FRAME_MAX_LEN, FRAMES, HeadersFrame, DataFrame, PushPromiseFrame,
WindowUpdateFrame, ContinuationFrame, BlockedFrame
)
from .util import get_from_key_value_set
import collections
import logging
import zlib

log = logging.getLogger(__name__)


# Define a set of states for a HTTP/2 stream.
STATE_IDLE = 0
Expand Down Expand Up @@ -216,8 +219,14 @@ def receive_frame(self, frame):
w = WindowUpdateFrame(self.stream_id)
w.window_increment = increment
self._data_cb(w, True)
else:
raise ValueError('Unexpected frame type: %i' % frame.type)
elif frame.type in FRAMES:
# This frame isn't valid at this point.
raise ValueError("Unexpected frame %s." % frame)
else: # pragma: no cover
# Unknown frames belong to extensions. Just drop it on the
# floor, but log so that users know that something happened.
log.warning("Received unknown frame, type %d" % frame.type)
pass

if 'END_HEADERS' in frame.flags:
headers = self._decoder.decode(b''.join(self.header_data))
Expand Down

0 comments on commit f229d37

Please sign in to comment.