Annotation of parser3/src/include/pa_http.h, revision 1.15

1.1       paf         1: /** @file
                      2:        Parser: commonly used functions.
                      3: 
1.14      moko        4:        Copyright (c) 2001-2015 Art. Lebedev Studio (http://www.artlebedev.com)
1.1       paf         5:        Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)
                      6: */
                      7: 
                      8: #ifndef PA_HTTP_H
                      9: #define PA_HTTP_H
                     10: 
1.15    ! moko       11: #define IDENT_PA_HTTP_H "$Id: pa_http.h,v 1.14 2015/10/26 01:21:56 moko Exp $"
1.1       paf        12: 
                     13: #include "pa_vstring.h"
                     14: #include "pa_vint.h"
                     15: #include "pa_vhash.h"
                     16: #include "pa_vtable.h"
                     17: #include "pa_socks.h"
1.15    ! moko       18: #include "pa_charset.h"
1.10      misha      19: #include "pa_request.h"
1.1       paf        20: 
1.11      misha      21: #define HTTP_COOKIES_NAME "cookies"
1.12      moko       22: 
1.1       paf        23: #ifndef DOXYGEN
                     24: struct File_read_http_result {
                     25:        char *str; size_t length;
                     26:        HashStringValue* headers;
                     27: }; 
                     28: #endif
                     29: 
1.15    ! moko       30: class ResponseHeaders {
        !            31: public:
        !            32:        class Header {
        !            33:        public:
        !            34:                String::Body name;
        !            35:                String::Body value;
        !            36: 
        !            37:                Header(String::Body aname, String::Body avalue) : name(aname), value(avalue) {}
        !            38: 
        !            39:                void transcode(Charset &charset, Charset &source){
        !            40:                        name=Charset::transcode(name, charset, source);
        !            41:                        value=Charset::transcode(value, charset, source);
        !            42:                }
        !            43: 
        !            44:        };
        !            45: 
        !            46:        Array<Header> headers;
        !            47: 
        !            48:        String::Body content_type;
        !            49: 
        !            50:        bool add_header(const char *line){
        !            51:                const char *value=strchr(line, ':');
        !            52: 
        !            53:                if(value && value != line){ // we need only headers, not the response code
        !            54:                        Header header(str_upper(line, value-line), String::Body(value+1).trim(String::TRIM_BOTH, " \t\n\r"));
        !            55: 
        !            56:                        if(header.name == String::Body(HTTP_CONTENT_TYPE_UPPER) && content_type.is_empty())
        !            57:                                content_type=header.value;
        !            58: 
        !            59:                        headers+=header;
        !            60: 
        !            61:                        return true;
        !            62:                }
        !            63:                return false;
        !            64:        }
        !            65: 
        !            66: };
        !            67: 
1.9       misha      68: Table* parse_cookies(Request& r, Table *cookies);
1.15    ! moko       69: void *tables_update(HashStringValue& tables, const String::Body name, const String& value);
1.9       misha      70: 
1.6       moko       71: char *pa_http_safe_header_name(const char *name);
                     72: 
1.15    ! moko       73: File_read_http_result pa_internal_file_read_http(Request& r, const String& file_spec, bool as_text, HashStringValue *options=0, bool transcode_text_result=true);
1.1       paf        74: 
                     75: #endif

E-mail: