X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fgns%2Fplugin_rest_gns.c;h=1d215b6a495bf81adef75d4d82ec4953e3b0083e;hb=620bdac536dff4b17317d9d20b8a6840836d6490;hp=718a9b29bb74e06f3cbca6169a84df5e6a942c35;hpb=493305a0d4e9d7f9bdc35fabfd8027a487586e47;p=oweals%2Fgnunet.git diff --git a/src/gns/plugin_rest_gns.c b/src/gns/plugin_rest_gns.c index 718a9b29b..1d215b6a4 100644 --- a/src/gns/plugin_rest_gns.c +++ b/src/gns/plugin_rest_gns.c @@ -33,6 +33,7 @@ #include #include #include +#include #include #define GNUNET_REST_API_NS_GNS "/gns" @@ -227,7 +228,7 @@ do_error (void *cls) struct LookupHandle *handle = cls; struct MHD_Response *resp; - resp = GNUNET_REST_create_json_response (NULL); + resp = GNUNET_REST_create_response (NULL); handle->proc (handle->proc_cls, resp, handle->response_code); cleanup_handle (handle); } @@ -258,7 +259,7 @@ gnsrecord_to_json (const struct GNUNET_GNSRECORD_Data *rd) (int) rd->record_type); return NULL; } - record_obj = json_object(); + record_obj = json_object (); json_object_set_new (record_obj, "type", json_string (typename)); json_object_set_new (record_obj, "value", json_string (string_val)); GNUNET_free (string_val); @@ -295,7 +296,7 @@ process_lookup_result (void *cls, uint32_t rd_count, { struct LookupHandle *handle = cls; struct MHD_Response *resp; - struct GNUNET_JSONAPI_Object *json_object; + struct GNUNET_JSONAPI_Document *json_document; struct GNUNET_JSONAPI_Resource *json_resource; uint32_t i; char *result; @@ -303,7 +304,7 @@ process_lookup_result (void *cls, uint32_t rd_count, json_t *record_obj; result_array = json_array(); - json_object = GNUNET_JSONAPI_object_new (); + json_document = GNUNET_JSONAPI_document_new (); json_resource = GNUNET_JSONAPI_resource_new (GNUNET_REST_JSONAPI_GNS_TYPEINFO, handle->name); handle->lookup_request = NULL; for (i=0; iproc (handle->proc_cls, resp, MHD_HTTP_OK); GNUNET_free (result); cleanup_handle (handle); @@ -335,10 +336,9 @@ process_lookup_result (void *cls, uint32_t rd_count, * identified by the given public key and the shorten zone. * * @param pkey public key to use for the zone, can be NULL - * @param shorten_key private key used for shortening, can be NULL */ static void -lookup_with_keys (struct LookupHandle *handle, const struct GNUNET_CRYPTO_EcdsaPrivateKey *shorten_key) +lookup_with_public_key (struct LookupHandle *handle) { if (UINT32_MAX == handle->type) { @@ -353,7 +353,6 @@ lookup_with_keys (struct LookupHandle *handle, const struct GNUNET_CRYPTO_EcdsaP &handle->pkey, handle->type, handle->options, - shorten_key, &process_lookup_result, handle); } @@ -364,55 +363,6 @@ lookup_with_keys (struct LookupHandle *handle, const struct GNUNET_CRYPTO_EcdsaP } } -/** - * Method called to with the ego we are to use for shortening - * during the lookup. - * - * @param cls closure contains the public key to use - * @param ego ego handle, NULL if not found - * @param ctx context for application to store data for this ego - * (during the lifetime of this process, initially NULL) - * @param name name assigned by the user for this ego, - * NULL if the user just deleted the ego and it - * must thus no longer be used - */ -static void -identity_shorten_cb (void *cls, - struct GNUNET_IDENTITY_Ego *ego, - void **ctx, - const char *name) -{ - struct LookupHandle *handle = cls; - - handle->id_op = NULL; - if (NULL == ego) - lookup_with_keys (handle, NULL); - else - lookup_with_keys (handle, - GNUNET_IDENTITY_ego_get_private_key (ego)); -} - -/** - * Perform the actual resolution, starting with the zone - * identified by the given public key. - * - * @param pkey public key to use for the zone - */ -static void -lookup_with_public_key (struct LookupHandle *handle) -{ - handle->pkeym = handle->pkey; - GNUNET_break (NULL == handle->id_op); - handle->id_op = GNUNET_IDENTITY_get (handle->identity, - "gns-short", - &identity_shorten_cb, - handle); - if (NULL == handle->id_op) - { - GNUNET_break (0); - lookup_with_keys (handle, NULL); - } -} /** * Method called to with the ego we are to use for the lookup, @@ -443,6 +393,7 @@ identity_zone_cb (void *cls, json_decref(handle->json_root); } + /** * Method called to with the ego we are to use for the lookup, * when the ego is the one for the default master zone. @@ -472,7 +423,8 @@ identity_master_cb (void *cls, GNUNET_SCHEDULER_add_now (&do_error, handle); return; } - GNUNET_IDENTITY_ego_get_public_key (ego, &handle->pkey); + GNUNET_IDENTITY_ego_get_public_key (ego, + &handle->pkey); /* main name is our own master zone, do no look for that in the DHT */ handle->options = GNUNET_GNS_LO_LOCAL_MASTER; /* if the name is of the form 'label.gnu', never go to the DHT */ @@ -514,6 +466,7 @@ parse_url (const char *url, struct LookupHandle *handle) return GNUNET_OK; } + static void get_gns_cont (struct GNUNET_REST_RequestHandle *conndata_handle, const char* url, @@ -578,6 +531,7 @@ get_gns_cont (struct GNUNET_REST_RequestHandle *conndata_handle, { handle->pkey_str = GNUNET_CONTAINER_multihashmap_get (conndata_handle->url_param_map, &key); + GNUNET_assert (NULL != handle->pkey_str); if (GNUNET_OK != GNUNET_CRYPTO_ecdsa_public_key_from_string (handle->pkey_str, strlen(handle->pkey_str), @@ -639,7 +593,7 @@ options_cont (struct GNUNET_REST_RequestHandle *con_handle, struct LookupHandle *handle = cls; //For GNS, independent of path return all options - resp = GNUNET_REST_create_json_response (NULL); + resp = GNUNET_REST_create_response (NULL); MHD_add_response_header (resp, "Access-Control-Allow-Methods", MHD_HTTP_METHOD_GET); @@ -658,14 +612,19 @@ options_cont (struct GNUNET_REST_RequestHandle *con_handle, * @param data body of the HTTP request (optional) * @param data_size length of the body * @param proc callback function for the result - * @param proc_cls closure for callback function - * @return GNUNET_OK if request accepted + * @param proc_cls closure for @a proc + * @return #GNUNET_OK if request accepted */ static void -rest_gns_process_request(struct GNUNET_REST_RequestHandle *conndata_handle, - GNUNET_REST_ResultProcessor proc, - void *proc_cls) +rest_gns_process_request (struct GNUNET_REST_RequestHandle *conndata_handle, + GNUNET_REST_ResultProcessor proc, + void *proc_cls) { + 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 + }; struct LookupHandle *handle = GNUNET_new (struct LookupHandle); struct GNUNET_REST_RequestHandlerError err; @@ -674,12 +633,6 @@ rest_gns_process_request(struct GNUNET_REST_RequestHandle *conndata_handle, handle->proc = proc; handle->rest_handle = conndata_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_JSONAPI_handle_request (conndata_handle, handlers, &err,