xref: /aosp_15_r20/external/cronet/net/websockets/websocket_extension.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2013 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker #ifndef NET_WEBSOCKETS_WEBSOCKET_EXTENSION_H_
6*6777b538SAndroid Build Coastguard Worker #define NET_WEBSOCKETS_WEBSOCKET_EXTENSION_H_
7*6777b538SAndroid Build Coastguard Worker 
8*6777b538SAndroid Build Coastguard Worker #include <string>
9*6777b538SAndroid Build Coastguard Worker #include <vector>
10*6777b538SAndroid Build Coastguard Worker 
11*6777b538SAndroid Build Coastguard Worker #include "net/base/net_export.h"
12*6777b538SAndroid Build Coastguard Worker 
13*6777b538SAndroid Build Coastguard Worker namespace net {
14*6777b538SAndroid Build Coastguard Worker 
15*6777b538SAndroid Build Coastguard Worker // A WebSocketExtension instance represents a WebSocket extension specified
16*6777b538SAndroid Build Coastguard Worker // in RFC6455.
17*6777b538SAndroid Build Coastguard Worker class NET_EXPORT_PRIVATE WebSocketExtension {
18*6777b538SAndroid Build Coastguard Worker  public:
19*6777b538SAndroid Build Coastguard Worker   // Note that RFC6455 does not allow a parameter with an empty value.
20*6777b538SAndroid Build Coastguard Worker   class NET_EXPORT_PRIVATE Parameter final {
21*6777b538SAndroid Build Coastguard Worker    public:
22*6777b538SAndroid Build Coastguard Worker     // Construct a parameter which does not have a value.
23*6777b538SAndroid Build Coastguard Worker     explicit Parameter(const std::string& name);
24*6777b538SAndroid Build Coastguard Worker     // Construct a parameter with a non-empty value.
25*6777b538SAndroid Build Coastguard Worker     Parameter(const std::string& name, const std::string& value);
26*6777b538SAndroid Build Coastguard Worker 
27*6777b538SAndroid Build Coastguard Worker     bool operator==(const Parameter&) const;
28*6777b538SAndroid Build Coastguard Worker 
HasValue()29*6777b538SAndroid Build Coastguard Worker     bool HasValue() const { return !value_.empty(); }
name()30*6777b538SAndroid Build Coastguard Worker     const std::string& name() const { return name_; }
value()31*6777b538SAndroid Build Coastguard Worker     const std::string& value() const { return value_; }
32*6777b538SAndroid Build Coastguard Worker 
33*6777b538SAndroid Build Coastguard Worker     // The default copy constructor and the assignment operator are defined:
34*6777b538SAndroid Build Coastguard Worker     // we need them.
35*6777b538SAndroid Build Coastguard Worker    private:
36*6777b538SAndroid Build Coastguard Worker     std::string name_;
37*6777b538SAndroid Build Coastguard Worker     std::string value_;
38*6777b538SAndroid Build Coastguard Worker   };
39*6777b538SAndroid Build Coastguard Worker 
40*6777b538SAndroid Build Coastguard Worker   WebSocketExtension();
41*6777b538SAndroid Build Coastguard Worker   explicit WebSocketExtension(const std::string& name);
42*6777b538SAndroid Build Coastguard Worker   WebSocketExtension(const WebSocketExtension& other);
43*6777b538SAndroid Build Coastguard Worker   ~WebSocketExtension();
44*6777b538SAndroid Build Coastguard Worker 
Add(const Parameter & parameter)45*6777b538SAndroid Build Coastguard Worker   void Add(const Parameter& parameter) { parameters_.push_back(parameter); }
name()46*6777b538SAndroid Build Coastguard Worker   const std::string& name() const { return name_; }
parameters()47*6777b538SAndroid Build Coastguard Worker   const std::vector<Parameter>& parameters() const { return parameters_; }
48*6777b538SAndroid Build Coastguard Worker 
49*6777b538SAndroid Build Coastguard Worker   // Equivalent() returns true if `name_` and `parameters_` are the same, even
50*6777b538SAndroid Build Coastguard Worker   // if the order of keys in `parameters_` is different.
51*6777b538SAndroid Build Coastguard Worker   bool Equivalent(const WebSocketExtension& other) const;
52*6777b538SAndroid Build Coastguard Worker 
53*6777b538SAndroid Build Coastguard Worker   std::string ToString() const;
54*6777b538SAndroid Build Coastguard Worker 
55*6777b538SAndroid Build Coastguard Worker   // The default copy constructor and the assignment operator are defined:
56*6777b538SAndroid Build Coastguard Worker   // we need them.
57*6777b538SAndroid Build Coastguard Worker  private:
58*6777b538SAndroid Build Coastguard Worker   std::string name_;
59*6777b538SAndroid Build Coastguard Worker   std::vector<Parameter> parameters_;
60*6777b538SAndroid Build Coastguard Worker };
61*6777b538SAndroid Build Coastguard Worker 
62*6777b538SAndroid Build Coastguard Worker }  // namespace net
63*6777b538SAndroid Build Coastguard Worker 
64*6777b538SAndroid Build Coastguard Worker #endif  // NET_WEBSOCKETS_WEBSOCKET_EXTENSION_H_
65