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"
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 () |
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) |
char * | ulfius_url_encode (const char *str) |
char * | ulfius_url_decode (const char *str) |
#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 | ) |
The utf8_check() function scans the '\0'-terminated 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 License: http://www.cl.cam.ac.uk/~mgk25/short-license.html