diff -r a0da872af3fa -r c59bddbfd7b9 httpfilters/httpfilterconnhandler/Src/HttpFilterConnHandler.cpp --- a/httpfilters/httpfilterconnhandler/Src/HttpFilterConnHandler.cpp Wed Sep 01 12:21:21 2010 +0100 +++ b/httpfilters/httpfilterconnhandler/Src/HttpFilterConnHandler.cpp Wed Oct 13 15:09:28 2010 +0300 @@ -109,7 +109,8 @@ // ----------------------------------------------------------------------------- // CHttpFilterConnHandler::CHttpFilterConnHandler(RHTTPSession* aSession, MConnectionCallback* aConnCallback): - iConnCallback (aConnCallback) + iConnCallback (aConnCallback), + iLastIapId (0) { __ASSERT_DEBUG(aConnCallback != NULL, PanicHttpFiltersConnHandler()); __ASSERT_DEBUG(aSession != NULL, PanicHttpFiltersConnHandler()); @@ -385,6 +386,37 @@ // Set socket server handle connInfo.SetPropertyL(stringPool.StringF(HTTP::EHttpSocketServ, RHTTPSession::GetTable()), THTTPHdrVal((TInt)sockSvrHandle)); + + // Double check that client has set newConn properly + if (!newConn) + { + RConnection* connPtr = NULL; + TUint32 iapId = 0; + + // Client claims that connection has not changed, make sure + connPtr = REINTERPRET_CAST(RConnection*, connectionPtr); + error = connPtr->GetIntSetting ( _L("IAP\\Id"), iapId ); + // If reading failed or the IAP has changed since last query -> set newConn bit + if ((error != KErrNone) || (iLastIapId != iapId)) + { + newConn = ETrue; + iLastIapId = iapId; + } + } + else if (iLastIapId == 0) + { + RConnection* connPtr = NULL; + TUint32 iapId = 0; + + // Initialize last IAP variable for the first transaction + connPtr = REINTERPRET_CAST(RConnection*, connectionPtr); + error = connPtr->GetIntSetting ( _L("IAP\\Id"), iapId ); + if ((error != KErrNone) || (iLastIapId != iapId)) + { + iLastIapId = iapId; + } + } + // Set aNewConn flag connInfo.SetPropertyL(stringPool.StringF(HttpFilterCommonStringsExt::EHttpNewConnFlag, HttpFilterCommonStringsExt::GetTable()), THTTPHdrVal((TBool)newConn));