blob: 23c2df2455c4824340ef2aef5aa536a82542fe7e [file] [log] [blame]
mikescarlettcd0e4752016-02-08 17:35:47 -08001/*
2 * Copyright 2016 The WebRTC Project Authors. All rights reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11#include "webrtc/p2p/quic/reliablequicstream.h"
12
13#include <string>
14
mikescarlett18b67a52016-04-11 16:56:23 -070015#include "net/quic/quic_session.h"
Edward Lemurc20978e2017-07-06 19:44:34 +020016#include "webrtc/rtc_base/checks.h"
mikescarlettcd0e4752016-02-08 17:35:47 -080017
18namespace cricket {
19
20ReliableQuicStream::ReliableQuicStream(net::QuicStreamId id,
21 net::QuicSession* session)
22 : net::ReliableQuicStream(id, session) {
23 RTC_DCHECK_NE(net::kCryptoStreamId, id);
24}
25
26ReliableQuicStream::~ReliableQuicStream() {}
27
28void ReliableQuicStream::OnDataAvailable() {
29 struct iovec iov;
30 while (sequencer()->GetReadableRegions(&iov, 1) == 1) {
31 SignalDataReceived(id(), reinterpret_cast<const char*>(iov.iov_base),
32 iov.iov_len);
33 sequencer()->MarkConsumed(iov.iov_len);
34 }
35}
36
37void ReliableQuicStream::OnClose() {
38 net::ReliableQuicStream::OnClose();
39 SignalClosed(id(), connection_error());
40}
41
mikescarlett18b67a52016-04-11 16:56:23 -070042rtc::StreamResult ReliableQuicStream::Write(const char* data,
43 size_t len,
44 bool fin) {
mikescarlettcd0e4752016-02-08 17:35:47 -080045 // Writes the data, or buffers it.
mikescarlett47e381b2016-04-14 11:12:46 -070046 WriteOrBufferData(base::StringPiece(data, len), fin, nullptr);
mikescarlettcd0e4752016-02-08 17:35:47 -080047 if (HasBufferedData()) {
48 return rtc::StreamResult(rtc::SR_BLOCK);
49 }
mikescarlettcd0e4752016-02-08 17:35:47 -080050 return rtc::StreamResult(rtc::SR_SUCCESS);
51}
52
mikescarlett18b67a52016-04-11 16:56:23 -070053void ReliableQuicStream::Close() {
54 net::ReliableQuicStream::session()->CloseStream(id());
55}
56
57void ReliableQuicStream::OnCanWrite() {
58 uint64_t prev_queued_bytes = queued_data_bytes();
59 net::ReliableQuicStream::OnCanWrite();
60 uint64_t queued_bytes_written = prev_queued_bytes - queued_data_bytes();
61 SignalQueuedBytesWritten(id(), queued_bytes_written);
62}
63
mikescarlettcd0e4752016-02-08 17:35:47 -080064} // namespace cricket