blob: 9493a3fcc184a4b650c540720c20e57bac08cffd [file] [log] [blame]
/*
* 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/base/constructormagic.h"
#include "webrtc/base/sigslot.h"
#include "webrtc/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_