mongoose/docs/c-api/mg_http_server.h/mg_http_parse_header2.md
Dmitry Frank b9b20c6494 Implement mg_http_parse_header2()
Which is a replacement of (deprecated) `mg_http_parse_header`, but,
similarly to `asprintf`, allocates a new buffer if the client-provided
one is not large enough.

Also use it throughout mongoose code, and thus some header-related
limitations are removed; in particular,
https://github.com/cesanta/mongoose/issues/813 is fixed.

CL: Mongoose Web Server: Deprecate `mg_http_parse_header()` and implement `mg_http_parse_header2()` instead, which allocates a new buffer if the client-provided one is not large enough (similarly to `asprintf`).
CL: Mongoose Web Server: Fix limitations of header value lengths, e.g. when parsing authentication headers such as nonce, etc.

PUBLISHED_FROM=c75b1bbbbdb294ea85075ce69b1368f115fdd1ef
2018-02-07 23:04:29 +00:00

1.0 KiB

title decl_name symbol_kind signature
mg_http_parse_header2() mg_http_parse_header2 func int mg_http_parse_header2(struct mg_str *hdr, const char *var_name, char **buf, size_t buf_size);

Parses the HTTP header hdr. Finds variable var_name and stores its value in the buffer *buf, buf_size. If the buffer size is not enough, allocates a buffer of required size and writes it to *buf, similar to asprintf(). The caller should always check whether the buffer was updated, and free it if so.

This function is supposed to parse cookies, authentication headers, etc. Example (error handling omitted):

char user_buf[20];
char *user = user_buf;
struct mg_str *hdr = mg_get_http_header(hm, "Authorization");
mg_http_parse_header2(hdr, "username", &user, sizeof(user_buf));
// ... do something useful with user
if (user != user_buf) {
  free(user);
}

Returns the length of the variable's value. If variable is not found, 0 is returned.