mobilemessaging/smum/src/MsgSimSCNumberDetectorCDMA.cpp
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mobilemessaging/smum/src/MsgSimSCNumberDetectorCDMA.cpp	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,284 @@
+/*
+* Copyright (c) 2002 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:  
+*     An active object class which takes care of reading the possible new
+*     service centres from SIM and adds them to pda-side Sms Settings.
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "MsgSimSCNumberDetector.h"
+#include "SmumLogging.h"
+#include "smsui.pan"    // for panics
+#include <FeatMgr.h>                    // FeatureManager
+#include <bldvariant.hrh>
+
+// ================= MEMBER FUNCTIONS =======================
+
+/*
+* Symbian OS 2 phase construction and initialization. Note that operation that is returned is already active.
+* A client will be notified via aClientStatus when the operation terminates.
+*/
+EXPORT_C CMsgSimOperation* CMsgSimOperation::NewL( TRequestStatus& aClientStatus )
+    {
+    SMUMLOGGER_ENTERFN("CMsgSimOperation::NewL")
+
+    CMsgSimOperation* self = new ( ELeave ) CMsgSimOperation( aClientStatus );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    SMUMLOGGER_LEAVEFN("CMsgSimOperation::NewL")
+
+    return self;
+    }
+
+// C++ constructor which initializes the active object with a default priority and adds it to the active scheduler.
+// C++ constructor can NOT contain any code, that
+// might leave.
+CMsgSimOperation::CMsgSimOperation( TRequestStatus& aStatus, TInt aPriority )
+: CActive( aPriority ), iClientStatus( &aStatus ), iRetryCount( 0 )
+    {
+    SMUMLOGGER_ENTERFN("CMsgSimOperation::CMsgSimOperation")
+
+    SMUMLOGGER_LEAVEFN("CMsgSimOperation::CMsgSimOperation")
+    }
+
+// Symbian OS default constructor can leave.
+void CMsgSimOperation::ConstructL()
+    {
+    SMUMLOGGER_ENTERFN("CMsgSimOperation::ConstructL")
+/*    
+	RSystemAgent sysAgent;
+	if( sysAgent.Connect() == KErrNone )
+		{
+		if ( sysAgent.GetState(KUidSimCStatus) == ESACSimNotSupported )
+			{
+			// Sim Card not supported
+			// Complete the Active Object request returning that this is not supported.
+			// Since we cannot insert a sim card when the device is operating, 
+			// the Flag cannot change, the request is just completed without doing anything
+			//
+			CompleteRequest(KErrNotSupported);
+			}
+		else
+			{
+			CompleteRequest(KErrNone);
+			}
+		sysAgent.Close();
+		}
+	// Default not supported
+	// 
+	else
+		{
+		CompleteRequest(KErrNotSupported);
+		}
+*/
+    SMUMLOGGER_LEAVEFN("CMsgSimOperation::ConstructL")
+    }
+
+// C++ virtual destructor
+CMsgSimOperation::~CMsgSimOperation()
+    {
+    SMUMLOGGER_ENTERFN("CMsgSimOperation::~CMsgSimOperation")
+
+    Cancel(); // make sure that this object is not left on the active scheduler.
+    iClientStatus = NULL;
+    
+    SMUMLOGGER_LEAVEFN("CMsgSimOperation::~CMsgSimOperation")
+    }
+
+// ----------------------------------------------------
+// CMsgSimOperation::StartL
+// This function issues request and activates the object
+//
+// ----------------------------------------------------
+void CMsgSimOperation::StartL()
+    {
+    SMUMLOGGER_ENTERFN("CMsgSimOperation::StartL")
+
+
+    SMUMLOGGER_LEAVEFN("CMsgSimOperation::StartL")
+    }
+
+// ----------------------------------------------------
+// CMsgSimOperation::CompleteRequest
+//
+// ----------------------------------------------------
+void CMsgSimOperation::CompleteRequest( TInt aValue )
+    {
+    SMUMLOGGER_ENTERFN("CMsgSimOperation::CompleteRequest")
+    
+    __ASSERT_DEBUG( !IsActive(), Panic( ESimOperationPanicRequestAlreadyActive ));
+    TRequestStatus* myRequestStatus = &iStatus;
+    User::RequestComplete( myRequestStatus, aValue );
+    if( !IsActive() )
+        {
+        SetActive();
+        }
+
+    SMUMLOGGER_LEAVEFN("CMsgSimOperation::CompleteRequest")
+    }
+
+// ----------------------------------------------------
+// CMsgSimOperation::CompleteClientRequest
+//
+// ----------------------------------------------------
+void CMsgSimOperation::CompleteClientRequest( TInt aValue )
+    {
+    SMUMLOGGER_ENTERFN("CMsgSimOperation::CompleteClientRequest")
+    
+    TBool haveClientRequestStatus = HaveClientRequestStatus();
+    __ASSERT_DEBUG( haveClientRequestStatus, Panic( ESimOperationPanicClientsRequestAlreadyCompleted ));
+    // So that we don't attempt to complete the clients request again in the future
+    if ( haveClientRequestStatus )
+        {
+        User::RequestComplete( iClientStatus, aValue );
+        iClientStatus = NULL;
+        }
+
+    SMUMLOGGER_LEAVEFN("CMsgSimOperation::CompleteClientRequest")
+    }
+
+// ----------------------------------------------------
+// CMsgSimOperation::HaveClientRequestStatus
+//
+// ----------------------------------------------------
+TBool CMsgSimOperation::HaveClientRequestStatus() const
+    {
+    SMUMLOGGER_WRITE("CMsgSimOperation::HaveClientRequestStatus")
+    return (iClientStatus != NULL);
+    }
+
+// ----------------------------------------------------
+// CMsgSimOperation::Panic
+//
+// ----------------------------------------------------
+void CMsgSimOperation::Panic(TSimOperationPanic aPanic)
+    {
+    SMUMLOGGER_ENTERFN("CMsgSimOperation::Panic")
+
+    _LIT(KSimOpPanicCategory, "SIMOP");
+    SMUMLOGGER_WRITE_FORMAT("Panic - Panic :%d", aPanic)
+    User::Panic(KSimOpPanicCategory, aPanic);
+    
+    SMUMLOGGER_LEAVEFN("CMsgSimOperation::Panic")
+    }
+
+// ----------------------------------------------------
+// CMsgSimOperation::RunL
+// Active object RunL method is called when the request (sim params reading operation) has been completed
+//
+// ----------------------------------------------------
+void CMsgSimOperation::RunL()
+    {
+    SMUMLOGGER_ENTERFN("CMsgSimOperation::RunL")
+
+    TInt error = iStatus.Int();
+    SMUMLOGGER_WRITE_FORMAT("RunL - 1st error check :%d", error)
+
+	if ( error == KErrNotSupported)
+		{
+		// Sim Card Not Supported in the platform
+		// Should be KErrNotSupported if constructL fails!
+		//
+		CompleteClientRequest(error);
+		}
+    
+    SMUMLOGGER_LEAVEFN("CMsgSimOperation::RunL")
+    }
+
+// ----------------------------------------------------
+// CCMsgSimOperation::DoRunL
+//
+// ----------------------------------------------------
+void CMsgSimOperation::DoRunL()
+    {
+    SMUMLOGGER_ENTERFN("CMsgSimOperation::DoRunL")
+
+    SMUMLOGGER_LEAVEFN("CMsgSimOperation::DoRunL")
+    }
+
+// ----------------------------------------------------
+// CMsgSimOperation::RunError
+// Called when AO RunL leaves. Handle the leave and return
+//
+// ----------------------------------------------------
+ 
+TInt CMsgSimOperation::RunError( TInt )
+    {
+    SMUMLOGGER_ENTERFN("CMsgSimOperation::RunError")
+    DoCancel();
+    SMUMLOGGER_LEAVEFN("CMsgSimOperation::RunError")
+    return KErrNone;
+    }
+
+// ----------------------------------------------------
+// CMsgSimOperation::DoCancel
+// called by active object's Cancel method
+//
+// ----------------------------------------------------
+void CMsgSimOperation::DoCancel()
+    {
+    SMUMLOGGER_ENTERFN("CMsgSimOperation::DoCancel")
+
+    if ( iSimOperation )  // if the real Sim reading operation was started:
+        {
+        iSimOperation->Cancel();    // cancel it
+        }
+
+    // We don't need to complete our own request status as this function will never
+    // be called if our own request status has already been completed previously.
+    // 
+    // We do need to complete the client's request status however.
+    if  (iClientStatus)
+        {
+        CompleteClientRequest(KErrCancel);
+        }
+
+    SMUMLOGGER_LEAVEFN("CMsgSimOperation::DoCancel")
+    }
+
+
+// ----------------------------------------------------
+// CMsgSimOperation::HandleSessionEventL
+// called when there is a Msv session event. 
+//
+// ----------------------------------------------------
+void CMsgSimOperation::HandleSessionEventL(
+    TMsvSessionEvent /*aEvent*/, 
+    TAny* /*aArg1*/, 
+    TAny* /*aArg2*/, 
+    TAny* /*aArg3*/) 
+    {
+    SMUMLOGGER_ENTERFN("CMsgSimOperation::HandleSessionEventL")
+
+    SMUMLOGGER_LEAVEFN("CMsgSimOperation::HandleSessionEventL")
+    }
+
+// ----------------------------------------------------
+// CMsgSimOperation::HandleStartupReadyL
+// Handles events from startup state observer
+// 
+// ----------------------------------------------------
+//
+void CMsgSimOperation::HandleStartupReadyL()
+    {
+	SMUMLOGGER_WRITE( "BootState Ready" )
+	// Boot ready, start the real SimOperation
+	StartL();
+    }
+
+//  End of File