| 338 char *ctlen = pblock_findkeyval(pb_key_content_length, rq->srvhdrs); |
338 char *ctlen = pblock_findkeyval(pb_key_content_length, rq->srvhdrs); |
| 339 char *enc = pblock_findkeyval(pb_key_transfer_encoding, rq->srvhdrs); |
339 char *enc = pblock_findkeyval(pb_key_transfer_encoding, rq->srvhdrs); |
| 340 if(ctlen && enc) { |
340 if(ctlen && enc) { |
| 341 pblock_removekey(pb_key_transfer_encoding, rq->srvhdrs); |
341 pblock_removekey(pb_key_transfer_encoding, rq->srvhdrs); |
| 342 } |
342 } |
| 343 if(!ctlen) { |
343 if(!ctlen && rq->status_num != 101) { |
| 344 // set transfer-encoding header |
344 // set transfer-encoding header |
| 345 if(!enc) { |
345 if(!enc) { |
| 346 pblock_kvinsert( |
346 pblock_kvinsert( |
| 347 pb_key_transfer_encoding, |
347 pb_key_transfer_encoding, |
| 348 "chunked", |
348 "chunked", |
| 368 // add connection header |
368 // add connection header |
| 369 if(rq->rq_attr.keep_alive) { |
369 if(rq->rq_attr.keep_alive) { |
| 370 cxBufferWrite("Connection: keep-alive\r\n", 1, 24, &writer->buf); |
370 cxBufferWrite("Connection: keep-alive\r\n", 1, 24, &writer->buf); |
| 371 pblock_kvinsert(pb_key_connection, "keep-alive", 10, rq->srvhdrs); |
371 pblock_kvinsert(pb_key_connection, "keep-alive", 10, rq->srvhdrs); |
| 372 } else { |
372 } else { |
| 373 cxBufferWrite("Connection: close\r\n", 1, 19, &writer->buf); |
373 if(!pblock_findkeyval(pb_key_connection, rq->srvhdrs)) { |
| 374 pblock_kvinsert(pb_key_connection, "close", 5, rq->srvhdrs); |
374 cxBufferWrite("Connection: close\r\n", 1, 19, &writer->buf); |
| |
375 pblock_kvinsert(pb_key_connection, "close", 5, rq->srvhdrs); |
| |
376 } |
| 375 } |
377 } |
| 376 |
378 |
| 377 // response header end |
379 // response header end |
| 378 cxBufferWrite("\r\n", 1, 2,& writer->buf); |
380 cxBufferWrite("\r\n", 1, 2,& writer->buf); |
| 379 |
381 |