httpd.h
Go to the documentation of this file.00001 #ifndef _PRO_HTTPD_H_
00002 #define _PRO_HTTPD_H_
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00080 #include <stdint.h>
00081
00082 #include <stdio.h>
00083 #include <time.h>
00084
00089
00090 #define METHOD_GET 1
00091 #define METHOD_POST 2
00092 #define METHOD_HEAD 3
00093
00094 #define HTTP_CONN_CLOSE 1
00095 #define HTTP_CONN_KEEP_ALIVE 2
00096
00097 #define HTTP_OF_USE_HOST_TIME 0x00000001UL
00098 #define HTTP_OF_USE_FILE_TIME 0x00000002UL
00099
00100 typedef struct _REQUEST REQUEST;
00105 struct _REQUEST {
00106 int req_method;
00107 int req_version;
00108 long req_length;
00109 char *req_url;
00110 char *req_query;
00111 char *req_type;
00112 char *req_cookie;
00113 char *req_auth;
00114 char *req_agent;
00115 char **req_qptrs;
00116 int req_numqptrs;
00117 time_t req_ims;
00118 char *req_referer;
00119 char *req_host;
00120 int req_connection;
00121 };
00122
00123 typedef struct _MIMETYPES MIMETYPES;
00124
00125 struct _MIMETYPES {
00126 char *mtyp_ext;
00127 char *mtyp_type;
00128 void (*mtyp_handler)(FILE *stream, int fd, int file_len, char *http_root, REQUEST *req);
00129 };
00130
00131 __BEGIN_DECLS
00132
00133 extern void NutHttpProcessRequest(FILE * stream);
00134 extern void NutHttpProcessQueryString(REQUEST * req);
00135 extern void NutHttpSendHeaderTop(FILE * stream, REQUEST * req, int status, char *title);
00136 extern void NutHttpSendHeaderBottom(FILE * stream, REQUEST * req, char *mime_type, long bytes);
00137 extern void NutHttpSendHeaderBot(FILE * stream, char *mime_type, long bytes);
00138 extern void NutHttpSendError(FILE * stream, REQUEST * req, int status);
00139 extern char *NutGetMimeType(char *name);
00140 extern void *NutGetMimeHandler(char *name);
00141 extern uint8_t NutSetMimeHandler(char *extension, void (*handler)(FILE *stream, int fd, int file_len, char *http_root, REQUEST *req));
00142
00143 __END_DECLS
00144
00145
00146
00147
00148 typedef struct _AUTHINFO AUTHINFO;
00149
00154 struct _AUTHINFO {
00155 AUTHINFO *auth_next;
00156 char *auth_dirname;
00157 char *auth_login;
00158 };
00159
00160 __BEGIN_DECLS
00161
00162 extern int NutHttpAuthValidate(REQUEST * req);
00163 extern int NutRegisterAuth(CONST char *dirname, CONST char *login);
00164 extern void NutClearAuth(void);
00165
00166 __END_DECLS
00167
00168
00169
00170
00171 typedef struct _CGIFUNCTION CGIFUNCTION;
00172
00177 struct _CGIFUNCTION {
00178 CGIFUNCTION *cgi_next;
00179 char *cgi_name;
00180 int (*cgi_func) (FILE *, REQUEST *);
00181 };
00182
00185 __BEGIN_DECLS
00186
00187
00188 extern void NutHttpSetOptionFlags(uint32_t flags);
00189 extern uint32_t NutHttpGetOptionFlags(void);
00190 extern int NutRegisterHttpRoot(char *path);
00191 extern void NutRegisterCgiBinPath(char *path);
00192 extern int NutRegisterCgi(char *name, int (*func) (FILE *, REQUEST *));
00193 extern int NutCgiCheckRequest(FILE * stream, REQUEST * req);
00194 extern void NutCgiProcessRequest(FILE * stream, REQUEST * req, int name_pos);
00195 extern void NutHttpProcessPostQuery(FILE *stream, REQUEST * req);
00196 extern char *NutHttpURLEncode(char *str);
00197 extern void NutHttpURLDecode(char *str);
00198 extern char *NutHttpGetParameter(REQUEST * req, char *name);
00199 extern int NutHttpGetParameterCount(REQUEST * req);
00200 extern char *NutHttpGetParameterName(REQUEST * req, int index);
00201 extern char *NutHttpGetParameterValue(REQUEST * req, int index);
00202
00203
00204 __END_DECLS
00205
00206 #endif