From 418bf5953acdba2e325528d739fb115b51b7141f Mon Sep 17 00:00:00 2001 From: Marcello Stanisci Date: Wed, 17 Oct 2018 20:02:35 +0200 Subject: curl: reschedule uses GNUNET_CURL_perform2. --- src/curl/curl.c | 2 +- src/curl/curl_reschedule.c | 42 +++++++++++++++++++++++++++++++++++++++++- src/include/gnunet_curl_lib.h | 14 +++++++++++++- 3 files changed, 55 insertions(+), 3 deletions(-) diff --git a/src/curl/curl.c b/src/curl/curl.c index eabe0e787..985800e64 100644 --- a/src/curl/curl.c +++ b/src/curl/curl.c @@ -355,7 +355,7 @@ GNUNET_CURL_job_cancel (struct GNUNET_CURL_Job *job) * the JSON we received was malformed). * @return NULL if downloading a JSON reply failed. */ -static void * +void * download_get_result (struct GNUNET_CURL_DownloadBuffer *db, CURL *eh, long *response_code) diff --git a/src/curl/curl_reschedule.c b/src/curl/curl_reschedule.c index ddf27fbd7..0b5b85687 100644 --- a/src/curl/curl_reschedule.c +++ b/src/curl/curl_reschedule.c @@ -24,6 +24,10 @@ #include "gnunet_curl_lib.h" #include "gnunet_util_lib.h" +extern void * +download_get_result (struct GNUNET_CURL_DownloadBuffer *db, + CURL *eh, + long *response_code); /** * Closure for #GNUNET_CURL_gnunet_scheduler_reschedule(). @@ -39,9 +43,40 @@ struct GNUNET_CURL_RescheduleContext * Context we manage. */ struct GNUNET_CURL_Context *ctx; + + /** + * Parser of the raw response. + */ + GNUNET_CURL_RawParser parser; + + /** + * Deallocate the response object. + */ + GNUNET_CURL_ResponseCleaner cleaner; }; +/** + * Initialize reschedule context; with custom response parser + * + * @param ctx context to manage + * @return closure for #GNUNET_CURL_gnunet_scheduler_reschedule(). + */ +struct GNUNET_CURL_RescheduleContext * +GNUNET_CURL_gnunet_rc_create_with_parser (struct GNUNET_CURL_Context *ctx, + GNUNET_CURL_RawParser rp, + GNUNET_CURL_ResponseCleaner rc) +{ + struct GNUNET_CURL_RescheduleContext *rctx; + + rctx = GNUNET_new (struct GNUNET_CURL_RescheduleContext); + rctx->ctx = ctx; + rctx->parser = rp; + rctx->cleaner = rc; + + return rctx; +} + /** * Initialize reschedule context. * @@ -55,6 +90,8 @@ GNUNET_CURL_gnunet_rc_create (struct GNUNET_CURL_Context *ctx) rc = GNUNET_new (struct GNUNET_CURL_RescheduleContext); rc->ctx = ctx; + rc->parser = (GNUNET_CURL_RawParser) &download_get_result; + rc->cleaner = (GNUNET_CURL_ResponseCleaner) &json_decref; return rc; } @@ -92,7 +129,10 @@ context_task (void *cls) struct GNUNET_TIME_Relative delay; rc->task = NULL; - GNUNET_CURL_perform (rc->ctx); + + GNUNET_CURL_perform2 (rc->ctx, + rc->parser, + rc->cleaner); max_fd = -1; timeout = -1; FD_ZERO (&read_fd_set); diff --git a/src/include/gnunet_curl_lib.h b/src/include/gnunet_curl_lib.h index 9bf798bca..0bad7e6c7 100644 --- a/src/include/gnunet_curl_lib.h +++ b/src/include/gnunet_curl_lib.h @@ -203,7 +203,7 @@ struct GNUNET_CURL_Job; typedef void (*GNUNET_CURL_JobCompletionCallback)(void *cls, long response_code, - const json_t *json); + const void *response); /** @@ -258,6 +258,18 @@ struct GNUNET_CURL_RescheduleContext; struct GNUNET_CURL_RescheduleContext * GNUNET_CURL_gnunet_rc_create (struct GNUNET_CURL_Context *ctx); +/** + * Initialize reschedule context; with custom response parser + * + * @param ctx context to manage + * @return closure for #GNUNET_CURL_gnunet_scheduler_reschedule(). + */ +struct GNUNET_CURL_RescheduleContext * +GNUNET_CURL_gnunet_rc_create_with_parser (struct GNUNET_CURL_Context *ctx, + GNUNET_CURL_RawParser rp, + GNUNET_CURL_ResponseCleaner rc); + + /** * Destroy reschedule context. * -- cgit v1.2.3