realtimenetprots/sipfw/ProfileAgent/IMS_Agent/Src/sipphoneregistrationmonitor.cpp
branchRCL_3
changeset 20 0dcb073356a5
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/realtimenetprots/sipfw/ProfileAgent/IMS_Agent/Src/sipphoneregistrationmonitor.cpp	Wed Sep 01 12:27:36 2010 +0100
@@ -0,0 +1,172 @@
+// Copyright (c) 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        : sipphoneregistrationmonitor.cpp
+// Part of     : SIP Profile Agent / IMS Agent
+// Version     : %version: 2 %
+//
+
+
+#include "sipphoneregistrationmonitor.h"
+#include "sipphoneregistrationobserver.h"
+
+// -----------------------------------------------------------------------------
+// CSipPhoneRegistrationMonitor::NewL
+// -----------------------------------------------------------------------------
+//
+CSipPhoneRegistrationMonitor* CSipPhoneRegistrationMonitor::NewL(
+    RTelServer& aTelServer,
+    const RTelServer::TPhoneInfo& aPhoneInfo, 
+    MSipPhoneRegistrationObserver& aObserver )
+	{
+	CSipPhoneRegistrationMonitor* self 
+	    = new( ELeave ) CSipPhoneRegistrationMonitor( aObserver );
+	CleanupStack::PushL( self );
+	self->ConstructL( aTelServer, aPhoneInfo );
+	CleanupStack::Pop( self );
+	return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CSipPhoneRegistrationMonitor::CSipPhoneRegistrationMonitor
+// -----------------------------------------------------------------------------
+//
+CSipPhoneRegistrationMonitor::CSipPhoneRegistrationMonitor( 
+    MSipPhoneRegistrationObserver& aObserver )
+	: CActive( CActive::EPriorityStandard ),
+	  iObserver( aObserver ),
+	  iRegistrationStatus( RMobilePhone::ERegistrationUnknown )
+	{
+	CActiveScheduler::Add( this );
+	}
+
+// -----------------------------------------------------------------------------
+// CSipPhoneRegistrationMonitor::ConstructL
+// -----------------------------------------------------------------------------
+//
+#ifdef __WINSCW__
+
+void CSipPhoneRegistrationMonitor::ConstructL( 
+    RTelServer& /*aTelServer*/,
+    const RTelServer::TPhoneInfo& /*aPhoneInfo*/ )
+	{
+    iRegistrationStatus = RMobilePhone::ERegisteredOnHomeNetwork;
+	}
+
+#else
+
+void CSipPhoneRegistrationMonitor::ConstructL( 
+    RTelServer& aTelServer,
+    const RTelServer::TPhoneInfo& aPhoneInfo )
+	{
+	
+	User::LeaveIfError( iPhone.Open( aTelServer, aPhoneInfo.iName ) );
+
+    // Get current status
+    TRequestStatus status;
+    iPhone.GetNetworkRegistrationStatus( status, iRegistrationStatus );	
+    User::WaitForRequest( status );
+    User::LeaveIfError( status.Int() );
+		
+    // Start to monitor the status
+    MonitorStatus();
+	}
+    
+#endif
+
+// -----------------------------------------------------------------------------
+// CSipPhoneRegistrationMonitor::~CSipPhoneRegistrationMonitor
+// -----------------------------------------------------------------------------
+//
+CSipPhoneRegistrationMonitor::~CSipPhoneRegistrationMonitor()
+	{
+	Cancel();
+	iPhone.Close();
+	}
+
+// -----------------------------------------------------------------------------
+// CSipPhoneRegistrationMonitor::Status
+// -----------------------------------------------------------------------------
+//
+CSipPhoneRegistrationMonitor::TStatus 
+CSipPhoneRegistrationMonitor::Status() const
+	{
+	TStatus status = ENotRegistered;
+	switch ( iRegistrationStatus )
+	    {
+	    case RMobilePhone::ERegisteredOnHomeNetwork:
+	        status = ERegisteredOnHomeNetwork;
+	        break;
+	    case RMobilePhone::ERegisteredRoaming:
+	        status = ERegisteredRoaming;
+	        break;
+	    default:
+	        break;
+	    }
+	return status;
+	}
+
+// -----------------------------------------------------------------------------
+// CSipPhoneRegistrationMonitor::DoCancel
+// -----------------------------------------------------------------------------
+//
+void CSipPhoneRegistrationMonitor::DoCancel()
+	{
+	iPhone.CancelAsyncRequest( 
+	    EMobilePhoneNotifyNetworkRegistrationStatusChange );
+	}
+
+// -----------------------------------------------------------------------------
+// CSipPhoneRegistrationMonitor::RunL
+// -----------------------------------------------------------------------------
+//
+void CSipPhoneRegistrationMonitor::RunL()
+	{
+	TInt err = iStatus.Int();
+	
+	if ( err )
+	    {
+	    iObserver.PhoneRegistrationStatusError( err );
+	    }
+	else
+	    {
+	    MonitorStatus();
+	    iObserver.PhoneRegistrationStatusChangedL();	
+	    }
+	}
+
+// -----------------------------------------------------------------------------
+// CSipPhoneRegistrationMonitor::RunError
+// -----------------------------------------------------------------------------
+//
+TInt CSipPhoneRegistrationMonitor::RunError(TInt aError)
+    {
+    iObserver.PhoneRegistrationStatusError( aError );
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CSipPhoneRegistrationMonitor::MonitorStatus
+// -----------------------------------------------------------------------------
+//	
+void CSipPhoneRegistrationMonitor::MonitorStatus()
+	{
+#ifndef __WINSCW__
+
+	// Request further notification from ETel
+	iPhone.NotifyNetworkRegistrationStatusChange( iStatus,
+												  iRegistrationStatus );
+	SetActive();
+	
+#endif	
+	}