123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- /*
- * Copyright (C) 2010-2011 Mamadou Diop.
- *
- * Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
- *
- * This file is part of Open Source Doubango Framework.
- *
- * DOUBANGO is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * DOUBANGO 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 DOUBANGO.
- *
- */
- /**@file thttp.h
- * @brief HTTP (RFC 2616) and HTTP basic/digest authetication (RFC 2617) implementations.
- *
- * @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
- *
- */
- #ifndef TINYHTTP_THTTP_H
- #define TINYHTTP_THTTP_H
- #include "tinyhttp_config.h"
- #include "tinyhttp/thttp_event.h"
- #include "tinyhttp/thttp_session.h"
- #include "tnet_transport.h"
- /**@def THTTP_STACK_SET_NULL()
- * Ends stack parameters. Must always be the last one.
- */
- /**@def THTTP_STACK_SET_LOCAL_IP(STR)
- * Sets local IP address to bind to. By default, the stack will bind to "0.0.0.0" or "::" depending on
- * whether IPv4 is used or not (IPv6).
- * This is a helper macro for @ref thttp_stack_create and @ref thttp_stack_set.
- * @param IP_STR The IP address (const char*).
- *
- * @code
- * thttp_stack_create(callback,
- * THTTP_STACK_SET_LOCAL_IP("192.168.0.15"),
- * THTTP_STACK_SET_NULL());
- * @endcode
- *
- * @sa @ref THTTP_STACK_SET_LOCAL_PORT<br>@ref thttp_stack_create<br>@ref thttp_stack_set
- */
- /**@def THTTP_STACK_SET_LOCAL_PORT(PORT_INT)
- * Sets local Port to bind to. By default, the stack will bind to a random port.
- * This is a helper macro for @ref thttp_stack_create and @ref thttp_stack_set.
- * @param PORT_INT The Port (int32_t).
- *
- * @code
- * thttp_stack_create(callback,
- * THTTP_STACK_SET_LOCAL_PORT(1234),
- * THTTP_STACK_SET_NULL());
- * @endcode
- * @sa @ref THTTP_STACK_SET_LOCAL_IP<br>@ref thttp_stack_create<br>@ref thttp_stack_set
- */
- /**@def THTTP_STACK_SET_TLS_CERTS(CA_FILE_STR, PUB_FILE_STR, PRIV_FILE_STR)
- * Sets TLS certificates (Mutual Authentication). Not mandatory.
- * This is a helper macro for @ref thttp_stack_create and @ref thttp_stack_set.
- * @param CA_FILE_STR Path to the Certification Authority File.
- * @param PUB_FILE_STR Path to the Public key file.
- * @param PRIV_FILE_STR Path to the Private key file.
- *
- * @code
- * thttp_stack_create(callback,
- * THTTP_STACK_SET_TLS_CERTS("C:\\tls\\ca.pki-crt.pem", "C:\\tls\\pub-crt.pem", "C:\\tls\\priv-key.pem"),
- * THTTP_STACK_SET_NULL());
- * @endcode
- */
- THTTP_BEGIN_DECLS
- typedef enum thttp_stack_param_type_e {
- thttp_pname_null = 0,
- #define THTTP_STACK_SET_NULL() thttp_pname_null
- /* Network */
- thttp_pname_local_ip,
- thttp_pname_local_port,
- thttp_pname_proxy,
- #define THTTP_STACK_SET_LOCAL_IP(IP_STR) thttp_pname_local_ip, (const char*)IP_STR
- #define THTTP_STACK_SET_LOCAL_PORT(PORT_INT) thttp_pname_local_port, (int)PORT_INT
- #define THTTP_STACK_SET_PROXY(IP_STR, PORT_INT) thttp_pname_proxy, (const char*)IP_STR, (int)PORT_INT
- /* Modes */
- thttp_pname_mode_client,
- thttp_pname_mode_server,
- #define THTTP_STACK_SET_MODE_CLIENT() thttp_pname_mode_client
- #define THTTP_STACK_SET_MODE_SERVER() thttp_pname_mode_server
- /* TLS */
- thttp_pname_tls_enabled,
- #define THTTP_STACK_SET_TLS_ENABLED(ENABLED_BOOL) thttp_pname_tls_enabled, (tsk_bool_t)ENABLED_BOOL
- thttp_pname_tls_certs_verify,
- #define THTTP_STACK_SET_TLS_CERTS_VERIFY(CERTS_VERIFY_BOOL) thttp_pname_tls_certs_verify, (tsk_bool_t)CERTS_VERIFY_BOOL
- thttp_pname_tls_certs,
- #define THTTP_STACK_SET_TLS_CERTS(CA_FILE_STR, PUB_FILE_STR, PRIV_FILE_STR) thttp_pname_tls_certs, (const char*)CA_FILE_STR, (const char*)PUB_FILE_STR, (const char*)PRIV_FILE_STR
- /* User Data */
- thttp_pname_userdata,
- #define THTTP_STACK_SET_USERDATA(USERDATA_PTR) thttp_pname_userdata, (const void*)USERDATA_PTR
- }
- thttp_stack_param_type_t;
- typedef enum thttp_stack_mode_e {
- thttp_stack_mode_none,
- thttp_stack_mode_client = (0x01 << 0),
- thttp_stack_mode_server = (0x01 << 1),
- thttp_stack_mode_hybrid = (thttp_stack_mode_client | thttp_stack_mode_server)
- }
- thttp_stack_mode_t;
- /** HTTP/HTTPS Stack.
- */
- typedef struct thttp_stack_s {
- TSK_DECLARE_OBJECT;
- tsk_bool_t started;
- enum thttp_stack_mode_e mode;
- thttp_stack_callback_f callback;
- /* Network */
- char* local_ip;
- int local_port;
- char* proxy_ip;
- int proxy_port;
- tnet_transport_t *transport;
- /* TLS */
- struct {
- tsk_bool_t enabled;
- tsk_bool_t verify;
- char* ca;
- char* pbk;
- char* pvk;
- } tls;
- thttp_sessions_L_t* sessions;
- const void* userdata;
- TSK_DECLARE_SAFEOBJ;
- }
- thttp_stack_t;
- TINYHTTP_API int thttp_startup();
- TINYHTTP_API int thttp_cleanup();
- TINYHTTP_API thttp_stack_handle_t *thttp_stack_create(thttp_stack_callback_f callback, ...);
- TINYHTTP_API int thttp_stack_start(thttp_stack_handle_t *self);
- TINYHTTP_API int thttp_stack_set(thttp_stack_handle_t *self, ...);
- TINYHTTP_API const void* thttp_stack_get_userdata(thttp_stack_handle_t *self);
- TINYHTTP_API int thttp_stack_stop(thttp_stack_handle_t *self);
- TINYHTTP_GEXTERN const tsk_object_def_t *thttp_stack_def_t;
- THTTP_END_DECLS
- #endif /* TINYHTTP_THTTP_H */
|