diff --git a/lib/isc/httpd.c b/lib/isc/httpd.c index 320d72e650..a6407221a7 100644 --- a/lib/isc/httpd.c +++ b/lib/isc/httpd.c @@ -1118,3 +1118,20 @@ const isc_time_t * isc_httpd_if_modified_since(const isc_httpd_t *httpd) { return (const isc_time_t *)&httpd->if_modified_since; } + +isc_result_t +isc_httpd_geturlfield(const isc_httpd_t *httpd, isc_url_field_t field, + char const **base, uint16_t *len) { + REQUIRE(httpd != NULL); + REQUIRE(base != NULL); + REQUIRE(len != NULL); + + if (httpd->up.field_set & (1 << field)) { + *base = httpd->path + httpd->up.field_data[field].off; + *len = httpd->up.field_data[field].len; + + return ISC_R_SUCCESS; + } + + return ISC_R_NOTFOUND; +} diff --git a/lib/isc/include/isc/httpd.h b/lib/isc/include/isc/httpd.h index 23472d0f82..c702877289 100644 --- a/lib/isc/include/isc/httpd.h +++ b/lib/isc/include/isc/httpd.h @@ -47,6 +47,10 @@ isc_result_t isc_httpdmgr_addurl(isc_httpdmgr_t *httpdmgr, const char *url, bool isstatic, isc_httpdaction_t *func, void *arg); +isc_result_t +isc_httpd_geturlfield(const isc_httpd_t *httpd, isc_url_field_t field, + const char **base, uint16_t *len); + void isc_httpd_setfinishhook(void (*fn)(void));