ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
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 -----
From: "Igor Sysoev" <is@xxxxxxxxxxxxx>
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


 




Copyright © Lexa Software, 1996-2009.