Annotation of parser3/src/types/pa_vresponse.C, revision 1.48

1.1       paf         1: /** @file
                      2:        Parser: @b response class.
                      3: 
1.44      moko        4:        Copyright (c) 2001-2026 Art. Lebedev Studio (https://www.artlebedev.com)
1.41      moko        5:        Authors: Konstantin Morshnev <moko@design.ru>, Alexandr Petrosian <paf@design.ru>
1.6       paf         6: */
1.1       paf         7: 
                      8: #include "pa_vresponse.h"
1.18      paf         9: #include "pa_request_charsets.h"
1.1       paf        10: #include "pa_charsets.h"
                     11: #include "pa_charset.h"
                     12: #include "pa_vstring.h"
1.11      paf        13: #include "pa_vdate.h"
1.26      paf        14: #include "pa_vhash.h"
1.47      moko       15: #include "pa_vvoid.h"
1.48    ! moko       16: #include "pa_vint.h"
        !            17: #include "pa_request.h"
        !            18: #include "pa_globals.h"
1.26      paf        19: 
1.48    ! moko       20: volatile const char * IDENT_PA_VRESPONSE_C="$Id: pa_vresponse.C,v 1.47 2026/10/16 13:55:16 moko Exp $" IDENT_PA_VRESPONSE_H;
1.30      moko       21: 
1.26      paf        22: // defines
                     23: 
                     24: #define REQUEST_HEADERS_ELEMENT_NAME "headers"
1.46      moko       25: #define UNTAINT_ELEMENT_NAME "untaint"
1.47      moko       26: #define STARTED_ELEMENT_NAME "started"
1.48    ! moko       27: #define TIMEOUT_ELEMENT_NAME "timeout"
1.1       paf        28: 
1.29      misha      29: Value* VResponse::get_element(const String& aname) {
1.1       paf        30:        // $charset
1.8       paf        31:        if(aname==CHARSET_NAME)
1.43      moko       32:                return new VString(fcharsets.client().NAME());
1.8       paf        33: 
1.28      misha      34:        // $headers
                     35:        if(aname==REQUEST_HEADERS_ELEMENT_NAME)
                     36:                return new VHash(ffields);
1.46      moko       37: 
                     38:        // $untaint
                     39:        if(aname==UNTAINT_ELEMENT_NAME)
                     40:                return new VString(*new String(String::lang2name(lang)));
                     41: 
1.47      moko       42:        // $started
                     43:        if(aname==STARTED_ELEMENT_NAME) {
                     44:                if(started==STREAM)
                     45:                        return new VString(*new String("stream"));
                     46:                if(started==WEBSOCKET)
                     47:                        return new VString(*new String("websocket"));
                     48:                return VVoid::get();
                     49:        }
                     50: 
1.48    ! moko       51:        // $timeout
        !            52:        if(aname==TIMEOUT_ELEMENT_NAME)
        !            53:                return new VInt(timeout);
        !            54: 
1.45      moko       55:        MAYBE_GET_SPECIAL_OR_METHOD(VStateless_class::get_element(aname));
1.26      paf        56: 
1.8       paf        57:        // $field
1.33      moko       58:        return ffields.get(aname.change_case(fcharsets.source(), String::CC_UPPER));
1.1       paf        59: }
                     60: 
1.31      moko       61: const VJunction* VResponse::put_element(const String& aname, Value* avalue) { 
1.1       paf        62:        // guard charset change
1.8       paf        63:        if(aname==CHARSET_NAME)
1.37      moko       64:                fcharsets.set_client(pa_charsets.get(avalue->as_string()));
1.46      moko       65:        else if(aname==UNTAINT_ELEMENT_NAME)
                     66:                lang=String::name2lang(avalue->as_string());
1.47      moko       67:        else if(aname==STARTED_ELEMENT_NAME)
                     68:                return Value::put_element(aname, avalue);
1.48    ! moko       69:        else if(aname==TIMEOUT_ELEMENT_NAME) {
        !            70:                int seconds=avalue->as_int();
        !            71:                timeout=seconds>0 ? seconds : 0;
        !            72:                SAPI::set_response_timeout(pa_thread_request().sapi_info, timeout);
        !            73:        }
1.2       paf        74:        else
1.36      moko       75:                ffields.put(aname.change_case(fcharsets.source(), String::CC_UPPER), !avalue || (avalue->is_string() && !avalue->is_defined()) ? 0: avalue);
1.8       paf        76: 
1.39      moko       77:        return 0;
1.11      paf        78: }

E-mail: