aboutsummaryrefslogtreecommitdiff
path: root/src/namestore
diff options
context:
space:
mode:
authorSchanzenbach, Martin <mschanzenbach@posteo.de>2020-05-09 20:50:48 +0200
committerSchanzenbach, Martin <mschanzenbach@posteo.de>2020-05-09 20:50:48 +0200
commitd528c78ecfa75878e1bb4ea605bcafbbb2e63371 (patch)
tree8f1987fd32cb1a68eb0358c8466613a6d7000c79 /src/namestore
parent3075891e02b15a7625d13a946324eb9873e0f0d3 (diff)
downloadgnunet-d528c78ecfa75878e1bb4ea605bcafbbb2e63371.tar.gz
gnunet-d528c78ecfa75878e1bb4ea605bcafbbb2e63371.zip
add response headers, add replace api to namestore
Diffstat (limited to 'src/namestore')
-rw-r--r--src/namestore/plugin_rest_namestore.c74
1 files changed, 65 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
127enum 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 */
640void 659void
641namestore_add (struct GNUNET_REST_RequestHandle *con_handle, 660namestore_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 */
751void
752namestore_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 */
769void
770namestore_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 };