| Index: net/websockets/websocket_handshake_handler.h
|
| diff --git a/net/websockets/websocket_handshake_handler.h b/net/websockets/websocket_handshake_handler.h
|
| index 855d12f349daeebc7b98cefadb77a2f77145cade..b96ee872f0d7566a13db668a3dfddf23cb31200e 100644
|
| --- a/net/websockets/websocket_handshake_handler.h
|
| +++ b/net/websockets/websocket_handshake_handler.h
|
| @@ -9,6 +9,21 @@
|
| // - We don't trust WebKit renderer process, so we'll not expose HttpOnly
|
| // cookies to the renderer process, so handles HttpOnly cookies in
|
| // browser process.
|
| +//
|
| +// The classes below support two styles of handshake: handshake based
|
| +// on hixie-76 draft and one based on hybi-04 draft. The critical difference
|
| +// between these two is how they pass challenge and response values. Hixie-76
|
| +// based handshake appends a few bytes of binary data after header fields of
|
| +// handshake request and response. These data are called "key3" (for request)
|
| +// or "response key" (for response). On the other hand, handshake based on
|
| +// hybi-04 and later drafts put challenge and response values into handshake
|
| +// header fields, thus we do not need to send or receive extra bytes after
|
| +// handshake headers.
|
| +//
|
| +// While we are working on updating WebSocket implementation in WebKit to
|
| +// conform to the latest procotol draft, we need to accept both styles of
|
| +// handshake. After we land the protocol changes in WebKit, we will be able to
|
| +// drop codes handling old-style handshake.
|
|
|
| #ifndef NET_WEBSOCKETS_WEBSOCKET_HANDSHAKE_HANDLER_H_
|
| #define NET_WEBSOCKETS_WEBSOCKET_HANDSHAKE_HANDLER_H_
|
| @@ -45,10 +60,12 @@ class WebSocketHandshakeRequestHandler {
|
| size_t headers_to_remove_len);
|
|
|
| // Gets request info to open WebSocket connection.
|
| - // Also, fill challange data in |challenge|.
|
| + // Fills challange data (concatenation of key1, 2 and 3 for hybi-03 and
|
| + // earlier, or Sec-WebSocket-Key header value for hybi-04 and later)
|
| + // in |challenge|.
|
| HttpRequestInfo GetRequestInfo(const GURL& url, std::string* challenge);
|
| // Gets request as SpdyHeaderBlock.
|
| - // Also, fill challenge data in |challenge|.
|
| + // Also, fills challenge data in |challenge|.
|
| bool GetRequestHeaderBlock(const GURL& url,
|
| spdy::SpdyHeaderBlock* headers,
|
| std::string* challenge);
|
| @@ -58,12 +75,19 @@ class WebSocketHandshakeRequestHandler {
|
| // Calling raw_length is valid only after GetRawRquest() call.
|
| size_t raw_length() const;
|
|
|
| + // Returns the value of Sec-WebSocket-Version or Sec-WebSocket-Draft header
|
| + // (the latter is an old name of the former). Returns 0 if both headers were
|
| + // absent, which means the handshake was based on hybi-00 (= hixie-76).
|
| + // Should only be called after the handshake has been parsed.
|
| + int protocol_version() const;
|
| +
|
| private:
|
| std::string status_line_;
|
| std::string headers_;
|
| std::string key3_;
|
| int original_length_;
|
| int raw_length_;
|
| + int protocol_version_; // "-1" means we haven't parsed the handshake yet.
|
|
|
| DISALLOW_COPY_AND_ASSIGN(WebSocketHandshakeRequestHandler);
|
| };
|
| @@ -73,6 +97,11 @@ class WebSocketHandshakeResponseHandler {
|
| WebSocketHandshakeResponseHandler();
|
| ~WebSocketHandshakeResponseHandler();
|
|
|
| + // Set WebSocket protocol version before parsing the response.
|
| + // Default is 0 (hybi-00, which is same as hixie-76).
|
| + int protocol_version() const;
|
| + void set_protocol_version(int protocol_version);
|
| +
|
| // Parses WebSocket handshake response from WebSocket server.
|
| // Returns number of bytes in |data| used for WebSocket handshake response
|
| // message, including response key. If it already got whole WebSocket
|
| @@ -105,12 +134,18 @@ class WebSocketHandshakeResponseHandler {
|
| std::string GetResponse();
|
|
|
| private:
|
| + // Returns the length of response key. This function will return 0
|
| + // if the specified WebSocket protocol version does not require
|
| + // sending response key.
|
| + size_t GetResponseKeySize() const;
|
| +
|
| std::string original_;
|
| int original_header_length_;
|
| std::string status_line_;
|
| std::string headers_;
|
| std::string header_separator_;
|
| std::string key_;
|
| + int protocol_version_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(WebSocketHandshakeResponseHandler);
|
| };
|
|
|