| /* |
| * Copyright 2016 The WebRTC Project Authors. All rights reserved. |
| * |
| * Use of this source code is governed by a BSD-style license |
| * that can be found in the LICENSE file in the root of the source |
| * tree. An additional intellectual property rights grant can be found |
| * in the file PATENTS. All contributing project authors may |
| * be found in the AUTHORS file in the root of the source tree. |
| */ |
| |
| #include "webrtc/p2p/quic/reliablequicstream.h" |
| |
| #include <string> |
| |
| #include "net/quic/quic_session.h" |
| #include "webrtc/rtc_base/checks.h" |
| |
| namespace cricket { |
| |
| ReliableQuicStream::ReliableQuicStream(net::QuicStreamId id, |
| net::QuicSession* session) |
| : net::ReliableQuicStream(id, session) { |
| RTC_DCHECK_NE(net::kCryptoStreamId, id); |
| } |
| |
| ReliableQuicStream::~ReliableQuicStream() {} |
| |
| void ReliableQuicStream::OnDataAvailable() { |
| struct iovec iov; |
| while (sequencer()->GetReadableRegions(&iov, 1) == 1) { |
| SignalDataReceived(id(), reinterpret_cast<const char*>(iov.iov_base), |
| iov.iov_len); |
| sequencer()->MarkConsumed(iov.iov_len); |
| } |
| } |
| |
| void ReliableQuicStream::OnClose() { |
| net::ReliableQuicStream::OnClose(); |
| SignalClosed(id(), connection_error()); |
| } |
| |
| rtc::StreamResult ReliableQuicStream::Write(const char* data, |
| size_t len, |
| bool fin) { |
| // Writes the data, or buffers it. |
| WriteOrBufferData(base::StringPiece(data, len), fin, nullptr); |
| if (HasBufferedData()) { |
| return rtc::StreamResult(rtc::SR_BLOCK); |
| } |
| return rtc::StreamResult(rtc::SR_SUCCESS); |
| } |
| |
| void ReliableQuicStream::Close() { |
| net::ReliableQuicStream::session()->CloseStream(id()); |
| } |
| |
| void ReliableQuicStream::OnCanWrite() { |
| uint64_t prev_queued_bytes = queued_data_bytes(); |
| net::ReliableQuicStream::OnCanWrite(); |
| uint64_t queued_bytes_written = prev_queued_bytes - queued_data_bytes(); |
| SignalQueuedBytesWritten(id(), queued_bytes_written); |
| } |
| |
| } // namespace cricket |