Re: ngx_http_v3_init_session function

2024-02-05 Thread J Carter
On Tue, 6 Feb 2024 00:44:56 +
J Carter  wrote:

> On Tue, 6 Feb 2024 00:16:31 +
> J Carter  wrote:
> 
> > Hello,
> > 
> > On Mon, 5 Feb 2024 23:24:39 +0200
> > Clima Gabriel  wrote:
> > 
> > > Hello everyone,
> > > 
> > > (the code is probably clearer and attached below)
> > > This function modifies what ngx_connection_t->data points to.
> > > ngx_connection_t->data is initially *ngx_http_connection_t.
> > > The *ngx_http_connection_t is assigned to
> > > ngx_http_v3_session_t->http_connection
> > > And the *ngx_http_v3_session_t assigned to ngx_connection_t->data.
> > > 
> > > Result: before ngx_connection_t->data is *ngx_http_connection_t
> > >after ngx_connection_t->data is *ngx_http_v3_session_t
> > 
> > In C, a pointer to struct can be cast to a pointer to the first member
> > of that struct, as there is no padding before the first member per the
> > standard.
> > 
> > The first member of ngx_http_v3_session_t is *ngx_http_connection_t.
> 
> *Sorry typo here - first member is ngx_http_connection_t of course.
> > 
> > Here is the commit where this was implemented.
> > 
> > https://mailman.nginx.org/pipermail/nginx-devel/2023-September/BWH23FTMRUWCUZSNKXJJXEEN76ZYOK62.html
> > 
> > [...]

Oh, I've just realized that is the wrong patch.  There were a couple of
reworks to that patch later that I missed.. Here is the actual 
changeset version, with *ngx_http_connection_t as you say:

https://hg.nginx.org/nginx/rev/4939fd04737f

It appears that this macro should be used to get ngx_http_connection_t:

https://hg.nginx.org/nginx/file/tip/src/http/v3/ngx_http_v3.h#l85

However it's likely a good idea to wait to see if the author/s will
comment on if that is safe and correct in all situations.
___
nginx mailing list
nginx@nginx.org
https://mailman.nginx.org/mailman/listinfo/nginx


Re: Occasional "400 Bad Request" Responses from Nginx

2024-02-05 Thread Hiroaki Nakamura
Hello,

2024年2月4日(日) 19:48 Maxim Dounin :
> Take a look at the tcpdump, notably the previous request before
> 400 is returned: it is obviously incomplete, there is just 344
> bytes of the request body instead of 1024 bytes promised in
> the headers:

Ah, I missed that. Thanks for pointing it out. I have filed an issue
in the ATS repository.
___
nginx mailing list
nginx@nginx.org
https://mailman.nginx.org/mailman/listinfo/nginx


Re: ngx_http_v3_init_session function

2024-02-05 Thread J Carter
On Tue, 6 Feb 2024 00:16:31 +
J Carter  wrote:

> Hello,
> 
> On Mon, 5 Feb 2024 23:24:39 +0200
> Clima Gabriel  wrote:
> 
> > Hello everyone,
> > 
> > (the code is probably clearer and attached below)
> > This function modifies what ngx_connection_t->data points to.
> > ngx_connection_t->data is initially *ngx_http_connection_t.
> > The *ngx_http_connection_t is assigned to
> > ngx_http_v3_session_t->http_connection
> > And the *ngx_http_v3_session_t assigned to ngx_connection_t->data.
> > 
> > Result: before ngx_connection_t->data is *ngx_http_connection_t
> >after ngx_connection_t->data is *ngx_http_v3_session_t
> 
> In C, a pointer to struct can be cast to a pointer to the first member
> of that struct, as there is no padding before the first member per the
> standard.
> 
> The first member of ngx_http_v3_session_t is *ngx_http_connection_t.

*Sorry typo here - first member is ngx_http_connection_t of course.
> 
> Here is the commit where this was implemented.
> 
> https://mailman.nginx.org/pipermail/nginx-devel/2023-September/BWH23FTMRUWCUZSNKXJJXEEN76ZYOK62.html
> 
> [...]
___
nginx mailing list
nginx@nginx.org
https://mailman.nginx.org/mailman/listinfo/nginx


Re: ngx_http_v3_init_session function

2024-02-05 Thread J Carter
Hello,

On Mon, 5 Feb 2024 23:24:39 +0200
Clima Gabriel  wrote:

> Hello everyone,
> 
> (the code is probably clearer and attached below)
> This function modifies what ngx_connection_t->data points to.
> ngx_connection_t->data is initially *ngx_http_connection_t.
> The *ngx_http_connection_t is assigned to
> ngx_http_v3_session_t->http_connection
> And the *ngx_http_v3_session_t assigned to ngx_connection_t->data.
> 
> Result: before ngx_connection_t->data is *ngx_http_connection_t
>after ngx_connection_t->data is *ngx_http_v3_session_t

In C, a pointer to struct can be cast to a pointer to the first member
of that struct, as there is no padding before the first member per the
standard.

The first member of ngx_http_v3_session_t is *ngx_http_connection_t.

Here is the commit where this was implemented.

https://mailman.nginx.org/pipermail/nginx-devel/2023-September/BWH23FTMRUWCUZSNKXJJXEEN76ZYOK62.html

[...]
___
nginx mailing list
nginx@nginx.org
https://mailman.nginx.org/mailman/listinfo/nginx


ngx_http_v3_init_session function

2024-02-05 Thread Clima Gabriel
Hello everyone,

(the code is probably clearer and attached below)
This function modifies what ngx_connection_t->data points to.
ngx_connection_t->data is initially *ngx_http_connection_t.
The *ngx_http_connection_t is assigned to
ngx_http_v3_session_t->http_connection
And the *ngx_http_v3_session_t assigned to ngx_connection_t->data.

Result: before ngx_connection_t->data is *ngx_http_connection_t
   after ngx_connection_t->data is *ngx_http_v3_session_t

My question is: what is the proper way to find out what c->data is at any
given time? I need to know this because I'm writing a function which uses
the ngx_http_connection_t to obtain the hostname of the request, and it may
be invoked before or after the ngx_http_v3_init_session.

ngx_int_t
ngx_http_v3_init_session(ngx_connection_t *c)
{
ngx_pool_cleanup_t *cln;
ngx_http_connection_t  *hc;
ngx_http_v3_session_t  *h3c;

hc = c->data;

ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0, "http3 init session");

h3c = ngx_pcalloc(c->pool, sizeof(ngx_http_v3_session_t));
if (h3c == NULL) {
goto failed;
}

h3c->http_connection = hc;

ngx_queue_init(&h3c->blocked);

h3c->keepalive.log = c->log;
h3c->keepalive.data = c;
h3c->keepalive.handler = ngx_http_v3_keepalive_handler;

h3c->table.send_insert_count.log = c->log;
h3c->table.send_insert_count.data = c;
h3c->table.send_insert_count.handler =
ngx_http_v3_inc_insert_count_handler;

cln = ngx_pool_cleanup_add(c->pool, 0);
if (cln == NULL) {
goto failed;
}

cln->handler = ngx_http_v3_cleanup_session;
cln->data = h3c;

c->data = h3c;

return NGX_OK;

failed:

ngx_log_error(NGX_LOG_ERR, c->log, 0, "failed to create http3 session");
return NGX_ERROR;
}

Regards,
Gabriel
___
nginx mailing list
nginx@nginx.org
https://mailman.nginx.org/mailman/listinfo/nginx