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