Annotation of parser3/src/classes/form.C, revision 1.54

1.3       paf         1: /** @file
                      2:        Parser: @b form parser class.
                      3: 
1.53      moko        4:        Copyright (c) 2001-2026 Art. Lebedev Studio (https://www.artlebedev.com)
1.51      moko        5:        Authors: Konstantin Morshnev <moko@design.ru>, Alexandr Petrosian <paf@design.ru>
1.27      paf         6: */
1.3       paf         7: 
1.10      paf         8: #include "classes.h"
1.35      paf         9: #include "pa_vmethod_frame.h"
                     10: 
1.1       paf        11: #include "pa_request.h"
                     12: #include "pa_vform.h"
                     13: 
1.54    ! moko       14: volatile const char * IDENT_FORM_C="$Id: form.C,v 1.53 2026/04/25 13:38:46 moko Exp $";
1.5       paf        15: 
1.4       paf        16: // class
                     17: 
                     18: class MForm : public Methoded {
1.11      paf        19: public: // Methoded
1.35      paf        20: 
1.4       paf        21:        bool used_directly() { return false; }
1.5       paf        22:        void configure_admin(Request& r);
1.35      paf        23: 
                     24: public:
                     25: 
                     26:        MForm(): Methoded("form") {}
                     27: 
1.4       paf        28: };
1.1       paf        29: 
1.35      paf        30: // global variable
                     31: 
1.47      moko       32: DECLARE_CLASS_VAR(form, new MForm);
1.35      paf        33: 
1.1       paf        34: // methods
                     35: 
1.5       paf        36: // constructor & configurator
1.4       paf        37: 
1.5       paf        38: void MForm::configure_admin(Request& r) {
                     39: 
1.44      misha      40:        if(r.request_info.can_have_body()){
1.54    ! moko       41:                if(r.request_info.content_length>pa_post_max_size)
        !            42:                        throw Exception(PARSER_RUNTIME, 0, "posted content_length(%s) > $LIMITS.post_max_size(%s)", pa_uitoa(r.request_info.content_length), pa_uitoa(pa_post_max_size));
1.5       paf        43: 
                     44:                // read POST data
1.35      paf        45:                if(r.request_info.content_length) {
                     46:                        char *post_data=new(PointerFreeGC) char[r.request_info.content_length+1/*terminating zero*/];
1.48      moko       47:                        size_t post_size=SAPI::read_post(r.sapi_info, post_data, r.request_info.content_length);
1.35      paf        48:                        post_data[post_size]=0; // terminating zero
                     49:                        r.request_info.post_data=post_data;
                     50:                        r.request_info.post_size=post_size;
                     51:                } else {
                     52:                        r.request_info.post_data=0;
                     53:                        r.request_info.post_size=0;
1.17      parser     54:                }
1.35      paf        55:                if(r.request_info.post_size!=r.request_info.content_length)
1.54    ! moko       56:                        throw Exception(0, 0, "post_size(%s) != content_length(%s)", pa_uitoa(r.request_info.post_size), pa_uitoa(r.request_info.content_length));
1.6       paf        57:        }
1.1       paf        58: }

E-mail: