diff options
Diffstat (limited to 'src/libwaitress/waitress.c')
-rw-r--r-- | src/libwaitress/waitress.c | 33 |
1 files changed, 8 insertions, 25 deletions
diff --git a/src/libwaitress/waitress.c b/src/libwaitress/waitress.c index 1099252..8202a38 100644 --- a/src/libwaitress/waitress.c +++ b/src/libwaitress/waitress.c @@ -859,11 +859,11 @@ WaitressReturn_t WaitressFetchCall (WaitressHandle_t *waith) { bufFilled -= (thisLine-buf); } /* end while hdrParseMode */ - /* push remaining bytes */ - if (bufFilled > 0) { + recvSize = bufFilled; + do { /* data must be \0-terminated for chunked handler */ - buf[bufFilled] = '\0'; - switch (waith->request.dataHandler (waith, buf, bufFilled)) { + buf[recvSize] = '\0'; + switch (waith->request.dataHandler (waith, buf, recvSize)) { case WAITRESS_HANDLER_DONE: FINISH (WAITRESS_RET_OK); break; @@ -875,29 +875,12 @@ WaitressReturn_t WaitressFetchCall (WaitressHandle_t *waith) { case WAITRESS_HANDLER_ABORTED: FINISH (WAITRESS_RET_CB_ABORT); break; - } - } - - /* receive content */ - do { - READ_RET (buf, WAITRESS_BUFFER_SIZE-1, &recvSize); - buf[recvSize] = '\0'; - if (recvSize > 0) { - /* FIXME: Copy&waste */ - switch (waith->request.dataHandler (waith, buf, recvSize)) { - case WAITRESS_HANDLER_DONE: - FINISH (WAITRESS_RET_OK); - break; - - case WAITRESS_HANDLER_ERR: - FINISH (WAITRESS_RET_DECODING_ERR); - break; - case WAITRESS_HANDLER_ABORTED: - FINISH (WAITRESS_RET_CB_ABORT); - break; - } + case WAITRESS_HANDLER_CONTINUE: + /* go on */ + break; } + READ_RET (buf, WAITRESS_BUFFER_SIZE-1, &recvSize); } while (recvSize > 0); finish: |