--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmsharing/mmshavailability/src/musavaconnectionmonitor.cpp Thu Dec 17 08:44:37 2009 +0200
@@ -0,0 +1,345 @@
+/*
+* Copyright (c) 2005-2007 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: Provide interface for the client requestin availability class.
+*
+*/
+
+
+
+#include "musavaconnectionmonitor.h"
+#include "musavasettingsimp.h"
+#include "musavanetworkavailability.h"
+#include "musavaobserver.h"
+#include "musavaavailability.h"
+#include "musavasharedobject.h"
+#include "musavaconnectionmonitorobserver.h"
+#include "musavasip.h"
+#include "muslogger.h"
+
+#include <e32base.h>
+#include <sipprofile.h>
+#include <mmtsy_names.h>
+
+// -------------------------------------------------------------------------
+// Two-phased constructor.
+// -------------------------------------------------------------------------
+//
+CMusAvaConnectionMonitor* CMusAvaConnectionMonitor::NewL(
+ CMusAvaSharedObject& aSharedObject )
+ {
+ MUS_LOG( "mus: [MUSAVA] -> CMusAvaConnectionMonitor::NewL()" )
+ CMusAvaConnectionMonitor* self =
+ new( ELeave ) CMusAvaConnectionMonitor( aSharedObject );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ MUS_LOG( "mus: [MUSAVA] <- CMusAvaConnectionMonitor::NewL()" )
+ return self;
+ }
+
+
+// -------------------------------------------------------------------------
+// Destructor.
+// -------------------------------------------------------------------------
+//
+CMusAvaConnectionMonitor::~CMusAvaConnectionMonitor()
+ {
+ MUS_LOG( "mus: [MUSAVA] -> CMusAvaConnectionMonitor::\
+ ~CMusAvaConnectionMonitor()" )
+ iConnectionMonitorObserver.Reset();
+ iConnectionMonitorObserver.Close();
+ // Close the monitor when event notifications are no longer required
+ iConnectionMonitor.Close();
+
+ MUS_LOG( "mus: [MUSAVA] <- CMusAvaConnectionMonitor::\
+ ~CMusAvaConnectionMonitor()" )
+ }
+
+// -------------------------------------------------------------------------
+// Constructor function.
+// -------------------------------------------------------------------------
+//
+void CMusAvaConnectionMonitor::EventL(const CConnMonEventBase& aConnMonEvent)
+ {
+ MUS_LOG( "mus: [MUSAVA] -> CMusAvaConnectionMonitor::EventL()" )
+ TUint connectionId = aConnMonEvent.ConnectionId();
+ TInt eventType = aConnMonEvent.EventType();
+ MUS_LOG1( "Connection ID = %d", connectionId )
+ MUS_LOG1( "Event type = %d", eventType )
+
+ for( TInt i=0; i<iConnectionMonitorObserver.Count(); i++ )
+ {
+ iConnectionMonitorObserver[i]->EventL( aConnMonEvent );
+ }
+ MUS_LOG( "mus: [MUSAVA] <- CMusAvaConnectionMonitor::EventL()" )
+ }
+
+
+// -------------------------------------------------------------------------
+// Constructor function.
+// -------------------------------------------------------------------------
+//
+CMusAvaConnectionMonitor::CMusAvaConnectionMonitor(
+ CMusAvaSharedObject& aSharedObject ):
+iSharedObj( &aSharedObject )
+ {
+ }
+
+// -------------------------------------------------------------------------
+// Second phase constructor.
+// -------------------------------------------------------------------------
+//
+void CMusAvaConnectionMonitor::ConstructL()
+ {
+ MUS_LOG( "mus: [MUSAVA] -> CMusAvaConnectionMonitor::ConstructL()" )
+ User::LeaveIfError( iConnectionMonitor.ConnectL() );
+
+ MUS_LOG( "mus: [MUSAVA] <- CMusAvaConnectionMonitor::ConstructL()" )
+ }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+void CMusAvaConnectionMonitor::AddAdapterL(
+ MMusAvaConnectionMonitorObserver& aAdapter )
+ {
+ MUS_LOG( "mus: [MUSAVA] -> CMusAvaConnectionMonitor::\
+ AddAdapterL( MMusAvaConnectionMonitorObserver& aAdapter )" )
+ iConnectionMonitorObserver.AppendL( &aAdapter );
+ MUS_LOG( "mus: [MUSAVA] <- CMusAvaSip::\
+ AddAdapterL( MMusAvaConnectionMonitorObserver& aAdapter )" )
+ }
+
+// -------------------------------------------------------------------------
+// Created connection ID for multimedia sharing is returned
+// -------------------------------------------------------------------------
+//
+TUint CMusAvaConnectionMonitor::CreatedConnectionID()
+ {
+ return iConnectionID;
+ }
+
+// -------------------------------------------------------------------------
+// Connection ID is stored
+// -------------------------------------------------------------------------
+//
+void CMusAvaConnectionMonitor::SetConnectionID( TUint aConnectionID )
+ {
+ iConnectionID = aConnectionID;
+ }
+// -------------------------------------------------------------------------
+// Active connection ID for multimedia sharing is returned
+// -------------------------------------------------------------------------
+//
+TUint CMusAvaConnectionMonitor::ConnectionIDL()
+ {
+ MUS_LOG( "mus: [MUSAVA] -> CMusAvaConnectionMonitor::ConnectionIDL()" )
+ TUint iap = 0; //Internet acces point
+ TUint sipIap = 0; //SIP acces point
+ TUint count = 0; //Number of connections
+ TUint id = 0; //Connection ID
+ TUint activeIapID = 0; //Connection ID for active SIP IAP
+ TUint subId = 0; //SubconnectionID
+ TUint subCount; //Subconnectioncount
+ TRequestStatus status;
+
+ //Fetch number of connections to count
+ count = ConnectionCount();
+ if ( count == 0 )
+ {
+ MUS_LOG( "mus: [MUSAVA] Non connections" )
+ }
+ else
+ {
+ MUS_LOG1( "mus: [MUSAVA] Fetch number of connections: %d", count )
+
+ //Fetch internet access point to iap
+ sipIap = MultimediaSharingAccessPointID();
+ if ( sipIap == 0 )
+ {
+ MUS_LOG( "mus: [MUSAVA] Non Access Point ID's for app" )
+ }
+ else
+ {
+ MUS_LOG1( "mus: [MUSAVA] Internet access point for sip: %d",
+ sipIap )
+
+ TBool goOn = ETrue;
+ for ( TUint i = 1; i <= count && goOn; i++ )
+ {
+ //Fetch connectionId to id
+ User::LeaveIfError(iConnectionMonitor.GetConnectionInfo(
+ i, id, subCount ));
+ MUS_LOG1( "mus: [MUSAVA] Connection ID = %d", id )
+
+ //Fetch internet access point to iap
+ iConnectionMonitor.GetUintAttribute( id, subId, KIAPId,
+ iap, status );
+ #ifndef UNIT_TESTING
+ User::WaitForRequest( status );
+ #endif
+ MUS_LOG1( "mus: [MUSAVA] Internet access point %d ", iap )
+
+ // when correct Iap found ...
+ if( iap == sipIap )
+ {
+ MUS_LOG( "mus: [MUSAVA] Connection ID found" )
+ activeIapID = id;
+ goOn = EFalse;
+ }
+ }
+
+ }
+ }
+ MUS_LOG( "mus: [MUSAVA] <- CMusAvaConnectionMonitor::ConnectionIDL()" )
+ return activeIapID;
+ }
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+TBool CMusAvaConnectionMonitor::KillPdpContext()
+ {
+ MUS_LOG( "mus: [MUSAVA] -> CMusAvaConnectionMonitor::KillPdpContext" )
+
+ TUint connId = 0;
+ TUint subConnectionCount = 0;
+ TRequestStatus requestStatus;
+ TUint count = ConnectionCount();
+ TInt ret = 0;
+ TBool retval = EFalse;
+
+ for ( TUint i = 1; i <= count && !retval; i++ )
+ {
+ TInt bearerType = 0;
+ iConnectionMonitor.GetIntAttribute( connId,
+ subConnectionCount,
+ KBearer,
+ bearerType,
+ requestStatus );
+ User::WaitForRequest( requestStatus );
+ if ( bearerType == EBearerCSD ||
+ bearerType == EBearerHSCSD ||
+ bearerType == EBearerGPRS ||
+ bearerType == EBearerEdgeGPRS ||
+ bearerType == EBearerWCDMA ||
+ bearerType == EBearerWcdmaCSD )
+ {
+ MUS_LOG1( "mus: [MUSAVA] now killing connection whose connId \
+ == <%d>", connId )
+ ret = iConnectionMonitor.GetConnectionInfo( i, connId,
+ subConnectionCount );
+ if ( ret == KErrNone )
+ {
+ ret = iConnectionMonitor.SetBoolAttribute( connId, 0,
+ KConnectionStop, ETrue );
+ if ( ret == KErrNone )
+ {
+ retval = ETrue;
+ }
+ }
+ }
+ }
+ MUS_LOG( "mus: [MUSAVA] <- CMusAvaConnectionMonitor::KillPdpContext" )
+ return retval;
+ }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+void CMusAvaConnectionMonitor::RemoveAdapter(
+ MMusAvaConnectionMonitorObserver& aAdapter )
+ {
+ MUS_LOG( "mus: [MUSAVA] -> CMusAvaConnectionMonitor::\
+ RemoveAdapter( MMusAvaConnectionMonitorObserver& aAdapter )" )
+ TInt index = iConnectionMonitorObserver.Find( &aAdapter );
+
+ if( index != KErrNotFound )
+ {
+ iConnectionMonitorObserver.Remove( index );
+ }
+ MUS_LOG( "mus: [MUSAVA] <- CMusAvaSip::\
+ RemoveAdapter( MMusAvaConnectionMonitorObserver& aAdapter )" )
+ }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+void CMusAvaConnectionMonitor::NotifyEventL()
+ {
+ MUS_LOG( "mus: [MUSAVA] -> CMusAvaConnectionMonitor::NotifyEventL()" )
+ iConnectionMonitor.NotifyEventL( *this );
+ MUS_LOG( "mus: [MUSAVA] <- CMusAvaConnectionMonitor::NotifyEventL()" )
+ }
+
+// -------------------------------------------------------------------------
+// Active connection count for multimedia sharing is returned
+// -------------------------------------------------------------------------
+//
+TUint CMusAvaConnectionMonitor::ConnectionCount()
+ {
+ MUS_LOG( "mus: [MUSAVA] -> CMusAvaConnectionMonitor::ConnectionCount()" )
+ TUint count = (TUint) KErrNotFound;
+ TRequestStatus status;
+
+ iConnectionMonitor.GetConnectionCount( count, status );
+ #ifndef UNIT_TESTING
+ User::WaitForRequest( status );
+ #endif
+ if ( status.Int() != KErrNone )
+ {
+ MUS_LOG( "mus: [MUSAVA] Phone doesn't have any active connections" )
+ }
+ MUS_LOG( "mus: [MUSAVA] <- CMusAvaConnectionMonitor::ConnectionCount()" )
+ return count;
+ }
+
+// -------------------------------------------------------------------------
+// Active Internet Access Point ID for multimedia sharing is returned
+// -------------------------------------------------------------------------
+//
+TUint CMusAvaConnectionMonitor::MultimediaSharingAccessPointID()
+ {
+ MUS_LOG( "mus: [MUSAVA] -> CMusAvaConnectionMonitor::\
+ MultimediaSharingAccessPointID()" )
+ TUint retval = KErrNone;
+ TBool profileCreated = EFalse;
+ TRAPD( err, profileCreated = iSharedObj->MusAvaSip().CreateProfileL() );
+ if ( err || !profileCreated )
+ {
+ retval = (TUint)KErrNotFound;
+ }
+ else
+ {
+ CSIPProfile* profile = iSharedObj->MusAvaSip().Profile();
+ // Get IAP ID
+ MUS_LOG( "mus: [MUSAVA] Get IAP ID" )
+
+ TInt ret = profile->GetParameter( KSIPAccessPointId, iProfileId );
+ if( ret )
+ {
+ MUS_LOG( "mus: [MUSAVA] IAP ID is not found" )
+ MUS_LOG( "mus: [MUSAVA] <- CMusAvaConnectionMonitor::\
+ MultimediaSharingAccessPointID()" )
+ retval = (TUint)ret;
+ }
+ else
+ {
+ MUS_LOG1( "mus: [MUSAVA] IAP ID = %d", iProfileId )
+ retval = iProfileId;
+ }
+ }
+ MUS_LOG( "mus: [MUSAVA] <- CMusAvaConnectionMonitor::\
+ MultimediaSharingAccessPointID()" )
+ return retval;
+ }