X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Finclude%2Fgnunet_rest_lib.h;h=392ef688038fa5d1bb6c5232209d67209388a7ae;hb=418bf5953acdba2e325528d739fb115b51b7141f;hp=a1274dbfd4a4aedfd17a576d3fd280bd7cd416ba;hpb=219e64fe613c47eab4c143791128c2b453be3bf8;p=oweals%2Fgnunet.git diff --git a/src/include/gnunet_rest_lib.h b/src/include/gnunet_rest_lib.h index a1274dbfd..392ef6880 100644 --- a/src/include/gnunet_rest_lib.h +++ b/src/include/gnunet_rest_lib.h @@ -1,21 +1,19 @@ /* This file is part of GNUnet - Copyright (C) 2010-2015 Christian Grothoff (and other contributing authors) + Copyright (C) 2010-2015 GNUnet e.V. - GNUnet is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published - by the Free Software Foundation; either version 3, or (at your - option) any later version. + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. GNUnet is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with GNUnet; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . */ /** @@ -32,28 +30,50 @@ #define GNUNET_REST_LIB_H #include "gnunet_util_lib.h" -#include "microhttpd.h" -#include - -#define GNUNET_REST_JSONAPI_KEY_DATA "data" - -#define GNUNET_REST_JSONAPI_KEY_ID "id" - -#define GNUNET_REST_JSONAPI_KEY_TYPE "type" +#include #define GNUNET_REST_HANDLER_END {NULL, NULL, NULL} -struct RestConnectionDataHandle +struct GNUNET_REST_RequestHandle { + /** + * Map of url parameters + */ struct GNUNET_CONTAINER_MultiHashMap *url_param_map; + + /** + * Map of headers + */ + struct GNUNET_CONTAINER_MultiHashMap *header_param_map; + + /** + * The HTTP method as MHD value (see microhttpd.h) + */ const char *method; + + /** + * The url as string + */ const char *url; + + /** + * The POST data + */ const char *data; + + /** + * The POST data size + */ size_t data_size; +}; +struct GNUNET_REST_RequestHandlerError +{ + int error_code; + char* error_text; }; -struct GNUNET_REST_RestConnectionHandler +struct GNUNET_REST_RequestHandler { /** * Http method to handle @@ -68,7 +88,7 @@ struct GNUNET_REST_RestConnectionHandler /** * callback handler */ - void (*proc) (struct RestConnectionDataHandle *handle, + void (*proc) (struct GNUNET_REST_RequestHandle *handle, const char *url, void *cls); @@ -86,191 +106,30 @@ typedef void (*GNUNET_REST_ResultProcessor) (void *cls, struct MHD_Response *resp, int status); - -/** - * Resource structs for JSON API - */ -struct JsonApiResource; - -/** - * Responses for JSON API - */ -struct JsonApiObject; - -/** - * Create a JSON API resource - * - * @param type the JSON API resource type - * @param id the JSON API resource id - * @return a new JSON API resource or NULL on error. - */ -struct JsonApiResource* -GNUNET_REST_jsonapi_resource_new (const char *type, const char *id); - -/** - * Delete a JSON API resource - * - * @param res the JSON resource - * @param result Pointer where the resource should be stored - */ -void -GNUNET_REST_jsonapi_resource_delete (struct JsonApiResource *resource); - -/** - * Add a JSON API attribute - * - * @param res the JSON resource - * @param key the key for the attribute - * @param json the json_t attribute to add - * @return #GNUNET_OK if added successfully - * #GNUNET_SYSERR if not - */ -int -GNUNET_REST_jsonapi_resource_add_attr (const struct JsonApiResource *resource, - const char* key, - json_t *json); -/** - * Read a JSON API attribute - * - * @param res the JSON resource - * @param key the key for the attribute - * @return the json attr - */ -json_t* -GNUNET_REST_jsonapi_resource_read_attr (const struct JsonApiResource *resource, - const char* key); - - -/** - * Check a JSON API resource id - * - * @param res the JSON resource - * @param id the expected id - * @return GNUNET_YES if id matches - */ -int -GNUNET_REST_jsonapi_resource_check_id (const struct JsonApiResource *resource, - const char* id); - - -/** - * Check a JSON API resource type - * - * @param res the JSON resource - * @param type the expected type - * @return GNUNET_YES if id matches - */ -int -GNUNET_REST_jsonapi_resource_check_type (const struct JsonApiResource *resource, - const char* type); - - -/** - * Create a JSON API primary data - * - * @param type the JSON API resource type - * @param id the JSON API resource id - * @return a new JSON API resource or NULL on error. - */ -struct JsonApiObject* -GNUNET_REST_jsonapi_object_new (); - - -/** - * Create a JSON API primary data from a string - * - * @param data the string of the JSON API data - * @return a new JSON API resource or NULL on error. - */ -struct JsonApiObject* -GNUNET_REST_jsonapi_object_parse (const char* data); - - -/** - * Delete a JSON API primary data - * - * @param type the JSON API resource type - * @param id the JSON API resource id - * @return a new JSON API resource or NULL on error. - */ -void -GNUNET_REST_jsonapi_object_delete (struct JsonApiObject *resp); - -/** - * Add a JSON API resource to primary data - * - * @param data The JSON API data to add to - * @param res the JSON API resource to add - * @return the new number of resources - */ -void -GNUNET_REST_jsonapi_object_resource_add (struct JsonApiObject *resp, - struct JsonApiResource *res); -/** - * Get a JSON API object resource count - * - * @param resp the JSON API object - * @return the number of resources - */ -int -GNUNET_REST_jsonapi_object_resource_count (struct JsonApiObject *resp); - -/** - * Get a JSON API object resource num - * - * @param resp the JSON API object - * @param num the number of the resource - * @return the resource - */ -struct JsonApiResource* -GNUNET_REST_jsonapi_object_get_resource (struct JsonApiObject *resp, int num); - - -/** - * Add a JSON API resource to primary data - * - * @param resp The JSON API data to add to - * @param res the JSON API resource to add - * @return the new number of resources - */ -void -GNUNET_REST_jsonapi_data_resource_remove (struct JsonApiObject *resp, - struct JsonApiResource *res); - -/** - * String serialze jsonapi primary data - * - * @param data the JSON API primary data - * @param result where to store the result - * @return GNUNET_SYSERR on error else GNUNET_OK - */ -int -GNUNET_REST_jsonapi_data_serialize (const struct JsonApiObject *resp, - char **result); - /** * Check if namespace is in URL. * * @param url URL to check * @param namespace namespace to check against - * @retun GNUNET_YES if namespace matches + * @return GNUNET_YES if namespace matches */ int GNUNET_REST_namespace_match (const char *url, const char *namespace); /** - * Create JSON API MHD response + * Create REST MHD response * - * @param data JSON result - * @retun MHD response + * @param data result + * @return MHD response */ struct MHD_Response* -GNUNET_REST_create_json_response (const char *data); +GNUNET_REST_create_response (const char *data); int -GNUNET_REST_handle_request (struct RestConnectionDataHandle *conn, - const struct GNUNET_REST_RestConnectionHandler *handlers, +GNUNET_REST_handle_request (struct GNUNET_REST_RequestHandle *conn, + const struct GNUNET_REST_RequestHandler *handlers, + struct GNUNET_REST_RequestHandlerError *err, void *cls);