OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/quic/quic_flow_controller.h" | 5 #include "net/quic/quic_flow_controller.h" |
6 | 6 |
7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
| 8 #include "base/strings/stringprintf.h" |
8 #include "net/quic/quic_connection.h" | 9 #include "net/quic/quic_connection.h" |
9 #include "net/quic/quic_flags.h" | 10 #include "net/quic/quic_flags.h" |
10 #include "net/quic/quic_protocol.h" | 11 #include "net/quic/quic_protocol.h" |
11 | 12 |
12 namespace net { | 13 namespace net { |
13 | 14 |
14 #define ENDPOINT \ | 15 #define ENDPOINT \ |
15 (perspective_ == Perspective::IS_SERVER ? "Server: " : "Client: ") | 16 (perspective_ == Perspective::IS_SERVER ? "Server: " : "Client: ") |
16 | 17 |
17 QuicFlowController::QuicFlowController(QuicConnection* connection, | 18 QuicFlowController::QuicFlowController(QuicConnection* connection, |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
66 } | 67 } |
67 | 68 |
68 void QuicFlowController::AddBytesSent(QuicByteCount bytes_sent) { | 69 void QuicFlowController::AddBytesSent(QuicByteCount bytes_sent) { |
69 if (bytes_sent_ + bytes_sent > send_window_offset_) { | 70 if (bytes_sent_ + bytes_sent > send_window_offset_) { |
70 LOG(DFATAL) << ENDPOINT << "Stream " << id_ << " Trying to send an extra " | 71 LOG(DFATAL) << ENDPOINT << "Stream " << id_ << " Trying to send an extra " |
71 << bytes_sent << " bytes, when bytes_sent = " << bytes_sent_ | 72 << bytes_sent << " bytes, when bytes_sent = " << bytes_sent_ |
72 << ", and send_window_offset_ = " << send_window_offset_; | 73 << ", and send_window_offset_ = " << send_window_offset_; |
73 bytes_sent_ = send_window_offset_; | 74 bytes_sent_ = send_window_offset_; |
74 | 75 |
75 // This is an error on our side, close the connection as soon as possible. | 76 // This is an error on our side, close the connection as soon as possible. |
76 connection_->SendConnectionClose(QUIC_FLOW_CONTROL_SENT_TOO_MUCH_DATA); | 77 connection_->SendConnectionCloseWithDetails( |
| 78 QUIC_FLOW_CONTROL_SENT_TOO_MUCH_DATA, |
| 79 base::StringPrintf("%lu bytes over send window offset", |
| 80 send_window_offset_ - (bytes_sent_ + bytes_sent)) |
| 81 .c_str()); |
77 return; | 82 return; |
78 } | 83 } |
79 | 84 |
80 bytes_sent_ += bytes_sent; | 85 bytes_sent_ += bytes_sent; |
81 DVLOG(1) << ENDPOINT << "Stream " << id_ << " sent: " << bytes_sent_; | 86 DVLOG(1) << ENDPOINT << "Stream " << id_ << " sent: " << bytes_sent_; |
82 } | 87 } |
83 | 88 |
84 bool QuicFlowController::FlowControlViolation() { | 89 bool QuicFlowController::FlowControlViolation() { |
85 if (highest_received_byte_offset_ > receive_window_offset_) { | 90 if (highest_received_byte_offset_ > receive_window_offset_) { |
86 LOG(ERROR) << ENDPOINT << "Flow control violation on stream " | 91 LOG(ERROR) << ENDPOINT << "Flow control violation on stream " |
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
242 if (receive_window_size_ != receive_window_offset_) { | 247 if (receive_window_size_ != receive_window_offset_) { |
243 LOG(DFATAL) << "receive_window_size_:" << receive_window_size_ | 248 LOG(DFATAL) << "receive_window_size_:" << receive_window_size_ |
244 << " != receive_window_offset:" << receive_window_offset_; | 249 << " != receive_window_offset:" << receive_window_offset_; |
245 return; | 250 return; |
246 } | 251 } |
247 receive_window_size_ = size; | 252 receive_window_size_ = size; |
248 receive_window_offset_ = size; | 253 receive_window_offset_ = size; |
249 } | 254 } |
250 | 255 |
251 } // namespace net | 256 } // namespace net |
OLD | NEW |