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
00077 #include <stdio.h>
00078 #include <time.h>
00079
00084
00085 #define METHOD_GET 1
00086 #define METHOD_POST 2
00087 #define METHOD_HEAD 3
00088
00089 #define HTTP_CONN_CLOSE 1
00090 #define HTTP_CONN_KEEP_ALIVE 2
00091
00092 #define HTTP_OF_USE_HOST_TIME 0x00000001UL
00093 #define HTTP_OF_USE_FILE_TIME 0x00000002UL
00094
00095 typedef struct _REQUEST REQUEST;
00100 struct _REQUEST {
00101 int req_method;
00102 int req_version;
00103 long req_length;
00104 char *req_url;
00105 char *req_query;
00106 char *req_type;
00107 char *req_cookie;
00108 char *req_auth;
00109 char *req_agent;
00110 char **req_qptrs;
00111 int req_numqptrs;
00112 time_t req_ims;
00113 char *req_referer;
00114 char *req_host;
00115 int req_connection;
00116 };
00117
00118 typedef struct _MIMETYPES MIMETYPES;
00119
00120 struct _MIMETYPES {
00121 char *mtyp_ext;
00122 char *mtyp_type;
00123 void (*mtyp_handler)(FILE *stream, int fd, int file_len, char *http_root, REQUEST *req);
00124 };
00125
00126 __BEGIN_DECLS
00127
00128 extern void NutHttpProcessRequest(FILE * stream);
00129 extern void NutHttpProcessQueryString(REQUEST * req);
00130 extern void NutHttpSendHeaderTop(FILE * stream, REQUEST * req, int status, char *title);
00131 extern void NutHttpSendHeaderBottom(FILE * stream, REQUEST * req, char *mime_type, long bytes);
00132 extern void NutHttpSendHeaderBot(FILE * stream, char *mime_type, long bytes);
00133 extern void NutHttpSendError(FILE * stream, REQUEST * req, int status);
00134 extern char *NutGetMimeType(char *name);
00135 extern void *NutGetMimeHandler(char *name);
00136 extern u_char NutSetMimeHandler(char *extension, void (*handler)(FILE *stream, int fd, int file_len, char *http_root, REQUEST *req));
00137
00138 __END_DECLS
00139
00140
00141
00142
00143 typedef struct _AUTHINFO AUTHINFO;
00144
00149 struct _AUTHINFO {
00150 AUTHINFO *auth_next;
00151 char *auth_dirname;
00152 char *auth_login;
00153 };
00154
00155 __BEGIN_DECLS
00156
00157 extern int NutHttpAuthValidate(REQUEST * req);
00158 extern int NutRegisterAuth(CONST char *dirname, CONST char *login);
00159 extern void NutClearAuth(void);
00160
00161 __END_DECLS
00162
00163
00164
00165
00166 typedef struct _CGIFUNCTION CGIFUNCTION;
00167
00172 struct _CGIFUNCTION {
00173 CGIFUNCTION *cgi_next;
00174 char *cgi_name;
00175 int (*cgi_func) (FILE *, REQUEST *);
00176 };
00177
00180 __BEGIN_DECLS
00181
00182
00183 extern void NutHttpSetOptionFlags(u_long flags);
00184 extern u_long NutHttpGetOptionFlags(void);
00185 extern int NutRegisterHttpRoot(char *path);
00186 extern void NutRegisterCgiBinPath(char *path);
00187 extern int NutRegisterCgi(char *name, int (*func) (FILE *, REQUEST *));
00188 extern int NutCgiCheckRequest(FILE * stream, REQUEST * req);
00189 extern void NutCgiProcessRequest(FILE * stream, REQUEST * req, int name_pos);
00190 extern void NutHttpProcessPostQuery(FILE *stream, REQUEST * req);
00191 extern char *NutHttpURLEncode(char *str);
00192 extern void NutHttpURLDecode(char *str);
00193 extern char *NutHttpGetParameter(REQUEST * req, char *name);
00194 extern int NutHttpGetParameterCount(REQUEST * req);
00195 extern char *NutHttpGetParameterName(REQUEST * req, int index);
00196 extern char *NutHttpGetParameterValue(REQUEST * req, int index);
00197
00198
00199 __END_DECLS
00200
00201 #endif