+ ServerRc = read_serv_chunk(
+ Buf,
+ total_len,
+ &bytes_read);
+
+ if (ServerRc != 6)
+ {
+ FreeStrBuf(&Buf);
+ return;
+ }
+ CT = GuessMimeType(SKEY(WCC->WBuf));
+ FlushStrBuf(WCC->WBuf);
+ StrBufPlain(MimeType, CT, -1);
+ detect_mime = 0;
+ FreeStrBuf(&Buf);
+ }
+
+ if (!detect_mime)
+ {
+ http_transmit_headers(ChrPtr(MimeType), is_static, chunked);
+
+ if (send_http(WCC->HBuf) < 0)
+ {
+ FreeStrBuf(&Buf);
+ return;
+ }
+ }
+
+ while ((bytes_read < total_len) &&
+ (ServerRc == 6) &&
+ (client_con_state == 0))
+ {
+
+ if (WCC->serv_sock==-1) {
+ FlushStrBuf(WCC->WBuf);
+ FreeStrBuf(&Buf);
+ return;
+ }
+
+ ServerRc = read_serv_chunk(
+ Buf,
+ total_len,
+ &bytes_read);
+ if (ServerRc != 6)
+ break;
+
+ if (detect_mime)
+ {
+ const char *CT;
+ detect_mime = 0;
+
+ CT = GuessMimeType(SKEY(WCC->WBuf));
+ StrBufPlain(MimeType, CT, -1);
+ http_transmit_headers(ChrPtr(MimeType), is_static, chunked);
+
+ client_con_state = send_http(WCC->HBuf);
+ }
+
+ if ((chunked) && (client_con_state == 0))
+ {
+ StrBufPrintf(BufHeader, "%s%x\r\n",
+ (first)?"":"\r\n",
+ StrLength (WCC->WBuf));
+ first = 0;
+ client_con_state = send_http(BufHeader);
+ }
+
+ if (client_con_state == 0)
+ client_con_state = send_http(WCC->WBuf);
+
+ FlushStrBuf(WCC->WBuf);
+ }
+
+ if ((chunked) && (client_con_state == 0))
+ {
+ StrBufPlain(BufHeader, HKEY("\r\n0\r\n\r\n"));
+ if (send_http(BufHeader) < 0)
+ {
+ FreeStrBuf(&Buf);
+ return;
+ }
+ }
+ FreeStrBuf(&Buf);
+}