Annotation of parser3/src/types/pa_vform.h, revision 1.56
1.10 paf 1: /** @file
1.16 paf 2: Parser: @b form class decls.
1.10 paf 3:
1.50 paf 4: Copyright (c) 2001-2005 ArtLebedev Group (http://www.artlebedev.com)
1.33 paf 5: Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)
1.1 paf 6: */
7:
8: #ifndef PA_VFORM_H
9: #define PA_VFORM_H
1.36 paf 10:
1.56 ! misha 11: static const char * const IDENT_VFORM_H="$Date: 2009-04-10 11:38:39 $";
1.46 paf 12:
13: // includes
1.1 paf 14:
1.19 paf 15: #include "classes.h"
1.8 paf 16: #include "pa_common.h"
1.46 paf 17: #include "pa_value.h"
18:
19: // defines
1.17 paf 20:
1.22 parser 21: #define FORM_FIELDS_ELEMENT_NAME "fields"
1.24 parser 22: #define FORM_TABLES_ELEMENT_NAME "tables"
1.42 paf 23: #define FORM_IMAP_ELEMENT_NAME "imap"
1.51 misha 24: #define FORM_FILES_ELEMENT_NAME "files"
1.22 parser 25:
1.46 paf 26: // forwards
27:
28: class Request_info;
29: class Request_charsets;
1.4 paf 30:
1.56 ! misha 31: enum POST_CONTENT_TYPE {
! 32: UNKNOWN,
! 33: FORM_URLENCODED,
! 34: MULTIPART_FORMDATA
! 35: };
! 36:
1.10 paf 37: /**
1.13 paf 38: derivates from VStateless_class so that :CLASS element referred to @a this.
1.10 paf 39:
40: and users could do such tricks:
41: @verbatim
42: ^rem{pass somebody something with elements}
43:
44: ^rem{this time that would be elements of a form}
1.12 paf 45: ^somebody[$form:CLASS]
1.10 paf 46:
47: ^rem{this time that would be elements of a table record}
48: $news[^table:sql[select * from news]]
49: ^somebody[^news.record[]]
50: @endverbatim
51: */
1.46 paf 52: class VForm: public VStateless_class {
1.1 paf 53: public: // Value
54:
1.46 paf 55: const char* type() const { return "form"; }
1.24 parser 56:
1.55 misha 57: // form: CLASS,CLASS_NAME,fields,tables,files,imap,method,field
1.46 paf 58: Value* get_element(const String& aname, Value& aself, bool /*looking_up*/);
1.54 misha 59: Charset* get_post_charset();
1.1 paf 60:
61: public: // usage
62:
1.48 paf 63: VForm(Request_charsets& acharsets, Request_info& arequest_info);
1.31 paf 64:
1.6 paf 65: private:
66:
1.48 paf 67: Request_charsets& fcharsets;
68: Request_info& frequest_info;
1.46 paf 69:
1.56 ! misha 70: bool is_post;
! 71: POST_CONTENT_TYPE post_content_type;
! 72:
1.53 misha 73: char *strpart(const char* str, size_t len);
1.46 paf 74: char *getAttributeValue(const char* data,char *attr,size_t len);
75: void UnescapeChars(char **sp, const char* cp, size_t len);
76: void ParseGetFormInput(const char* query_string, size_t length);
1.56 ! misha 77: void ParseFormInput(const char* data, size_t length, Charset* client_charset=0);
! 78: void ParseMimeInput(char *content_type, const char* data, size_t length, Charset* client_charset=0);
1.6 paf 79: void AppendFormEntry(
1.46 paf 80: const char* cname_cstr,
1.56 ! misha 81: const char* raw_cvalue_ptr, const size_t raw_cvalue_size, Charset* client_charset=0);
1.51 misha 82: void AppendFormFileEntry(
83: const char* cname_cstr,
1.46 paf 84: const char* raw_cvalue_ptr, const size_t raw_cvalue_size,
1.56 ! misha 85: const char* file_name_cstr, Charset* client_charset=0);
1.1 paf 86:
1.51 misha 87: bool should_refill_fields_tables_and_files();
88: void refill_fields_tables_and_files();
1.48 paf 89:
1.1 paf 90: private:
91:
1.48 paf 92: Charset* filled_source;
93: Charset* filled_client;
1.56 ! misha 94: Charset* fpost_charset; // charset which was specified in content-type in incoming POST
1.46 paf 95: HashStringValue fields;
96: HashStringValue tables;
1.51 misha 97: HashStringValue files;
1.46 paf 98: HashStringValue imap;
1.30 paf 99:
100: private:
101:
1.56 ! misha 102: String::C transcode(const char* client, size_t client_size, Charset* client_charset=0);
1.1 paf 103:
104: };
105:
106: #endif
E-mail: