GNUnet  0.10.x
plugin_rest_copying.c
Go to the documentation of this file.
1 /*
2  This file is part of GNUnet.
3  Copyright (C) 2012-2018 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  */
27 #include "platform.h"
28 #include "gnunet_rest_plugin.h"
29 #include <gnunet_rest_lib.h>
30 
31 #define GNUNET_REST_API_NS_COPYING "/copying"
32 
33 #define GNUNET_REST_COPYING_TEXT "GNU Affero General Public License version 3 or later. See also: <http://www.gnu.org/licenses/>"
34 
38 struct Plugin
39 {
40  const struct GNUNET_CONFIGURATION_Handle *cfg;
41 };
42 
44 
45 struct RequestHandle
46 {
50  struct GNUNET_REST_RequestHandle *rest_handle;
51 
56 
60  void *proc_cls;
61 
65  int response_code;
66 
67 };
68 
69 
75 static void
77 {
79  "Cleaning up\n");
80  GNUNET_free (handle);
81 }
82 
83 
90 static void
91 do_error (void *cls)
92 {
93  struct RequestHandle *handle = cls;
94  struct MHD_Response *resp;
95 
96  resp = GNUNET_REST_create_response (NULL);
97  handle->proc (handle->proc_cls, resp, handle->response_code);
98  cleanup_handle (handle);
99 }
100 
101 
107 static void
109  const char* url,
110  void *cls)
111 {
112  struct MHD_Response *resp;
113  struct RequestHandle *handle = cls;
114 
116  handle->proc (handle->proc_cls,
117  resp,
118  MHD_HTTP_OK);
119  cleanup_handle (handle);
120 }
121 
122 
123 
129 static void
131  const char* url,
132  void *cls)
133 {
134  struct MHD_Response *resp;
135  struct RequestHandle *handle = cls;
136 
137  resp = GNUNET_REST_create_response (NULL);
138  MHD_add_response_header (resp,
139  "Access-Control-Allow-Methods",
140  MHD_HTTP_METHOD_GET);
141  handle->proc (handle->proc_cls,
142  resp,
143  MHD_HTTP_OK);
144  cleanup_handle (handle);
145 }
146 
147 
159 static void
162  void *proc_cls)
163 {
164  static const struct GNUNET_REST_RequestHandler handlers[] = {
165  {MHD_HTTP_METHOD_GET, GNUNET_REST_API_NS_COPYING, &get_cont},
166  {MHD_HTTP_METHOD_OPTIONS, GNUNET_REST_API_NS_COPYING, &options_cont},
168  };
169  struct RequestHandle *handle = GNUNET_new (struct RequestHandle);
171 
172  handle->proc_cls = proc_cls;
173  handle->proc = proc;
174  handle->rest_handle = conndata_handle;
175 
176  if (GNUNET_NO == GNUNET_REST_handle_request (conndata_handle,
177  handlers,
178  &err,
179  handle))
180  {
181  handle->response_code = err.error_code;
183  }
184 }
185 
186 
193 void *
195 {
196  static struct Plugin plugin;
197  cfg = cls;
198  struct GNUNET_REST_Plugin *api;
199 
200  if (NULL != plugin.cfg)
201  return NULL; /* can only initialize once! */
202  memset (&plugin, 0, sizeof (struct Plugin));
203  plugin.cfg = cfg;
204  api = GNUNET_new (struct GNUNET_REST_Plugin);
205  api->cls = &plugin;
209  _("COPYING REST API initialized\n"));
210  return api;
211 }
212 
213 
220 void *
222 {
223  struct GNUNET_REST_Plugin *api = cls;
224  struct Plugin *plugin = api->cls;
225 
226  plugin->cfg = NULL;
227  GNUNET_free (api);
229  "COPYING REST plugin is finished\n");
230  return NULL;
231 }
232 
233 /* end of plugin_rest_copying.c */
void(* GNUNET_REST_ResultProcessor)(void *cls, struct MHD_Response *resp, int status)
Iterator called on obtained result for a REST result.
static void cleanup_handle(struct RequestHandle *handle)
Cleanup request handle.
#define GNUNET_REST_API_NS_COPYING
void * cls
The closure of the plugin.
GNUNET_REST_ResultProcessor proc
The plugin result processor.
const struct GNUNET_CONFIGURATION_Handle * cfg
Our configuration.
struct returned by the initialization function of the plugin
#define GNUNET_NO
Definition: gnunet_common.h:81
static void do_error(void *cls)
Task run on shutdown.
#define GNUNET_new(type)
Allocate a struct or union of the given type.
void(* process_request)(struct GNUNET_REST_RequestHandle *handle, GNUNET_REST_ResultProcessor proc, void *proc_cls)
Function to process a REST call.
void * proc_cls
The closure of the result processor.
#define GNUNET_REST_HANDLER_END
struct GNUNET_BLOCK_PluginFunctions * api
Plugin API.
Definition: block.c:47
The request handle.
#define _(String)
GNU gettext support macro.
Definition: platform.h:208
static void rest_copying_process_request(struct GNUNET_REST_RequestHandle *conndata_handle, GNUNET_REST_ResultProcessor proc, void *proc_cls)
Function processing the REST call.
static struct GNUNET_ATS_SolverFunctions * plugin
Our solver.
#define GNUNET_REST_COPYING_TEXT
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:1273
char * name
Plugin name.
static void get_cont(struct GNUNET_REST_RequestHandle *con_handle, const char *url, void *cls)
Handle rest request.
static struct GNUNET_DNS_Handle * handle
Handle to transport service.
void * libgnunet_plugin_rest_copying_done(void *cls)
Exit point from the plugin.
int GNUNET_REST_handle_request(struct GNUNET_REST_RequestHandle *conn, const struct GNUNET_REST_RequestHandler *handlers, struct GNUNET_REST_RequestHandlerError *err, void *cls)
Definition: rest.c:76
struct GNUNET_REST_RequestHandle * rest_handle
Handle to rest request.
int response_code
HTTP response code.
configuration data
Definition: configuration.c:85
Handle for a plugin.
Definition: block.c:37
void * libgnunet_plugin_rest_copying_init(void *cls)
Entry point for the plugin.
struct MHD_Response * GNUNET_REST_create_response(const char *data)
Create REST MHD response.
Definition: rest.c:56
#define GNUNET_log(kind,...)
static void options_cont(struct GNUNET_REST_RequestHandle *con_handle, const char *url, void *cls)
Handle rest request.
#define GNUNET_free(ptr)
Wrapper around free.
char * url
The url.