<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=koi8-r">
<META content="MSHTML 6.00.2900.3086" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY>
<DIV><FONT face=Arial size=2>1)</FONT></DIV>
<DIV><FONT face=Arial size=2>&gt;&gt; Можно его использовать для чтения 
ответа?<BR>&gt;Да.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>А&nbsp;где там данные?</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>Первый параметер&nbsp;"ngx_http_request_t* r" их 
вроде не содержит,</FONT></DIV>
<DIV><FONT face=Arial size=2>далее "void* data" - это пользовательские данные из 
ngx_http_post_subrequest_t:</FONT></DIV>
<DIV><FONT face=Arial size=2>struct ngx_http_post_subrequest_t 
{<BR>&nbsp;&nbsp;&nbsp; ngx_http_post_subrequest_pt&nbsp; 
handler;<BR>&nbsp;&nbsp;&nbsp; void* data;<BR>};</FONT></DIV>
<DIV><FONT face=Arial size=2>которые присваиваются до вызова 
ngx_http_subrequest.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>2) </FONT><FONT face=Arial size=2>Можно ли делать 
так (при условии что in-&gt;buf-&gt;last_buf = 1):</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>static ngx_int_t ngx_http_my_body_filter ( 
ngx_http_request_t* r, ngx_chain_t* in )<BR>{</FONT></DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; 
ngx_buf_t*&nbsp;&nbsp;b;</FONT></DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; ........</FONT></DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; b = ngx_calloc_buf 
(r-&gt;pool);<BR>&nbsp;&nbsp;&nbsp; if (b == NULL) return 
NGX_ERROR;</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; b-&gt;memory = 
1;<BR>&nbsp;&nbsp;&nbsp; b-&gt;pos&nbsp;&nbsp;&nbsp; = (u_char*)"&lt;!-- Served 
by&nbsp;my module --&gt;";<BR>&nbsp;&nbsp;&nbsp; b-&gt;last&nbsp;&nbsp; = 
b-&gt;pos + sizeof("&lt;!-- Served by&nbsp;my module --&gt;") - 1;</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp;&nbsp;in-&gt;buf = b;&nbsp; // 
Заменили буфер, что будет со старым буфером? </FONT></DIV>
<DIV><FONT face=Arial 
size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 
Будет ли освобожден старый буфер до след. запроса?</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; return ngx_http_next_body_filter 
( r, in );</FONT></DIV>
<DIV><FONT face=Arial size=2>}</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>----- Original Message ----- </FONT>
<DIV><FONT face=Arial size=2>From: "Igor Sysoev" &lt;</FONT><A 
href="mailto:is@rambler-co.ru"><FONT face=Arial 
size=2>is@rambler-co.ru</FONT></A><FONT face=Arial size=2>&gt;</FONT></DIV>
<DIV><FONT face=Arial size=2>To: &lt;</FONT><A 
href="mailto:nginx-ru@sysoev.ru"><FONT face=Arial 
size=2>nginx-ru@sysoev.ru</FONT></A><FONT face=Arial size=2>&gt;</FONT></DIV>
<DIV><FONT face=Arial size=2>Sent: Friday, June 08, 2007 11:55 PM</FONT></DIV>
<DIV><FONT face=Arial size=2>Subject: Re: BugReport: ./configure --add-module 
неправильно подключает filter модуль</FONT></DIV></DIV>
<DIV><FONT face=Arial><BR><FONT size=2></FONT></FONT></DIV><FONT face=Arial 
size=2>On Fri, Jun 08, 2007 at 11:40:21PM +0400, Denis Erygin wrote:<BR><BR>&gt; 
&gt;Что значит - перехватить?<BR>&gt; <BR>&gt; Перехватить, значит прочитать 
ответ и исключить его из вывода браузеру.<BR>&gt; В каком месте он добавляется к 
результирующему ответу браузеру?<BR><BR>В postpone фильтре. На самом деле, SSI + 
вся инфраструктура subrequest по <BR>сложности сравнима со всем nginx'ом. Это не 
самая удачная часть,<BR>с которой можно начинатиь писать под 
nginx.<BR><BR>Прочитать и исключить ответ можно так, как сделано 
в<BR><BR>&lt;!--# include virtual="/remote/body.php?argument=value" set="one" 
--&gt;<BR><BR>&gt; Например, если смотреть ngx_http_addition_filter_module.c , 
то там просто<BR>&gt; вызываются ngx_http_subrequest, а затем в браузере 
появляется их вывод,<BR>&gt; хотя явных манипуляций с цепочками буферов 
(ngx_chain_t) там нет...<BR>&gt; <BR>&gt; &gt;Этот handler вызывается по 
окончании подзапроса.<BR>&gt; Можно его использовать для чтения 
ответа?<BR><BR>Да.<BR><BR>&gt; Насчет логики цепочек (ngx_chain_t):<BR>&gt; Если 
нужно заменить один из буферов на другой меньшего/большего размера,<BR>&gt; то 
как это правильно сделать в стиле nginx? Простая замена указателя на <BR>&gt; 
chain-&gt;buf-&gt;pos<BR>&gt; может привести к утечке памяти.<BR><BR>Если буфер 
указывает на другую память, то лучше его создать и 
поставить<BR>укзатели.<BR><BR>Замена указателей к утечке не 
приводит.<BR><BR><BR>-- <BR>Игорь Сысоев<BR></FONT><A 
href="http://sysoev.ru"><FONT face=Arial 
size=2>http://sysoev.ru</FONT></A><BR></BODY></HTML>