12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- // Copyright 2013 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "net/websockets/websocket_extension.h"
- #include <map>
- #include <string>
- #include <utility>
- #include "base/check.h"
- #include "net/http/http_util.h"
- namespace net {
- WebSocketExtension::Parameter::Parameter(const std::string& name)
- : name_(name) {}
- WebSocketExtension::Parameter::Parameter(const std::string& name,
- const std::string& value)
- : name_(name), value_(value) {
- DCHECK(!value.empty());
- // |extension-param| must be a token.
- DCHECK(HttpUtil::IsToken(value));
- }
- bool WebSocketExtension::Parameter::Equals(const Parameter& other) const {
- return name_ == other.name_ && value_ == other.value_;
- }
- WebSocketExtension::WebSocketExtension() = default;
- WebSocketExtension::WebSocketExtension(const std::string& name)
- : name_(name) {}
- WebSocketExtension::WebSocketExtension(const WebSocketExtension& other) =
- default;
- WebSocketExtension::~WebSocketExtension() = default;
- bool WebSocketExtension::Equals(const WebSocketExtension& other) const {
- if (name_ != other.name_) return false;
- if (parameters_.size() != other.parameters_.size()) return false;
- std::multimap<std::string, std::string> this_parameters, other_parameters;
- for (const auto& p : parameters_) {
- this_parameters.insert(std::make_pair(p.name(), p.value()));
- }
- for (const auto& p : other.parameters_) {
- other_parameters.insert(std::make_pair(p.name(), p.value()));
- }
- return this_parameters == other_parameters;
- }
- std::string WebSocketExtension::ToString() const {
- if (name_.empty())
- return std::string();
- std::string result = name_;
- for (const auto& param : parameters_) {
- result += "; " + param.name();
- if (!param.HasValue())
- continue;
- // |extension-param| must be a token and we don't need to quote it.
- DCHECK(HttpUtil::IsToken(param.value()));
- result += "=" + param.value();
- }
- return result;
- }
- } // namespace net
|