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 [email protected] http://mailman.nginx.org/mailman/listinfo/nginx-ru
