On the get-remaining branch: Add a default get_remaining implementation
to avoid triggering a segfault when somebody tries to call this function
on a bucket that doesn't support this feature.
Add ### TODO on several callbacks that have the same problem,
caused by just being a #define to NULL.
* buckets/buckets.c
(serf_default_get_remaining): New function.
* buckets/chunk_buckets.c
(serf_bucket_type_chunk):
* buckets/copy_buckets.c
(serf_bucket_type_copy):
* buckets/dechunk_buckets.c
(serf_bucket_type_dechunk):
* buckets/deflate_buckets.c
(serf_bucket_type_deflate):
* buckets/request_buckets.c
(serf_bucket_type_request):
* buckets/response_body_buckets.c
(serf_bucket_type_response_body):
* buckets/response_buckets.c
(serf_bucket_type_response):
* buckets/socket_buckets.c
(serf_bucket_type_socket):
* buckets/ssl_buckets.c
(serf_bucket_type_ssl_encrypt,
serf_bucket_type_ssl_decrypt):
Set default get_remaining handler.
* serf_bucket_util.h
(serf_default_get_remaining): New function.
* test/mock_sock_buckets.c
(serf_bucket_type_mock_socket): Set get_remaining handler.
git-svn-id: https://svn.apache.org/repos/asf/serf/branches/get-remaining@1701864 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/buckets/buckets.c b/buckets/buckets.c
index ceb2628..ee6e208 100644
--- a/buckets/buckets.c
+++ b/buckets/buckets.c
@@ -129,6 +129,10 @@
serf_default_destroy(bucket);
}
+apr_uint64_t *serf_default_get_remaining(serf_bucket_t *bucket)
+{
+ return SERF_LENGTH_UNKNOWN;
+}
serf_bucket_t * serf_buckets_are_v2(serf_bucket_t *bucket,
const serf_bucket_type_t *type)
diff --git a/buckets/chunk_buckets.c b/buckets/chunk_buckets.c
index 13b2a75..9334cd1 100644
--- a/buckets/chunk_buckets.c
+++ b/buckets/chunk_buckets.c
@@ -255,6 +255,6 @@
serf_chunk_peek,
serf_chunk_destroy,
serf_default_read_bucket,
- NULL,
+ serf_default_get_remaining,
serf_chunk_set_config,
};
diff --git a/buckets/copy_buckets.c b/buckets/copy_buckets.c
index 042d1ba..7801250 100644
--- a/buckets/copy_buckets.c
+++ b/buckets/copy_buckets.c
@@ -198,6 +198,6 @@
serf_copy_peek,
serf_copy_destroy,
serf_copy_read_bucket,
- NULL,
+ serf_default_get_remaining,
serf_copy_set_config,
};
diff --git a/buckets/dechunk_buckets.c b/buckets/dechunk_buckets.c
index c99051f..d756746 100644
--- a/buckets/dechunk_buckets.c
+++ b/buckets/dechunk_buckets.c
@@ -205,13 +205,13 @@
const serf_bucket_type_t serf_bucket_type_dechunk = {
"DECHUNK",
serf_dechunk_read,
- serf_dechunk_readline,
+ serf_dechunk_readline /* ### TODO */,
serf_default_read_iovec,
serf_default_read_for_sendfile,
serf_buckets_are_v2,
- serf_dechunk_peek,
+ serf_dechunk_peek /* ### TODO */,
serf_dechunk_destroy_and_data,
serf_default_read_bucket,
- NULL,
+ serf_default_get_remaining,
serf_dechunk_set_config,
};
diff --git a/buckets/deflate_buckets.c b/buckets/deflate_buckets.c
index f43b2dc..bba9082 100644
--- a/buckets/deflate_buckets.c
+++ b/buckets/deflate_buckets.c
@@ -451,13 +451,13 @@
const serf_bucket_type_t serf_bucket_type_deflate = {
"DEFLATE",
serf_deflate_read,
- serf_deflate_readline,
+ serf_deflate_readline /* ### TODO */,
serf_default_read_iovec,
serf_default_read_for_sendfile,
serf_buckets_are_v2,
- serf_deflate_peek,
+ serf_deflate_peek /* ### TODO */,
serf_deflate_destroy_and_data,
serf_default_read_bucket,
- NULL,
+ serf_default_get_remaining,
serf_deflate_set_config,
};
diff --git a/buckets/request_buckets.c b/buckets/request_buckets.c
index 02a5a2d..f60887d 100644
--- a/buckets/request_buckets.c
+++ b/buckets/request_buckets.c
@@ -245,7 +245,7 @@
serf_request_peek,
serf_request_destroy,
serf_default_read_bucket,
- NULL,
+ serf_default_get_remaining,
serf_request_set_config,
};
diff --git a/buckets/response_body_buckets.c b/buckets/response_body_buckets.c
index 33726cc..db6da6e 100644
--- a/buckets/response_body_buckets.c
+++ b/buckets/response_body_buckets.c
@@ -149,6 +149,6 @@
serf_response_body_peek,
serf_response_body_destroy,
serf_default_read_bucket,
- NULL,
+ serf_default_get_remaining,
serf_response_body_set_config,
};
diff --git a/buckets/response_buckets.c b/buckets/response_buckets.c
index bc1d3a6..f93626e 100644
--- a/buckets/response_buckets.c
+++ b/buckets/response_buckets.c
@@ -542,9 +542,9 @@
serf_default_read_iovec,
serf_default_read_for_sendfile,
serf_buckets_are_v2,
- serf_response_peek,
+ serf_response_peek /* ### TODO */,
serf_response_destroy_and_data,
serf_default_read_bucket,
- NULL,
+ serf_default_get_remaining,
serf_response_set_config,
};
diff --git a/buckets/socket_buckets.c b/buckets/socket_buckets.c
index ec67246..db1de1a 100644
--- a/buckets/socket_buckets.c
+++ b/buckets/socket_buckets.c
@@ -119,6 +119,6 @@
serf_socket_peek,
serf_default_destroy_and_data,
serf_default_read_bucket,
- NULL,
+ serf_default_get_remaining,
serf_default_ignore_config,
};
diff --git a/buckets/ssl_buckets.c b/buckets/ssl_buckets.c
index 4a6c1d3..3349c11 100644
--- a/buckets/ssl_buckets.c
+++ b/buckets/ssl_buckets.c
@@ -2161,7 +2161,7 @@
serf_ssl_peek,
serf_ssl_encrypt_destroy_and_data,
serf_default_read_bucket,
- NULL,
+ serf_default_get_remaining,
serf_ssl_set_config,
};
@@ -2175,6 +2175,6 @@
serf_ssl_peek,
serf_ssl_decrypt_destroy_and_data,
serf_default_read_bucket,
- NULL,
+ serf_default_get_remaining,
serf_ssl_set_config,
};
diff --git a/serf_bucket_util.h b/serf_bucket_util.h
index b61f655..c28b0ec 100644
--- a/serf_bucket_util.h
+++ b/serf_bucket_util.h
@@ -103,6 +103,14 @@
serf_bucket_t *bucket);
/**
+ * Default implementation of the @see get_remaining functionality.
+ *
+ * This function will just return SERF_LENGTH_UNKNOWN.
+ */
+apr_uint64_t *serf_default_get_remaining(
+ serf_bucket_t *bucket);
+
+/**
* Default implementation of the @see set_config functionality.
*
* This function will not do anything, it should be used in buckets
diff --git a/test/mock_sock_buckets.c b/test/mock_sock_buckets.c
index efca8e1..bc3698f 100644
--- a/test/mock_sock_buckets.c
+++ b/test/mock_sock_buckets.c
@@ -95,6 +95,6 @@
serf_mock_sock_peek,
serf_default_destroy_and_data,
serf_default_read_bucket,
- NULL,
+ serf_default_get_remaining,
serf_mock_sock_set_config,
};