From da256f9821b31260b7ec2a32eb36778a2ea0a57e Mon Sep 17 00:00:00 2001 From: Wilfried Goesgens Date: Tue, 20 Jan 2015 22:11:12 +0100 Subject: [PATCH] Its the job of the stream lib to suppress chunks just consisting of the gzip header. --- libcitadel/lib/stringbuf.c | 13 +++++++++---- webcit/tcp_sockets.c | 7 ------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/libcitadel/lib/stringbuf.c b/libcitadel/lib/stringbuf.c index 5cbe17fdb..97260c42f 100644 --- a/libcitadel/lib/stringbuf.c +++ b/libcitadel/lib/stringbuf.c @@ -3025,7 +3025,7 @@ int StrBufStreamTranscode(eStreamType type, IOBuffer *Target, IOBuffer *In, cons case eZLibEncode: { z_enc_stream *stream = (z_enc_stream *)vStream; - int org_outbuf_len = stream->zstream.total_out; + int org_outbuf_len = stream->OutBuf.BufUsed; int err; unsigned int chunkavail; @@ -3047,9 +3047,14 @@ int StrBufStreamTranscode(eStreamType type, IOBuffer *Target, IOBuffer *In, cons err = deflate(&stream->zstream, (LastChunk) ? Z_FINISH : Z_NO_FLUSH); stream->OutBuf.BufUsed += (chunkavail - stream->zstream.avail_out); - /// todo + org_outbuf_len; - if (Target) SwapBuffers(Target->Buf, &stream->OutBuf); + if (Target && + (LastChunk || + (stream->OutBuf.BufUsed != org_outbuf_len) + )) + { + SwapBuffers(Target->Buf, &stream->OutBuf); + } if (stream->zstream.avail_in == 0) { @@ -3075,7 +3080,7 @@ int StrBufStreamTranscode(eStreamType type, IOBuffer *Target, IOBuffer *In, cons } } return (LastChunk && (err != Z_FINISH)); - + } break; case eZLibDecode: { diff --git a/webcit/tcp_sockets.c b/webcit/tcp_sockets.c index 19fb7a258..33889f665 100644 --- a/webcit/tcp_sockets.c +++ b/webcit/tcp_sockets.c @@ -556,7 +556,6 @@ void serv_read_binary_to_http(StrBuf *MimeType, size_t total_len, int is_static, int client_con_state = 0; int chunked = 0; int is_gzip = 0; - int is_gzip_header = 1; StrBuf *BufHeader = NULL; StrBuf *Buf; StrBuf *pBuf = NULL; @@ -624,7 +623,6 @@ void serv_read_binary_to_http(StrBuf *MimeType, size_t total_len, int is_static, } else { - is_gzip_header = 0; pBuf = WCC->WBuf; } @@ -689,11 +687,6 @@ void serv_read_binary_to_http(StrBuf *MimeType, size_t total_len, int is_static, rc = StrBufStreamTranscode(eZLibEncode, &WriteBuffer, &ReadBuffer, NULL, -1, SC, done); if (StrLength (pBuf) > 0) { - if (!done && is_gzip_header && (StrLength(pBuf) == 10)) { - /* we don't want to send the gzip header as single package... */ - break; - } - is_gzip_header = 0; StrBufPrintf(BufHeader, "%s%x\r\n", (first)?"":"\r\n", StrLength (pBuf)); -- 2.30.2