ngx_http_process_header_line function in source code

Maxim Dounin mdounin at mdounin.ru
Mon Jun 16 11:31:20 UTC 2014


Hello!

On Sun, Jun 15, 2014 at 06:03:27PM -0400, alayim wrote:

> Hi,
> I'm browsing through the source code of the project, and looked at
> ngx_http_request.c where the function ngx_http_process_header_line() creates
> a pointer to a pointer to a large struct(ngx_http_request_t) containing a
> smaller one(ngx_http_headers_in_t), containing yet another one.
> 
> ngx_http_process_header_line(ngx_http_request_t *r, ngx_table_elt_t *h,
> ngx_uint_t offset) {
>     ph = (ngx_table_elt_t **) ((char *) &r->headers_in + offset);
>     // ... then check if ph is NULL, and if so point it to h
> }
> 
> 
> Why is it done in this way? It seems quite complex and error prone, doesen't
> it?
> Is there any reason something like this wasn't done instead?
> 
> (where range are ONE of those structures in headers_in that are a
> ngx_table_elt_t)
> if(r->headers_in->range == NULL) {
>       r->headers_in->range = h;
> }

The ngx_http_process_header_line() function is used to handle lots 
of header lines.  You can't hardcode just one name into it - 
you'll have to write 15 functions instead (and add another one on 
each header line added).  Using one universal function instead 
greatly reduces code size and therefore less error prone.

-- 
Maxim Dounin
http://nginx.org/



More information about the nginx mailing list