<div dir="ltr"><div><br></div><div>Hi,</div><div><br></div><div>thank you for your response.</div><div><br></div><div>>>You are writing into the headers_in structure. Normally, that is what</div><div>>>came from the client, so I guess you must have a plan for why you are</div><div>>>doing that.</div><div><br></div><div>I have tried to write in headers_out struture also but did not able to read the my written value so tried with headers_in</div><div><br></div><div>>>The example code I see treats is as a ngx_http_header_t*.</div><div>i have tried to change return type to ngx_http_header_t but still same result.</div><div><br></div><div>If i am writing in headers_out "Set-Cookie" value "somevalue" then same value reflecting response header tab while viewing through developer option in mozilla</div><div>and request header "cookie" value "somevalue".</div><div>So  what is the possible way to read this  "cookie" value that is "somevalue".</div><div>i tried to read many way like using ngx_http_parse_multi_header_lines(),ngx_hash_find() but still not able to get correct value .</div><div>Below is snapshot of Response and Request header</div><div><br></div><div><img src="cid:ii_154704ec4ef57d00" alt="Inline image 1" width="499" height="363"><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Apr 28, 2016 at 12:39 PM, Francis Daly <span dir="ltr"><<a href="mailto:francis@daoine.org" target="_blank">francis@daoine.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Tue, Apr 26, 2016 at 04:52:22PM +0530, Pankaj Chaudhary wrote:<br>
<br>
Hi there,<br>
<br>
</span><span class="">> I have requirement to create own cookie  based on input  and wirte the that<br>
> cookie in header.<br>
> whenever i need that i can read from header and use it.<br>
<br>
</span>I confess that I do not understand what that requirement actually<br>
is. There are headers in the request from the client to nginx; there<br>
may be header-like things in whatever nginx does when communicating<br>
with an upstream; there may be header-like things in the response from<br>
that upstream; and there are headers in the response from nginx to the<br>
client. And it is not clear to me what your module architecture is.<br>
<br>
But that's ok; I don't have to understand it. You want to do some specific<br>
things in an nginx module.<br>
<span class=""><br>
> for example:-<br>
><br>
> I have created my own cookie "thissomevalue" worte in header and later the<br>
> same read from header.<br>
><br>
> Please check my code and let me know why i am not able to read the value<br>
> from header.<br>
><br>
> Below code snippet to set header value in request header:-<br>
><br>
> ngx_table_elt_t *cookie;<br>
> cookie = ngx_list_push(&r->headers_in.headers);<br>
<br>
</span>You are writing into the headers_in structure. Normally, that is what<br>
came from the client, so I guess you must have a plan for why you are<br>
doing that.<br>
<br>
(If I wanted to test "can I read from headers_in", I would probably add a<br>
"MyHeader" to my curl request, and look for that in my code.)<br>
<span class=""><br>
> cookie->lowcase_key = (u_char*) "cookie";<br>
> ngx_str_set(&cookie->key, "Cookie");<br>
> ngx_str_set(&cookie->value, "somevalue");<br>
> cookie->hash = ngx_crc32_long(cookie->lowcase_key, cookie->key.len);<br>
><br>
><br>
> Below code snippet to read set value from header:-<br>
><br>
> ngx_http_core_main_conf_t   *clcf;<br>
> ngx_str_t                   *type;<br>
> ngx_uint_t                   key;<br>
> ngx_str_t    val = ngx_string("cookie");<br>
> clcf = ngx_http_get_module_main_conf(r, ngx_http_core_module);<br>
> key= ngx_hash_key_lc(val.data, val.len);<br>
> type = ngx_hash_find(&clcf->headers_in_hash, key,  val.data, val.len);<br>
<br>
</span>As mentioned elsewhere, you are not reading from the headers_in<br>
structure. So there's a reasonable chance that what you wrote into one<br>
structure will not be found in another one.<br>
<br>
Also, you are treating the output of ngx_hash_find() as a ngx_str_t*.<br>
<br>
The example code I see treats is as a ngx_http_header_t*.<br>
<br>
Is that an important difference?<br>
<br>
(As in: is that why you print the header name, but not the header<br>
value? Possibly not, if the original request did not have any Cookie<br>
header; but test rather than assume, if the documentation is not clear<br>
to you.)<br>
<br>
> if (type != NULL)<br>
> {<br>
<br>
The example code I see has separate handling for "header is unknown or<br>
is not hashed yet", and "header is hashed but not cached yet". You<br>
seem to skip testing for the second possibility here.<br>
<span class=""><br>
> ngx_table_elt_t *test_val;<br>
> test_val= ngx_list_push(&r->headers_out.headers);<br>
> test_val->lowcase_key = (u_char*) "test_val";<br>
> ngx_str_set(&test_val->key, "Test_Val");<br>
> ngx_str_set(&test_val->value, type->data);<br>
<br>
</span>I'd also suggest that if you are not sure what value your content has,<br>
use the simplest possible method to print it somewhere you can read<br>
it. Usually, that means logging, since that should not have a complex<br>
data structure.<br>
<span class=""><br>
> test_val->hash = ngx_crc32_long(test_val->lowcase_key, test_val->key.len);<br>
> }<br>
<br>
</span>Good luck with it,<br>
<div class="HOEnZb"><div class="h5"><br>
        f<br>
--<br>
Francis Daly        <a href="mailto:francis@daoine.org">francis@daoine.org</a><br>
<br>
_______________________________________________<br>
nginx mailing list<br>
<a href="mailto:nginx@nginx.org">nginx@nginx.org</a><br>
<a href="http://mailman.nginx.org/mailman/listinfo/nginx" rel="noreferrer" target="_blank">http://mailman.nginx.org/mailman/listinfo/nginx</a><br>
</div></div></blockquote></div><br></div>