ПРОЕКТЫ 


  АРХИВ 


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: Re[2]: upstream


  • To: nginx-ru@xxxxxxxxx
  • Subject: Re: Re[2]: upstream
  • From: "Alexander Dolgarev" <a.dolgarev@xxxxxxxxx>
  • Date: Tue, 22 Apr 2008 23:44:18 +0300
  • Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from:to:subject:in-reply-to:mime-version:content-type:references; bh=9gMwdazS4pZaDhxNnDB9UhR+qekTDVinjHXv1vYr6Zk=; b=drEb1zLdmipOOaZgtWqRe1TrYuAoubUuEqf0qlGSiMHldCdeUWgc34zKJd8fIec65xIC7dcydC7LcsQKdcfwzik1rBQa46vYsfRT79g67lXNqTLErbg3xMsNhqZMLgnGDu/c8xNXikoaKmw42zvxp7ma32udxl7MR/+6quD7Kp8=
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:in-reply-to:mime-version:content-type:references; b=KY8QOj/ozvPYuu3eIDldYbAZbZz/2IjSFrkhsosrt7FYbMBbyYRpKb2xM1vsVvZ5Jpoo+KeqbnKZ+DuFiNjjU0pGA10LazOyN3YzbUhTdl2lMb8Z+0X51pLui/A4bA2knrwPkhb14Eqi+lGgcqxA6N1x8Q81drHnBpq5+o2wm9U=
  • In-reply-to: <E1JnuG5-000FyV-00.linux-kernel-mail-ru@xxxxxxxxxxx>
  • References: <20080421140029.70d31267@bugaga> <E1JnuG5-000FyV-00.linux-kernel-mail-ru@xxxxxxxxxxx>

У меня была схожая проблема пока для входной цепочки для каждого буфера не выставлял
cl->buf->pos = cl->buf->last = NULL;

2008/4/21 anon <linux-kernel@xxxxxxx>:
вот мой body_filter_module
...
b = ngx_pcalloc(r->pool, sizeof(ngx_buf_t));
       for(cl = in ; cl ; )
       {
               size = cl->buf->last - cl->buf->pos;
               el = ngx_array_push_n(r->news, size);
               memcpy(el, cl->buf->pos, size);//я копирую себе содержимое тело ответа
               //cl->buf->pos = cl->buf->last;если не делать эти строчки ответ от бекенда перестает ситаться
               //cl->buf->last = cl->buf->start;
               if (cl->buf->last_buf)
               {
                       *((char *)ngx_array_push(r->news)) = '\0';
                       //printf("news=%s\nend\n", (char *)r->news->elts);
//а тут я хочу создвть свою цепочку полжить в нее буфер и обработанные данные и выдать клиенту
//как правильно вызвать следующий фильтр с моей цепочкой
                       //return ngx_http_next_body_filter(r, in);
               }
               cl = cl->next;
       }
как правильно обновить цепочки чтобы от апстрима, чтобы продолжали приходит данные и я их накапливал у себя в памяти чтобы потом отправить после некоторой модификации
конкретно затык происходит в ngx_http_upstream.c:3553 в ngx_chain_update_chains что то с цепочками не так обрабатывается,
если я из своего фильтр модуля не вызываю ngx_http_next_body_filter(r, in), то при обновлениии цепочек получаю free - NULL busy - not NULL out - NULL
а должно быть(когда сразу из модуля вызываю http_next_body_filter(r, in)
free - not NULL busy - not NULL out - NULL
какой код нада возвращать из моего фильтра, если я не отправляю цепочки следующему фильтру а просто у себя данные собираю.

Подскажите, куда копатью
Спасибо.

-----Original Message-----
From: Sergey Bochenkov <bachan@xxxxxxxxx>
To: nginx-ru@xxxxxxxxx
Date: Mon, 21 Apr 2008 14:00:29 +0400
Subject: Re: upstream

>
> А в чем проблема? Как пробовали?
> В рассылке по main_filter_need_in_memory и NGX_AGAIN искали?
>
> Архив рассылки есть на gmane.org.
>
> > как организовать такую штуку: получать ответ от апстрима - сохранить его весь в памяти обработать и потом послать пользователю.
> > Пробую серез фильтр модуль - не могу разобраться как цепочки обрабатывать а потом отослать все
> > Подскажите
> >
> >
> >
>
>
>




 




Copyright © Lexa Software, 1996-2009.