[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] [gnunet] branch master updated: revert timeout removal
From: |
gnunet |
Subject: |
[GNUnet-SVN] [gnunet] branch master updated: revert timeout removal |
Date: |
Wed, 17 Jul 2019 18:15:51 +0200 |
This is an automated email from the git hooks/post-receive script.
martin-schanzenbach pushed a commit to branch master
in repository gnunet.
The following commit(s) were added to refs/heads/master by this push:
new c3b9d8943 revert timeout removal
c3b9d8943 is described below
commit c3b9d89432edc264a18d6d98665110dff4aeb4f1
Author: Schanzenbach, Martin <address@hidden>
AuthorDate: Wed Jul 17 18:14:37 2019 +0200
revert timeout removal
---
src/gns/plugin_rest_gns.c | 121 +++++++++++++++++++++++++++-------------------
1 file changed, 72 insertions(+), 49 deletions(-)
diff --git a/src/gns/plugin_rest_gns.c b/src/gns/plugin_rest_gns.c
index 46babdc76..1ecde12f0 100644
--- a/src/gns/plugin_rest_gns.c
+++ b/src/gns/plugin_rest_gns.c
@@ -60,7 +60,7 @@ const struct GNUNET_CONFIGURATION_Handle *cfg;
/**
* HTTP methods allows for this plugin
*/
-static char* allow_methods;
+static char *allow_methods;
/**
* @brief struct returned by the initialization function of the plugin
@@ -101,6 +101,16 @@ struct RequestHandle
*/
struct GNUNET_REST_RequestHandle *rest_handle;
+ /**
+ * Desired timeout for the lookup (default is no timeout).
+ */
+ struct GNUNET_TIME_Relative timeout;
+
+ /**
+ * ID of a task associated with the resolution process.
+ */
+ struct GNUNET_SCHEDULER_Task *timeout_task;
+
/**
* The plugin result processor
*/
@@ -125,7 +135,6 @@ struct RequestHandle
* Response code
*/
int response_code;
-
};
@@ -137,8 +146,7 @@ static void
cleanup_handle (void *cls)
{
struct RequestHandle *handle = cls;
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Cleaning up\n");
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Cleaning up\n");
if (NULL != handle->gns_lookup)
{
@@ -151,6 +159,11 @@ cleanup_handle (void *cls)
handle->gns = NULL;
}
+ if (NULL != handle->timeout_task)
+ {
+ GNUNET_SCHEDULER_cancel (handle->timeout_task);
+ handle->timeout_task = NULL;
+ }
if (NULL != handle->url)
GNUNET_free (handle->url);
if (NULL != handle->name)
@@ -172,25 +185,38 @@ do_error (void *cls)
{
struct RequestHandle *handle = cls;
struct MHD_Response *resp;
- json_t *json_error = json_object();
+ json_t *json_error = json_object ();
char *response;
+ if (NULL != handle->timeout_task)
+ GNUNET_SCHEDULER_cancel (handle->timeout_task);
+ handle->timeout_task = NULL;
if (NULL == handle->emsg)
- handle->emsg = GNUNET_strdup(GNUNET_REST_GNS_ERROR_UNKNOWN);
+ handle->emsg = GNUNET_strdup (GNUNET_REST_GNS_ERROR_UNKNOWN);
- json_object_set_new(json_error,"error", json_string(handle->emsg));
+ json_object_set_new (json_error, "error", json_string (handle->emsg));
if (0 == handle->response_code)
handle->response_code = MHD_HTTP_INTERNAL_SERVER_ERROR;
response = json_dumps (json_error, 0);
resp = GNUNET_REST_create_response (response);
handle->proc (handle->proc_cls, resp, handle->response_code);
- json_decref(json_error);
- GNUNET_free(response);
+ json_decref (json_error);
+ GNUNET_free (response);
GNUNET_SCHEDULER_add_now (&cleanup_handle, handle);
}
+static void
+do_timeout (void *cls)
+{
+ struct RequestHandle *handle = cls;
+ handle->timeout_task = NULL;
+ handle->response_code = MHD_HTTP_REQUEST_TIMEOUT;
+ do_error (handle);
+}
+
+
/**
* Iterator called on obtained result for a GNS lookup.
*
@@ -215,20 +241,20 @@ handle_gns_response (void *cls,
if (GNUNET_NO == was_gns)
{
handle->response_code = MHD_HTTP_NOT_FOUND;
- handle->emsg = GNUNET_strdup(GNUNET_REST_GNS_NOT_FOUND);
+ handle->emsg = GNUNET_strdup (GNUNET_REST_GNS_NOT_FOUND);
GNUNET_SCHEDULER_add_now (&do_error, handle);
return;
}
result_obj = GNUNET_JSON_from_gnsrecord (handle->name, rd, rd_count);
- result = json_dumps(result_obj, 0);
+ result = json_dumps (result_obj, 0);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Result %s\n", result);
resp = GNUNET_REST_create_response (result);
handle->proc (handle->proc_cls, resp, MHD_HTTP_OK);
GNUNET_free (result);
json_decref (result_obj);
- GNUNET_SCHEDULER_add_now(&cleanup_handle, handle);
+ GNUNET_SCHEDULER_add_now (&cleanup_handle, handle);
}
@@ -241,7 +267,7 @@ handle_gns_response (void *cls,
*/
void
get_gns_cont (struct GNUNET_REST_RequestHandle *con_handle,
- const char* url,
+ const char *url,
void *cls)
{
struct RequestHandle *handle = cls;
@@ -259,32 +285,32 @@ get_gns_cont (struct GNUNET_REST_RequestHandle
*con_handle,
if (NULL == name)
{
handle->response_code = MHD_HTTP_NOT_FOUND;
- handle->emsg = GNUNET_strdup(GNUNET_REST_GNS_NOT_FOUND);
+ handle->emsg = GNUNET_strdup (GNUNET_REST_GNS_NOT_FOUND);
GNUNET_SCHEDULER_add_now (&do_error, handle);
return;
}
if (0 >= strlen (name))
{
handle->response_code = MHD_HTTP_NOT_FOUND;
- handle->emsg = GNUNET_strdup(GNUNET_REST_GNS_NOT_FOUND);
+ handle->emsg = GNUNET_strdup (GNUNET_REST_GNS_NOT_FOUND);
GNUNET_SCHEDULER_add_now (&do_error, handle);
return;
}
- handle->name = GNUNET_strdup(name);
+ handle->name = GNUNET_strdup (name);
handle->record_type = UINT32_MAX;
GNUNET_CRYPTO_hash (GNUNET_REST_GNS_PARAM_RECORD_TYPE,
strlen (GNUNET_REST_GNS_PARAM_RECORD_TYPE),
&key);
- if ( GNUNET_YES
- == GNUNET_CONTAINER_multihashmap_contains (con_handle->url_param_map,
- &key))
+ if (GNUNET_YES ==
+ GNUNET_CONTAINER_multihashmap_contains (con_handle->url_param_map, &key))
{
- record_type = GNUNET_CONTAINER_multihashmap_get
(con_handle->url_param_map, &key);
- handle->record_type = GNUNET_GNSRECORD_typename_to_number(record_type);
+ record_type =
+ GNUNET_CONTAINER_multihashmap_get (con_handle->url_param_map, &key);
+ handle->record_type = GNUNET_GNSRECORD_typename_to_number (record_type);
}
- if(UINT32_MAX == handle->record_type)
+ if (UINT32_MAX == handle->record_type)
{
handle->record_type = GNUNET_GNSRECORD_TYPE_ANY;
}
@@ -298,7 +324,6 @@ get_gns_cont (struct GNUNET_REST_RequestHandle *con_handle,
}
-
/**
* Respond to OPTIONS request
*
@@ -308,7 +333,7 @@ get_gns_cont (struct GNUNET_REST_RequestHandle *con_handle,
*/
static void
options_cont (struct GNUNET_REST_RequestHandle *con_handle,
- const char* url,
+ const char *url,
void *cls)
{
struct MHD_Response *resp;
@@ -316,11 +341,9 @@ options_cont (struct GNUNET_REST_RequestHandle *con_handle,
//independent of path return all options
resp = GNUNET_REST_create_response (NULL);
- MHD_add_response_header (resp,
- "Access-Control-Allow-Methods",
- allow_methods);
+ MHD_add_response_header (resp, "Access-Control-Allow-Methods",
allow_methods);
handle->proc (handle->proc_cls, resp, MHD_HTTP_OK);
- GNUNET_SCHEDULER_add_now(&cleanup_handle, handle);
+ GNUNET_SCHEDULER_add_now (&cleanup_handle, handle);
return;
}
@@ -334,16 +357,13 @@ static void
init_cont (struct RequestHandle *handle)
{
struct GNUNET_REST_RequestHandlerError err;
- static const struct GNUNET_REST_RequestHandler handlers[] = {
- {MHD_HTTP_METHOD_GET, GNUNET_REST_API_NS_GNS, &get_gns_cont},
- {MHD_HTTP_METHOD_OPTIONS, GNUNET_REST_API_NS_GNS, &options_cont},
- GNUNET_REST_HANDLER_END
- };
-
- if (GNUNET_NO == GNUNET_REST_handle_request (handle->rest_handle,
- handlers,
- &err,
- handle))
+ static const struct GNUNET_REST_RequestHandler handlers[] =
+ {{MHD_HTTP_METHOD_GET, GNUNET_REST_API_NS_GNS, &get_gns_cont},
+ {MHD_HTTP_METHOD_OPTIONS, GNUNET_REST_API_NS_GNS, &options_cont},
+ GNUNET_REST_HANDLER_END};
+
+ if (GNUNET_NO ==
+ GNUNET_REST_handle_request (handle->rest_handle, handlers, &err, handle))
{
handle->response_code = err.error_code;
GNUNET_SCHEDULER_add_now (&do_error, handle);
@@ -363,23 +383,28 @@ init_cont (struct RequestHandle *handle)
* @return GNUNET_OK if request accepted
*/
static void
-rest_process_request(struct GNUNET_REST_RequestHandle *rest_handle,
- GNUNET_REST_ResultProcessor proc,
- void *proc_cls)
+rest_process_request (struct GNUNET_REST_RequestHandle *rest_handle,
+ GNUNET_REST_ResultProcessor proc,
+ void *proc_cls)
{
struct RequestHandle *handle = GNUNET_new (struct RequestHandle);
handle->response_code = 0;
+ handle->timeout =
+ GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 60);
handle->proc_cls = proc_cls;
handle->proc = proc;
handle->rest_handle = rest_handle;
handle->url = GNUNET_strdup (rest_handle->url);
- if (handle->url[strlen (handle->url)-1] == '/')
- handle->url[strlen (handle->url)-1] = '\0';
+ if (handle->url[strlen (handle->url) - 1] == '/')
+ handle->url[strlen (handle->url) - 1] = '\0';
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Connecting...\n");
handle->gns = GNUNET_GNS_connect (cfg);
- init_cont(handle);
+ init_cont (handle);
+
+ handle->timeout_task =
+ GNUNET_SCHEDULER_add_delayed (handle->timeout, &do_timeout, handle);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Connected\n");
}
@@ -399,7 +424,7 @@ libgnunet_plugin_rest_gns_init (void *cls)
cfg = cls;
if (NULL != plugin.cfg)
- return NULL; /* can only initialize once! */
+ return NULL; /* can only initialize once! */
memset (&plugin, 0, sizeof (struct Plugin));
plugin.cfg = cfg;
api = GNUNET_new (struct GNUNET_REST_Plugin);
@@ -414,8 +439,7 @@ libgnunet_plugin_rest_gns_init (void *cls)
MHD_HTTP_METHOD_DELETE,
MHD_HTTP_METHOD_OPTIONS);
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- _("Gns REST API initialized\n"));
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, _ ("Gns REST API initialized\n"));
return api;
}
@@ -435,8 +459,7 @@ libgnunet_plugin_rest_gns_done (void *cls)
GNUNET_free_non_null (allow_methods);
GNUNET_free (api);
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Gns REST plugin is finished\n");
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Gns REST plugin is finished\n");
return NULL;
}
--
To stop receiving notification emails like this one, please contact
address@hidden.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] [gnunet] branch master updated: revert timeout removal,
gnunet <=