Home | History | Annotate | Download | only in server
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef NET_SERVER_WEB_SOCKET_H_
      6 #define NET_SERVER_WEB_SOCKET_H_
      7 
      8 #include <string>
      9 
     10 #include "base/basictypes.h"
     11 
     12 namespace net {
     13 
     14 class HttpConnection;
     15 class HttpServerRequestInfo;
     16 
     17 class WebSocket {
     18  public:
     19   enum ParseResult {
     20     FRAME_OK,
     21     FRAME_INCOMPLETE,
     22     FRAME_CLOSE,
     23     FRAME_ERROR
     24   };
     25 
     26   static WebSocket* CreateWebSocket(HttpConnection* connection,
     27                                     const HttpServerRequestInfo& request,
     28                                     size_t* pos);
     29 
     30   static ParseResult DecodeFrameHybi17(const std::string& frame,
     31                                        bool client_frame,
     32                                        int* bytes_consumed,
     33                                        std::string* output);
     34 
     35   static std::string EncodeFrameHybi17(const std::string& data,
     36                                        int masking_key);
     37 
     38   virtual void Accept(const HttpServerRequestInfo& request) = 0;
     39   virtual ParseResult Read(std::string* message) = 0;
     40   virtual void Send(const std::string& message) = 0;
     41   virtual ~WebSocket() {}
     42 
     43  protected:
     44   explicit WebSocket(HttpConnection* connection);
     45   HttpConnection* connection_;
     46 
     47  private:
     48   DISALLOW_COPY_AND_ASSIGN(WebSocket);
     49 };
     50 
     51 }  // namespace net
     52 
     53 #endif  // NET_SERVER_WEB_SOCKET_H_
     54