diff --git a/include/rtc/datachannel.hpp b/include/rtc/datachannel.hpp index 9a0e6c8..64e5009 100644 --- a/include/rtc/datachannel.hpp +++ b/include/rtc/datachannel.hpp @@ -46,6 +46,9 @@ public: void send(const byte *data, size_t size); std::optional> receive(); + size_t available() const; + size_t availableSize() const; + unsigned int stream() const; string label() const; string protocol() const; @@ -69,6 +72,7 @@ private: std::atomic mIsClosed = false; Queue mRecvQueue; + std::atomic mRecvSize = 0; friend class PeerConnection; }; diff --git a/src/datachannel.cpp b/src/datachannel.cpp index 3a901d4..d8f330c 100644 --- a/src/datachannel.cpp +++ b/src/datachannel.cpp @@ -118,9 +118,11 @@ std::optional> DataChannel::receive() { break; } case Message::String: + mRecvSize -= message->size(); return std::make_optional( string(reinterpret_cast(message->data()), message->size())); case Message::Binary: + mRecvSize -= message->size(); return std::make_optional(std::move(*message)); } } @@ -128,6 +130,10 @@ std::optional> DataChannel::receive() { return nullopt; } +size_t DataChannel::available() const { return mRecvQueue.size(); } + +size_t DataChannel::availableSize() const { return mRecvSize; } + unsigned int DataChannel::stream() const { return mStream; } string DataChannel::label() const { return mLabel; } @@ -197,6 +203,7 @@ void DataChannel::incoming(message_ptr message) { } case Message::String: case Message::Binary: + mRecvSize += message->size(); mRecvQueue.push(message); triggerAvailable(mRecvQueue.size()); break;