--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/realtimenetprots/sipfw/SIP/ConnectionMgr/src/CConnectionContainer.cpp Tue Feb 02 01:03:15 2010 +0200
@@ -0,0 +1,185 @@
+// Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Name : CConnectionContainer.cpp
+// Part of : ConnectionMgr
+// Implementation
+// Version : SIP/4.0
+//
+
+
+
+#include "CConnectionContainer.h"
+#include "CConnectionMonitor.h"
+#include "sipnetworkobserver.h"
+#include "SipLogs.h"
+
+// -----------------------------------------------------------------------------
+// CConnectionContainer::NewL
+// -----------------------------------------------------------------------------
+//
+CConnectionContainer* CConnectionContainer::NewL(
+ MSIPNetworkObserver& aObserver )
+ {
+ CConnectionContainer* self =
+ new( ELeave ) CConnectionContainer( aObserver );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CConnectionContainer::CConnectionContainer
+// -----------------------------------------------------------------------------
+//
+CConnectionContainer::CConnectionContainer( MSIPNetworkObserver& aObserver ) :
+ CActive( CActive::EPriorityStandard ),
+ iObserver( aObserver )
+ {
+ CActiveScheduler::Add( this );
+ }
+
+// -----------------------------------------------------------------------------
+// CConnectionContainer::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CConnectionContainer::ConstructL()
+ {
+ iMonitor = CConnectionMonitor::NewL(iObserver,iConnection);
+ }
+
+// -----------------------------------------------------------------------------
+// CConnectionContainer::~CConnectionContainer
+// -----------------------------------------------------------------------------
+//
+CConnectionContainer::~CConnectionContainer()
+ {
+ delete iMonitor;
+ iConnection.Close();
+ Cancel();
+ }
+
+// -----------------------------------------------------------------------------
+// CConnectionContainer::RunL
+// -----------------------------------------------------------------------------
+//
+void CConnectionContainer::RunL()
+ {
+ __SIP_INT_LOG1( "CConnectionContainer::RunL", iStatus.Int() )
+
+ iMonitor->StartMonitoring();
+
+ iObserver.NetworkStateChanged( MSIPNetworkObserver::ENetworkConnected,
+ iStatus.Int() );
+ }
+
+// -----------------------------------------------------------------------------
+// CConnectionContainer::DoCancel
+// -----------------------------------------------------------------------------
+//
+void CConnectionContainer::DoCancel()
+ {
+ iConnection.Close();
+ }
+
+// -----------------------------------------------------------------------------
+// CConnectionContainer::Connection
+// -----------------------------------------------------------------------------
+//
+RConnection& CConnectionContainer::Connection()
+ {
+ return iConnection;
+ }
+
+// -----------------------------------------------------------------------------
+// CConnectionContainer::OpenConnection
+// -----------------------------------------------------------------------------
+//
+TInt CConnectionContainer::OpenConnection( TUint32 aIapId,
+ RSocketServ& aServer )
+ {
+ __SIP_INT_LOG1( "CConnectionContainer::OpenConnection entered", aIapId )
+
+ TInt err = KErrNone;
+ if( !IsActive() )
+ {
+ err = OpenConnection( aServer );
+
+ if (!err)
+ {
+ // Set connection preferences
+ iExtPrefs.SetIapId( aIapId );
+ TRAPD(error, iPrefList.AppendL(&iExtPrefs));
+ if(error)
+ {
+ return error;
+ }
+ // Start connecting
+ iConnection.Start( iPrefList, iStatus );
+ SetActive();
+ }
+ }
+
+ __SIP_INT_LOG1( "CConnectionContainer::OpenConnection returns", err )
+
+ return err;
+ }
+
+// -----------------------------------------------------------------------------
+// CConnectionContainer::CloseConnection
+// -----------------------------------------------------------------------------
+//
+void CConnectionContainer::CloseConnection()
+ {
+ __SIP_LOG( "CConnectionContainer::CloseConnection returns" )
+
+ iMonitor->StopMonitoring();
+ iConnection.Close();
+ Cancel();
+
+ __SIP_LOG( "CConnectionContainer::CloseConnection returns" )
+ }
+
+// -----------------------------------------------------------------------------
+// CConnectionContainer::MonitorConnectionClosure
+// -----------------------------------------------------------------------------
+//
+TInt CConnectionContainer::MonitorConnectionClosure( RSocketServ& aServer )
+ {
+ TInt err = OpenConnection( aServer );
+
+ if ( !err )
+ {
+ iMonitor->MonitorConnectionClosure();
+ }
+
+ return err;
+ }
+
+// -----------------------------------------------------------------------------
+// CConnectionContainer::OpenConnection
+// -----------------------------------------------------------------------------
+//
+TInt CConnectionContainer::OpenConnection( RSocketServ& aServer )
+ {
+ TInt err( KErrNone );
+ // If iConnection is already open don't reopen it.
+ if( !iConnection.SubSessionHandle() )
+ {
+ err = iConnection.Open( aServer );
+ }
+ return err;
+ }
+
+// End of File