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

1.2       paf         1: /** @file
                      2:        Parser: request class.
                      3: 
1.1       paf         4:        Copyright(c) 2001 ArtLebedev Group(http://www.artlebedev.com)
1.2       paf         5: 
1.1       paf         6:        Author: Alexander Petrosyan <paf@design.ru>(http://design.ru/paf)
                      7: 
1.4     ! paf         8:        $Id: pa_vrequest.C,v 1.3 2001/03/19 23:07:24 paf Exp $
1.1       paf         9: */
                     10: 
                     11: #include "pa_vrequest.h"
                     12: #include "pa_request.h"
                     13: 
                     14: // request: CLASS,BASE,method,field
                     15: Value *VRequest::get_element(const String& aname) {
1.4     ! paf        16:        // $browser
        !            17:        if(aname=="browser") {
        !            18:                VHash *vhash=NEW VHash(pool());
        !            19: 
        !            20:                // analize
        !            21:                bool ie=true;
        !            22:                const char *version=0;
        !            23:                const char *agent=frequest.info.user_agent;
        !            24:                if(agent) {
        !            25:                        if(strstr(agent, "compatible")) {
        !            26:                                if(const char *msie=strstr(agent, "MSIE ")) {
        !            27:                                        ie=true;
        !            28:                                        version=msie+5;
        !            29:                                }
        !            30:                        } else {
        !            31:                                if(!strncasecmp(agent, "MOZILLA/", 8)) {
        !            32:                                        ie=false;
        !            33:                                        version=agent+8;
        !            34:                                }
        !            35:                        }
        !            36:                }
        !            37:                
        !            38:                // set $browser.type
        !            39:                vhash->hash().put(*NEW String(pool(), "type"), 
        !            40:                        NEW VString(*NEW String(pool(), ie?"ie":"nn")));
        !            41:                if(version) { // we know the version
        !            42:                        // set $browser.version
        !            43:                        vhash->hash().put(*NEW String(pool(), "version"), 
        !            44:                                NEW VDouble(pool(), atof(version)));
        !            45:                }
        !            46:                //
        !            47:                return vhash;
        !            48:        }
        !            49: 
1.1       paf        50:        // $query $uri 
                     51:        const char *cstr=0;
                     52:        if(aname=="query")
                     53:                cstr=frequest.info.query_string;
                     54:        if(aname=="uri")
                     55:                cstr=frequest.info.uri;
                     56:        if(!cstr)
                     57:                return 0;
                     58:        
                     59:        String& string=*NEW String(pool());
                     60:        string.APPEND_TAINTED(cstr, 0, "request", 0);
                     61:        return NEW VString(string);
                     62: }
                     63: 

E-mail: