00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00017 #ifndef KRE_HTTP_H
00018 #define KRE_HTTP_H
00019
00020 #include "kre_threads.h"
00021 #include "kre_network.h"
00022 #include "kre_utils.h"
00023
00024 #define KRE_SERVER_NAME "kREproxy (author: Marcin Tomasik)"
00025 #define KRE_SERVER_NAME_SIZE 33
00026
00027 #define KRE_HTTP_REQ_BUF_SIZE 2048
00028
00029 #define KRE_HTTP_MAX_FIELD_SIZE 100
00030 #define KRE_HTTP_MAX_FIELD_VALUE_SIZE 1000
00031 #define KRE_HTTP_MAX_REQUEST_LINE_SIZE 1000
00032
00033 #define KRE_HTTP_ERROR 1
00034 #define KRE_HTTP_SHOULD_STOP 2
00035
00036
00037 #define KRE_HTTP_OK 200
00038 #define KRE_HTTP_NO_CONTENT 204
00039
00040
00041 #define KRE_HTTP_BAD_REQUEST 400
00042 #define KRE_HTTP_NOT_FOUND 404
00043 #define KRE_HTTP_METHOD_NOT_ALLOWD 405
00044 #define KRE_HTTP_REQ_ENTITY_TOO_LARGE 413
00045 #define KRE_HTTP_REQ_URI_TOO_LARGE 414
00046
00047
00048 #define KRE_HTTP_DST_UNRECHABLE 900
00049 #define KRE_HTTP_SERVER_IS_BUSY 901
00050
00051
00052 #define KRE_HTTP_INTERNAL_SERVER_ERROR 500
00053 #define KRE_HTTP_NOT_IMPLEMENTED 501
00054 #define KRE_HTTP_SERVICE_UNAVALIBLE 503
00055
00056
00057 #define KRE_HTTP_METH_GET 0
00058 #define KRE_HTTP_METH_POST 1
00059 #define KRE_HTTP_METH_HEAD 2
00060 #define KRE_HTTP_METH_OPTIONS 3
00061 #define KRE_HTTP_METH_PUT 4
00062 #define KRE_HTTP_METH_DELETE 5
00063 #define KRE_HTTP_METH_TRACE 6
00064 #define KRE_HTTP_METH_CONNECT 7
00065 #define KRE_HTTP_METH_NOT_IMPLEMENTED 8
00066
00069 struct kre_http_message_header {
00070
00071 char field_value[ KRE_HTTP_MAX_FIELD_VALUE_SIZE ];
00072 size_t fv_size;
00073 };
00074
00077 struct kre_http_request {
00078 int method;
00079 struct kre_http_message_header uri;
00080 struct kre_http_message_header host;
00081 size_t content_length;
00082 int state;
00083 };
00084
00085
00091 extern void kre_http_get_meth_from_buf( struct kre_http_request *req, char *b, size_t size );
00092
00093
00099 extern void kre_http_get_content_length( struct kre_http_request *req, char *b, size_t size );
00100
00101
00107 extern void kre_http_get_uri( struct kre_http_request *req, char *b, size_t size );
00108
00109
00115 extern void kre_http_get_host( struct kre_http_request *req, char *b, size_t size );
00116
00117
00124 extern int kre_http_get_req_from_buf( struct kre_http_request *req, char *bu, size_t size );
00125
00126
00135 extern int kre_http_get_request( char *bu, size_t s, struct kre_http_request *req, struct kre_thread *cur );
00136
00137
00144 extern int kre_http_transfer_response( char *bu, size_t s, struct kre_thread *thr );
00145
00146
00153 extern void kre_http_set_response( char * bu, size_t size, int code);
00154
00155
00156 #endif
00157