Chromium Code Reviews| 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/quic/quic_stream_factory.h" | 5 #include "net/quic/quic_stream_factory.h" |
| 6 | 6 |
| 7 #include <openssl/aead.h> | 7 #include <openssl/aead.h> |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <tuple> | 10 #include <tuple> |
| (...skipping 1425 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1436 session->connection_id(), "Non-migratable stream"); | 1436 session->connection_id(), "Non-migratable stream"); |
| 1437 if (force_close) { | 1437 if (force_close) { |
| 1438 // Close sessions with non-migratable streams. | 1438 // Close sessions with non-migratable streams. |
| 1439 session->CloseSessionOnError( | 1439 session->CloseSessionOnError( |
| 1440 ERR_NETWORK_CHANGED, | 1440 ERR_NETWORK_CHANGED, |
| 1441 QUIC_CONNECTION_MIGRATION_NON_MIGRATABLE_STREAM); | 1441 QUIC_CONNECTION_MIGRATION_NON_MIGRATABLE_STREAM); |
| 1442 } | 1442 } |
| 1443 continue; | 1443 continue; |
| 1444 } | 1444 } |
| 1445 | 1445 |
| 1446 MigrateSessionToNetwork(session, new_network, bound_net_log, nullptr); | 1446 MigrateSessionToNewSocket(session, session->connection()->peer_address(), |
| 1447 new_network, bound_net_log, nullptr); | |
| 1447 } | 1448 } |
| 1448 } | 1449 } |
| 1449 | 1450 |
| 1450 void QuicStreamFactory::MaybeMigrateSingleSession( | 1451 void QuicStreamFactory::MaybeMigrateSingleSession( |
| 1451 QuicChromiumClientSession* session, | 1452 QuicChromiumClientSession* session, |
| 1452 MigrationCause migration_cause, | 1453 MigrationCause migration_cause, |
| 1453 scoped_refptr<StringIOBuffer> packet) { | 1454 scoped_refptr<StringIOBuffer> packet) { |
| 1454 ScopedConnectionMigrationEventLog scoped_event_log( | 1455 ScopedConnectionMigrationEventLog scoped_event_log( |
| 1455 net_log_, | 1456 net_log_, |
| 1456 migration_cause == EARLY_MIGRATION ? "EarlyMigration" : "WriteError"); | 1457 migration_cause == EARLY_MIGRATION ? "EarlyMigration" : "WriteError"); |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 1468 if (new_network == NetworkChangeNotifier::kInvalidNetworkHandle) { | 1469 if (new_network == NetworkChangeNotifier::kInvalidNetworkHandle) { |
| 1469 // No alternate network found. | 1470 // No alternate network found. |
| 1470 // TODO (jri): Add histogram for this failure case. | 1471 // TODO (jri): Add histogram for this failure case. |
| 1471 scoped_event_log.net_log().AddEvent( | 1472 scoped_event_log.net_log().AddEvent( |
| 1472 NetLog::TYPE_QUIC_CONNECTION_MIGRATION_FAILURE, | 1473 NetLog::TYPE_QUIC_CONNECTION_MIGRATION_FAILURE, |
| 1473 base::Bind(&NetLogQuicConnectionMigrationFailureCallback, | 1474 base::Bind(&NetLogQuicConnectionMigrationFailureCallback, |
| 1474 session->connection_id(), "No new network")); | 1475 session->connection_id(), "No new network")); |
| 1475 return; | 1476 return; |
| 1476 } | 1477 } |
| 1477 OnSessionGoingAway(session); | 1478 OnSessionGoingAway(session); |
| 1478 MigrateSessionToNetwork(session, new_network, scoped_event_log.net_log(), | 1479 MigrateSessionToNewSocket(session, session->connection()->peer_address(), |
| 1479 packet); | 1480 new_network, scoped_event_log.net_log(), packet); |
| 1480 } | 1481 } |
| 1481 | 1482 |
| 1482 void QuicStreamFactory::MigrateSessionToNetwork( | 1483 void QuicStreamFactory::MigrateSessionToNewSocket( |
|
Ryan Hamilton
2016/07/06 19:29:37
(Alternative name "MigrateSession"?)
Jana
2016/07/12 22:34:10
Done.
| |
| 1483 QuicChromiumClientSession* session, | 1484 QuicChromiumClientSession* session, |
| 1484 NetworkHandle new_network, | 1485 IPEndPoint peer_address, |
| 1486 NetworkHandle network, | |
| 1485 const BoundNetLog& bound_net_log, | 1487 const BoundNetLog& bound_net_log, |
| 1486 scoped_refptr<StringIOBuffer> packet) { | 1488 scoped_refptr<StringIOBuffer> packet) { |
| 1487 // Use OS-specified port for socket (DEFAULT_BIND) instead of | 1489 // Use OS-specified port for socket (DEFAULT_BIND) instead of |
| 1488 // using the PortSuggester since the connection is being migrated | 1490 // using the PortSuggester since the connection is being migrated |
| 1489 // and not being newly created. | 1491 // and not being newly created. |
| 1490 std::unique_ptr<DatagramClientSocket> socket( | 1492 std::unique_ptr<DatagramClientSocket> socket( |
| 1491 client_socket_factory_->CreateDatagramClientSocket( | 1493 client_socket_factory_->CreateDatagramClientSocket( |
| 1492 DatagramSocket::DEFAULT_BIND, RandIntCallback(), | 1494 DatagramSocket::DEFAULT_BIND, RandIntCallback(), |
| 1493 session->net_log().net_log(), session->net_log().source())); | 1495 session->net_log().net_log(), session->net_log().source())); |
| 1494 QuicConnection* connection = session->connection(); | 1496 if (ConfigureSocket(socket.get(), peer_address, network) != OK) { |
| 1495 if (ConfigureSocket(socket.get(), connection->peer_address(), new_network) != | |
| 1496 OK) { | |
| 1497 session->CloseSessionOnError(ERR_NETWORK_CHANGED, QUIC_INTERNAL_ERROR); | 1497 session->CloseSessionOnError(ERR_NETWORK_CHANGED, QUIC_INTERNAL_ERROR); |
| 1498 HistogramAndLogMigrationFailure( | 1498 HistogramAndLogMigrationFailure( |
| 1499 bound_net_log, MIGRATION_STATUS_INTERNAL_ERROR, | 1499 bound_net_log, MIGRATION_STATUS_INTERNAL_ERROR, |
| 1500 session->connection_id(), "Socket configuration failed"); | 1500 session->connection_id(), "Socket configuration failed"); |
| 1501 return; | 1501 return; |
| 1502 } | 1502 } |
| 1503 std::unique_ptr<QuicChromiumPacketReader> new_reader( | 1503 std::unique_ptr<QuicChromiumPacketReader> new_reader( |
| 1504 new QuicChromiumPacketReader(socket.get(), clock_.get(), session, | 1504 new QuicChromiumPacketReader(socket.get(), clock_.get(), session, |
| 1505 yield_after_packets_, yield_after_duration_, | 1505 yield_after_packets_, yield_after_duration_, |
| 1506 session->net_log())); | 1506 session->net_log())); |
| (...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1876 // Since the session was active, there's no longer an | 1876 // Since the session was active, there's no longer an |
| 1877 // HttpStreamFactoryImpl::Job running which can mark it broken, unless the TCP | 1877 // HttpStreamFactoryImpl::Job running which can mark it broken, unless the TCP |
| 1878 // job also fails. So to avoid not using QUIC when we otherwise could, we mark | 1878 // job also fails. So to avoid not using QUIC when we otherwise could, we mark |
| 1879 // it as recently broken, which means that 0-RTT will be disabled but we'll | 1879 // it as recently broken, which means that 0-RTT will be disabled but we'll |
| 1880 // still race. | 1880 // still race. |
| 1881 http_server_properties_->MarkAlternativeServiceRecentlyBroken( | 1881 http_server_properties_->MarkAlternativeServiceRecentlyBroken( |
| 1882 alternative_service); | 1882 alternative_service); |
| 1883 } | 1883 } |
| 1884 | 1884 |
| 1885 } // namespace net | 1885 } // namespace net |
| OLD | NEW |