33 #include "microhttpd.h" 39 #define GNUNET_REST_API_NS_GNS "/gns" 44 #define GNUNET_REST_GNS_PARAM_RECORD_TYPE "record_type" 49 #define GNUNET_REST_GNS_ERROR_UNKNOWN "Unknown Error" 54 #define GNUNET_REST_GNS_NOT_FOUND "Record not found" 181 if (NULL != handle->
url)
183 if (NULL != handle->
name)
185 if (NULL != handle->
emsg)
204 struct MHD_Response *resp;
205 json_t *json_error = json_object ();
211 if (NULL == handle->
emsg)
214 json_object_set_new (json_error,
"error", json_string (handle->
emsg));
218 response = json_dumps (json_error, 0);
220 MHD_add_response_header (resp,
"Content-Type",
"application/json");
222 json_decref (json_error);
254 struct MHD_Response *resp;
270 result = json_dumps (result_obj, 0);
273 MHD_add_response_header (resp,
"Content-Type",
"application/json");
276 json_decref (result_obj);
312 if (0 >= strlen (name))
359 struct MHD_Response *resp;
364 MHD_add_response_header (resp,
"Access-Control-Allow-Methods",
allow_methods);
406 if (handle->
url[strlen (handle->
url) - 1] ==
'/')
407 handle->
url[strlen (handle->
url) - 1] =
'\0';
429 static struct Plugin plugin;
433 memset (&plugin, 0,
sizeof(
struct Plugin));
440 "%s, %s, %s, %s, %s",
442 MHD_HTTP_METHOD_POST,
444 MHD_HTTP_METHOD_DELETE,
445 MHD_HTTP_METHOD_OPTIONS);
466 while (NULL != (request = requests_head))
#define GNUNET_CONTAINER_DLL_remove(head, tail, element)
Remove an element from a DLL.
Connection to the GNS service.
void(* GNUNET_REST_ResultProcessor)(void *cls, struct MHD_Response *resp, int status)
Iterator called on obtained result for a REST result.
int record_type
Record type to look up.
static struct GNUNET_VPN_RedirectionRequest * request
Opaque redirection request handle.
void * libgnunet_plugin_rest_gns_init(void *cls)
Entry point for the plugin.
#define GNUNET_CONTAINER_DLL_insert(head, tail, element)
Insert an element at the head of a DLL.
functions to parse JSON objects into GNUnet objects
void * cls
The closure of the plugin.
void * GNUNET_GNS_lookup_with_tld_cancel(struct GNUNET_GNS_LookupWithTldRequest *ltr)
Cancel pending lookup request.
GNUNET_REST_ResultProcessor proc
The plugin result processor.
uint32_t GNUNET_GNSRECORD_typename_to_number(const char *dns_typename)
Convert a type name (i.e.
#define GNUNET_GNSRECORD_TYPE_ANY
Record type indicating any record/'*'.
#define GNUNET_TIME_UNIT_SECONDS
One second.
const struct GNUNET_CONFIGURATION_Handle * cfg
Our configuration.
static void handle_gns_response(void *cls, int was_gns, uint32_t rd_count, const struct GNUNET_GNSRECORD_Data *rd)
Iterator called on obtained result for a GNS lookup.
void * libgnunet_plugin_rest_gns_done(void *cls)
Exit point from the plugin.
struct GNUNET_GNS_LookupWithTldRequest * GNUNET_GNS_lookup_with_tld(struct GNUNET_GNS_Handle *handle, const char *name, uint32_t type, enum GNUNET_GNS_LocalOptions options, GNUNET_GNS_LookupResultProcessor2 proc, void *proc_cls)
Perform an asynchronous lookup operation on the GNS, determining the zone using the TLD of the given ...
struct returned by the initialization function of the plugin
GNUNET_GenericReturnValue
Named constants for return values.
void get_gns_cont(struct GNUNET_REST_RequestHandle *con_handle, const char *url, void *cls)
Handle gns GET request.
#define GNUNET_new(type)
Allocate a struct or union of the given type.
void(* proc)(struct GNUNET_REST_RequestHandle *handle, const char *url, void *cls)
Namespace to handle.
int GNUNET_CONTAINER_multihashmap_contains(const struct GNUNET_CONTAINER_MultiHashMap *map, const struct GNUNET_HashCode *key)
Check if the map contains any value under the given key (including values that are NULL)...
#define GNUNET_strdup(a)
Wrapper around GNUNET_xstrdup_.
void * proc_cls
The closure of the result processor.
#define GNUNET_REST_HANDLER_END
struct GNUNET_BLOCK_PluginFunctions * api
Plugin API.
void * GNUNET_CONTAINER_multihashmap_get(const struct GNUNET_CONTAINER_MultiHashMap *map, const struct GNUNET_HashCode *key)
Given a key find a value in the map matching the key.
#define GNUNET_REST_GNS_NOT_FOUND
Rest API GNS ERROR Record not found.
struct GNUNET_SCHEDULER_Task * GNUNET_SCHEDULER_add_delayed(struct GNUNET_TIME_Relative delay, GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
Schedule a new task to be run with a specified delay.
char * name
Name to look up.
#define GNUNET_REST_GNS_PARAM_RECORD_TYPE
Rest API GNS Parameter record_type.
static struct GNUNET_TIME_Relative timeout
Desired timeout for the lookup (default is no timeout).
char * emsg
Error response message.
struct GNUNET_CONTAINER_MultiHashMap * url_param_map
Map of url parameters.
void GNUNET_CRYPTO_hash(const void *block, size_t size, struct GNUNET_HashCode *ret)
Compute hash of a given block.
const char * url
The url as string.
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.
void GNUNET_GNS_disconnect(struct GNUNET_GNS_Handle *handle)
Shutdown connection with the GNS service.
const struct GNUNET_CONFIGURATION_Handle * cfg
The configuration handle.
struct GNUNET_TIME_Relative timeout
Desired timeout for the lookup (default is no timeout).
unsigned int rd_count
Number of records in rd.
static struct GNUNET_DNS_Handle * handle
Handle to transport service.
static int result
Global testing status.
struct GNUNET_TIME_Relative GNUNET_TIME_relative_multiply(struct GNUNET_TIME_Relative rel, unsigned long long factor)
Multiply relative time by a given factor.
static void cleanup_handle(void *cls)
Cleanup lookup handle.
struct GNUNET_GNS_Handle * GNUNET_GNS_connect(const struct GNUNET_CONFIGURATION_Handle *cfg)
Initialize the connection with the GNS service.
static struct GNUNET_GNS_Handle * gns
Connection to GNS.
int GNUNET_REST_handle_request(struct GNUNET_REST_RequestHandle *conn, const struct GNUNET_REST_RequestHandler *handlers, struct GNUNET_REST_RequestHandlerError *err, void *cls)
struct GNUNET_REST_RequestHandle * rest_handle
Rest connection.
int response_code
Response code.
static char * plugin
Solver plugin name as string.
int int GNUNET_asprintf(char **buf, const char *format,...) __attribute__((format(printf
Like asprintf, just portable.
struct RequestHandle * next
DLL.
static void do_error(void *cls)
Task run on errors.
struct RequestHandle * prev
DLL.
json_t * GNUNET_GNSRECORD_JSON_from_gnsrecord(const char *rname, const struct GNUNET_GNSRECORD_Data *rd, unsigned int rd_count)
Convert GNS record to JSON.
struct GNUNET_GNS_LookupWithTldRequest * gns_lookup
Active GNS lookup.
struct GNUNET_SCHEDULER_Task * timeout_task
ID of a task associated with the resolution process.
struct MHD_Response * GNUNET_REST_create_response(const char *data)
Create REST MHD response.
#define GNUNET_log(kind,...)
Entry in list of pending tasks.
#define GNUNET_REST_GNS_ERROR_UNKNOWN
Rest API GNS ERROR Unknown Error.
static struct MHD_Response * response
Our canonical response.
struct GNUNET_GNSRECORD_Data * rd
Records to store.
Defaults, look in cache, then in DHT.
static struct RequestHandle * requests_head
DLL.
enum GNUNET_GenericReturnValue(* process_request)(struct GNUNET_REST_RequestHandle *handle, GNUNET_REST_ResultProcessor proc, void *proc_cls)
Function to process a REST call.
Handle to a lookup request.
#define GNUNET_REST_API_NS_GNS
Rest API GNS Namespace.
static struct RequestHandle * requests_tail
DLL.
static void do_timeout(void *cls)
#define GNUNET_free(ptr)
Wrapper around free.
Time for relative time used by GNUnet, in microseconds.
static void options_cont(struct GNUNET_REST_RequestHandle *con_handle, const char *url, void *cls)
Respond to OPTIONS request.
void * GNUNET_SCHEDULER_cancel(struct GNUNET_SCHEDULER_Task *task)
Cancel the task with the specified identifier.
static enum GNUNET_GenericReturnValue rest_process_request(struct GNUNET_REST_RequestHandle *rest_handle, GNUNET_REST_ResultProcessor proc, void *proc_cls)
Function processing the REST call.
static char * allow_methods
HTTP methods allows for this plugin.