blob: 1eb749f7c81d894a1f29157eaa9a3c5431c20d5d [file] [log] [blame]
dgozmana6e70092014-12-12 14:46:211// Copyright 2014 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_ENCODER_H_
6#define NET_SERVER_WEB_SOCKET_ENCODER_H_
7
8#include <string>
9
10#include "base/basictypes.h"
11#include "base/memory/scoped_ptr.h"
12#include "base/strings/string_piece.h"
13#include "net/server/web_socket.h"
14#include "net/websockets/websocket_deflater.h"
15#include "net/websockets/websocket_inflater.h"
16
17namespace net {
18
yhiranoa10dd4e2015-09-28 09:06:3419class WebSocketDeflateParameters;
20
21class WebSocketEncoder final {
dgozmana6e70092014-12-12 14:46:2122 public:
yhiranoa10dd4e2015-09-28 09:06:3423 static const char kClientExtensions[];
24
dgozmana6e70092014-12-12 14:46:2125 ~WebSocketEncoder();
26
yhiranoa10dd4e2015-09-28 09:06:3427 // Creates and returns an encoder for a server without extensions.
28 static scoped_ptr<WebSocketEncoder> CreateServer();
29 // Creates and returns an encoder.
30 // |extensions| is the value of a Sec-WebSocket-Extensions header.
31 // Returns nullptr when there is an error.
32 static scoped_ptr<WebSocketEncoder> CreateServer(
33 const std::string& extensions,
34 WebSocketDeflateParameters* params);
35 // TODO(yhirano): Return a scoped_ptr instead of a raw pointer.
dgozmana6e70092014-12-12 14:46:2136 static WebSocketEncoder* CreateClient(const std::string& response_extensions);
37
38 WebSocket::ParseResult DecodeFrame(const base::StringPiece& frame,
39 int* bytes_consumed,
40 std::string* output);
dgozmana6e70092014-12-12 14:46:2141 void EncodeFrame(const std::string& frame,
42 int masking_key,
43 std::string* output);
44
yhiranoa10dd4e2015-09-28 09:06:3445 bool deflate_enabled() const { return deflater_; }
dgozmana6e70092014-12-12 14:46:2146
yhiranoa10dd4e2015-09-28 09:06:3447 private:
48 enum Type {
49 FOR_SERVER,
50 FOR_CLIENT,
51 };
52
53 WebSocketEncoder(Type type,
54 scoped_ptr<WebSocketDeflater> deflater,
55 scoped_ptr<WebSocketInflater> inflater);
dgozmana6e70092014-12-12 14:46:2156
57 bool Inflate(std::string* message);
58 bool Deflate(const std::string& message, std::string* output);
59
yhiranoa10dd4e2015-09-28 09:06:3460 Type type_;
dgozmana6e70092014-12-12 14:46:2161 scoped_ptr<WebSocketDeflater> deflater_;
62 scoped_ptr<WebSocketInflater> inflater_;
dgozmana6e70092014-12-12 14:46:2163
64 DISALLOW_COPY_AND_ASSIGN(WebSocketEncoder);
65};
66
67} // namespace net
68
69#endif // NET_SERVER_WEB_SOCKET_ENCODER_H_