| Index: net/websockets/websocket_handshake.h
|
| diff --git a/net/websockets/websocket_handshake.h b/net/websockets/websocket_handshake.h
|
| index 1e94eff5539a3561e40fe8d387de06809bbd732c..3f64b8b4d28a8c34758c18c33f7eb5a523b25670 100644
|
| --- a/net/websockets/websocket_handshake.h
|
| +++ b/net/websockets/websocket_handshake.h
|
| @@ -8,6 +8,7 @@
|
| #include <string>
|
|
|
| #include "base/basictypes.h"
|
| +#include "base/scoped_ptr.h"
|
| #include "googleurl/src/gurl.h"
|
|
|
| namespace net {
|
| @@ -18,12 +19,6 @@ class WebSocketHandshake {
|
| public:
|
| static const int kWebSocketPort;
|
| static const int kSecureWebSocketPort;
|
| - static const char kServerHandshakeHeader[];
|
| - static const size_t kServerHandshakeHeaderLength;
|
| - static const char kUpgradeHeader[];
|
| - static const size_t kUpgradeHeaderLength;
|
| - static const char kConnectionHeader[];
|
| - static const size_t kConnectionHeaderLength;
|
|
|
| enum Mode {
|
| MODE_INCOMPLETE, MODE_NORMAL, MODE_FAILED, MODE_CONNECTED
|
| @@ -32,32 +27,33 @@ class WebSocketHandshake {
|
| const std::string& origin,
|
| const std::string& location,
|
| const std::string& protocol);
|
| - ~WebSocketHandshake();
|
| + virtual ~WebSocketHandshake();
|
|
|
| bool is_secure() const;
|
| // Creates the client handshake message from |this|.
|
| - std::string CreateClientHandshakeMessage() const;
|
| + virtual std::string CreateClientHandshakeMessage();
|
|
|
| // Reads server handshake message in |len| of |data|, updates |mode_| and
|
| // returns number of bytes of the server handshake message.
|
| // Once connection is established, |mode_| will be MODE_CONNECTED.
|
| // If connection establishment failed, |mode_| will be MODE_FAILED.
|
| // Returns negative if the server handshake message is incomplete.
|
| - int ReadServerHandshake(const char* data, size_t len);
|
| + virtual int ReadServerHandshake(const char* data, size_t len);
|
| Mode mode() const { return mode_; }
|
|
|
| - private:
|
| - // Processes server handshake message, parsed as |headers|, and updates
|
| - // |ws_origin_|, |ws_location_| and |ws_protocol_|.
|
| - // Returns true if it's ok.
|
| - // Returns false otherwise (e.g. duplicate WebSocket-Origin: header, etc.)
|
| - bool ProcessHeaders(const HttpResponseHeaders& headers);
|
| -
|
| - // Checks |ws_origin_|, |ws_location_| and |ws_protocol_| are valid
|
| - // against |origin_|, |location_| and |protocol_|.
|
| - // Returns true if it's ok.
|
| - // Returns false otherwise (e.g. origin mismatch, etc.)
|
| - bool CheckResponseHeaders() const;
|
| + protected:
|
| + std::string GetResourceName() const;
|
| + std::string GetHostFieldValue() const;
|
| + std::string GetOriginFieldValue() const;
|
| +
|
| + // Gets the value of the specified header.
|
| + // It assures only one header of |name| in |headers|.
|
| + // Returns true iff single header of |name| is found in |headers|
|
| + // and |value| is filled with the value.
|
| + // Returns false otherwise.
|
| + static bool GetSingleHeader(const HttpResponseHeaders& headers,
|
| + const std::string& name,
|
| + std::string* value);
|
|
|
| GURL url_;
|
| // Handshake messages that the client is going to send out.
|
| @@ -72,6 +68,47 @@ class WebSocketHandshake {
|
| std::string ws_location_;
|
| std::string ws_protocol_;
|
|
|
| + private:
|
| + friend class WebSocketHandshakeTest;
|
| +
|
| + class Parameter {
|
| + public:
|
| + static const int kKey3Size = 8;
|
| + static const int kExpectedResponseSize = 16;
|
| + Parameter();
|
| + ~Parameter();
|
| +
|
| + void GenerateKeys();
|
| + const std::string& GetSecWebSocketKey1() const { return key_1_; }
|
| + const std::string& GetSecWebSocketKey2() const { return key_2_; }
|
| + const std::string& GetKey3() const { return key_3_; }
|
| +
|
| + void GetExpectedResponse(uint8* expected) const;
|
| +
|
| + private:
|
| + friend class WebSocketHandshakeTest;
|
| +
|
| + // Set random number generator. |rand| should return a random number
|
| + // between min and max (inclusive).
|
| + static void SetRandomNumberGenerator(
|
| + uint32 (*rand)(uint32 min, uint32 max));
|
| + void GenerateSecWebSocketKey(uint32* number, std::string* key);
|
| + void GenerateKey3();
|
| +
|
| + uint32 number_1_;
|
| + uint32 number_2_;
|
| + std::string key_1_;
|
| + std::string key_2_;
|
| + std::string key_3_;
|
| +
|
| + static uint32 (*rand_)(uint32 min, uint32 max);
|
| + };
|
| +
|
| + virtual bool ProcessHeaders(const HttpResponseHeaders& headers);
|
| + virtual bool CheckResponseHeaders() const;
|
| +
|
| + scoped_ptr<Parameter> parameter_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(WebSocketHandshake);
|
| };
|
|
|
|
|