• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2013 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_WEBSOCKETS_WEBSOCKET_EXTENSION_H_
6 #define NET_WEBSOCKETS_WEBSOCKET_EXTENSION_H_
7 
8 #include <string>
9 #include <vector>
10 
11 #include "net/base/net_export.h"
12 
13 namespace net {
14 
15 // A WebSocketExtension instance represents a WebSocket extension specified
16 // in RFC6455.
17 class NET_EXPORT_PRIVATE WebSocketExtension {
18  public:
19   // Note that RFC6455 does not allow a parameter with an empty value.
20   class NET_EXPORT_PRIVATE Parameter {
21    public:
22     // Construct a parameter which does not have a value.
23     explicit Parameter(const std::string& name);
24     // Construct a parameter with a non-empty value.
25     Parameter(const std::string& name, const std::string& value);
26 
HasValue()27     bool HasValue() const { return !value_.empty(); }
name()28     const std::string& name() const { return name_; }
value()29     const std::string& value() const { return value_; }
30     bool Equals(const Parameter& other) const;
31 
32     // The default copy constructor and the assignment operator are defined:
33     // we need them.
34    private:
35     std::string name_;
36     std::string value_;
37   };
38 
39   WebSocketExtension();
40   explicit WebSocketExtension(const std::string& name);
41   ~WebSocketExtension();
42 
Add(const Parameter & parameter)43   void Add(const Parameter& parameter) { parameters_.push_back(parameter); }
name()44   const std::string& name() const { return name_; }
parameters()45   const std::vector<Parameter>& parameters() const { return parameters_; }
46   bool Equals(const WebSocketExtension& other) const;
47 
48   // The default copy constructor and the assignment operator are defined:
49   // we need them.
50  private:
51   std::string name_;
52   std::vector<Parameter> parameters_;
53 };
54 
55 }  // namespace net
56 
57 #endif  // NET_WEBSOCKETS_WEBSOCKET_EXTENSION_H_
58