gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] [gnunet] branch master updated: curl: add GNUNET_CURL_job_a


From: gnunet
Subject: [GNUnet-SVN] [gnunet] branch master updated: curl: add GNUNET_CURL_job_add2
Date: Sun, 12 May 2019 21:30:16 +0200

This is an automated email from the git hooks/post-receive script.

dold pushed a commit to branch master
in repository gnunet.

The following commit(s) were added to refs/heads/master by this push:
     new d22f36844 curl: add GNUNET_CURL_job_add2
d22f36844 is described below

commit d22f368443dabdca0de859f8e87b2be41d75ab1b
Author: Florian Dold <address@hidden>
AuthorDate: Sun May 12 21:16:56 2019 +0200

    curl: add GNUNET_CURL_job_add2
---
 src/curl/curl.c               | 63 ++++++++++++++++++++++++++++++++-----------
 src/include/gnunet_curl_lib.h | 24 +++++++++++++++++
 2 files changed, 71 insertions(+), 16 deletions(-)

diff --git a/src/curl/curl.c b/src/curl/curl.c
index 40e04a9af..0a6cde8a9 100644
--- a/src/curl/curl.c
+++ b/src/curl/curl.c
@@ -112,11 +112,6 @@ struct GNUNET_CURL_Job
    */
   struct curl_slist *job_headers;
 
-  /**
-   * Header for the async scope id or NULL.
-   */
-  char *aid_header;
-
 };
 
 
@@ -274,30 +269,31 @@ download_cb (char *bufptr, size_t size, size_t nitems, 
void *cls)
  * @param ctx context to execute the job in
  * @param eh curl easy handle for the request, will
  *           be executed AND cleaned up
- * @param add_json add "application/json" content type header
+ * @param job_headers extra headers to add for this request
  * @param jcc callback to invoke upon completion
  * @param jcc_cls closure for @a jcc
  * @return NULL on error (in this case, @eh is still released!)
  */
 struct GNUNET_CURL_Job *
-GNUNET_CURL_job_add (struct GNUNET_CURL_Context *ctx,
+GNUNET_CURL_job_add2 (struct GNUNET_CURL_Context *ctx,
                      CURL *eh,
-                     int add_json,
+                     const struct curl_slist *job_headers,
                      GNUNET_CURL_JobCompletionCallback jcc,
                      void *jcc_cls)
 {
   struct GNUNET_CURL_Job *job;
   struct curl_slist *all_headers = NULL;
-  char *aid_header = NULL;
 
-  if (GNUNET_YES == add_json)
+  for (const struct curl_slist *curr = job_headers;
+       curr != NULL;
+       curr = curr->next)
   {
     GNUNET_assert (
       NULL != (all_headers =
-                 curl_slist_append (NULL, "Content-Type: application/json")));
+                 curl_slist_append (all_headers, curr->data)));
   }
 
-  for (struct curl_slist *curr = ctx->common_headers;
+  for (const struct curl_slist *curr = ctx->common_headers;
        curr != NULL;
        curr = curr->next)
   {
@@ -313,9 +309,12 @@ GNUNET_CURL_job_add (struct GNUNET_CURL_Context *ctx,
     GNUNET_async_scope_get (&scope);
     if (GNUNET_YES == scope.have_scope)
     {
+      char *aid_header = NULL;
       aid_header = GNUNET_STRINGS_data_to_string_alloc (&scope.scope_id,
                                                         sizeof (struct 
GNUNET_AsyncScopeId));
-      GNUNET_assert (NULL != curl_slist_append(all_headers, aid_header));
+      GNUNET_assert (NULL != aid_header);
+      GNUNET_assert (NULL != curl_slist_append (all_headers, aid_header));
+      GNUNET_free (aid_header);
     }
   }
 
@@ -323,14 +322,12 @@ GNUNET_CURL_job_add (struct GNUNET_CURL_Context *ctx,
   {
     GNUNET_break (0);
     curl_slist_free_all (all_headers);
-    GNUNET_free_non_null (aid_header);
     curl_easy_cleanup (eh);
     return NULL;
   }
 
   job = GNUNET_new (struct GNUNET_CURL_Job);
   job->job_headers = all_headers;
-  job->aid_header = aid_header;
 
   if ((CURLE_OK != curl_easy_setopt (eh, CURLOPT_PRIVATE, job)) ||
       (CURLE_OK !=
@@ -355,6 +352,41 @@ GNUNET_CURL_job_add (struct GNUNET_CURL_Context *ctx,
 }
 
 
+/**
+ * Schedule a CURL request to be executed and call the given @a jcc
+ * upon its completion.  Note that the context will make use of the
+ * CURLOPT_PRIVATE facility of the CURL @a eh.
+ *
+ * This function modifies the CURL handle to add the
+ * "Content-Type: application/json" header if @a add_json is set.
+ *
+ * @param ctx context to execute the job in
+ * @param eh curl easy handle for the request, will
+ *           be executed AND cleaned up
+ * @param add_json add "application/json" content type header
+ * @param jcc callback to invoke upon completion
+ * @param jcc_cls closure for @a jcc
+ * @return NULL on error (in this case, @eh is still released!)
+ */
+struct GNUNET_CURL_Job *
+GNUNET_CURL_job_add (struct GNUNET_CURL_Context *ctx,
+                     CURL *eh,
+                     int add_json,
+                     GNUNET_CURL_JobCompletionCallback jcc,
+                     void *jcc_cls)
+{
+  struct curl_slist *job_headers = NULL;
+  if (GNUNET_YES == add_json)
+  {
+    GNUNET_assert (
+      NULL != (job_headers =
+                 curl_slist_append (NULL, "Content-Type: application/json")));
+  }
+
+  return GNUNET_CURL_job_add2 (ctx, eh, job_headers, jcc, jcc_cls);
+}
+
+
 /**
  * Cancel a job.  Must only be called before the job completion
  * callback is called for the respective job.
@@ -371,7 +403,6 @@ GNUNET_CURL_job_cancel (struct GNUNET_CURL_Job *job)
                 curl_multi_remove_handle (ctx->multi, job->easy_handle));
   curl_easy_cleanup (job->easy_handle);
   GNUNET_free_non_null (job->db.buf);
-  GNUNET_free_non_null (job->aid_header);
   curl_slist_free_all (job->job_headers);
   GNUNET_free (job);
 }
diff --git a/src/include/gnunet_curl_lib.h b/src/include/gnunet_curl_lib.h
index 84c8d59f8..0dbbc1741 100644
--- a/src/include/gnunet_curl_lib.h
+++ b/src/include/gnunet_curl_lib.h
@@ -232,6 +232,30 @@ GNUNET_CURL_job_add (struct GNUNET_CURL_Context *ctx,
                      void *jcc_cls);
 
 
+/**
+ * Schedule a CURL request to be executed and call the given @a jcc
+ * upon its completion.  Note that the context will make use of the
+ * CURLOPT_PRIVATE facility of the CURL @a eh.
+ *
+ * This function modifies the CURL handle to add the
+ * "Content-Type: application/json" header if @a add_json is set.
+ *
+ * @param ctx context to execute the job in
+ * @param eh curl easy handle for the request, will
+ *           be executed AND cleaned up
+ * @param job_headers extra headers to add for this request
+ * @param jcc callback to invoke upon completion
+ * @param jcc_cls closure for @a jcc
+ * @return NULL on error (in this case, @eh is still released!)
+ */
+struct GNUNET_CURL_Job *
+GNUNET_CURL_job_add2 (struct GNUNET_CURL_Context *ctx,
+                     CURL *eh,
+                     const struct curl_slist *job_headers,
+                     GNUNET_CURL_JobCompletionCallback jcc,
+                     void *jcc_cls);
+
+
 /**
  * Cancel a job.  Must only be called before the job completion
  * callback is called for the respective job.

-- 
To stop receiving notification emails like this one, please contact
address@hidden



reply via email to

[Prev in Thread] Current Thread [Next in Thread]