OLD | NEW |
| (Empty) |
1 // Copyright (c) 2012 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 #include "net/websockets/websocket_net_log_params.h" | |
6 | |
7 #include "base/strings/stringprintf.h" | |
8 #include "base/values.h" | |
9 | |
10 namespace net { | |
11 | |
12 base::Value* NetLogWebSocketHandshakeCallback( | |
13 const std::string* headers, | |
14 NetLog::LogLevel /* log_level */) { | |
15 base::DictionaryValue* dict = new base::DictionaryValue(); | |
16 base::ListValue* header_list = new base::ListValue(); | |
17 | |
18 size_t last = 0; | |
19 size_t headers_size = headers->size(); | |
20 size_t pos = 0; | |
21 while (pos <= headers_size) { | |
22 if (pos == headers_size || | |
23 ((*headers)[pos] == '\r' && | |
24 pos + 1 < headers_size && (*headers)[pos + 1] == '\n')) { | |
25 std::string entry = headers->substr(last, pos - last); | |
26 pos += 2; | |
27 last = pos; | |
28 | |
29 header_list->Append(new base::StringValue(entry)); | |
30 | |
31 if (entry.empty()) { | |
32 // Dump WebSocket key3. | |
33 std::string key; | |
34 for (; pos < headers_size; ++pos) { | |
35 key += base::StringPrintf("\\x%02x", (*headers)[pos] & 0xff); | |
36 } | |
37 header_list->Append(new base::StringValue(key)); | |
38 break; | |
39 } | |
40 } else { | |
41 ++pos; | |
42 } | |
43 } | |
44 | |
45 dict->Set("headers", header_list); | |
46 return dict; | |
47 } | |
48 | |
49 } // namespace net | |
OLD | NEW |