OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/http/http_stream_parser.h" | 5 #include "net/http/http_stream_parser.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/compiler_specific.h" | 10 #include "base/compiler_specific.h" |
11 #include "base/logging.h" | 11 #include "base/logging.h" |
12 #include "base/metrics/histogram_macros.h" | 12 #include "base/metrics/histogram_macros.h" |
13 #include "base/profiler/scoped_tracker.h" | 13 #include "base/profiler/scoped_tracker.h" |
14 #include "base/strings/string_util.h" | 14 #include "base/strings/string_util.h" |
15 #include "base/values.h" | 15 #include "base/values.h" |
16 #include "net/base/io_buffer.h" | 16 #include "net/base/io_buffer.h" |
17 #include "net/base/ip_endpoint.h" | 17 #include "net/base/ip_endpoint.h" |
18 #include "net/base/upload_data_stream.h" | 18 #include "net/base/upload_data_stream.h" |
19 #include "net/http/http_chunked_decoder.h" | 19 #include "net/http/http_chunked_decoder.h" |
20 #include "net/http/http_request_headers.h" | 20 #include "net/http/http_request_headers.h" |
21 #include "net/http/http_request_info.h" | 21 #include "net/http/http_request_info.h" |
22 #include "net/http/http_response_headers.h" | 22 #include "net/http/http_response_headers.h" |
23 #include "net/http/http_status_line_validator.h" | 23 #include "net/http/http_status_line_validator.h" |
24 #include "net/http/http_util.h" | 24 #include "net/http/http_util.h" |
25 #include "net/socket/client_socket_handle.h" | 25 #include "net/socket/client_socket_handle.h" |
26 #include "net/socket/ssl_client_socket.h" | 26 #include "net/socket/ssl_client_socket.h" |
| 27 #include "net/ssl/token_binding.h" |
27 | 28 |
28 namespace net { | 29 namespace net { |
29 | 30 |
30 namespace { | 31 namespace { |
31 | 32 |
32 enum HttpHeaderParserEvent { | 33 enum HttpHeaderParserEvent { |
33 HEADER_PARSER_INVOKED = 0, | 34 HEADER_PARSER_INVOKED = 0, |
34 // Obsolete: HEADER_HTTP_09_RESPONSE = 1, | 35 // Obsolete: HEADER_HTTP_09_RESPONSE = 1, |
35 HEADER_ALLOWED_TRUNCATED_HEADERS = 2, | 36 HEADER_ALLOWED_TRUNCATED_HEADERS = 2, |
36 HEADER_SKIPPED_WS_PREFIX = 3, | 37 HEADER_SKIPPED_WS_PREFIX = 3, |
(...skipping 1056 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1093 | 1094 |
1094 void HttpStreamParser::GetSSLCertRequestInfo( | 1095 void HttpStreamParser::GetSSLCertRequestInfo( |
1095 SSLCertRequestInfo* cert_request_info) { | 1096 SSLCertRequestInfo* cert_request_info) { |
1096 if (request_->url.SchemeIsCryptographic() && connection_->socket()) { | 1097 if (request_->url.SchemeIsCryptographic() && connection_->socket()) { |
1097 SSLClientSocket* ssl_socket = | 1098 SSLClientSocket* ssl_socket = |
1098 static_cast<SSLClientSocket*>(connection_->socket()); | 1099 static_cast<SSLClientSocket*>(connection_->socket()); |
1099 ssl_socket->GetSSLCertRequestInfo(cert_request_info); | 1100 ssl_socket->GetSSLCertRequestInfo(cert_request_info); |
1100 } | 1101 } |
1101 } | 1102 } |
1102 | 1103 |
| 1104 int HttpStreamParser::GetSignedEKMForTokenBinding(crypto::ECPrivateKey* key, |
| 1105 std::vector<uint8_t>* out) { |
| 1106 if (!request_->url.SchemeIsCryptographic() || !connection_->socket()) { |
| 1107 NOTREACHED(); |
| 1108 return ERR_FAILED; |
| 1109 } |
| 1110 SSLClientSocket* ssl_socket = |
| 1111 static_cast<SSLClientSocket*>(connection_->socket()); |
| 1112 return ssl_socket->GetSignedEKMForTokenBinding(key, out); |
| 1113 } |
| 1114 |
1103 int HttpStreamParser::EncodeChunk(const base::StringPiece& payload, | 1115 int HttpStreamParser::EncodeChunk(const base::StringPiece& payload, |
1104 char* output, | 1116 char* output, |
1105 size_t output_size) { | 1117 size_t output_size) { |
1106 if (output_size < payload.size() + kChunkHeaderFooterSize) | 1118 if (output_size < payload.size() + kChunkHeaderFooterSize) |
1107 return ERR_INVALID_ARGUMENT; | 1119 return ERR_INVALID_ARGUMENT; |
1108 | 1120 |
1109 char* cursor = output; | 1121 char* cursor = output; |
1110 // Add the header. | 1122 // Add the header. |
1111 const int num_chars = base::snprintf(output, output_size, | 1123 const int num_chars = base::snprintf(output, output_size, |
1112 "%X\r\n", | 1124 "%X\r\n", |
(...skipping 27 matching lines...) Expand all Loading... |
1140 } | 1152 } |
1141 | 1153 |
1142 void HttpStreamParser::ValidateStatusLine(const std::string& status_line) { | 1154 void HttpStreamParser::ValidateStatusLine(const std::string& status_line) { |
1143 HttpStatusLineValidator::StatusLineStatus status = | 1155 HttpStatusLineValidator::StatusLineStatus status = |
1144 HttpStatusLineValidator::ValidateStatusLine(status_line); | 1156 HttpStatusLineValidator::ValidateStatusLine(status_line); |
1145 UMA_HISTOGRAM_ENUMERATION("Net.HttpStatusLineStatus", status, | 1157 UMA_HISTOGRAM_ENUMERATION("Net.HttpStatusLineStatus", status, |
1146 HttpStatusLineValidator::STATUS_LINE_MAX); | 1158 HttpStatusLineValidator::STATUS_LINE_MAX); |
1147 } | 1159 } |
1148 | 1160 |
1149 } // namespace net | 1161 } // namespace net |
OLD | NEW |