X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Finclude%2Fgnunet_curl_lib.h;h=0cbef9c73702de8a0a3cf495671282e7ef52803d;hb=200d05b44a96d6fec00e28736038c838c679f650;hp=500434d82e1a7ebb35178582f54a103aca3f7527;hpb=bc1676b599937cd37d5fd625362ceea6f78fa42a;p=oweals%2Fgnunet.git diff --git a/src/include/gnunet_curl_lib.h b/src/include/gnunet_curl_lib.h index 500434d82..0cbef9c73 100644 --- a/src/include/gnunet_curl_lib.h +++ b/src/include/gnunet_curl_lib.h @@ -2,17 +2,20 @@ This file is part of GNUnet Copyright (C) 2014, 2015, 2016 GNUnet e.V. - GNUnet is free software; you can redistribute it and/or modify it under the - terms of the GNU General Public License as published by the Free Software - Foundation; either version 3, or (at your option) any later version. - - GNUnet is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along with - GNUnet; see the file COPYING. If not, If not, see - + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later */ /** * @file src/include/gnunet_curl_lib.h @@ -48,6 +51,52 @@ typedef void (*GNUNET_CURL_RescheduleCallback)(void *cls); +/** + * @brief Buffer data structure we use to buffer the HTTP download + * before giving it to the JSON parser. + */ +struct GNUNET_CURL_DownloadBuffer +{ + + /** + * Download buffer + */ + void *buf; + + /** + * The size of the download buffer + */ + size_t buf_size; + + /** + * Error code (based on libc errno) if we failed to download + * (i.e. response too large). + */ + int eno; + +}; + + +/** + * Parses the raw response we got from the Web server. + * + * @param db the raw data + * @param eh handle + * @param response_code HTTP response code + * @return the parsed object + */ +typedef void * +(*GNUNET_CURL_RawParser) (struct GNUNET_CURL_DownloadBuffer *db, + CURL *eh, + long *response_code); + +/** + * Deallocate the response. + * + * @param response object to clean + */ +typedef void +(*GNUNET_CURL_ResponseCleaner) (void *response); /** * Initialise this library. This function should be called before using any of @@ -64,9 +113,7 @@ GNUNET_CURL_init (GNUNET_CURL_RescheduleCallback cb, /** * Obtain the information for a select() call to wait until - * #GNUNET_CURL_perform() is ready again. Note that calling - * any other TALER_EXCHANGE-API may also imply that the library - * is again ready for #GNUNET_CURL_perform(). + * #GNUNET_CURL_perform() is ready again. * * Basically, a client should use this API to prepare for select(), * then block on select(), then call #GNUNET_CURL_perform() and then @@ -100,7 +147,18 @@ GNUNET_CURL_get_select_info (struct GNUNET_CURL_Context *ctx, /** - * Run the main event loop for the Taler interaction. + * Add custom request header. + * + * @param ctx cURL context. + * @param header header string; will be given to the context AS IS. + * @return #GNUNET_OK if no errors occurred, #GNUNET_SYSERR otherwise. + */ +int +GNUNET_CURL_append_header (struct GNUNET_CURL_Context *ctx, + const char *header); + +/** + * Run the main event loop for the CURL interaction. * * @param ctx the library context */ @@ -108,6 +166,19 @@ void GNUNET_CURL_perform (struct GNUNET_CURL_Context *ctx); +/** + * Run the main event loop for the Taler interaction. + * + * @param ctx the library context + * @param rp parses the raw response returned from + * the Web server. + * @param rc cleans/frees the response + */ +void +GNUNET_CURL_perform2 (struct GNUNET_CURL_Context *ctx, + GNUNET_CURL_RawParser rp, + GNUNET_CURL_ResponseCleaner rc); + /** * Cleanup library initialisation resources. This function should be called * after using this library to cleanup the resources occupied during library's @@ -134,7 +205,7 @@ struct GNUNET_CURL_Job; typedef void (*GNUNET_CURL_JobCompletionCallback)(void *cls, long response_code, - const json_t *json); + const void *response); /** @@ -189,6 +260,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. * @@ -204,7 +287,8 @@ GNUNET_CURL_gnunet_rc_destroy (struct GNUNET_CURL_RescheduleContext *rc); * Note that you MUST immediately destroy the reschedule context after * calling #GNUNET_CURL_fini(). * - * @param cls must point to a `struct GNUNET_CURL_RescheduleContext` + * @param cls must point to a `struct GNUNET_CURL_RescheduleContext *` + * (pointer to a pointer!) */ void GNUNET_CURL_gnunet_scheduler_reschedule (void *cls);