Annotation of parser3/src/types/pa_vrequest.C, revision 1.34.2.2

1.2       paf         1: /** @file
1.5       paf         2:        Parser: @b request class.
1.2       paf         3: 
1.32      paf         4:        Copyright(c) 2001-2004 ArtLebedev Group (http://www.artlebedev.com)
1.16      paf         5:        Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)
1.18      paf         6: */
1.2       paf         7: 
1.34.2.2! paf         8: static const char * const IDENT_VREQUEST_C="$Date: 2005/07/27 09:18:33 $";
1.1       paf         9: 
                     10: #include "pa_vrequest.h"
1.28      paf        11: #include "pa_request_info.h"
                     12: #include "pa_request_charsets.h"
1.13      paf        13: #include "pa_charsets.h"
1.28      paf        14: #include "pa_vstring.h"
1.1       paf        15: 
1.30      paf        16: // defines
                     17: 
                     18: #define DOCUMENT_ROOT_NAME "document-root"
                     19: 
                     20: 
1.7       parser     21: // request: CLASS,method,field
1.28      paf        22: Value* VRequest::get_element(const String& aname, Value&  /*aself*/, bool /*looking_up*/) {
1.12      paf        23:        // $charset
1.24      paf        24:        if(aname==CHARSET_NAME)
1.28      paf        25:                return new VString(*new String(fcharsets.source().NAME(), String::L_TAINTED));
1.30      paf        26:        
                     27:        // $query $uri $document-root $body
                     28:        const char* buf;
                     29:        size_t size=0;
                     30:        if(aname=="query")
                     31:                buf=finfo.query_string;
                     32:        else if(aname=="uri")
                     33:                buf=finfo.uri;
                     34:        else if(aname==DOCUMENT_ROOT_NAME)
                     35:                buf=finfo.document_root;
                     36:        else if(aname=="body") {
                     37:                buf=finfo.post_data;
                     38:                size=finfo.post_size;
                     39:        } else
                     40:                return bark("%s field not found", &aname);
1.12      paf        41: 
1.30      paf        42:        return new VString(*new String(buf?buf:"", size, true));
1.1       paf        43: }
                     44: 
1.34.2.2! paf        45: const Junction* VRequest::put_element(Value& aself, const String& aname, Value* avalue) {
1.30      paf        46:        // $charset
1.20      paf        47:        if(aname==CHARSET_NAME) {
1.28      paf        48:                fcharsets.set_source(charsets.get(avalue->as_string().
                     49:                        change_case(UTF8_charset, String::CC_UPPER)));
1.33      paf        50:                return PUT_ELEMENT_REPLACED_ELEMENT;
1.30      paf        51:        } 
                     52: 
                     53:        // $document-root
                     54:        if(aname==DOCUMENT_ROOT_NAME) {
                     55:                finfo.document_root=avalue->as_string().cstr(String::L_FILE_SPEC);
1.33      paf        56:                return PUT_ELEMENT_REPLACED_ELEMENT;
1.30      paf        57:        } 
                     58: 
1.34.2.2! paf        59:        return Value::put_element(aself, aname, avalue);
1.12      paf        60: }

E-mail: