Main Page | Namespace List | Alphabetical List | Data Structures | File List | Namespace Members | Data Fields | Globals

NForm.cp

Go to the documentation of this file.
00001 00023 00024 #define MW_CGI monsterworks::cgi 00025 00026 #include <NCapture.h> 00027 using MW_CGI::NCapture; 00028 00029 #include <NForm.h> 00030 using MW_CGI::NWWWCodec; 00031 using MW_CGI::NForm; 00032 using std::string; 00033 00034 #include <NEnvironment.h> 00035 using MW_CGI::NEnvironment; 00036 00037 #include <cassert> 00038 00039 namespace { 00040 00041 string ourPostData; 00042 MW_CGI::FormPairs ourFormPairs; 00043 MW_CGI::QueryWords ourQueryWords; 00044 MW_CGI::FormPairs ourQueryPairs; 00045 00047 void NFormInitialize(); 00048 00049 }; 00050 00054 const std::string& MW_CGI::NForm::GetPostData() 00055 { 00056 NFormInitialize(); 00057 00058 return ourPostData; 00059 } 00060 00064 const MW_CGI::FormPairs& MW_CGI::NForm::GetFormPairs() 00065 { 00066 00067 NFormInitialize(); 00068 00069 return ourFormPairs; 00070 } 00071 00075 const MW_CGI::QueryWords& MW_CGI::NForm::GetQueryWords() 00076 { 00077 NFormInitialize(); 00078 00079 return ourQueryWords; 00080 } 00081 00085 const MW_CGI::FormPairs& MW_CGI::NForm::GetQueryPairs() 00086 { 00087 NFormInitialize(); 00088 00089 return ourQueryPairs; 00090 } 00091 00097 std::string MW_CGI::NForm::GetString( 00098 const std::string& inName, 00099 EDataSources inSource) 00100 { 00101 NFormInitialize(); 00102 00103 FormPairs thePairs; 00104 00105 switch (inSource) 00106 { 00107 case EDataSource_StdInput: 00108 { 00109 thePairs = ourFormPairs; 00110 } 00111 break; 00112 00113 case EDataSource_Query: 00114 { 00115 thePairs = ourQueryPairs; 00116 } 00117 break; 00118 00119 default: 00120 { 00121 assert(false); 00122 } 00123 } 00124 00125 for( FormPairs::const_iterator theIterator = thePairs.begin(); theIterator != thePairs.end(); ++theIterator) 00126 { 00127 if (theIterator->first == inName) 00128 { 00129 return theIterator->second; 00130 } 00131 } 00132 00133 throw XMissingValue(inName); 00134 00135 } 00136 00145 int MW_CGI::NForm::GetInt( 00146 const std::string& inName, 00147 EDataSources inSource) 00148 { 00149 NFormInitialize(); 00150 00151 FormPairs thePairs; 00152 00153 switch (inSource) 00154 { 00155 case EDataSource_StdInput: 00156 { 00157 thePairs = ourFormPairs; 00158 } 00159 break; 00160 00161 case EDataSource_Query: 00162 { 00163 thePairs = ourQueryPairs; 00164 } 00165 break; 00166 00167 default: 00168 { 00169 assert(false); 00170 } 00171 } 00172 00173 for (FormPairs::const_iterator theIterator = thePairs.begin(); theIterator != thePairs.end(); ++theIterator) 00174 { 00175 if (theIterator->first == inName) 00176 { 00177 char* theEnd; 00178 int theValue = std::strtol(theIterator->second.c_str(), &theEnd , 10 ); 00179 if (*theEnd != '\0' )//check to see if we converted the full string? 00180 { 00181 throw NForm::XMalformedValue(inName, theIterator->second); 00182 } 00183 if ( errno == ERANGE ) 00184 { 00185 throw NForm::XMalformedValue(inName, theIterator->second); 00186 } 00187 00188 return theValue; 00189 } 00190 } 00191 throw XMissingValue(inName); 00192 } 00193 00194 namespace { 00195 00203 void NFormInitialize() 00204 { 00205 static bool initialized = false; 00206 00207 if (initialized) 00208 { 00209 return; 00210 } 00211 00212 ourPostData = NCapture::GetStandardInput(); 00213 00214 string theGetData = NEnvironment::GetValue(NEnvironment::EKey_QueryString); 00215 00216 ourFormPairs = NWWWCodec::StringToPairs(ourPostData); 00217 ourQueryWords = NWWWCodec::StringToWords(theGetData); 00218 ourQueryPairs = NWWWCodec::StringToPairs(theGetData); 00219 00220 initialized = true; 00221 } 00222 00223 };

monsterworks Code by Monsterworks. Made available under the GNU Public License.
Documentation by doxygen.