summaryrefslogtreecommitdiffstats
path: root/net/quic/quic_session.cc
Commit message (Collapse)AuthorAgeFilesLines
* Revert "Sent QUIC "PING" frames when a stream is open and the connection"dominicc@google.com2014-04-211-8/+0
| | | | | | | | | | | | Speculative rollout. I believe this broke Linux Aura compile <http://build.chromium.org/p/chromium.webkit/builders/Linux%20Aura/builds/20211> TBR=rch@chromium.org BUG= Review URL: https://codereview.chromium.org/244563002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@264960 0039d316-1c4b-4281-b951-d872f2087c98
* Land Recent QUIC Changes.rtenneti@chromium.org2014-04-201-2/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Minor change to QUIC's hybrid slow start to start the round at the first closely spaced ack pair. Merge internal change: 65018864 https://codereview.chromium.org/242663002/ Fixes bug where a revived packet's header was not being populated correctly from the received FEC packet's header. Added tests to verify that revived packet headers are correctly regenerated for varying sequence number and connection id lengths. Moving closer towards FEC correctness in code. Bug fixes to FEC packet revival code, and additional tests for revived packets. Merge internal change: 65009931 https://codereview.chromium.org/242223003/ Remove mostly redundant FramerVisitorCapturingPublicReset from net/quic/test_tools/quic_test_utils.h. Use SimpleQuicFramer in QuicConnectionTest and remove mostly redundant FramerVisitorCapturingFrames. Merge internal change: 65008278, 65067000 https://codereview.chromium.org/241643004/ Changes found while sync'ing internal source code with chromium code. - Minor comment change. - Added using statement. Merge internal change: 64933978 https://codereview.chromium.org/242643002/ Large fixes and simplifications to QUIC's HybridSlowStart to correctly determine the start and end of rounds. Previously the assumption was that the available window was 0 only at the end of a sending burst, but in reality that's only accurate for the first burst, so the resulting code did not work as intended and rounds were likely cut very short. Merge internal change: 64911496 https://codereview.chromium.org/242633002/ Add a bytes_spuriously_retransmitted, max_packet_size, and congestion_window to QuicConnectionStats and populate the TcpStats with cwnd and bytes_spuriously_retransmitted. Merge internal change: 64890213 https://codereview.chromium.org/242533002/ R=rch@chromium.org Review URL: https://codereview.chromium.org/243813002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@264954 0039d316-1c4b-4281-b951-d872f2087c98
* Sent QUIC "PING" frames when a stream is open and the connectionrch@chromium.org2014-04-201-0/+8
| | | | | | | | has been idle for the half idle network timeout. Review URL: https://codereview.chromium.org/243533003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@264950 0039d316-1c4b-4281-b951-d872f2087c98
* Land Recent QUIC Changes.rtenneti@chromium.org2014-04-181-4/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Disable QuicFlowController for QUIC versions < QUIC_VERSION_17 Chrome Beta was happily advertising a flow control receive window of length 0, under the assumption that because the version of QUIC being spoken didn't support flow control, a zero length window advertisement would have no adverse effects. On the server end, the refactoring in internal change: 64733866 resulted in the QUIC version not being checked when querying QuicFlowController::IsBlocked. IsBlocked would look at the client's advertised receive window, and conclude that no data could be sent. This would never change as the flow control accounting is protected behind version checks. Ultimately this means that once a stream was marked as write blocked, it would never resume writing: https://codereview.chromium.org/242453002/diff/1/net/quic/quic_session.cc?context=&column_width=80 (line# 286) resulting in a connection timeout. This CL explicitly disables the QuicFlowController when the negotiated QUIC version is < QUIC_VERSION_17. Merge internal change: 65137349 This internal change was LGTM'ed by rch. Wanted to port this change to disable flow control. https://codereview.chromium.org/242583002/ Downgrading rst stream codes which wouldn't be recognized by the peer. chromium: fixed chromium's unit tests to use AdjustErrorForVersion. Merge internal change: 64783797 https://codereview.chromium.org/242483002/ Added WriteResult::WriteResult method for internal use. Merge internal change: 64780998 https://codereview.chromium.org/242293003/ QUIC: When sending a RST stream for flow control accounting purposes, include a more descriptive error code. Prompted by alyssar's comment in internal change: 61236803 Chromium specific code: + deleted unused ConstructRstPacket method from QuicNetworkTransactionTest. + Changed ConstructRstPacket to use the new descriptive error code. Merge internal change: 64774941 https://codereview.chromium.org/242093003/ Pull out flow control functionality from ReliableQuicStream into a new class, QuicFlowController. Without this refactoring, all the accounting of bytes sent/buffered/consumed, comparisons of these with limits to decide if blocked or not, will be duplicated in ReliableQuicStream and QuicConnection. Putting all this in a new class means it's easier to have more comprehensive testing, simplifies ReliableQuicStream, and will make it much easier to add Connection level flow control (work in progress internal change: 63944402). Refactor of QUIC stream flow control. No behavior change, still protected behind FLAGS_enable_quic_stream_flow_control. This flag is currently disabled. Merge internal change: 64733866 https://codereview.chromium.org/242453002/ Plumbs through delta_largest_observed from QuicSentPackerManager::HandleAckForSentPacket, up to the QuicAckNotifier. Eventually these values get to the QuicFasterStatsGatherer which now performs a more accurate RT calculation. The important changes are in QuicSentPacketManager (pulling the delta out of ReceivedInfo), and in QuicFasterStatsGatherer (doing the new calculation of RT). The rest is plumbing and updating tests. Improve accuracy of QUIC FasterStats RT calculation by using the delta time included with delayed ACKs. Merge internal change: 64721749 https://codereview.chromium.org/241783002/ Fixed a bug in QuicPacketCreator when FEC was used for unsupported versions, and made packet_creator tests run across all supported versions of QUIC. Merge internal change: 64701677 https://codereview.chromium.org/241483004/ Fix to ensure hybrid slow start is reset when QUIC's retransmission timer fires. Merge internal change: 64698621 https://codereview.chromium.org/241563002/ R=rch@chromium.org Review URL: https://codereview.chromium.org/242593002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@264889 0039d316-1c4b-4281-b951-d872f2087c98
* Land Recent QUIC Changesrtenneti@chromium.org2014-04-151-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add reordering statistics and min_rtt to QuicConnectionStats. Merge internal change: 64582035 https://codereview.chromium.org/231733008/ Add a slowstart packets lost stat to allow QUIC to track how many packets are lost when exiting slowstart. Merge internal change: 64548567 https://codereview.chromium.org/231833004/ Added hooks to QUIC time wait list manager so that internal server specific code could be separated. Merge internal change: 64500752 https://codereview.chromium.org/231863006/ Cleanup changes found while merging the privacy mode changes into the internal source tree. Merge internal change: 64377731 https://codereview.chromium.org/232433002/ Add test-only MakeAckFrame method to quic_test_utils, and remove the test-only QuicAckFrame constructor which was not using the 2nd argument. Used MakeAckFrame method in chrome specific code also. Merge internal change: 64373111 https://codereview.chromium.org/231863005/ Set the send and receive buffers for the QuicClient and QuicServer to the default receive window for QUIC's TCP Sender. QUIC cleanup to create SetSendBufferSize and SetReceiveBufferSize in QuicSocketUtils. Merge internal change: 64358078, 64380825 https://codereview.chromium.org/232243003/ Added writer() helper method to QuicConnection. Made CreateQuicConnection of QuicDispatcher a virtual method and added helper methods for helper, writer and initial_flow_control_window_bytes. Merge internal change: 64357422 https://codereview.chromium.org/232013005/ When multiple streams have pending writes in QUICSession, bundle them into as few packets as possible rather. Previously the header stream and the body stream were always written in separate packets. Fixed chrome specific unit tests to accept extra ack frame. Merge internal change: 64304809 https://codereview.chromium.org/232013005/ QUIC refactor to use the congestion window directly when calculating the packet sequence number length, instead of calculating the window indirectly. Merge internal change: 64295053 https://codereview.chromium.org/232003003/ Refactor to isolate the PRR logic from the rest of TCPCubicSender. Merge internal change: 64210335 https://codereview.chromium.org/232173002/ R=rch@chromium.org Review URL: https://codereview.chromium.org/232463003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@263995 0039d316-1c4b-4281-b951-d872f2087c98
* More attempts to fix the crash in QuicConnection::CanWrite.rch@chromium.org2014-04-071-1/+5
| | | | | | | | BUG=354669 Review URL: https://codereview.chromium.org/227233009 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@262195 0039d316-1c4b-4281-b951-d872f2087c98
* Land Recent QUIC Changes.rtenneti@chromium.org2014-03-311-15/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add a QUIC flag to enable time based loss detection as the default. Merge internal change: 63942432 (this CL was merged in https://codereview.chromium.org/217133004/ added FLAGS_quic_use_time_loss_detection to quic_flags.cc and made the change to quic_connection.cc also). Now that we have a default send window, no need to send WINDOW_UPDATE to ensure streams are not flow control blocked Merge internal change: 63887815 https://codereview.chromium.org/217003005/ Changing the max stream delta to allow for all open streams in a given direction. Previously, we allowed 100 streams (200 even/odd stream ids) but an insufficient delta of 100. Allowing a slightly larger stream delta for QUIC. Merge internal change: 63880428 https://codereview.chromium.org/212063006/ UDP proxy session for QUIC. This is not production ready. Major issues include the sharding issue and the time wait list. Merge internal change: 63878878 https://codereview.chromium.org/216943004/ Don't try and close a QUIC connection twice while processing a single incoming packet. Merge internal change: 63878490 https://codereview.chromium.org/217053004/ Added missing OVERRIDE. Add the ability to negotiate the QUIC loss detection algorithm in the crypto handshake. Added FLAGS_quic_congestion_control_inter_arrival and FLAGS_quic_use_time_loss_detection. They default to false. Merge internal change: 63874474 https://codereview.chromium.org/217133004/ Send BLOCKED frame directly from ReliableQuicStream. Merge internal change: 63808643 https://codereview.chromium.org/216423006/ Simplified ReliableQuicStream::IsFlowControlBlocked. Merge internal change: 63807857 https://codereview.chromium.org/217103003/ Track the sent_time for ack packets so the RTT is updated when ack packets are acked as the largest observed. Merge internal change: 63806273 https://codereview.chromium.org/216423005/ R=rch@chromium.org Review URL: https://codereview.chromium.org/217303003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@260695 0039d316-1c4b-4281-b951-d872f2087c98
* Land Recent QUIC Changesrtenneti@chromium.org2014-03-311-1/+37
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Remove a LOG_IF(DFATAL) for retransmitting packets which were never given a sent time. This DCHECK was firing on Chrome when Windows buffered a packet and before the callback for the packet being sent, Chrome received a server reject and had to change crypto context and retransmit all unacked packets. Merge internal change: 63686840 https://codereview.chromium.org/214413009/ Rename of QUIC flow control member variables to be more explicit (prefix flow_control) and more descriptive ("max" instead of "initial"). Merge internal change: 63599012 https://codereview.chromium.org/215423003/ Change comment in QuicSessionTest to be more accurate, and add another expectation to ensure stream is not flow control blocked before sending any data. Merge internal change: 63604321 Fixed compilation warnings in quic_sent_packet_manager_test.cc. https://codereview.chromium.org/214823010/ Added UseWriter changes to QuicTestClient while porting internal code that handles the client side of unwinding UDP proxied QUIC changes. Merge internal change: 63542972 https://codereview.chromium.org/214083003/ Change to QUIC's SendAlgorithmInterface to remove IsHandshake from TimeUntilSend. Changed QuicSentPacketManager to ensure it always retransmitted crypto handshake packets before other retransmissions. Merge internal change: 63540663 https://codereview.chromium.org/214923003/ Removing TransmissionType from QUIC's TimeUntilSend method. The only real user was was TcpCubicSender for tail loss probe, and TLP is better fully contained within the SentPacketManager. Merge internal change: 63501475 https://codereview.chromium.org/214083002/ Removed unnecessary transmission_type from Quic's send algorithm interface. The few remaining uses were improper, so there is a minor change in behavior. Merge internal change: 63480011 https://codereview.chromium.org/211693004/ Introduce QUIC_VERSION_17: per-stream flow control. Default send window is 16 KB, and the client/server can specify higher values in their CHLO/SHLO messages. WINDOW_UPDATE frames are sent when the receiver has consumed more than half of their receive window (behavior copied from SPDY), and BLOCKED frames are sent if a write is attempted while flow control blocked. Protected behind FLAGS_enable_quic_stream_flow_control. Merge internal change: 63474251 https://codereview.chromium.org/211743005/ Adding an accessor to quic dispatcher. Merge internal change: 63470311 https://codereview.chromium.org/208273008/ R=rch@chromium.org Review URL: https://codereview.chromium.org/215663002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@260637 0039d316-1c4b-4281-b951-d872f2087c98
* Land Recent QUIC Changes.rtenneti@chromium.org2014-03-201-4/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fix QUIC's nack counting to only increase the nack count for packets less than the largest newly observed packet. Reduces spurious retransmissions in the case of re-ordering. Merge internal change: 63410263 https://codereview.chromium.org/206023002/ Removing deprecated flag FLAGs_cancel_crypto_callbacks_on_close. Merge internal change: 63402129 https://codereview.chromium.org/205923003/ Add separate categories for retransmissions due to timeouts during handshake and loss detection. Merge internal change: 63287115 https://codereview.chromium.org/206003002/ Include acks for response headers sent over QUIC in faster stats RT and loss computations. This CL includes internals server's quic changes to allow application code to specify a QuicAckNotifier delegate when doing buffered writes through QUIC connection, since that is the write mechanism used by QuicFdWrapper to write to the headers stream. Merge internal change: 63174706 https://codereview.chromium.org/205613003/ Inform QuicAckNotifierManager about the newest sequence number that corresponds to an acked packet, so that QUIC FasterStats RT computations are not affected by spurious TLP retransmits. Fix QUIC FasterStats RT reporting by considering a packet acked if any of its retransmissions are acked. Not flag protected. Merge internal change: 63152079 https://codereview.chromium.org/204103004/ Merge various changes to QuicCryptoClientStream from Chrome. Merge internal change: 63102660 https://codereview.chromium.org/199273003/ Deleting unused MarkConsumed method from QuicStreamSequencer. Merge internal change: 63098466 https://codereview.chromium.org/200123003/ R=rch@chromium.org Review URL: https://codereview.chromium.org/205983003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@258386 0039d316-1c4b-4281-b951-d872f2087c98
* Move all Chrome-specific logic out of QuicCryptoClientStreamrch@chromium.org2014-03-181-1/+1
| | | | | | | | and into QuicClientSession (which is Chrome-specific). Review URL: https://codereview.chromium.org/197873011 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@257667 0039d316-1c4b-4281-b951-d872f2087c98
* Land Recent QUIC Changesrtenneti@chromium.org2014-03-131-6/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add varz to track QUIC packets and bytes sent by transmission type. Not flag protected. Merge internal change: 63037893 + Updated QuicConnectionLogger to log TransmissionType. + Used connection_id instead of GUID in the comments. + Moved QUIC_SESSION_PACKET_SENT and QUIC_SESSION_PACKET_RETRANSMITTED to match the log messages description. https://codereview.chromium.org/196053008/ Killing off QUIC v14, which was never actually used. Merge internal change: 63025464 https://codereview.chromium.org/198523002/ Adds a varz variable to track the fraction of times we end up in cubic mode during congestion control. Merge internal change: 62977386 https://codereview.chromium.org/198303004/ Export QUIC response retransmit packet and byte counts via faster stats. Computation is done on a stream basis and ignores retransmitted control packets. Merge internal change: 62911712 https://codereview.chromium.org/197473012/ Avoiding a double disconnect scenario, and DFATALs on server. Merge internal change: 62767600 https://codereview.chromium.org/198263003/ Making GOAWAY advisory for SPDY-over-QUIC. Sending GOAWAYs on new connections when the server enters lame duck. Making sure we only send a GOAWAY once on a given connection. Merge internal change: 62700562 https://codereview.chromium.org/196343008/ R=rch@chromium.org Review URL: https://codereview.chromium.org/198353003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@256932 0039d316-1c4b-4281-b951-d872f2087c98
* Killing off QUICv12, including cleaning out all of the code for handlingrtenneti@chromium.org2014-03-031-145/+15
| | | | | | | | | | | | headers within a stream. Merge internal change: 62227108 R=rch@chromium.org Review URL: https://codereview.chromium.org/185203003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@254563 0039d316-1c4b-4281-b951-d872f2087c98
* Land Recent QUIC Changes.rtenneti@chromium.org2014-02-271-4/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | These LOG(INFO)s claimed 8-9% of time under a load test. Reduce logspam in QuicUnackedPacketMap. Merge internal change: 61895796 https://codereview.chromium.org/179773007/ QUIC WINDOW_UPDATE and BLOCKED frames instigate ACKs. Merge internal change: 61894847 https://codereview.chromium.org/180013004/ Avoiding quic double-close bugs by detecting it at the connection. Merge internal change: 61890466 https://codereview.chromium.org/180793003/ BLOCKED frames not being cleared. These are not yet used. (minor) Clear last BLOCKED frames in QuicConnection Merge internal change: 61875848 https://codereview.chromium.org/180793002/ QUIC - minor cleanup while merging internal change. Merge internal change: 61850595 https://codereview.chromium.org/177073016/ Create QUIC_VERSION_16 which breaks the sent_info field out of the ACK frame into a new STOP_WAITING frame. Does not change when this information is sent. That will happen in a follow-up CL. Send STOP_WAITING_FRAME for QUIC version 16 and above with Ack frame. Added logging for WINDOW_UPDATE and BLOCKED frames. Merge internal change: 61838258 https://codereview.chromium.org/180383004/ QUIC test refactor to move tests from the QuicSentPacketManagerTest to the new TcpLossAlgorithmTest. Merge internal change: 61837708 https://codereview.chromium.org/177203008/ Ctrl-F for "packet XY" in debug logs now matches sent packets "Sending packet XY", and received packets "Got packet XY". (minor) Improve QUIC packet sent debug log message Merge internal change: 61836667 https://codereview.chromium.org/177003007/ Auotmated rollback of internal changelist 57996291. *** Reason for rollback *** Now that clients no longer suggests 100 by default, it would be nice to experiment with allowing the client to suggest larger CWNDs. *** Original change description *** Temporarily change the maximum server initial congestion window to 10 from 100, because many existing Chrome clients are still negotiating 100, causing visible performance issues, particularly for YouTube rebuffers. *** Merge internal change: 61825277 https://codereview.chromium.org/178853003/ Refactor to create a new LossDetectionInterface used by the QuicSentPacketManager. Merge internal change: 61813052 https://codereview.chromium.org/178453005/ Preparation for only writing a fraction of the iov due to flow control blocking in ReliableQuicStream::WritevData. Add max_bytes argument to QuicSession::WritevData Merge internal change: 61810929 https://codereview.chromium.org/177203006/ R=rch@chromium.org Review URL: https://codereview.chromium.org/180723003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@253647 0039d316-1c4b-4281-b951-d872f2087c98
* QUIC - changes to LOG statements found while merging the followingrtenneti@chromium.org2014-02-201-2/+3
| | | | | | | | | | | | chromium CL into internal code. https://codereview.chromium.org/171693003/ R=rch@chromium.org Review URL: https://codereview.chromium.org/168263005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@252358 0039d316-1c4b-4281-b951-d872f2087c98
* Land Recent QUIC Changes.rtenneti@chromium.org2014-02-201-13/+66
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Refactor QuicSentPacketManager to move loss detection into a separate static method in preparation for moving loss dection into a separate interface. Merge internal change: 61764458 https://codereview.chromium.org/164913008/ Refactor to move the packet_history_map_ from the QuicSentPacketManager to the InterArrivalSender. Merge internal change: 61747951 https://codereview.chromium.org/171233003/ Add const to methods in ReliableQuicStream Merge internal change: 61745963 https://codereview.chromium.org/171743002/ Ensure that QUIC packets are always written in sequence number order by not re-consulting the congestion manager after it allows the packet to be written once. Merge internal change: 61608609 https://codereview.chromium.org/171683003/ Remove return values from OnCanWrite methods in favor of explicit HasPendingWrites() calls. The important difference is that QuicDispatcher will no longer insert a writer into a blocked list simply because the socket is not blocked. This fixes the bug. Ran all tests in internal server tests a thousand times, looks stable. I was trying to hammer this out in the internal streamer loadtest, but the testing framework is having issues and I don't have an ETA on fixing that. Fix infinite loop in QuicDispatcher. Merge internal change: 61601805 https://codereview.chromium.org/169223007/ This brings us closer to implementing flow control. Now WINDOW_UPDATEs and RSTs are plumbed through to the appropriate streams, but no behavior change yet. (minor) Implement QuicConnectionVisitorInterface in various places, no behavior change. Merge internal change: 61597640 nit: Fixed couple of indentation with DVLOG(1) lines. https://codereview.chromium.org/171653002/ Add bytes_sent and nack_count to UnackedPacketMap's TransmissionInfo, allowing for the movement of the packet_history_map into the InterArrivalSender. Merge internal change: 61547066 https://codereview.chromium.org/171543002/ Two minor bug fixes in Reno congestion control that (i) caused sender to have a congestion window of 1 packet more than it should at the end of loss recovery, and (ii) required 1 more ack than necessary for congestion window growth while in congestion avoidance. Merge internal change: 61531359 https://codereview.chromium.org/170673004/ Fix a use after free bug caught by asan in QUIC's OnPacketSent method. Bug was introduced in cr/61457571. Merge internal change: 61525312 https://codereview.chromium.org/171513002/ Double checking the kernel docs, it looks like packets_dropped is a uint32. Which really makes more sense anyway. http://www.spinics.net/lists/netdev/msg268644.html Fixing the type of a kernel-provided counter from int to uint Merge internal change: 61517449 https://codereview.chromium.org/171493002/ Remove unused SetMaxPacketSize from QUIC's SentPacketManager and send algorithms. Merge internal change: 61467515 https://codereview.chromium.org/166273006/ Change QuicConnection to no longer send acks when the peer's least unacked needs to be raised, and instead only bundle them with outgoing data. Merge internal change: 61459311 https://codereview.chromium.org/171363004/ Replace PendingPacket with QueuedPacket to simplify QuicConnection's packet writing code. Merge internal change: 61457571 https://codereview.chromium.org/171373003/ Break out the QUIC unacked packet map into a stand alone class. Merge internal change: 61357541 https://codereview.chromium.org/171243002/ Fixing one case we could ostensibly end up with multiple session timeouts and adding logging so we can debug better if we see it again. Flag protected. Fixing a potential session closing bug and adding better logging. Merge internal change: 61334956 https://codereview.chromium.org/171033003/ R=rch@chromium.org Review URL: https://codereview.chromium.org/171693003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@252298 0039d316-1c4b-4281-b951-d872f2087c98
* Remove OnConfigNegotiated from QuicConnectionVisiterInterface.wtc@chromium.org2014-02-141-4/+0
| | | | | | | | | | | | | | | | | | | | QuicConnection never calls visitor_->OnConfigNegotiated. OnConfigNegotiated is only called by QuicCryptoStream on QuicSession. Merge internal CL: 61467714 Remove the unused server_config_id_ member from QuicCryptoClientConfig::CachedState. Merge internal CL: 61394953 R=rch@chromium.org,rtenneti@chromium.org BUG=none TEST=none Review URL: https://codereview.chromium.org/162493003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@251204 0039d316-1c4b-4281-b951-d872f2087c98
* Land Recent QUIC Changes.rtenneti@chromium.org2014-02-101-0/+6
| | | | | | | | | | | | | | | | | | | | | | | | | Fix a bug where acks were not being bundled with data, and data was not being bundled with data in QUIC. Add a test to ensure an incoming ack to the server caused an ack packet and a data packet to be sent bundled, not separately. Merge internal change: 61238548 https://codereview.chromium.org/153593003/ Send a QUIC RST on stream termination if neither a RST nor a FIN have yet been sent. This is to allow accurate flow control accounting which requires a RST or FIN must be sent in response to a RST. Merge internal change: 61236803 https://codereview.chromium.org/137493009/ R=rch@chromium.org Review URL: https://codereview.chromium.org/135163008 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@250072 0039d316-1c4b-4281-b951-d872f2087c98
* Land Recent QUIC Changes.rtenneti@chromium.org2014-02-091-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add a LOG(DFATAL) if the sequence number length is too small to fit the least_unacked delta in a QUIC ack frame. Merge internal change: 61228351 https://codereview.chromium.org/156233004/ Change the types of the arguments to two methods in QuicReceivedPacketManager to be more specific. No behavior changes. Merge internal change: 61215502 https://codereview.chromium.org/157803006/ Add convenience version() method to QuicServerSessionTest. Merge internal change: 61210235 https://codereview.chromium.org/158173002/ Add convenience version() method to QuicSessionTest. Merge internal change: 61206589 https://codereview.chromium.org/158063003/ Fix bug in QuicSentPacketManager::ClearPreviousRetransmissions where pending packets were abandoned instead of being kept unacked so they could be detected to be lost. Merge internal change: 61197933 https://codereview.chromium.org/158073007/ Add QUIC_VERSION_15 to add a revived_packets set to replace the deprecated accumulated_number_of_lost_packets field. FEC requires a way to communicate that the peer doesn't need a packet retransmitted, without indicating it's been received to the send algorithm. Merge internal change: 61159374 https://codereview.chromium.org/157403006/ Rename previous_transmissions to all_transmission in the QUIC unacked packet map. Change all_transmission to include all transmissions of a packet, even if there is only one, instead of becoming null. Merge internal change: 61144526 https://codereview.chromium.org/158153002/ Use an alternative fix for OneShotVisitor of CryptoFramer that doesn't require a done() method. Detect an old-style Public Reset packet by checking for a sequence number length of 6 in public flags. This requires updating the expected error details messages in PublicResetPacket unit tests. Merge internal change: 61152017 https://codereview.chromium.org/153993015/ Refactor QuicSentPacketManager::MarkPacketHandled to simplify implementation in preparation for breaking out the unacked packet map. Also fixes a minor bug in which a packet which has been marked for retransmission would still be retransmitted if a previous transmission was acked. Merge internal change: 61139074 https://codereview.chromium.org/137923007/ Doing early validation of quic config, to change a potential crash-during-serving to a crash-on-startup. Changing a serving crash to a start-up crash. Not flag protected Merge internal change: 61136961 https://codereview.chromium.org/157383006/ Remove parity tracking in FEC groups as part of the migration to QUIC_VERSION_15, which does not need it. Merge internal change: 61136827 https://codereview.chromium.org/157913003/ Comment out flaky test expectation while the root cause is investigated. Merge internal change: 61104556 https://codereview.chromium.org/135933005/ QUIC - clean up changes - fixed during merge with internal source code. Merge internal change: 61045294 https://codereview.chromium.org/157403005/ Fix problems with absolute value function. The standard library provides seven absolute value functions.  From C, there is abs, labs, llabs, fabs, fabsf, and fabsl for the types int, long, long long, double, float and long double.  Due to numeric conversions, these functions can accept arguments of any numeric types, silently converting between types.  C++ libraries has std::abs, which provides overloads for all these types, making it a better choice.  The following problems have been observed, along with their fixes: 1) The wrong sized absolute value was used.  Using abs for a long long would cause a cast to int first, resulting in unexpected values outside of the range (INT_MIN, INT_MAX).  Switch to using std::abs 2) Using the wrong type of absolute value function.  Passing a floating point number to an integer absolute value will cause rounding of values, especially important for values close to zero.  Switch to using std::abs 3) Taking the absolute value of an unsigned value.  This usually has no effect, but may have some effects from casting.  Fixed by removing the absolute value function. 4) Attempting to find the absolute difference between two unsigned values.  These were transformed from abs(a - b) to (a > b ? a - b : b - a).  This ternary expression is usually stored in another variable. 5) Accidentally capturing the conditional such as abs(a - b < threshold).  Moving the parentheses over to fix. 6) Some static_casts were used to, such as from uint32 -> int64, to get a signed value in the absolute value. 7) A few types were changed from unsigned to signed. Merge internal change: 61013787 https://codereview.chromium.org/136123012/ Pass the whole QuicRstStreamFrame to OnStreamReset. Preparation for dealing with byte_offset updates that arrive in the RST frame. (minor) QUIC OnStreamReset now takes QuicRstStreamFrame as argument. Merge internal change: 60995908 https://codereview.chromium.org/142373006/ R=rch@chromium.org Review URL: https://codereview.chromium.org/157803007 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@249994 0039d316-1c4b-4281-b951-d872f2087c98
* Land Recent QUIC Changes.rtenneti@chromium.org2014-02-061-3/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Remove QUIC's accummulated_number_of_lost_packets from the TCP and InterArrival congestion feedback frames. This is part of the migration to version 15, and removes a field which was intended to be used by FEC, but never set to a non-zero value previously due to a bug in the code. Merge internal change: 60948757 https://codereview.chromium.org/155723002/ Add stats for lost and spuriously retransmitted packets to QuicConnectionStats. Merge internal change: 60932905 https://codereview.chromium.org/149793004/ The MOCK_METHODx usages removed in this CL try to mock either a non-virtual or not existing method and are thus never called. Please look carefully at each deletion. Instead of deleting, the right fix might be: - Fix spelling or signature to actually overwrite a method in the base class - Make the method in the base class virtual - This is a currently unused mock intended to mock a non-virtual method via template injection and it should be left alone Merge internal change: 60910454 https://codereview.chromium.org/153093006/ Cleanup: Remove inclusion of base/scoped_ptr.h in files which don't use scoped_ptr. Testing ensures that these inclusions don't have transitive dependencies. Merge internal change: 60858913 https://codereview.chromium.org/155683002/ Change QUIC's GetRetransmissionDelay() to exponentially back off from the minimum value, instead of using the minimum multiple times. Merge internal change: 60782771 https://codereview.chromium.org/155673002/ QUIC_VERSION_14 introduced. Add byte_offset to RST_STREAM_FRAME, add version checks for WINDOW_UPDATE and BLOCKED frames. None of these additions used yet. Merge internal change: 60780039 https://codereview.chromium.org/155623003/ (minor) QUIC: Initialize members in QUIC frame constructors. Merge internal change: 60677390 https://codereview.chromium.org/150663004/ Add WINDOW_UPDATE and BLOCKED frames to QUIC. Not yet used. Adds the frame types, and matching framer methods for reading/writing them. The framer visitor methods to handle the new frames just return true and ignore them for now. Merge internal change: 60646513 https://codereview.chromium.org/130463004/ QUIC cleanup to remove the helper which provided GetNextPacketSequenceNumber to QuicSentPacketManager and instead let the connection use that information directly. Merge internal change: 60587367 https://codereview.chromium.org/132503007/ R=rch@chromium.org Review URL: https://codereview.chromium.org/149113005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@249228 0039d316-1c4b-4281-b951-d872f2087c98
* Land Recent QUIC Changes.rtenneti@chromium.org2014-01-161-9/+22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Eliminate separate boolean tracking socket writeability in QuicConnection; query the writer instead. This CL tries to minimize behavior changes, so no actual bugfixes. Connection will now check writer's status instead of its local flag, so it will refuse to write sooner. Merge internal change: 59603011 https://codereview.chromium.org/138843003/ Change QUIC's SendAlgorithmInterface to have a separate UpdateRtt method instead of passing it in with every acked packet. This fixes a bug where the RTT was not being updated when retransmitted packets were acked and one where a very large RTT could be used when packets are acked before being sent. Merge internal change: 59572874 https://codereview.chromium.org/138843003/ Break out of the loop in QuicSession::OnCanWrite if the QuicConnection is congestion control blocked. This fixes a weird form of starvation among same-priority streams caused by streams often ending up in the same order in the WriteBlockedList before and after QuicSession::OnCanWrite. Stop iterating through QUIC write blocked streams if the connection is congestion-control blocked to avoid starvation of same-priority streams. Not flag protected. Merge internal change: 59513911 https://codereview.chromium.org/139103002/ Fix a bug where the packet was put into unacked packets when it was serialized and acked before being sent. This was only ever seen on Chrome with very short RTTs. Merge internal change: 59408566 https://codereview.chromium.org/133683010/ WriteBlockedList for QUIC that prioritizes Crypto and Headers streams over data streams. Not flag protected. Merge internal change: 59400238 https://codereview.chromium.org/137893008/ Create an interface for explicit notification of Dispatcher about blocked writers; port TimeWaitListManager to the new interface. Merge internal change: 59396227 https://codereview.chromium.org/138503006/ Remove WritePacket() from internal server's QuicDispatcher; Integrating internal changes to clean up QuicDispatcher. Merge internal change: 59346874 https://codereview.chromium.org/131743007/ Reset QUIC's retransmission counters whenever a new packet is acked which updates the RTT estimate. Previously the counters were only done when the left edge was acked, which could cause excessive backoff when the connection was making progress. Merge internal change: 59292726 https://codereview.chromium.org/138273004/ Implement QuicPacketWriterWrapper. This lets us replace or embellish the low-level writer without disturbing connections that keep a pointer to the top level. Merge internal change: 59287995 https://codereview.chromium.org/138273004/ Use basictypes.h consistenly in QUIC code instead of macros.h and/or integral_types.h Simply refactoring includes. Sync'ed with internal source code for include of basictypes.h. Merge internal change: 59287325 https://codereview.chromium.org/136853005/ Use the right priority when marking QUIC streams write blocked via QuicFdWrapper::SetReady. Not flag protected. Used NULL instead of nullptr. Fixed QuicReliableClientStreamTests to pass. Activated the QuicReliableClientStream in the QuicSession so that session's MarkWriteBlocked knows about the stream. Merge internal change: 59263642 https://codereview.chromium.org/136523005/ R=rch@chromium.org Review URL: https://codereview.chromium.org/131743009 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@245204 0039d316-1c4b-4281-b951-d872f2087c98
* Land Recent QUIC Changes.rtenneti@chromium.org2014-01-041-3/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add helper methods to QUIC test client and peers that allow access to information needed to test 0-Rtt behavior when talking to cluster-wide strike registers. QUIC testing infrastructure. Merge internal change: 58551796 https://codereview.chromium.org/124183003/ Release QuicCryptoServerConfig::strike_register_client_lock_ before doing calls to VerifyNonceIsValidAndUnique in order to minimize the amount of work that happens while strike_register_client_lock_ is locked. This is important because VerifyNonceIsValidAndUnique may invoke the done callback before returning, which may take arbitrary time or create a lock cycle if invoked while the lock is held. Relax strike_register_client_ locking requirements. Merge internal change: 58551166 https://codereview.chromium.org/110753005/ Rename GetIncomingReliableStream to GetIncomingDataStream. Merge internal change: 58538145 https://codereview.chromium.org/111283004/ Suppress noisy messages in QuicTimeWaitListManagerTest. Merge internal change: 58422536 https://codereview.chromium.org/123623002/ Implement a TCP tail loss probe which will fire twice before the RTO fires. The tail loss probe gets re-armed every time a packet is sent. Merge internal change: 58420170 https://codereview.chromium.org/123523004/ Move all the packet parsing logic into QuicDispatcher from the QuicServer / QuicDispatcher / QuicTimeWaitListManager. Merge internal change: 58413216 https://codereview.chromium.org/123303003/ R=rch@chromium.org Review URL: https://codereview.chromium.org/124003005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@242987 0039d316-1c4b-4281-b951-d872f2087c98
* Implement a QuicHeadersStream to handle reliable in-order delivery ofrtenneti@chromium.org2013-12-181-6/+91
| | | | | | | | | | | | | | | | | | headers. Changes the way headers are delivered in QUIC from being the first bytes on a stream, to being delivered as SPDY SYN_STREAM/SYN_REPLY frames on a dedicated headers stream. This also creates QUIC_VERSION_13. Since the intra-stream serialization format changes, it is not possible for a client to handle a version negotiation across this boundary. Merge internal change: 58313427 R=rch@chromium.org Review URL: https://codereview.chromium.org/116513003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@241682 0039d316-1c4b-4281-b951-d872f2087c98
* Land Recent QUIC Changes.rtenneti@chromium.org2013-12-161-6/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add convenience HighestPriority and LowestPriority methods to QuicUtils Merge internal change: 58122394 https://codereview.chromium.org/112463003/ Change QUIC to only ack every other packet when there are no losses within the last four received packets. Merge internal change: 58111242 https://codereview.chromium.org/113123004/ Add a version() convenience method to ReliableQuicStream. Merge internal change: 58110960 https://codereview.chromium.org/112273003/ Fix two tests that fail when FLAGS_enable_quic_pacing is enabled Merge internal change: 58101756 https://codereview.chromium.org/115393003/ Remove deprecated flag FLAGS_pad_quic_handshake_packets. Merge internal change: 58101024 https://codereview.chromium.org/114923007/ Remove the is_server argument from the QuicSession constructor. In a previous CL, I removed this from TestSession, but I missed, that it's an argument of the main QuicSession constructor. Merge internal change: 58059515 https://codereview.chromium.org/102313005/ Fix QUIC's TCP style retransmission logic to only send a maximum of 2 packets per incoming ack instead of 10. Merge internal change: 58059328 https://codereview.chromium.org/109993008/ Remove redundant |is_server| argument from TestSession and call the connection's is_server() method instead. Merge internal change: 58047118 https://codereview.chromium.org/110373004/ Minor cleanup of QUIC MockConnection and PacketSavingConnection constructors. Merge internal change: 58042657 https://codereview.chromium.org/114933003/ Cleanup in QUIC to merge the previous_transmissions_map in QuicSentPacketManager with the unacked_packets map. Merge internal change: 58011531 https://codereview.chromium.org/109323012/ R=rch@chromium.org Review URL: https://codereview.chromium.org/115463002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@240972 0039d316-1c4b-4281-b951-d872f2087c98
* Land Recent QUIC Changes.rtenneti@chromium.org2013-12-131-12/+26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Temporarily change the maximum server initial congestion window to 10 from 100, because many existing Chrome clients are still negotiating 100, causing visible performance issues, particularly for YouTube rebuffers. Merge internal change: 57996291 https://codereview.chromium.org/102373005/ Merge the QUIC unacked packet map with the unacked fec packet map and merge the retransmission timer with the discard fec timer. Merge internal change: 57978547 https://codereview.chromium.org/114683002/ Pool 64 bits of entropy instead of calling OpenSSL's RNG for one bit when creating packets. Clean up the entropy bit while I'm at it. Changes: 1. QuicPacketCreator buffers 64 bits of entropy and consumes them one-at-a-time. This should resolve the performance issue. Covered this with a unit test. Removed the RandBool call from QuicRandom. 2. The first packet gets a random entropy bit. We used to never set it because we failed to test it properly. This was sad because the first packet deserves the most protection. 3. The entropy hash computation had a TODO to make it stronger, but I'm convinced the current algorithm is in fact sound. Removed the TODO and tightened up the implementation to avoid an unpredictable branch (no behavior change!) Also covered by the test. 4. Fixed the bugs in QuicConnectionTest that prevented setting the bit in the first packet. Switched tests to properly use MockRandom. Merge internal change: 57908681 https://codereview.chromium.org/109323006/ Minor change of QUIC's RTO behavior to not change the congestion window when the RTO fires, but there are no retransmittable packets. Merge internal change: 57907460 https://codereview.chromium.org/99583006/ QuicSentPacketManager cleanup to simplify OnAbandonFECTimeout() and remove unused DefaultRetransmissionTime(). Merge internal change: 57897409 https://codereview.chromium.org/110383006/ Minor cleanup of QuicSpdyServerStream and QuicSpdyClientStream. Merge internal change: 57834426 https://codereview.chromium.org/105103007/ Break out the basic reliable QUIC stream functionality from the headers-capable QUIC stream functionality. The crypto stream does not do have header processing, and and the soon-to-be-written headers stream will not have header processing in the way that data streams do. No functionality change. Refactor ReliableQuicStream class. Merge internal change: 57796557 https://codereview.chromium.org/100173005/ Merge ReliableQuicStream::WriteData with ReliableQuicStream::WriteOrBuffer, and make this method non-virtual. It turns out the only cases where it was overridden could easily be worked around. Remove ReliableQuicStream::WriteDataInternal and use a MakeIovec helper to work around it. Rename ReliableQuicStream::WritevDataInternal to ReliableQuicStream::WritevData. Rename QuicStream::WritevData to QuicStream::Writev. Cleanup of the various Write methods in ReliableQuicStream. Merge internal change: 57753091 https://codereview.chromium.org/112343002/ Cleanup of QUIC stream classes. Remove abstract QuicReliableClientStream class and fold it into the derived QuicSpdyClientStream class. Remove abstract QuicReliableServerStream class and fold it into the derived QuicSpdyServerStream class. Merge internal change: 57751931 https://codereview.chromium.org/111073003/ R=rch@chromium.org Review URL: https://codereview.chromium.org/103973007 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@240569 0039d316-1c4b-4281-b951-d872f2087c98
* Land Recent QUIC Changes.rtenneti@chromium.org2013-12-101-3/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Made available server_address to QuicDispatcher::CreateQuicSession from QuicDispatcher::ProcessPacket. Merge internal change: 57703936 https://codereview.chromium.org/109803003 No functional change. More QuicSentPacketManager and related QUIC cleanup. Merge internal change: 57665121 https://codereview.chromium.org/100893003 Move QUIC kMaxPacketSize from 1472 -> 1452 to reflect IPv6 overhead. Merge internal change: 57626965 https://codereview.chromium.org/109843002 QUIC refactor to simplify retransmission logic. Merge internal change: 57617695 https://codereview.chromium.org/100863005 Remove unused SetCongestionWindow methods Merge internal change: 57601594 https://codereview.chromium.org/109833002 QUIC refactor to move more of the AckFrame handling into QuicSentPacketManager. Merge internal change: 57561176 https://codereview.chromium.org/100733003 No new functionality. QUIC Refactor to move the functionality of OnAbandonFecTimeout() OnRetransmissionTimeout() into the QuicSentPacketManager. Merge internal change: 57550388 https://codereview.chromium.org/106973007 R=rch@chromium.org Review URL: https://codereview.chromium.org/100863006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@239668 0039d316-1c4b-4281-b951-d872f2087c98
* Land Recent QUIC Changes.rtenneti@chromium.org2013-11-261-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | QUIC Refactor to move the call to OnPacketAbandoned() for retransmissions into QuicCongestionManager. Merge internal change: 57233749 https://codereview.chromium.org/85463010/ Rename two methods in SendAlgorithmInterface * OnIncomingAck -> OnPacketAcked * OnIncomingLoss -> OnPacketLost Merge internal change: 57120421 https://codereview.chromium.org/85663006/ Implement Early Retransmit(RFC5827) in QUIC's TCP congestion control. Merge internal change: 57097940 https://codereview.chromium.org/85663005/ De-flake internal end_to_end_tests when pacing is used. Adds a new HasQueuedData method, and removes NumWriteBlockedStreams method to QuicSession, which is only called from tests. Merge internal change: 57090300 https://codereview.chromium.org/84723005/ Send the server's supported QUIC versions in the SHLO. Send the client's supported QUIC version in the CHLO. Detect downgrade attacks. Add QUIC versions to the QUIC handshake messages. Merge internal change: 57057343 https://codereview.chromium.org/85773006/ Change QUIC's nack counting to be based on the gap between the missing packet and the largest observed, instead of the number of ack frames processed. Merge internal change: 57031841 https://codereview.chromium.org/85383010/ QUIC - sync'ing chromium and internal source. Minor clean up of the code. Merge internal change: 57264741 https://codereview.chromium.org/86483007/ R=rch@chromium.org Review URL: https://codereview.chromium.org/87013002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@237410 0039d316-1c4b-4281-b951-d872f2087c98
* Conver DLOG(INFO) to DVLOG(1) in QUIC code.rch@chromium.org2013-11-221-3/+3
| | | | | | | | BUG=258671 Review URL: https://codereview.chromium.org/83123006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@236843 0039d316-1c4b-4281-b951-d872f2087c98
* Land Recent QUIC Changes.rtenneti@chromium.org2013-11-201-8/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Make QuicTestClient report response_complete() when the response is actually complete. Merge internal change: 56678980 Remove retransmission_count from RetransmissionInfo, because it was unused. Merge internal change: 56678610 Deprecating FLAGS_bundle_ack_with_outgoing_packet. Removes a QUIC-specific flag that has been set to true for a while. Merge internal change: 56673783 Remove unnecessary tests from QuicEpollConnectionHelperTests since much of the logic that used to be in the helper has moved directly into the connection. Merge internal change: 56613436 Ensure that delta_time_largest_observed values are non-negative, since they are written to the wire as uints. Provide a better estimate of rtt in QUIC. Merge internal change: 56612513 Change QUIC's max CWND from a flag to a constant. Merge internal change: 56607206 Make SimpleClient report whether headers have been completely received. Testing only. This brings simpleclient to feature parity for ustreamer load testing. Merge internal change: 56543369 QUIC - Sync'ing changes while merging chromium/internal changes. Merge internal change: 56537661 Remove deprecated flag FLAGS_track_retransmission_history. Merge internal change: 56530712 Change PacketDroppingTestWriter::WritePacket to release any packets that should have already been released. Merge internal change: 56496423 Add the QUIC detailed error to the ConnectionClose packet for framing errors. Merge internal change: 56478281 Resurrect QUIC fast-RTO tail drop behavior. More quickly RTO packets if there are only a few packets outstanding. Merge internal change: 56476598 Remove EndToEndTest.NoEarlyHeadersFailureFromClient. This test races a retransmission with a RST_STREAM in a way that is not guaranteed to win. Further, it purports to send a valid request, but when the reset loses the race, it's clear that actually the request is actually not valid. Instead, I've replaced this test with a unit test of QuicSession and in the process tightened up the code to detect QUIC_STREAM_RST_BEFORE_HEADERS_DECOMPRESSED. Improved the ability of QuicSession to detect unrecoverable compression context state. Merge internal change: 56472103 Cleanup WriteBlockedList. * Sanity check the values of priorities passed in to various methods. * Cleanup of the argument types used. * Change GetHighestPriorityWriteBlockedList to not return -1, which is confusing since the priority value is (usually) unsigned. Merge internal change: 56467687 Changes to support internal QuicFasterStatsGatherer class which inherits from QuicAckNotifier::DelegateInterface and FasterStatsGatherer. Each QuicStream owns one of these Gatherers. Whenever the Stream writes data to the wire, it registers the Gatherer to be notified on receipt of ACKs for the write. When the Gatherer has seen ACKs for the full response, it calculates Response Time (RT), and ships off the stats to FasterStats. If the QuicStream is destroyed before the full response has been ACKed, then it transfers ownership of the Gatherer to the QuicSession. The FasterStatsIdleList will check in periodically on these stored Gatherers, and when the full response has been ACKed, the Gatherer will ship off FasterStats and be deleted. Calculate FasterStats RT for QUIC. Merge internal change: 56407485 Add a method to QUIC end-to-end-test's TestParams struct so that when a test fails, the summary includes a human readable description of the configuration. Merge internal change: 56382748 Replace QUIC EndToEndTest.InvalidPriority with a unit tests. The existing end-to-end test is very fragile, and depending the behavior of the sender, may actually crash. Minor change to QUIC priority parsing error detection. Merge internal change: 56375355 R=rch@chromium.org Review URL: https://codereview.chromium.org/76723002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@236173 0039d316-1c4b-4281-b951-d872f2087c98
* Land Recent QUIC Changes.rtenneti@chromium.org2013-11-141-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixing a QUIC bug where public reset packets would only be sent for null encrypted packets. Merge internal change: 56125340 Implement TcpCubicSender::BandwidthEstimate to return CWND/SRTT, which will be used as the basis for pacing. Implements a currently unused method in the QUIC TCP implementation. Merge internal change: 56109841 Add bandwidth limits and maximum packet queue size to the PacketDroppingTestWriter for QUIC. Merge internal change: 56104313 Change QUIC's TCP implementation to not reduce the congestion window when multiple losses occur in a window. Merge internal change: 56097813 Add flexibility to SimpleClient by exposing epoll_server(), fd() and buffer_body() at the interface level. Affects tests only. I need this for ustreamer load testing. The requirements there (like slowing down the transfer) are divergent from internal server and it's easier to implement them by talking to epoll directly. Merge internal change: 56097002 Removing QUIC_VERSION_10 which had a longer NullEncryption hash length of 16 bytes vs the new 12 bytes. Merge internal change: 56033303 Change QUIC's minimum congestion window for TCP to 2*MSS, matching RFC2582. Merge internal change: 55999043 Request from avd@ in review of cl/55013562 Merge QuicConnection SendStreamData methods. Merge internal change: 55985552 Replacing StringPiece with IOVector in QUIC's read and write paths. QuicConnection on below, QUIC now trafficks in only IOVectors. QuicStreamFrame now holds frame data in an IOVector instead of a StringPiece. Merge internal change: 55838620 Change order of operations in QuicCryptoServerConfig::EvaluateClientHello so that: - Local, syncrhonous operations can happen first. - Validating the client nonce against the strike register only happens when uniqueness must be established using the client nonce. - Server nonce is always used if it is present. - A repeated server nonce triggers a replay protection failure even if the client nonce is unique. Resulting behavior is more correct: we used to allow handshakes that had both a server nonce and client nonce to be repeated twice. Merge internal change: 55930987 QUIC - Minor cleanup of the code to match the internal code. Merge internal change: 55929037 Increase the minimum CHLO size from 512 bytes to 1024 bytes. Pad an inchoate CHLO to fill up a packet. On the server side, enforce the old minimum CHLO size of 512 bytes so we can support old clients. Merge internal change: 55881305 R=rch@chromium.org Review URL: https://codereview.chromium.org/71143003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@235006 0039d316-1c4b-4281-b951-d872f2087c98
* Land Recent QUIC changes. rtenneti@chromium.org2013-10-311-4/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fix a bug in the QuicFramer where the entropy genererator was not being consulted when truncated acks were sent, causing an incorrect entropy to be sent for truncated acks. Merge internal change: 55879563 Add an optional initial RTT to the negotiation parameters to allow the QUIC client to suggest an expected RTT to the server. Merge internal change: 55792505 Changing DCHECKs to LOG(DFATAL) so we'll notice if they're occurring in the running server/client. Merge internal change: 55790448 Added a blank line per the change in the following CL which deleted default-true flags. Merge internal change: 55738366 Allow a REJ message to be twice as large as a CHLO message that doesn't contain a valid source-address token. message that doesn't contain a valid source-address token could be twice as large as before. Merge internal change: 55736193 Log OpenSSL errors when QUIC encryption fails. Merge internal change: 55718465 Second version with improved tests and keeping the client and server packet sizes identical to ensure the truncated ack detection works correctly. Merge internal change: 55651642 Hidden bug that uses ack_frame instead of stream_frame. Merge internal change: 55648483 Move QuicCryptoServerConfig from crypto_server_config.{h,cc} to quic_crypto_server_config.{h,cc} and move QuicCryptoClientConfig from crypt_handshake.{h,cc} to quic_crypto_client_config.{h,cc} to be consistent. Merge internal change: 55644306 Ported IOVector unit tests (as part of porting the following CL). Makes GFE's IOVector class copy-able. I am working on using IOVector through QUIC's read and write paths, and it would be tremendously helpful to have value-semantics for an IOVector object. Making it copy-able was noted in joechan@'s TODO in the original IOVector code. Merge internal change: 55509822 Cancel all pending alarms when the QUIC connection is closed. Merge internal change: 55640997 Removed version 10 from supported versions. Adding QUIC_VERSION_12 to optimize the Quic ack framing format to reduce the size and better handle ranges of nacks, which should make truncated acks virtually impossible. Also adding an explicit flag for truncated acks and moving the ack outside of the connection close frame. Merge internal change: 55594574 R=rch@chromium.org Review URL: https://codereview.chromium.org/51313002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@232035 0039d316-1c4b-4281-b951-d872f2087c98
* Land Recent QUIC changes.rtenneti@chromium.org2013-10-281-1/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Enables the padding of QUIC handshake packets to the max packet size. Does not pad packets which do not leave enough space to fit a padding frame after expanding the final stream frame. An alternative would be to add a new type of padding frame which could show up earlier in the packet, but this is good enough for now. flag to enable the padding of QUIC handshake packets to full size Merge internal change: 55118010 Add a set_seed method to the PacketDroppingTestWriter to facilitate reproducing test behavior. Merge internal change: 55107501 Consistently pass the IsHandshake flag to the congestion control algorithm in QUIC. Merge internal change: 55046282 The goal is parity between HTTP and QUIC testing. Merge internal change: 55000555 Fixed comments - found while back porting changes to server. Merge internal change: 54999641 Fix bug in QuicPacketCreator's packet size calculation when a stream frame is close to the maximum possible. Merge internal change: 54933729 Remove unused random_reorder field from QuicPacketCreator::Options Merge internal change: 54885136 Using GFE's IOVector to replace uses of struct iovec on the QUIC's Write path. Merge internal change: 54805402 R=rch@chromium.org Review URL: https://codereview.chromium.org/46903002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@231278 0039d316-1c4b-4281-b951-d872f2087c98
* Land Recent QUIC changes.rtenneti@chromium.org2013-10-271-6/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Rename ambiquious ConnectionClose method to OnConnectionClosed. Merge internal change: 54774694 Change TCP cubic's max packet size used to calculate the initial and subsequent congestion window in bytes to the default of 1460 from QUIC's artificially low 1200. Merge internal change: 54772582 QUIC: make the SCID a hash of the rest of the server config. We need to ensure that the SCID changes whenever the rest of the server config does. For example, cl/54004815 changed the server config, but not the SCID. This could lead to bad 0-RTT handshakes where the server believes the handshake is good, but will derive different keys than the client. The easiest change to ensure that the SCID is changed is to make it a hash of the rest of the message. Merge internal change: 54659325 EndToEndTest to fix TSAN. Merge internal change: 54090381 Don't add a zero-length public key to kPUBS if P-256 support is disabled. kKEXS and kPUBS should have the same number of elements. Merge internal change: 54004815 Make the QuicConnectionHelper no longer owned by the QuicConnection. Instead a single helper is owned by the Dispatcher or Client, and shared among each Connection. Merge internal change: 53974968 R=rch@chromium.org Review URL: https://codereview.chromium.org/45733002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@231244 0039d316-1c4b-4281-b951-d872f2087c98
* Land Recent QUIC changes.rtenneti@chromium.org2013-09-181-28/+33
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Added a DCHECK that ProcessRawData will not be called with zero data length. Merge internal change: 52068687 Removed reinterpret_cast<QuicFecBuilderInterface*>. Minor comment fix. Merge internal change: 52051673 Replace QuicConnectionVisitorInterface::OnPacket with OnStreamFrames Merge internal change: 52049491 Remove unused OnAck method from QuicConnectionVisitorInterface. This is a bit of an abstraction violation, since nothing above the Connection knows about packets. The AckNotifier interface provides the "right" abstraction. Merge internal change: 52027657 Add state to session to indicate that a crypto stream is blocked, so that we can properly set the IS_HANDSHAKE argument when asking the congestion manager if we CanWrite(). Merge internal change: 51983405 Break out the tracking of sent packet from QuicConnection to a new QuicSentPacketManager class. Merge internal change: 51969314 Delay the RTO every time an ack is received, per TCP RTO spec. Merge internal change: 51954312 Sending ConnectionClose frames via the PacketGenerator so they get properly queued if they cannot be sent immediately. Prevents multiple different connection close packets from being sent, a potential infinite loop, and from dropping connection close packets which can't be sent due to a write block from being dropped entirely. Merge internal change: 51890780 Increse the default max_tcp_congestion_window to 100 from 50, now that the RTO has been increased to the TCP standard of 60 seconds. Merge internal change: 51854728 Added large (1 Mb) POST tests. Verified that without the fix from cl/51829697 these tests timeout due to receiver cwnd dropping to zero after sending ACKs. Merge internal change: 51854636 Refactored and replaced SendStreamAndNotifyWhenAck() to work with SendvStreamData(). Merge internal change: 51848330 Remove unused client2 scoped_ptrs from end_to_end_tests Merge internal change: 51835589 R=rch@chromium.org Review URL: https://chromiumcodereview.appspot.com/23691073 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@223996 0039d316-1c4b-4281-b951-d872f2087c98
* Land Recent QUIC changes.rtenneti@chromium.org2013-09-181-7/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Pass HasRetransmittableData to the congestion manager and the send algorithm. This allows tcp_cubic_sender to not count ACK-only packets against the congestion window. Merge internal change: 51829697 If a previously zombie'd QUIC stream is closed and the headers have been decompressed, remove that entry from the zombie stream map. Merge internal change: 51697989 Change the value used to set the sequence number with to both correctly calculate the widest packet spread currently outstanding and fix a DCHECK failure in EndToEnd's Uber test when packets were transmitted sufficiently out of order that the packet being sent was less than the last packet the peer was awaiting. Merge internal change: 51644967 Fix a bug where frames are queued and not enough room for the next stream frame is available, but we attempt to create a STREAM frame anyway in ConsumeData. Merge internal change: 51604946 Changed Delayed Ack Timer to go off before the sender's retransmission timer goes off. Merge internal change: 51594956 Using the priorities sent by the client, including bounds checking, and bumping the priority of initial writes to avoid the HOL header blocking issue. Merge internal change: 51586426 Fix memory leak uncovered by https://codereview.chromium.org/23587004 Merge internal change: 51569066 Added logging of QUIC version negotiated. Export number of QUIC sessions and streams for each QUIC version. Merge internal change: 51540178 A refactor of QuicFdWrapper's writev to pass the iovec all the way to QuicConnection, allowing better packet packing. Merge internal change: 51530908 Enabled priorities in chrome quic streams. R=rch@chromium.org Review URL: https://chromiumcodereview.appspot.com/23597045 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@223880 0039d316-1c4b-4281-b951-d872f2087c98
* Land Recent QUIC changes.rtenneti@chromium.org2013-09-051-6/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is the first part of the code to allow faster stats/future compression stuff to register for a notification when a block of data has been fully ACKed by the peer. The idea is as follows: Someone who wants to be notified when their data is ACKed calls SendStreamDataAndNotifyWhenAcked instead of SendStreamData, and provides a Closure. The QuicConnection stores the Closure in a QuicAckNotifier, and maintains a vector of these. On every ACK frame received, the OnAck(acked_seqnums) method of each QuicAckNotifier is called. The QuicAckNotifier keeps track of the sequence numbers it is waiting to see, and after being notified of all of them it calls the Closure's Run() method. Merge internal change: 51476134 Changed SourceAddressToken's code not to include port number while performing crypto handshake (found in EndToEnd unit tests). Use IPAddressToPackedString for source address token comparison. Add CryptoServerConfig::set_strike_register_no_startup_period() to allow a QuicServer to start accepting 0-RTT handshakes without waiting a startup period. Add an end-to-end test for a successful 0-RTT handshake. Merge internal change: 51419595 Copying the overly-lenient SPDY workarounds to handling priority blocked streams for idle timeout logic. Merge internal change: 51406984 For this CL, the only chromium side change is to add QuicConnectionPeer::SetPeerAddress. Log packet retransmissions to DLOG(INFO). Use the standard format for the log messages for crypto handshake messages on the client side. Merge internal change: 51336227 New frame ID scheme to eliminate conflict between STREAM and PADDING frames. PADDING frames are now stream type 0. Description of the new scheme is in quic_framer.cc. Merge internal change: 51271708 Fixing a bug in implicitly created streams which results in early packet loss causing all streams to hang. Merge internal change: 51248632 R=rch@chromium.org Review URL: https://chromiumcodereview.appspot.com/23464033 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@221419 0039d316-1c4b-4281-b951-d872f2087c98
* If a previously zombie'd QUIC stream is closed and the headers have beenrch@chromium.org2013-09-011-0/+3
| | | | | | | | decompressed, remove that entry from the zombie stream map. Review URL: https://chromiumcodereview.appspot.com/23475010 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@220758 0039d316-1c4b-4281-b951-d872f2087c98
* If the stream is being closed locally (for example in the case of arch@chromium.org2013-08-291-11/+86
| | | | | | | | | | | | | | | | | | | | client, the user may cancel the request before the response is received from the server) then we need to make sure that we keep the stream alive long enough to process any response or RST_STREAM that the server sends. This should dramatically reduce (possibly eliminate) the instances of STREAM_RST_BEFORE_HEADERS_DECOMPRESSED errors from Chrome. (This is currently the second most common cause of QUIC sessions closure, behind the expected TIMED_OUT) Merge internal change: 51442891 BUG= Review URL: https://chromiumcodereview.appspot.com/23587004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@220153 0039d316-1c4b-4281-b951-d872f2087c98
* Land Recent QUIC changes.rtenneti@chromium.org2013-08-201-6/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Moving QUIC over to the new QUIC/SPDY write blocked list template. Fixing all QUIC streams to a single priority for now. Merge internal change: 50911466 Factoring out the spdy write blocked logic into a utility Spdy and Quic can share. Merge internal change: 50897578 Moving the quic dispatcher from using the WriteBlockedList to using a generic linked hash map, in preperation to adding priorities to the WriteBlockedList. Merge internal change: 50728003 QUIC dead code removal. Merge internal change: 50710912 Clarify batch mode in packet generator. Merge internal change: 50587122 Minor spacing/wording fixes to DLOG messages in quic_connection. Merge internal change: 50574131 Define kDefaultRetransmissionTime once in QuicConnectionTest. Merge internal change: 50571883 Deleted FramePackingAckResponse from chromium and will do the same on server side in another CL. Improve frame packing of acks and other frames when acks are received. Merge internal change: 50521649 Fix TODO in quic_connection.cc Merge internal change: 50515632 R=rch@chromium.org Review URL: https://chromiumcodereview.appspot.com/22801008 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@218500 0039d316-1c4b-4281-b951-d872f2087c98
* Log QUIC crypto handshake messages to net log.rch@chromium.org2013-08-141-0/+8
| | | | | | | | BUG= Review URL: https://chromiumcodereview.appspot.com/23108004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@217617 0039d316-1c4b-4281-b951-d872f2087c98
* Land Recent QUIC changes.rtenneti@chromium.org2013-08-091-4/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Minor logging improvement to FEC revived packets. Merge internal change: 50495854 Fixed existent typo: existant becomes existent. Merge internal change: 50439145 Fix a bug in quic_connection where an Ack could be sent in response to an ack before the packet was registered as having been received in OnPacketComplete(), causing an entropy to be generated which was incorrect. Merge internal change: 50396820 Added a TODO to support "Rate limiting a warning log." Merge internal change: 50395138 Fixing two bug where we could kill off a session twice, one of which could "easily" happen, and one of which should only ever happen with horrible configuration. The first, is processing packets via MaybeProcessUndecryptablePackets or MaybeProcessRevivedPacket after the connection had disconnected. The likliest way for this to happen would be to lose the CHLO and have two 'bad' packets buffered such that we'd loop on both, both would cause a connection close which would get passed to the session and the dispatcher, causing unhappiness. The second is kind of silly and caught by the DCHECK I added to detect double-disconnect: when we register idle alarms we check for timeouts. In the case of our timeouts test we set the timeout so small the session is basically timed out before it's created. In this case when we create the session we'd close it when registering the first timeout and close again registering the second. This should only ever be hit if you have a horrible config or a 10 second machine hiccup. Merge internal change: 50393796 Actually waiting for server SHLO before upping packet loss. Merge internal change: 50384306 Fixing a crashing bug in quic_session: if a pointer is NULL maybe we shouldn't dereference it... Merge internal change: 50378549 Remove mostly unused set_max_open_streams method from QuicSession. Merge internal change: 50275870 Reducing/removing test flakeiness due to SHLO being particularly important. Merge internal change: 50272102 Small formatting fix. Merge internal change: 50262875 Fixing a bug in protocol negotiation where the verion flag would always be sent. Basically if we immediately transition to NEGOTIATED_VERSION, we never enter the if block in OnPacketHeader and call StopSendingVersion Merge internal change: 50182524 Added max_tcp_congestion_window_ to TcpCubicSender for testing. Decrease the maximum congestion window to 50 from 10000 until the RTO logic is improved. The intent is to handle cases when the RTT is larger than the RTO specially and not retransmit agressively then. Merge internal change: 50080104 Change kMaxRetransmissionTimeMs to 60 seconds (from 10 seconds) to match TCP. Merge internal change: 50073957 Add comments to point out it is OK to specify both kX509 and kX59R, and to document the new ecdsa_ok parameter of ProofSource::GetProof. Merge internal change: 50071950 Do not send acks in response to acks. Merge internal change: 50064954 R=rch@chromium.org Review URL: https://chromiumcodereview.appspot.com/22661002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@216555 0039d316-1c4b-4281-b951-d872f2087c98
* Land Recent QUIC changes.rtenneti@chromium.org2013-08-051-1/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Minor style change for initialization of hdr.msg_flags. Merge internal change: 49828095 Enabled MaxNumStreams in quic/tools area. Renamed MaxNumConnections to MaxNumStreams. Initialize set_max_streams_per_connection only in MaxNumStreams, not for all tests. Merge internal change: 49728455 QUIC - Adding a bit more information to a logged DFATAL. Merge internal change: 49724887 Always expecting certificates for secure quic (test) clients. Changing the end_to_end test to be insecure as it doesn't configure certs. Merge internal change: 49723287 QUIC - Adding back a comment change that was deleted in the following CL. https://chromiumcodereview.appspot.com/22020002/diff/1/net/quic/quic_connection.cc Merge internal change: 49713074 Fail to process a header when the fec group offset is larger than the packet sequence number. Merge internal change: 49677837 Added a test to ensure that if the QuicPacketCreator has room for the stream frame it can be added. Merge internal change: 49620569 Adding support to QUIC for QUIC_VERSION_7, enabling lower overhead stream frames. Merge internal change: 49540337 Rearrange code to match spdy_protocol.h SpdyFrameType declaration order: mostly method declarations and definitions and case statements. Merge internal change: 49503521 Refactor QuicReceivedEntropyManager and the other received packet code into Quic ReceivedPacketManager to allow the entropy state and the ack's received info to stay in sync. Merge internal change: 49440136 Made a copy of QuicReceivedEntropyManager*.* code into QuicReceivedPacketManager*.* Doing a better job of detecting unrecoverable compression state. This is really tricky to get right. We don't want to unilaterally close the connection if a stream closes before headers are decompressed. If, for example, a server gets a protocol-layer error while processing a request it could kill of a stream with something like QUIC_MULTIPLE_TERMINATION_OFFSETS without sending the http/spdy response. In this case, the client could continue processing on that connection. We basically want to kill off the connection if we get any packets for a stream we've closed without processing complete headers. Which means tracking state for every stream which closes without processing complete headers which is a very unlikely OOM attack vector. I'm capping it at 20 somewhat arbitrarily, and calling it a day. Merge internal change: 49373258 Removing logspam from quic connection. Merge internal change: 49370853 Altering the server to not process headers until full headers have been read. This fixes a problem where if we parsed partial headers, found an error, and rejected the stream before getting full headers it would be possible to doom the entire connection. Merge internal change: 49239328 R=rch@chromium.org Review URL: https://chromiumcodereview.appspot.com/22122002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@215661 0039d316-1c4b-4281-b951-d872f2087c98
* Implement GetSSLInfo for QUIC/https connections.rtenneti@chromium.org2013-07-121-0/+6
| | | | | | | | | | | | | | | | | | | | | - CertVerifyResult is saved in QuicCryptoClientConfig::CachedState after Proof is verified. - Because CertVerifyResult is not RefCounted, the data is copied into CachedState. - QuicCryptoClientStream uses CertVerifyResult from CachedState after handshake is completed. - QuicCryptoClientStream::GetSSLInfo fills SSLInfo data from CertVerifyResult. - UI uses SSLInfo to display connection status. - Hardcoded cipher_suite as TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 in SSLInfo. R=jar@chromium.org, agl@@chromium.org Review URL: https://chromiumcodereview.appspot.com/19037002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@211439 0039d316-1c4b-4281-b951-d872f2087c98
* First step at enabling QUIC over HTTPS.rtenneti@chromium.org2013-07-101-10/+0
| | | | | | | | | | | | | | | - Added code to enable proof verifier and integrated CertVerifier. TODO: - Make ProofVerifier work with multiple verifications at the same time. - Use the correct NPN for NextProto instead of kProtoSPDY3. - Write unit tests for QUIC over HTTPS. R=rch@chromium.org Review URL: https://chromiumcodereview.appspot.com/18084015 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@210732 0039d316-1c4b-4281-b951-d872f2087c98
* Cleanup of OpenSSL/NSS implementation of ProofVerfifier release.rtenneti@chromium.org2013-07-041-1/+1
| | | | | | | | | | Implemented comments from wtc in CL https://chromiumcodereview.appspot.com/17385010/#ps170001 (Patch Set 12). R=wtc@chromium.org Review URL: https://chromiumcodereview.appspot.com/18033005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@210095 0039d316-1c4b-4281-b951-d872f2087c98
* OpenSSL/NSS implementation of ProofVerfifier.rtenneti@chromium.org2013-07-031-0/+11
| | | | | | | | | | Changes to make ProofVerifier asynchronous. Each QuicSession's ProofVerifier is used to verify the signature and cert chain. Implemented generation counter in QuicCryptoClientConfig's CachedState in case certs change when we are verifying the Proof. Review URL: https://chromiumcodereview.appspot.com/17385010 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@209946 0039d316-1c4b-4281-b951-d872f2087c98
* Land Recent QUIC changes.rtenneti@chromium.org2013-06-051-8/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Merge internal change: 47341065 Fix to ensure the version matches before declaring that the public header flags exceed the max value. b/9190456 Merge internal change: 47324563 Fixing another backup bug (exposed by the last fix) that if we failed to write a standalone fin the stream would not be marked as write blocked. Merge internal change: 47272116 Don't add QuicStreams to ActiveSessionList; Instead call DumpSession on alive streams via QuicSession. Merge internal change: 47226512 Making the packet sequence number variable length to minimize bytes on the wire. Merge internal change: 47220850 Fixing a bug in quic stream where we'd send rst stream packets for successful streams. The fin bit should be sufficient for both good request/response pairs and early response pairs. Merge internal change: 47086343 Don't let FEC packets consume congestion window forever. If a FEC packet is not acked after a certain time, it is cleared from the congestion window. This timeout is higher than normal RTO. Merge internal change: 47056082 Add QuicSession to ActiveSessionList. Merge internal change: 47048300 Fixing a backup/resumption bug in QUIC. It's possible to have a full congestion window worth of packets on the wire. If we are in this state and a session tries to SendStreamData, the QuicPacketGenerator short-circuits without queuing packets because it checks to see if the connection CanWrite. When we get an ack, we check to see if we have locally queued packets, but never call OnCanWrite on the session to clear any streams which write blocked without queueing packets. Merge internal change: 47000173 QUIC: wire up the server-nonce parameters to the server config. Merge internal change: 46985067 R=rch@chromium.org Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=204046 Review URL: https://codereview.chromium.org/16256017 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@204289 0039d316-1c4b-4281-b951-d872f2087c98
* Revert 204046 "Land Recent QUIC changes."rtenneti@chromium.org2013-06-041-15/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | > Land Recent QUIC changes. > > Merge internal change: 47341065 > > Fix to ensure the version matches before declaring that the public header > flags exceed the max value. b/9190456 > > Merge internal change: 47324563 > > Fixing another backup bug (exposed by the last fix) that if we failed to > write a standalone fin the stream would not be marked as write blocked. > > Merge internal change: 47272116 > > Don't add QuicStreams to ActiveSessionList; Instead call DumpSession on > alive streams via QuicSession. > > Merge internal change: 47226512 > > Making the packet sequence number variable length to minimize bytes on the wire. > > Merge internal change: 47220850 > > Fixing a bug in quic stream where we'd send rst stream packets for > successful streams. The fin bit should be sufficient for both good > request/response pairs and early response pairs. > > Merge internal change: 47086343 > > Don't let FEC packets consume congestion window forever. If a FEC packet > is not acked after a certain time, it is cleared from the congestion > window. This timeout is higher than normal RTO. > > Merge internal change: 47056082 > > Add QuicSession to ActiveSessionList. > > Merge internal change: 47048300 > > Fixing a backup/resumption bug in QUIC. > > It's possible to have a full congestion window worth of packets on the wire. > > If we are in this state and a session tries to SendStreamData, the > QuicPacketGenerator short-circuits without queuing packets because it checks > to see if the connection CanWrite. > > When we get an ack, we check to see if we have locally queued packets, but > never call OnCanWrite on the session to clear any streams which write blocked > without queueing packets. > > Merge internal change: 47000173 > > QUIC: wire up the server-nonce parameters to the server config. > > Merge internal change: 46985067 > > R=rch@chromium.org > > Review URL: https://codereview.chromium.org/16256017 TBR=rtenneti@chromium.org Review URL: https://codereview.chromium.org/16374004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@204062 0039d316-1c4b-4281-b951-d872f2087c98
* Land Recent QUIC changes.rtenneti@chromium.org2013-06-041-8/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Merge internal change: 47341065 Fix to ensure the version matches before declaring that the public header flags exceed the max value. b/9190456 Merge internal change: 47324563 Fixing another backup bug (exposed by the last fix) that if we failed to write a standalone fin the stream would not be marked as write blocked. Merge internal change: 47272116 Don't add QuicStreams to ActiveSessionList; Instead call DumpSession on alive streams via QuicSession. Merge internal change: 47226512 Making the packet sequence number variable length to minimize bytes on the wire. Merge internal change: 47220850 Fixing a bug in quic stream where we'd send rst stream packets for successful streams. The fin bit should be sufficient for both good request/response pairs and early response pairs. Merge internal change: 47086343 Don't let FEC packets consume congestion window forever. If a FEC packet is not acked after a certain time, it is cleared from the congestion window. This timeout is higher than normal RTO. Merge internal change: 47056082 Add QuicSession to ActiveSessionList. Merge internal change: 47048300 Fixing a backup/resumption bug in QUIC. It's possible to have a full congestion window worth of packets on the wire. If we are in this state and a session tries to SendStreamData, the QuicPacketGenerator short-circuits without queuing packets because it checks to see if the connection CanWrite. When we get an ack, we check to see if we have locally queued packets, but never call OnCanWrite on the session to clear any streams which write blocked without queueing packets. Merge internal change: 47000173 QUIC: wire up the server-nonce parameters to the server config. Merge internal change: 46985067 R=rch@chromium.org Review URL: https://codereview.chromium.org/16256017 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@204046 0039d316-1c4b-4281-b951-d872f2087c98
* Land Recent QUIC changes.rtenneti@chromium.org2013-05-301-11/+19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Make the FEC group optional by adding a flag to the private headers. Merge internal change: 46979143 Merging changes from chromium CL - 15385004 Merge internal change: 46949614 Removing debug logging from RecordPacketReceived. Seems redundant to log both when we actually receive and when we record it. Merge internal change: 46934210 Logging crypto handshake as a DVLOG rather than DLOG as it hasn't recently been needed to debug test failures. Merge internal change: 46932247 Changing the quic test client to simply not return a stream if not connected. This will hopefully turn server test check-failures into server test failures. Merge internal change: 46932163 QUIC: redo server nonces. Previously, in order to cope with strike-register failures and client clock-sync issues, the server could issue a server nonce to a client. This meant that the server had to remember rejected handshakes so that the server nonce could be matched up. With this change, QUIC servers no longer need to keep track of rejected handshakes. Instead of issuing and remembering nonces, a server will now encrypt them and forget about them. When a server nonce is used to establish freshness for a connection, it will be stored in a per-GFE strike-register. (This strike-register is separate from the one used to process client nonces.) Merge internal change: 46889484 Remove FEC_ENTROPY_FLAG from private flags. Now, FEC packet's entropy flag contain the xor of entropies of the protected packets. Merge internal change: 46889094 Limit the number of times we'll fast-retransmit a given packet using taildrop. Merge internal change: 46754530 Added CommonCertSetsQUIC to anonymous namespace. QUIC: cleanups round two. * Make CommonCertSetsQUIC a Singleton to save on every Config having its own copy. * Rework server config expiry: previously it caused an error at client hello send time. Now it will cause an error at REJ processing time but, if the config expired after we cached it, we will act as if we didn't have a cached server config. * Invalidate the server config cache in the event of a client hello sending failure. This will prevent a bad server config from being cached and poisoning connection attempts for the lifetime of the cache. * Fix a bug in the test code which failed to parse hex chunks in debugging messages correctly. (Thanks to wtc for noticing.) Merge internal change: 46742937 Merging changes from chromium - CL 15074007 Merge internal change: 46710932 Fix a bug in QuicSession's header compression behavior which could lead to infinite loops. Merge internal change: 46694681 Getting 5% our CPU usage back by not calculating SentBandwidth for the tcp congestion control algorithm. Added a TODO to improve that function since it's pretty abysmal: the ToLargerUnits and Subtract overhead alone accounted for 4.5% of the cpu in initial loadtest runs. Merge internal change: 46608880 Adding support for truncated guids in QuicFramer. Merge internal change: 46575819 using our latched write_blocked status to spare us useless system calls. Merge internal change: 46573462 Fixing some crashing issues in the QUIC loadtest, where if a client ever disconnects it never recovers, either crashing trying to create a stream or crashing waiting for a response on a non-existant stream. I'm not sure if we have the same problem for the http/https simple clients but we definitely do for QUIC. Merge internal change: 46562890 Merging changes from chromium - CL 14614006 Merge internal change: 46460427 Merging cleanup changes from chromium CL - 14651009 Merge internal change: 46457093 Fixing a test framework bug for quic: we were munging headers to do https:// for insecure quic resulting in a 404 in the http-only service map. Then disalbing the test since we don't advertise secure SPDY on insecure QUIC. Merge internal change: 46408400 Move QuicConfig from ssl_global_data to quic_dispatcher.cc. Initialize using values from QuicConfigProto and use the max_time_before_crypto_handshake to set the overall connection timeout before crypto handshake finishes. Merge internal change: 46400649 QUIC: implement ChannelIDs. We'll need this for HTTPS. Merge internal change: 46396357 Deleted usage of scoped_ptr_openssl. Added TODO comments for porting ChannelIDSigner and Verifier. R=rch@chromium.org Review URL: https://chromiumcodereview.appspot.com/15937012 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@203220 0039d316-1c4b-4281-b951-d872f2087c98
* Land Recent QUIC changes.rtenneti@chromium.org2013-05-231-5/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Blacklisting PCI domains for quic such that we won't even complete the crypto handshake for those domains on port 443. Merge internal change: 46392850 Dont retransmit packets which are NULL encrypted when encryption level is FORWARD_SECURE. This solves a bug when the client kept retrying to send a retransmitted CHLO which the server kept dropping. Merge internal change: 46380016 QUIC: various cleanups. * The AES code no longer does key expansion for every packet. * The CryptoFramer now actually calls Visitor::OnError. Merge internal change: 46227160 QUIC: add a CryptSecretBoxer object for server-internal needs Quic[En|De]crypter isn't actually thread-safe. I thought that it was because we were doing the key schedule every time, but it subtly isn't because the nonce is stored in the object, not on the stack. With cl/46095856 (not yet landed) I changed the AES-GCM encrypter/decrypter to really be non-thread-safe, which seemed fine because it wasn't previously either, but then I recalled that the server code was assuming otherwise. Initially I tried adding a thread-safe wrapper that could use thread-local storage on the server side and just locks in Chrome. That's done in cl/46136485 which is alternative to this CL. However, after writing it, it seemed that it might be easier just to have a thread-safe boxer, since this is internal to the server, and be done with it. At the same time we can also solve the short-nonce worry with the existing, AES-GCM based boxer. Merge internal change: 46226208 For chromimum: Used sha256 to compute the hash of nonce and plaintext and stored it at the end of Box message. In Unbox, verified the sha256 hash stored in the ciphertext, matches the sha256 hash of nonce and plaintext in the ciphertext. TODO: Use Aes128Gcm12[En|De]crypter instead of sha256. QUIC - updated the comment in NormalizeHostname to say "stopping at the first trailing dot." QUIC - moved destructor to out of line. Merging cleanup changes from chromium - CL 14718011 Merge internal change: 46099778 Adding infrastructure to blacklist domains for QUIC Merge internal change: 46093221 Changing to be aware of variable length guids, but not yet support reading, writing, or negotiating non-8 byte guids. Merge internal change: 46050640 QUIC: invalidate validity when server config changes. When writing cl/44509151 I started by altering SetServerConfig but changed my mind and split SetProof from SetServerConfig. I used git to revert the changes to SetProof to avoid diff noise, but failed to add back the important change: the validity flag needs to be cleared when the proof is set. I will be wearing a brown paper bag for the rest of the day. Merge internal change: 46050043 R=rch@chromium.org Review URL: https://chromiumcodereview.appspot.com/15910002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@201925 0039d316-1c4b-4281-b951-d872f2087c98