ПРОЕКТЫ 


  АРХИВ 


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: Буфер в фильтре - как подставить свой?



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@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.