| Index: net/server/http_server.h
|
| diff --git a/net/server/http_server.h b/net/server/http_server.h
|
| index 4309d122f1ead040eb28f2c2557a489b9fbff1b6..66016d0bb73b86d40895b00489764a65144491c2 100644
|
| --- a/net/server/http_server.h
|
| +++ b/net/server/http_server.h
|
| @@ -5,13 +5,14 @@
|
| #ifndef NET_SERVER_HTTP_SERVER_H_
|
| #define NET_SERVER_HTTP_SERVER_H_
|
|
|
| -#include <list>
|
| #include <map>
|
| +#include <string>
|
|
|
| #include "base/basictypes.h"
|
| +#include "base/macros.h"
|
| #include "base/memory/scoped_ptr.h"
|
| +#include "base/memory/weak_ptr.h"
|
| #include "net/http/http_status_code.h"
|
| -#include "net/socket/stream_listen_socket.h"
|
|
|
| namespace net {
|
|
|
| @@ -19,30 +20,28 @@ class HttpConnection;
|
| class HttpServerRequestInfo;
|
| class HttpServerResponseInfo;
|
| class IPEndPoint;
|
| +class ServerSocket;
|
| +class StreamSocket;
|
| class WebSocket;
|
|
|
| -class HttpServer : public StreamListenSocket::Delegate,
|
| - public base::RefCountedThreadSafe<HttpServer> {
|
| +class HttpServer {
|
| public:
|
| + // Delegate to handle http/websocket events. Beware that it is not safe to
|
| + // destroy the HttpServer in any of these callbacks.
|
| class Delegate {
|
| public:
|
| virtual void OnHttpRequest(int connection_id,
|
| const HttpServerRequestInfo& info) = 0;
|
| -
|
| virtual void OnWebSocketRequest(int connection_id,
|
| const HttpServerRequestInfo& info) = 0;
|
| -
|
| virtual void OnWebSocketMessage(int connection_id,
|
| const std::string& data) = 0;
|
| -
|
| virtual void OnClose(int connection_id) = 0;
|
| -
|
| - protected:
|
| - virtual ~Delegate() {}
|
| };
|
|
|
| - HttpServer(const StreamListenSocketFactory& socket_factory,
|
| + HttpServer(scoped_ptr<ServerSocket> server_socket,
|
| HttpServer::Delegate* delegate);
|
| + ~HttpServer();
|
|
|
| void AcceptWebSocket(int connection_id,
|
| const HttpServerRequestInfo& request);
|
| @@ -51,6 +50,7 @@ class HttpServer : public StreamListenSocket::Delegate,
|
| // performed that data constitutes a valid HTTP response. A valid HTTP
|
| // response may be split across multiple calls to SendRaw.
|
| void SendRaw(int connection_id, const std::string& data);
|
| + // TODO(byungchul): Consider replacing function name with SendResponseInfo
|
| void SendResponse(int connection_id, const HttpServerResponseInfo& response);
|
| void Send(int connection_id,
|
| HttpStatusCode status_code,
|
| @@ -64,40 +64,49 @@ class HttpServer : public StreamListenSocket::Delegate,
|
|
|
| void Close(int connection_id);
|
|
|
| + void SetReceiveBufferSize(int connection_id, int32 size);
|
| + void SetSendBufferSize(int connection_id, int32 size);
|
| +
|
| // Copies the local address to |address|. Returns a network error code.
|
| int GetLocalAddress(IPEndPoint* address);
|
|
|
| - // ListenSocketDelegate
|
| - virtual void DidAccept(StreamListenSocket* server,
|
| - scoped_ptr<StreamListenSocket> socket) OVERRIDE;
|
| - virtual void DidRead(StreamListenSocket* socket,
|
| - const char* data,
|
| - int len) OVERRIDE;
|
| - virtual void DidClose(StreamListenSocket* socket) OVERRIDE;
|
| + private:
|
| + friend class HttpServerTest;
|
| +
|
| + typedef std::map<int, HttpConnection*> IdToConnectionMap;
|
|
|
| - protected:
|
| - virtual ~HttpServer();
|
| + void DoAcceptLoop();
|
| + void OnAcceptCompleted(int rv);
|
| + int HandleAcceptResult(int rv);
|
|
|
| - private:
|
| - friend class base::RefCountedThreadSafe<HttpServer>;
|
| - friend class HttpConnection;
|
| + void DoReadLoop(HttpConnection* connection);
|
| + void OnReadCompleted(int connection_id, int rv);
|
| + int HandleReadResult(HttpConnection* conn, int rv);
|
| +
|
| + void DoWriteLoop(HttpConnection* connection);
|
| + void OnWriteCompleted(int connection_id, int rv);
|
| + int HandleWriteResult(HttpConnection* conn, int rv);
|
| +
|
| + void CloseConnection(int connection_id);
|
|
|
| // Expects the raw data to be stored in recv_data_. If parsing is successful,
|
| // will remove the data parsed from recv_data_, leaving only the unused
|
| // recv data.
|
| - bool ParseHeaders(HttpConnection* connection,
|
| + bool ParseHeaders(const char* data,
|
| + size_t data_len,
|
| HttpServerRequestInfo* info,
|
| size_t* pos);
|
|
|
| HttpConnection* FindConnection(int connection_id);
|
| - HttpConnection* FindConnection(StreamListenSocket* socket);
|
|
|
| - HttpServer::Delegate* delegate_;
|
| - scoped_ptr<StreamListenSocket> server_;
|
| - typedef std::map<int, HttpConnection*> IdToConnectionMap;
|
| + const scoped_ptr<ServerSocket> server_socket_;
|
| + scoped_ptr<StreamSocket> accepted_socket_;
|
| + HttpServer::Delegate* const delegate_;
|
| +
|
| + int last_id_;
|
| IdToConnectionMap id_to_connection_;
|
| - typedef std::map<StreamListenSocket*, HttpConnection*> SocketToConnectionMap;
|
| - SocketToConnectionMap socket_to_connection_;
|
| +
|
| + base::WeakPtrFactory<HttpServer> weak_ptr_factory_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(HttpServer);
|
| };
|
|
|