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