fielding 97/07/14 01:50:28
Modified: src CHANGES http_protocol.c Log: A very large one-line change. If finalize_request_protocol were to be mistakenly called twice, it would send two chunked terminators. To prevent that, we just needed to clear r->chunked at the same time we clear the B_CHUNK flag. Also added comments to explain the function. Revision Changes Path 1.334 +10 -7 apache/src/CHANGES Index: CHANGES =================================================================== RCS file: /export/home/cvs/apache/src/CHANGES,v retrieving revision 1.333 retrieving revision 1.334 diff -C3 -r1.333 -r1.334 *** CHANGES 1997/07/13 19:01:06 1.333 --- CHANGES 1997/07/14 08:50:25 1.334 *************** *** 1,11 **** Changes with Apache 1.3 ! *) Make modules DLLs, dynamically loaded, using LoadModule/LoadFile ! on Win32. ! Note that module DLLs must be compiled with the multithreaded DLL ! version of the runtime library. [Alexei Kosut and Ben Laurie] ! ! *) Sequent port re-added and SONY NEWS-OS port included. *) Automatic indexing removed from mod_dir and placed into mod_autoindex. This allows the admin to completely remove automatic indexing --- 1,9 ---- Changes with Apache 1.3 ! *) On Win32, modules can now be dynamically loaded DLLs using the ! LoadModule/LoadFile directives. Note that module DLLs must be ! compiled with the multithreaded DLL version of the runtime library. ! [Alexei Kosut and Ben Laurie] *) Automatic indexing removed from mod_dir and placed into mod_autoindex. This allows the admin to completely remove automatic indexing *************** *** 97,102 **** --- 95,103 ---- *) API: A new handler response DONE which informs apache that the request has been handled and it can finish off quickly, similar to how it handles errors. [Rob Hartill] + + *) Turn off chunked encoding after sending terminating chunk/footer + so that we can't do it twice by accident. [Roy Fielding] *) mod_expire also issues Cache-Control: max-age headers. [Rob Hartill] *************** *** 111,117 **** When used together, these cause mod_dir to emit HEIGHT and WIDTH attributes in the FancyIndexing IMG tags. [Ken Coar] ! *) PORT: Added NT support [Ben Laurie and Ambarish Malpani <[EMAIL PROTECTED]>] Changes with Apache 1.2.1 --- 112,120 ---- When used together, these cause mod_dir to emit HEIGHT and WIDTH attributes in the FancyIndexing IMG tags. [Ken Coar] ! *) PORT: Sequent and SONY NEWS-OS support added. ! ! *) PORT: Added Windows NT support [Ben Laurie and Ambarish Malpani <[EMAIL PROTECTED]>] Changes with Apache 1.2.1 1.135 +14 -6 apache/src/http_protocol.c Index: http_protocol.c =================================================================== RCS file: /export/home/cvs/apache/src/http_protocol.c,v retrieving revision 1.134 retrieving revision 1.135 diff -C3 -r1.134 -r1.135 *** http_protocol.c 1997/07/13 19:01:12 1.134 --- http_protocol.c 1997/07/14 08:50:26 1.135 *************** *** 1250,1265 **** if (r->chunked) bsetflag(r->connection->client, B_CHUNK, 1); } void finalize_request_protocol (request_rec *r) { - /* Turn off chunked encoding */ - if (r->chunked && !r->connection->aborted) { ! soft_timeout("send ending chunk", r); bsetflag(r->connection->client, B_CHUNK, 0); ! bputs("0\015\012", r->connection->client); ! /* If we had footer "headers", we'd send them now */ ! bputs("\015\012", r->connection->client); kill_timeout(r); } } --- 1250,1273 ---- if (r->chunked) bsetflag(r->connection->client, B_CHUNK, 1); } + /* finalize_request_protocol must be called by a module after it sends + * a response body. It's sole purpose is to send the terminating + * protocol information for any wrappers around the response message body + * (i.e., transfer encodings). It should have been named finalize_response. + */ void finalize_request_protocol (request_rec *r) { if (r->chunked && !r->connection->aborted) { ! /* ! * Turn off chunked encoding --- we can only do this once. ! */ ! r->chunked = 0; bsetflag(r->connection->client, B_CHUNK, 0); ! ! soft_timeout("send ending chunk", r); ! bputs("0\015\012", r->connection->client); ! /* If we had footer "headers", we'd send them now */ ! bputs("\015\012", r->connection->client); kill_timeout(r); } }