Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: BugReport: ./configure --add-module неправильно подключает filter модуль
1)
>> Можно его использовать для чтения
ответа? >Да.
А где там данные?
Первый параметер "ngx_http_request_t* r" их
вроде не содержит,
далее "void* data" - это пользовательские данные из
ngx_http_post_subrequest_t:
struct ngx_http_post_subrequest_t
{ ngx_http_post_subrequest_pt
handler; void* data; };
которые присваиваются до вызова
ngx_http_subrequest.
2) Можно ли делать
так (при условии что in->buf->last_buf = 1):
static ngx_int_t ngx_http_my_body_filter (
ngx_http_request_t* r, ngx_chain_t* in ) {
ngx_buf_t* b;
........
b = ngx_calloc_buf
(r->pool); if (b == NULL) return
NGX_ERROR;
b->memory =
1; b->pos = (u_char*)"<!-- Served
by my module -->"; b->last =
b->pos + sizeof("<!-- Served by my module -->") - 1;
in->buf = b; //
Заменили буфер, что будет со старым буфером?
//
Будет ли освобожден старый буфер до след. запроса?
return ngx_http_next_body_filter
( r, in );
}
----- Original Message -----
Sent: Friday, June 08, 2007 11:55 PM
Subject: Re: BugReport: ./configure --add-module
неправильно подключает filter модуль
On Fri, Jun 08, 2007 at 11:40:21PM +0400, Denis Erygin wrote:
>
>Что значит - перехватить? > > Перехватить, значит прочитать
ответ и исключить его из вывода браузеру. > В каком месте он добавляется к
результирующему ответу браузеру?
В postpone фильтре. На самом деле, SSI +
вся инфраструктура subrequest по сложности сравнима со всем nginx'ом. Это не
самая удачная часть, с которой можно начинатиь писать под
nginx.
Прочитать и исключить ответ можно так, как сделано
в
<!--# include virtual="/remote/body.php?argument=value" set="one"
-->
> Например, если смотреть ngx_http_addition_filter_module.c ,
то там просто > вызываются ngx_http_subrequest, а затем в браузере
появляется их вывод, > хотя явных манипуляций с цепочками буферов
(ngx_chain_t) там нет... > > >Этот handler вызывается по
окончании подзапроса. > Можно его использовать для чтения
ответа?
Да.
> Насчет логики цепочек (ngx_chain_t): > Если
нужно заменить один из буферов на другой меньшего/большего размера, > то
как это правильно сделать в стиле nginx? Простая замена указателя на >
chain->buf->pos > может привести к утечке памяти.
Если буфер
указывает на другую память, то лучше его создать и
поставить укзатели.
Замена указателей к утечке не
приводит.
-- Игорь Сысоев http://sysoev.ru
|