dosservices/dosserver/src/saegprsavailabilityobs.cpp
changeset 0 4e1aa6a622a0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dosservices/dosserver/src/saegprsavailabilityobs.cpp	Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,149 @@
+/*
+* Copyright (c) 2003 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:  
+*
+*/
+
+
+// INCLUDE FILES
+#include "saegprsavailabilityobs.h"
+#include "saeetelobserver.h"
+#include "PSVariables.h"
+#include "saepubsubnotifier.h"
+#include "sae_debug.h"
+
+#include <e32svr.h>
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// C++ default constructor can NOT contain any code, that
+// might leave.
+//
+CSaeGprsAvailabilityObs::CSaeGprsAvailabilityObs( CSaeEtelObserver* aEtelObserver, RPacketService* aService ) 
+	: CActive( EPriorityStandard ), iEtelObserver( aEtelObserver ), iService( aService ), 
+	iRegistrationStatus( RPacketService::EUnknown )
+    {
+	CActiveScheduler::Add( this );
+	InitializeRegStatus();
+    }
+
+// Destructor
+CSaeGprsAvailabilityObs::~CSaeGprsAvailabilityObs()
+    {
+	Cancel();
+    }
+
+// ---------------------------------------------------------
+// CSaeGprsStatusObs::DoCancel()
+// 
+// ---------------------------------------------------------
+//
+void CSaeGprsAvailabilityObs::DoCancel()
+	{
+	iService->NotifyChangeOfNtwkRegStatus(iStatus, iRegistrationStatus);
+	}
+
+// ---------------------------------------------------------
+// CSaeGprsStatusObs::RunL()
+// 
+// ---------------------------------------------------------
+//
+void CSaeGprsAvailabilityObs::RunL()
+	{
+	TInt status = iStatus.Int();
+	COM_TRACE_1( "SAE (avail): CSaeGprsAvailabilityObs::RunL() TRequestStatus(%d) ", status);
+	
+	switch ( status )
+		{
+		// Update System Agent and issue new request.
+		case KErrNone:
+			CheckRegistrationStatusAndInformPubSub();
+			IssueRequest();
+			break;
+		// If the request times out try to get current status.
+		case KErrTimedOut:
+			COM_TRACE_( "SAE (avail): ERROR CSaeGprsAvailabilityObs: Request timed out!" );
+			CheckRegistrationStatusAndInformPubSub();
+			IssueRequest();
+			break;
+		// Check that registration status information can be provided.
+		case KErrNotSupported:
+			COM_TRACE_( "SAE (avail): ERROR CSaeGprsAvailabilityObs: Registration status not supported!" );
+			break;
+		default:
+			COM_TRACE_( "SAE (avail): ERROR CSaeGprsAvailabilityObs: Unhandled TRequestStatus case!" );
+			break;
+		}
+	}
+
+// ---------------------------------------------------------
+// CSaeGprsStatusObs::IssueRequest()
+// 
+// ---------------------------------------------------------
+//
+void CSaeGprsAvailabilityObs::IssueRequest()
+	{
+	COM_TRACE_( "SAE (avail): CSaeGprsAvailabilityObs::IssueRequest() start" );
+	if( !IsActive() )
+		{
+		iService->NotifyChangeOfNtwkRegStatus(iStatus, iRegistrationStatus);
+		SetActive();
+		}
+	COM_TRACE_( "SAE (avail): CSaeGprsAvailabilityObs::IssueRequest() end" );
+	}
+
+// ---------------------------------------------------------
+// CSaeGprsStatusObs::InitializeRegStatus()
+// 
+// ---------------------------------------------------------
+//
+void CSaeGprsAvailabilityObs::InitializeRegStatus()
+{
+	COM_TRACE_( "SAE (avail): CSaeGprsAvailabilityObs::InitializeRegStatus() start" );
+	if( !IsActive() )
+        {
+        COM_TRACE_( "SAE (avail): CSaeGprsAvailabilityObs::InitializeRegStatus() query network status" );
+        iService->GetNtwkRegStatus(iStatus, iRegistrationStatus);
+        SetActive();
+        }
+    COM_TRACE_( "SAE (avail): CSaeGprsAvailabilityObs::InitializeRegStatus() end" );
+}
+
+// ---------------------------------------------------------
+// CSaeGprsStatusObs::CheckReqistrationStatusAndInformPubSub()
+// 
+// ---------------------------------------------------------
+//
+void CSaeGprsAvailabilityObs::CheckRegistrationStatusAndInformPubSub()
+	{
+	COM_TRACE_1( "SAE (avail): registration status: %d ", iRegistrationStatus);
+	switch (iRegistrationStatus )
+		{
+		case RPacketService::ERegisteredOnHomeNetwork:
+		case RPacketService::ERegisteredRoaming:
+			COM_TRACE_( "SAE (avail): KPSUidGprsAvailability, EPSGprsAvailable  " );
+			iEtelObserver->NotifyPubSub( KPSUidGprsAvailability, EPSGprsAvailable );
+			break;
+		case RPacketService::ENotRegisteredAndNotAvailable:
+			COM_TRACE_( "SAE (avail): KPSUidGprsAvailability, EPSGprsNotAvailable  " );
+			iEtelObserver->NotifyPubSub( KPSUidGprsAvailability, EPSGprsNotAvailable );
+			break;
+		default:
+			COM_TRACE_( "SAE (avail): KPSUidGprsAvailability, EPSGprsAvailabilityUnknown  " );
+			iEtelObserver->NotifyPubSub( KPSUidGprsAvailability, EPSGprsAvailabilityUnknown );
+			break;
+		}
+	}
+//  End of File