121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// Copyright (c) 2010 The Chromium Authors. All rights reserved. 221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// Use of this source code is governed by a BSD-style license that can be 321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// found in the LICENSE file. 421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "net/websockets/websocket_net_log_params.h" 621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsennamespace net { 821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenNetLogWebSocketHandshakeParameter::NetLogWebSocketHandshakeParameter( 1021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen const std::string& headers) 1121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen : headers_(headers) { 1221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen} 1321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 1421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenValue* NetLogWebSocketHandshakeParameter::ToValue() const { 1521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen DictionaryValue* dict = new DictionaryValue(); 1621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ListValue* headers = new ListValue(); 1721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 1821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen size_t last = 0; 1921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen size_t headers_size = headers_.size(); 2021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen size_t pos = 0; 2121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen while (pos <= headers_size) { 2221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen if (pos == headers_size || 2321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen (headers_[pos] == '\r' && 2421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen pos + 1 < headers_size && headers_[pos + 1] == '\n')) { 2521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen std::string entry = headers_.substr(last, pos - last); 2621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen pos += 2; 2721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen last = pos; 2821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 2921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen headers->Append(new StringValue(entry)); 3021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 3121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen if (entry.empty()) { 3221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // Dump WebSocket key3. 3321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen std::string key; 3421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen for (; pos < headers_size; ++pos) { 3521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen key += base::StringPrintf("\\x%02x", headers_[pos] & 0xff); 3621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } 3721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen headers->Append(new StringValue(key)); 3821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen break; 3921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } 4021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } else { 4121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ++pos; 4221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } 4321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } 4421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 4521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen dict->Set("headers", headers); 4621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen return dict; 4721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen} 4821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 4921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenNetLogWebSocketHandshakeParameter::~NetLogWebSocketHandshakeParameter() {} 5021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 5121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen} // namespace net 52