00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 #ifndef _CGICC_H_
00023 #define _CGICC_H_ 1
00024 
00025 #ifdef __GNUG__
00026 #  pragma interface
00027 #endif
00028 
00033 
00034 
00035 
00036 
00037 
00038 
00039 
00040 
00041 #include <vector>
00042 #include <string>
00043 
00044 #include "cgicc/CgiDefs.h"
00045 #include "cgicc/FormEntry.h"
00046 #include "cgicc/FormFile.h"
00047 #include "cgicc/CgiInput.h"
00048 #include "cgicc/CgiEnvironment.h"
00049 
00050 CGICC_BEGIN_NAMESPACE
00051 
00052 #ifdef WIN32
00053   template class CGICC_API STDNS vector<FormEntry>;
00054   template class CGICC_API STDNS vector<FormFile>;
00055 #endif
00056   
00057 class MultipartHeader;
00058 
00059 
00060 
00061 
00062 
00064 typedef STDNS vector<FormEntry>::iterator       form_iterator;
00066 typedef STDNS vector<FormEntry>::const_iterator const_form_iterator;
00067 
00069 typedef STDNS vector<FormFile>::iterator        file_iterator;
00071 typedef STDNS vector<FormFile>::const_iterator  const_file_iterator;
00072 
00073 
00074 
00075 
00076 
00101 class CGICC_API Cgicc {
00102 public:
00103 
00104   
00105 
00108 
00118   Cgicc(CgiInput *input = 0);
00119   
00125   ~Cgicc();
00127   
00128   
00129 
00134 
00141   const char*
00142   getCompileDate()                                      const;
00143   
00150   const char*
00151   getCompileTime()                                      const;
00152   
00159   const char*
00160   getVersion()                                          const;
00161 
00168   const char*
00169   getHost()                                             const;
00171   
00172   
00173 
00178 
00185   bool 
00186   queryCheckbox(const STDNS string& elementName)        const;
00187   
00194   inline form_iterator 
00195   operator[] (const STDNS string& name)
00196     { return getElement(name); }
00197 
00204   inline const_form_iterator 
00205   operator[] (const STDNS string& name)                 const
00206     { return getElement(name); }
00207   
00214   form_iterator 
00215   getElement(const STDNS string& name);
00216   
00223   const_form_iterator 
00224   getElement(const STDNS string& name)                  const;
00225   
00233   bool 
00234   getElement(const STDNS string& name,
00235              STDNS vector<FormEntry>& result)           const;
00236 
00243   form_iterator 
00244   getElementByValue(const STDNS string& value);
00245   
00252   const_form_iterator 
00253   getElementByValue(const STDNS string& value)          const;
00254   
00262   bool 
00263   getElementByValue(const STDNS string& value,
00264                     STDNS vector<FormEntry>& result)    const;
00265 
00271   inline const STDNS vector<FormEntry>& 
00272   operator* ()                                          const
00273     { return fFormData; }
00274   
00280   inline const STDNS vector<FormEntry>&
00281   getElements()                                         const
00282     { return fFormData; }
00284 
00285   
00286 
00289 
00296   file_iterator 
00297   getFile(const STDNS string& name);
00298   
00305   const_file_iterator 
00306   getFile(const STDNS string& name)                     const;
00307 
00312   inline const STDNS vector<FormFile>&
00313   getFiles()                                            const
00314     { return fFormFiles; }
00316   
00317   
00318 
00321 
00326   inline const CgiEnvironment&
00327   getEnvironment()                                      const
00328     { return fEnvironment;}
00330   
00331   
00332 
00335   
00342   void 
00343   save(const STDNS string& filename)                    const;
00344   
00351   void 
00352   restore(const STDNS string& filename);
00354   
00355 private:
00356   CgiEnvironment                fEnvironment;
00357   STDNS vector<FormEntry>       fFormData;
00358   STDNS vector<FormFile>        fFormFiles;
00359   
00360   
00361   void 
00362   parseFormInput(const STDNS string& data);
00363   
00364   
00365   MultipartHeader
00366   parseHeader(const STDNS string& data);
00367   
00368   
00369   void 
00370   parsePair(const STDNS string& data);
00371   
00372   
00373   void
00374   parseMIME(const STDNS string& data);
00375 
00376   
00377   bool 
00378   findEntries(const STDNS string& param, 
00379               bool byName,
00380               STDNS vector<FormEntry>& result)          const;
00381 };
00382 
00383 CGICC_END_NAMESPACE
00384 
00385 #endif