Annotation of parser3/src/include/pa_request.h, revision 1.56
1.1 paf 1: /*
1.32 paf 2: Parser
3: Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com)
1.36 paf 4: Author: Alexander Petrosyan <paf@design.ru> (http://design.ru/paf)
1.32 paf 5:
1.56 ! paf 6: $Id: pa_request.h,v 1.55 2001/03/16 09:26:42 paf Exp $
1.1 paf 7: */
8:
9: #ifndef PA_REQUEST_H
10: #define PA_REQUEST_H
11:
12: #include "pa_pool.h"
1.5 paf 13: #include "pa_hash.h"
1.7 paf 14: #include "pa_wcontext.h"
1.6 paf 15: #include "pa_value.h"
1.7 paf 16: #include "pa_stack.h"
1.12 paf 17: #include "pa_vclass.h"
1.45 paf 18: #include "pa_vobject.h"
1.47 paf 19: #include "pa_venv.h"
1.48 paf 20: #include "pa_vform.h"
1.56 ! paf 21: #include "pa_vrequest.h"
1.44 paf 22:
1.7 paf 23: #ifndef NO_STRING_ORIGIN
1.40 paf 24: # define COMPILE_PARAMS \
25: const char *source, \
1.46 paf 26: VStateless_class *aclass, const String *name, \
27: VStateless_class *base_class, \
1.40 paf 28: const char *file
29: # define COMPILE(source, aclass, name, base_class, file) \
30: real_compile(source, aclass, name, base_class, file)
1.7 paf 31: #else
1.40 paf 32: # define COMPILE_PARAMS \
33: const char *source, \
1.46 paf 34: VStateless_class *aclass, const String *name, \
35: VStateless_class *base_class
1.40 paf 36: # define COMPILE(source, aclass, name, base_class, file) \
37: real_compile(source, aclass, name, base_class)
1.7 paf 38: #endif
1.4 paf 39:
1.39 paf 40: class Temp_lang;
1.1 paf 41:
1.7 paf 42: class Request : public Pooled {
1.39 paf 43: friend Temp_lang;
1.1 paf 44: public:
45:
1.53 paf 46: struct Info {
47: const char *document_root;
48: const char *path_translated;
1.56 ! paf 49: const char *method;
1.53 paf 50: const char *query_string;
1.56 ! paf 51: const char *uri;
1.53 paf 52: const char *content_type;
53: size_t content_length;
54: };
55:
1.50 paf 56: Request(Pool& apool,
1.53 paf 57: Info& ainfo,
58: String::Untaint_lang alang
1.50 paf 59: );
1.3 paf 60: ~Request() {}
1.1 paf 61:
1.7 paf 62: // global classes
1.6 paf 63: Hash& classes() { return fclasses; }
64:
65: // core request processing
1.51 paf 66: char *core(
67: const char *sys_auto_path1,
68: const char *sys_auto_path2);
1.17 paf 69:
1.40 paf 70: void execute(const Array& ops);
71:
1.46 paf 72: VStateless_class *use_file(
1.40 paf 73: const char *file, bool fail_on_read_problem=true,
1.45 paf 74: const String *name=0,
1.46 paf 75: VStateless_class *base_class=0); // core.C
76: VStateless_class *use_buf(
1.40 paf 77: const char *source, const char *file,
1.46 paf 78: VStateless_class *aclass=0, const String *name=0,
79: VStateless_class *base_class=0); // core.C
1.40 paf 80: Value& process(
1.33 paf 81: Value& value,
1.37 paf 82: const String *name=0,
1.38 paf 83: bool intercept_string=true); // execute.C
1.28 paf 84:
1.55 paf 85: // write(const) = clean
1.28 paf 86: void write(const String& astring) {
1.55 paf 87: wcontext->write(astring, String::Untaint_lang::NO);
1.28 paf 88: }
1.55 paf 89: // appending, sure of clean string inside
1.49 paf 90: void write_no_lang(String& astring) {
91: wcontext->write(astring, String::Untaint_lang::NO);
92: }
1.55 paf 93: // appending possible string, assigning untaint language
1.40 paf 94: void write_assign_lang(Value& avalue) {
1.39 paf 95: wcontext->write(avalue, flang);
1.22 paf 96: }
1.55 paf 97: // appending possible string, passing language built into string being written
1.40 paf 98: void write_pass_lang(Value& avalue) {
99: wcontext->write(avalue, String::Untaint_lang::PASS_APPENDED);
1.49 paf 100: }
1.55 paf 101: // appending sure value, that would be converted to clean string
1.49 paf 102: void write_no_lang(Value& avalue) {
1.55 paf 103: wcontext->write(avalue, String::Untaint_lang::NO);
104: }
105: // appending sure value, not VString
106: void write_expr_result(Value& avalue) {
107: wcontext->write(avalue);
1.40 paf 108: }
1.43 paf 109:
110: void fail_if_junction_(bool is, Value& value, const String& method_name, char *msg);
1.22 paf 111:
1.42 paf 112: char *relative(const char *path, const char *file);
113: char *absolute(const char *name);
114:
1.17 paf 115: public:
1.22 paf 116:
1.53 paf 117: //
118: Info& info;
119:
1.22 paf 120: // default base
121: VClass root_class;
1.48 paf 122: // $env:fields here
1.47 paf 123: VEnv env_class;
1.48 paf 124: // $form:elements here
125: VForm form_class;
1.56 ! paf 126: // $request:elements here
! 127: VRequest request_class;
1.17 paf 128:
1.22 paf 129: // contexts
130: Value *self, *root, *rcontext;
131: WContext *wcontext;
1.6 paf 132:
1.7 paf 133: private: // core data
1.6 paf 134:
135: // classes
136: Hash fclasses;
137:
1.7 paf 138: // execution stack
139: Stack stack;
140:
141: private: // compile.C
142:
1.46 paf 143: VStateless_class& real_compile(COMPILE_PARAMS);
1.7 paf 144:
145: private: // execute.C
146:
1.52 paf 147: char *execute_method(Value& aself, const Method& method, bool return_cstr=true);
148: char *execute_method(Value& aself, const String& method_name, bool return_cstr=true);
1.9 paf 149:
150: Value *get_element();
1.22 paf 151:
152: private: // lang&raw
153:
1.39 paf 154: String::Untaint_lang flang;
1.22 paf 155:
1.39 paf 156: private: // lang manipulation
1.22 paf 157:
1.39 paf 158: String::Untaint_lang set_lang(String::Untaint_lang alang) {
159: String::Untaint_lang result=flang;
160: flang=alang;
161: return result;
162: }
163: void restore_lang(String::Untaint_lang alang) {
164: flang=alang;
165: }
166:
167: };
168:
169: class Temp_lang {
170: Request& frequest;
171: String::Untaint_lang saved_lang;
172: public:
173: Temp_lang(Request& arequest, String::Untaint_lang alang) :
174: frequest(arequest),
175: saved_lang(arequest.set_lang(alang)) {
176: }
177: ~Temp_lang() {
178: frequest.restore_lang(saved_lang);
179: }
1.4 paf 180: };
1.1 paf 181:
182: #endif
E-mail: