diff -r 48e9d43c1d7f -r 9e96e2676219 webservices/wshttpchanneltransportplugin/src/senhttpchanneltransportplugin.cpp --- a/webservices/wshttpchanneltransportplugin/src/senhttpchanneltransportplugin.cpp Tue Apr 27 17:46:55 2010 +0300 +++ b/webservices/wshttpchanneltransportplugin/src/senhttpchanneltransportplugin.cpp Tue May 11 17:14:12 2010 +0300 @@ -104,7 +104,8 @@ iProperties(NULL), iConsumerMap(EFalse, ETrue), iSessionMap(EFalse, EFalse), // iConsumerMap deletes the txnIds (using same "new reserved" TInt here!) - iStatusCode(0) + iStatusCode(0), + iIsConnectionFailed(EFalse) { } @@ -124,6 +125,10 @@ delete ipCtx; ipCtx = NULL; + // Close the log file and the connection to the server. + TLSLOG(KSenHttpChannelLogChannelBase , KMinLogLevel,(_L("SenHttpChannel - Log file closed."))); + TLSLOG_CLOSE(KSenHttpChannelLogChannelBase); + TLSLOG(KSenHttpChannelObserverLogChannelBase,KMinLogLevel,(_L("Got last data chunk."))); TLSLOG_CLOSE(KSenHttpChannelObserverLogChannelBase); } @@ -135,6 +140,10 @@ TLSLOG_L(KSenHttpChannelObserverLogChannelBase,KMinLogLevel,"CSenHttpChannelTransportPlugin::ConstructL(): log file opened."); TLSLOG_L(KSenHttpChannelObserverLogChannelBase,KMinLogLevel,"CSenHttpChannelTransportPlugin::ConstructL - Version 2 [2006-05-09]"); + // Open connection to the file logger server + TLSLOG_OPEN(KSenHttpChannelLogChannelBase, KSenHttpChannelLogLevel, KSenHttpChannelLogDir, KSenHttpChannelLogFile); + TLSLOG(KSenHttpChannelLogChannelBase , KMinLogLevel,(_L("SenHttpChannel - Log file opened"))); + if( ipCtx ) { // Attempt to find pre-defined IAP ID from transport context @@ -455,10 +464,29 @@ // Method to catch async error responses from httpchannel void CSenHttpChannelTransportPlugin::ResponseErrorL(TInt aRequestId, TInt aErrorCode, HBufC8* apErrorBody,CSenHttpTransportProperties* aHttpProperties) { + TLSLOG_FORMAT((KSenHttpChannelObserverLogChannelBase,KMinLogLevel, _L8("CSenHttpChannelTransportPlugin::ResponseErrorL() - aErrorCode [%d]"), aErrorCode)); CleanupStack::PushL(apErrorBody); - iHttpChannel->DisableTimeOutL(aRequestId); + if( (aErrorCode < KErrNone) && (apErrorBody == NULL) || aErrorCode == KErrAbort) + { + TLSLOG_L(KSenHttpChannelObserverLogChannelBase,KMinLogLevel,"CSenHttpChannelTransportPlugin::ResponseErrorL() Set iIsConnectionFailed True"); + iHttpChannel->ResetIapId(); + iHttpChannel->ResetUsedIapId(); + iHttpChannel->SetExplicitIapDefined(EFalse); + iIsConnectionFailed = ETrue; + TUint32 zeroIap = 0; + TBuf8<128> buf; + buf.AppendFormat(_L8("%u"), zeroIap); + LayeredPropertiesL().SetPropertyL(KIapIdLocalName, buf); //Reset the layered properties in case of wrong IAP + } + else + { + iHttpChannel->SetExplicitIapDefined(ETrue); + } + if(iHttpChannel) + { + iHttpChannel->DisableTimeOutL(aRequestId); + } #ifdef _SENDEBUG - TLSLOG_L(KSenHttpChannelObserverLogChannelBase,KMinLogLevel,"CSenHttpChannelTransportPlugin::ResponseErrorL:"); TLSLOG_FORMAT((KSenHttpChannelObserverLogChannelBase,KNormalLogLevel, _L8("- Request's txnID: %d"), aRequestId)); if ( apErrorBody ) { @@ -558,11 +586,12 @@ // ALWAYS HANDLE IAP ID FIRST, SINCE IT *CAN RESET* HTTPCHANNEL! TUint32 iapId(KErrNone); - retVal = LayeredPropertiesL().IapIdL(iapId); - if(retVal==KErrNone) + TLSLOG_FORMAT((KSenHttpChannelObserverLogChannelBase,KMinLogLevel, _L8("- CSenHttpChannelTransportPlugin::ApplyPropertiesL() - iapId [%d]"), iapId)); + TLSLOG_FORMAT((KSenHttpChannelObserverLogChannelBase,KMinLogLevel, _L8("- LayeredPropertiesL() retVal [%d]"), retVal)); + if(iIsConnectionFailed) { - TInt resetPerformed = ResetHttpChannelByIapIdL(iapId); + TInt resetPerformed = ResetHttpChannelByIapIdL(0); //Incase of connection error set Iap ID 0 #ifdef _SENDEBUG if(resetPerformed == KErrNone) { @@ -570,6 +599,16 @@ } #endif // _SENDEBUG } + else if(retVal==KErrNone) + { + TInt resetPerformed = ResetHttpChannelByIapIdL(iapId); +#ifdef _SENDEBUG + if(resetPerformed == KErrNone) + { + TLSLOG_FORMAT((KSenHttpChannelObserverLogChannelBase,KNormalLogLevel, _L8("- IAP re-set performed: (%d)"), 0)); + } +#endif // _SENDEBUG + } // Handle ProxyHost and ProxyPort TPtrC8 proxyHost; @@ -621,10 +660,10 @@ TInt retVal(KErrNone); TLSLOG_FORMAT((KSenHttpChannelObserverLogChannelBase,KMinLogLevel, _L8("- explicitIapIdDefined[%d], effectiveIapId[%d], aIapId[%d]"), explicitIapIdDefined, effectiveIapId, aIapId)); - if(!explicitIapIdDefined || (explicitIapIdDefined && (effectiveIapId != aIapId) )) + if(!explicitIapIdDefined || (explicitIapIdDefined && (effectiveIapId != aIapId) ) || iIsConnectionFailed) { TLSLOG_L(KSenHttpChannelObserverLogChannelBase,KMinLogLevel,"CSenHttpChannelTransportPlugin::ResetHttpChannel():"); - + iIsConnectionFailed = EFalse; delete iHttpChannel; iHttpChannel = NULL; delete iRequester; @@ -645,6 +684,7 @@ { retVal = KErrAlreadyExists; } + TLSLOG_FORMAT((KSenHttpChannelObserverLogChannelBase,KMinLogLevel, _L8("CSenHttpChannelTransportPlugin::ResetHttpChannelByIapIdL() - returns [%d]"), retVal)); return retVal; }