|
|
| version 1.201, 2010/05/25 03:58:17 | version 1.219, 2015/09/28 22:26:13 |
|---|---|
| Line 1 | Line 1 |
| /** @file | /** @file |
| Parser: request class decl. | Parser: request class decl. |
| Copyright (c) 2001-2009 ArtLebedev Group (http://www.artlebedev.com) | Copyright (c) 2001-2012 Art. Lebedev Studio (http://www.artlebedev.com) |
| Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru) | Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru) |
| */ | */ |
| #ifndef PA_REQUEST_H | #ifndef PA_REQUEST_H |
| #define PA_REQUEST_H | #define PA_REQUEST_H |
| static const char * const IDENT_REQUEST_H="$Date$"; | #define IDENT_PA_REQUEST_H "$Id$" |
| #include "pa_pool.h" | #include "pa_pool.h" |
| #include "pa_hash.h" | #include "pa_hash.h" |
| Line 18 static const char * const IDENT_REQUEST_ | Line 18 static const char * const IDENT_REQUEST_ |
| #include "pa_request_info.h" | #include "pa_request_info.h" |
| #include "pa_request_charsets.h" | #include "pa_request_charsets.h" |
| #include "pa_sapi.h" | #include "pa_sapi.h" |
| #include "pa_vconsole.h" | |
| #ifdef RESOURCES_DEBUG | |
| #include <sys/resource.h> | |
| #endif | |
| // consts | // consts |
| Line 39 class VForm; | Line 34 class VForm; |
| class VResponse; | class VResponse; |
| class VCookie; | class VCookie; |
| class VStateless_class; | class VStateless_class; |
| class VConsole; | |
| /// Main workhorse. | /// Main workhorse. |
| class Request: public PA_Object { | class Request: public PA_Object { |
| friend class Temp_lang; | friend class Temp_lang; |
| friend class Temp_connection; | friend class Temp_connection; |
| friend class Request_context_saver; | |
| friend class Temp_request_self; | friend class Temp_request_self; |
| friend class Temp_value_element; | |
| friend class Request_context_saver; | |
| friend class Exception_trace; | friend class Exception_trace; |
| public: | public: |
| Line 140 private: | Line 137 private: |
| Exception_trace exception_trace; | Exception_trace exception_trace; |
| public: | public: |
| bool allow_class_replace; | |
| //@{ request processing status | //@{ request processing status |
| /// contexts | /// contexts |
| VMethodFrame* method_frame; | VMethodFrame* method_frame; |
| Line 183 public: | Line 182 public: |
| #endif | #endif |
| Request(SAPI_Info& asapi_info, Request_info& arequest_info, | Request(SAPI_Info& asapi_info, Request_info& arequest_info, |
| String::Language adefault_lang, ///< all tainted data default untainting lang | String::Language adefault_lang ///< all tainted data default untainting lang |
| bool status_allowed ///< status class allowed | |
| ); | ); |
| ~Request(); | ~Request(); |
| Line 206 public: | Line 204 public: |
| void execute(ArrayOperation& ops); // execute.C | void execute(ArrayOperation& ops); // execute.C |
| void op_call(VMethodFrame &frame); | void op_call(VMethodFrame &frame); |
| void op_call_write(VMethodFrame &frame); | void op_call_write(VMethodFrame &frame); |
| void op_call(VMethodFrame &frame, bool constructing); | Value& construct(Value &class_value, const Method &method); |
| /// execute ops with anti-recoursion check | /// execute ops with anti-recoursion check |
| void recoursion_checked_execute(/*const String& name, */ArrayOperation& ops) { | void recoursion_checked_execute(/*const String& name, */ArrayOperation& ops) { |
| // anti_endless_execute_recoursion | // anti_endless_execute_recoursion |
| Line 239 public: | Line 238 public: |
| int line_no_offset=0); | int line_no_offset=0); |
| /// processes any code-junction there may be inside of @a value | /// processes any code-junction there may be inside of @a value |
| StringOrValue process_getter(Junction& junction); // execute.C | |
| StringOrValue process(Value& input_value, bool intercept_string=true); // execute.C | StringOrValue process(Value& input_value, bool intercept_string=true); // execute.C |
| void process_write(Value& input_value); // execute.C | void process_write(Value& input_value); // execute.C |
| //@{ convinient helpers | //@{ convinient helpers |
| Line 263 public: | Line 263 public: |
| /// appending, sure of clean string inside | /// appending, sure of clean string inside |
| void write_no_lang(const String& astring) { | void write_no_lang(const String& astring) { |
| wcontext->write(astring, | wcontext->write(astring, |
| (String::Language)(String::L_CLEAN | flang&String::L_OPTIMIZE_BIT)); | (String::Language)(String::L_CLEAN | (flang & String::L_OPTIMIZE_BIT) )); |
| } | } |
| /// appending sure value, that would be converted to clean string | /// appending sure value, that would be converted to clean string |
| void write_no_lang(Value& avalue) { | void write_no_lang(Value& avalue) { |
| Line 271 public: | Line 271 public: |
| wcontext->write(avalue); | wcontext->write(avalue); |
| else | else |
| wcontext->write(avalue, | wcontext->write(avalue, |
| (String::Language)(String::L_CLEAN | flang&String::L_OPTIMIZE_BIT)); | (String::Language)(String::L_CLEAN | (flang & String::L_OPTIMIZE_BIT) )); |
| } | } |
| /// appending string, passing language built into string being written | /// appending string, passing language built into string being written |
| Line 300 public: | Line 300 public: |
| /// returns an absolute @a path to relative @a name | /// returns an absolute @a path to relative @a name |
| const String& absolute(const String& relative_name); | const String& absolute(const String& relative_name); |
| /// returns the mime type of 'user_file_name' | |
| const String& mime_type_of(const String* file_name); | |
| /// returns the mime type of 'user_file_name_cstr' | /// returns the mime type of 'user_file_name_cstr' |
| const String& mime_type_of(const char* user_file_name_cstr); | const String& mime_type_of(const char* user_file_name_cstr); |
| Line 363 public: // status read methods | Line 366 public: // status read methods |
| } | } |
| */ | */ |
| /// public for ^reflection:copy[] | |
| void put_element(Value& ncontext, const String& name, Value* value); | |
| /// for @main[] | /// for @main[] |
| const String* execute_virtual_method(Value& aself, const String& method_name); | const String* execute_virtual_method(Value& aself, const String& method_name); |
| /// for @postprocess[body] | /// executes parser method, use op_call(frame) to execute native method |
| StringOrValue execute_method(VMethodFrame& amethodFrame, const Method& method); | void execute_method(VMethodFrame& aframe); |
| //{ for @conf[filespec] and @auto[filespec] and parser://method/call | //{ for @conf[filespec] and @auto[filespec] and parser://method/call |
| const String* execute_method(Value& aself, | const String* execute_method(Value& aself, |
| const Method& method, Value* optional_param, | const Method& method, Value* optional_param, |
| Line 413 private: // compile.C | Line 420 private: // compile.C |
| private: // execute.C | private: // execute.C |
| void put_element(Value& ncontext, const String& name, Value* value); | |
| Value& get_element(Value& ncontext, const String& name); | Value& get_element(Value& ncontext, const String& name); |
| #ifdef FEATURE_GET_ELEMENT4CALL | |
| Value& get_element4call(Value& ncontext, const String& name); | |
| #endif | |
| private: // defaults | private: // defaults |
| Line 534 public: | Line 543 public: |
| } | } |
| }; | }; |
| /// Auto-object used for temporary changing Request::allow_class_replace. | |
| class Temp_class_replace { | |
| Request& frequest; | |
| public: | |
| Temp_class_replace(Request& arequest, bool avalue) : frequest(arequest){ | |
| frequest.allow_class_replace=avalue; | |
| } | |
| ~Temp_class_replace() { | |
| frequest.allow_class_replace=false; | |
| } | |
| }; | |
| /// Auto-object used for temporarily substituting/removing elements | |
| class Temp_value_element { | |
| Request& frequest; | |
| Value& fwhere; | |
| const String& fname; | |
| Value* saved; | |
| public: | |
| Temp_value_element(Request& arequest, Value& awhere, const String& aname, Value* awhat); | |
| ~Temp_value_element(); | |
| }; | |
| // defines for externs | // defines for externs |
| #define EXCEPTION_HANDLED_PART_NAME "handled" | #define EXCEPTION_HANDLED_PART_NAME "handled" |
| Line 543 public: | Line 575 public: |
| extern const String main_method_name; | extern const String main_method_name; |
| extern const String auto_method_name; | extern const String auto_method_name; |
| extern const String body_name; | |
| extern const String exception_type_part_name; | extern const String exception_type_part_name; |
| extern const String exception_source_part_name; | extern const String exception_source_part_name; |