| 1315 | |
| 1316 | if (payload.sizeInBytes() > 0) |
| 1317 | { |
| 1318 | Span<char> destinationPayload = {storage.data() + encodedHeader.sizeInBytes(), payload.sizeInBytes()}; |
| 1319 | ::memcpy(destinationPayload.data(), payload.data(), payload.sizeInBytes()); |
| 1320 | SC_TRY(writer.writePayload(destinationPayload)); |
| 1321 | } |
| 1322 | SC_TRY(writer.finishFrame()); |
| 1323 | |
| 1324 | encodedFrame = {storage.data(), encodedHeader.sizeInBytes() + payload.sizeInBytes()}; |
| 1325 | return Result(true); |
| 1326 | } |
| 1327 | |
| 1328 | Result HttpWebSocketEndpoint::sendData(HttpWebSocketOpcode opcode, Span<const char> payload, bool fin, |
| 1329 | const uint8_t* maskKey, Span<char> storage, Span<const char>& encodedFrame) |
| 1330 | { |
| 1331 | if (opcode != HttpWebSocketOpcode::Text and opcode != HttpWebSocketOpcode::Binary and |
| 1332 | opcode != HttpWebSocketOpcode::Continuation) |
| 1333 | return Result::Error(HttpResultCategory, HttpError::WebSocketDataOpcodeRequired); |
| 1334 | HttpWebSocketFrameHeaderView header; |
| 1335 | header.opcode = opcode; |
| 1336 | header.fin = fin; |
| 1337 | header.payloadLength = payload.sizeInBytes(); |
| 1338 | SC_TRY(applyOutgoingMask(header, maskKey)); |
| 1339 | return sendFrame(header, payload, storage, encodedFrame); |
| 1340 | } |
| 1341 | |
| 1342 | Result HttpWebSocketEndpoint::sendPing(Span<const char> payload, const uint8_t* maskKey, Span<char> storage, |
| 1343 | Span<const char>& encodedFrame) |
| 1344 | { |
no test coverage detected