Author: rhuijben
Date: Thu Nov 26 14:37:58 2015
New Revision: 1716701
URL: http://svn.apache.org/viewvc?rev=1716701&view=rev
Log:
Make the response bucket properly read trailers even when the caller uses
other read methods than the normal read: the iovec and readline versions
both suffered from this problem.
* buckets/response_buckets.c
(serf_response_readline,
serf_response_read_iovec): Implement trailer support in the same
way the normal read supports this.
Modified:
serf/trunk/buckets/response_buckets.c
Modified: serf/trunk/buckets/response_buckets.c
URL:
http://svn.apache.org/viewvc/serf/trunk/buckets/response_buckets.c?rev=1716701&r1=1716700&r2=1716701&view=diff
==============================================================================
--- serf/trunk/buckets/response_buckets.c (original)
+++ serf/trunk/buckets/response_buckets.c Thu Nov 26 14:37:58 2015
@@ -634,12 +634,20 @@ static apr_status_t serf_response_readli
/* Delegate to the stream bucket to do the readline. */
status = serf_bucket_readline(ctx->body, acceptable, found, data, len);
+ if (APR_STATUS_IS_EOF(status)) {
+ if (ctx->chunked) {
+ ctx->state = STATE_TRAILERS;
+ /* Mask the result. */
+ status = APR_SUCCESS;
+ }
+ else {
+ ctx->state = STATE_DONE;
+ }
+ }
+
fake_eof:
- if (APR_STATUS_IS_EOF(status) && ctx->error_on_eof) {
- *len = 0;
- *found = SERF_NEWLINE_NONE;
+ if (APR_STATUS_IS_EOF(status) && ctx->error_on_eof)
return ctx->error_on_eof;
- }
return status;
}
@@ -662,6 +670,17 @@ static apr_status_t serf_response_read_i
status = serf_bucket_read_iovec(ctx->body, requested, vecs_size,
vecs, vecs_used);
+ if (APR_STATUS_IS_EOF(status)) {
+ if (ctx->chunked) {
+ ctx->state = STATE_TRAILERS;
+ /* Mask the result. */
+ status = APR_SUCCESS;
+ }
+ else {
+ ctx->state = STATE_DONE;
+ }
+ }
+
fake_eof:
if (APR_STATUS_IS_EOF(status) && ctx->error_on_eof)
return ctx->error_on_eof;