Skip to content

Commit 7b3044e

Browse files
fix: when releasing web socket stream, more data must result in DataReceived() (#1045)
1 parent 316791e commit 7b3044e

File tree

3 files changed

+16
-4
lines changed

3 files changed

+16
-4
lines changed

services/network/WebSocketServerConnectionObserver.cpp

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,14 @@ namespace services
4040

4141
void WebSocketServerConnectionObserver::DataReceived()
4242
{
43-
auto startSize = receiveBuffer.size();
44-
4543
receivingState->DataReceived();
4644
sendingState->CheckForSomethingToDo();
4745

48-
if (startSize != receiveBuffer.size())
46+
if (moreDataReceived)
47+
{
48+
moreDataReceived = false;
4949
services::Connection::Observer().DataReceived();
50+
}
5051
}
5152

5253
void WebSocketServerConnectionObserver::Detaching()
@@ -97,6 +98,12 @@ namespace services
9798
void WebSocketServerConnectionObserver::ReceiveStreamAllocatable()
9899
{
99100
receivingState->DataReceived();
101+
102+
if (moreDataReceived)
103+
{
104+
moreDataReceived = false;
105+
services::Connection::Observer().DataReceived();
106+
}
100107
}
101108

102109
void WebSocketServerConnectionObserver::SendStreamAllocatable()
@@ -238,6 +245,7 @@ namespace services
238245

239246
while (growSize != 0)
240247
{
248+
connection.moreDataReceived = true;
241249
auto range = connection.receiveBuffer.contiguous_range(connection.receiveBuffer.end() - growSize);
242250
stream >> range;
243251
growSize -= range.size();

services/network/WebSocketServerConnectionObserver.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,7 @@ namespace services
199199
infra::SharedPtr<void> keepAliveWhileWriting;
200200
bool sendBufferReadyForSending = false;
201201
infra::BoundedVector<uint8_t>::WithMaxSize<8> pongBuffer;
202+
bool moreDataReceived = false;
202203
};
203204
}
204205

services/network/test/TestWebSocketServerConnectionObserver.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,8 +203,11 @@ TEST_F(WebSocketServerConnectionObserverTest, receive_frame_with_larger_payload_
203203
testing::InSequence s;
204204
EXPECT_CALL(connectionObserver, DataReceived()).WillOnce(testing::Invoke([this]()
205205
{
206+
EXPECT_CALL(connectionObserver, DataReceived()).WillOnce(testing::Invoke([this]()
207+
{
208+
CheckDataReceived(std::vector<uint8_t>(8, 0x91));
209+
}));
206210
CheckDataReceived(std::vector<uint8_t>(512, 0x91));
207-
CheckDataReceived(std::vector<uint8_t>(8, 0x91));
208211
}));
209212

210213
connection.SimulateDataReceived(receiveDataPayload);

0 commit comments

Comments
 (0)