1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// found in the LICENSE file. 4eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#ifndef NET_SPDY_SPDY_WEBSOCKET_TEST_UTIL_H_ 6eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define NET_SPDY_SPDY_WEBSOCKET_TEST_UTIL_H_ 7eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "net/base/request_priority.h" 9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "net/spdy/spdy_header_block.h" 10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "net/spdy/spdy_protocol.h" 11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "net/spdy/spdy_test_util_common.h" 12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 13eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace net { 14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass SpdyWebSocketTestUtil { 16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public: 17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch explicit SpdyWebSocketTestUtil(NextProto protocol); 18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Returns the value corresponding to the given key (passed through 20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // GetHeaderKey()), or the empty string if none exists. 21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::string GetHeader(const SpdyHeaderBlock& headers, 22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::string& key) const; 23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Adds the given key/value pair to |headers|, passing the key 25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // through GetHeaderKey(). 26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void SetHeader(const std::string& key, 27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::string& value, 28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SpdyHeaderBlock* headers) const; 29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Constructs a standard SPDY SYN_STREAM frame for WebSocket over 31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // SPDY opening handshake. 32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SpdyFrame* ConstructSpdyWebSocketSynStream(int stream_id, 33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const char* path, 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const char* host, 35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const char* origin); 36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Constructs a standard SPDY SYN_REPLY packet to match the 38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // WebSocket over SPDY opening handshake. 39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SpdyFrame* ConstructSpdyWebSocketSynReply(int stream_id); 40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Constructs a WebSocket over SPDY handshake request packet. 42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SpdyFrame* ConstructSpdyWebSocketHandshakeRequestFrame( 43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<SpdyHeaderBlock> headers, 44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SpdyStreamId stream_id, 45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch RequestPriority request_priority); 46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Constructs a WebSocket over SPDY handshake response packet. 48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SpdyFrame* ConstructSpdyWebSocketHandshakeResponseFrame( 49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<SpdyHeaderBlock> headers, 50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SpdyStreamId stream_id, 51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch RequestPriority request_priority); 52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Constructs a SPDY HEADERS frame for a WebSocket frame over SPDY. 54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SpdyFrame* ConstructSpdyWebSocketHeadersFrame(int stream_id, 55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const char* length, 56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool fin); 57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Constructs a WebSocket over SPDY data packet. 59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SpdyFrame* ConstructSpdyWebSocketDataFrame(const char* data, 60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int len, 61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SpdyStreamId stream_id, 62eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool fin); 63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Forwards to |spdy_util_|. 65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SpdyFrame* ConstructSpdySettings(const SettingsMap& settings) const; 66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) SpdyFrame* ConstructSpdySettingsAck() const; 67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SpdyMajorVersion spdy_version() const; 68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 69eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch private: 70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Modify the header key based on the SPDY version and return it. 71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::string GetHeaderKey(const std::string& key) const; 72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SpdyTestUtil spdy_util_; 74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}; 75eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 76eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} // namespace net 77eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 78eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif // NET_SPDY_SPDY_WEBSOCKET_TEST_UTIL_H_ 79