Skip to content

Commit 73e23d2

Browse files
committed
Return UnknownFrameReceived when appropriate
1 parent 944b557 commit 73e23d2

File tree

2 files changed

+8
-4
lines changed

2 files changed

+8
-4
lines changed

h2/connection.py

+5-3
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
from .events import (
2424
WindowUpdated, RemoteSettingsChanged, PingAcknowledged,
2525
SettingsAcknowledged, ConnectionTerminated, PriorityUpdated,
26-
AlternativeServiceAvailable,
26+
AlternativeServiceAvailable, UnknownFrameReceived
2727
)
2828
from .exceptions import (
2929
ProtocolError, NoSuchStreamError, FlowControlError, FrameTooLargeError,
@@ -1934,13 +1934,15 @@ def _receive_unknown_frame(self, frame):
19341934
sure.
19351935
19361936
RFC 7540 § 5.5 says that we MUST ignore unknown frame types: so we
1937-
do.
1937+
do. We do notify the user that we received one, however.
19381938
"""
19391939
# All we do here is log.
19401940
self.config.logger.debug(
19411941
"Received unknown extension frame (ID 0x%x)", frame.stream_id
19421942
)
1943-
return [], []
1943+
event = UnknownFrameReceived()
1944+
event.frame = frame
1945+
return [], [event]
19441946

19451947
def _local_settings_acked(self):
19461948
"""

test/test_basic_logic.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -1574,8 +1574,10 @@ def test_unknown_frames_are_ignored(self, frame_factory, frame_id):
15741574
f.type = frame_id
15751575

15761576
events = c.receive_data(f.serialize())
1577-
assert not events
15781577
assert not c.data_to_send()
1578+
assert len(events) == 1
1579+
assert isinstance(events[0], h2.events.UnknownFrameReceived)
1580+
assert isinstance(events[0].frame, hyperframe.frame.ExtensionFrame)
15791581

15801582
def test_can_send_goaway_repeatedly(self, frame_factory):
15811583
"""

0 commit comments

Comments
 (0)