Revert incorrect RCL_3 drop: RCL_3 PDK_3.0.2 PDK_3.0.3
authorPat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:20:28 +0100
branchRCL_3
changeset 20 4da1f672912e
parent 19 3f7c7e6eea8a
Revert incorrect RCL_3 drop: Revision: 201032 Kit: 201035
ipappsrv_info/ipappsrv_metadata/ipappsrv_metadata.mrp
multimediacommscontroller/mmcccontroller/src/mccscreen.cpp
multimediacommscontroller/mmccvideosourcesink/group/videosourcesink.mmp
multimediacommscontroller/mmccvideosourcesink/src/mccredrawhandler.cpp
multimediacommsengine/mmceshared/src/mcecomamrwbcodec.cpp
multimediacommsengine/mmcesrv/mmcemediamanager/inc/mcesecuredesstream.h
multimediacommsengine/mmcesrv/mmcemediamanager/inc/mcesecuremediasession.h
multimediacommsengine/mmcesrv/mmcemediamanager/src/mcemediamanager.cpp
multimediacommsengine/mmcesrv/mmcemediamanager/src/mcesdpsession.cpp
multimediacommsengine/mmcesrv/mmcemediamanager/src/mcesecuredesstream.cpp
multimediacommsengine/mmcesrv/mmcemediamanager/src/mcesecuremediasession.cpp
multimediacommsengine/mmcesrv/mmcemediamanager/tsrc/ut_mediamanager/src/UT_CMceSecureDesStream.cpp
multimediacommsengine/mmcesrv/mmceserver/inc/mcenatsipsession.h
multimediacommsengine/mmcesrv/mmceserver/inc/mcenatsipstatemachine.h
multimediacommsengine/mmcesrv/mmceserver/src/mcenatsipsession.cpp
multimediacommsengine/mmcesrv/mmceserver/src/mcenatsipstatemachine.cpp
multimediacommsengine/mmcesrv/mmceserver/src/mcesipsession.cpp
multimediacommsengine/mmcesrv/mmceserver/src/mcestateoffering.cpp
multimediacommsengine/mmcesrv/mmceserver/src/mcestateupdating.cpp
multimediacommsengine/mmcesrv/mmceserver/tsrc/ut_server/src/UT_CMCESIPConnection.cpp
multimediacommsengine/mmcesrv/mmceserver/tsrc/ut_server/src/UT_CMCEStateOffering.cpp
multimediacommsengine/mmcesrv/mmceserver/tsrc/ut_server/stubs/src/sipprofile.cpp
package_definition.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ipappsrv_info/ipappsrv_metadata/ipappsrv_metadata.mrp	Wed Sep 01 12:20:28 2010 +0100
@@ -0,0 +1,6 @@
+component           ipappsrv_metadata
+source   \sf\mw\ipappsrv\ipappsrv_info\ipappsrv_metadata 
+source   \sf\mw\ipappsrv\package_definition.xml
+source   \sf\mw\ipappsrv\distribution.policy.s60
+notes_source      \component_defs\release.src
+ipr T 
--- a/multimediacommscontroller/mmcccontroller/src/mccscreen.cpp	Tue Aug 31 15:35:13 2010 +0300
+++ b/multimediacommscontroller/mmcccontroller/src/mccscreen.cpp	Wed Sep 01 12:20:28 2010 +0100
@@ -203,6 +203,7 @@
     iRwGroup->SetName( KMccWindowGroupName );
     
     iRwGroup->SetOrdinalPosition( iWindowOrdinalPosition, iWindowOrdinalPriority );
+    iRwGroup->AutoForeground( EFalse );
          
     // Create screen device
     iDev = new (ELeave) CWsScreenDevice( iRwSession );
@@ -794,6 +795,7 @@
         iRw->Invalidate( vfRect );
         iRw->BeginRedraw( vfRect );
         iGraphicsContext->CancelClippingRect();
+        iGraphicsContext->SetDrawMode( CGraphicsContext::EDrawModeWriteAlpha );
         iGraphicsContext->SetBrushStyle( CGraphicsContext::ESolidBrush );
         iGraphicsContext->SetBrushColor( TRgb( 255, 255, 255, 0 ) );
         iGraphicsContext->DrawRect( vfRect );
--- a/multimediacommscontroller/mmccvideosourcesink/group/videosourcesink.mmp	Tue Aug 31 15:35:13 2010 +0300
+++ b/multimediacommscontroller/mmccvideosourcesink/group/videosourcesink.mmp	Wed Sep 01 12:20:28 2010 +0100
@@ -27,8 +27,6 @@
 
 UID             0x10009D8D 0x102747CC
 
-STDCPP
-
 SOURCEPATH      ../src
 SOURCE          mccvideosourcesinkfactory.cpp
 SOURCE          mccvideosink.cpp
@@ -94,7 +92,7 @@
 
 #if (defined WINS)
 LIBRARY         camc3gpsink.lib
-LIBRARY         esock.lib libstdcppv5.lib
+LIBRARY         esock.lib
 
 MACRO MCC_VIDEO_SOURCE_FOR_EMU
 
--- a/multimediacommscontroller/mmccvideosourcesink/src/mccredrawhandler.cpp	Tue Aug 31 15:35:13 2010 +0300
+++ b/multimediacommscontroller/mmccvideosourcesink/src/mccredrawhandler.cpp	Wed Sep 01 12:20:28 2010 +0100
@@ -61,7 +61,6 @@
     __V_SOURCESINK_CONTROLL_INT1( "CMccRedrawHandler::BlackDrawingL, enabled:", 
                                   aIsEnabled )
     
-    iDrawBlack = aIsEnabled;
     
     if ( DoRedrawing() )
         {
@@ -116,8 +115,7 @@
     CActive( CActive::EPriorityStandard ),
     iWsSession( aWsSession ),
     iWindow( aWindow ),
-    iGc( aGc ),
-    iDrawBlack( EFalse )
+    iGc( aGc )
     {
     CActiveScheduler::Add( this );
     }
@@ -150,14 +148,7 @@
     iWindow.Invalidate( aRect );
     iWindow.BeginRedraw( aRect );
 
-    if ( iDrawBlack )
-        {
-        iGc.SetBrushStyle( CGraphicsContext::ESolidBrush );
-        iGc.SetBrushColor( KRgbBlack );
-        iGc.Clear( aRect );
-        iDrawBlack = EFalse;
-        }
-    else if ( iWindow.DisplayMode() >= EColor16MA )
+    if ( iWindow.DisplayMode() >= EColor16MA )
         { 
         // Need to set alpha mode, otherwise video cannot be seen
     	iGc.SetDrawMode( CGraphicsContext::EDrawModeWriteAlpha );
@@ -182,7 +173,7 @@
 //
 TBool CMccRedrawHandler::DoRedrawing() const
     {
-    return ( iDrawBlack || iWindow.DisplayMode() >= EColor16MA );
+    return ( iWindow.DisplayMode() >= EColor16MA );
     }
 
 // -----------------------------------------------------------------------------
--- a/multimediacommsengine/mmceshared/src/mcecomamrwbcodec.cpp	Tue Aug 31 15:35:13 2010 +0300
+++ b/multimediacommsengine/mmceshared/src/mcecomamrwbcodec.cpp	Wed Sep 01 12:20:28 2010 +0100
@@ -300,24 +300,8 @@
 //
 CMceComCodec* CMceComAMRWbCodec::DoMccValidateL( CMccCodecInformation& aMccCodec,
                                                CMceSrvStream& /*aStream*/,
-                                               TMceNegotiationRole aRole )
+                                               TMceNegotiationRole /*aRole */)
     {
-    //if answerer mcc codec represents the received offer and codec the answer
-    //if offerer codec represents the sent offer and mcc codec the answer
-    
-    // Bitrates field contains also additional information, mask it away
-	/*
-    TUint mccBitrates = ( aMccCodec.AllowedBitrates() & KMceAllowedAmrWbBitrateAll );
-    TUint mceBitrates = ( iAllowedBitrates & KMceAllowedAmrWbBitrateAll );
-    
-    TBool notValid = aRole == EMceRoleAnswerer ?
-                  ( mceBitrates && mccBitrates == 0 ||
-	                mceBitrates > mccBitrates ) :
-                  ( mceBitrates && mccBitrates == 0 ||
-	                mceBitrates < mccBitrates );
-	                
-	*/
-//	User::LeaveIfError( notValid ? KErrNotSupported : KErrNone );
 	if ( aMccCodec.CodecMode() != (TCodecMode)iCodecMode )
 		{
 		// codec-mode was different, fail.
--- a/multimediacommsengine/mmcesrv/mmcemediamanager/inc/mcesecuredesstream.h	Tue Aug 31 15:35:13 2010 +0300
+++ b/multimediacommsengine/mmcesrv/mmcemediamanager/inc/mcesecuredesstream.h	Wed Sep 01 12:20:28 2010 +0100
@@ -213,13 +213,12 @@
        	void ForceUpdateStreamL();
     
    private:     
-    	/**
-        * Set Crypto Context to MCC after Encode/Decode SDP are done
-        * @return void
-        */
- 		void SetCryptoContextL( );
- 		
-        
+       	/**
+       	* * Set Crypto Context to MCC after Encode/Decode SDP are done
+       	* @return void
+       	*/
+       	void SetCryptoContextL( TBool aAnswer = ETrue );
+    
 		/**
         * Base64 encoding
         * @since    Series 60 3.0 
@@ -401,6 +400,7 @@
 		TMceSecureCryptoInfo iCryptoOut;
     	TMceSecureCryptoInfo iCryptoIn;
     	TBool iGnoreSdpMsg;
+    	TBool iWaitingBinding;
     	
     private://data
     
@@ -421,8 +421,9 @@
     	CSdpMediaField* iMediaField;
 
     	TBool iIsSAVP;
-
-    	TBool iWaitingBinding;
+    	
+    	TBool iRemoteChangeKey;
+    	
 
     	TUint32 iCryptoContextOutId;
 
--- a/multimediacommsengine/mmcesrv/mmcemediamanager/inc/mcesecuremediasession.h	Tue Aug 31 15:35:13 2010 +0300
+++ b/multimediacommsengine/mmcesrv/mmcemediamanager/inc/mcesecuremediasession.h	Wed Sep 01 12:20:28 2010 +0100
@@ -207,6 +207,7 @@
         TBool iKeyNeedUpdated;
         TBool iCryptoContextUpdate;
         TBool iLSReadyToBind;
+        TBool iNatBind;
 
     private:
         
--- a/multimediacommsengine/mmcesrv/mmcemediamanager/src/mcemediamanager.cpp	Tue Aug 31 15:35:13 2010 +0300
+++ b/multimediacommsengine/mmcesrv/mmcemediamanager/src/mcemediamanager.cpp	Wed Sep 01 12:20:28 2010 +0100
@@ -307,6 +307,11 @@
     aSession.NegotiationState().UpdateL();
     status = !aSession.NegotiationState().CallbackAllowed() ? 
              KMceReady : KMceAsync;
+    if ( aSession.SecureSession() && negotationStateId ==
+    	 KMceOfferingMedia && aSession.SecureSession()->iLSReadyToBind )
+    	{
+        aSession.SecureSession()->BindStreamCrypto();
+    	}
     MCEMM_DEBUG("CMceMediaManager::UpdateL(), Exit ");
     return status;
     }
--- a/multimediacommsengine/mmcesrv/mmcemediamanager/src/mcesdpsession.cpp	Tue Aug 31 15:35:13 2010 +0300
+++ b/multimediacommsengine/mmcesrv/mmcemediamanager/src/mcesdpsession.cpp	Wed Sep 01 12:20:28 2010 +0100
@@ -183,6 +183,13 @@
         }
     else
         {
+		if( aSession.SecureSession() )
+			{
+			if( aSession.SecureSession()->iKeyNeedUpdated )
+				{
+			    aSession.SecureSession()->iKeyNeedUpdated = EFalse;
+				}
+			}
         sdpDocument = iSdpDocument;
         CleanSessionParams( *iSdpDocument );
         }
@@ -647,6 +654,11 @@
     
     TOfferType type = !Backup() ? EFirst : EUpdate;
     
+    if( type == EUpdate && aSession.SecureSession() )
+    	{
+		aSession.SecureSession()->iLSReadyToBind = ETrue;
+    	}
+    
     CleanSessionParams( *iSdpDocument );
 
     EncodeSessionParamsL( aSession, *iSdpDocument, type );
--- a/multimediacommsengine/mmcesrv/mmcemediamanager/src/mcesecuredesstream.cpp	Tue Aug 31 15:35:13 2010 +0300
+++ b/multimediacommsengine/mmcesrv/mmcemediamanager/src/mcesecuredesstream.cpp	Wed Sep 01 12:20:28 2010 +0100
@@ -83,12 +83,12 @@
 											CMccSecureInterface& aSecureInterface,
         									CMceComMediaStream& aMediaStream
         									):
-	
+	iWaitingBinding(EFalse),
 	iSecureSession(aSecureSession),
 	iSecInf(aSecureInterface),
 	iMediaStream(aMediaStream),
 	iIsSAVP(ETrue),
-	iWaitingBinding(EFalse),
+	iRemoteChangeKey(EFalse),
 	iCryptoContextOutId(0),
 	iCryptoContextInId(0),
 	iOldLocalMediaPort(0)
@@ -337,6 +337,11 @@
     	MCEMM_DEBUG(" Set Multiple Client Cryptoto")
     	User::LeaveIfError ( CountCryptoInOffer( aMediaField ) );
     	Session().iIsSecureSession =  !iGnoreSdpMsg ? ETrue : EFalse;
+    	if( iSecureSession.iNatBind )
+    		{
+			SetCryptoContextL( ETrue );
+			iSecureSession.iNatBind = EFalse;
+    		}
     	}
     MCEMM_DEBUG("CMceSecureDesStream::DecodeSecureSdpL(), Exit")      
     MSG_IGNORE_RETURN()
@@ -377,7 +382,8 @@
 				}
 			if ( iSecureSession.iLSReadyToBind )
 				{
-				SetCryptoContextL();
+				SetCryptoContextL( EFalse );
+				iRemoteChangeKey = EFalse;
 				}
 			MSG_IGNORE_RETURN()
 			if ( !iCryptoIn.iCryptoSuite.Length() )
@@ -438,9 +444,10 @@
 // Sets crypto context to MCC
 // -----------------------------------------------------------------------------
 //
-void CMceSecureDesStream::SetCryptoContextL( )
+void CMceSecureDesStream::SetCryptoContextL( TBool aAnswer )
     {
-    MCEMM_DEBUG("SetCryptoContext(), Entry")   
+    MCEMM_DEBUG("SetCryptoContext(), Entry") 
+    TBool bindContext = ETrue;
     TBool storedIgnoreSdpMsg = EFalse;
     //Check state first if the crypto has been set
     if ( !iCryptoIn.iIfCryptoContextIdSet && 
@@ -455,6 +462,12 @@
     	CreateCryptoContextL( iCryptoOut ); 
     	MCEMM_DEBUG_DVALUE( "iCryptoContextOutId", iCryptoIn.iCryptoContextId )
 		MCEMM_DEBUG_DVALUE( "iCryptoContextInId", iCryptoOut.iCryptoContextId )
+    	
+    	if( !aAnswer )
+    		{
+			bindContext = EFalse;
+    	    MCEMM_DEBUG("delay to bind!");
+    		}
 
     	iCryptoOuts->Reset();
     	
@@ -473,7 +486,7 @@
 			}
 		MCEMM_DEBUG_DVALUE( "Updated iCryptoContextOutId", iCryptoIn.iCryptoContextId )
 		MCEMM_DEBUG_DVALUE( "Updated iCryptoContextInId", iCryptoOut.iCryptoContextId )
-    	if ( iSecureSession.iKeyNeedUpdated )
+    	if ( iSecureSession.iKeyNeedUpdated  || iRemoteChangeKey )
     		{
     		UpdateCryptoContextL( iCryptoIn ); 
     		storedIgnoreSdpMsg = iGnoreSdpMsg;
@@ -489,7 +502,7 @@
     iGnoreSdpMsg = (iCryptoIn.iIfCryptoContextIdSet && 
     				iCryptoOut.iIfCryptoContextIdSet ) &&
     				!iGnoreSdpMsg ? EFalse : ETrue;		
-    if ( iWaitingBinding )
+    if ( iWaitingBinding && bindContext )
     	{
     	iSecureSession.BindStreamCrypto();
     	}
@@ -844,6 +857,13 @@
         	}
         else
         	{
+			if( iRemoteChangeKey )
+				{
+				MCEMM_DEBUG("Update CryptoIn" )
+				TBool tmpSet = iCryptoIn.iIfCryptoContextIdSet;
+				iCryptoIn.Copy( iCryptoIns->At( 0 ) );
+				iCryptoIn.iIfCryptoContextIdSet = tmpSet;
+				}
         	if(iOldLocalMediaPort != iMediaStream.iLocalMediaPort)
         		{
         	    GenerateRandomKeys( iCryptoOut );
@@ -857,7 +877,8 @@
         MSG_IGNORE_RETURN()
       	if ( iSecureSession.iLSReadyToBind )
       		{
-      		SetCryptoContextL();
+      		SetCryptoContextL( ETrue );
+      		iRemoteChangeKey = EFalse;
       		}
         MSG_IGNORE_RETURN()
         }
@@ -1207,13 +1228,14 @@
 	        	}
     
 	    TPtrC8 keyInfo = aSecDec.Mid(keyInfoPos, keyInfoLen);
-	    if ( iSecureSession.iKeyNeedUpdated )
-	    	{
+	    	
 	    	
-		    TBool valid = ValidateSecurityDescriptions( keyInfo );
-	   		if ( valid )
+		TBool valid = ValidateSecurityDescriptions( keyInfo );
+		if ( valid )
+	   		{
+		    iRemoteChangeKey = iCryptoIn.iEncodedKey.Compare( keyInfo ) != 0;
+	   		if( iSecureSession.iKeyNeedUpdated || iRemoteChangeKey ) 
 	   			{
-	   			
 		    	// check keyInfo 
 			    if (iCryptoOut.iEncodedKey.Compare( keyInfo ) == 0)
 			    	{
@@ -1227,11 +1249,11 @@
 				iCryptoIn.iEncodedKey = keyInfo;
 				StoreKeys(iCryptoIn.iEncodedKey);
 	   			}
-	   		else
-	   			{
-	   			User::Leave( KErrArgument );
-	   			}
-	    	}
+	   		}
+		else
+	   		{
+		    User::Leave( KErrArgument );
+	   		}
 	   	}
  	else
  		{
@@ -1286,7 +1308,12 @@
         
         if ( valid )
         	{
-        	
+        	if( !iSecureSession.iKeyNeedUpdated && 
+        			iCryptoIn.iEncodedKey.Compare( keyInfo ) != 0 )
+        		{
+        	    MCEMM_DEBUG("Remote change the key");
+        	    iRemoteChangeKey = ETrue;
+        		}
             //check keyinfo mki 
 		     DecodeMKIValueL( aSecDec, EFalse, crypto );   
 		     MSG_IGNORE_RETURN()
--- a/multimediacommsengine/mmcesrv/mmcemediamanager/src/mcesecuremediasession.cpp	Tue Aug 31 15:35:13 2010 +0300
+++ b/multimediacommsengine/mmcesrv/mmcemediamanager/src/mcesecuremediasession.cpp	Wed Sep 01 12:20:28 2010 +0100
@@ -49,8 +49,8 @@
             iSession( aSession ),
             iSecureInterface(aSecureInterface),
             iKeyNeedUpdated( ETrue ),
-            iCryptoContextUpdate (EFalse),
-            iLSReadyToBind ( ETrue ),
+            iCryptoContextUpdate (EFalse ),
+            iLSReadyToBind ( EFalse ),
             iStringTable( NULL )
     {
     
@@ -451,8 +451,10 @@
 					   stream->Data().iLinkedStream->Id() == secureStream->MediaStream().Id() ) ) 
 					{
 					//bind
-					secureStream->BindCrypto(*stream);
-					
+				    if( secureStream->iWaitingBinding )
+				    	{
+						secureStream->BindCrypto(*stream);
+				    	}
 					}
 				}
 			}
--- a/multimediacommsengine/mmcesrv/mmcemediamanager/tsrc/ut_mediamanager/src/UT_CMceSecureDesStream.cpp	Tue Aug 31 15:35:13 2010 +0300
+++ b/multimediacommsengine/mmcesrv/mmcemediamanager/tsrc/ut_mediamanager/src/UT_CMceSecureDesStream.cpp	Wed Sep 01 12:20:28 2010 +0100
@@ -658,7 +658,7 @@
     CleanupStack::PushL( mediaAnswer2 );
     //iCryptoOut crypto is not set
     iSecureStream->DecodeSecureSdpAnswerL(*mediaAnswer2);
-    EUNIT_ASSERT( !iSecureStream->Session().iIsSecureSession );
+    EUNIT_ASSERT( iSecureStream->Session().iIsSecureSession );
     EUNIT_ASSERT( iSecureStream->iCryptoIn.iMKLifeTime == 32 );
     EUNIT_ASSERT( iSecureStream->iCryptoOut.iMKLifeTime == KDefalutMaterKeysLifeTime );
     CleanupStack::PopAndDestroy(mediaAnswer2);
@@ -670,7 +670,7 @@
     CleanupStack::PushL( mediaOffer );	
     iSecureSession->iCryptoContextUpdate = ETrue;
     iSecureStream->EncodeSecureSdpL(*mediaOffer, EFalse );
-    EUNIT_ASSERT( !iSecureStream->Session().iIsSecureSession );
+    EUNIT_ASSERT( iSecureStream->Session().iIsSecureSession );
 	
     CSdpMediaField* mediaAnswer3 = CSdpMediaField::DecodeL( KMceTestMeidaCryptoMultiple );
     CleanupStack::PushL( mediaAnswer3 );
--- a/multimediacommsengine/mmcesrv/mmceserver/inc/mcenatsipsession.h	Tue Aug 31 15:35:13 2010 +0300
+++ b/multimediacommsengine/mmcesrv/mmceserver/inc/mcenatsipsession.h	Wed Sep 01 12:20:28 2010 +0100
@@ -252,6 +252,8 @@
 	void SetReservationStatus(TMceReturnStatus aStatus);
 
 	void ResumeNatUpdated();
+	
+	void StateRollBack();
 
 private: // Constructors
 
--- a/multimediacommsengine/mmcesrv/mmceserver/inc/mcenatsipstatemachine.h	Tue Aug 31 15:35:13 2010 +0300
+++ b/multimediacommsengine/mmcesrv/mmceserver/inc/mcenatsipstatemachine.h	Wed Sep 01 12:20:28 2010 +0100
@@ -87,6 +87,11 @@
 	*/
     void ErrorOccurred();
     
+	/**
+	* Sets current Nat state.
+	*/
+    void SetCurrentNatState(TMceNatStateIndex aStatus);
+    
 private:
 
 	CMceNatSipStateMachine();
--- a/multimediacommsengine/mmcesrv/mmceserver/src/mcenatsipsession.cpp	Tue Aug 31 15:35:13 2010 +0300
+++ b/multimediacommsengine/mmcesrv/mmceserver/src/mcenatsipsession.cpp	Wed Sep 01 12:20:28 2010 +0100
@@ -873,4 +873,9 @@
 	MCESRV_DEBUG( "*** CMceNatSipSession::ResumeNatUpdated, Exit" )
 	}
 
+void CMceNatSipSession::StateRollBack()
+	{
+	iNatStateMachine->SetCurrentNatState( KMceNatStateConnected );
+	}
+
 // End of File
--- a/multimediacommsengine/mmcesrv/mmceserver/src/mcenatsipstatemachine.cpp	Tue Aug 31 15:35:13 2010 +0300
+++ b/multimediacommsengine/mmcesrv/mmceserver/src/mcenatsipstatemachine.cpp	Wed Sep 01 12:20:28 2010 +0100
@@ -188,3 +188,12 @@
     {
     iCurrentState = KMceNatStateIdle;
     }
+
+// -----------------------------------------------------------------------------
+// CMceNatSipStateMachine::SetCurrentNatState
+// -----------------------------------------------------------------------------
+//
+void CMceNatSipStateMachine::SetCurrentNatState(TMceNatStateIndex aStatus)
+    {
+    iCurrentState = aStatus;
+    }
--- a/multimediacommsengine/mmcesrv/mmceserver/src/mcesipsession.cpp	Tue Aug 31 15:35:13 2010 +0300
+++ b/multimediacommsengine/mmcesrv/mmceserver/src/mcesipsession.cpp	Wed Sep 01 12:20:28 2010 +0100
@@ -2046,9 +2046,11 @@
     {
     MCESRV_DEBUG("CMceSipSession::Updated, Entry");
     
-    __ASSERT_ALWAYS( &aSession == iBody || &aSession == iNewBodyCandidate, 
+    
+    __ASSERT_ALWAYS( &aSession == &( ActiveBody() ) || &aSession == iNewBodyCandidate, 
         User::Panic( KMceServerPanic, KErrArgument ) );
-    
+		
+		    
     TMceStateTransitionEvent event( *this, EMceMediaUpdated );
     TRAPD( error, iStateMachine->ProcessL( event ) );
     if ( error != KErrNone )
--- a/multimediacommsengine/mmcesrv/mmceserver/src/mcestateoffering.cpp	Tue Aug 31 15:35:13 2010 +0300
+++ b/multimediacommsengine/mmcesrv/mmceserver/src/mcestateoffering.cpp	Wed Sep 01 12:20:28 2010 +0100
@@ -31,6 +31,7 @@
 #include "mceclientserver.h"
 #include "mcesip.h"
 #include "mcesipsession.h"
+#include "mcenatsipsession.h"
 #include "mcenatmacros.h"
 #include "mcesdpsession.h"
 #include "mcesrvlogs.h"
@@ -656,6 +657,11 @@
          else
             {
             session.Actions().UpdateFailed(); 
+            if(session.IsNatSession()) 
+            	{
+				CMceNatSipSession* natsession = static_cast <CMceNatSipSession*>( &session );
+				natsession->StateRollBack();
+            	}
             session.Actions().StateChanged( KMceStateEstablished );
             session.Actions().ClientStateChangedL( CMceSession::EEstablished, 
                                                    *session.Body(),
--- a/multimediacommsengine/mmcesrv/mmceserver/src/mcestateupdating.cpp	Tue Aug 31 15:35:13 2010 +0300
+++ b/multimediacommsengine/mmcesrv/mmceserver/src/mcestateupdating.cpp	Wed Sep 01 12:20:28 2010 +0100
@@ -135,6 +135,17 @@
 	                        session.Actions().StateChanged( 
 	                            KMceStateAcknowledgementRequired );
 	                        }
+	    	            else
+	    	            	{
+							if ( session.ActiveBody().SecureSession() )
+								{
+							    if( session.IsNatSession() )
+							    	{
+							        session.ActiveBody().SecureSession()->iNatBind = ETrue;
+							    	}
+							    session.ActiveBody().SecureSession()->iLSReadyToBind = ETrue;
+								}
+	    	            	}
 	    	            }
 	                else
 	                    {
--- a/multimediacommsengine/mmcesrv/mmceserver/tsrc/ut_server/src/UT_CMCESIPConnection.cpp	Tue Aug 31 15:35:13 2010 +0300
+++ b/multimediacommsengine/mmcesrv/mmceserver/tsrc/ut_server/src/UT_CMCESIPConnection.cpp	Wed Sep 01 12:20:28 2010 +0100
@@ -617,7 +617,31 @@
   	iConnection->ConnectionStateChanged( CSIPConnection::EUnavailable );
     EUNIT_ASSERT( !iSipSession->Body()->iIsConnectionActive );
   	
-  	
+    //cleanup orphan session test
+    CMceSipManager& manager = iServerCore->Manager();
+    iIds.iProfileID = 1;
+    iIds.iManagerType = KMceCSSIPSession;
+    iIds.iDialogType = KMceDlgTypeInvite;
+    
+    CDesC8ArrayFlat* params = new (ELeave) CDesC8ArrayFlat( KMceArrayGranularity );
+    CleanupStack::PushL( params );
+    params->AppendL( _L8("User <user2@host>") );
+    params->AppendL( _L8("User <user@host>") );
+
+    iConnection->Connection().SetState( CSIPConnection::EActive );
+    CMceCsSubSession* subsession = 
+    		manager.CreateSubSessionL( *iSession, iIds, *params );
+    CleanupStack::PushL( subsession );
+    
+    manager.AddOrphanSubSessionL(subsession);
+    CleanupStack::Pop( subsession );
+    EUNIT_ASSERT ( manager.OrphanSubSessionCount() == 1 );
+
+    iConnection->Connection().SetState( CSIPConnection::EInactive );
+  	iConnection->ConnectionStateChanged( CSIPConnection::EInactive );
+    EUNIT_ASSERT ( manager.OrphanSubSessionCount() == 0 );
+    
+    CleanupStack::PopAndDestroy();
     }
     
     
--- a/multimediacommsengine/mmcesrv/mmceserver/tsrc/ut_server/src/UT_CMCEStateOffering.cpp	Tue Aug 31 15:35:13 2010 +0300
+++ b/multimediacommsengine/mmcesrv/mmceserver/tsrc/ut_server/src/UT_CMCEStateOffering.cpp	Wed Sep 01 12:20:28 2010 +0100
@@ -397,7 +397,7 @@
     EUNIT_ASSERT ( iSipSession->WaitingMediaCallback() );
     MCE_RESET_STUBS();
     
-    // 200 OK while waiting for media callback
+    // 200 OK while waiting for media callback non early media
     iSipSession->iSubState = CMceSipSession::EOffering;
     iStorage->iMediaManagerUpdateStatus = KMceAsync;
     
@@ -416,6 +416,31 @@
     EUNIT_ASSERT ( iSipSession->WaitingMediaCallback() );
     MCE_RESET_STUBS();
     
+    // 200 OK while waiting for media callback with early media
+    iSipSession->iSubState = CMceSipSession::EOffering;
+    iStorage->iMediaManagerUpdateStatus = KMceAsync;
+    iState->iLastResponse = KMceSipRinging;
+    MCETestHelper::SetResponseL( 
+            *iSipSession->iResponse, 
+            KMceSipOK, 
+            SipStrConsts::EPhraseOk, 
+            ETrue, ETrue, 1 );
+
+    TMceStateTransitionEvent event2_2( *iSipSession, EMceResponse );
+    iState->EntryL( event2_2 );
+    MCE_ENTRYL_POSTCONDITION
+        
+    MCE_ASSERT_STUBS( CMCETls::ENone /*mmaction*/, 
+                      CMCETls::ENone /*mmsdpaction*/, 
+                      SipStrConsts::EEmpty /*sentMethod*/, 
+                      KErrNotFound /*sentResponse*/);
+        
+    EUNIT_ASSERT ( iStorage->iAckSent == EFalse );
+    EUNIT_ASSERT ( event2_1.Code() == EMceResponse );
+    EUNIT_ASSERT ( iSipSession->PendingTransactions().Count() == 1 );
+    EUNIT_ASSERT ( iSipSession->WaitingMediaCallback() );
+    MCE_RESET_STUBS();
+    
     // 200 OK with wrong SDP
     iSipSession->iSubState = CMceSipSession::EOffering;
     iSipSession->SetWaitingMediaCallback( EFalse );
@@ -612,6 +637,26 @@
     EUNIT_ASSERT ( iSipSession->PendingTransactions().Count() == 4 );
     MCE_RESET_STUBS();
     
+    // KMceSipRequestPending updating
+    iSipSession->iSubState = CMceSipSession::EUpdating;
+    iStorage->iMediaManagerUpdateStatus = KMceAsync;
+    
+    MCETestHelper::ChangeResponseTypeL( 
+        *iSipSession->iResponse->ResponseElements(),
+        KMceSipRequestPending,
+        SipStrConsts:: EPhraseBusyHere);
+    
+    TMceStateTransitionEvent event3_4( *iSipSession, EMceErrorResponse );
+    iState->EntryL( event3_4 );
+    MCE_ENTRYL_POSTCONDITION_2
+    MCE_ASSERT_STUBS( CMCETls::ECloseSession /*mmaction*/, 
+                      CMCETls::ENone /*mmsdpaction*/, 
+                      SipStrConsts::EBye /*sentMethod*/, 
+                      KErrNotFound /*sentResponse*/);
+    
+    EUNIT_ASSERT ( event3_4.Code() == EMceErrorResponse );
+    MCE_RESET_STUBS();
+    
     // KMceSipSessionIntervalTooSmall && dialog state ETerminated
     iSipSession->Dialog()->Dialog().iState = CSIPDialog::ETerminated;
     iSipSession->iSubState = CMceSipSession::EOffering;
@@ -985,8 +1030,20 @@
 	
 	TMceStateTransitionEvent event15( *iSipSession, EMceResponse );
     iState->ExitL( event15 );
-    EUNIT_ASSERT ( iSipSession->CurrentState().Id() == KMceStateOffering );   
-
+    EUNIT_ASSERT ( iSipSession->CurrentState().Id() == KMceStateOffering );  
+    
+    // EMceResponse with early media & waiting media call back
+    CSIPClientTransaction* clitransaction1_1 = 
+    MCETestHelper::ClientTransactionLC( SipStrConsts::EInfo, KMceSipOK, 
+        								SipStrConsts::EPhraseOk, ETrue );
+    iSipSession->SetPendingTransactionL( clitransaction1_1 );
+    CleanupStack::Pop( clitransaction1_1 );
+    iSipSession->iResponse = clitransaction1_1;
+    	
+    TMceStateTransitionEvent event15_1( *iSipSession, EMceResponse );
+    iState->iReadyToSendACK = EFalse;
+    iState->ExitL( event15_1 );
+    EUNIT_ASSERT ( iSipSession->CurrentState().Id() == KMceStateOffering );  
 
 	//EMceRedirectionResponse
 	CSIPClientTransaction* clitransaction2 = 
--- a/multimediacommsengine/mmcesrv/mmceserver/tsrc/ut_server/stubs/src/sipprofile.cpp	Tue Aug 31 15:35:13 2010 +0300
+++ b/multimediacommsengine/mmcesrv/mmceserver/tsrc/ut_server/stubs/src/sipprofile.cpp	Wed Sep 01 12:20:28 2010 +0100
@@ -270,7 +270,7 @@
 // -----------------------------------------------------------------------------
 //	
 CSIPProfile::CSIPProfile(CSIPProfileRegistryBase* aRegistry):
-	iSIPProfileRegistry(aRegistry), iEnabled(EFalse)
+	iSIPProfileRegistry(aRegistry), iEnabled(EFalse), iContextId(1)
 	{
 	}
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/package_definition.xml	Wed Sep 01 12:20:28 2010 +0100
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<SystemDefinition schema="3.0.0">
+  <package id="ipappsrv" name="IP App Services" levels="framework generic server conn plugin">
+    <collection id="multimediacommscontroller" name="Multimedia Comms Controller" level="conn">
+      <component id="mmccinterface" filter="s60" name="MMCC Interface">
+        <!-- <unit bldFile="multimediacommscontroller/mmccinterface/group"/> -->
+        <!-- <unit bldFile="multimediacommscontroller/mmccinterface/tsrc/ut_interface/group"/> -->
+      </component>
+      <component id="mmccjitterbuffer" filter="s60" name="Jitter Buffer">
+        <!-- <unit bldFile="multimediacommscontroller/mmccjitterbuffer/group"/> -->
+        <!-- <unit bldFile="multimediacommscontroller/mmccjitterbuffer/tsrc/ut_jitterbuffer/group"/> -->
+      </component>
+      <component id="mmccqoscontroller" filter="s60" name="QoS Controller">
+        <!-- <unit bldFile="multimediacommscontroller/mmccqoscontroller/group"/> -->
+        <!-- <unit bldFile="multimediacommscontroller/mmccqoscontroller/tsrc/ut_qoscontroller/group"/> -->
+      </component>
+      <component id="mmccmultiplexer" filter="s60" name="MMCC Multiplexer">
+        <!-- <unit bldFile="multimediacommscontroller/mmccmultiplexer/group"/> -->
+        <!-- <unit bldFile="multimediacommscontroller/mmccmultiplexer/tsrc/ut_multiplexer/group"/> -->
+      </component>
+      <component id="mmccsubcontroller" filter="s60" name="MMCC Subcontroller">
+        <!-- <unit bldFile="multimediacommscontroller/mmccsubcontroller/group"/> -->
+        <!-- <unit bldFile="multimediacommscontroller/mmccsubcontroller/tsrc/ut_rtpmediaclock/group"/> -->
+        <!-- <unit bldFile="multimediacommscontroller/mmccsubcontroller/tsrc/ut_subcontroller/group"/> -->
+      </component>
+      <component id="mmcccontroller" filter="s60" name="MMCC Controller" class="plugin">
+        <!-- <unit bldFile="multimediacommscontroller/mmcccontroller/group"/> -->
+        <!-- <unit bldFile="multimediacommscontroller/mmcccontroller/tsrc/ut_controller/group"/> -->
+      </component>
+      <component id="mmccredpayloadformat" filter="s60" name="Redundancy Payload Format" class="plugin">
+        <!-- <unit bldFile="multimediacommscontroller/mmccredpayloadformat/group"/> -->
+        <!-- <unit bldFile="multimediacommscontroller/mmccredpayloadformat/tsrc/ut_redpayloadformat/group"/> -->
+      </component>
+      <component id="mmccamrpayloadformat" filter="s60" name="AMR Payload Format" class="plugin">
+        <!-- <unit bldFile="multimediacommscontroller/mmccamrpayloadformat/group"/> -->
+        <!-- <unit bldFile="multimediacommscontroller/mmccamrpayloadformat/tsrc/ut_amrpayloadformat/group"/> -->
+      </component>
+      <component id="mmccg711payloadformat" filter="s60" name="G711 Payload Format" class="plugin">
+        <!-- <unit bldFile="multimediacommscontroller/mmccg711payloadformat/group"/> -->
+        <!-- <unit bldFile="multimediacommscontroller/mmccg711payloadformat/tsrc/ut_g711payloadformat/group"/> -->
+      </component>
+      <component id="mmccg729payloadformat" filter="s60" name="G729 Payload Format" class="plugin">
+        <!-- <unit bldFile="multimediacommscontroller/mmccg729payloadformat/group"/> -->
+        <!-- <unit bldFile="multimediacommscontroller/mmccg729payloadformat/tsrc/ut_g729payloadformat/group"/> -->
+      </component>
+      <component id="mmccilbcpayloadformat" filter="s60" name="ILBC Payload Format" class="plugin">
+        <!-- <unit bldFile="multimediacommscontroller/mmccilbcpayloadformat/group"/> -->
+        <!-- <unit bldFile="multimediacommscontroller/mmccilbcpayloadformat/tsrc/ut_ilbcpayloadformat/group"/> -->
+      </component>
+      <component id="mmccdtmfpayloadformat" filter="s60" name="DTMF Payload Format" class="plugin">
+        <!-- <unit bldFile="multimediacommscontroller/mmccdtmfpayloadformat/group"/> -->
+        <!-- <unit bldFile="multimediacommscontroller/mmccdtmfpayloadformat/tsrc/ut_dtmfpayloadformat/group"/> -->
+      </component>
+      <component id="mmccrtpsourcesink" filter="s60" name="RTP Source Sink" class="plugin">
+        <!-- <unit bldFile="multimediacommscontroller/mmccrtpsourcesink/group"/> -->
+        <!-- <unit bldFile="multimediacommscontroller/mmccrtpsourcesink/tsrc/ut_rtpsourcesink/group"/> -->
+      </component>
+      <component id="mmccvideosourcesink" filter="s60" name="Video Source Sink" class="plugin">
+        <!-- <unit bldFile="multimediacommscontroller/mmccvideosourcesink/group"/> -->
+        <!-- <unit bldFile="multimediacommscontroller/mmccvideosourcesink/tsrc/ut_videosourcesink/group"/> -->
+      </component>
+      <component id="mmcch263payloadformat" filter="s60" name="H263 Payload Format" class="plugin">
+        <!-- <unit bldFile="multimediacommscontroller/mmcch263payloadformat/group"/> -->
+        <!-- <unit bldFile="multimediacommscontroller/mmcch263payloadformat/tsrc/ut_h263payloadformat/group"/> -->
+      </component>
+      <component id="mmccanypayloadformat" filter="s60" name="Any Payload Format" class="plugin">
+        <!-- <unit bldFile="multimediacommscontroller/mmccanypayloadformat/group"/> -->
+        <!-- <unit bldFile="multimediacommscontroller/mmccanypayloadformat/tsrc/ut_anypayloadformat/group"/> -->
+      </component>
+      <component id="mmccfilesourcesink" filter="s60" name="MMCC File Source Sink" class="plugin">
+        <!-- <unit bldFile="multimediacommscontroller/mmccfilesourcesink/group"/> -->
+        <!-- <unit bldFile="multimediacommscontroller/mmccfilesourcesink/tsrc/ut_filesourcesink/group"/> -->
+      </component>
+      <component id="mmccanysourcesink" filter="s60" name="Any Source Sink" class="plugin">
+        <!-- <unit bldFile="multimediacommscontroller/mmccanysourcesink/group"/> -->
+        <!-- <unit bldFile="multimediacommscontroller/mmccanysourcesink/tsrc/ut_anysourcesink/group"/> -->
+      </component>
+      <component id="mmccavcpayloadformat" filter="s60" name="AVC Payload Format" class="plugin">
+        <!-- <unit bldFile="multimediacommscontroller/mmccavcpayloadformat/group"/> -->
+        <!-- <unit bldFile="multimediacommscontroller/mmccavcpayloadformat/tsrc/ut_avcpayloadformat/group"/> -->
+      </component>
+      <component id="multimediacommscontroller_build" filter="s60" name="Multimedia Comms Controller Build">
+              <!-- contents of this component need to be distributed out to the other commented-out bld.infs or the other components need to be collapsed into one -->
+        <unit bldFile="multimediacommscontroller/group"/>
+      </component>
+      <component id="multimediacommscontroller_test" filter="s60" name="Multimedia Comms Controller Test" purpose="development">
+        <!-- <unit bldFile="multimediacommscontroller/tsrc/testconsoles/mcpsubthreads/dptests/group"/> -->
+        <!-- <unit bldFile="multimediacommscontroller/tsrc/testconsoles/mcpsubthreads/clienttests/group"/> -->
+        <!-- <unit bldFile="multimediacommscontroller/tsrc/componenttests/group"/> -->
+        <!-- <unit bldFile="multimediacommscontroller/tsrc/subcontrollerstub/group"/> -->
+        <!-- <unit bldFile="multimediacommscontroller/tsrc/testconsoles/jitterbuffertestconsole/group"/> -->
+        <!-- <unit bldFile="multimediacommscontroller/tsrc/testconsoles/rtpsourcesink/group"/> -->
+        <!-- <unit bldFile="multimediacommscontroller/tsrc/testconsoles/mcpconsole/group"/> -->
+      </component>
+    </collection>
+    <collection id="multimediacommsengine" name="Multimedia Comms Engine" level="generic">
+      <component id="mmcesrv" filter="s60" name="Multimedia Comms Engine Server">
+        <!-- <unit bldFile="multimediacommsengine/mmcesrv/group"/> -->
+        <!-- <unit bldFile="multimediacommsengine/mmcesrv/mmceevent/tsrc/ut_event/group"/> -->
+        <!-- <unit bldFile="multimediacommsengine/mmcesrv/mmceevent/tsrc/ut_event/sip_stub/group"/> -->
+        <!-- <unit bldFile="multimediacommsengine/mmcesrv/mmcemediamanager/tsrc/ut_mediamanager/group"/> -->
+        <!-- <unit bldFile="multimediacommsengine/mmcesrv/mmceserver/tsrc/ut_server/group"/> -->
+      </component>
+      <component id="mmcecli" filter="s60" name="Multimedia Comms Engine Client">
+        <!-- <unit bldFile="multimediacommsengine/mmcecli/group"/> -->
+      </component>
+      <component id="mmcefloorctrlengine" filter="s60" name="MCE Floor Control Engine">
+        <!-- <unit bldFile="multimediacommsengine/mmcefloorctrlengine/group"/> -->
+        <!-- <unit bldFile="multimediacommsengine/mmcefloorctrlengine/tsrc/ut_floorctrlengine/fctestpplugin/group"/> -->
+        <!-- <unit bldFile="multimediacommsengine/mmcefloorctrlengine/tsrc/ut_floorctrlengine/fctestpplugin2/group"/> -->
+        <!-- <unit bldFile="multimediacommsengine/mmcefloorctrlengine/tsrc/ut_floorctrlengine/group"/> -->
+      </component>
+      <component id="mmcefloorctrlplugin" filter="s60" name="MCE Floor Control Plugin" class="plugin">
+        <!-- <unit bldFile="multimediacommsengine/mmcefloorctrlplugin/group"/> -->
+        <!-- <unit bldFile="multimediacommsengine/mmcefloorctrlplugin/tsrc/ut_floorctrlplugin/group"/> -->
+      </component>
+      <component id="multimediacommsengine_build" filter="s60" name="Multimedia Comms Engine Build">
+              <!-- contents of this component need to be distributed out to the other commented-out bld.infs or the other components need to be collapsed into one -->
+        <unit bldFile="multimediacommsengine/group"/>
+      </component>
+      <component id="multimediacommsengine_test" filter="s60" name="Multimedia Comms Engine Test" purpose="development">
+        <!-- <unit bldFile="multimediacommsengine/tsrc/mcetestui/mcetestuiplugin/group"/> -->
+        <!-- <unit bldFile="multimediacommsengine/tsrc/mcetestui/group"/> -->
+        <!-- <unit bldFile="multimediacommsengine/tsrc/testdriver/siptester/ttcnresolverplugin/group"/> -->
+        <!-- <unit bldFile="multimediacommsengine/tsrc/mmctestdriver/group"/> -->
+        <!-- <unit bldFile="multimediacommsengine/tsrc/mmctestdriver/mcetester/iceplugin_stub/group"/> -->
+        <!-- <unit bldFile="multimediacommsengine/tsrc/mmctestdriver/mcetester/ttcnresolverplugin/group"/> -->
+        <!-- <unit bldFile="multimediacommsengine/tsrc/testdriver/siptester/ttcnresolverplugin2/group"/> -->
+        <!-- <unit bldFile="multimediacommsengine/tsrc/mcetestui/mcetestuiengine/group"/> -->
+        <!-- <unit bldFile="multimediacommsengine/tsrc/testdriver/group/s60_public_sdk"/> -->
+        <!-- <unit bldFile="multimediacommsengine/tsrc/mmctestdriver/mcetester/iceplugin_stub/tsrc/test/group"/> -->
+        <!-- <unit bldFile="multimediacommsengine/tsrc/testdriver/group"/> -->
+        <!-- <unit bldFile="multimediacommsengine/tsrc/mmctestdriver/mcetester/voipplugin/group"/> -->
+      </component>
+    </collection>
+    <collection id="natfw" name="NAT Framework" level="framework">
+      <component id="natfwsettings" filter="s60" name="NAT Framework Settings" introduced="^2">
+        <!-- <unit bldFile="natfw/natfwsettings/group"/> -->
+        <!-- <unit bldFile="natfw/natfwsettings/tsrc/ut_cnatfwnatsettings/group"/> -->
+      </component>
+      <component id="natfwconnectionmultiplexer" filter="s60" name="NAT Framework Connection Multiplexer" introduced="^2">
+        <!-- <unit bldFile="natfw/natfwconnectionmultiplexer/group"/> -->
+        <!-- <unit bldFile="natfw/natfwconnectionmultiplexer/tsrc/muxtestconsole/group"/> -->
+        <!-- <unit bldFile="natfw/natfwconnectionmultiplexer/tsrc/ut_connectionmultiplexer/group"/> -->
+      </component>
+      <component id="natfwclient" filter="s60" name="NAT Framework Client" introduced="^2">
+        <!-- <unit bldFile="natfw/natfwclient/group"/> -->
+        <!-- <unit bldFile="natfw/natfwclient/tsrc/ut_natfwclient/group"/> -->
+      </component>
+      <component id="natfwsocketmediaconnwrapper" filter="s60" name="Socket Media Connection Wrapper" introduced="^2">
+        <!-- <unit bldFile="natfw/natfwsocketmediaconnwrapper/group"/> -->
+        <!-- <unit bldFile="natfw/natfwsocketmediaconnwrapper/tsrc/ut_socketmediaconnwrapper/group"/> -->
+      </component>
+      <component id="natfwunsaf_protocols" filter="s60" name="UNSAF Protocols" introduced="^2">
+          <!-- consider expanding name to UNilateral Self- Address Fixing Protocols -->
+        <!-- <unit bldFile="natfw/natfwunsaf_protocols/group"/> -->
+        <!-- <unit bldFile="natfw/natfwunsaf_protocols/tsrc/ut_unsaf_codec/group"/> -->
+        <!-- <unit bldFile="natfw/natfwunsaf_protocols/tsrc/ut_unsaf_transport/group"/> -->
+      </component>
+      <component id="natfwstunturnclient" filter="s60" name="STUN TURN Client" introduced="^2">
+        <!-- <unit bldFile="natfw/natfwstunturnclient/group"/> -->
+        <!-- <unit bldFile="natfw/natfwstunturnclient/tsrc/ut_stunturnclient/group"/> -->
+      </component>
+      <component id="natfwstunserver" filter="s60" name="STUN Server" introduced="^2">
+        <!-- <unit bldFile="natfw/natfwstunserver/group"/> -->
+        <!-- <unit bldFile="natfw/natfwstunserver/tsrc/ut_cnatfwstunsrv/group"/> -->
+      </component>
+      <component id="natfwicecandidatehandler" filter="s60" name="ICE Candidate Handler" class="plugin" introduced="^2">
+        <!-- <unit bldFile="natfw/natfwicecandidatehandler/group"/> -->
+        <!-- <unit bldFile="natfw/natfwicecandidatehandler/tsrc/ut_icecandidatehandler/group"/> -->
+      </component>
+      <component id="natfwstunplugin" filter="s60" name="STUN Plugin" class="plugin" introduced="^2">
+        <!-- <unit bldFile="natfw/natfwstunplugin/group"/> -->
+        <!-- <unit bldFile="natfw/natfwstunplugin/tsrc/ut_cnatfwstunplugin/group"/> -->
+      </component>
+      <component id="natfwturnplugin" filter="s60" name="TURN Plugin" class="plugin" introduced="^2">
+        <!-- <unit bldFile="natfw/natfwturnplugin/group"/> -->
+        <!-- <unit bldFile="natfw/natfwturnplugin/tsrc/ut_cnatfwturnplugin/group"/> -->
+      </component>
+      <component id="natfw_build" filter="s60" name="NAT Framework Build" introduced="^2">
+              <!-- contents of this component need to be distributed out to the other commented-out bld.infs or the other components need to be collapsed into one -->
+        <unit bldFile="natfw/group"/>
+      </component>
+      <component id="natfw_test" filter="s60" name="NAT Framework Test" purpose="development" introduced="^2">
+        <!-- <unit bldFile="natfw/tsrc/natfwtestconsoles/natfwtestconsole/group"/> -->
+      </component>
+    </collection>
+    <collection id="natplugins" name="NAT Plugins" level="plugin">
+         <!-- are the extra test units in here needed at all? Either incorperate into main unit as test projects or remove-->
+      <component id="natpcliprovisioningnatfwadapter" filter="s60" name="Client Provisioning NAT Framework Traversal Adapter" class="plugin" introduced="^2">
+        <unit bldFile="natplugins/natpcliprovisioningnatfwadapter/group"/>
+        <!-- <unit bldFile="natplugins/natpcliprovisioningnatfwadapter/tsrc/t_natfwtraversaladapter/group"/> -->
+      </component>
+      <component id="natpdevmgmtnatfwadapter" filter="s60" name="Device Management NAT Framework Traversal Adapter" class="plugin">
+        <unit bldFile="natplugins/natpdevmgmtnatfwadapter/group"/>
+        <!-- <unit bldFile="natplugins/natpdevmgmtnatfwadapter/tsrc/ut_cnsmldmnatfwtraversaladapter/group"/> -->
+      </component>
+      <component id="natptraversalcontroller" filter="s60" name="NAT Traversal Controller" class="plugin">
+        <unit bldFile="natplugins/natptraversalcontroller/group"/>
+        <!-- <unit bldFile="natplugins/natptraversalcontroller/tsrc/ut_nattraversalcontroller/group"/> -->
+      </component>
+      <component id="natpnatfwsdpprovider" filter="s60" name="NAT Framework SDP Provider" class="plugin">
+        <unit bldFile="natplugins/natpnatfwsdpprovider/group"/>
+        <!-- <unit bldFile="natplugins/natpnatfwsdpprovider/tsrc/testconsole/group"/> -->
+        <!-- <unit bldFile="natplugins/natpnatfwsdpprovider/tsrc/ut_natfwsdpprovider/group"/> -->
+      </component>
+    </collection>
+    <collection id="ipappsrv_info" name="IP App Services Info" level="plugin">
+      <component id="ipappsrv_metadata" name="IP App Services Metadata" class="config" introduced="^2" purpose="development" target="desktop">
+        <unit mrp="ipappsrv_info/ipappsrv_metadata/ipappsrv_metadata.mrp"/>
+      </component>
+    </collection>
+  </package>
+</SystemDefinition>