From 14b554f620ee1d09164d59f7ac725d58fa77378d Mon Sep 17 00:00:00 2001 From: Arie Peterson <arie@greenhost.nl> Date: Tue, 13 Jun 2017 14:28:20 +0200 Subject: [PATCH] Add includes and libraries --- includes/orcania.h | 215 ++++++ includes/ulfius.h | 1224 +++++++++++++++++++++++++++++++++++ includes/yder.h | 60 ++ libraries/liborcania.so | Bin 0 -> 18648 bytes libraries/liborcania.so.1.1 | Bin 0 -> 18648 bytes libraries/libulfius.so | Bin 0 -> 63088 bytes libraries/libulfius.so.2.1 | Bin 0 -> 63088 bytes libraries/libyder.so | Bin 0 -> 11408 bytes libraries/libyder.so.2.0 | Bin 0 -> 11408 bytes 9 files changed, 1499 insertions(+) create mode 100644 includes/orcania.h create mode 100644 includes/ulfius.h create mode 100644 includes/yder.h create mode 100755 libraries/liborcania.so create mode 100755 libraries/liborcania.so.1.1 create mode 100755 libraries/libulfius.so create mode 100755 libraries/libulfius.so.2.1 create mode 100755 libraries/libyder.so create mode 100755 libraries/libyder.so.2.0 diff --git a/includes/orcania.h b/includes/orcania.h new file mode 100644 index 0000000..c1f3599 --- /dev/null +++ b/includes/orcania.h @@ -0,0 +1,215 @@ +/** + * + * Orcania library + * + * Different functions for different purposes but that can be shared between + * other projects + * + */ + +#ifndef __ORCANIA_H__ +#define __ORCANIA_H__ + +#ifndef U_DISABLE_JANSSON +#include <jansson.h> +#endif + +#define ORCANIA_VERSION 1.1 +/** + * char * str_replace(const char * source, char * old, char * new) + * replace all occurences of old by new in the string source + * return a char * with the new value + * return NULL on error + * returned value must be free'd after use + */ +char * str_replace(const char * source, const char * str_old, const char * str_new); + +/** + * o_strdup + * a modified strdup function that don't crash when source is NULL, instead return NULL + * Returned value must be free'd after use + */ +char * o_strdup(const char * source); + +/** + * o_strndup + * a modified strndup function that don't crash when source is NULL, instead return NULL + * Returned value must be free'd after use + */ +char * o_strndup(const char * source, size_t len); + +/** + * o_strcmp + * a modified strcmp function that don't crash when p1 is NULL or p2 us NULL + */ +int o_strcmp(const char * p1, const char * p2); + +/** + * o_strncmp + * a modified strncmp function that don't crash when p1 is NULL or p2 us NULL + */ +int o_strncmp(const char * p1, const char * p2, size_t n); + +/** + * o_strcpy + * a modified strcpy function that don't crash when p1 is NULL or p2 us NULL + */ +char * o_strcpy(char * p1, const char * p2); + +/** + * o_strncpy + * a modified strncpy function that don't crash when p1 is NULL or p2 us NULL + */ +char * o_strncpy(char * p1, const char * p2, size_t n); + +/** + * o_strcasecmp + * a modified strcasecmp function that don't crash when p1 is NULL or p2 us NULL + */ +int o_strcasecmp(const char * p1, const char * p2); + +/** + * o_strncasecmp + * a modified strncasecmp function that don't crash when p1 is NULL or p2 us NULL + */ +int o_strncasecmp(const char * p1, const char * p2, size_t n); + +/** + * o_strstr + * a modified strstr function that don't crash when haystack is NULL or needle us NULL + */ +char * o_strstr(const char * haystack, const char * needle); + +/** + * o_strnstr + * a modified strnstr function that don't crash when haystack is NULL or needle us NULL + */ +char * o_strnstr(const char * haystack, const char * needle, size_t len); + +/** + * o_strcasestr + * a modified strcasestr function that don't crash when haystack is NULL or needle us NULL + */ +char * o_strcasestr(const char * haystack, const char * needle); + +/** + * o_strchr + * a modified strchr function that don't crash when haystack is NULL + */ +char * o_strchr(const char * haystack, int c); + +/** + * o_strrchr + * a modified strrchr function that don't crash when haystack is NULL + */ +char * o_strrchr(const char * haystack, int c); + +/** + * o_strlen + * a modified version of strlen that don't crash when s is NULL + */ +size_t o_strlen(const char * s); + +/** + * char * msprintf(const char * message, ...) + * Implementation of sprintf that return a malloc'd char * with the string construction + * because life is too short to use 3 lines instead of 1 + * but don't forget to free the returned value after use! + */ +char * msprintf(const char * message, ...); + +/** + * Split a string into an array of strings using separator string + * return the number of elements to be returned, 0 on error + * if return_array is not NULL, set the returned array in it + * return_array is an array of char * ending with a NULL value + * return_array must be free'd after use + * you can use free_string_array to free return_array + */ +int split_string(const char * string, const char * separator, char *** return_array); + +/** + * Clean an array of strings + */ +void free_string_array(char ** array); + +/** + * Check if an array of string has a specified value + */ +int string_array_has_value(const char ** array, const char * needle); + +/** + * Check if an array of string has a specified trimmed value + */ +int string_array_has_trimmed_value(const char ** array, const char * needle); + +/** + * Remove string of beginning and ending whitespaces + */ +char * trimwhitespace(char * str); + +#ifndef U_DISABLE_JANSSON +/** + * json_t * json_search(json_t * haystack, json_t * needle) + * jansson library addon + * This function could be removed if y pull request is accepted in jansson official repository: + * https://github.com/akheron/jansson/pull/265 + * Look for an occurence of needle within haystack + * If needle is present in haystack, return the reference to the json_t * that is equal to needle + * If needle is not found, return NULL + */ +json_t * json_search(json_t * haystack, json_t * needle); + +/** + * Check if the result json object has a "result" element that is equal to value + */ +int check_result_value(json_t * result, const int value); +#endif + +/** + * Memory functions + */ +/* C89 allows these to be macros */ +#undef malloc +#undef realloc +#undef free + +typedef void *(*o_malloc_t)(size_t); +typedef void *(*o_realloc_t)(void *, size_t); +typedef void (*o_free_t)(void *); + +void * o_malloc(size_t size); +void * o_realloc(void * ptr, size_t size); +void o_free(void * ptr); +void o_set_alloc_funcs(o_malloc_t malloc_fn, o_realloc_t realloc_fn, o_free_t free_fn); +void o_get_alloc_funcs(o_malloc_t * malloc_fn, o_realloc_t * realloc_fn, o_free_t * free_fn); + +/** + * Base64 encode and decode functions + */ + +/** + * o_base64_encode - Base64 encode + * @src: Data to be encoded + * @len: Length of the data to be encoded + * @out: Pointer to output variable + * @out_len: Pointer to output length variable + * Returns: 1 on success, 0 on failure + * + * The nul terminator is not included in out_len. + */ +int o_base64_encode(const unsigned char * src, size_t len, unsigned char * out, size_t * out_len); + +/** + * o_base64_decode - Base64 decode + * @src: Data to be decoded + * @len: Length of the data to be decoded + * @out: Pointer to output variable + * @out_len: Pointer to output length variable + * Returns: 1 on success, 0 on failure + * + * The nul terminator is not included in out_len. + */ +int o_base64_decode(const unsigned char *src, size_t len, unsigned char * out, size_t * out_len); + +#endif diff --git a/includes/ulfius.h b/includes/ulfius.h new file mode 100644 index 0000000..f7da3eb --- /dev/null +++ b/includes/ulfius.h @@ -0,0 +1,1224 @@ +/** + * + * Ulfius Framework + * + * REST framework library + * + * ulfius.h: public structures and functions declarations + * + * Copyright 2015-2017 Nicolas Mora <mail@babelouest.org> + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; + * version 2.1 of the License. + * + * This library 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 this library. If not, see <http://www.gnu.org/licenses/>. + * + */ + +#ifndef __ULFIUS_H__ +#define __ULFIUS_H__ + +/** External dependencies **/ +#include <sys/poll.h> +#include <microhttpd.h> + +#if (MHD_VERSION < 0x00095300) && !defined(U_DISABLE_WEBSOCKET) + #define U_DISABLE_WEBSOCKET +#endif + +/** Angharad libraries **/ +#include <yder.h> +#include <orcania.h> + +#ifndef U_DISABLE_JANSSON +#include <jansson.h> +#endif + +#define ULFIUS_STREAM_BLOCK_SIZE_DEFAULT 1024 +#define U_STREAM_END MHD_CONTENT_READER_END_OF_STREAM +#define U_STREAM_ERROR MHD_CONTENT_READER_END_WITH_ERROR +#define U_STREAM_SIZE_UNKOWN MHD_SIZE_UNKNOWN + +#define U_OK 0 // No error +#define U_ERROR 1 // Error +#define U_ERROR_MEMORY 2 // Error in memory allocation +#define U_ERROR_PARAMS 3 // Error in input parameters +#define U_ERROR_LIBMHD 4 // Error in libmicrohttpd execution +#define U_ERROR_LIBCURL 5 // Error in libcurl execution +#define U_ERROR_NOT_FOUND 6 // Something was not found + +#define ULFIUS_VERSION 2.1 + +#define U_CALLBACK_CONTINUE 0 +#define U_CALLBACK_COMPLETE 1 +#define U_CALLBACK_UNAUTHORIZED 2 +#define U_CALLBACK_ERROR 3 + +/************* + * Structures + *************/ + +/** + * struct _u_map + */ +struct _u_map { + int nb_values; + char ** keys; + char ** values; + size_t * lengths; +}; + +/** + * struct _u_cookie + * the structure containing the response cookie parameters + */ +struct _u_cookie { + char * key; + char * value; + char * expires; + uint max_age; + char * domain; + char * path; + int secure; + int http_only; +}; + +/** + * + * Structure of request parameters + * + * Contains request data + * http_protocol: http protocol used (1.0 or 1.1) + * http_verb: http method (GET, POST, PUT, DELETE, etc.), use '*' to match all http methods + * http_url: url used to call this callback function or full url to call when used in a ulfius_send_http_request + * proxy: proxy address to use for outgoing connections, used by ulfius_send_http_request + * check_server_certificate: do not check server certificate and hostname if false (default true), used by ulfius_send_http_request + * timeout connection timeout used by ulfius_send_http_request, default is 0 + * client_address: IP address of the client + * auth_basic_user: basic authtication username + * auth_basic_password: basic authtication password + * map_url: map containing the url variables, both from the route and the ?key=value variables + * map_header: map containing the header variables + * map_cookie: map containing the cookie variables + * map_post_body: map containing the post body variables (if available) + * binary_body: pointer to raw body + * binary_body_length: length of raw body + * + */ +struct _u_request { + char * http_protocol; + char * http_verb; + char * http_url; + char * proxy; + int check_server_certificate; + long timeout; + struct sockaddr * client_address; + char * auth_basic_user; + char * auth_basic_password; + struct _u_map * map_url; + struct _u_map * map_header; + struct _u_map * map_cookie; + struct _u_map * map_post_body; + void * binary_body; + size_t binary_body_length; +}; + +/** + * + * Structure of response parameters + * + * Contains response data that must be set by the user + * status: HTTP status code (200, 404, 500, etc) + * protocol: HTTP Protocol sent + * map_header: map containing the header variables + * nb_cookies: number of cookies sent + * map_cookie: array of cookies sent + * auth_realm: realm to send to the client on authenticationb failed + * binary_body: a void * containing a raw binary content + * binary_body_length: the length of the binary_body + * stream_callback: callback function to stream data in response body + * stream_callback_free: callback function to free data allocated for streaming + * stream_size: size of the streamed data (U_STREAM_SIZE_UNKOWN if unknown) + * stream_block_size: size of each block to be streamed, set according to your system + * stream_user_data: user defined data that will be available in your callback stream functions + * websocket_handle: handle for websocket extension + * shared_data: any data shared between callback functions, must be allocated and freed by the callback functions + * + */ +struct _u_response { + long status; + char * protocol; + struct _u_map * map_header; + unsigned int nb_cookies; + struct _u_cookie * map_cookie; + char * auth_realm; + void * binary_body; + size_t binary_body_length; + ssize_t (* stream_callback) (void * stream_user_data, uint64_t offset, char * out_buf, size_t max); + void (* stream_callback_free) (void * stream_user_data); + uint64_t stream_size; + size_t stream_block_size; + void * stream_user_data; + void * websocket_handle; + void * shared_data; +}; + +/** + * + * Structure of an endpoint + * + * Contains all informations needed for an endpoint + * http_method: http verb (GET, POST, PUT, etc.) in upper case + * url_prefix: prefix for the url (optional) + * url_format: string used to define the endpoint format + * separate words with / + * to define a variable in the url, prefix it with @ or : + * example: /test/resource/:name/elements + * on an url_format that ends with '*', the rest of the url will not be tested + * priority: endpoint priority in descending order (0 is the higher priority) + * callback_function: a pointer to a function that will be executed each time the endpoint is called + * you must declare the function as described. + * user_data: a pointer to a data or a structure that will be available in callback_function + * + */ +struct _u_endpoint { + char * http_method; + char * url_prefix; + char * url_format; + uint priority; + int (* callback_function)(const struct _u_request * request, // Input parameters (set by the framework) + struct _u_response * response, // Output parameters (set by the user) + void * user_data); + void * user_data; +}; + +/** + * + * Structure of an instance + * + * Contains the needed data for an ulfius instance to work + * + * mhd_daemon: pointer to the libmicrohttpd daemon + * status: status of the current instance, status are U_STATUS_STOP, U_STATUS_RUNNING or U_STATUS_ERROR + * port: port number to listen to + * bind_address: ip address to listen to (optional) + * nb_endpoints: Number of available endpoints + * default_auth_realm: Default realm on authentication error + * endpoint_list: List of available endpoints + * default_endpoint: Default endpoint if no other endpoint match the current url + * default_headers: Default headers that will be added to all response->map_header + * max_post_param_size: maximum size for a post parameter, 0 means no limit, default 0 + * max_post_body_size: maximum size for the entire post body, 0 means no limit, default 0 + * + */ +struct _u_instance { + struct MHD_Daemon * mhd_daemon; + int status; + uint port; + struct sockaddr_in * bind_address; + int nb_endpoints; + char * default_auth_realm; + struct _u_endpoint * endpoint_list; + struct _u_endpoint * default_endpoint; + struct _u_map * default_headers; + size_t max_post_param_size; + size_t max_post_body_size; + void * websocket_handler; +}; + +/** + * Structures used to facilitate data manipulations (internal) + */ +struct connection_info_struct { + struct MHD_PostProcessor * post_processor; + int has_post_processor; + int callback_first_iteration; + struct _u_request * request; + size_t max_post_param_size; + struct _u_map map_url_initial; +}; + +/********************************** + * Instance functions declarations + **********************************/ + +/** + * ulfius_init_instance + * + * Initialize a struct _u_instance * with default values + * return U_OK on success + */ +int ulfius_init_instance(struct _u_instance * u_instance, uint port, struct sockaddr_in * bind_address, const char * default_auth_realm); + +/** + * ulfius_clean_instance + * + * Clean memory allocated by a struct _u_instance * + */ +void ulfius_clean_instance(struct _u_instance * u_instance); + +/** + * ulfius_start_framework + * Initializes the framework and run the webservice based on the parameters given + * + * u_instance: pointer to a struct _u_instance that describe its port and bind address + * return U_OK on success + */ +int ulfius_start_framework(struct _u_instance * u_instance); + +/** + * ulfius_start_secure_framework + * Initializes the framework and run the webservice based on the parameters given using an HTTPS connection + * + * u_instance: pointer to a struct _u_instance that describe its port and bind address + * key_pem: private key for the server + * cert_pem: server certificate + * return U_OK on success + */ +int ulfius_start_secure_framework(struct _u_instance * u_instance, const char * key_pem, const char * cert_pem); + +/** + * ulfius_stop_framework + * + * Stop the webservice + * u_instance: pointer to a struct _u_instance that describe its port and bind address + * return U_OK on success + */ +int ulfius_stop_framework(struct _u_instance * u_instance); + +/*********************************** + * Endpoints functions declarations + ***********************************/ + +/** + * Add a struct _u_endpoint * to the specified u_instance + * Can be done during the execution of the webservice for injection + * u_instance: pointer to a struct _u_instance that describe its port and bind address + * u_endpoint: pointer to a struct _u_endpoint that will be copied in the u_instance endpoint_list + * return U_OK on success + */ +int ulfius_add_endpoint(struct _u_instance * u_instance, const struct _u_endpoint * u_endpoint); + +/** + * Add a struct _u_endpoint * to the specified u_instance with its values specified + * Can be done during the execution of the webservice for injection + * u_instance: pointer to a struct _u_instance that describe its port and bind address + * http_method: http verb (GET, POST, PUT, etc.) in upper case + * url_prefix: prefix for the url (optional) + * url_format: string used to define the endpoint format + * separate words with / + * to define a variable in the url, prefix it with @ or : + * example: /test/resource/:name/elements + * on an url_format that ends with '*', the rest of the url will not be tested + * priority: endpoint priority in descending order (0 is the higher priority) + * callback_function: a pointer to a function that will be executed each time the endpoint is called + * you must declare the function as described. + * user_data: a pointer to a data or a structure that will be available in callback_function + * return U_OK on success + */ +int ulfius_add_endpoint_by_val(struct _u_instance * u_instance, + const char * http_method, + const char * url_prefix, + const char * url_format, + uint priority, + int (* callback_function)(const struct _u_request * request, // Input parameters (set by the framework) + struct _u_response * response, // Output parameters (set by the user) + void * user_data), + void * user_data); + +/** + * Add a struct _u_endpoint * list to the specified u_instance + * Can be done during the execution of the webservice for injection + * u_instance: pointer to a struct _u_instance that describe its port and bind address + * u_endpoint_list: pointer to an array of struct _u_endpoint ending with a ulfius_empty_endpoint() that will be copied in the u_instance endpoint_list + * return U_OK on success + */ +int ulfius_add_endpoint_list(struct _u_instance * u_instance, const struct _u_endpoint ** u_endpoint_list); + +/** + * Remove a struct _u_endpoint * from the specified u_instance + * Can be done during the execution of the webservice for injection + * u_instance: pointer to a struct _u_instance that describe its port and bind address + * u_endpoint: pointer to a struct _u_endpoint that will be removed in the u_instance endpoint_list + * The parameters _u_endpoint.http_method, _u_endpoint.url_prefix and _u_endpoint.url_format are strictly compared for the match + * If no endpoint is found, return U_ERROR_NOT_FOUND + * return U_OK on success + */ +int ulfius_remove_endpoint(struct _u_instance * u_instance, const struct _u_endpoint * u_endpoint); + +/** + * ulfius_set_default_endpoint + * Set the default endpoint + * This endpoint will be called if no endpoint match the url called + * u_instance: pointer to a struct _u_instance that describe its port and bind address + * auth_function: a pointer to a function that will be executed prior to the callback for authentication + * you must declare the function as described. + * auth_data: a pointer to a data or a structure that will be available in auth_function + * auth_realm: realm value for authentication + * callback_function: a pointer to a function that will be executed each time the endpoint is called + * you must declare the function as described. + * user_data: a pointer to a data or a structure that will be available in callback_function + * to remove a default endpoint, call ulfius_set_default_endpoint with NULL parameter for callback_function + * return U_OK on success + */ +int ulfius_set_default_endpoint(struct _u_instance * u_instance, + int (* callback_function)(const struct _u_request * request, struct _u_response * response, void * user_data), + void * user_data); + +/** + * Remove a struct _u_endpoint * from the specified u_instance + * using the specified values used to identify an endpoint + * Can be done during the execution of the webservice for injection + * u_instance: pointer to a struct _u_instance that describe its port and bind address + * http_method: http_method used by the endpoint + * url_prefix: url_prefix used by the endpoint + * url_format: url_format used by the endpoint + * The parameters _u_endpoint.http_method, _u_endpoint.url_prefix and _u_endpoint.url_format are strictly compared for the match + * If no endpoint is found, return U_ERROR_NOT_FOUND + * return U_OK on success + */ +int ulfius_remove_endpoint_by_val(struct _u_instance * u_instance, const char * http_method, const char * url_prefix, const char * url_format); + +/** + * ulfius_empty_endpoint + * return an empty endpoint that goes at the end of an endpoint list + */ +const struct _u_endpoint * ulfius_empty_endpoint(); + +/** + * ulfius_copy_endpoint + * return a copy of an endpoint with duplicate values + */ +int ulfius_copy_endpoint(struct _u_endpoint * dest, const struct _u_endpoint * source); + +/** + * u_copy_endpoint_list + * return a copy of an endpoint list with duplicate values + * returned value must be free'd after use + */ +struct _u_endpoint * ulfius_duplicate_endpoint_list(const struct _u_endpoint * endpoint_list); + +/** + * ulfius_clean_endpoint + * free allocated memory by an endpoint + */ +void ulfius_clean_endpoint(struct _u_endpoint * endpoint); + +/** + * ulfius_clean_endpoint_list + * free allocated memory by an endpoint list + */ +void ulfius_clean_endpoint_list(struct _u_endpoint * endpoint_list); + +/** + * ulfius_equals_endpoints + * Compare 2 endpoints and return true if their method, prefix and format are the same or if both are NULL + */ +int ulfius_equals_endpoints(const struct _u_endpoint * endpoint1, const struct _u_endpoint * endpoint2); + +#ifndef U_DISABLE_CURL +/******************************************** + * Requests/Responses functions declarations + ********************************************/ + +/** + * ulfius_send_http_request + * Send a HTTP request and store the result into a _u_response + * return U_OK on success + */ +int ulfius_send_http_request(const struct _u_request * request, struct _u_response * response); + +/** + * ulfius_send_http_streaming_request + * Send a HTTP request and store the result into a _u_response + * Except for the body which will be available using write_body_function in the write_body_data + * return U_OK on success + */ +int ulfius_send_http_streaming_request(const struct _u_request * request, struct _u_response * response, size_t (* write_body_function)(void * contents, size_t size, size_t nmemb, void * user_data), void * write_body_data); + +/** + * ulfius_send_smtp_email + * Send an email using libcurl + * email is plain/text and UTF8 charset + * host: smtp server host name + * port: tcp port number (optional, 0 for default) + * use_tls: true if the connection is tls secured + * verify_certificate: true if you want to disable the certificate verification on a tls server + * user: connection user name (optional, NULL: no user name) + * password: connection password (optional, NULL: no password) + * from: from address (mandatory) + * to: to recipient address (mandatory) + * cc: cc recipient address (optional, NULL: no cc) + * bcc: bcc recipient address (optional, NULL: no bcc) + * subject: email subject (mandatory) + * mail_body: email body (mandatory) + * return U_OK on success + */ +int ulfius_send_smtp_email(const char * host, + const int port, + const int use_tls, + const int verify_certificate, + const char * user, + const char * password, + const char * from, + const char * to, + const char * cc, + const char * bcc, + const char * subject, + const char * mail_body); +#endif + +/** + * ulfius_add_cookie_to_header + * add a cookie to the cookie map + * return U_OK on success + */ +int ulfius_add_cookie_to_response(struct _u_response * response, const char * key, const char * value, const char * expires, const uint max_age, + const char * domain, const char * path, const int secure, const int http_only); + +/** + * ulfius_add_header_to_response + * add a header to the response + * return U_OK on success + */ +int ulfius_add_header_to_response(struct _u_response * response, const char * key, const char * value); + +/** + * ulfius_set_string_body_response + * Add a string body to a response + * body must end with a '\0' character + * return U_OK on success + */ +int ulfius_set_string_body_response(struct _u_response * response, const uint status, const char * body); + +/** + * ulfius_set_binary_body_response + * Add a binary body to a response + * return U_OK on success + */ +int ulfius_set_binary_body_response(struct _u_response * response, const uint status, const char * body, const size_t length); + +/** + * ulfius_set_empty_body_response + * Set an empty response with only a status + * return U_OK on success + */ +int ulfius_set_empty_body_response(struct _u_response * response, const uint status); + +/** + * ulfius_set_stream_response + * Set an stream response with a status + * return U_OK on success + */ +int ulfius_set_stream_response(struct _u_response * response, + const uint status, + ssize_t (* stream_callback) (void * stream_user_data, uint64_t offset, char * out_buf, size_t max), + void (* stream_callback_free) (void * stream_user_data), + uint64_t stream_size, + size_t stream_block_size, + void * stream_user_data); + +/** + * ulfius_init_request + * Initialize a request structure by allocating inner elements + * return U_OK on success + */ +int ulfius_init_request(struct _u_request * request); + +/** + * ulfius_clean_request + * clean the specified request's inner elements + * user must free the parent pointer if needed after clean + * or use ulfius_clean_request_full + * return U_OK on success + */ +int ulfius_clean_request(struct _u_request * request); + +/** + * ulfius_clean_request_full + * clean the specified request and all its elements + * return U_OK on success + */ +int ulfius_clean_request_full(struct _u_request * request); + +/** + * ulfius_init_response + * Initialize a response structure by allocating inner elements + * return U_OK on success + */ +int ulfius_init_response(struct _u_response * response); + +/** + * ulfius_clean_response + * clean the specified response's inner elements + * user must free the parent pointer if needed after clean + * or use ulfius_clean_response_full + * return U_OK on success + */ +int ulfius_clean_response(struct _u_response * response); + +/** + * ulfius_clean_response_full + * clean the specified response and all its elements + * return U_OK on success + */ +int ulfius_clean_response_full(struct _u_response * response); + +/** + * ulfius_copy_response + * Copy the source response elements into the des response + * return U_OK on success + */ +int ulfius_copy_response(struct _u_response * dest, const struct _u_response * source); + +/** + * ulfius_clean_cookie + * clean the cookie's elements + * return U_OK on success + */ +int ulfius_clean_cookie(struct _u_cookie * cookie); + +/** + * Copy the cookie source elements into dest elements + * return U_OK on success + */ +int ulfius_copy_cookie(struct _u_cookie * dest, const struct _u_cookie * source); + +/** + * create a new request based on the source elements + * returned value must be cleaned after use + */ +struct _u_request * ulfius_duplicate_request(const struct _u_request * request); + +/** + * create a new response based on the source elements + * return value must be cleaned after use + */ +struct _u_response * ulfius_duplicate_response(const struct _u_response * response); + +#ifndef U_DISABLE_JANSSON +/** + * ulfius_get_json_body_request + * Get JSON structure from the request body if the request is valid + */ +json_t * ulfius_get_json_body_request(const struct _u_request * request, json_error_t * json_error); + +/** + * ulfius_set_json_body_request + * Add a json_t body to a request + * return U_OK on success + */ +int ulfius_set_json_body_request(struct _u_request * request, json_t * body); + +/** + * ulfius_set_json_body_response + * Add a json_t body to a response + * return U_OK on success + */ +int ulfius_set_json_body_response(struct _u_response * response, const uint status, const json_t * body); + +/** + * ulfius_get_json_body_response + * Get JSON structure from the response body if the request is valid + */ +json_t * ulfius_get_json_body_response(struct _u_response * response, json_error_t * json_error); +#endif + +/************************************************************************ + * _u_map declarations * + * _u_map is a simple map structure that handles sets of key/value maps * + ************************************************************************/ + +/** + * initialize a struct _u_map + * this function MUST be called after a declaration or allocation + * return U_OK on success + */ +int u_map_init(struct _u_map * map); + +/** + * free the struct _u_map's inner components + * return U_OK on success + */ +int u_map_clean(struct _u_map * u_map); + +/** + * free the struct _u_map and its components + * return U_OK on success + */ +int u_map_clean_full(struct _u_map * u_map); + +/** + * free an enum return by functions u_map_enum_keys or u_map_enum_values + * return U_OK on success + */ +int u_map_clean_enum(char ** array); + +/** + * returns an array containing all the keys in the struct _u_map + * return an array of char * ending with a NULL element + */ +const char ** u_map_enum_keys(const struct _u_map * u_map); + +/** + * returns an array containing all the values in the struct _u_map + * return an array of char * ending with a NULL element + */ +const char ** u_map_enum_values(const struct _u_map * u_map); + +/** + * return true if the sprcified u_map contains the specified key + * false otherwise + * search is case sensitive + */ +int u_map_has_key(const struct _u_map * u_map, const char * key); + +/** + * return true if the sprcified u_map contains the specified value + * false otherwise + * search is case sensitive + */ +int u_map_has_value(const struct _u_map * u_map, const char * value); + +/** + * return true if the sprcified u_map contains the specified value up until the specified length + * false otherwise + * search is case sensitive + */ +int u_map_has_value_binary(const struct _u_map * u_map, const char * value, size_t length); + +/** + * return true if the sprcified u_map contains the specified key + * false otherwise + * search is case insensitive + */ +int u_map_has_key_case(const struct _u_map * u_map, const char * key); + +/** + * return true if the sprcified u_map contains the specified value + * false otherwise + * search is case insensitive + */ +int u_map_has_value_case(const struct _u_map * u_map, const char * value); + +/** + * add the specified key/value pair into the specified u_map + * if the u_map already contains a pair with the same key, replace the value + * return U_OK on success + */ +int u_map_put(struct _u_map * u_map, const char * key, const char * value); + +/** + * add the specified key/binary value pair into the specified u_map + * if the u_map already contains a pair with the same key, + * replace the value at the specified offset with the specified length + * return U_OK on success + */ +int u_map_put_binary(struct _u_map * u_map, const char * key, const char * value, uint64_t offset, size_t length); + +/** + * get the value length corresponding to the specified key in the u_map + * return -1 if no match found + * search is case sensitive + */ +ssize_t u_map_get_length(const struct _u_map * u_map, const char * key); + +/** + * get the value length corresponding to the specified key in the u_map + * return -1 if no match found + * search is case insensitive + */ +ssize_t u_map_get_case_length(const struct _u_map * u_map, const char * key); + +/** + * get the value corresponding to the specified key in the u_map + * return NULL if no match found + * search is case sensitive + */ +const char * u_map_get(const struct _u_map * u_map, const char * key); + +/** + * get the value corresponding to the specified key in the u_map + * return NULL if no match found + * search is case insensitive + */ +const char * u_map_get_case(const struct _u_map * u_map, const char * key); + +/** + * remove an pair key/value that has the specified key + * return U_OK on success, U_NOT_FOUND if key was not found, error otherwise + */ +int u_map_remove_from_key(struct _u_map * u_map, const char * key); + +/** + * remove all pairs key/value that has the specified key (case insensitive search) + * return U_OK on success, U_NOT_FOUND if key was not found, error otherwise + */ +int u_map_remove_from_key_case(struct _u_map * u_map, const char * key); + +/** + * remove all pairs key/value that has the specified value + * return U_OK on success, U_NOT_FOUND if key was not found, error otherwise + */ +int u_map_remove_from_value(struct _u_map * u_map, const char * value); + +/** + * remove all pairs key/value that has the specified value (case insensitive search) + * return U_OK on success, U_NOT_FOUND if key was not found, error otherwise + */ +int u_map_remove_from_value_case(struct _u_map * u_map, const char * value); + +/** + * remove all pairs key/value that has the specified value up until the specified length + * return U_OK on success, U_NOT_FOUND if key was not found, error otherwise + */ +int u_map_remove_from_value_binary(struct _u_map * u_map, const char * key, size_t length); + +/** + * remove the pair key/value at the specified index + * return U_OK on success, U_NOT_FOUND if index is out of bound, error otherwise + */ +int u_map_remove_at(struct _u_map * u_map, const int index); + +/** + * Create an exact copy of the specified struct _u_map + * return a reference to the copy, NULL otherwise + * returned value must be free'd after use + */ +struct _u_map * u_map_copy(const struct _u_map * source); + +/** + * Copy all key/values pairs of source into dest + * If key is already present in dest, it's overwritten + * return U_OK on success, error otherwise + */ +int u_map_copy_into(struct _u_map * dest, const struct _u_map * source); + +/** + * Return the number of key/values pair in the specified struct _u_map + * Return -1 on error + */ +int u_map_count(const struct _u_map * source); + +/** + * Empty a struct u_map of all its elements + * return U_OK on success, error otherwise + */ +int u_map_empty(struct _u_map * u_map); + +#ifndef U_DISABLE_WEBSOCKET +/********************************** + * Websocket functions declarations + **********************************/ + +#define U_WEBSOCKET_MAGIC_STRING "258EAFA5-E914-47DA-95CA-C5AB0DC85B11" +#define U_WEBSOCKET_UPGRADE_VALUE "websocket" +#define U_WEBSOCKET_BAD_REQUEST_BODY "Error in websocket handshake, wrong parameters" +#define U_WEBSOCKET_USEC_WAIT 50 +#define WEBSOCKET_MAX_CLOSE_TRY 10 + +#define U_WEBSOCKET_BIT_FIN 0x80 +#define U_WEBSOCKET_HAS_MASK 0x80 +#define U_WEBSOCKET_LEN_MASK 0x7F +#define U_WEBSOCKET_OPCODE_CONTINUE 0x00 +#define U_WEBSOCKET_OPCODE_TEXT 0x01 +#define U_WEBSOCKET_OPCODE_BINARY 0x01 +#define U_WEBSOCKET_OPCODE_CLOSE 0x08 +#define U_WEBSOCKET_OPCODE_PING 0x09 +#define U_WEBSOCKET_OPCODE_PONG 0x0A +#define U_WEBSOCKET_OPCODE_CLOSED 0xFD +#define U_WEBSOCKET_OPCODE_ERROR 0xFE +#define U_WEBSOCKET_OPCODE_NONE 0xFF + +/** + * Websocket manager structure + * contains among other things the socket + * the status (open, closed), and the list of incoming and outcoming messages + * Used on public callback functions + */ +struct _websocket_manager { + struct _websocket_message_list * message_list_incoming; + struct _websocket_message_list * message_list_outcoming; + int connected; + int closing; + int manager_closed; + MHD_socket sock; + pthread_mutex_t read_lock; + pthread_mutex_t write_lock; + struct pollfd fds; +}; + +/** + * websocket message structure + * contains all the data of a websocket message + * and the timestamp of when it was sent of received + */ +struct _websocket_message { + time_t datestamp; + uint8_t opcode; + uint8_t has_mask; + uint8_t mask[4]; + uint64_t data_len; + char * data; +}; + +struct _websocket_message_list { + struct _websocket_message ** list; + size_t len; +}; + +/** + * websocket structure + * contains all the data of the websocket + */ +struct _websocket { + struct _u_instance * instance; + struct _u_request * request; + char * websocket_protocol; + char * websocket_extensions; + void (* websocket_manager_callback) (const struct _u_request * request, + struct _websocket_manager * websocket_manager, + void * websocket_manager_user_data); + void * websocket_manager_user_data; + void (* websocket_incoming_message_callback) (const struct _u_request * request, + struct _websocket_manager * websocket_manager, + const struct _websocket_message * message, + void * websocket_incoming_user_data); + void * websocket_incoming_user_data; + void (* websocket_onclose_callback) (const struct _u_request * request, + struct _websocket_manager * websocket_manager, + void * websocket_onclose_user_data); + void * websocket_onclose_user_data; + int tls; + struct _websocket_manager * websocket_manager; + struct MHD_UpgradeResponseHandle * urh; +}; + +/** + * Set a websocket in the response + * You must set at least websocket_manager_callback or websocket_incoming_message_callback + * @Parameters + * response: struct _u_response to send back the websocket initialization, mandatory + * websocket_protocol: list of protocols, separated by a comma, or NULL if all protocols are accepted + * websocket_extensions: list of extensions, separated by a comma, or NULL if all extensions are accepted + * websocket_manager_callback: callback function called right after the handshake acceptance, optional + * websocket_manager_user_data: any data that will be given to the websocket_manager_callback, optional + * websocket_incoming_message_callback: callback function called on each incoming complete message, optional + * websocket_incoming_user_data: any data that will be given to the websocket_incoming_message_callback, optional + * websocket_onclose_callback: callback function called right before closing the websocket, must be complete for the websocket to close + * websocket_onclose_user_data: any data that will be given to the websocket_onclose_callback, optional + * @Return value: U_OK on success + */ +int ulfius_set_websocket_response(struct _u_response * response, + const char * websocket_protocol, + const char * websocket_extensions, + void (* websocket_manager_callback) (const struct _u_request * request, + struct _websocket_manager * websocket_manager, + void * websocket_manager_user_data), + void * websocket_manager_user_data, + void (* websocket_incoming_message_callback) (const struct _u_request * request, + struct _websocket_manager * websocket_manager, + const struct _websocket_message * message, + void * websocket_incoming_user_data), + void * websocket_incoming_user_data, + void (* websocket_onclose_callback) (const struct _u_request * request, + struct _websocket_manager * websocket_manager, + void * websocket_onclose_user_data), + void * websocket_onclose_user_data); + +/** + * Send a message in the websocket + * Return U_OK on success + */ +int ulfius_websocket_send_message(struct _websocket_manager * websocket_manager, + const uint8_t opcode, + const uint64_t data_len, + const char * data); + +/** + * Return the first message of the message list + * Return NULL if message_list has no message + * Returned value must be cleared after use + */ +struct _websocket_message * ulfius_websocket_pop_first_message(struct _websocket_message_list * message_list); + +/** + * Clear data of a websocket message + */ +void ulfius_clear_websocket_message(struct _websocket_message * message); + +#endif + +/** + * free data allocated by ulfius functions + */ +void u_free(void * data); + +/********************************** + * Internal functions declarations + **********************************/ + +/** + * ulfius_validate_instance + * return true if u_instance has valid parameters, false otherwise + */ +int ulfius_validate_instance(const struct _u_instance * u_instance); +/** + * ulfius_is_valid_endpoint + * return true if the endpoind has valid parameters + */ +int ulfius_is_valid_endpoint(const struct _u_endpoint * endpoint, int to_delete); + +/** + * ulfius_validate_endpoint_list + * return true if endpoint_list has valid parameters, false otherwise + */ +int ulfius_validate_endpoint_list(const struct _u_endpoint * endpoint_list, int nb_endpoints); + +/** + * ulfius_webservice_dispatcher + * function executed by libmicrohttpd every time an HTTP call is made + * return MHD_NO on error + */ +int ulfius_webservice_dispatcher (void *cls, struct MHD_Connection *connection, + const char *url, const char *method, + const char *version, const char *upload_data, + size_t *upload_data_size, void **con_cls); +/** + * mhd_iterate_post_data + * function used to iterate post parameters + * return MHD_NO on error + */ +int mhd_iterate_post_data (void *coninfo_cls, enum MHD_ValueKind kind, const char *key, + const char *filename, const char *content_type, + const char *transfer_encoding, const char *data, uint64_t off, + size_t size); + +/** + * mhd_request_completed + * function used to clean data allocated after a web call is complete + */ +void mhd_request_completed (void *cls, struct MHD_Connection *connection, + void **con_cls, enum MHD_RequestTerminationCode toe); + +/** + * ulfius_split_url + * return an array of char based on the url words + * returned value must be u_free'd after use + */ +char ** ulfius_split_url(const char * prefix, const char * url); + +/** + * Sort an array of struct _u_endpoint * using bubble sort algorithm + */ +void sort_endpoint_list (struct _u_endpoint ** endpoint_list, int length); + +/** + * ulfius_endpoint_match + * return the endpoint array matching the url called with the proper http method + * the returned array always has its last value to NULL + * return NULL on memory error + */ +struct _u_endpoint ** ulfius_endpoint_match(const char * method, const char * url, struct _u_endpoint * endpoint_list); + +/** + * ulfius_url_format_match + * return true if splitted_url matches splitted_url_format + * false otherwise + */ +int ulfius_url_format_match(const char ** splitted_url, const char ** splitted_url_format); + +/** + * ulfius_parse_url + * fills map with the keys/values defined in the url that are described in the endpoint format url + * return U_OK on success + */ +int ulfius_parse_url(const char * url, const struct _u_endpoint * endpoint, struct _u_map * map); + +/** + * ulfius_set_response_header + * adds headers defined in the response_map_header to the response + * return the number of added headers, -1 on error + */ +int ulfius_set_response_header(struct MHD_Response * response, const struct _u_map * response_map_header); + +/** + * ulfius_set_response_cookie + * adds cookies defined in the response_map_cookie + * return the number of added headers, -1 on error + */ +int ulfius_set_response_cookie(struct MHD_Response * mhd_response, const struct _u_response * response); + +/** + * Add a cookie in the cookie map as defined in the RFC 6265 + * Returned value must be u_free'd after use + */ +char * ulfius_get_cookie_header(const struct _u_cookie * cookie); + +/** Macro values **/ +#define ULFIUS_URL_SEPARATOR "/" +#define ULFIUS_HTTP_ENCODING_JSON "application/json" +#define ULFIUS_HTTP_HEADER_CONTENT "Content-Type" +#define ULFIUS_HTTP_NOT_FOUND_BODY "Resource not found" +#define ULFIUS_HTTP_ERROR_BODY "Server Error" + +#define ULFIUS_COOKIE_ATTRIBUTE_EXPIRES "Expires" +#define ULFIUS_COOKIE_ATTRIBUTE_MAX_AGE "Max-Age" +#define ULFIUS_COOKIE_ATTRIBUTE_DOMAIN "Domain" +#define ULFIUS_COOKIE_ATTRIBUTE_PATH "Path" +#define ULFIUS_COOKIE_ATTRIBUTE_SECURE "Secure" +#define ULFIUS_COOKIE_ATTRIBUTE_HTTPONLY "HttpOnly" + +#define ULFIUS_POSTBUFFERSIZE 1024 + +#define U_STATUS_STOP 0 +#define U_STATUS_RUNNING 1 +#define U_STATUS_ERROR 2 + +#ifndef U_DISABLE_WEBSOCKET + +/** + * websocket_manager_callback: callback function for working with the websocket + * websocket_manager_user_data: user-defined data that will be handled to websocket_manager_callback + * websocket_incoming_message_callback: callback function that will be called every time a message arrives from the client in the websocket + * websocket_incoming_user_data: user-defined data that will be handled to websocket_incoming_message_callback + * websocket_onclose_callback: callback function that will be called if the websocket is open while the program calls ulfius_stop_framework + * websocket_onclose_user_data: user-defined data that will be handled to websocket_onclose_callback + */ +struct _websocket_handle { + char * websocket_protocol; + char * websocket_extensions; + void (* websocket_manager_callback) (const struct _u_request * request, + struct _websocket_manager * websocket_manager, + void * websocket_manager_user_data); + void * websocket_manager_user_data; + void (* websocket_incoming_message_callback) (const struct _u_request * request, + struct _websocket_manager * websocket_manager, + const struct _websocket_message * message, + void * websocket_incoming_user_data); + void * websocket_incoming_user_data; + void (* websocket_onclose_callback) (const struct _u_request * request, + struct _websocket_manager * websocket_manager, + void * websocket_onclose_user_data); + void * websocket_onclose_user_data; +}; + +struct _websocket_handler { + size_t nb_websocket_active; + struct _websocket ** websocket_active; + pthread_mutex_t websocket_close_lock; + pthread_cond_t websocket_close_cond; + int pthread_init; +}; + +/** + * Websocket callback function for MHD + * Starts the websocket manager if set, + * then sets a listening message loop + * Complete the callback when the websocket is closed + * The websocket can be closed by the client, the manager, the program, or on network disconnect + */ +void ulfius_start_websocket_cb (void *cls, + struct MHD_Connection *connection, + void *con_cls, + const char *extra_in, + size_t extra_in_size, + MHD_socket sock, + struct MHD_UpgradeResponseHandle *urh); + +/** + * Workaround to make sure a message, as long as it can be is complete sent + */ +void ulfius_websocket_send_all(MHD_socket sock, const uint8_t * data, size_t len); + +/** + * Centralise socket reading in this function + * so if options or check must be done, it's done here instead of each read call + */ +size_t ulfius_websocket_recv_all(MHD_socket sock, uint8_t * data, size_t len); + +/** + * Generates a handhshake answer from the key given in parameter + */ +int ulfius_generate_handshake_answer(const char * key, char * out_digest); + +/** + * Close the websocket + */ +int ulfius_close_websocket(struct _websocket * websocket); + +/** + * Return a match list between two list of items + * If match is NULL, then return source duplicate + * Returned value must be u_free'd after use + */ +char * ulfius_check_list_match(const char * source, const char * match); + +/** + * Initialize a websocket message list + * Return U_OK on success + */ +int ulfius_init_websocket_message_list(struct _websocket_message_list * message_list); + +/** + * Clear data of a websocket message list + */ +void ulfius_clear_websocket_message_list(struct _websocket_message_list * message_list); + +/** + * Append a message in a message list + * Return U_OK on success + */ +int ulfius_push_websocket_message(struct _websocket_message_list * message_list, struct _websocket_message * message); + +/** + * Clear data of a websocket + */ +int ulfius_clear_websocket(struct _websocket * websocket); + +/** + * Clear data of a websocket_manager + */ +void ulfius_clear_websocket_manager(struct _websocket_manager * websocket_manager); + +/** + * Read and parse a new message from the websocket + * Return the opcode of the new websocket, U_WEBSOCKET_OPCODE_NONE if no message arrived, or U_WEBSOCKET_OPCODE_ERROR on error + * Sets the new message in the message variable if available + */ +int ulfius_read_incoming_message(struct _websocket_manager * websocket_manager, struct _websocket_message ** message); + +/** + * Run the websocket manager in a separated detached thread + */ +void * ulfius_thread_websocket_manager_run(void * args); + +/** + * Send a message in the websocket without lock + * Return U_OK on success + */ +int ulfius_websocket_send_message_nolock(struct _websocket_manager * websocket_manager, + const uint8_t opcode, + const uint64_t data_len, + const char * data); + + /** + * Add a websocket in the list of active websockets of the instance + */ +int ulfius_instance_add_websocket_active(struct _u_instance * instance, struct _websocket * websocket); + +/** + * Remove a websocket from the list of active websockets of the instance + */ +int ulfius_instance_remove_websocket_active(struct _u_instance * instance, struct _websocket * websocket); +#endif // U_DISABLE_WEBSOCKET + +#endif // __ULFIUS_H__ diff --git a/includes/yder.h b/includes/yder.h new file mode 100644 index 0000000..a2defa4 --- /dev/null +++ b/includes/yder.h @@ -0,0 +1,60 @@ +/** + * + * Yder Framework + * + * Logging framework library + * + * yder.h: structures and functions declarations + * + * Copyright 2015-2017 Nicolas Mora <mail@babelouest.org> + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; + * version 2.1 of the License. + * + * This library 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 this library. If not, see <http://www.gnu.org/licenses/>. + * + */ + +#ifndef __YDER_H__ +#define __YDER_H__ + +#define YDER_VERSION 2.0 + +#define Y_LOG_MODE_NONE 0x0000 +#define Y_LOG_MODE_CONSOLE 0x00F0 +#define Y_LOG_MODE_SYSLOG 0x0F00 +#define Y_LOG_MODE_FILE 0xF000 +#define Y_LOG_MODE_CURRENT 0xFFFF + +#define Y_LOG_LEVEL_NONE 0x0000 +#define Y_LOG_LEVEL_ERROR 0x000F +#define Y_LOG_LEVEL_WARNING 0x00F0 +#define Y_LOG_LEVEL_INFO 0x0F00 +#define Y_LOG_LEVEL_DEBUG 0xF000 +#define Y_LOG_LEVEL_CURRENT 0xFFFF + +/** + * Initialize logging with mode and level parameters, specify a log file if needed + * Return true on success, false on error + */ +int y_init_logs(const char * app, const unsigned long init_mode, const unsigned long init_level, const char * init_log_file, const char * message); + +/** + * Close the logs + */ +int y_close_logs(); + +/** + * Log a message using current parameters + */ +void y_log_message(const unsigned long type, const char * message, ...); + +#endif // __YDER_H__ diff --git a/libraries/liborcania.so b/libraries/liborcania.so new file mode 100755 index 0000000000000000000000000000000000000000..e41e68d5d809996e5df81680ac48cb89549f71f8 GIT binary patch literal 18648 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�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 I-`M{D0cmJ?djJ3c literal 0 HcmV?d00001 diff --git a/libraries/liborcania.so.1.1 b/libraries/liborcania.so.1.1 new file mode 100755 index 0000000000000000000000000000000000000000..e41e68d5d809996e5df81680ac48cb89549f71f8 GIT binary patch literal 18648 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�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 I-`M{D0cmJ?djJ3c literal 0 HcmV?d00001 diff --git a/libraries/libulfius.so b/libraries/libulfius.so new file mode 100755 index 0000000000000000000000000000000000000000..1f1731e0907d7bf1fbf51328565362fa510b4afc GIT binary patch literal 63088 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	g%<$58a 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 literal 0 HcmV?d00001 diff --git a/libraries/libulfius.so.2.1 b/libraries/libulfius.so.2.1 new file mode 100755 index 0000000000000000000000000000000000000000..1f1731e0907d7bf1fbf51328565362fa510b4afc GIT binary patch literal 63088 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	g%<$58a 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 literal 0 HcmV?d00001 diff --git a/libraries/libyder.so b/libraries/libyder.so new file mode 100755 index 0000000000000000000000000000000000000000..623103e1ab2ff20bb9b4a740847b3f5c5fc8f374 GIT binary patch literal 11408 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 literal 0 HcmV?d00001 diff --git a/libraries/libyder.so.2.0 b/libraries/libyder.so.2.0 new file mode 100755 index 0000000000000000000000000000000000000000..623103e1ab2ff20bb9b4a740847b3f5c5fc8f374 GIT binary patch literal 11408 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 literal 0 HcmV?d00001 -- GitLab