feat: improve request header api functions
This commit is contained in:
parent
854e8c3809
commit
321e9c0b80
4 changed files with 47 additions and 31 deletions
|
|
@ -13,7 +13,11 @@
|
|||
#define LNM_HTTP_MAX_REQ_HEADERS 32
|
||||
#define LNM_HTTP_MAX_REGEX_GROUPS 4
|
||||
|
||||
typedef struct lnm_http_req_header {
|
||||
/**
|
||||
* Internal representation of a header in a request, defined using offsets
|
||||
* relative to the full buffer.
|
||||
*/
|
||||
typedef struct lnm_http_req_iheader {
|
||||
struct {
|
||||
size_t o;
|
||||
size_t len;
|
||||
|
|
@ -22,6 +26,20 @@ typedef struct lnm_http_req_header {
|
|||
size_t o;
|
||||
size_t len;
|
||||
} value;
|
||||
} lnm_http_req_iheader;
|
||||
|
||||
/**
|
||||
* Represents an actual header value, with offsets already resolved.
|
||||
*/
|
||||
typedef struct lnm_http_req_header {
|
||||
struct {
|
||||
const char *s;
|
||||
size_t len;
|
||||
} name;
|
||||
struct {
|
||||
const char *s;
|
||||
size_t len;
|
||||
} value;
|
||||
} lnm_http_req_header;
|
||||
|
||||
/**
|
||||
|
|
@ -45,7 +63,7 @@ typedef struct lnm_http_req {
|
|||
size_t len;
|
||||
} query;
|
||||
struct {
|
||||
lnm_http_req_header arr[LNM_HTTP_MAX_REQ_HEADERS];
|
||||
lnm_http_req_iheader arr[LNM_HTTP_MAX_REQ_HEADERS];
|
||||
size_t len;
|
||||
} headers;
|
||||
struct {
|
||||
|
|
@ -81,31 +99,29 @@ lnm_http_parse_err lnm_http_req_parse(lnm_http_req *req, char *buf, size_t len);
|
|||
void lnm_http_req_reset(lnm_http_req *req);
|
||||
|
||||
/**
|
||||
* Retrieve a specific header from the request.
|
||||
* Retrieve a known type header from the request.
|
||||
*
|
||||
* Pointers retrieved from this function should never be used between step
|
||||
* functions; simply request the header again if you need to.
|
||||
*
|
||||
* @param out where to write pointer to header value
|
||||
* @param out_len where to store length of out value
|
||||
* @param out where to store pointer to struct representing header
|
||||
* @param req request to look for header in
|
||||
* @param type type of header to look for
|
||||
*/
|
||||
lnm_err lnm_http_req_header_get(const char **out, size_t *out_len,
|
||||
lnm_http_req *req, lnm_http_header type);
|
||||
lnm_err lnm_http_req_header_get(lnm_http_req_header *out, lnm_http_req *req,
|
||||
lnm_http_header type);
|
||||
|
||||
/**
|
||||
* Retrieve a specific header from the request by specifying its name.
|
||||
* Retrieve a header from the request using a case-insensitive name.
|
||||
*
|
||||
* Pointers retrieved from this function should never be used between step
|
||||
* functions; simply request the header again if you need to.
|
||||
*
|
||||
* @param out where to write pointer to header value
|
||||
* @param out_len where to store length of out value
|
||||
* @param out where to store pointer to struct representing header
|
||||
* @param req request to look for header in
|
||||
* @param name name of the header; matches case-insensitive
|
||||
*/
|
||||
lnm_err lnm_http_req_header_get_s(const char **out, size_t *out_len,
|
||||
lnm_http_req *req, const char *name);
|
||||
lnm_err lnm_http_req_header_get_s(lnm_http_req_header *out, lnm_http_req *req,
|
||||
const char *name);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue