Revision: 201025 RCL_3
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 21 Jun 2010 17:25:18 +0300
branchRCL_3
changeset 40 d566d76acea1
parent 27 4214adf9e0d3
child 44 87bcfc2c9c1e
child 52 3652a10b304a
Revision: 201025 Kit: 2010125
linklayercontrol/networkinterfacemgr/netcfgext/inc/netcfgextnotify.h
linklayercontrol/networkinterfacemgr/netcfgext/src/netcfgextnotify.cpp
networkcontrol/commsuserpromptmgr/state/src/netupsstatemachine.cpp
networkcontrol/ipnetworklayer/addressinfohook/src/hookaddrinfo.cpp
networkcontrol/ipnetworklayer/inc/IPProtoCPR.h
networkcontrol/ipnetworklayer/inc/ipprotodeftscpr.h
networkcontrol/ipnetworklayer/src/IPProtoCPR.cpp
networkcontrol/ipnetworklayer/src/IPProtoCprStates.cpp
networkcontrol/ipnetworklayer/src/ipprotodeftscpr.cpp
networkcontrol/ipnetworklayer/src/ipprotodeftscprstates.cpp
networkprotocols/tcpipv4v6prt/inc/tcp.h
networkprotocols/tcpipv4v6prt/src/tcp_sap.cpp
networksecurity/ipsec/ipsecpol/src/ipsecpolmanhandler.cpp
networksecurity/ipsec/ipsecpol/src/ipsecpolmanutil.cpp
tcpiputils/dhcp/src/DHCPStateMachine.cpp
--- a/linklayercontrol/networkinterfacemgr/netcfgext/inc/netcfgextnotify.h	Wed Jun 09 11:23:04 2010 +0300
+++ b/linklayercontrol/networkinterfacemgr/netcfgext/inc/netcfgextnotify.h	Mon Jun 21 17:25:18 2010 +0300
@@ -38,6 +38,7 @@
 	   MNifIfNotify interface
 	   Only IfProgress, DoReadDes and DoReadInt supported.
 	*/
+	~CNetCfgExtNotify();
 	void LinkLayerDown(TInt aReason, TAction aAction);
 	void LinkLayerUp();
     void NegotiationFailed(CNifIfBase* aIf, TInt aReason);
--- a/linklayercontrol/networkinterfacemgr/netcfgext/src/netcfgextnotify.cpp	Wed Jun 09 11:23:04 2010 +0300
+++ b/linklayercontrol/networkinterfacemgr/netcfgext/src/netcfgextnotify.cpp	Mon Jun 21 17:25:18 2010 +0300
@@ -35,11 +35,19 @@
 	{
 	}
 
+CNetCfgExtNotify::~CNetCfgExtNotify()
+    {
+    iScpr = NULL;
+    }
+
 void CNetCfgExtNotify::IfProgress(TInt aStage, TInt aError)
 	{
 	TStateChange change(aStage, aError);
+	if(iScpr)
+	    {
 	RClientInterface::OpenPostMessageClose(iScpr->Id(), iScpr->Id(),
 		TCFMessage::TStateChange(change).CRef());
+	    }
 	}
 
 TInt CNetCfgExtNotify::DoReadInt(const TDesC& aField, TUint32& aValue,const RMessagePtr2* /*aMessage*/)
--- a/networkcontrol/commsuserpromptmgr/state/src/netupsstatemachine.cpp	Wed Jun 09 11:23:04 2010 +0300
+++ b/networkcontrol/commsuserpromptmgr/state/src/netupsstatemachine.cpp	Mon Jun 21 17:25:18 2010 +0300
@@ -71,27 +71,71 @@
 	// Note the order in which the states are instantiated must match the 
 	// order in which they are defined in the enumeration TNetUpsState - or a panic will occur.
 
-	iState.Append(CState::NewL(ENull, *this));	
+	CState* state=CState::NewL(ENull, *this);
+		
+	CleanupStack::PushL(state);
+	iState.AppendL(state);
+	CleanupStack::Pop(state);
+		
 	switch(iNetUpsImpl.LifeTimeMode())
 		{
+			
 		case CNetUpsImpl::EProcessLifeTimeMode:
 			{
-			iState.Append(CState::NewL(EProcLife_NonSession, *this));			
-			iState.Append(CState::NewL(EProcLife_Transit_SessionYes, *this)); // a transient state is entered when the UPS Server responds with either SessionYes or SessionNo and there are 1 or more UPS requests outstanding to other subsessions which are associated with the same process.			
-			iState.Append(CState::NewL(EProcLife_SessionYes, *this));
-			iState.Append(CState::NewL(EProcLife_Transit_SessionNo, *this));
-			iState.Append(CState::NewL(EProcLife_SessionNo, *this));
+			CState* stateone= CState::NewL(EProcLife_NonSession, *this);
+			CleanupStack::PushL(stateone);
+			iState.AppendL(stateone);	
+			
+			CState* statetwo = CState::NewL(EProcLife_Transit_SessionYes, *this);
+			CleanupStack::PushL(statetwo);
+			iState.AppendL(statetwo); // a transient state is entered when the UPS Server responds with either SessionYes or SessionNo and there are 1 or more UPS requests outstanding to other subsessions which are associated with the same process.			
+			
+			CState* statethree = CState::NewL(EProcLife_SessionYes, *this);
+			CleanupStack::PushL(statethree);
+			iState.AppendL(statethree);
+			
+			CState* statefour = CState::NewL(EProcLife_Transit_SessionNo, *this);
+			CleanupStack::PushL(statefour);
+			iState.AppendL(statefour);
+			
+			CState* statefive = CState::NewL(EProcLife_SessionNo, *this);
+			CleanupStack::PushL(statefive);
+			iState.AppendL(statefive);
+			
+			CleanupStack::Pop(5);
 			break;
 			}
 		case CNetUpsImpl::ENetworkLifeTimeMode:
 			{
-			iState.Append(CState::NewL(ENetLife_NonSession, *this));			
-			iState.Append(CState::NewL(ENetLife_SessionNo_Transit_WithoutConnections, *this));			
-			iState.Append(CState::NewL(ENetLife_SessionNo_WithOutConnections, *this));
-			iState.Append(CState::NewL(ENetLife_SessionNo_Transit_WithConnections, *this));
-			iState.Append(CState::NewL(ENetLife_SessionNo_WithConnections, *this));
-			iState.Append(CState::NewL(ENetLife_Transit_SessionYes, *this));
-			iState.Append(CState::NewL(ENetLife_SessionYes, *this));
+			CState* stateone = CState::NewL(EProcLife_NonSession, *this);
+			CleanupStack::PushL(stateone);
+			iState.AppendL(stateone);
+			
+			CState* statetwo = CState::NewL(ENetLife_SessionNo_Transit_WithoutConnections, *this);
+			CleanupStack::PushL(statetwo);
+			iState.AppendL(statetwo);		
+			
+			CState* statethree = CState::NewL(ENetLife_SessionNo_WithOutConnections, *this);
+			CleanupStack::PushL(statethree);
+			iState.AppendL(statethree);
+			
+			CState* statefour = CState::NewL(ENetLife_SessionNo_Transit_WithConnections, *this);
+			CleanupStack::PushL(statefour);
+			iState.AppendL(statefour);
+			
+			CState* statefive = CState::NewL(ENetLife_SessionNo_WithConnections, *this);
+			CleanupStack::PushL(statefive);
+			iState.AppendL(statefive);
+			
+			CState* statesix = CState::NewL(ENetLife_Transit_SessionYes, *this);
+			CleanupStack::PushL(statesix);
+			iState.AppendL(statesix);
+								
+			CState* stateseven = CState::NewL(ENetLife_SessionYes, *this);
+			CleanupStack::PushL(stateseven);
+			iState.AppendL(stateseven);
+			
+			CleanupStack::Pop(7);
 			break;				
 			}
 		default:
--- a/networkcontrol/ipnetworklayer/addressinfohook/src/hookaddrinfo.cpp	Wed Jun 09 11:23:04 2010 +0300
+++ b/networkcontrol/ipnetworklayer/addressinfohook/src/hookaddrinfo.cpp	Mon Jun 21 17:25:18 2010 +0300
@@ -38,8 +38,10 @@
 EXPORT_C void CHookAddressInfo::AddL(CIPProtoBinder* aBinder, CSubConIPAddressInfoParamSet::TSubConIPAddressInfo& aAddrInfo)
 	{
 	TIpAddrBinder *addrBinder =  new(ELeave) TIpAddrBinder(aBinder, aAddrInfo);
-	
-	iAddrInfo.Append(addrBinder);
+
+	CleanupStack::PushL(addrBinder);
+	iAddrInfo.AppendL(addrBinder);
+	CleanupStack::Pop(addrBinder);
 
 	//Try match the address info to existing flows	
 	TDblQueIter<CAddressInfoFlowInfo> iter(*iFlows);
--- a/networkcontrol/ipnetworklayer/inc/IPProtoCPR.h	Wed Jun 09 11:23:04 2010 +0300
+++ b/networkcontrol/ipnetworklayer/inc/IPProtoCPR.h	Mon Jun 21 17:25:18 2010 +0300
@@ -194,6 +194,7 @@
 	TBool iLinkUp:1;
 	TBool iConnectionControlActivity:1;
 	TBool iTimerExpired:1;
+	TBool iTimerStopped:1;
 	TBool iTimerRunning:1;
 	TBool iSubConnEventDataSent:1;	// Hack to cope with multiple DataClientStatusChange notifications for 'stopped'
 	TBool iNodeLocalExtensionsCreated;
--- a/networkcontrol/ipnetworklayer/inc/ipprotodeftscpr.h	Wed Jun 09 11:23:04 2010 +0300
+++ b/networkcontrol/ipnetworklayer/inc/ipprotodeftscpr.h	Mon Jun 21 17:25:18 2010 +0300
@@ -103,6 +103,8 @@
 	CNifConfigurationControl* iControl;
     Messages::RNodeInterface iFlow;
 	TBool iIoctlCancelled;
+public:
+	TBool iNetworkConfigurationState;
 	};
 
 #endif //SYMBIAN_IPPROTODEFTSCPR_H
--- a/networkcontrol/ipnetworklayer/src/IPProtoCPR.cpp	Wed Jun 09 11:23:04 2010 +0300
+++ b/networkcontrol/ipnetworklayer/src/IPProtoCPR.cpp	Mon Jun 21 17:25:18 2010 +0300
@@ -757,6 +757,7 @@
 	if (!iTimerExpired)
 		{
 		iTimerExpired = ETrue;
+		iTimerStopped =  ETrue; 
 		CancelTimer();
 		if (CountActivities(ECFActivityStop) == 0 && CountActivities(ECFActivityDestroy) == 0)
 			{
--- a/networkcontrol/ipnetworklayer/src/IPProtoCprStates.cpp	Wed Jun 09 11:23:04 2010 +0300
+++ b/networkcontrol/ipnetworklayer/src/IPProtoCprStates.cpp	Mon Jun 21 17:25:18 2010 +0300
@@ -150,7 +150,7 @@
 	// stop has been caused by timer expiry, remove self from originators list, because we
 	// are not waiting for TStopped and in certain situations it would arrive after the node has been
 	// destroyed
-	if (iContext.Node().iTimerExpired)
+	if (iContext.Node().iTimerStopped)
 		{
 		TInt selfidx = iContext.iNodeActivity->FindOriginator(iContext.Node().SelfInterface());
 		ASSERT(selfidx != KErrNotFound);
@@ -378,6 +378,7 @@
 	iContext.Node().SetUsageProfile(KConnProfileMedium);
 	iContext.Node().SetTimerMode(CIPProtoConnectionProvider::ETimerMedium);
 
+    iContext.Node().iTimerStopped = EFalse;
 	CoreNetStates::TSendStarted transition(iContext);
 	transition.DoL();
 	}
--- a/networkcontrol/ipnetworklayer/src/ipprotodeftscpr.cpp	Wed Jun 09 11:23:04 2010 +0300
+++ b/networkcontrol/ipnetworklayer/src/ipprotodeftscpr.cpp	Mon Jun 21 17:25:18 2010 +0300
@@ -164,7 +164,8 @@
 	 ALegacySubConnectionActiveApiExt(this),
 	 TIfStaticFetcherNearestInHierarchy(this),
 	 iNotify(NULL),
-	 iControl(NULL)
+	 iControl(NULL),
+	 iNetworkConfigurationState(EFalse)
     {
     LOG_NODE_CREATE(KIPProtoDeftScprTag, CIPProtoDeftSubConnectionProvider);
     }
@@ -195,10 +196,25 @@
 
 CIPProtoDeftSubConnectionProvider::~CIPProtoDeftSubConnectionProvider()
     {
+    // In case network is not configured i.e. AP might get close in case for WIFi for an example, DHCP registration
+    //will get failed. There is not point listening to such Progresses. So can notification and delete
+    //delete CNetCfgExtNotify pointer).
+   if(iNetworkConfigurationState == EFalse)
+       {
+       if(iNotify)
+           {
+           delete iNotify;
+           iNotify = NULL;
+           }
+       }
 	if (iControl)
 		delete iControl;
+	//incase registration is successful and Network is configured. 
 	if (iNotify)
+	    {
 		delete iNotify;
+		iNotify = NULL;
+		}
 
     LOG_NODE_DESTROY(KIPProtoDeftScprTag, CIPProtoDeftSubConnectionProvider);
     }
--- a/networkcontrol/ipnetworklayer/src/ipprotodeftscprstates.cpp	Wed Jun 09 11:23:04 2010 +0300
+++ b/networkcontrol/ipnetworklayer/src/ipprotodeftscprstates.cpp	Mon Jun 21 17:25:18 2010 +0300
@@ -162,6 +162,7 @@
 
 	if (msg.iStateChange.iStage == KLinkLayerOpen)
 		{
+		iContext.Node().iNetworkConfigurationState = ETrue;
 		return KNetworkConfigured;
 		}
 
@@ -171,7 +172,11 @@
 DEFINE_SMELEMENT(TNetworkConfiguredOrErrorTagOrCancelTagOrNoTagBackward, NetStateMachine::MStateFork, IPProtoDeftSCpr::TContext)
 TInt IPProtoDeftSCpr::TNetworkConfiguredOrErrorTagOrCancelTagOrNoTagBackward::TransitionTag()
 	{
+	iContext.Node().iNetworkConfigurationState = EFalse;
 	TInt tag = IPProtoDeftSCpr::TNetworkConfiguredOrErrorTagOrCancelTagOrNoTag::TransitionTag();
+	
+
+
 	if (tag == KNoTag)
 		return tag | NetStateMachine::EBackward;
 	return tag;
--- a/networkprotocols/tcpipv4v6prt/inc/tcp.h	Wed Jun 09 11:23:04 2010 +0300
+++ b/networkprotocols/tcpipv4v6prt/inc/tcp.h	Mon Jun 21 17:25:18 2010 +0300
@@ -620,7 +620,7 @@
 	void ProcessSegments();
 	void SendSegments(TBool aNagleOverride = EFalse);
 	void RetransmitTimeout();
-	void RetransmitSegments();
+	TBool RetransmitSegments();
 	void ClearSYNSettings();
 
 	/**
--- a/networkprotocols/tcpipv4v6prt/src/tcp_sap.cpp	Wed Jun 09 11:23:04 2010 +0300
+++ b/networkprotocols/tcpipv4v6prt/src/tcp_sap.cpp	Mon Jun 21 17:25:18 2010 +0300
@@ -1684,7 +1684,8 @@
 		if (iFlags.iRetransmitPending)
 			{
 			iFlags.iRetransmitPending = EFalse;
-			RetransmitSegments();
+			if(RetransmitSegments())
+				return;
 			}
 
 		if (iFlags.iTransmitPending)
@@ -2288,7 +2289,12 @@
 		++iBackoff;
 		if (iRTO < Protocol()->MaxRTO())  // Avoid RTO overflow
 			ResetRTO();
-
+		
+		if(DetachIfDead())
+			{
+			Expire();
+			return;
+			}
 		//
 		// Timeout?
 		//
@@ -2403,7 +2409,7 @@
 //  - directly from RetransmitTimeout()
 //  - from CanSend(), in which case this is a delayed retransmission timeout
 //
-void CProviderTCP6::RetransmitSegments()
+TBool CProviderTCP6::RetransmitSegments()
 	{
 	ASSERT(iRetransTimer);
 
@@ -2419,7 +2425,7 @@
 		{
 		LOG(Log::Printf(_L("\ttcp SAP[%u] RetransmitSegments(): Flow pending"), (TInt)this));
 		ReSchedRetransmit();
-		return;
+		return EFalse;
 		}
 
 	//
@@ -2477,14 +2483,14 @@
 			// the receiver suddenly shrinks its window. The current solution covers
 			// both cases.
 			//
-			return;
+			return EFalse;
 			}
 
 		//
 		// This is a retransmit timout. Do we have anything to do?
 		//
 		if (!unacked)
-			return;
+			return EFalse;
 
 		LOG(if (iFlags.iFastRetransMode) Log::Printf(_L("\ttcp SAP[%u] RetransmitSegments(): Leaving FAST RETRANS mode"), (TInt)this));
 		iFlags.iFastRetransMode = EFalse;
@@ -2557,7 +2563,7 @@
 		// If the server doesn't respond because of broken NAT/FW or other, don't keep interface up.
 		if (InState(ETcpFinWait1|ETcpClosing|ETcpLastAck))
 			DetachIfDead();
-		return;
+		return EFalse;
 		}
 
 	//
@@ -2567,14 +2573,14 @@
 		{
 		// Retransmit SYN
 		SendSegment(KTcpCtlSYN, iSND.UNA);
-		return;
+		return EFalse;
 		}
 
 	if (InState(ETcpSynReceived))
 		{
 		// Retransmit SYN,ACK
 		SendSegment(KTcpCtlSYN|KTcpCtlACK, iSND.UNA);
-		return;
+		return EFalse;
 		}
 
 	if (InState(ETcpFinWait1|ETcpClosing|ETcpLastAck))
@@ -2584,18 +2590,22 @@
 	    //TSW error:JHAA-82JBNG -- FIN retransmission 
 		//Depending on the function return value the decision to
 	    //retransmitt FIN is decided
-
-		TBool continue_send = DetachIfDead();
+	
 		// Retransmit FIN
-		if(continue_send == EFalse)
+		if(DetachIfDead()== EFalse)
+			{
 			SendSegment(KTcpCtlFIN|KTcpCtlACK, iSND.UNA);
-		return;
+			return EFalse;
+			}
 		}
 
 	LOG(Log::Printf(_L("\ttcp SAP[%u] RetransmitSegments(): Retransmitter stopping"), (TInt)this));
 	if (!iSockFlags.iAttached)
+		{
 		Expire();
-	return;
+		return ETrue;
+		}
+	return EFalse;
 	}
 
 
--- a/networksecurity/ipsec/ipsecpol/src/ipsecpolmanhandler.cpp	Wed Jun 09 11:23:04 2010 +0300
+++ b/networksecurity/ipsec/ipsecpol/src/ipsecpolmanhandler.cpp	Mon Jun 21 17:25:18 2010 +0300
@@ -1450,7 +1450,9 @@
 
     if (autoloadListItem != NULL)
         {
-        iScopedAutoloadPolicyPairs.Append(autoloadListItem);
+		CleanupStack::PushL(autoloadListItem);
+		iScopedAutoloadPolicyPairs.AppendL(autoloadListItem);
+		CleanupStack::Pop(autoloadListItem);
         }
     }
 
--- a/networksecurity/ipsec/ipsecpol/src/ipsecpolmanutil.cpp	Wed Jun 09 11:23:04 2010 +0300
+++ b/networksecurity/ipsec/ipsecpol/src/ipsecpolmanutil.cpp	Mon Jun 21 17:25:18 2010 +0300
@@ -73,7 +73,7 @@
             if (j==count)
                 {
                 TInt position = 0;
-                gatewayList.Insert( &itemL->iTunnel, position);
+                gatewayList.InsertL( &itemL->iTunnel, position);
 
                 // Build two strings for policy file
                 stringBuf.Zero();
--- a/tcpiputils/dhcp/src/DHCPStateMachine.cpp	Wed Jun 09 11:23:04 2010 +0300
+++ b/tcpiputils/dhcp/src/DHCPStateMachine.cpp	Mon Jun 21 17:25:18 2010 +0300
@@ -441,7 +441,7 @@
 		}
 	else
 		{
-		__CFLOG_VAR((KLogSubSysDHCP, KLogCode, _L("CDHCPStateMachine::RemoveConfiguredAddress,Socket Open Failed: Due to KErrNotReady ")));	
+		__CFLOG_VAR((KLogSubSysDHCP, KLogCode, _L("CDHCPStateMachine::RemoveConfiguredAddress,Socket Open Failed: Due to %d"),error));	
 		}
 	}