static ngx_int_t ngx_http_set_builtin_header(ngx_http_request_t *r, ngx_http_lua_header_val_t *hv, ngx_str_t *value) { ngx_table_elt_t *h, **old; if (hv->offset) { old = (ngx_table_elt_t **) ((char *) &r->headers_out + hv->offset); } else { old = NULL; } if (old == NULL || *old == NULL) { return ngx_http_set_header_helper(r, hv, value, old, 0); } h = *old; if (value->len == 0) { dd("clearing the builtin header"); h->hash = 0; h->value = *value; return NGX_OK; } h->hash = hv->hash; h->key = hv->key; h->value = *value; return NGX_OK; }
static ngx_int_t ngx_http_set_content_type_header(ngx_http_request_t *r, ngx_http_lua_header_val_t *hv, ngx_str_t *value) { ngx_uint_t i; r->headers_out.content_type_len = value->len; #if 1 for (i = 0; i < value->len; i++) { if (value->data[i] == ';') { r->headers_out.content_type_len = i; break; } } #endif r->headers_out.content_type = *value; r->headers_out.content_type_hash = hv->hash; r->headers_out.content_type_lowcase = NULL; value->len = 0; return ngx_http_set_header_helper(r, hv, value, NULL, 1); }
static ngx_int_t ngx_http_set_content_type_header(ngx_http_request_t *r, ngx_http_headers_more_header_val_t *hv, ngx_str_t *value) { u_char *p, *last, *end; r->headers_out.content_type_len = value->len; r->headers_out.content_type = *value; r->headers_out.content_type_hash = hv->hash; r->headers_out.content_type_lowcase = NULL; p = value->data; end = p + value->len; for (; p != end; p++) { if (*p != ';') { continue; } last = p; while (*++p == ' ') { /* void */ } if (p == end) { break; } if (ngx_strncasecmp(p, (u_char *) "charset=", 8) != 0) { continue; } p += 8; r->headers_out.content_type_len = last - value->data; if (*p == '"') { p++; } last = end; if (*(last - 1) == '"') { last--; } r->headers_out.charset.len = last - p; r->headers_out.charset.data = p; break; } value->len = 0; return ngx_http_set_header_helper(r, hv, value, NULL, 1); }
static ngx_int_t ngx_http_set_builtin_header(ngx_http_request_t *r, ngx_http_headers_more_header_val_t *hv, ngx_str_t *value) { ngx_table_elt_t *h, **old; dd("entered set_builtin_header (input)"); if (hv->offset) { old = (ngx_table_elt_t **) ((char *) &r->headers_in + hv->offset); } else { old = NULL; } dd("old builtin ptr ptr: %p", old); if (old) { dd("old builtin ptr: %p", *old); } if (old == NULL || *old == NULL) { dd("set normal header"); return ngx_http_set_header_helper(r, hv, value, old); } h = *old; if (value->len == 0) { h->hash = 0; h->value = *value; return ngx_http_set_header_helper(r, hv, value, old); } h->hash = hv->hash; h->value = *value; return NGX_OK; }
static ngx_int_t ngx_http_set_content_type_header(ngx_http_request_t *r, ngx_http_lua_header_val_t *hv, ngx_str_t *value) { r->headers_out.content_type_len = value->len; r->headers_out.content_type = *value; r->headers_out.content_type_hash = hv->hash; r->headers_out.content_type_lowcase = NULL; value->len = 0; return ngx_http_set_header_helper(r, hv, value, NULL, 1); }
static ngx_int_t ngx_http_set_cookie_header(ngx_http_request_t *r, ngx_http_headers_more_header_val_t *hv, ngx_str_t *value) { ngx_table_elt_t **cookie, *h; if (r->headers_in.cookies.nelts > 0) { ngx_array_destroy(&r->headers_in.cookies); if (ngx_array_init(&r->headers_in.cookies, r->pool, 2, sizeof(ngx_table_elt_t *)) != NGX_OK) { return NGX_ERROR; } dd("clear headers in cookies: %d", (int) r->headers_in.cookies.nelts); } #if 1 if (r->headers_in.cookies.nalloc == 0) { if (ngx_array_init(&r->headers_in.cookies, r->pool, 2, sizeof(ngx_table_elt_t *)) != NGX_OK) { return NGX_ERROR; } } #endif h = NULL; if (ngx_http_set_header_helper(r, hv, value, &h) == NGX_ERROR) { return NGX_ERROR; } if (value->len == 0) { return NGX_OK; } dd("new cookie header: %p", h); cookie = ngx_array_push(&r->headers_in.cookies); if (cookie == NULL) { return NGX_ERROR; } *cookie = h; return NGX_OK; }
static ngx_int_t ngx_http_set_header(ngx_http_request_t *r, ngx_http_headers_more_header_val_t *hv, ngx_str_t *value) { return ngx_http_set_header_helper(r, hv, value, NULL); }