GNUnet 0.21.1
curl_reschedule.c
Go to the documentation of this file.
1/*
2 This file is part of GNUnet
3 Copyright (C) 2015, 2016 GNUnet e.V.
4
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19 */
25#include "platform.h"
26#include <jansson.h>
27#include "gnunet_curl_lib.h"
28#include "gnunet_util_lib.h"
29
30extern void *
32 CURL *eh,
33 long *response_code);
34
39{
44
49
54
59};
60
61
66{
68
70 rctx->ctx = ctx;
71 rctx->parser = rp;
72 rctx->cleaner = rc;
73
74 return rctx;
75}
76
77
83static void
85{
86 json_decref (response);
87}
88
89
92{
94
96 rc->ctx = ctx;
98 rc->cleaner = &clean_result;
99 return rc;
100}
101
102
103void
105{
106 if (NULL != rc->task)
108 GNUNET_free (rc);
109}
110
111
117static void
118context_task (void *cls)
119{
120 struct GNUNET_CURL_RescheduleContext *rc = cls;
121 long timeout;
122 int max_fd;
123 fd_set read_fd_set;
124 fd_set write_fd_set;
125 fd_set except_fd_set;
126 struct GNUNET_NETWORK_FDSet *rs;
127 struct GNUNET_NETWORK_FDSet *ws;
128 struct GNUNET_TIME_Relative delay;
129
130 rc->task = NULL;
131 GNUNET_CURL_perform2 (rc->ctx, rc->parser, rc->cleaner);
132 max_fd = -1;
133 timeout = -1;
134 FD_ZERO (&read_fd_set);
135 FD_ZERO (&write_fd_set);
136 FD_ZERO (&except_fd_set);
138 &read_fd_set,
139 &write_fd_set,
140 &except_fd_set,
141 &max_fd,
142 &timeout);
143 if (timeout >= 0)
144 delay =
146 timeout);
147 else
151 &read_fd_set,
152 max_fd + 1);
155 &write_fd_set,
156 max_fd + 1);
157 if (NULL == rc->task)
159 delay,
160 rs,
161 ws,
163 rc);
166}
167
168
169void
171{
172 struct GNUNET_CURL_RescheduleContext *rc = *(void **) cls;
173
174 if (NULL != rc->task)
177 rc);
178}
179
180
181/* end of curl_reschedule.c */
void * GNUNET_CURL_download_get_result_(struct GNUNET_CURL_DownloadBuffer *db, CURL *eh, long *response_code)
Definition: curl.c:649
static void clean_result(void *response)
Just a wrapper to avoid casting of function pointers.
static void context_task(void *cls)
Task that runs the context's event loop with the GNUnet scheduler.
static struct GNUNET_TIME_Relative timeout
User defined timestamp for completing operations.
Definition: gnunet-arm.c:119
static struct MHD_Response * response
Our canonical response.
static struct GNUNET_FS_Handle * ctx
static char * rp
Relying party.
static struct GNUNET_FS_DirectoryBuilder * db
Definition: gnunet-search.c:97
library to make it easy to download JSON replies over HTTP
void GNUNET_CURL_gnunet_scheduler_reschedule(void *cls)
Implementation of the GNUNET_CURL_RescheduleCallback for GNUnet's scheduler.
struct GNUNET_CURL_RescheduleContext * GNUNET_CURL_gnunet_rc_create_with_parser(struct GNUNET_CURL_Context *ctx, GNUNET_CURL_RawParser rp, GNUNET_CURL_ResponseCleaner rc)
Initialize reschedule context; with custom response parser.
void GNUNET_CURL_get_select_info(struct GNUNET_CURL_Context *ctx, fd_set *read_fd_set, fd_set *write_fd_set, fd_set *except_fd_set, int *max_fd, long *timeout)
Obtain the information for a select() call to wait until GNUNET_CURL_perform() is ready again.
Definition: curl.c:828
void(* GNUNET_CURL_ResponseCleaner)(void *response)
Deallocate the response.
struct GNUNET_CURL_RescheduleContext * GNUNET_CURL_gnunet_rc_create(struct GNUNET_CURL_Context *ctx)
Initialize reschedule context.
void GNUNET_CURL_perform2(struct GNUNET_CURL_Context *ctx, GNUNET_CURL_RawParser rp, GNUNET_CURL_ResponseCleaner rc)
Run the main event loop for the HTTP interaction.
Definition: curl.c:747
void *(* GNUNET_CURL_RawParser)(struct GNUNET_CURL_DownloadBuffer *db, CURL *eh, long *response_code)
Parses the raw response we got from the Web server.
void GNUNET_CURL_gnunet_rc_destroy(struct GNUNET_CURL_RescheduleContext *rc)
Destroy reschedule context.
@ GNUNET_SCHEDULER_PRIORITY_DEFAULT
Run with the default priority (normal P2P operations).
#define GNUNET_new(type)
Allocate a struct or union of the given type.
#define GNUNET_free(ptr)
Wrapper around free.
void GNUNET_NETWORK_fdset_destroy(struct GNUNET_NETWORK_FDSet *fds)
Releases the associated memory of an fd set.
Definition: network.c:1186
void GNUNET_NETWORK_fdset_copy_native(struct GNUNET_NETWORK_FDSet *to, const fd_set *from, int nfds)
Copy a native fd set into the GNUnet representation.
Definition: network.c:1040
struct GNUNET_NETWORK_FDSet * GNUNET_NETWORK_fdset_create(void)
Creates an fd set.
Definition: network.c:1170
struct GNUNET_SCHEDULER_Task * GNUNET_SCHEDULER_add_select(enum GNUNET_SCHEDULER_Priority prio, struct GNUNET_TIME_Relative delay, const struct GNUNET_NETWORK_FDSet *rs, const struct GNUNET_NETWORK_FDSet *ws, GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
Schedule a new task to be run with a specified delay or when any of the specified file descriptor set...
Definition: scheduler.c:1836
void * GNUNET_SCHEDULER_cancel(struct GNUNET_SCHEDULER_Task *task)
Cancel the task with the specified identifier.
Definition: scheduler.c:981
struct GNUNET_SCHEDULER_Task * GNUNET_SCHEDULER_add_now(GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
Schedule a new task to be run as soon as possible.
Definition: scheduler.c:1305
#define GNUNET_TIME_UNIT_FOREVER_REL
Constant used to specify "forever".
#define GNUNET_TIME_UNIT_MILLISECONDS
One millisecond.
struct GNUNET_TIME_Relative GNUNET_TIME_relative_multiply(struct GNUNET_TIME_Relative rel, unsigned long long factor)
Multiply relative time by a given factor.
Definition: time.c:484
Context.
Definition: curl.c:140
Buffer data structure we use to buffer the HTTP download before giving it to the JSON parser.
Closure for GNUNET_CURL_gnunet_scheduler_reschedule().
struct GNUNET_SCHEDULER_Task * task
Just the task.
GNUNET_CURL_RawParser parser
Parser of the raw response.
struct GNUNET_CURL_Context * ctx
Context we manage.
GNUNET_CURL_ResponseCleaner cleaner
Deallocate the response object.
collection of IO descriptors
Entry in list of pending tasks.
Definition: scheduler.c:136
Time for relative time used by GNUnet, in microseconds.