У меня была схожая проблема пока для входной цепочки для каждого буфера не выставлял<br>cl->buf->pos = cl->buf->last = NULL;<br><br><div class="gmail_quote">2008/4/21 anon <<a href="mailto:linux-kernel@mail.ru">linux-kernel@mail.ru</a>>:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">вот мой body_filter_module<br>
...<br>
b = ngx_pcalloc(r->pool, sizeof(ngx_buf_t));<br>
for(cl = in ; cl ; )<br>
{<br>
size = cl->buf->last - cl->buf->pos;<br>
el = ngx_array_push_n(r->news, size);<br>
memcpy(el, cl->buf->pos, size);//я копирую себе содержимое тело ответа<br>
//cl->buf->pos = cl->buf->last;если не делать эти строчки ответ от бекенда перестает ситаться<br>
//cl->buf->last = cl->buf->start;<br>
if (cl->buf->last_buf)<br>
{<br>
*((char *)ngx_array_push(r->news)) = '\0';<br>
//printf("news=%s\nend\n", (char *)r->news->elts);<br>
//а тут я хочу создвть свою цепочку полжить в нее буфер и обработанные данные и выдать клиенту<br>
//как правильно вызвать следующий фильтр с моей цепочкой<br>
//return ngx_http_next_body_filter(r, in);<br>
}<br>
cl = cl->next;<br>
}<br>
как правильно обновить цепочки чтобы от апстрима, чтобы продолжали приходит данные и я их накапливал у себя в памяти чтобы потом отправить после некоторой модификации<br>
конкретно затык происходит в ngx_http_upstream.c:3553 в ngx_chain_update_chains что то с цепочками не так обрабатывается,<br>
если я из своего фильтр модуля не вызываю ngx_http_next_body_filter(r, in), то при обновлениии цепочек получаю free - NULL busy - not NULL out - NULL<br>
а должно быть(когда сразу из модуля вызываю http_next_body_filter(r, in)<br>
free - not NULL busy - not NULL out - NULL<br>
какой код нада возвращать из моего фильтра, если я не отправляю цепочки следующему фильтру а просто у себя данные собираю.<br>
<br>
Подскажите, куда копатью<br>
Спасибо.<br>
<div><div></div><div class="Wj3C7c"><br>
-----Original Message-----<br>
From: Sergey Bochenkov <<a href="mailto:bachan@j3qq4.org">bachan@j3qq4.org</a>><br>
To: <a href="mailto:nginx-ru@sysoev.ru">nginx-ru@sysoev.ru</a><br>
Date: Mon, 21 Apr 2008 14:00:29 +0400<br>
Subject: Re: upstream<br>
<br>
><br>
> А в чем проблема? Как пробовали?<br>
> В рассылке по main_filter_need_in_memory и NGX_AGAIN искали?<br>
><br>
> Архив рассылки есть на <a href="http://gmane.org" target="_blank">gmane.org</a>.<br>
><br>
> > как организовать такую штуку: получать ответ от апстрима - сохранить его весь в памяти обработать и потом послать пользователю.<br>
> > Пробую серез фильтр модуль - не могу разобраться как цепочки обрабатывать а потом отослать все<br>
> > Подскажите<br>
> ><br>
> ><br>
> ><br>
><br>
><br>
><br>
<br>
</div></div></blockquote></div><br>