Chromium Code Reviews| Index: net/server/http_server.h |
| diff --git a/net/server/http_server.h b/net/server/http_server.h |
| index 4309d122f1ead040eb28f2c2557a489b9fbff1b6..7049cfbc2cdb0726d18a12c6f245c2a51700f1ea 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,48 @@ 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; |
| - protected: |
| - virtual ~HttpServer(); |
| + typedef std::map<int, HttpConnection*> IdToConnectionMap; |
| - private: |
| - friend class base::RefCountedThreadSafe<HttpServer>; |
| - friend class HttpConnection; |
| + void DoAcceptLoop(); |
| + void OnAcceptCompleted(int rv); |
| + int HandleAcceptResult(int rv); |
| + |
| + void DoReadLoop(HttpConnection* connection); |
| + void OnReadCompleted(int connection_id, int rv); |
| + int HandleReadResult(HttpConnection* connection, int rv); |
| + |
| + void DoWriteLoop(HttpConnection* connection); |
| + void OnWriteCompleted(int connection_id, int rv); |
| + int HandleWriteResult(HttpConnection* connection, int rv); |
| // 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); |
| + bool IsConnectionClosed(HttpConnection* connection); |
|
mmenke
2014/08/15 17:53:02
This function is confusingly named, since it has n
byungchul
2014/08/15 18:05:17
Done.
|
| - 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); |
| }; |