blob: caeec9465994924c45c075855f591cdf7b1528a6 [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
Avi Drissman13fc8932015-12-20 04:40:4610#include "base/macros.h"
dgozmana6e70092014-12-12 14:46:2111#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);
olli.raula46a1acf2015-11-04 08:45:5235 static scoped_ptr<WebSocketEncoder> CreateClient(
36 const std::string& response_extensions);
dgozmana6e70092014-12-12 14:46:2137
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
dcheng5d64b522016-01-20 01:41:0245 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_