def socket_handler(listener): sock = listener.accept()[0] # Dispose of the first two packets. sock.recv(65535) sock.recv(65535) # Send a Settings frame that reduces the flow-control window to # 64 bytes. f = SettingsFrame(0) f.settings[SettingsFrame.INITIAL_WINDOW_SIZE] = 64 sock.send(f.serialize()) # Grab three frames, the settings ACK, the initial headers frame, # and the first data frame. for x in range(0, 3): data.append(sock.recv(65535)) # Send a WindowUpdate giving more window room to the stream. f = WindowUpdateFrame(1) f.window_increment = 64 sock.send(f.serialize()) # Reeive the remaining frame. data.append(sock.recv(65535)) send_event.set() # We're done. sock.close()
def socket_handler(listener): sock = listener.accept()[0] # We should get two packets: one connection header string, one # SettingsFrame. first = sock.recv(65535) second = sock.recv(65535) data.append(first) data.append(second) # We need to send back a SettingsFrame. f = SettingsFrame(0) sock.send(f.serialize()) send_event.set() sock.close()
def test_settings_frame_serializes_properly(self): f = SettingsFrame(0) f.parse_flags(0xFF) f.settings = { SettingsFrame.HEADER_TABLE_SIZE: 4096, SettingsFrame.ENABLE_PUSH: 0, SettingsFrame.MAX_CONCURRENT_STREAMS: 100, SettingsFrame.INITIAL_WINDOW_SIZE: 65535, SettingsFrame.FLOW_CONTROL_OPTIONS: 1, } s = f.serialize() assert s == ( b'\x00\x28\x04\x01\x00\x00\x00\x00' + # Frame header b'\x00\x00\x00\x01\x00\x00\x10\x00' + # HEADER_TABLE_SIZE b'\x00\x00\x00\x02\x00\x00\x00\x00' + # ENABLE_PUSH b'\x00\x00\x00\x04\x00\x00\x00\x64' + # MAX_CONCURRENT_STREAMS b'\x00\x00\x00\x0A\x00\x00\x00\x01' + # FLOW_CONTROL_OPTIONS b'\x00\x00\x00\x07\x00\x00\xFF\xFF' # INITIAL_WINDOW_SIZE )