| 982 | } |
| 983 | |
| 984 | Result HttpWebSocketMessageAssembler::onFramePayload(Span<char> payload, bool frameFinished) |
| 985 | { |
| 986 | if (ignoringFrame) |
| 987 | { |
| 988 | return Result(true); |
| 989 | } |
| 990 | |
| 991 | SC_TRY_MSG(assemblingMessage, "HttpWebSocketMessageAssembler payload without message"); |
| 992 | SC_TRY_MSG(messageSize + payload.sizeInBytes() <= messageStorage.sizeInBytes(), |
| 993 | "HttpWebSocketMessageAssembler message storage too small"); |
| 994 | if (payload.sizeInBytes() > 0) |
| 995 | { |
| 996 | ::memcpy(messageStorage.data() + messageSize, payload.data(), payload.sizeInBytes()); |
| 997 | messageSize += payload.sizeInBytes(); |
| 998 | } |
| 999 | |
| 1000 | if (frameFinished and currentFrame.fin) |
| 1001 | { |
| 1002 | if (onMessage.isValid()) |
| 1003 | { |
| 1004 | SC_TRY(onMessage(messageOpcode, {messageStorage.data(), messageSize})); |
| 1005 | } |
| 1006 | assemblingMessage = false; |
| 1007 | messageSize = 0; |
| 1008 | } |
| 1009 | return Result(true); |
| 1010 | } |
| 1011 | |
| 1012 | void HttpWebSocketEndpoint::reset(HttpWebSocketEndpointRole role) |
| 1013 | { |
no test coverage detected