-    if (APR_BRIGADE_SENTINEL(ctx->bb)) {
+    if (APR_BRIGADE_EMPTY(ctx->bb)) {
+        *len = 0;
+        return APR_EOF;
+    }
+
+    if (APR_BUCKET_IS_EOS(APR_BRIGADE_FIRST(ctx->bb)) ||
+        AP_BUCKET_IS_EOR(APR_BRIGADE_FIRST(ctx->bb))) {
         *len = 0;
         return APR_EOF;

Why do we not put this in one if block like?

if (APR_BRIGADE_SENTINEL(ctx->bb) ||
    APR_BUCKET_IS_EOS(APR_BRIGADE_FIRST(ctx->bb)) ||
    AP_BUCKET_IS_EOR(APR_BRIGADE_FIRST(ctx->bb))) {
    *len = 0;
    return APR_EOF;
}

@@ -567,8 +567,21 @@
         return APR_SUCCESS;
     }
 
-    if (mode == AP_MODE_EATCRLF || mode == AP_MODE_EXHAUSTIVE ||
-        mode == AP_MODE_SPECULATIVE) {
+    if (mode == AP_MODE_SPECULATIVE) {
+        const char *data;
+        apr_size_t len;
+        apr_bucket *b;
+        serf_bucket_t *sb;
+
+        ctx->serf_bucket_status = serf_bucket_read(ctx->serf_in_bucket,
+                                                   readbytes, &data, &len);
+        
+        sb = serf_bucket_simple_create(data, len, NULL, NULL, 
ctx->serf_bkt_alloc);
+        serf_bucket_aggregate_prepend(ctx->serf_in_bucket, sb);

Hm. Don't we need the following lines here?

        b = apr_bucket_transient_create(data, len, f->c->bucket_alloc);
        APR_BRIGADE_INSERT_TAIL(bb, b);

Otherwise I guess we read the data but do not return it :-).


+        return APR_SUCCESS;
+    }
+    
+    if (mode == AP_MODE_EATCRLF || mode == AP_MODE_EXHAUSTIVE) {
         abort();
     }
 }

Regards

Rüdiger

Reply via email to