Maxim Dounin
March 25, 2014 02:38PM
Hello!

On Tue, Mar 25, 2014 at 02:16:29PM -0400, alexserbul wrote:

> Добрый вечер!
>
> Пишу фильтр. Создал буфер (ngx_buf_t), выделив память из аллокатора
> (ngx_pcalloc), установил:
> b->start
> b->pos
> b->last
> b->end
>
> Остальные свойства буфера - нулевые, не трогал.
>
> Пытаюсь заменить приходящий в фильтр в цепочке ngx_chain_t буфер - своим
> буфером. Зависает.

Базовое правило при работе с цепочками буфров: чужую цепочку
(всмысле, структуры ngx_chain_t) трогать нельзя, если нужно что-то
поменять - следует создать свою цепочку (и подцепить к ней нужные
буфера).

Ну и как минимум у буфра должен стоять флаг, определяющий, где
именно располагаются его данные. Если буфер с данными в памяти -
то b->temporary или b->memory, если в файле - то b->file.

> Получилось только в приходящем в цепочке в фильтр буфере установить pos и
> last на выделенную в моем буфере в аллокаторе память, что я понимаю не очень
> красивое решение.

Да, так делать неправильно.

> Таким образом, просто заменить приходящий в фильтр буфер своим - не
> получилось никак.
>
> У структуры буфера (ngx_buf_t) - 21 свойства. Видимо не все буферы можно
> заменять, менять (напр. с свойством "memory"). Где почитать как их учитывать
> в фильтре? Спасибо.

Use The Source, Luke!

Некоторые вещи, впрочем, описаны у Evan'а Miller'а, ссылки есть тут:

http://nginx.org/en/links.html

--
Maxim Dounin
http://nginx.org/

_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

Буфер в фильтре - как подставить свой?

alexserbul March 25, 2014 02:16PM

Re: Буфер в фильтре - как подставить свой?

Maxim Dounin March 25, 2014 02:38PM

Re: Буфер в фильтре - как подставить свой?

alexserbul March 25, 2014 03:57PM

Re: Буфер в фильтре - как подставить свой?

Maxim Dounin March 26, 2014 06:54AM

Re: Буфер в фильтре - как подставить свой?

alexserbul March 26, 2014 03:56PM

Re: Буфер в фильтре - как подставить свой?

Maxim Dounin March 26, 2014 04:22PM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 311
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready