Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(843)

Unified Diff: net/http/http_network_transaction.cc

Issue 1755005: SPDY: Fix Alternate-Protocol. (Closed)
Patch Set: Address mbelshe's comments. Created 10 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/http/http_network_transaction.h ('k') | net/http/http_network_transaction_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/http/http_network_transaction.cc
diff --git a/net/http/http_network_transaction.cc b/net/http/http_network_transaction.cc
index f3cd4d5489a5d755238b5d25e713ed9c9052ad83..544c033c930e12bdfa05951d1b8a999099fd9cd6 100644
--- a/net/http/http_network_transaction.cc
+++ b/net/http/http_network_transaction.cc
@@ -710,25 +710,28 @@ int HttpNetworkTransaction::DoInitConnection() {
// Build the string used to uniquely identify connections of this type.
// Determine the host and port to connect to.
std::string connection_group;
- std::string host;
- int port;
+
+ // |endpoint| indicates the final destination endpoint.
+ HostPortPair endpoint;
+ endpoint.host = request_->url.HostNoBrackets();
+ endpoint.port = request_->url.EffectiveIntPort();
+
if (proxy_mode_ != kDirectConnection) {
ProxyServer proxy_server = proxy_info_.proxy_server();
connection_group = "proxy/" + proxy_server.ToURI() + "/";
- host = proxy_server.HostNoBrackets();
- port = proxy_server.port();
+ peer_.host = proxy_server.HostNoBrackets();
+ peer_.port = proxy_server.port();
} else {
- host = request_->url.HostNoBrackets();
- port = request_->url.EffectiveIntPort();
+ peer_ = endpoint;
if (alternate_protocol_mode_ == kUnspecified) {
const HttpAlternateProtocols& alternate_protocols =
session_->alternate_protocols();
- if (alternate_protocols.HasAlternateProtocolFor(host, port)) {
+ if (alternate_protocols.HasAlternateProtocolFor(peer_)) {
HttpAlternateProtocols::PortProtocolPair alternate =
- alternate_protocols.GetAlternateProtocolFor(host, port);
+ alternate_protocols.GetAlternateProtocolFor(peer_);
if (alternate.protocol != HttpAlternateProtocols::BROKEN) {
DCHECK_EQ(HttpAlternateProtocols::NPN_SPDY_1, alternate.protocol);
- port = alternate.port;
+ peer_.port = alternate.port;
using_ssl_ = true;
alternate_protocol_ = HttpAlternateProtocols::NPN_SPDY_1;
alternate_protocol_mode_ = kUsingAlternateProtocol;
@@ -740,25 +743,27 @@ int HttpNetworkTransaction::DoInitConnection() {
// Use the fixed testing ports if they've been provided.
if (using_ssl_) {
if (session_->fixed_https_port() != 0)
- port = session_->fixed_https_port();
+ peer_.port = session_->fixed_https_port();
} else if (session_->fixed_http_port() != 0) {
- port = session_->fixed_http_port();
+ peer_.port = session_->fixed_http_port();
}
// Check first if we have a spdy session for this group. If so, then go
// straight to using that.
- HostPortPair host_port_pair(host, port);
- if (session_->spdy_session_pool()->HasSession(host_port_pair)) {
+ if (session_->spdy_session_pool()->HasSession(peer_)) {
using_spdy_ = true;
return OK;
}
// For a connection via HTTP proxy not using CONNECT, the connection
// is to the proxy server only. For all other cases
- // (direct, HTTP proxy CONNECT, SOCKS), the connection is upto the
+ // (direct, HTTP proxy CONNECT, SOCKS), the connection is up to the
// url endpoint. Hence we append the url data into the connection_group.
- if (proxy_mode_ != kHTTPProxy)
- connection_group.append(request_->url.GetOrigin().spec());
+ // Note that the url endpoint may be different in the Alternate-Protocol case.
+ if (proxy_mode_ == kDirectConnection)
+ connection_group = peer_.ToString();
+ else if (proxy_mode_ != kHTTPProxy)
+ connection_group.append(endpoint.ToString());
DCHECK(!connection_group.empty());
@@ -766,8 +771,8 @@ int HttpNetworkTransaction::DoInitConnection() {
bool disable_resolver_cache = request_->load_flags & LOAD_BYPASS_CACHE ||
request_->load_flags & LOAD_DISABLE_CACHE;
- TCPSocketParams tcp_params(host, port, request_->priority, request_->referrer,
- disable_resolver_cache);
+ TCPSocketParams tcp_params(peer_.host, peer_.port, request_->priority,
+ request_->referrer, disable_resolver_cache);
int rv;
if (proxy_mode_ != kSOCKSProxy) {
@@ -1250,20 +1255,19 @@ int HttpNetworkTransaction::DoSpdySendRequest() {
// if one already exists, then screw it, use the existing one! Otherwise,
// use the existing TCP socket.
- HostPortPair host_port_pair(request_->url.HostNoBrackets(),
- request_->url.EffectiveIntPort());
const scoped_refptr<SpdySessionPool> spdy_pool =
session_->spdy_session_pool();
scoped_refptr<SpdySession> spdy_session;
- if (spdy_pool->HasSession(host_port_pair)) {
- spdy_session = spdy_pool->Get(host_port_pair, session_);
+ if (spdy_pool->HasSession(peer_)) {
+ spdy_session = spdy_pool->Get(peer_, session_);
} else {
// SPDY is negotiated using the TLS next protocol negotiation (NPN)
// extension, so |connection_| must contain an SSLClientSocket.
DCHECK(using_ssl_);
+ CHECK(connection_->socket());
spdy_session = spdy_pool->GetSpdySessionFromSSLSocket(
- host_port_pair, session_, connection_.release());
+ peer_, session_, connection_.release());
}
CHECK(spdy_session.get());
« no previous file with comments | « net/http/http_network_transaction.h ('k') | net/http/http_network_transaction_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698