| /* |
| * 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. |
| */ |
| |
| #ifndef WEBRTC_P2P_QUIC_RELIABLEQUICSTREAM_H_ |
| #define WEBRTC_P2P_QUIC_RELIABLEQUICSTREAM_H_ |
| |
| #include "net/quic/reliable_quic_stream.h" |
| #include "webrtc/rtc_base/constructormagic.h" |
| #include "webrtc/rtc_base/sigslot.h" |
| #include "webrtc/rtc_base/stream.h" |
| |
| namespace cricket { |
| |
| // Streams created by QuicSession. |
| class ReliableQuicStream : public net::ReliableQuicStream, |
| public sigslot::has_slots<> { |
| public: |
| ReliableQuicStream(net::QuicStreamId id, net::QuicSession* session); |
| |
| ~ReliableQuicStream() override; |
| |
| // ReliableQuicStream overrides. |
| void OnDataAvailable() override; |
| void OnClose() override; |
| void OnCanWrite() override; |
| |
| // Process decrypted data into encrypted QUIC packets, which get sent to the |
| // QuicPacketWriter. rtc::SR_BLOCK is returned if the operation blocks instead |
| // of writing, in which case the data is queued until OnCanWrite() is called. |
| // If |fin| == true, then this stream closes after sending data. |
| rtc::StreamResult Write(const char* data, size_t len, bool fin = false); |
| // Removes this stream from the QuicSession's stream map. |
| void Close(); |
| |
| // Called when decrypted data is ready to be read. |
| sigslot::signal3<net::QuicStreamId, const char*, size_t> SignalDataReceived; |
| // Called when the stream is closed. |
| sigslot::signal2<net::QuicStreamId, int> SignalClosed; |
| // Emits the number of queued bytes that were written by OnCanWrite(), after |
| // the stream was previously write blocked. |
| sigslot::signal2<net::QuicStreamId, uint64_t> SignalQueuedBytesWritten; |
| |
| private: |
| RTC_DISALLOW_COPY_AND_ASSIGN(ReliableQuicStream); |
| }; |
| |
| } // namespace cricket |
| |
| #endif // WEBRTC_P2P_QUIC_RELIABLEQUICSTREAM_H_ |