| Index: net/websockets/websocket.h
|
| ===================================================================
|
| --- net/websockets/websocket.h (revision 95449)
|
| +++ net/websockets/websocket.h (working copy)
|
| @@ -1,235 +0,0 @@
|
| -// Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -//
|
| -// WebSocket protocol implementation in chromium.
|
| -// It is intended to be used for live experiment of WebSocket connectivity
|
| -// metrics.
|
| -// Note that it is not used for WebKit's WebSocket communication.
|
| -// See third_party/WebKit/Source/WebCore/websockets/ instead.
|
| -
|
| -#ifndef NET_WEBSOCKETS_WEBSOCKET_H_
|
| -#define NET_WEBSOCKETS_WEBSOCKET_H_
|
| -#pragma once
|
| -
|
| -#include <deque>
|
| -#include <string>
|
| -
|
| -#include "base/memory/ref_counted.h"
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "googleurl/src/gurl.h"
|
| -#include "net/base/io_buffer.h"
|
| -#include "net/base/net_api.h"
|
| -#include "net/socket_stream/socket_stream.h"
|
| -#include "net/url_request/url_request_context.h"
|
| -
|
| -class MessageLoop;
|
| -
|
| -namespace net {
|
| -
|
| -class ClientSocketFactory;
|
| -class HostResolver;
|
| -
|
| -class WebSocket;
|
| -class WebSocketHandshake;
|
| -
|
| -// Delegate methods will be called on the same message loop as
|
| -// WebSocket is constructed.
|
| -class WebSocketDelegate {
|
| - public:
|
| - virtual ~WebSocketDelegate() {}
|
| -
|
| - // Called when WebSocket connection has been established.
|
| - virtual void OnOpen(WebSocket* socket) = 0;
|
| -
|
| - // Called when |msg| is received at |socket|.
|
| - // |msg| should be in UTF-8.
|
| - virtual void OnMessage(WebSocket* socket, const std::string& msg) = 0;
|
| -
|
| - // Called when WebSocket error has been detected.
|
| - virtual void OnError(WebSocket* socket) {}
|
| -
|
| - // Called when |socket| is closed.
|
| - virtual void OnClose(WebSocket* socket, bool was_clean) = 0;
|
| -
|
| - // Called when an error occured on |socket|.
|
| - virtual void OnSocketError(const WebSocket* socket, int error) {}
|
| -};
|
| -
|
| -class NET_API WebSocket : public base::RefCountedThreadSafe<WebSocket>,
|
| - public SocketStream::Delegate {
|
| - public:
|
| - enum State {
|
| - INITIALIZED = -1,
|
| - CONNECTING = 0,
|
| - OPEN = 1,
|
| - CLOSING = 2,
|
| - CLOSED = 3,
|
| - };
|
| - enum ProtocolVersion {
|
| - DEFAULT_VERSION = 0,
|
| - DRAFT75 = 1,
|
| - };
|
| - class Request {
|
| - public:
|
| - Request(const GURL& url,
|
| - const std::string& protocol,
|
| - const std::string& origin,
|
| - const std::string& location,
|
| - ProtocolVersion version,
|
| - net::URLRequestContext* context)
|
| - : url_(url),
|
| - protocol_(protocol),
|
| - origin_(origin),
|
| - location_(location),
|
| - version_(version),
|
| - context_(context),
|
| - host_resolver_(NULL),
|
| - client_socket_factory_(NULL) {}
|
| - ~Request() {}
|
| -
|
| - const GURL& url() const { return url_; }
|
| - const std::string& protocol() const { return protocol_; }
|
| - const std::string& origin() const { return origin_; }
|
| - const std::string& location() const { return location_; }
|
| - ProtocolVersion version() const { return version_; }
|
| - net::URLRequestContext* context() const { return context_; }
|
| -
|
| - // Sets an alternative HostResolver. For testing purposes only.
|
| - void SetHostResolver(HostResolver* host_resolver) {
|
| - host_resolver_ = host_resolver;
|
| - }
|
| - HostResolver* host_resolver() const { return host_resolver_; }
|
| -
|
| - // Sets an alternative ClientSocketFactory. Doesn't take ownership of
|
| - // |factory|. For testing purposes only.
|
| - void SetClientSocketFactory(ClientSocketFactory* factory) {
|
| - client_socket_factory_ = factory;
|
| - }
|
| - ClientSocketFactory* client_socket_factory() const {
|
| - return client_socket_factory_;
|
| - }
|
| -
|
| - private:
|
| - GURL url_;
|
| - std::string protocol_;
|
| - std::string origin_;
|
| - std::string location_;
|
| - ProtocolVersion version_;
|
| - scoped_refptr<net::URLRequestContext> context_;
|
| -
|
| - HostResolver* host_resolver_;
|
| - ClientSocketFactory* client_socket_factory_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(Request);
|
| - };
|
| -
|
| - // Constructs new WebSocket.
|
| - // It takes ownership of |req|.
|
| - // |delegate| must be alive while this object is alive.
|
| - WebSocket(Request* req, WebSocketDelegate* delegate);
|
| -
|
| - const Request* request() const { return request_.get(); }
|
| - WebSocketDelegate* delegate() const { return delegate_; }
|
| -
|
| - State ready_state() const { return ready_state_; }
|
| -
|
| - // Connects new WebSocket.
|
| - void Connect();
|
| -
|
| - // Sends |msg| on the WebSocket connection.
|
| - // |msg| should be in UTF-8.
|
| - void Send(const std::string& msg);
|
| -
|
| - // Closes the WebSocket connection.
|
| - void Close();
|
| -
|
| - // Detach delegate. Call before delegate is deleted.
|
| - // Once delegate is detached, close the WebSocket connection and never call
|
| - // delegate back.
|
| - void DetachDelegate();
|
| -
|
| - // SocketStream::Delegate methods.
|
| - // Called on IO thread.
|
| - virtual void OnConnected(SocketStream* socket_stream,
|
| - int max_pending_send_allowed);
|
| - virtual void OnSentData(SocketStream* socket_stream, int amount_sent);
|
| - virtual void OnReceivedData(SocketStream* socket_stream,
|
| - const char* data, int len);
|
| - virtual void OnClose(SocketStream* socket);
|
| - virtual void OnError(const SocketStream* socket, int error);
|
| -
|
| - private:
|
| - typedef std::deque< scoped_refptr<IOBufferWithSize> > PendingDataQueue;
|
| -
|
| - friend class WebSocketTest;
|
| -
|
| - friend class base::RefCountedThreadSafe<WebSocket>;
|
| - virtual ~WebSocket();
|
| -
|
| - // Sends pending data in |current_write_buf_| and/or |pending_write_bufs_|.
|
| - void SendPending();
|
| -
|
| - // Handles received data.
|
| - void DoReceivedData();
|
| -
|
| - // Processes frame data in |current_read_buf_|.
|
| - void ProcessFrameData();
|
| -
|
| - // Adds |len| bytes of |data| to |current_read_buf_|.
|
| - void AddToReadBuffer(const char* data, int len);
|
| -
|
| - // Skips |len| bytes in |current_read_buf_|.
|
| - void SkipReadBuffer(int len);
|
| -
|
| - void StartClosingHandshake();
|
| - void DoForceCloseConnection();
|
| - void FailConnection();
|
| - // Handles closed connection.
|
| - void DoClose();
|
| -
|
| - // Handles socket error report.
|
| - void DoSocketError(int error);
|
| -
|
| - State ready_state_;
|
| - scoped_ptr<Request> request_;
|
| - scoped_ptr<WebSocketHandshake> handshake_;
|
| - WebSocketDelegate* delegate_;
|
| - MessageLoop* origin_loop_;
|
| -
|
| - scoped_refptr<SocketStream> socket_stream_;
|
| - int max_pending_send_allowed_;
|
| -
|
| - // [0..offset) is received data from |socket_stream_|.
|
| - // [0..read_consumed_len_) is already processed.
|
| - // [read_consumed_len_..offset) is unprocessed data.
|
| - // [offset..capacity) is free space.
|
| - scoped_refptr<GrowableIOBuffer> current_read_buf_;
|
| - int read_consumed_len_;
|
| -
|
| - // Drainable IOBuffer on the front of |pending_write_bufs_|.
|
| - // [0..offset) is already sent to |socket_stream_|.
|
| - // [offset..size) is being sent to |socket_stream_|, waiting OnSentData.
|
| - scoped_refptr<DrainableIOBuffer> current_write_buf_;
|
| -
|
| - // Deque of IOBuffers in pending.
|
| - // Front IOBuffer is being sent via |current_write_buf_|.
|
| - PendingDataQueue pending_write_bufs_;
|
| -
|
| - // True when the 0xFF frame with length 0x00 is received.
|
| - bool server_closing_handshake_;
|
| - // True when trying to send 0xFF and 0x00 bytes.
|
| - bool client_closing_handshake_;
|
| - // True when send 0xFF and 0x00 bytes.
|
| - bool closing_handshake_started_;
|
| - // Task to close the connection after closing handshake has started and
|
| - // |closing_handshake_timeout_|.
|
| - CancelableTask* force_close_task_;
|
| - int64 closing_handshake_timeout_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(WebSocket);
|
| -};
|
| -
|
| -} // namespace net
|
| -
|
| -#endif // NET_WEBSOCKETS_WEBSOCKET_H_
|
|
|