Author: rhuijben
Date: Wed Nov 18 11:09:39 2015
New Revision: 1714969
URL: http://svn.apache.org/viewvc?rev=1714969&view=rev
Log:
Introduce a specific error code for unframing buckets to tell that there are
no more frames, to allow differentiating between no more frames at EOF and
a truncated frame header.
* buckets/fcgi_buckets.c
(serf__bucket_fcgi_unframe_read_info): Handle no-frame properly.
* buckets/http2_frame_buckets.c
(serf__bucket_http2_unframe_read_info): Handle no-frame properly.
* context.c
(serf_error_string): Add error message.
* serf.h
(SERF_ERROR_EMPTY_STREAM): Define.
Modified:
serf/trunk/buckets/fcgi_buckets.c
serf/trunk/buckets/http2_frame_buckets.c
serf/trunk/context.c
serf/trunk/serf.h
Modified: serf/trunk/buckets/fcgi_buckets.c
URL:
http://svn.apache.org/viewvc/serf/trunk/buckets/fcgi_buckets.c?rev=1714969&r1=1714968&r2=1714969&view=diff
==============================================================================
--- serf/trunk/buckets/fcgi_buckets.c (original)
+++ serf/trunk/buckets/fcgi_buckets.c Wed Nov 18 11:09:39 2015
@@ -144,7 +144,10 @@ apr_status_t serf__bucket_fcgi_unframe_r
{
/* Reading frame failed because we couldn't read the header. Report
a read failure instead of semi-success */
- status = SERF_ERROR_TRUNCATED_STREAM;
+ if (ctx->record_remaining == FCGI_RECORD_SIZE)
+ status = SERF_ERROR_EMPTY_STREAM;
+ else
+ status = SERF_ERROR_TRUNCATED_STREAM;
}
else if (!status)
status = APR_EAGAIN;
Modified: serf/trunk/buckets/http2_frame_buckets.c
URL:
http://svn.apache.org/viewvc/serf/trunk/buckets/http2_frame_buckets.c?rev=1714969&r1=1714968&r2=1714969&view=diff
==============================================================================
--- serf/trunk/buckets/http2_frame_buckets.c (original)
+++ serf/trunk/buckets/http2_frame_buckets.c Wed Nov 18 11:09:39 2015
@@ -180,7 +180,10 @@ serf__bucket_http2_unframe_read_info(ser
else if (APR_STATUS_IS_EOF(status)) {
/* Reading frame failed because we couldn't read the header. Report
a read failure instead of semi-success */
- status = SERF_ERROR_HTTP2_FRAME_SIZE_ERROR;
+ if (ctx->prefix_remaining == FRAME_PREFIX_SIZE)
+ status = SERF_ERROR_EMPTY_STREAM;
+ else
+ status = SERF_ERROR_HTTP2_FRAME_SIZE_ERROR;
}
else if (!status)
status = APR_EAGAIN;
Modified: serf/trunk/context.c
URL:
http://svn.apache.org/viewvc/serf/trunk/context.c?rev=1714969&r1=1714968&r2=1714969&view=diff
==============================================================================
--- serf/trunk/context.c (original)
+++ serf/trunk/context.c Wed Nov 18 11:09:39 2015
@@ -408,6 +408,9 @@ const char *serf_error_string(apr_status
return "The connection timed out";
case SERF_ERROR_TRUNCATED_STREAM:
return "The stream returned less data than was expected";
+ case SERF_ERROR_EMPTY_STREAM:
+ return "The stream is empty";
+
case SERF_ERROR_SSL_COMM_FAILED:
return "An error occurred during SSL communication";
case SERF_ERROR_SSL_SETUP_FAILED:
Modified: serf/trunk/serf.h
URL:
http://svn.apache.org/viewvc/serf/trunk/serf.h?rev=1714969&r1=1714968&r2=1714969&view=diff
==============================================================================
--- serf/trunk/serf.h (original)
+++ serf/trunk/serf.h Wed Nov 18 11:09:39 2015
@@ -109,6 +109,8 @@ typedef struct serf_config_t serf_config
#define SERF_ERROR_CONNECTION_TIMEDOUT (SERF_ERROR_START + 12)
/* The stream returned less data than was expected */
#define SERF_ERROR_TRUNCATED_STREAM (SERF_ERROR_START + 13)
+/* The stream is empty */
+#define SERF_ERROR_EMPTY_STREAM (SERF_ERROR_START + 14)
/* Http-2 stream errors, mapped into our error range */
#define SERF_ERROR_HTTP2_NO_ERROR (SERF_ERROR_START + 50)