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