35 #include "ulfius-cfg.h" 39 #ifndef U_DISABLE_GNUTLS 43 #include <gnutls/gnutls.h> 44 #include <gnutls/x509.h> 47 #ifndef U_DISABLE_WEBSOCKET 51 #define POLLRDHUP 0x2000 56 #include <microhttpd.h> 58 #if defined(_WIN32) && !defined(U_DISABLE_WEBSOCKET) 59 #define U_DISABLE_WEBSOCKET 62 #if (MHD_VERSION < 0x00095300) && !defined(U_DISABLE_WEBSOCKET) 63 #define U_DISABLE_WEBSOCKET 70 #ifndef U_DISABLE_YDER 74 #define Y_LOG_MODE_NONE 0 75 #define Y_LOG_MODE_CONSOLE 0 76 #define Y_LOG_MODE_SYSLOG 0 77 #define Y_LOG_MODE_FILE 0 78 #define Y_LOG_MODE_JOURNALD 0 79 #define Y_LOG_MODE_CALLBACK 0 80 #define Y_LOG_MODE_CURRENT 0 82 #define Y_LOG_LEVEL_NONE 0 83 #define Y_LOG_LEVEL_DEBUG 0 84 #define Y_LOG_LEVEL_INFO 0 85 #define Y_LOG_LEVEL_WARNING 0 86 #define Y_LOG_LEVEL_ERROR 0 87 #define Y_LOG_LEVEL_CURRENT 0 89 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);
90 int y_set_logs_callback(
void (* y_callback_log_message) (
void * cls,
const char * app_name,
const time_t date,
const unsigned long level,
const char * message),
void * cls,
const char * message);
91 void y_log_message(
const unsigned long type,
const char * message, ...);
95 #ifndef U_DISABLE_JANSSON 104 #define ULFIUS_STREAM_BLOCK_SIZE_DEFAULT 1024 105 #define U_STREAM_END MHD_CONTENT_READER_END_OF_STREAM 106 #define U_STREAM_ERROR MHD_CONTENT_READER_END_WITH_ERROR 107 #define U_STREAM_SIZE_UNKNOWN MHD_SIZE_UNKNOWN 108 #define U_STREAM_SIZE_UNKOWN U_STREAM_SIZE_UNKNOWN // Backward compatibility 112 #define U_ERROR_MEMORY 2 113 #define U_ERROR_PARAMS 3 114 #define U_ERROR_LIBMHD 4 115 #define U_ERROR_LIBCURL 5 116 #define U_ERROR_NOT_FOUND 6 117 #define U_ERROR_DISCONNECTED 7 119 #define U_CALLBACK_CONTINUE 0 120 #define U_CALLBACK_IGNORE 1 121 #define U_CALLBACK_COMPLETE 2 122 #define U_CALLBACK_UNAUTHORIZED 3 123 #define U_CALLBACK_ERROR 4 125 #define U_COOKIE_SAME_SITE_NONE 0 126 #define U_COOKIE_SAME_SITE_STRICT 1 127 #define U_COOKIE_SAME_SITE_LAX 2 129 #define U_USE_IPV4 0x0001 130 #define U_USE_IPV6 0x0010 131 #define U_USE_ALL (U_USE_IPV4|U_USE_IPV6) 133 #define U_SSL_VERIFY_PEER 0x0001 134 #define U_SSL_VERIFY_HOSTNAME 0x0010 145 #if MHD_VERSION >= 0x00095208 146 U_OPT_NETWORK_TYPE = 4,
167 #ifndef U_DISABLE_JANSSON 170 #ifndef U_DISABLE_GNUTLS 232 #if MHD_VERSION >= 0x00095208 233 unsigned short network_type;
252 #ifndef U_DISABLE_GNUTLS 275 ssize_t (* stream_callback) (
void * stream_user_data, uint64_t offset,
char * out_buf,
size_t max);
276 void (* stream_callback_free) (
void * stream_user_data);
312 #if MHD_VERSION >= 0x00095208 313 unsigned short network_type;
326 int (* file_upload_callback) (
const struct _u_request * request,
328 const char * filename,
329 const char * content_type,
330 const char * transfer_encoding,
338 #ifndef U_DISABLE_GNUTLS 413 #if MHD_VERSION >= 0x00095208 425 int ulfius_init_instance_ipv6(
struct _u_instance * u_instance,
unsigned int port,
struct sockaddr_in6 * bind_address,
unsigned short network_type,
const char * default_auth_realm);
456 #ifndef U_DISABLE_GNUTLS 494 void mhd_request_completed (
void *cls,
struct MHD_Connection *connection,
void **con_cls,
enum MHD_RequestTerminationCode toe);
527 int (* file_upload_callback) (
const struct _u_request * request,
529 const char * filename,
530 const char * content_type,
531 const char * transfer_encoding,
579 const char * http_method,
580 const char * url_prefix,
581 const char * url_format,
582 unsigned int priority,
583 int (* callback_function)(
const struct _u_request * request,
620 int (* callback_function)(
const struct _u_request * request,
struct _u_response * response,
void * user_data),
694 #ifndef U_DISABLE_CURL 741 const int verify_certificate,
743 const char * password,
748 const char * subject,
749 const char * mail_body);
773 const int verify_certificate,
775 const char * password,
780 const char * content_type,
781 const char * subject,
782 const char * mail_body);
810 const char * domain,
const char * path,
const int secure,
const int http_only);
831 const char * domain,
const char * path,
const int secure,
const int http_only,
const int same_site);
933 const unsigned int status,
934 ssize_t (* stream_callback) (
void * stream_user_data, uint64_t offset,
char * out_buf,
size_t max),
935 void (* stream_callback_free) (
void * stream_user_data),
936 uint64_t stream_size,
937 size_t stream_block_size,
938 void * stream_user_data);
1106 #ifndef U_DISABLE_JANSSON 1268 int u_map_put(
struct _u_map * u_map,
const char * key,
const char * value);
1281 int u_map_put_binary(
struct _u_map * u_map,
const char * key,
const char * value, uint64_t offset,
size_t length);
1308 const char *
u_map_get(
const struct _u_map * u_map,
const char * key);
1414 #ifndef U_DISABLE_WEBSOCKET 1420 #define U_WEBSOCKET_USER_AGENT "Ulfius Websocket Client Framework" 1422 #define U_WEBSOCKET_MAGIC_STRING "258EAFA5-E914-47DA-95CA-C5AB0DC85B11" 1423 #define U_WEBSOCKET_UPGRADE_VALUE "websocket" 1424 #define U_WEBSOCKET_BAD_REQUEST_BODY "Error in websocket handshake, wrong parameters" 1425 #define U_WEBSOCKET_USEC_WAIT 50 1426 #define WEBSOCKET_MAX_CLOSE_TRY 10 1428 #define U_WEBSOCKET_BIT_FIN 0x80 1429 #define U_WEBSOCKET_MASK 0x80 1430 #define U_WEBSOCKET_LEN_MASK 0x7F 1431 #define U_WEBSOCKET_OPCODE_CONTINUE 0x00 1432 #define U_WEBSOCKET_OPCODE_TEXT 0x01 1433 #define U_WEBSOCKET_OPCODE_BINARY 0x02 1434 #define U_WEBSOCKET_OPCODE_CLOSE 0x08 1435 #define U_WEBSOCKET_OPCODE_PING 0x09 1436 #define U_WEBSOCKET_OPCODE_PONG 0x0A 1437 #define U_WEBSOCKET_OPCODE_CLOSED 0xFD 1438 #define U_WEBSOCKET_OPCODE_ERROR 0xFE 1439 #define U_WEBSOCKET_OPCODE_NONE 0xFF 1441 #define U_WEBSOCKET_NONE 0 1442 #define U_WEBSOCKET_SERVER 1 1443 #define U_WEBSOCKET_CLIENT 2 1445 #define U_WEBSOCKET_STATUS_OPEN 0 1446 #define U_WEBSOCKET_STATUS_CLOSE 1 1447 #define U_WEBSOCKET_STATUS_ERROR 2 1449 #define U_WEBSOCKET_RSV1 0x40 1450 #define U_WEBSOCKET_RSV2 0x20 1451 #define U_WEBSOCKET_RSV3 0x10 1453 #define WEBSOCKET_RESPONSE_HTTP 0x0001 1454 #define WEBSOCKET_RESPONSE_UPGRADE 0x0002 1455 #define WEBSOCKET_RESPONSE_CONNECTION 0x0004 1456 #define WEBSOCKET_RESPONSE_ACCEPT 0x0008 1457 #define WEBSOCKET_RESPONSE_PROTCOL 0x0010 1458 #define WEBSOCKET_RESPONSE_EXTENSION 0x0020 1460 #define WEBSOCKET_DEFLATE_CHUNK_SIZE 32768 1461 #define WEBSOCKET_DEFLATE_WINDOWS_BITS 15 1466 struct _websocket_deflate_context {
1471 uint server_no_context_takeover;
1472 uint client_no_context_takeover;
1473 uint server_max_window_bits;
1474 uint client_max_window_bits;
1481 struct _websocket_extension {
1482 char * extension_server;
1483 char * extension_client;
1485 int (* websocket_extension_message_out_perform)(
const uint8_t opcode,
1486 const uint64_t data_len_in,
1487 const char * data_in,
1488 uint64_t * data_len_out,
1490 const uint64_t fragment_len,
1493 void * websocket_extension_message_out_perform_user_data;
1494 int (* websocket_extension_message_in_perform)(
const uint8_t opcode,
1495 const uint64_t data_len_in,
1496 const char * data_in,
1497 uint64_t * data_len_out,
1499 const uint64_t fragment_len,
1502 void * websocket_extension_message_in_perform_user_data;
1503 int (* websocket_extension_server_match)(
const char * extension_client,
1504 const char ** extension_client_list,
1505 char ** extension_server,
1508 void * websocket_extension_server_match_user_data;
1509 int (* websocket_extension_client_match)(
const char * extension_server,
1512 void * websocket_extension_client_match_user_data;
1513 void (* websocket_extension_free_context)(
void * user_data,
1515 void * websocket_extension_free_context_user_data;
1526 struct _websocket_manager {
1527 struct _websocket_message_list * message_list_incoming;
1528 struct _websocket_message_list * message_list_outcoming;
1532 MHD_socket mhd_sock;
1535 gnutls_session_t gnutls_session;
1536 gnutls_certificate_credentials_t xcred;
1539 pthread_mutex_t read_lock;
1540 pthread_mutex_t write_lock;
1541 pthread_mutex_t status_lock;
1542 pthread_cond_t status_cond;
1543 struct pollfd fds_in;
1544 struct pollfd fds_out;
1547 struct _pointer_list * websocket_extension_list;
1555 struct _websocket_message {
1563 size_t fragment_len;
1570 struct _websocket_message_list {
1571 struct _websocket_message ** list;
1582 void (* websocket_manager_callback) (
const struct _u_request * request,
1583 struct _websocket_manager * websocket_manager,
1584 void * websocket_manager_user_data);
1585 void * websocket_manager_user_data;
1586 void (* websocket_incoming_message_callback) (
const struct _u_request * request,
1587 struct _websocket_manager * websocket_manager,
1588 const struct _websocket_message * message,
1589 void * websocket_incoming_user_data);
1590 void * websocket_incoming_user_data;
1591 void (* websocket_onclose_callback) (
const struct _u_request * request,
1592 struct _websocket_manager * websocket_manager,
1593 void * websocket_onclose_user_data);
1594 void * websocket_onclose_user_data;
1595 struct _websocket_manager * websocket_manager;
1596 struct MHD_UpgradeResponseHandle * urh;
1602 struct _websocket_client_handler {
1603 struct _websocket * websocket;
1621 const uint8_t opcode,
1622 const uint64_t data_len,
1637 const uint8_t opcode,
1638 const uint64_t data_len,
1640 const uint64_t fragment_len);
1648 #ifndef U_DISABLE_JANSSON 1689 const char * websocket_protocol,
1690 const char * websocket_extensions,
1691 void (* websocket_manager_callback) (
const struct _u_request * request,
1692 struct _websocket_manager * websocket_manager,
1693 void * websocket_manager_user_data),
1694 void * websocket_manager_user_data,
1695 void (* websocket_incoming_message_callback) (
const struct _u_request * request,
1696 struct _websocket_manager * websocket_manager,
1697 const struct _websocket_message * message,
1698 void * websocket_incoming_user_data),
1699 void * websocket_incoming_user_data,
1700 void (* websocket_onclose_callback) (
const struct _u_request * request,
1701 struct _websocket_manager * websocket_manager,
1702 void * websocket_onclose_user_data),
1703 void * websocket_onclose_user_data);
1722 const char * extension_server,
1724 int (* websocket_extension_message_out_perform)(
const uint8_t opcode,
1725 const uint64_t data_len_in,
1726 const char * data_in,
1727 uint64_t * data_len_out,
1729 const uint64_t fragment_len,
1732 void * websocket_extension_message_out_perform_user_data,
1733 int (* websocket_extension_message_in_perform)(
const uint8_t opcode,
1734 const uint64_t data_len_in,
1735 const char * data_in,
1736 uint64_t * data_len_out,
1738 const uint64_t fragment_len,
1741 void * websocket_extension_message_in_perform_user_data,
1742 int (* websocket_extension_server_match)(
const char * extension_client,
1743 const char ** extension_client_list,
1744 char ** extension_server,
1747 void * websocket_extension_server_match_user_data,
1748 void (* websocket_extension_free_context)(
void * user_data,
1750 void * websocket_extension_free_context_user_data);
1767 const uint64_t data_len_in,
1768 const char * data_in,
1769 uint64_t * data_len_out,
1771 const uint64_t fragment_len,
1789 const uint64_t data_len_in,
1790 const char * data_in,
1791 uint64_t * data_len_out,
1793 const uint64_t fragment_len,
1874 void (* websocket_manager_callback) (
const struct _u_request * request,
1875 struct _websocket_manager * websocket_manager,
1876 void * websocket_manager_user_data),
1877 void * websocket_manager_user_data,
1878 void (* websocket_incoming_message_callback) (
const struct _u_request * request,
1879 struct _websocket_manager * websocket_manager,
1880 const struct _websocket_message * message,
1881 void * websocket_incoming_user_data),
1882 void * websocket_incoming_user_data,
1883 void (* websocket_onclose_callback) (
const struct _u_request * request,
1884 struct _websocket_manager * websocket_manager,
1885 void * websocket_onclose_user_data),
1886 void * websocket_onclose_user_data,
1887 struct _websocket_client_handler * websocket_client_handler,
1906 const char * extension,
1908 int (* websocket_extension_message_out_perform)(
const uint8_t opcode,
1909 const uint64_t data_len_in,
1910 const char * data_in,
1911 uint64_t * data_len_out,
1913 const uint64_t fragment_len,
1916 void * websocket_extension_message_out_perform_user_data,
1917 int (* websocket_extension_message_in_perform)(
const uint8_t opcode,
1918 const uint64_t data_len_in,
1919 const char * data_in,
1920 uint64_t * data_len_out,
1922 const uint64_t fragment_len,
1925 void * websocket_extension_message_in_perform_user_data,
1926 int (* websocket_extension_client_match)(
const char * extension_server,
1929 void * websocket_extension_client_match_user_data,
1930 void (* websocket_extension_free_context)(
void * user_data,
1932 void * websocket_extension_free_context_user_data);
1995 const char * websocket_protocol,
1996 const char * websocket_extensions);
2001 #define ULFIUS_URL_SEPARATOR "/" 2002 #define ULFIUS_HTTP_ENCODING_JSON "application/json" 2003 #define ULFIUS_HTTP_HEADER_CONTENT "Content-Type" 2004 #define ULFIUS_HTTP_NOT_FOUND_BODY "Resource not found" 2005 #define ULFIUS_HTTP_ERROR_BODY "Server Error" 2007 #define ULFIUS_COOKIE_ATTRIBUTE_EXPIRES "Expires" 2008 #define ULFIUS_COOKIE_ATTRIBUTE_MAX_AGE "Max-Age" 2009 #define ULFIUS_COOKIE_ATTRIBUTE_DOMAIN "Domain" 2010 #define ULFIUS_COOKIE_ATTRIBUTE_PATH "Path" 2011 #define ULFIUS_COOKIE_ATTRIBUTE_SECURE "Secure" 2012 #define ULFIUS_COOKIE_ATTRIBUTE_HTTPONLY "HttpOnly" 2014 #define ULFIUS_POSTBUFFERSIZE 65536 2016 #define U_STATUS_STOP 0 2017 #define U_STATUS_RUNNING 1 2018 #define U_STATUS_ERROR 2 2020 #ifndef U_DISABLE_WEBSOCKET 2025 struct _websocket_handle {
2026 char * websocket_protocol;
2027 char * websocket_extensions;
2028 void (* websocket_manager_callback) (
const struct _u_request * request,
2029 struct _websocket_manager * websocket_manager,
2030 void * websocket_manager_user_data);
2031 void * websocket_manager_user_data;
2032 void (* websocket_incoming_message_callback) (
const struct _u_request * request,
2033 struct _websocket_manager * websocket_manager,
2034 const struct _websocket_message * message,
2035 void * websocket_incoming_user_data);
2036 void * websocket_incoming_user_data;
2037 void (* websocket_onclose_callback) (
const struct _u_request * request,
2038 struct _websocket_manager * websocket_manager,
2039 void * websocket_onclose_user_data);
2040 void * websocket_onclose_user_data;
2042 struct _pointer_list * websocket_extension_list;
2048 struct _websocket_handler {
2049 pthread_mutex_t websocket_active_lock;
2050 size_t nb_websocket_active;
2051 struct _websocket ** websocket_active;
2052 pthread_mutex_t websocket_close_lock;
2053 pthread_cond_t websocket_close_cond;
2057 #endif // U_DISABLE_WEBSOCKET 2069 #ifndef U_DISABLE_GNUTLS 2088 #endif // U_DISABLE_GNUTLS 2098 #endif // __ULFIUS_H__ int check_server_certificate
Definition: ulfius.h:235
char * proxy
Definition: ulfius.h:231
void * binary_body
Definition: ulfius.h:249
int ulfius_copy_response(struct _u_response *dest, const struct _u_response *source)
Definition: u_response.c:419
int callback_first_iteration
Definition: ulfius.h:354
int check_proxy_certificate_flag
Definition: ulfius.h:238
int u_map_empty(struct _u_map *u_map)
Definition: u_map.c:504
struct MHD_Daemon * mhd_daemon
Definition: ulfius.h:309
void * user_data
Definition: ulfius.h:299
int ulfius_init_instance(struct _u_instance *u_instance, unsigned int port, struct sockaddr_in *bind_address, const char *default_auth_realm)
Definition: ulfius.c:1685
int u_map_remove_from_value_binary(struct _u_map *u_map, const char *key, size_t length)
Definition: u_map.c:287
const char ** u_map_enum_values(const struct _u_map *u_map)
Definition: u_map.c:109
int ulfius_clean_cookie(struct _u_cookie *cookie)
Definition: u_response.c:283
char * url_format
Definition: ulfius.h:294
int ulfius_clean_response_full(struct _u_response *response)
Definition: u_response.c:358
int u_map_copy_into(struct _u_map *dest, const struct _u_map *source)
Definition: u_map.c:477
void * shared_data
Definition: ulfius.h:281
struct _u_cookie * map_cookie
Definition: ulfius.h:271
int ulfius_websocket_send_message(struct _websocket_manager *websocket_manager, const uint8_t opcode, const uint64_t data_len, const char *data)
Definition: u_websocket.c:1523
int ulfius_copy_cookie(struct _u_cookie *dest, const struct _u_cookie *source)
Definition: u_response.c:301
check certificate peer and or proxy hostname if check_proxy_certificate is enabled, values available are U_SSL_VERIFY_PEER, U_SSL_VERIFY_HOSTNAME or both, default value is both (U_SSL_VERIFY_PEER|U_SSL_VERIFY_HOSTNAME), used by ulfius_send_http_request, requires libcurl >= 7.52, expected option value type: int
Definition: ulfius.h:151
int ulfius_add_endpoint_by_val(struct _u_instance *u_instance, const char *http_method, const char *url_prefix, const char *url_format, unsigned int priority, int(*callback_function)(const struct _u_request *request, struct _u_response *response, void *user_data), void *user_data)
Definition: ulfius.c:1501
int http_only
Definition: ulfius.h:216
int ulfius_clean_response(struct _u_response *response)
Definition: u_response.c:326
int ulfius_open_websocket_client_connection(struct _u_request *request, 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_client_handler *websocket_client_handler, struct _u_response *response)
Definition: u_websocket.c:2412
int ulfius_send_http_request(const struct _u_request *request, struct _u_response *response)
Definition: u_send_request.c:159
char * http_method
Definition: ulfius.h:292
json_t * ulfius_get_json_body_request(const struct _u_request *request, json_error_t *json_error)
Definition: u_request.c:839
char * domain
Definition: ulfius.h:213
void ulfius_clean_endpoint(struct _u_endpoint *endpoint)
Definition: ulfius.c:1335
void ulfius_clear_websocket_message(struct _websocket_message *message)
Definition: u_websocket.c:1571
char * key
Definition: ulfius.h:209
int ulfius_stop_framework(struct _u_instance *u_instance)
Definition: ulfius.c:1257
const char * u_map_get(const struct _u_map *u_map, const char *key)
Definition: u_map.c:368
Set a stringified json_t * body to the request or the reponse, expected option value type: json_t *...
Definition: ulfius.h:168
void * ulfius_uri_logger(void *cls, const char *uri)
Definition: ulfius.c:205
void * binary_body
Definition: ulfius.h:273
Add to the map containing the cookie variables, expected option value type: const char *...
Definition: ulfius.h:159
http method (GET, POST, PUT, DELETE, etc.), expected option value type: const char * ...
Definition: ulfius.h:142
char * auth_basic_user
Definition: ulfius.h:243
int ulfius_set_string_body_response(struct _u_response *response, const unsigned int status, const char *body)
Definition: u_response.c:509
int u_map_has_key_case(const struct _u_map *u_map, const char *key)
Definition: u_map.c:386
int u_map_init(struct _u_map *u_map)
Definition: u_map.c:33
struct _u_instance * u_instance
Definition: ulfius.h:351
int same_site
Definition: ulfius.h:217
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)
Definition: u_send_request.c:191
size_t * lengths
Definition: ulfius.h:201
int ulfius_add_same_site_cookie_to_response(struct _u_response *response, const char *key, const char *value, const char *expires, const unsigned int max_age, const char *domain, const char *path, const int secure, const int http_only, const int same_site)
Definition: u_response.c:205
int u_map_remove_from_value(struct _u_map *u_map, const char *value)
Definition: u_map.c:283
json_t * ulfius_get_json_body_response(struct _u_response *response, json_error_t *json_error)
Definition: u_response.c:689
char * client_key_file
Definition: ulfius.h:255
int ulfius_copy_endpoint(struct _u_endpoint *dest, const struct _u_endpoint *source)
Definition: ulfius.c:1292
struct _u_map * default_headers
Definition: ulfius.h:322
void ulfius_clean_instance(struct _u_instance *u_instance)
Definition: ulfius.c:1580
char * auth_realm
Definition: ulfius.h:272
int ulfius_set_request_properties(struct _u_request *request,...)
Definition: u_request.c:529
int has_post_processor
Definition: ulfius.h:353
char * client_key_password
Definition: ulfius.h:256
size_t stream_block_size
Definition: ulfius.h:278
unsigned int callback_position
Definition: ulfius.h:251
char * value
Definition: ulfius.h:210
int ulfius_set_empty_body_response(struct _u_response *response, const unsigned int status)
Definition: u_response.c:548
int ulfius_copy_request(struct _u_request *dest, const struct _u_request *source)
Definition: u_request.c:415
int ulfius_set_websocket_request(struct _u_request *request, const char *url, const char *websocket_protocol, const char *websocket_extensions)
Definition: u_websocket.c:2285
int ulfius_clean_request(struct _u_request *request)
Definition: u_request.c:358
gnutls_x509_crt_t client_cert
Definition: ulfius.h:253
int ulfius_import_client_certificate_pem(struct _u_request *request, const char *str_cert)
Definition: u_request.c:892
int ulfius_websocket_send_json_message(struct _websocket_manager *websocket_manager, json_t *message)
Definition: u_websocket.c:1535
int ulfius_set_upload_file_callback_function(struct _u_instance *u_instance, int(*file_upload_callback)(const struct _u_request *request, const char *key, const char *filename, const char *content_type, const char *transfer_encoding, const char *data, uint64_t off, size_t size, void *cls), void *cls)
Definition: ulfius.c:1560
struct _u_map * map_header
Definition: ulfius.h:269
Set a char * body to the request or the reponse, expected option value type: const char *...
Definition: ulfius.h:166
any data shared between callback functions, must be allocated and freed by the callback functions...
Definition: ulfius.h:177
connection timeout used by ulfius_send_http_request, default is 0 or Timeout in seconds to close the ...
Definition: ulfius.h:154
int ulfius_start_framework(struct _u_instance *u_instance)
Definition: ulfius.c:1104
struct sockaddr_in6 * bind_address6
Definition: ulfius.h:316
struct _u_response * ulfius_duplicate_response(const struct _u_response *response)
Definition: u_response.c:486
full url used to call this callback function or full url to call when used in a ulfius_send_http_requ...
Definition: ulfius.h:143
int ulfius_send_smtp_rich_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 *content_type, const char *subject, const char *mail_body)
Definition: u_send_request.c:703
const char ** u_map_enum_keys(const struct _u_map *u_map)
Definition: u_map.c:105
int ulfius_clean_request_full(struct _u_request *request)
Definition: u_request.c:401
int ulfius_set_string_body_request(struct _u_request *request, const char *string_body)
Definition: u_request.c:719
int ulfius_remove_endpoint_by_val(struct _u_instance *u_instance, const char *http_method, const char *url_prefix, const char *url_format)
Definition: ulfius.c:1524
specify a path to CA certificates instead of system path, used by ulfius_send_http_request, expected option value type: const char *
Definition: ulfius.h:153
unsigned int nb_cookies
Definition: ulfius.h:270
Contains the needed data for an ulfius instance to work.
Definition: ulfius.h:308
char * expires
Definition: ulfius.h:211
basic authentication username, expected option value type: const char *
Definition: ulfius.h:155
int ulfius_websocket_client_connection_wait_close(struct _websocket_client_handler *websocket_client_handler, unsigned int timeout)
Definition: u_websocket.c:2707
int check_utf8
Definition: ulfius.h:337
follow url redirections, used by ulfius_send_http_request, expected option value type: int ...
Definition: ulfius.h:152
password to unlock client key file, available only if GnuTLS support is enabled, expected option valu...
Definition: ulfius.h:173
char * ulfius_url_encode(const char *str)
Definition: ulfius.c:1796
basic authentication password, expected option value type: const char *
Definition: ulfius.h:156
Add to the map containing the post body variables (if available), expected option value type: const c...
Definition: ulfius.h:160
unsigned int priority
Definition: ulfius.h:295
struct _u_endpoint * default_endpoint
Definition: ulfius.h:321
realm to send to the client response on authenticationb failed, expected option value type: const cha...
Definition: ulfius.h:176
struct _u_map * map_post_body
Definition: ulfius.h:248
void * file_upload_cls
Definition: ulfius.h:335
definition of the parameters available in a struct _u_response
Definition: ulfius.h:266
path to client certificate file for sending http requests with certificate authentication, available only if GnuTLS support is enabled, expected option value type: const char *
Definition: ulfius.h:171
void mhd_request_completed(void *cls, struct MHD_Connection *connection, void **con_cls, enum MHD_RequestTerminationCode toe)
Definition: ulfius.c:282
int ulfius_global_init()
Definition: ulfius.c:1859
int ulfius_set_binary_body_response(struct _u_response *response, const unsigned int status, const char *body, const size_t length)
Definition: u_response.c:527
int ulfius_websocket_client_connection_send_close_signal(struct _websocket_client_handler *websocket_client_handler)
Definition: u_websocket.c:2653
int ulfius_add_websocket_client_extension_message_perform(struct _websocket_client_handler *websocket_client_handler, const char *extension, uint8_t rsv, int(*websocket_extension_message_out_perform)(const uint8_t opcode, const uint64_t data_len_in, const char *data_in, uint64_t *data_len_out, char **data_out, const uint64_t fragment_len, void *user_data, void *context), void *websocket_extension_message_out_perform_user_data, int(*websocket_extension_message_in_perform)(const uint8_t opcode, const uint64_t data_len_in, const char *data_in, uint64_t *data_len_out, char **data_out, const uint64_t fragment_len, void *user_data, void *context), void *websocket_extension_message_in_perform_user_data, int(*websocket_extension_client_match)(const char *extension_server, void *user_data, void **context), void *websocket_extension_client_match_user_data, void(*websocket_extension_free_context)(void *user_data, void *context), void *websocket_extension_free_context_user_data)
Definition: u_websocket.c:2326
struct _u_request * request
Definition: ulfius.h:355
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)
Definition: ulfius.c:1537
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)
Definition: u_send_request.c:906
Set a raw body to the request or the reponse, expected option value type: const char *...
Definition: ulfius.h:165
void u_free(void *data)
Definition: ulfius.c:1699
Remove from map containing the header variables, expected option value type: const char *...
Definition: ulfius.h:162
int ulfius_start_secure_ca_trust_framework(struct _u_instance *u_instance, const char *key_pem, const char *cert_pem, const char *root_ca_pem)
Definition: ulfius.c:1170
int mhd_response_copy_data
Definition: ulfius.h:336
int check_proxy_certificate
Definition: ulfius.h:237
int ulfius_init_response(struct _u_response *response)
Definition: u_response.c:367
void websocket_extension_deflate_free_context(void *user_data, void *context)
Definition: u_websocket.c:2163
size_t max_post_body_size
Definition: ulfius.h:324
int ulfius_remove_endpoint(struct _u_instance *u_instance, const struct _u_endpoint *u_endpoint)
Definition: ulfius.c:1418
int ulfius_websocket_status(struct _websocket_manager *websocket_manager)
Definition: u_websocket.c:2197
size_t binary_body_length
Definition: ulfius.h:274
int u_map_count(const struct _u_map *source)
Definition: u_map.c:495
int ulfius_set_stream_response(struct _u_response *response, const unsigned int 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)
Definition: u_response.c:562
int u_map_put_binary(struct _u_map *u_map, const char *key, const char *value, uint64_t offset, size_t length)
Definition: u_map.c:149
unsigned int timeout
Definition: ulfius.h:282
int ulfius_add_cookie_to_response(struct _u_response *response, const char *key, const char *value, const char *expires, const unsigned int max_age, const char *domain, const char *path, const int secure, const int http_only)
Definition: u_response.c:200
void ulfius_global_close()
Definition: ulfius.c:1883
char * http_verb
Definition: ulfius.h:228
int websocket_extension_message_out_deflate(const uint8_t opcode, const uint64_t data_len_in, const char *data_in, uint64_t *data_len_out, char **data_out, const uint64_t fragment_len, void *user_data, void *context)
Definition: u_websocket.c:1854
size_t max_post_param_size
Definition: ulfius.h:323
definition of the parameters available in a struct _u_request
Definition: ulfius.h:226
int u_map_remove_from_key(struct _u_map *u_map, const char *key)
Definition: u_map.c:237
int ulfius_init_request(struct _u_request *request)
Definition: u_request.c:302
int u_map_clean_enum(char **array)
Definition: u_map.c:91
char * path
Definition: ulfius.h:214
int ulfius_websocket_wait_close(struct _websocket_manager *websocket_manager, unsigned int timeout)
Definition: u_websocket.c:2211
ssize_t u_map_get_case_length(const struct _u_map *u_map, const char *key)
Definition: u_map.c:438
int websocket_extension_client_match_deflate(const char *extension_server, void *user_data, void **context)
Definition: u_websocket.c:2533
int u_map_remove_from_value_case(struct _u_map *u_map, const char *value)
Definition: u_map.c:310
Remove from map containing the post body variables (if available), expected option value type: const ...
Definition: ulfius.h:164
int u_map_has_value_binary(const struct _u_map *u_map, const char *value, size_t length)
Definition: u_map.c:129
int ulfius_add_endpoint(struct _u_instance *u_instance, const struct _u_endpoint *u_endpoint)
Definition: ulfius.c:1361
int status
Definition: ulfius.h:310
const struct _u_endpoint * ulfius_empty_endpoint()
Definition: ulfius.c:1472
int ulfius_start_framework_with_mhd_options(struct _u_instance *u_instance, unsigned int mhd_flags, struct MHD_OptionItem *options)
Definition: ulfius.c:1230
struct _u_endpoint * ulfius_duplicate_endpoint_list(const struct _u_endpoint *endpoint_list)
Definition: ulfius.c:1314
Remove from the map containing the url variables, both from the route and the ?key=value variables...
Definition: ulfius.h:161
struct sockaddr * client_address
Definition: ulfius.h:242
char * http_protocol
Definition: ulfius.h:227
check certificate peer and or server hostname if check_server_certificate is enabled, values available are U_SSL_VERIFY_PEER, U_SSL_VERIFY_HOSTNAME or both, default value is both (U_SSL_VERIFY_PEER|U_SSL_VERIFY_HOSTNAME), used by ulfius_send_http_request, expected option value type: int
Definition: ulfius.h:149
u_option
Definition: ulfius.h:140
int ulfius_set_json_body_request(struct _u_request *request, json_t *j_body)
Definition: u_request.c:813
size_t binary_body_length
Definition: ulfius.h:250
struct _u_map * map_cookie
Definition: ulfius.h:247
int u_map_clean_full(struct _u_map *u_map)
Definition: u_map.c:82
int ulfius_set_binary_body_request(struct _u_request *request, const char *binary_body, const size_t length)
Definition: u_request.c:741
void * websocket_handle
Definition: ulfius.h:280
char * url_path
Definition: ulfius.h:230
struct _u_map * map_url
Definition: ulfius.h:245
int u_map_put(struct _u_map *u_map, const char *key, const char *value)
Definition: u_map.c:141
int use_client_cert_auth
Definition: ulfius.h:339
char * ca_path
Definition: ulfius.h:240
char * protocol
Definition: ulfius.h:268
ssize_t u_map_get_length(const struct _u_map *u_map, const char *key)
Definition: u_map.c:424
long status
Definition: ulfius.h:267
Add to the map containing the url variables, both from the route and the ?key=value variables...
Definition: ulfius.h:157
struct _u_request * ulfius_duplicate_request(const struct _u_request *request)
Definition: u_request.c:782
void * websocket_handler
Definition: ulfius.h:325
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)
Definition: u_websocket.c:1738
char * ulfius_export_client_certificate_pem(const struct _u_request *request)
Definition: u_request.c:868
struct _u_endpoint * endpoint_list
Definition: ulfius.h:320
char ** values
Definition: ulfius.h:200
int ulfius_add_websocket_client_deflate_extension(struct _websocket_client_handler *websocket_client_handler)
Definition: u_websocket.c:2644
void ulfius_clean_endpoint_list(struct _u_endpoint *endpoint_list)
Definition: ulfius.c:1350
HTTP response status code (200, 404, 500, etc), expected option value type: long. ...
Definition: ulfius.h:175
int u_map_has_key(const struct _u_map *u_map, const char *key)
Definition: u_map.c:113
unsigned int port
Definition: ulfius.h:311
int ulfius_add_websocket_deflate_extension(struct _u_response *response)
Definition: u_websocket.c:2170
int u_map_has_value_case(const struct _u_map *u_map, const char *value)
Definition: u_map.c:398
int ulfius_equals_endpoints(const struct _u_endpoint *endpoint1, const struct _u_endpoint *endpoint2)
Definition: ulfius.c:1483
int check_server_certificate_flag
Definition: ulfius.h:236
char * http_url
Definition: ulfius.h:229
int u_map_remove_at(struct _u_map *u_map, const int index)
Definition: u_map.c:333
int nb_endpoints
Definition: ulfius.h:318
int ulfius_add_header_to_response(struct _u_response *response, const char *key, const char *value)
Definition: u_response.c:697
int ulfius_websocket_client_connection_status(struct _websocket_client_handler *websocket_client_handler)
Definition: u_websocket.c:2693
char * default_auth_realm
Definition: ulfius.h:319
struct sockaddr_in * bind_address
Definition: ulfius.h:315
int nb_values
Definition: ulfius.h:198
check proxy certificate and hostname, default true, used by ulfius_send_http_request, requires libcurl >= 7.52, expected option value type: int
Definition: ulfius.h:150
void * stream_user_data
Definition: ulfius.h:279
int u_map_remove_from_key_case(struct _u_map *u_map, const char *key)
Definition: u_map.c:260
Remove from map containing the cookie variables, expected option value type: const char *...
Definition: ulfius.h:163
int ulfius_add_endpoint_list(struct _u_instance *u_instance, const struct _u_endpoint **u_endpoint_list)
Definition: ulfius.c:1401
char * auth_basic_password
Definition: ulfius.h:244
int ulfius_set_empty_body_request(struct _u_request *request)
Definition: u_request.c:766
struct _u_map * map_header
Definition: ulfius.h:246
const char * u_map_get_case(const struct _u_map *u_map, const char *key)
Definition: u_map.c:410
int follow_redirect
Definition: ulfius.h:239
struct _u_map * u_map_copy(const struct _u_map *source)
Definition: u_map.c:452
struct _websocket_message * ulfius_websocket_pop_first_message(struct _websocket_message_list *message_list)
Definition: u_websocket.c:1549
int ulfius_websocket_send_close_signal(struct _websocket_manager *websocket_manager)
Definition: u_websocket.c:2182
int ulfius_set_response_properties(struct _u_response *response,...)
Definition: u_response.c:587
int ulfius_add_websocket_extension_message_perform(struct _u_response *response, const char *extension_server, uint8_t rsv, int(*websocket_extension_message_out_perform)(const uint8_t opcode, const uint64_t data_len_in, const char *data_in, uint64_t *data_len_out, char **data_out, const uint64_t fragment_len, void *user_data, void *context), void *websocket_extension_message_out_perform_user_data, int(*websocket_extension_message_in_perform)(const uint8_t opcode, const uint64_t data_len_in, const char *data_in, uint64_t *data_len_out, char **data_out, const uint64_t fragment_len, void *user_data, void *context), void *websocket_extension_message_in_perform_user_data, int(*websocket_extension_server_match)(const char *extension_client, const char **extension_client_list, char **extension_server, void *user_data, void **context), void *websocket_extension_server_match_user_data, void(*websocket_extension_free_context)(void *user_data, void *context), void *websocket_extension_free_context_user_data)
Definition: u_websocket.c:1785
int websocket_extension_server_match_deflate(const char *extension_client, const char **extension_client_list, char **extension_server, void *user_data, void **context)
Definition: u_websocket.c:2022
int ulfius_websocket_send_fragmented_message(struct _websocket_manager *websocket_manager, const uint8_t opcode, const uint64_t data_len, const char *data, const uint64_t fragment_len)
Definition: u_websocket.c:1433
int ulfius_websocket_client_connection_close(struct _websocket_client_handler *websocket_client_handler)
Definition: u_websocket.c:2666
unsigned long timeout
Definition: ulfius.h:241
Empty option to complete a ulfius_set_request_properties or ulfius_set_request_properties.
Definition: ulfius.h:141
path to client key file for sending http requests with certificate authentication, available only if GnuTLS support is enabled, expected option value type: const char *
Definition: ulfius.h:172
int u_map_has_value(const struct _u_map *u_map, const char *value)
Definition: u_map.c:125
struct MHD_PostProcessor * post_processor
Definition: ulfius.h:352
uint64_t stream_size
Definition: ulfius.h:277
size_t max_post_param_size
Definition: ulfius.h:356
int ulfius_set_json_body_response(struct _u_response *response, const unsigned int status, const json_t *j_body)
Definition: u_response.c:662
unsigned int timeout
Definition: ulfius.h:317
Contains all informations needed for an endpoint.
Definition: ulfius.h:291
int websocket_extension_message_in_inflate(const uint8_t opcode, const uint64_t data_len_in, const char *data_in, uint64_t *data_len_out, char **data_out, const uint64_t fragment_len, void *user_data, void *context)
Definition: u_websocket.c:1944
check server certificate and hostname, default true, used by ulfius_send_http_request, expected option value type: int
Definition: ulfius.h:148
char ** keys
Definition: ulfius.h:199
char * client_cert_file
Definition: ulfius.h:254
int secure
Definition: ulfius.h:215
int ulfius_start_secure_framework(struct _u_instance *u_instance, const char *key_pem, const char *cert_pem)
Definition: ulfius.c:1121
proxy address to use for outgoing connections, used by ulfius_send_http_request, expected option valu...
Definition: ulfius.h:144
unsigned int max_age
Definition: ulfius.h:212
Add to the map containing the header variables, expected option value type: const char *...
Definition: ulfius.h:158
char * ulfius_url_decode(const char *str)
Definition: ulfius.c:1830
char * url_prefix
Definition: ulfius.h:293
int u_map_clean(struct _u_map *u_map)
Definition: u_map.c:66