diff options
author | Schanzenbach, Martin <mschanzenbach@posteo.de> | 2020-05-09 20:50:48 +0200 |
---|---|---|
committer | Schanzenbach, Martin <mschanzenbach@posteo.de> | 2020-05-09 20:50:48 +0200 |
commit | d528c78ecfa75878e1bb4ea605bcafbbb2e63371 (patch) | |
tree | 8f1987fd32cb1a68eb0358c8466613a6d7000c79 | |
parent | 3075891e02b15a7625d13a946324eb9873e0f0d3 (diff) | |
download | gnunet-d528c78ecfa75878e1bb4ea605bcafbbb2e63371.tar.gz gnunet-d528c78ecfa75878e1bb4ea605bcafbbb2e63371.zip |
add response headers, add replace api to namestore
-rw-r--r-- | src/namestore/plugin_rest_namestore.c | 74 | ||||
-rw-r--r-- | src/reclaim/plugin_rest_reclaim.c | 1 |
2 files changed, 66 insertions, 9 deletions
diff --git a/src/namestore/plugin_rest_namestore.c b/src/namestore/plugin_rest_namestore.c index 20b253895..4184d93a1 100644 --- a/src/namestore/plugin_rest_namestore.c +++ b/src/namestore/plugin_rest_namestore.c | |||
@@ -123,6 +123,13 @@ struct EgoEntry | |||
123 | struct GNUNET_IDENTITY_Ego *ego; | 123 | struct GNUNET_IDENTITY_Ego *ego; |
124 | }; | 124 | }; |
125 | 125 | ||
126 | |||
127 | enum UpdateStrategy | ||
128 | { | ||
129 | UPDATE_STRATEGY_REPLACE, | ||
130 | UPDATE_STRATEGY_APPEND | ||
131 | }; | ||
132 | |||
126 | /** | 133 | /** |
127 | * The request handle | 134 | * The request handle |
128 | */ | 135 | */ |
@@ -139,6 +146,11 @@ struct RequestHandle | |||
139 | uint32_t record_type; | 146 | uint32_t record_type; |
140 | 147 | ||
141 | /** | 148 | /** |
149 | * How to update the record set | ||
150 | */ | ||
151 | enum UpdateStrategy update_strategy; | ||
152 | |||
153 | /** | ||
142 | * Records to store | 154 | * Records to store |
143 | */ | 155 | */ |
144 | struct GNUNET_GNSRECORD_Data *rd; | 156 | struct GNUNET_GNSRECORD_Data *rd; |
@@ -329,6 +341,7 @@ do_error (void *cls) | |||
329 | handle->response_code = MHD_HTTP_INTERNAL_SERVER_ERROR; | 341 | handle->response_code = MHD_HTTP_INTERNAL_SERVER_ERROR; |
330 | response = json_dumps (json_error, 0); | 342 | response = json_dumps (json_error, 0); |
331 | resp = GNUNET_REST_create_response (response); | 343 | resp = GNUNET_REST_create_response (response); |
344 | MHD_add_response_header (resp, "Content-Type", "application/json"); | ||
332 | handle->proc (handle->proc_cls, resp, handle->response_code); | 345 | handle->proc (handle->proc_cls, resp, handle->response_code); |
333 | json_decref (json_error); | 346 | json_decref (json_error); |
334 | GNUNET_free (response); | 347 | GNUNET_free (response); |
@@ -476,6 +489,7 @@ namestore_list_finished (void *cls) | |||
476 | result_str = json_dumps (handle->resp_object, 0); | 489 | result_str = json_dumps (handle->resp_object, 0); |
477 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Result %s\n", result_str); | 490 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Result %s\n", result_str); |
478 | resp = GNUNET_REST_create_response (result_str); | 491 | resp = GNUNET_REST_create_response (result_str); |
492 | MHD_add_response_header (resp, "Content-Type", "application/json"); | ||
479 | handle->proc (handle->proc_cls, resp, MHD_HTTP_OK); | 493 | handle->proc (handle->proc_cls, resp, MHD_HTTP_OK); |
480 | GNUNET_free_non_null (result_str); | 494 | GNUNET_free_non_null (result_str); |
481 | GNUNET_SCHEDULER_add_now (&cleanup_handle, handle); | 495 | GNUNET_SCHEDULER_add_now (&cleanup_handle, handle); |
@@ -609,15 +623,20 @@ ns_lookup_cb (void *cls, | |||
609 | { | 623 | { |
610 | struct RequestHandle *handle = cls; | 624 | struct RequestHandle *handle = cls; |
611 | struct GNUNET_GNSRECORD_Data rd_new[rd_count + handle->rd_count]; | 625 | struct GNUNET_GNSRECORD_Data rd_new[rd_count + handle->rd_count]; |
626 | int i = 0; | ||
627 | int j = 0; | ||
612 | 628 | ||
613 | for (int i = 0; i < rd_count; i++) | 629 | if (UPDATE_STRATEGY_APPEND == handle->update_strategy) |
614 | rd_new[i] = rd[i]; | 630 | { |
615 | for (int j = 0; j < handle->rd_count; j++) | 631 | for (i = 0; i < rd_count; i++) |
616 | rd_new[rd_count + j] = handle->rd[j]; | 632 | rd_new[i] = rd[i]; |
633 | } | ||
634 | for (j = 0; j < handle->rd_count; j++) | ||
635 | rd_new[i + j] = handle->rd[j]; | ||
617 | handle->add_qe = GNUNET_NAMESTORE_records_store (handle->ns_handle, | 636 | handle->add_qe = GNUNET_NAMESTORE_records_store (handle->ns_handle, |
618 | handle->zone_pkey, | 637 | handle->zone_pkey, |
619 | handle->record_name, | 638 | handle->record_name, |
620 | rd_count + handle->rd_count, | 639 | i + j, |
621 | rd_new, | 640 | rd_new, |
622 | &create_finished, | 641 | &create_finished, |
623 | handle); | 642 | handle); |
@@ -631,16 +650,16 @@ ns_lookup_cb (void *cls, | |||
631 | 650 | ||
632 | 651 | ||
633 | /** | 652 | /** |
634 | * Handle namestore POST request | 653 | * Handle namestore POST/PUT request |
635 | * | 654 | * |
636 | * @param con_handle the connection handle | 655 | * @param con_handle the connection handle |
637 | * @param url the url | 656 | * @param url the url |
638 | * @param cls the RequestHandle | 657 | * @param cls the RequestHandle |
639 | */ | 658 | */ |
640 | void | 659 | void |
641 | namestore_add (struct GNUNET_REST_RequestHandle *con_handle, | 660 | namestore_add_or_update (struct GNUNET_REST_RequestHandle *con_handle, |
642 | const char *url, | 661 | const char *url, |
643 | void *cls) | 662 | void *cls) |
644 | { | 663 | { |
645 | struct RequestHandle *handle = cls; | 664 | struct RequestHandle *handle = cls; |
646 | struct EgoEntry *ego_entry; | 665 | struct EgoEntry *ego_entry; |
@@ -723,6 +742,42 @@ namestore_add (struct GNUNET_REST_RequestHandle *con_handle, | |||
723 | 742 | ||
724 | 743 | ||
725 | /** | 744 | /** |
745 | * Handle namestore PUT request | ||
746 | * | ||
747 | * @param con_handle the connection handle | ||
748 | * @param url the url | ||
749 | * @param cls the RequestHandle | ||
750 | */ | ||
751 | void | ||
752 | namestore_update (struct GNUNET_REST_RequestHandle *con_handle, | ||
753 | const char *url, | ||
754 | void *cls) | ||
755 | { | ||
756 | struct RequestHandle *handle = cls; | ||
757 | handle->update_strategy = UPDATE_STRATEGY_REPLACE; | ||
758 | namestore_add_or_update (con_handle, url, cls); | ||
759 | } | ||
760 | |||
761 | |||
762 | /** | ||
763 | * Handle namestore POST request | ||
764 | * | ||
765 | * @param con_handle the connection handle | ||
766 | * @param url the url | ||
767 | * @param cls the RequestHandle | ||
768 | */ | ||
769 | void | ||
770 | namestore_add (struct GNUNET_REST_RequestHandle *con_handle, | ||
771 | const char *url, | ||
772 | void *cls) | ||
773 | { | ||
774 | struct RequestHandle *handle = cls; | ||
775 | handle->update_strategy = UPDATE_STRATEGY_APPEND; | ||
776 | namestore_add_or_update (con_handle, url, cls); | ||
777 | } | ||
778 | |||
779 | |||
780 | /** | ||
726 | * Handle namestore DELETE request | 781 | * Handle namestore DELETE request |
727 | * | 782 | * |
728 | * @param con_handle the connection handle | 783 | * @param con_handle the connection handle |
@@ -823,6 +878,7 @@ init_cont (struct RequestHandle *handle) | |||
823 | static const struct GNUNET_REST_RequestHandler handlers[] = | 878 | static const struct GNUNET_REST_RequestHandler handlers[] = |
824 | { { MHD_HTTP_METHOD_GET, GNUNET_REST_API_NS_NAMESTORE, &namestore_get }, | 879 | { { MHD_HTTP_METHOD_GET, GNUNET_REST_API_NS_NAMESTORE, &namestore_get }, |
825 | { MHD_HTTP_METHOD_POST, GNUNET_REST_API_NS_NAMESTORE, &namestore_add }, | 880 | { MHD_HTTP_METHOD_POST, GNUNET_REST_API_NS_NAMESTORE, &namestore_add }, |
881 | { MHD_HTTP_METHOD_PUT, GNUNET_REST_API_NS_NAMESTORE, &namestore_update }, | ||
826 | { MHD_HTTP_METHOD_DELETE, GNUNET_REST_API_NS_NAMESTORE, &namestore_delete }, | 882 | { MHD_HTTP_METHOD_DELETE, GNUNET_REST_API_NS_NAMESTORE, &namestore_delete }, |
827 | { MHD_HTTP_METHOD_OPTIONS, GNUNET_REST_API_NS_NAMESTORE, &options_cont }, | 883 | { MHD_HTTP_METHOD_OPTIONS, GNUNET_REST_API_NS_NAMESTORE, &options_cont }, |
828 | GNUNET_REST_HANDLER_END }; | 884 | GNUNET_REST_HANDLER_END }; |
diff --git a/src/reclaim/plugin_rest_reclaim.c b/src/reclaim/plugin_rest_reclaim.c index 0246e289a..0800e5b20 100644 --- a/src/reclaim/plugin_rest_reclaim.c +++ b/src/reclaim/plugin_rest_reclaim.c | |||
@@ -352,6 +352,7 @@ finished_cont (void *cls, int32_t success, const char *emsg) | |||
352 | struct MHD_Response *resp; | 352 | struct MHD_Response *resp; |
353 | 353 | ||
354 | resp = GNUNET_REST_create_response (emsg); | 354 | resp = GNUNET_REST_create_response (emsg); |
355 | MHD_add_response_header (resp, "Content-Type", "application/json"); | ||
355 | if (GNUNET_OK != success) | 356 | if (GNUNET_OK != success) |
356 | { | 357 | { |
357 | GNUNET_SCHEDULER_add_now (&do_error, handle); | 358 | GNUNET_SCHEDULER_add_now (&do_error, handle); |