| 1062 | } |
| 1063 | |
| 1064 | Result HttpWebSocketEndpoint::sendFrame(const HttpWebSocketFrameHeaderView& header, Span<const char> payload, |
| 1065 | Span<char> storage, Span<const char>& encodedFrame) |
| 1066 | { |
| 1067 | SC_TRY_MSG(header.payloadLength == payload.sizeInBytes(), |
| 1068 | "HttpWebSocketEndpoint payload does not match frame length"); |
| 1069 | |
| 1070 | Span<const char> encodedHeader; |
| 1071 | SC_TRY(writer.beginFrame(header, storage, encodedHeader)); |
| 1072 | SC_TRY_MSG(storage.sizeInBytes() >= encodedHeader.sizeInBytes() + payload.sizeInBytes(), |
| 1073 | "HttpWebSocketEndpoint frame storage too small"); |
| 1074 | |
| 1075 | if (payload.sizeInBytes() > 0) |
| 1076 | { |
| 1077 | Span<char> destinationPayload = {storage.data() + encodedHeader.sizeInBytes(), payload.sizeInBytes()}; |
| 1078 | ::memcpy(destinationPayload.data(), payload.data(), payload.sizeInBytes()); |
| 1079 | SC_TRY(writer.writePayload(destinationPayload)); |
| 1080 | } |
| 1081 | SC_TRY(writer.finishFrame()); |
| 1082 | |
| 1083 | encodedFrame = {storage.data(), encodedHeader.sizeInBytes() + payload.sizeInBytes()}; |
| 1084 | return Result(true); |
| 1085 | } |
| 1086 | |
| 1087 | Result HttpWebSocketEndpoint::sendData(HttpWebSocketOpcode opcode, Span<const char> payload, bool fin, |
| 1088 | const uint8_t* maskKey, Span<char> storage, Span<const char>& encodedFrame) |
nothing calls this directly
no test coverage detected