📄 _web_client_engine_8cpp-source.html
字号:
<a name="l00124"></a>00124 CleanupStack::PopAndDestroy( &valStr );<a name="l00125"></a>00125 }<a name="l00126"></a>00126 <a name="l00127"></a>00127 <span class="comment">// ----------------------------------------------------------------------------</span><a name="l00128"></a>00128 <span class="comment">// CWebClientEngine::DumpRespHeadersL(RHTTPTransaction& aTransaction)</span><a name="l00129"></a>00129 <span class="comment">// Used to display HTTP header field names and values</span><a name="l00130"></a>00130 <span class="comment">// ----------------------------------------------------------------------------</span><a name="l00131"></a>00131 <span class="comment">//</span><a name="l00132"></a><a class="code" href="class_c_web_client_engine.html#f0720cc791fe8b50eff81b4af13e9f89">00132</a> <span class="keywordtype">void</span> <a class="code" href="class_c_web_client_engine.html#f0720cc791fe8b50eff81b4af13e9f89">CWebClientEngine::DumpRespHeadersL</a>( RHTTPTransaction& aTransaction )<a name="l00133"></a>00133 {<a name="l00134"></a>00134 RHTTPResponse resp = aTransaction.Response();<a name="l00135"></a>00135 RStringPool strP = aTransaction.Session().StringPool();<a name="l00136"></a>00136 RHTTPHeaders hdr = resp.GetHeaderCollection();<a name="l00137"></a>00137 THTTPHdrFieldIter it = hdr.Fields();<a name="l00138"></a>00138 <a name="l00139"></a>00139 HBufC* headerField = HBufC::NewLC( KMaxHeaderNameLength + KMaxHeaderValueLength );<a name="l00140"></a>00140 HBufC* fieldValBuf = HBufC::NewLC( KMaxHeaderValueLength );<a name="l00141"></a>00141 <a name="l00142"></a>00142 <span class="keywordflow">while</span> ( it.AtEnd() == EFalse )<a name="l00143"></a>00143 {<a name="l00144"></a>00144 RStringTokenF fieldName = it();<a name="l00145"></a>00145 RStringF fieldNameStr = strP.StringF( fieldName );<a name="l00146"></a>00146 THTTPHdrVal fieldVal;<a name="l00147"></a>00147 <span class="keywordflow">if</span> ( hdr.GetField( fieldNameStr, 0, fieldVal ) == KErrNone )<a name="l00148"></a>00148 {<a name="l00149"></a>00149 <span class="keyword">const</span> TDesC8& fieldNameDesC = fieldNameStr.DesC();<a name="l00150"></a>00150 headerField->Des().Copy( fieldNameDesC.Left( KMaxHeaderNameLength ));<a name="l00151"></a>00151 fieldValBuf->Des().Zero();<a name="l00152"></a>00152 <span class="keywordflow">switch</span> ( fieldVal.Type() )<a name="l00153"></a>00153 {<a name="l00154"></a>00154 <span class="comment">// the value is an integer</span><a name="l00155"></a>00155 <span class="keywordflow">case</span> THTTPHdrVal::KTIntVal:<a name="l00156"></a>00156 fieldValBuf->Des().Num( fieldVal.Int() );<a name="l00157"></a>00157 <span class="keywordflow">break</span>;<a name="l00158"></a>00158 <span class="comment">// the value is a case-insensitive string</span><a name="l00159"></a>00159 <span class="keywordflow">case</span> THTTPHdrVal::KStrFVal:<a name="l00160"></a>00160 {<a name="l00161"></a>00161 RStringF fieldValStr = strP.StringF( fieldVal.StrF() );<a name="l00162"></a>00162 <span class="keyword">const</span> TDesC8& fieldValDesC = fieldValStr.DesC();<a name="l00163"></a>00163 fieldValBuf->Des().Copy( fieldValDesC.Left(KMaxHeaderValueLength ));<a name="l00164"></a>00164 }<a name="l00165"></a>00165 <span class="keywordflow">break</span>;<a name="l00166"></a>00166 <span class="comment">// the value is a case-sensitive string</span><a name="l00167"></a>00167 <span class="keywordflow">case</span> THTTPHdrVal::KStrVal:<a name="l00168"></a>00168 {<a name="l00169"></a>00169 RString fieldValStr = strP.String( fieldVal.Str() );<a name="l00170"></a>00170 <span class="keyword">const</span> TDesC8& fieldValDesC = fieldValStr.DesC();<a name="l00171"></a>00171 fieldValBuf->Des().Copy( fieldValDesC.Left(KMaxHeaderValueLength) );<a name="l00172"></a>00172 }<a name="l00173"></a>00173 <span class="keywordflow">break</span>;<a name="l00174"></a>00174 <span class="comment">// the value is a date/time</span><a name="l00175"></a>00175 <span class="keywordflow">case</span> THTTPHdrVal::KDateVal:<a name="l00176"></a>00176 {<a name="l00177"></a>00177 TDateTime date = fieldVal.DateTime();<a name="l00178"></a>00178 TBuf<KMaxDateTimeStringLength> dateTimeString;<a name="l00179"></a>00179 TTime t( date );<a name="l00180"></a>00180 t.FormatL( dateTimeString,KDateFormat );<a name="l00181"></a>00181 fieldValBuf->Des().Copy( dateTimeString );<a name="l00182"></a>00182 } <a name="l00183"></a>00183 <span class="keywordflow">break</span>;<a name="l00184"></a>00184 <span class="comment">// the value is type is unknown</span><a name="l00185"></a>00185 <span class="keywordflow">default</span>:<a name="l00186"></a>00186 <span class="keywordflow">break</span>;<a name="l00187"></a>00187 }<a name="l00188"></a>00188 <a name="l00189"></a>00189 <span class="comment">// Display HTTP header field name and value</span><a name="l00190"></a>00190 headerField->Des().Append( KColon );<a name="l00191"></a>00191 headerField->Des().Append( *fieldValBuf );<a name="l00192"></a>00192 iObserver.ClientHeaderReceived( *headerField );<a name="l00193"></a>00193 <a name="l00194"></a>00194 <span class="comment">// Display realm for WWW-Authenticate header</span><a name="l00195"></a>00195 RStringF wwwAuth = strP.StringF( HTTP::EWWWAuthenticate,RHTTPSession::GetTable() );<a name="l00196"></a>00196 <span class="keywordflow">if</span> ( fieldNameStr == wwwAuth )<a name="l00197"></a>00197 {<a name="l00198"></a>00198 <span class="comment">// check the auth scheme is 'basic'</span><a name="l00199"></a>00199 RStringF basic = strP.StringF( HTTP::EBasic,RHTTPSession::GetTable() );<a name="l00200"></a>00200 RStringF realm = strP.StringF( HTTP::ERealm,RHTTPSession::GetTable() );<a name="l00201"></a>00201 THTTPHdrVal realmVal;<a name="l00202"></a>00202 <span class="keywordflow">if</span> (( fieldVal.StrF() == basic ) && <a name="l00203"></a>00203 ( !hdr.GetParam( wwwAuth, realm, realmVal )))<a name="l00204"></a>00204 {<a name="l00205"></a>00205 RStringF realmValStr = strP.StringF( realmVal.StrF() );<a name="l00206"></a>00206 fieldValBuf->Des().Copy( realmValStr.DesC() );<a name="l00207"></a>00207 headerField->Des().Copy( Krealm );<a name="l00208"></a>00208 headerField->Des().Append( *fieldValBuf );<a name="l00209"></a>00209 iObserver.ClientHeaderReceived( *headerField );<a name="l00210"></a>00210 }<a name="l00211"></a>00211 }<a name="l00212"></a>00212 }<a name="l00213"></a>00213 ++it;<a name="l00214"></a>00214 }<a name="l00215"></a>00215 CleanupStack::PopAndDestroy( fieldValBuf );<a name="l00216"></a>00216 CleanupStack::PopAndDestroy( headerField );<a name="l00217"></a>00217 }<a name="l00218"></a>00218 <a name="l00219"></a>00219 <span class="comment">// ----------------------------------------------------------------------------</span><a name="l00220"></a>00220 <span class="comment">// CWebClientEngine::HandleRunErrorL()</span><a name="l00221"></a>00221 <span class="comment">// Called from MHFRunError() when *leave* occurs in handling of transaction event.</span><a name="l00222"></a>00222 <span class="comment">// ----------------------------------------------------------------------------</span><a name="l00223"></a>00223 <span class="comment">//</span><a name="l00224"></a><a class="code" href="class_c_web_client_engine.html#2f2fdeb2077849ca331b415db028feba">00224</a> <span class="keywordtype">void</span> <a class="code" href="class_c_web_client_engine.html#2f2fdeb2077849ca331b415db028feba">CWebClientEngine::HandleRunErrorL</a>( TInt aError )<a name="l00225"></a>00225 {<a name="l00226"></a>00226 <span class="comment">// Load a string from the resource file and add the leave code to string</span><a name="l00227"></a>00227 HBufC* textResource = StringLoader::LoadL( R_WEBCLIENT_MHFRUN_ERROR, aError );<a name="l00228"></a>00228 <span class="comment">// Notify about the error</span><a name="l00229"></a>00229 <a class="code" href="class_c_web_client_engine.html#5598d19cc10719afd28055422087a200">iObserver</a>.<a class="code" href="class_m_web_client_observer.html#ba45586e3b6414e9a001aa362b83f6d3">ClientEvent</a>( *textResource );<a name="l00230"></a>00230 CleanupStack ::PopAndDestroy( textResource );<a name="l00231"></a>00231 <span class="keywordflow">if</span> ( <a class="code" href="class_c_web_client_engine.html#6da7cfd219226594e04b0bf1b29cd50d">iApplicationUi</a> )<a name="l00232"></a>00232 <a class="code" href="class_c_web_client_engine.html#6da7cfd219226594e04b0bf1b29cd50d">iApplicationUi</a>-><a class="code" href="class_c_web_client_app_ui.html#53a2a56d9127e44f97de4d5ed7e6c132">RemoveWaitDialogL</a>();<a name="l00233"></a>00233 }<a name="l00234"></a>00234 <a name="l00235"></a>00235 <span class="comment">// ----------------------------------------------------------------------------</span><a name="l00236"></a>00236 <span class="comment">// CWebClientEngine::IssueHTTPGetL()</span><a name="l00237"></a>00237 <span class="comment">// Start a new HTTP GET transaction.</span><a name="l00238"></a>00238 <span class="comment">// ----------------------------------------------------------------------------</span><a name="l00239"></a>00239 <span class="comment">//</span><a name="l00240"></a><a class="code" href="class_c_web_client_engine.html#b0657f50d2303b5a4f15a7c3b15cbbdc">00240</a> <span class="keywordtype">void</span> <a class="code" href="class_c_web_client_engine.html#b0657f50d2303b5a4f15a7c3b15cbbdc">CWebClientEngine::IssueHTTPGetL</a>( <span class="keyword">const</span> TDesC8& aUri )<a name="l00241"></a>00241 {<a name="l00242"></a>00242 <span class="comment">// Parse string to URI (as defined in RFC2396)</span><a name="l00243"></a>00243 TUriParser8 uri;<a name="l00244"></a>00244 uri.Parse( aUri );<a name="l00245"></a>00245 <a name="l00246"></a>00246 <span class="comment">// Get request method string for HTTP GET</span><a name="l00247"></a>00247 RStringF method = <a class="code" href="class_c_web_client_engine.html#d8033daa9b951c54149345b6871648bb">iSession</a>.StringPool().StringF( HTTP::EGET,<a name="l00248"></a>00248 RHTTPSession::GetTable());<a name="l00249"></a>00249 <a name="l00250"></a>00250 <span class="comment">// Open transaction with previous method and parsed uri. This class will</span><a name="l00251"></a>00251 <span class="comment">// receive transaction events in MHFRunL and MHFRunError.</span><a name="l00252"></a>00252 <a class="code" href="class_c_web_client_engine.html#7deee05e1ccb79197ceb34881cf60159">iTransaction</a> = <a class="code" href="class_c_web_client_engine.html#d8033daa9b951c54149345b6871648bb">iSession</a>.OpenTransactionL( uri, *<span class="keyword">this</span>, method );<a name="l00253"></a>00253 <a name="l00254"></a>00254 <span class="comment">// Set headers for request; user agent and accepted content type</span><a name="l00255"></a>00255 RHTTPHeaders hdr = <a class="code" href="class_c_web_client_engine.html#7deee05e1ccb79197ceb34881cf60159">iTransaction</a>.Request().GetHeaderCollection();<a name="l00256"></a>00256 <a class="code" href="class_c_web_client_engine.html#c5970d86bcc6ac5be0ff1c5d5daaea7b">SetHeaderL</a>( hdr, HTTP::EUserAgent, KUserAgent );<a name="l00257"></a>00257 <a class="code" href="class_c_web_client_engine.html#c5970d86bcc6ac5be0ff1c5d5daaea7b">SetHeaderL</a>( hdr, HTTP::EAccept, KAccept );<a name="l00258"></a>00258 <a name="l00259"></a>00259 <span class="comment">// Submit the transaction. After this the framework will give transaction</span>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -