Author: rhuijben
Date: Thu Nov 12 20:14:23 2015
New Revision: 1714110

URL: http://svn.apache.org/viewvc?rev=1714110&view=rev
Log:
Simplify the hpack bucket a bit, now that it doesn't need a buffering
layer to support readline properly.

* buckets/hpack_buckets.c
  (serf_hpack_decode_ctx_t): Remove databuffer.
  (hpack_decode_databuf_reader): Remove prototype.
  (serf__bucket_hpack_decode_create): Update init.
  (hpack_decode_databuf_reader): Remove function.
  (serf_hpack_decode_read,
   serf_hpack_decode_readline
   serf_hpack_decode_peek): Just forward to aggregate.
  (serf_hpack_decode_readline): Remove function.
  (serf_bucket_type__hpack_decode): Use standard readline.

Modified:
    serf/trunk/buckets/hpack_buckets.c

Modified: serf/trunk/buckets/hpack_buckets.c
URL: 
http://svn.apache.org/viewvc/serf/trunk/buckets/hpack_buckets.c?rev=1714110&r1=1714109&r2=1714110&view=diff
==============================================================================
--- serf/trunk/buckets/hpack_buckets.c (original)
+++ serf/trunk/buckets/hpack_buckets.c Thu Nov 12 20:14:23 2015
@@ -1086,20 +1086,12 @@ typedef struct serf_hpack_decode_ctx_t
   
   /* When producing HTTP/1.1 style output */
   serf_bucket_t *agg;
-  serf_databuf_t databuf;
   serf_config_t *config;
 
   char wrote_header;
   char hit_eof;
 } serf_hpack_decode_ctx_t;
 
-/* Forward definition */
-static apr_status_t
-hpack_decode_databuf_reader(void *baton,
-                            apr_size_t bufsize,
-                            char *buf,
-                            apr_size_t *len);
-
 serf_bucket_t *
 serf__bucket_hpack_decode_create(serf_bucket_t *stream,
                                  apr_status_t (*item_callback)(
@@ -1142,10 +1134,6 @@ serf__bucket_hpack_decode_create(serf_bu
       ctx->item_callback = NULL;
       ctx->item_baton = NULL;
       ctx->agg = serf_bucket_aggregate_create(alloc);
-
-      serf_databuf_init(&ctx->databuf);
-      ctx->databuf.read = hpack_decode_databuf_reader;
-      ctx->databuf.read_baton = ctx;
     }
 
   /* Prepare TBL for decoding */
@@ -1779,30 +1767,6 @@ hpack_process(serf_bucket_t *bucket)
 }
 
 static apr_status_t
-hpack_decode_databuf_reader(void *baton,
-                            apr_size_t bufsize,
-                            char *buf,
-                            apr_size_t *len)
-{
-  serf_hpack_decode_ctx_t *ctx = baton;
-  apr_status_t status;
-  const char *data;
-
-  status = serf_bucket_read(ctx->agg, bufsize, &data, len);
-
-  if (SERF_BUCKET_READ_ERROR(status))
-    return status;
-
-  if (*len)
-    memcpy(buf, data, *len);
-
-  if (APR_STATUS_IS_EOF(status) && ctx->hit_eof)
-    return APR_EOF;
-  else
-    return status;
-}
-
-static apr_status_t
 serf_hpack_decode_read(serf_bucket_t *bucket,
                        apr_size_t requested,
                        const char **data,
@@ -1812,45 +1776,13 @@ serf_hpack_decode_read(serf_bucket_t *bu
   apr_status_t status;
 
   status = hpack_process(bucket);
-  if (SERF_BUCKET_READ_ERROR(status))
-    {
-      *len = 0;
-      return status;
-    }
-
-  if (ctx->agg)
-    status = serf_databuf_read(&ctx->databuf,
-                               requested, data, len);
-  else
-    *len = 0;
-
-  return status;
-}
-
-static apr_status_t
-serf_hpack_decode_readline(serf_bucket_t *bucket,
-                           int acceptable,
-                           int *found,
-                           const char **data,
-                           apr_size_t *len)
-{
-  serf_hpack_decode_ctx_t *ctx = bucket->data;
-  apr_status_t status;
-
-  status = hpack_process(bucket);
-  if (SERF_BUCKET_READ_ERROR(status))
+  if (SERF_BUCKET_READ_ERROR(status) || !ctx->agg)
     {
       *len = 0;
       return status;
     }
 
-  if (ctx->agg)
-    status = serf_databuf_readline(&ctx->databuf, acceptable,
-                                   found, data, len);
-  else
-    *len = 0;
-
-  return status;
+  return serf_bucket_read(ctx->agg, requested, data, len);
 }
 
 static apr_status_t
@@ -1862,16 +1794,13 @@ serf_hpack_decode_peek(serf_bucket_t *bu
   apr_status_t status;
 
   status = hpack_process(bucket);
-  if (SERF_BUCKET_READ_ERROR(status))
+  if (SERF_BUCKET_READ_ERROR(status) || !ctx->agg)
     {
       *len = 0;
       return status;
     }
 
-  if (ctx->agg)
-    status = serf_databuf_peek(&ctx->databuf, data, len);
-
-  return status;
+  return serf_bucket_peek(ctx->agg, data, len);
 }
 
 static apr_status_t
@@ -1917,7 +1846,7 @@ serf_hpack_decode_destroy(serf_bucket_t
 const serf_bucket_type_t serf_bucket_type__hpack_decode = {
   "HPACK-DECODE",
   serf_hpack_decode_read,
-  serf_hpack_decode_readline,
+  serf_default_readline,
   serf_default_read_iovec,
   serf_default_read_for_sendfile,
   serf_buckets_are_v2,


Reply via email to