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