1
0
Fork 0
mirror of https://libwebsockets.org/repo/libwebsockets synced 2025-08-22 16:00:30 +00:00

adns: Report error code if callback destroyed wsi

https://github.com/warmcat/libwebsockets/issues/3389
This commit is contained in:
Matt Fischer 2025-05-14 15:03:48 -05:00 committed by Andy Green
commit bb1261254e
2 changed files with 12 additions and 15 deletions

View file

@ -82,9 +82,10 @@ lws_async_dns_drop_server(struct lws_context *context)
context->async_dns.dns_server_connected = 0;
}
int
lws_async_dns_retcode_t
lws_async_dns_complete(lws_adns_q_t *q, lws_adns_cache_t *c)
{
lws_async_dns_retcode_t ret = LADNS_RET_FOUND;
lws_start_foreach_dll_safe(struct lws_dll2 *, d, d1,
lws_dll2_get_head(&q->wsi_adns)) {
@ -101,11 +102,10 @@ lws_async_dns_complete(lws_adns_q_t *q, lws_adns_cache_t *c)
* This may decide to close / delete w
*/
if (w->adns_cb(w, (const char *)&q[1], c ? c->results : NULL, 0,
q->opaque) == NULL)
q->opaque) == NULL) {
lwsl_info("%s: failed\n", __func__);
// lws_close_free_wsi(w, LWS_CLOSE_STATUS_NOSTATUS,
// "adopt udp2 fail");
ret = LADNS_RET_FAILED_WSI_CLOSED;
}
} lws_end_foreach_dll_safe(d, d1);
@ -116,13 +116,14 @@ lws_async_dns_complete(lws_adns_q_t *q, lws_adns_cache_t *c)
c->refcount++;
}
q->standalone_cb(NULL, (const char *)&q[1],
c ? c->results : NULL, 0, q->opaque);
if (q->standalone_cb(NULL, (const char *)&q[1],
c ? c->results : NULL, 0, q->opaque) == NULL)
ret = LADNS_RET_FAILED_WSI_CLOSED;
}
lws_adns_dump(q->dns);
return 0;
return ret;
}
static void
@ -775,9 +776,7 @@ lws_async_dns_query(struct lws_context *context, int tsi, const char *name,
ai->ai_addr = (struct sockaddr *)&sa46->sa4;
memcpy(&sa46->sa4.sin_addr, ads, (unsigned int)m);
lws_async_dns_complete(&tmq.tq, c);
return LADNS_RET_FOUND;
return lws_async_dns_complete(&tmq.tq, c);
}
#if defined(LWS_WITH_IPV6)
@ -787,9 +786,7 @@ lws_async_dns_query(struct lws_context *context, int tsi, const char *name,
ai->ai_addr = (struct sockaddr *)&sa46->sa6;
memcpy(&sa46->sa6.sin6_addr, ads, (unsigned int)m);
lws_async_dns_complete(&tmq.tq, c);
return LADNS_RET_FOUND;
return lws_async_dns_complete(&tmq.tq, c);
}
#endif

View file

@ -115,7 +115,7 @@ sul_cb_expire(struct lws_sorted_usec_list *sul);
void
lws_adns_cache_destroy(lws_adns_cache_t *c);
int
lws_async_dns_retcode_t
lws_async_dns_complete(lws_adns_q_t *q, lws_adns_cache_t *c);
lws_adns_cache_t *