Ulfius
HTTP Framework for REST Applications in C
|
Go to the documentation of this file.
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
50 #define POLLRDHUP 0x2000
55 #include <microhttpd.h>
57 #if defined(_WIN32) && !defined(U_DISABLE_WEBSOCKET)
58 #define U_DISABLE_WEBSOCKET
61 #if (MHD_VERSION < 0x00095300) && !defined(U_DISABLE_WEBSOCKET)
62 #define U_DISABLE_WEBSOCKET
69 #ifndef U_DISABLE_YDER
73 #define Y_LOG_MODE_NONE 0
74 #define Y_LOG_MODE_CONSOLE 0
75 #define Y_LOG_MODE_SYSLOG 0
76 #define Y_LOG_MODE_FILE 0
77 #define Y_LOG_MODE_JOURNALD 0
78 #define Y_LOG_MODE_CALLBACK 0
79 #define Y_LOG_MODE_CURRENT 0
81 #define Y_LOG_LEVEL_NONE 0
82 #define Y_LOG_LEVEL_DEBUG 0
83 #define Y_LOG_LEVEL_INFO 0
84 #define Y_LOG_LEVEL_WARNING 0
85 #define Y_LOG_LEVEL_ERROR 0
86 #define Y_LOG_LEVEL_CURRENT 0
88 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);
89 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);
90 void y_log_message(
const unsigned long type,
const char * message, ...);
94 #ifndef U_DISABLE_JANSSON
103 #define ULFIUS_STREAM_BLOCK_SIZE_DEFAULT 1024
104 #define U_STREAM_END MHD_CONTENT_READER_END_OF_STREAM
105 #define U_STREAM_ERROR MHD_CONTENT_READER_END_WITH_ERROR
106 #define U_STREAM_SIZE_UNKOWN MHD_SIZE_UNKNOWN
110 #define U_ERROR_MEMORY 2
111 #define U_ERROR_PARAMS 3
112 #define U_ERROR_LIBMHD 4
113 #define U_ERROR_LIBCURL 5
114 #define U_ERROR_NOT_FOUND 6
115 #define U_ERROR_DISCONNECTED 7
117 #define U_CALLBACK_CONTINUE 0
118 #define U_CALLBACK_COMPLETE 1
119 #define U_CALLBACK_UNAUTHORIZED 2
120 #define U_CALLBACK_ERROR 3
122 #define U_COOKIE_SAME_SITE_NONE 0
123 #define U_COOKIE_SAME_SITE_STRICT 1
124 #define U_COOKIE_SAME_SITE_LAX 2
126 #define U_USE_IPV4 0x0001
127 #define U_USE_IPV6 0x0010
128 #define U_USE_ALL (U_USE_IPV4|U_USE_IPV6)
130 #define U_SSL_VERIFY_PEER 0x0001
131 #define U_SSL_VERIFY_HOSTNAME 0x0010
142 #if MHD_VERSION >= 0x00095208
143 U_OPT_NETWORK_TYPE = 4,
164 #ifndef U_DISABLE_JANSSON
167 #ifndef U_DISABLE_GNUTLS
229 #if MHD_VERSION >= 0x00095208
230 unsigned short network_type;
249 #ifndef U_DISABLE_GNUTLS
309 #if MHD_VERSION >= 0x00095208
310 unsigned short network_type;
325 const char * filename,
326 const char * content_type,
327 const char * transfer_encoding,
335 #ifndef U_DISABLE_GNUTLS
395 #if MHD_VERSION >= 0x00095208
407 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);
438 #ifndef U_DISABLE_GNUTLS
476 void mhd_request_completed (
void *cls,
struct MHD_Connection *connection,
void **con_cls,
enum MHD_RequestTerminationCode toe);
509 int (* file_upload_callback) (
const struct _u_request * request,
511 const char * filename,
512 const char * content_type,
513 const char * transfer_encoding,
561 const char * http_method,
562 const char * url_prefix,
563 const char * url_format,
564 unsigned int priority,
565 int (* callback_function)(
const struct _u_request * request,
606 int (* callback_function)(
const struct _u_request * request,
struct _u_response * response,
void * user_data),
680 #ifndef U_DISABLE_CURL
727 const int verify_certificate,
729 const char * password,
734 const char * subject,
735 const char * mail_body);
759 const int verify_certificate,
761 const char * password,
766 const char * content_type,
767 const char * subject,
768 const char * mail_body);
796 const char * domain,
const char * path,
const int secure,
const int http_only);
817 const char * domain,
const char * path,
const int secure,
const int http_only,
const int same_site);
919 const unsigned int status,
920 ssize_t (* stream_callback) (
void * stream_user_data, uint64_t offset,
char * out_buf,
size_t max),
921 void (* stream_callback_free) (
void * stream_user_data),
922 uint64_t stream_size,
923 size_t stream_block_size,
924 void * stream_user_data);
1092 #ifndef U_DISABLE_JANSSON
1253 int u_map_put(
struct _u_map * u_map,
const char * key,
const char * value);
1266 int u_map_put_binary(
struct _u_map * u_map,
const char * key,
const char * value, uint64_t offset,
size_t length);
1293 const char *
u_map_get(
const struct _u_map * u_map,
const char * key);
1399 #ifndef U_DISABLE_WEBSOCKET
1405 #define U_WEBSOCKET_USER_AGENT "Ulfius Websocket Client Framework"
1407 #define U_WEBSOCKET_MAGIC_STRING "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
1408 #define U_WEBSOCKET_UPGRADE_VALUE "websocket"
1409 #define U_WEBSOCKET_BAD_REQUEST_BODY "Error in websocket handshake, wrong parameters"
1410 #define U_WEBSOCKET_USEC_WAIT 50
1411 #define WEBSOCKET_MAX_CLOSE_TRY 10
1413 #define U_WEBSOCKET_BIT_FIN 0x80
1414 #define U_WEBSOCKET_MASK 0x80
1415 #define U_WEBSOCKET_LEN_MASK 0x7F
1416 #define U_WEBSOCKET_OPCODE_CONTINUE 0x00
1417 #define U_WEBSOCKET_OPCODE_TEXT 0x01
1418 #define U_WEBSOCKET_OPCODE_BINARY 0x02
1419 #define U_WEBSOCKET_OPCODE_CLOSE 0x08
1420 #define U_WEBSOCKET_OPCODE_PING 0x09
1421 #define U_WEBSOCKET_OPCODE_PONG 0x0A
1422 #define U_WEBSOCKET_OPCODE_CLOSED 0xFD
1423 #define U_WEBSOCKET_OPCODE_ERROR 0xFE
1424 #define U_WEBSOCKET_OPCODE_NONE 0xFF
1426 #define U_WEBSOCKET_NONE 0
1427 #define U_WEBSOCKET_SERVER 1
1428 #define U_WEBSOCKET_CLIENT 2
1430 #define U_WEBSOCKET_STATUS_OPEN 0
1431 #define U_WEBSOCKET_STATUS_CLOSE 1
1432 #define U_WEBSOCKET_STATUS_ERROR 2
1434 #define WEBSOCKET_RESPONSE_HTTP 0x0001
1435 #define WEBSOCKET_RESPONSE_UPGRADE 0x0002
1436 #define WEBSOCKET_RESPONSE_CONNECTION 0x0004
1437 #define WEBSOCKET_RESPONSE_ACCEPT 0x0008
1438 #define WEBSOCKET_RESPONSE_PROTCOL 0x0010
1439 #define WEBSOCKET_RESPONSE_EXTENSION 0x0020
1447 struct _websocket_manager {
1448 struct _websocket_message_list * message_list_incoming;
1449 struct _websocket_message_list * message_list_outcoming;
1452 MHD_socket mhd_sock;
1455 gnutls_session_t gnutls_session;
1456 gnutls_certificate_credentials_t xcred;
1459 pthread_mutex_t read_lock;
1460 pthread_mutex_t write_lock;
1461 pthread_mutex_t status_lock;
1462 pthread_cond_t status_cond;
1472 struct _websocket_message {
1484 struct _websocket_message_list {
1485 struct _websocket_message ** list;
1496 void (* websocket_manager_callback) (
const struct _u_request * request,
1497 struct _websocket_manager * websocket_manager,
1498 void * websocket_manager_user_data);
1499 void * websocket_manager_user_data;
1500 void (* websocket_incoming_message_callback) (
const struct _u_request * request,
1501 struct _websocket_manager * websocket_manager,
1502 const struct _websocket_message * message,
1503 void * websocket_incoming_user_data);
1504 void * websocket_incoming_user_data;
1505 void (* websocket_onclose_callback) (
const struct _u_request * request,
1506 struct _websocket_manager * websocket_manager,
1507 void * websocket_onclose_user_data);
1508 void * websocket_onclose_user_data;
1509 struct _websocket_manager * websocket_manager;
1510 struct MHD_UpgradeResponseHandle * urh;
1516 struct _websocket_client_handler {
1517 struct _websocket * websocket;
1535 const uint8_t opcode,
1536 const uint64_t data_len,
1551 const uint8_t opcode,
1552 const uint64_t data_len,
1554 const uint64_t fragment_len);
1592 const char * websocket_protocol,
1593 const char * websocket_extensions,
1594 void (* websocket_manager_callback) (
const struct _u_request * request,
1595 struct _websocket_manager * websocket_manager,
1596 void * websocket_manager_user_data),
1597 void * websocket_manager_user_data,
1598 void (* websocket_incoming_message_callback) (
const struct _u_request * request,
1599 struct _websocket_manager * websocket_manager,
1600 const struct _websocket_message * message,
1601 void * websocket_incoming_user_data),
1602 void * websocket_incoming_user_data,
1603 void (* websocket_onclose_callback) (
const struct _u_request * request,
1604 struct _websocket_manager * websocket_manager,
1605 void * websocket_onclose_user_data),
1606 void * websocket_onclose_user_data);
1656 void (* websocket_manager_callback) (
const struct _u_request * request,
1657 struct _websocket_manager * websocket_manager,
1658 void * websocket_manager_user_data),
1659 void * websocket_manager_user_data,
1660 void (* websocket_incoming_message_callback) (
const struct _u_request * request,
1661 struct _websocket_manager * websocket_manager,
1662 const struct _websocket_message * message,
1663 void * websocket_incoming_user_data),
1664 void * websocket_incoming_user_data,
1665 void (* websocket_onclose_callback) (
const struct _u_request * request,
1666 struct _websocket_manager * websocket_manager,
1667 void * websocket_onclose_user_data),
1668 void * websocket_onclose_user_data,
1669 struct _websocket_client_handler * websocket_client_handler,
1714 const char * websocket_protocol,
1715 const char * websocket_extensions);
1720 #define ULFIUS_URL_SEPARATOR "/"
1721 #define ULFIUS_HTTP_ENCODING_JSON "application/json"
1722 #define ULFIUS_HTTP_HEADER_CONTENT "Content-Type"
1723 #define ULFIUS_HTTP_NOT_FOUND_BODY "Resource not found"
1724 #define ULFIUS_HTTP_ERROR_BODY "Server Error"
1726 #define ULFIUS_COOKIE_ATTRIBUTE_EXPIRES "Expires"
1727 #define ULFIUS_COOKIE_ATTRIBUTE_MAX_AGE "Max-Age"
1728 #define ULFIUS_COOKIE_ATTRIBUTE_DOMAIN "Domain"
1729 #define ULFIUS_COOKIE_ATTRIBUTE_PATH "Path"
1730 #define ULFIUS_COOKIE_ATTRIBUTE_SECURE "Secure"
1731 #define ULFIUS_COOKIE_ATTRIBUTE_HTTPONLY "HttpOnly"
1733 #define ULFIUS_POSTBUFFERSIZE 1024
1735 #define U_STATUS_STOP 0
1736 #define U_STATUS_RUNNING 1
1737 #define U_STATUS_ERROR 2
1739 #ifndef U_DISABLE_WEBSOCKET
1744 struct _websocket_handle {
1745 char * websocket_protocol;
1746 char * websocket_extensions;
1747 void (* websocket_manager_callback) (
const struct _u_request * request,
1748 struct _websocket_manager * websocket_manager,
1749 void * websocket_manager_user_data);
1750 void * websocket_manager_user_data;
1751 void (* websocket_incoming_message_callback) (
const struct _u_request * request,
1752 struct _websocket_manager * websocket_manager,
1753 const struct _websocket_message * message,
1754 void * websocket_incoming_user_data);
1755 void * websocket_incoming_user_data;
1756 void (* websocket_onclose_callback) (
const struct _u_request * request,
1757 struct _websocket_manager * websocket_manager,
1758 void * websocket_onclose_user_data);
1759 void * websocket_onclose_user_data;
1765 struct _websocket_handler {
1766 size_t nb_websocket_active;
1767 struct _websocket ** websocket_active;
1768 pthread_mutex_t websocket_close_lock;
1769 pthread_cond_t websocket_close_cond;
1773 #endif // U_DISABLE_WEBSOCKET
1785 #ifndef U_DISABLE_GNUTLS
1804 #endif // U_DISABLE_GNUTLS
1814 #endif // __ULFIUS_H__
@ U_OPT_CA_PATH
specify a path to CA certificates instead of system path, used by ulfius_send_http_request,...
Definition: ulfius.h:150
struct _u_endpoint * endpoint_list
Definition: ulfius.h:317
int ulfius_stop_framework(struct _u_instance *u_instance)
Definition: ulfius.c:1112
int u_map_init(struct _u_map *u_map)
Definition: u_map.c:38
int u_map_empty(struct _u_map *u_map)
Definition: u_map.c:627
int http_only
Definition: ulfius.h:213
int mhd_response_copy_data
Definition: ulfius.h:333
int u_map_has_key(const struct _u_map *u_map, const char *key)
Definition: u_map.c:143
@ U_OPT_AUTH_REALM
realm to send to the client response on authenticationb failed, expected option value type: const cha...
Definition: ulfius.h:173
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:233
char * proxy
Definition: ulfius.h:228
const char * u_map_get_case(const struct _u_map *u_map, const char *key)
Definition: u_map.c:505
int ulfius_equals_endpoints(const struct _u_endpoint *endpoint1, const struct _u_endpoint *endpoint2)
Definition: ulfius.c:1364
uint64_t stream_size
Definition: ulfius.h:274
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:1399
@ U_OPT_AUTH_BASIC_USER
basic authentication username, expected option value type: const char *
Definition: ulfius.h:152
char * key
Definition: ulfius.h:206
void * file_upload_cls
Definition: ulfius.h:332
char * url_path
Definition: ulfius.h:227
ssize_t u_map_get_case_length(const struct _u_map *u_map, const char *key)
Definition: u_map.c:543
@ U_OPT_URL_PARAMETER
Add to the map containing the url variables, both from the route and the ?key=value variables,...
Definition: ulfius.h:154
@ U_OPT_CLIENT_CERT_FILE
path to client certificate file for sending http requests with certificate authentication,...
Definition: ulfius.h:168
struct MHD_Daemon * mhd_daemon
Definition: ulfius.h:306
int ulfius_start_secure_framework(struct _u_instance *u_instance, const char *key_pem, const char *cert_pem)
Definition: ulfius.c:976
const char ** u_map_enum_values(const struct _u_map *u_map)
Definition: u_map.c:134
void ulfius_clean_instance(struct _u_instance *u_instance)
Definition: ulfius.c:1524
char ** values
Definition: ulfius.h:197
@ U_OPT_CHECK_SERVER_CERTIFICATE
check server certificate and hostname, default true, used by ulfius_send_http_request,...
Definition: ulfius.h:145
char * auth_realm
Definition: ulfius.h:269
int u_map_copy_into(struct _u_map *dest, const struct _u_map *source)
Definition: u_map.c:592
int has_post_processor
Definition: ulfius.h:350
char * ulfius_url_decode(const char *str)
Definition: ulfius.c:1784
unsigned int port
Definition: ulfius.h:308
void * ulfius_uri_logger(void *cls, const char *uri)
Definition: ulfius.c:201
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:1634
int ulfius_set_string_body_response(struct _u_response *response, const unsigned int status, const char *body)
Definition: u_response.c:569
@ U_OPT_CHECK_PROXY_CERTIFICATE
check proxy certificate and hostname, default true, used by ulfius_send_http_request,...
Definition: ulfius.h:147
unsigned int timeout
Definition: ulfius.h:279
@ U_OPT_HEADER_PARAMETER_REMOVE
Remove from map containing the header variables, expected option value type: const char *.
Definition: ulfius.h:159
ssize_t(* stream_callback)(void *stream_user_data, uint64_t offset, char *out_buf, size_t max)
Definition: ulfius.h:272
Contains all informations needed for an endpoint.
Definition: ulfius.h:288
char * default_auth_realm
Definition: ulfius.h:316
int same_site
Definition: ulfius.h:214
const char * u_map_get(const struct _u_map *u_map, const char *key)
Definition: u_map.c:448
int ulfius_add_endpoint_list(struct _u_instance *u_instance, const struct _u_endpoint **u_endpoint_list)
Definition: ulfius.c:1265
void * websocket_handler
Definition: ulfius.h:322
struct sockaddr_in * bind_address
Definition: ulfius.h:312
int ulfius_set_empty_body_request(struct _u_request *request)
Definition: u_request.c:766
int u_map_has_key_case(const struct _u_map *u_map, const char *key)
Definition: u_map.c:471
unsigned int timeout
Definition: ulfius.h:314
int ulfius_import_client_certificate_pem(struct _u_request *request, const char *str_cert)
Definition: u_request.c:892
int callback_first_iteration
Definition: ulfius.h:351
@ U_OPT_FOLLOW_REDIRECT
follow url redirections, used by ulfius_send_http_request, expected option value type: int
Definition: ulfius.h:149
int u_map_clean(struct _u_map *u_map)
Definition: u_map.c:75
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:592
int ulfius_start_framework(struct _u_instance *u_instance)
Definition: ulfius.c:959
int nb_values
Definition: ulfius.h:195
char * client_key_file
Definition: ulfius.h:252
int check_server_certificate_flag
Definition: ulfius.h:233
int ulfius_websocket_client_connection_close(struct _websocket_client_handler *websocket_client_handler)
Definition: u_websocket.c:1670
char * expires
Definition: ulfius.h:208
char * path
Definition: ulfius.h:211
unsigned int callback_position
Definition: ulfius.h:248
struct _u_endpoint * default_endpoint
Definition: ulfius.h:318
int u_map_put(struct _u_map *u_map, const char *key, const char *value)
Definition: u_map.c:186
@ U_OPT_SHARED_DATA
any data shared between callback functions, must be allocated and freed by the callback functions,...
Definition: ulfius.h:174
@ U_OPT_STATUS
HTTP response status code (200, 404, 500, etc), expected option value type: long.
Definition: ulfius.h:172
@ U_OPT_CLIENT_KEY_FILE
path to client key file for sending http requests with certificate authentication,...
Definition: ulfius.h:169
unsigned long timeout
Definition: ulfius.h:238
unsigned int max_age
Definition: ulfius.h:209
@ U_OPT_BINARY_BODY
Set a raw body to the request or the reponse, expected option value type: const char *,...
Definition: ulfius.h:162
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)
Definition: ulfius.h:323
int use_client_cert_auth
Definition: ulfius.h:336
json_t * ulfius_get_json_body_request(const struct _u_request *request, json_error_t *json_error)
Definition: u_request.c:839
size_t binary_body_length
Definition: ulfius.h:271
int ulfius_set_string_body_request(struct _u_request *request, const char *string_body)
Definition: u_request.c:719
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
char * ulfius_url_encode(const char *str)
Definition: ulfius.c:1750
int secure
Definition: ulfius.h:212
int follow_redirect
Definition: ulfius.h:236
const char ** u_map_enum_keys(const struct _u_map *u_map)
Definition: u_map.c:126
struct _u_instance * u_instance
Definition: ulfius.h:348
@ U_OPT_COOKIE_PARAMETER_REMOVE
Remove from map containing the cookie variables, expected option value type: const char *.
Definition: ulfius.h:160
int u_map_has_value_case(const struct _u_map *u_map, const char *value)
Definition: u_map.c:488
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:907
@ U_OPT_AUTH_BASIC_PASSWORD
basic authentication password, expected option value type: const char *
Definition: ulfius.h:153
char * auth_basic_user
Definition: ulfius.h:240
int u_map_remove_from_key(struct _u_map *u_map, const char *key)
Definition: u_map.c:292
void mhd_request_completed(void *cls, struct MHD_Connection *connection, void **con_cls, enum MHD_RequestTerminationCode toe)
Definition: ulfius.c:278
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:1096
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:1141
struct _u_map * map_url
Definition: ulfius.h:242
int ulfius_websocket_status(struct _websocket_manager *websocket_manager)
Definition: u_websocket.c:1408
char ** keys
Definition: ulfius.h:196
int ulfius_clean_response(struct _u_response *response)
Definition: u_response.c:370
void * websocket_handle
Definition: ulfius.h:277
int ulfius_set_json_body_response(struct _u_response *response, const unsigned int status, const json_t *j_body)
Definition: u_response.c:744
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:1025
int ulfius_set_empty_body_response(struct _u_response *response, const unsigned int status)
Definition: u_response.c:618
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:200
int ulfius_copy_response(struct _u_response *dest, const struct _u_response *source)
Definition: u_response.c:469
unsigned int priority
Definition: ulfius.h:292
@ U_OPT_STRING_BODY
Set a char * body to the request or the reponse, expected option value type: const char *.
Definition: ulfius.h:163
char * url_prefix
Definition: ulfius.h:290
@ U_OPT_CHECK_PROXY_CERTIFICATE_FLAG
check certificate peer and or proxy hostname if check_proxy_certificate is enabled,...
Definition: ulfius.h:148
int u_map_remove_from_key_case(struct _u_map *u_map, const char *key)
Definition: u_map.c:319
size_t stream_block_size
Definition: ulfius.h:275
int ulfius_websocket_send_close_signal(struct _websocket_manager *websocket_manager)
Definition: u_websocket.c:1394
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:1499
void ulfius_clean_endpoint(struct _u_endpoint *endpoint)
Definition: ulfius.c:1185
@ U_OPT_COOKIE_PARAMETER
Add to the map containing the cookie variables, expected option value type: const char *,...
Definition: ulfius.h:156
int ulfius_set_response_properties(struct _u_response *response,...)
Definition: u_response.c:669
int ulfius_init_request(struct _u_request *request)
Definition: u_request.c:302
definition of the parameters available in a struct _u_response
Definition: ulfius.h:263
struct _u_map * map_cookie
Definition: ulfius.h:244
int check_proxy_certificate_flag
Definition: ulfius.h:235
int check_server_certificate
Definition: ulfius.h:232
int check_utf8
Definition: ulfius.h:334
struct _u_map * default_headers
Definition: ulfius.h:319
gnutls_x509_crt_t client_cert
Definition: ulfius.h:250
int nb_endpoints
Definition: ulfius.h:315
char * protocol
Definition: ulfius.h:265
int check_proxy_certificate
Definition: ulfius.h:234
void ulfius_clean_endpoint_list(struct _u_endpoint *endpoint_list)
Definition: ulfius.c:1200
size_t binary_body_length
Definition: ulfius.h:247
struct _u_response * ulfius_duplicate_response(const struct _u_response *response)
Definition: u_response.c:540
void * stream_user_data
Definition: ulfius.h:276
struct _websocket_message * ulfius_websocket_pop_first_message(struct _websocket_message_list *message_list)
Definition: u_websocket.c:1153
int u_map_remove_from_value_binary(struct _u_map *u_map, const char *key, size_t length)
Definition: u_map.c:354
struct _u_map * map_header
Definition: ulfius.h:243
int u_map_clean_full(struct _u_map *u_map)
Definition: u_map.c:95
char * http_method
Definition: ulfius.h:289
int ulfius_clean_cookie(struct _u_cookie *cookie)
Definition: u_response.c:316
size_t * lengths
Definition: ulfius.h:198
@ U_OPT_CLIENT_KEY_PASSWORD
password to unlock client key file, available only if GnuTLS support is enabled, expected option valu...
Definition: ulfius.h:170
@ U_OPT_URL_PARAMETER_REMOVE
Remove from the map containing the url variables, both from the route and the ?key=value variables,...
Definition: ulfius.h:158
int ulfius_websocket_client_connection_wait_close(struct _websocket_client_handler *websocket_client_handler, unsigned int timeout)
Definition: u_websocket.c:1707
int u_map_count(const struct _u_map *source)
Definition: u_map.c:614
@ U_OPT_HTTP_VERB
http method (GET, POST, PUT, DELETE, etc.), expected option value type: const char *
Definition: ulfius.h:139
struct _u_request * ulfius_duplicate_request(const struct _u_request *request)
Definition: u_request.c:782
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:1340
int ulfius_start_framework_with_mhd_options(struct _u_instance *u_instance, unsigned int mhd_flags, struct MHD_OptionItem *options)
Definition: ulfius.c:1085
@ U_OPT_NONE
Empty option to complete a ulfius_set_request_properties or ulfius_set_request_properties.
Definition: ulfius.h:138
@ U_OPT_POST_BODY_PARAMETER
Add to the map containing the post body variables (if available), expected option value type: const c...
Definition: ulfius.h:157
int status
Definition: ulfius.h:307
int ulfius_add_header_to_response(struct _u_response *response, const char *key, const char *value)
Definition: u_response.c:784
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:1457
int ulfius_add_endpoint(struct _u_instance *u_instance, const struct _u_endpoint *u_endpoint)
Definition: ulfius.c:1218
int ulfius_set_request_properties(struct _u_request *request,...)
Definition: u_request.c:529
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:1434
struct _u_map * map_post_body
Definition: ulfius.h:245
void ulfius_clear_websocket_message(struct _websocket_message *message)
Definition: u_websocket.c:1175
int ulfius_remove_endpoint(struct _u_instance *u_instance, const struct _u_endpoint *u_endpoint)
Definition: ulfius.c:1291
int ulfius_set_websocket_request(struct _u_request *request, const char *url, const char *websocket_protocol, const char *websocket_extensions)
Definition: u_websocket.c:1496
struct _u_map * map_header
Definition: ulfius.h:266
int ulfius_set_binary_body_request(struct _u_request *request, const char *binary_body, const size_t length)
Definition: u_request.c:741
int u_map_remove_from_value_case(struct _u_map *u_map, const char *value)
Definition: u_map.c:381
int u_map_remove_from_value(struct _u_map *u_map, const char *value)
Definition: u_map.c:346
char * http_protocol
Definition: ulfius.h:224
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:639
char * value
Definition: ulfius.h:207
definition of the parameters available in a struct _u_request
Definition: ulfius.h:223
@ U_OPT_HTTP_PROXY
proxy address to use for outgoing connections, used by ulfius_send_http_request, expected option valu...
Definition: ulfius.h:141
unsigned int nb_cookies
Definition: ulfius.h:267
u_option
Definition: ulfius.h:137
@ U_OPT_POST_BODY_PARAMETER_REMOVE
Remove from map containing the post body variables (if available), expected option value type: const ...
Definition: ulfius.h:161
struct _u_request * request
Definition: ulfius.h:352
struct _u_endpoint * ulfius_duplicate_endpoint_list(const struct _u_endpoint *endpoint_list)
Definition: ulfius.c:1164
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:219
void * user_data
Definition: ulfius.h:296
int ulfius_copy_request(struct _u_request *dest, const struct _u_request *source)
Definition: u_request.c:415
@ U_OPT_HEADER_PARAMETER
Add to the map containing the header variables, expected option value type: const char *,...
Definition: ulfius.h:155
@ U_OPT_CHECK_SERVER_CERTIFICATE_FLAG
check certificate peer and or server hostname if check_server_certificate is enabled,...
Definition: ulfius.h:146
struct sockaddr_in6 * bind_address6
Definition: ulfius.h:313
char * http_verb
Definition: ulfius.h:225
int ulfius_init_response(struct _u_response *response)
Definition: u_response.c:419
int u_map_clean_enum(char **array)
Definition: u_map.c:108
char * client_cert_file
Definition: ulfius.h:251
@ U_OPT_TIMEOUT
connection timeout used by ulfius_send_http_request, default is 0 or Timeout in seconds to close the ...
Definition: ulfius.h:151
int u_map_remove_at(struct _u_map *u_map, const int index)
Definition: u_map.c:408
void(* stream_callback_free)(void *stream_user_data)
Definition: ulfius.h:273
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:189
struct _u_map map_url_initial
Definition: ulfius.h:354
void * binary_body
Definition: ulfius.h:246
char * http_url
Definition: ulfius.h:226
Contains the needed data for an ulfius instance to work.
Definition: ulfius.h:305
char * client_key_password
Definition: ulfius.h:253
char * domain
Definition: ulfius.h:210
char * auth_basic_password
Definition: ulfius.h:241
struct _u_map * u_map_copy(const struct _u_map *source)
Definition: u_map.c:562
struct _u_cookie * map_cookie
Definition: ulfius.h:268
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:1541
@ U_OPT_JSON_BODY
Set a stringified json_t * body to the request or the reponse, expected option value type: json_t *.
Definition: ulfius.h:165
struct sockaddr * client_address
Definition: ulfius.h:239
size_t max_post_param_size
Definition: ulfius.h:320
ssize_t u_map_get_length(const struct _u_map *u_map, const char *key)
Definition: u_map.c:524
int u_map_has_value_binary(const struct _u_map *u_map, const char *value, size_t length)
Definition: u_map.c:169
int ulfius_copy_endpoint(struct _u_endpoint *dest, const struct _u_endpoint *source)
Definition: ulfius.c:1142
int ulfius_clean_response_full(struct _u_response *response)
Definition: u_response.c:405
void u_free(void *data)
Definition: ulfius.c:1662
char * ulfius_export_client_certificate_pem(const struct _u_request *request)
Definition: u_request.c:868
@ U_OPT_HTTP_URL
full url used to call this callback function or full url to call when used in a ulfius_send_http_requ...
Definition: ulfius.h:140
int ulfius_websocket_client_connection_send_close_signal(struct _websocket_client_handler *websocket_client_handler)
Definition: u_websocket.c:1657
int u_map_has_value(const struct _u_map *u_map, const char *value)
Definition: u_map.c:160
int ulfius_copy_cookie(struct _u_cookie *dest, const struct _u_cookie *source)
Definition: u_response.c:338
char * ca_path
Definition: ulfius.h:237
void * binary_body
Definition: ulfius.h:270
int ulfius_clean_request(struct _u_request *request)
Definition: u_request.c:358
int ulfius_set_json_body_request(struct _u_request *request, json_t *j_body)
Definition: u_request.c:813
json_t * ulfius_get_json_body_response(struct _u_response *response, json_error_t *json_error)
Definition: u_response.c:771
void * shared_data
Definition: ulfius.h:278
struct MHD_PostProcessor * post_processor
Definition: ulfius.h:349
long status
Definition: ulfius.h:264
size_t max_post_param_size
Definition: ulfius.h:353
int ulfius_send_http_request(const struct _u_request *request, struct _u_response *response)
Definition: u_send_request.c:157
int ulfius_websocket_wait_close(struct _websocket_manager *websocket_manager, unsigned int timeout)
Definition: u_websocket.c:1422
const struct _u_endpoint * ulfius_empty_endpoint()
Definition: ulfius.c:1349
size_t max_post_body_size
Definition: ulfius.h:321
int(* callback_function)(const struct _u_request *request, struct _u_response *response, void *user_data)
Definition: ulfius.h:293
int ulfius_clean_request_full(struct _u_request *request)
Definition: u_request.c:401
int ulfius_websocket_client_connection_status(struct _websocket_client_handler *websocket_client_handler)
Definition: u_websocket.c:1693
char * url_format
Definition: ulfius.h:291