MCPcopy Create free account
hub / github.com/Redot-Engine/redot-engine / poll

Method poll

core/io/http_client_tcp.cpp:281–572  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

279}
280
281Error HTTPClientTCP::poll() {
282 if (tcp_connection.is_valid()) {
283 tcp_connection->poll();
284 }
285 switch (status) {
286 case STATUS_RESOLVING: {
287 ERR_FAIL_COND_V(resolving == IP::RESOLVER_INVALID_ID, ERR_BUG);
288
289 IP::ResolverStatus rstatus = IP::get_singleton()->get_resolve_item_status(resolving);
290 switch (rstatus) {
291 case IP::RESOLVER_STATUS_WAITING:
292 return OK; // Still resolving.
293
294 case IP::RESOLVER_STATUS_DONE: {
295 ip_candidates = IP::get_singleton()->get_resolve_item_addresses(resolving);
296 IP::get_singleton()->erase_resolve_item(resolving);
297 resolving = IP::RESOLVER_INVALID_ID;
298
299 Error err = ERR_BUG; // Should be at least one entry.
300 while (ip_candidates.size() > 0) {
301 err = tcp_connection->connect_to_host(ip_candidates.pop_front(), server_port);
302 if (err == OK) {
303 break;
304 }
305 }
306 if (err) {
307 status = STATUS_CANT_CONNECT;
308 return err;
309 }
310
311 status = STATUS_CONNECTING;
312 } break;
313 case IP::RESOLVER_STATUS_NONE:
314 case IP::RESOLVER_STATUS_ERROR: {
315 IP::get_singleton()->erase_resolve_item(resolving);
316 resolving = IP::RESOLVER_INVALID_ID;
317 close();
318 status = STATUS_CANT_RESOLVE;
319 return ERR_CANT_RESOLVE;
320 } break;
321 }
322 } break;
323 case STATUS_CONNECTING: {
324 StreamPeerTCP::Status s = tcp_connection->get_status();
325 switch (s) {
326 case StreamPeerTCP::STATUS_CONNECTING: {
327 return OK;
328 } break;
329 case StreamPeerTCP::STATUS_CONNECTED: {
330 if (tls_options.is_valid() && proxy_client.is_valid()) {
331 Error err = proxy_client->poll();
332 if (err == ERR_UNCONFIGURED) {
333 proxy_client->set_connection(tcp_connection);
334 const Vector<String> headers;
335 err = proxy_client->request(METHOD_CONNECT, vformat("%s:%d", conn_host, conn_port), headers, nullptr, 0);
336 if (err != OK) {
337 status = STATUS_CANT_CONNECT;
338 return err;

Callers

nothing calls this directly

Calls 15

vformatFunction · 0.85
erase_resolve_itemMethod · 0.80
connect_to_streamMethod · 0.80
disconnect_from_hostMethod · 0.80
get_data_arrayMethod · 0.80
splitMethod · 0.80
strip_edgesMethod · 0.80
to_lowerMethod · 0.80
begins_withMethod · 0.80
to_intMethod · 0.80

Tested by

no test coverage detected