diff -r 68ef71f0cd72 -r 77effd21b2c9 datacommsserver/esockserver/ssock/ss_sapshim.cpp --- a/datacommsserver/esockserver/ssock/ss_sapshim.cpp Tue Feb 02 00:53:00 2010 +0200 +++ b/datacommsserver/esockserver/ssock/ss_sapshim.cpp Sat Feb 20 00:01:55 2010 +0200 @@ -92,8 +92,9 @@ { (void)aControl; __ASSERT_DEBUG(aControl == iHostResolverNotify, User::Panic(KSpecAssert_ESockSSocksspshm, 1)); - __ASSERT_DEBUG(iDCIdle <= EClientsPresent, User::Panic(KSpecAssert_ESockSSocksspshm, 2)); - iDCIdle = EIdle; + __ASSERT_DEBUG(!(Idle() || IdleSent()), User::Panic(KSpecAssert_ESockSSocksspshm, 2)); + SetIdle(); + iHostResolverNotify = NULL; if(iSubConnectionProvider.IsOpen()) // legacy flows have no control side { @@ -163,7 +164,7 @@ iListenerControlNotify->DisconnectFromListener(*this); } - if(!iDetaching) + if(!Detaching()) { delete iProvider; iProvider = NULL; @@ -283,14 +284,14 @@ { __ASSERT_DEBUG(!iProvider, User::Panic(KSpecAssert_ESockSSocksspshm, 9)); // can't have both HR & SAP - LOG( ESockLog::Printf(_L8("CTransportFlowShim %08x:\tUnbind(): iBearerExpected %d"), this, iBearerExpected) ); - if (!iBearerExpected) + LOG( ESockLog::Printf(_L8("CTransportFlowShim %08x:\tUnbind(): iBearerExpected %d"), this, BearerExpected()) ); + if (!BearerExpected()) { delete this; } else { - iDeleteUponBearerReception = ETrue; + SetDeleteUponBearerReception(); iHostResolverNotify = NULL; } return; @@ -300,7 +301,7 @@ { iProvider->SetNotify(NULL); - if (!iDetaching) + if (!Detaching()) { delete iProvider; iProvider = NULL; @@ -412,7 +413,7 @@ */ { TInt ret = EFalse; - if(!iIsStopped) + if(!Stopped()) { // Prevent sending NoBearer if DataClientStop was received if (LockToConnectionInfo() != KErrNone) { @@ -420,7 +421,8 @@ PostNoBearer(); ret = ETrue; } - iUseBearerErrors = EFalse; + ClearUseBearerErrors(); + ClearDataClientRoutedGuard(); } return ret; @@ -632,7 +634,7 @@ __ASSERT_DEBUG(iProvider, User::Panic(KSpecAssert_ESockSSocksspshm, 24)); if (aOption == MSessionControl::EImmediate) { - iShuttingDown = ETrue; + SetShuttingDown(); } // It is possible for the provider to be null if an error occurs immediatly @@ -880,7 +882,8 @@ if(iSessionControlNotify) { - iDetaching = aDelete == MSocketNotify::EDetach; + aDelete == MSocketNotify::EDetach ? SetDetaching() : ClearDetaching(); + iSessionControlNotify->CanClose(MSessionControlNotify::TDelete(aDelete)); if(aDelete==MSocketNotify::EDetach) { @@ -903,7 +906,7 @@ if(iSessionControlNotify) { - iDetaching = aDelete == MSocketNotify::EDetach; + aDelete == MSocketNotify::EDetach ? SetDetaching() : ClearDetaching(); iSessionControlNotify->CanClose(aDisconnectData, MSessionControlNotify::TDelete(aDelete)); if(aDelete==MSocketNotify::EDetach) { @@ -945,7 +948,7 @@ // No control above us - likely cause is that we're the result of a passive open that // hasn't yet been accepted. - iDetaching = MSocketNotify::EDetach; + SetDetaching(); Unbind(); } } @@ -964,7 +967,7 @@ // No control above us - likely cause is that we're the result of a passive open that // hasn't yet been accepted. - iDetaching = MSocketNotify::EDetach; + SetDetaching(); Unbind(); } } @@ -983,7 +986,7 @@ // No control above us - likely cause is that we're the result of a passive open that // hasn't yet been accepted. - iDetaching = MSocketNotify::EDetach; + SetDetaching(); Unbind(); } } @@ -1027,11 +1030,11 @@ return; } - iUseBearerErrors = ETrue; + SetUseBearerErrors(); LocalName(iLocalAddress); - iLocalAddressSet = ETrue; + SetLocalAddressSet(); RemName(iRemoteAddress); - iRemoteAddressSet = ETrue; + SetRemoteAddressSet(); __ASSERT_DEBUG(iSubConnectionProvider.IsOpen(), User::Panic(KSpecAssert_ESockSSocksspshm, 41)); // legacy flows have no control side; should never get here PostDataClientRouted(); @@ -1170,7 +1173,7 @@ { CompleteStart(err); } - iBearerExpected = ETrue; + SetBearerExpected(); } else { @@ -1249,7 +1252,7 @@ { CompleteStart(KErrNone); } - LOG( ESockLog::Printf(_L8("CTransportFlowShim %08x:\tReceivedL(): TBearer: iDeleteUponBearerReception %d"), this, iDeleteUponBearerReception) ); + LOG( ESockLog::Printf(_L8("CTransportFlowShim %08x:\tReceivedL(): TBearer: iDeleteUponBearerReception %d"), this, DeleteUponBearerReception())); ClearNoBearerGuard(); ProcessDCIdleState(); @@ -1266,8 +1269,9 @@ void CTransportFlowShim::NoBearerCompletion() { - iBearerExpected = EFalse; - if (iDeleteUponBearerReception) + ClearBearerExpected(); + + if (DeleteUponBearerReception()) { delete this; } @@ -1283,8 +1287,8 @@ if (aError==KErrNone) { iStartRequest.ReplyTo(Id(), TCFDataClient::TStarted().CRef()); - iIsStarted = ETrue; - iIsStopped = EFalse; + SetStarted(); + ClearStopped(); } else { @@ -1333,7 +1337,7 @@ NM_LOG((KESockServerTag, _L8("CTransportFlowShim %08x:\tSynchronous call: From=%08x To=%08x Func=BindToL"), this, static_cast(this), &aBindTo.iNodeId.Node()) ) - if (iShuttingDown) + if (ShuttingDown()) { User::Leave(KErrCancel); return; @@ -1344,9 +1348,10 @@ { LockToConnectionInfo(); LocalName(iLocalAddress); - iLocalAddressSet = ETrue; + SetLocalAddressSet(); RemName(iRemoteAddress); - iRemoteAddressSet = ETrue; + SetRemoteAddressSet(); + __ASSERT_DEBUG(iSubConnectionProvider.IsOpen(), User::Panic(KSpecAssert_ESockSSocksspshm, 48)); // legacy flows have no control side; should never get here } else if (iHostResolverNotify) @@ -1382,13 +1387,13 @@ void CTransportFlowShim::StartFlowL(const TRuntimeCtxId& aSender) { - __ASSERT_DEBUG(!iIsStarted, User::Panic(KSpecAssert_ESockSSocksspshm, 49)); + __ASSERT_DEBUG(!Started(), User::Panic(KSpecAssert_ESockSSocksspshm, 49)); __ASSERT_DEBUG(iSubConnectionProvider.IsOpen(), User::Panic(KSpecAssert_ESockSSocksspshm, 50)); // legacy flows have no control side; should never get here //We will wait for it and complete the start after we have received it User::LeaveIfError(iStartRequest.Open(iSubConnectionProvider, aSender)); - if (iDCIdle != EClientsPresent) + if (Idle()) { iStartRequest.ReplyTo(Id(), TEBase::TError(TCFDataClient::TStart::Id(), KErrNotReady).CRef()); iStartRequest.Close(); @@ -1399,8 +1404,8 @@ { iStartRequest.ReplyTo(Id(), TCFDataClient::TStarted().CRef()); iStartRequest.Close(); - iIsStarted = ETrue; - iIsStopped = EFalse; + SetStarted(); + ClearStopped(); return; } @@ -1411,7 +1416,6 @@ void CTransportFlowShim::StopFlow(TCFDataClient::TStop& aMessage) { - __ASSERT_DEBUG(iIsStarted, User::Panic(KSpecAssert_ESockSSocksspshm, 51)); //Must be started now __ASSERT_DEBUG(iSubConnectionProvider.IsOpen(), User::Panic(KSpecAssert_ESockSSocksspshm, 52)); // legacy flows have no control side; should never get here // We need to error the socket if the lower protocol stack is not going to do this. Once a @@ -1425,7 +1429,11 @@ // RConnection but not transferring any data will not cause the TCP/IP stack to attach the flow // to the route and hence not call Error() if the interface comes down. - if (IsBoundToSession() && !iUseBearerErrors) + if (IsBoundToSession() && aMessage.iValue == KErrForceDisconnected) + { + Error(KErrDisconnected, EErrorAllOperations); + } + else if (IsBoundToSession() && !UseBearerErrors()) { Error(aMessage.iValue, EErrorAllOperations); } @@ -1438,14 +1446,14 @@ iLowerControl = NULL; iSubConnectionProvider.PostMessage(Id(), TCFDataClient::TStopped(aMessage.iValue).CRef()); - iIsStarted = EFalse; - iIsStopped = ETrue; + ClearStarted(); + SetStopped(); } void CTransportFlowShim::InitDestroy() { - __ASSERT_DEBUG(iDCIdle <= EClientsPresent, User::Panic(KSpecAssert_ESockSSocksspshm, 53)); - iDCIdle = EIdle; + __ASSERT_DEBUG(!(Idle() || IdleSent()), User::Panic(KSpecAssert_ESockSSocksspshm, 53)); + SetIdle(); if(iSubConnectionProvider.IsOpen()) // legacy flows have no control side { @@ -1473,8 +1481,8 @@ void CTransportFlowShim::PostDataClientRouted() { - if (iLocalAddressSet && iRemoteAddressSet - && iRemoteAddress.Family() != KAFUnspec && !iDataClientRoutedGuard) + if (LocalAddressSet() && RemoteAddressSet() + && iRemoteAddress.Family() != KAFUnspec && !DataClientRoutedGuard()) { iSubConnectionProvider.PostMessage( Id(), @@ -1486,16 +1494,10 @@ iIfInfo.iIAPId) ).CRef() ); - iDataClientRoutedGuard = ETrue; + SetDataClientRoutedGuard(); } } -void CTransportFlowShim::ClearDataClientRoutedGuard() - { - iDataClientRoutedGuard = EFalse; - } - - /* Store the provision information passed from the Control side. @param TProvisionConfig Message recd. @@ -1770,7 +1772,7 @@ } } - if(!IsStopped()) + if(!Stopped()) { // Prevent sending NoBearer if DataClientStop was received ParseNoBearerParams(aConnectionParams); if (iIsScoped) @@ -1807,7 +1809,7 @@ } PostNoBearer(); } - ClearUseBearerErrors(); + ClearDataClientRoutedGuard(); } else @@ -1887,7 +1889,7 @@ { SetPolicyCheckRequestPending(EFalse); - if (iDCIdle == EIdle) + if (Idle() && !IdleSent()) { ProcessDCIdleState(); }