00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef __nanohttp_server_h
00025 #define __nanohttp_server_h
00026
00027
00028 #ifndef __NHTTP_INTERNAL
00029 #include <nanohttp/nanohttp-error.h>
00030 #include <nanohttp/nanohttp-common.h>
00031 #include <nanohttp/nanohttp-stream.h>
00032 #include <nanohttp/nanohttp-request.h>
00033 #include <nanohttp/nanohttp-response.h>
00034 #endif
00035
00173 #define NHTTPD_ARG_PORT "-NHTTPport"
00175 #define NHTTPD_ARG_TERMSIG "-NHTTPtsig"
00177 #define NHTTPD_ARG_MAXCONN "-NHTTPmaxconn"
00179 #define NHTTPD_ARG_TIMEOUT "-NHTTPtimeout"
00188 typedef struct httpd_conn
00189 {
00190 struct hsocket_t *sock;
00191 char content_type[25];
00192 struct http_output_stream_t *out;
00193 hpair_t *header;
00194 }
00195 httpd_conn_t;
00196
00198 typedef void (*httpd_service) (httpd_conn_t *conn, struct hrequest_t *req);
00199
00201 typedef int (*httpd_auth) (struct hrequest_t *req, const char *user, const char *pass);
00202
00203 #ifdef __NHTTP_INTERNAL
00204
00205 struct service_statistics
00206 {
00207 unsigned long requests;
00208 unsigned long bytes_transmitted;
00209 unsigned long bytes_received;
00210 struct timeval time;
00211 pthread_rwlock_t lock;
00212 };
00213 #endif
00214
00223 #define NHTTPD_SERVICE_DOWN 0
00224
00229 #define NHTTPD_SERVICE_UP 1
00230
00234 typedef struct tag_hservice
00235 {
00236 char *context;
00237 int status;
00238 httpd_service func;
00239 httpd_auth auth;
00240 struct tag_hservice *next;
00241 struct service_statistics *statistics;
00242 }
00243 hservice_t;
00244
00245 #ifdef __cplusplus
00246 extern "C"
00247 {
00248 #endif
00249
00254 extern herror_t httpd_init(int argc, char *argv[]);
00255
00260 extern void httpd_destroy(void);
00261
00266 extern herror_t httpd_run(void);
00267
00272 extern herror_t httpd_register(const char *context, httpd_service service);
00273
00279 extern herror_t httpd_register_secure(const char *context, httpd_service service, httpd_auth auth);
00280
00286 extern herror_t httpd_register_default(const char *context, httpd_service service);
00287
00293 extern herror_t httpd_register_default_secure(const char *context, httpd_service service, httpd_auth auth);
00294
00299 extern short httpd_get_port(void);
00300
00305 extern int httpd_get_timeout(void);
00306
00309 extern void httpd_set_timeout(int secs);
00310
00316 extern const char *httpd_get_protocol(void);
00317
00320 extern int httpd_get_conncount(void);
00321
00322 extern hservice_t *httpd_get_services(void);
00323 extern hservice_t *httpd_find_service(const char *name);
00324
00325 extern int httpd_enable_service(hservice_t *service);
00326 extern int httpd_disable_service(hservice_t *service);
00327
00328 extern void httpd_response_set_content_type(httpd_conn_t * res, const char *content_type);
00329
00330 extern herror_t httpd_send_header(httpd_conn_t * res, int code, const char *text);
00331
00332 extern int httpd_set_header(httpd_conn_t * conn, const char *key, const char *value);
00333 extern void httpd_set_headers(httpd_conn_t * conn, hpair_t * header);
00334
00335 extern int httpd_add_header(httpd_conn_t * conn, const char *key, const char *value);
00336 extern void httpd_add_headers(httpd_conn_t * conn, const hpair_t * values);
00337
00346 extern herror_t httpd_mime_send_header(httpd_conn_t * conn, const char *related_start, const char *related_start_info, const char *related_type, int code, const char *text);
00347
00353 extern herror_t httpd_mime_next(httpd_conn_t * conn, const char *content_id, const char *content_type, const char *transfer_encoding);
00354
00360 extern herror_t httpd_mime_send_file(httpd_conn_t * conn, const char *content_id, const char *content_type, const char *transfer_encoding, const char *filename);
00361
00366 extern herror_t httpd_mime_end(httpd_conn_t * conn);
00367
00375 extern herror_t httpd_send_bad_request(httpd_conn_t *conn, const char *msg);
00376
00384 extern herror_t httpd_send_unauthorized(httpd_conn_t *conn, const char *realm);
00385
00393 extern herror_t httpd_send_not_found(httpd_conn_t *conn, const char *msg);
00394
00402 extern herror_t httpd_send_internal_error(httpd_conn_t * conn, const char *msg);
00403
00411 extern herror_t httpd_send_not_implemented(httpd_conn_t *conn, const char *msg);
00412
00413 #ifdef __cplusplus
00414 }
00415 #endif
00416
00420 #endif