MCPcopy Create free account
hub / github.com/Pagghiu/SaneCppLibraries / queueAutomaticControl

Method queueAutomaticControl

Libraries/Http/HttpWebSocket.cpp:1250–1277  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1248}
1249
1250Result HttpWebSocketEndpoint::queueAutomaticControl(HttpWebSocketOpcode opcode, Span<const char> payload)
1251{
1252 SC_TRY_MSG(not hasPendingControlFrame(), "HttpWebSocketEndpoint pending control frame backpressure");
1253
1254 HttpWebSocketFrameHeaderView header;
1255 header.opcode = opcode;
1256 header.fin = true;
1257 header.payloadLength = payload.sizeInBytes();
1258 SC_TRY(applyOutgoingMask(header, automaticMaskKeySet ? automaticMaskKey : nullptr));
1259
1260 HttpWebSocketFrameWriter controlWriter;
1261 controlWriter.reset(endpointRole);
1262
1263 Span<const char> encodedHeader;
1264 SC_TRY(controlWriter.beginFrame(header, automaticControlStorage, encodedHeader));
1265 SC_TRY_MSG(sizeof(automaticControlStorage) >= encodedHeader.sizeInBytes() + payload.sizeInBytes(),
1266 "HttpWebSocketEndpoint automatic control storage too small");
1267 if (payload.sizeInBytes() > 0)
1268 {
1269 Span<char> destinationPayload = {automaticControlStorage + encodedHeader.sizeInBytes(), payload.sizeInBytes()};
1270 ::memcpy(destinationPayload.data(), payload.data(), payload.sizeInBytes());
1271 SC_TRY(controlWriter.writePayload(destinationPayload));
1272 }
1273 SC_TRY(controlWriter.finishFrame());
1274
1275 pendingControlFrame = {automaticControlStorage, encodedHeader.sizeInBytes() + payload.sizeInBytes()};
1276 return Result(true);
1277}
1278
1279Result HttpWebSocketConnectionPump::attach(const HttpWebSocketTransportView& newTransport,
1280 HttpWebSocketEndpointRole endpointRole)

Callers

nothing calls this directly

Calls 8

hasPendingControlFrameFunction · 0.85
beginFrameMethod · 0.80
writePayloadMethod · 0.80
finishFrameMethod · 0.80
ResultClass · 0.50
sizeInBytesMethod · 0.45
resetMethod · 0.45
dataMethod · 0.45

Tested by

no test coverage detected