In <Pine.SOL2.3.96.SK.990404171645.19869A-100000@sun.med.ru> Oleg Broytmann (phd@sun.med.ru) wrote:
OB> Здравствуйте.
OB> On Sat, 3 Apr 1999, Khimenko Victor wrote:
>> С mod_fastcgi была следующая проблема: результат работы СИЛЬНО низкоуровневых
>> функций типа ap_bwrite не перекодируется. Это нужно делать "руками" (проще всего
>> через вызов функции ra_data_server2client) перед вызовом bwrite ...
OB> Ага, действительно, есть bwrite, я его окружил ifdef, вставил
OB> server2client, вроде, все заработало (ну, я не очень тестировал - несколько
OB> CGI проверил на юниксовых и форточных браузерах).
Это ты, Сова, плохо придумала. Там одним server2client не обойдешься...
OB> Надо ли перекодировать заголовки, отправляемые ap_send_http_header? Если
OB> надо, то чем?
Нет. Вернее -- уже поздно. ap_send_http_header выдает накопленные заголовки
"по списку". Перекодировать нужно при помощении в этот список. AFAIK -- Alex
должен знать лучше...
OB> Как я понял, server2client аллоцирует память под newbuf. Надо ли ее
OB> освобождать? каким вызовом?
Ничего он не "аллоцирует". Он использует один заранее распределенный заранее
буфер (один на request). И посему этот буфер может и переполнится, однако...
Вот кусок из правок http_protocol.c:
#ifdef RUSSIAN_APACHE
unsigned char *newbuf,*p;
int newlen=0;
if (ra_charset_active(r))
{
ra_data_server2client(r,(char*)mm+offset,n,&newbuf,&newlen);
p=newbuf;
while(newlen > 0)
{
w = ap_bwrite(r->connection->client, p, newlen);
if(w<=0) goto RECODE_DONE;
newlen-=w;
p+=w;
}
w=n;
}
else
w = ap_bwrite(r->connection->client, (char *) mm + offset, n);
RECODE_DONE:;
#else
w = ap_bwrite(r->connection->client, (char *) mm + offset, n);
#endif
Понятно, что все это -- взамен одной строки ...
"Russian Apache" includes software developed
by the Apache Group for use in the Apache HTTP server project
(http://www.apache.org/) See
Apache LICENSE.
Copyright (C) 1995-2001 The Apache Group. All rights reserved.
Copyright (C) 1996 Dm. Kryukov; Copyright (C)
1997-2009 Alex Tutubalin. Design (C) 1998 Max Smolev.