blob: de6bea7b5507033fb431350ce3398e1a99a32cbd [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
danakja9850e12016-04-18 22:28:088#include <memory>
dgozmana6e70092014-12-12 14:46:219#include <string>
10
Avi Drissman13fc8932015-12-20 04:40:4611#include "base/macros.h"
dgozmana6e70092014-12-12 14:46:2112#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.
danakja9850e12016-04-18 22:28:0828 static std::unique_ptr<WebSocketEncoder> CreateServer();
yhiranoa10dd4e2015-09-28 09:06:3429 // Creates and returns an encoder.
30 // |extensions| is the value of a Sec-WebSocket-Extensions header.
31 // Returns nullptr when there is an error.
danakja9850e12016-04-18 22:28:0832 static std::unique_ptr<WebSocketEncoder> CreateServer(
yhiranoa10dd4e2015-09-28 09:06:3433 const std::string& extensions,
34 WebSocketDeflateParameters* params);
danakja9850e12016-04-18 22:28:0835 static std::unique_ptr<WebSocketEncoder> CreateClient(
olli.raula46a1acf2015-11-04 08:45:5236 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);
Johannes Henkelda8b9d32019-03-15 16:15:3341 void EncodeFrame(base::StringPiece frame,
dgozmana6e70092014-12-12 14:46:2142 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,
danakja9850e12016-04-18 22:28:0854 std::unique_ptr<WebSocketDeflater> deflater,
55 std::unique_ptr<WebSocketInflater> inflater);
dgozmana6e70092014-12-12 14:46:2156
57 bool Inflate(std::string* message);
Johannes Henkelda8b9d32019-03-15 16:15:3358 bool Deflate(base::StringPiece message, std::string* output);
dgozmana6e70092014-12-12 14:46:2159
yhiranoa10dd4e2015-09-28 09:06:3460 Type type_;
danakja9850e12016-04-18 22:28:0861 std::unique_ptr<WebSocketDeflater> deflater_;
62 std::unique_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_