|
Ulfius
HTTP Framework for REST Applications in C
|
#include <string.h>#include <ctype.h>#include <stdlib.h>#include <pthread.h>#include "u_private.h"#include "ulfius.h"#include <curl/curl.h>Macros | |
| #define | MHD_CREATE_RESPONSE_FROM_BUFFER_PIMPED(len, buf, flag) MHD_create_response_from_buffer((len), (buf), (flag)) |
Functions | |
| void * | ulfius_uri_logger (void *cls, const char *uri) |
| void | mhd_request_completed (void *cls, struct MHD_Connection *connection, void **con_cls, enum MHD_RequestTerminationCode toe) |
| int | ulfius_start_framework (struct _u_instance *u_instance) |
| int | ulfius_start_secure_framework (struct _u_instance *u_instance, const char *key_pem, const char *cert_pem) |
| 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) |
| int | ulfius_start_framework_with_mhd_options (struct _u_instance *u_instance, unsigned int mhd_flags, struct MHD_OptionItem *mhd_ops) |
| int | ulfius_stop_framework (struct _u_instance *u_instance) |
| int | ulfius_copy_endpoint (struct _u_endpoint *dest, const struct _u_endpoint *source) |
| struct _u_endpoint * | ulfius_duplicate_endpoint_list (const struct _u_endpoint *endpoint_list) |
| void | ulfius_clean_endpoint (struct _u_endpoint *endpoint) |
| void | ulfius_clean_endpoint_list (struct _u_endpoint *endpoint_list) |
| int | ulfius_add_endpoint (struct _u_instance *u_instance, const struct _u_endpoint *u_endpoint) |
| int | ulfius_add_endpoint_list (struct _u_instance *u_instance, const struct _u_endpoint **u_endpoint_list) |
| int | ulfius_remove_endpoint (struct _u_instance *u_instance, const struct _u_endpoint *u_endpoint) |
| const struct _u_endpoint * | ulfius_empty_endpoint (void) |
| int | ulfius_equals_endpoints (const struct _u_endpoint *endpoint1, const struct _u_endpoint *endpoint2) |
| 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) |
| int | ulfius_remove_endpoint_by_val (struct _u_instance *u_instance, const char *http_method, const char *url_prefix, const char *url_format) |
| 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) |
| 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) |
| void | ulfius_clean_instance (struct _u_instance *u_instance) |
| int | ulfius_init_instance (struct _u_instance *u_instance, unsigned int port, struct sockaddr_in *bind_address, const char *default_auth_realm) |
| void | u_free (void *data) |
| const unsigned char * | utf8_check (const char *s_orig, size_t len) |
| char * | ulfius_url_encode (const char *str) |
| char * | ulfius_url_decode (const char *str) |
| int | ulfius_global_init (void) |
| void | ulfius_global_close (void) |
| #define MHD_CREATE_RESPONSE_FROM_BUFFER_PIMPED | ( | len, | |
| buf, | |||
| flag | |||
| ) | MHD_create_response_from_buffer((len), (buf), (flag)) |
| const unsigned char * utf8_check | ( | const char * | s_orig, |
| size_t | len | ||
| ) |
The utf8_check() function scans the string starting at s. It returns a pointer to the first byte of the first malformed or overlong UTF-8 sequence found, or NULL if the string contains only correct UTF-8. It also spots UTF-8 sequences that could cause trouble if converted to UTF-16, namely surrogate characters (U+D800..U+DFFF) and non-Unicode positions (U+FFFE..U+FFFF). This routine is very likely to find a malformed sequence if the input uses any other encoding than UTF-8. It therefore can be used as a very effective heuristic for distinguishing between UTF-8 and other encodings.
I wrote this code mainly as a specification of functionality; there are no doubt performance optimizations possible for certain CPUs.
Markus Kuhn http://www.cl.cam.ac.uk/~mgk25/ – 2005-03-30 Nicolas Mora mail@.nosp@m.babe.nosp@m.loues.nosp@m.t.or.nosp@m.g License: http://www.cl.cam.ac.uk/~mgk25/short-license.html