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

Method onStreamReceive

Libraries/Http/HttpAsyncServer.cpp:197–324  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

195 {
196 if (onError.isValid())
197 {
198 onError(accepted);
199 }
200 return;
201 }
202 HttpConnection::ID idx;
203 // Activation always succeeds because we pause asyncAccept when the there are not available clients
204 SC_HTTP_ASSERT_RELEASE(connections.activateNew(idx));
205
206 HttpConnection& client = static_cast<HttpConnection&>(connections.getConnection(idx));
207
208 SC_HTTP_ASSERT_RELEASE(client.readableSocketStream.request.isFree());
209 SC_HTTP_ASSERT_RELEASE(client.writableSocketStream.request.isFree());
210
211 client.socket = move(acceptedClient);
212 SC_HTTP_TRUST_RESULT(client.readableSocketStream.init(client.buffersPool, *eventLoop, client.socket));
213 SC_HTTP_TRUST_RESULT(client.writableSocketStream.init(client.buffersPool, *eventLoop, client.socket));
214 client.resetTransportStreams();
215 client.readableSocketStream.setAutoDestroy(true);
216 client.writableSocketStream.setAutoDestroy(false); // needed for keep-alive logic
217
218 Result setup = beginTransportConnection(client);
219 if (not setup)
220 {
221 if (onError.isValid())
222 {
223 onError(setup);
224 }
225 closeAsync(client);
226 }
227
228 // Only reactivate asyncAccept if there are available clients (otherwise it's being reactivated in closeAsync)
229 result.reactivateRequest(connections.getNumActiveConnections() < connections.getNumTotalConnections());
230}
231
232Result HttpAsyncServer::beginHttpConnection(HttpConnection& client)
233{
234 client.response.setWritableStream(client.getWritableTransportStream());
235
236 EventDataListener dataListener{*this, client};
237 SC_TRY_MSG(client.getReadableTransportStream().eventData.addListener(dataListener),
238 "HttpAsyncServer readable data listener unavailable");
239 if (client.getReadableTransportStream().canStart())
240 {
241 SC_TRY(client.getReadableTransportStream().start());
242 }
243 else
244 {
245 client.getReadableTransportStream().resumeReading();
246 }
247 return Result(true);
248}
249
250Result HttpAsyncServer::beginTransportConnection(HttpConnection& client)
251{
252 if (not transportSetup.isValid())
253 {
254 return beginHttpConnection(client);

Callers 1

operator()Method · 0.80

Calls 11

onErrorFunction · 0.85
getWritableDataMethod · 0.80
writeHeadersMethod · 0.80
prepareBodyStreamMethod · 0.80
resumeReadingMethod · 0.80
pauseMethod · 0.80
startBodyStreamMethod · 0.80
ResultClass · 0.50
isValidMethod · 0.45
resetMethod · 0.45

Tested by

no test coverage detected