00001
00011 #ifndef MIHL_H_
00012 #define MIHL_H_
00013
00014 #ifndef __USE_XOPEN_EXTENDED
00015 # define __USE_XOPEN_EXTENDED
00016 #endif
00017 #include <unistd.h>
00018 #include <sys/select.h>
00019 #include <sys/types.h>
00020 #include <sys/socket.h>
00021 #include <netinet/in.h>
00022 #include <arpa/inet.h>
00023 #include <netdb.h>
00024 #include <stdint.h>
00025
00026 typedef int SOCKET;
00027
00028 typedef struct mihl_ctx mihl_ctx_t;
00029
00030 typedef struct mihl_cnx mihl_cnx_t;
00031
00032 typedef int (mihl_pf_handle_get_t)(mihl_cnx_t *, char const *, char const *, void *);
00033
00034 typedef int (mihl_pf_handle_post_t)(mihl_cnx_t *, char const *, char const *, int, char **, char **, void *);
00035
00036 mihl_ctx_t *mihl_get_ctx( mihl_cnx_t *cnx );
00037
00038 int mihl_log( mihl_ctx_t *, unsigned level, const char *fmt, ... );
00039
00040 mihl_ctx_t *mihl_init( char const *bind_addr, int port, int maxnb_cnx, unsigned log_level );
00041
00042 int mihl_end( mihl_ctx_t * );
00043
00044 int mihl_server( mihl_ctx_t * );
00045
00046 int mihl_add( mihl_cnx_t *cnx, char const *fmt, ... );
00047
00048 int mihl_send( mihl_cnx_t *cnx, char const *answer, char const *fmt_header, ... );
00049
00050 int mihl_handle_get( mihl_ctx_t *ctx, char const *tag, mihl_pf_handle_get_t *pf, void *param );
00051
00052 int mihl_handle_post( mihl_ctx_t *ctx, char const *tag, mihl_pf_handle_post_t *pf, void *param );
00053
00054 int mihl_handle_file( mihl_ctx_t *ctx, char const *tag, char const *filename,
00055 char const *content_type, int close_connection );
00056
00057 typedef struct {
00058 struct sockaddr_in client_addr;
00059 time_t time_started;
00060 time_t time_last_data;
00061 char *last_request;
00062 char *host;
00063 char *user_agent;
00064 } mihl_cnxinfo_t;
00065
00066 int mihl_info( mihl_ctx_t *ctx, int maxnb_cnxinfos, mihl_cnxinfo_t *infos );
00067
00068 typedef enum mihl_log_level {
00069 MIHL_LOG_ERROR = 0x01,
00070 MIHL_LOG_WARNING = 0x02,
00071 MIHL_LOG_INFO = 0x04,
00072 MIHL_LOG_INFO_VERBOSE = 0x08,
00073 MIHL_LOG_DEBUG = 0x10
00074 } mihl_log_level_t;
00075 void mihl_set_log_level( mihl_ctx_t *, mihl_log_level_t level );
00076
00077 mihl_log_level_t mihl_get_log_level( mihl_ctx_t * );
00078
00079 int mihl_dump_info( mihl_ctx_t * );
00080
00081 int mihl_dump_info_handlers( mihl_ctx_t *ctx );
00082
00083 int send_file( mihl_cnx_t *cnx, char const *tag, char const *filename, char *content_type, int close_connection );
00084
00085 char *mihl_authorization( mihl_cnx_t *cnx );
00086
00087
00088 void mihl_base64_encode( char const *bin, size_t size, char *bout, size_t maxlen );
00089 void mihl_base64_decode( char const *bin, size_t size, char *bout, size_t maxlen );
00090
00091 #endif