phoneclientserver/phoneclient/Src/EmergencyNumber/EmergencyNumber_Aiw/CPhCltEmergencyCallImpl.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneclientserver/phoneclient/Src/EmergencyNumber/EmergencyNumber_Aiw/CPhCltEmergencyCallImpl.cpp Tue Feb 02 01:11:09 2010 +0200
@@ -0,0 +1,197 @@
+/*
+* Copyright (c) 2002-2004 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: Implementation of CPhCltEmergencyCallImpl class.
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "RPhCltServer.h"
+#include "CPhCltEmergencyCallImpl.h"
+#include "MPhCltEmergencyCallObserver.h"
+
+_LIT( KEmNumber, "112" );
+
+// ============================ MEMBER FUNCTIONS ===============================
+// -----------------------------------------------------------------------------
+// CPhCltEmergencyCallImpl::CPhCltEmergencyCallImpl
+// C++ constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CPhCltEmergencyCallImpl::CPhCltEmergencyCallImpl(
+ MPhCltEmergencyCallObserver* aObserver ) :
+ CPhCltEmergencyCall( aObserver ),
+ iEmergencyCallNumberPtr( NULL, 0 )
+ {
+ CActiveScheduler::Add( this );
+ }
+
+// -----------------------------------------------------------------------------
+// CPhCltEmergencyCallImpl::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CPhCltEmergencyCallImpl* CPhCltEmergencyCallImpl::NewL(
+ MPhCltEmergencyCallObserver* aObserver )
+ {
+ CPhCltEmergencyCallImpl* self =
+ new ( ELeave ) CPhCltEmergencyCallImpl( aObserver);
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// Destructor
+CPhCltEmergencyCallImpl::~CPhCltEmergencyCallImpl()
+ {
+ Cancel();
+ iEmergencyCall.Close();
+ iServer.Close();
+ }
+
+// -----------------------------------------------------------------------------
+// CPhCltEmergencyCallImpl::ConstructL
+//
+// -----------------------------------------------------------------------------
+//
+void CPhCltEmergencyCallImpl::ConstructL()
+ {
+ User::LeaveIfError( iServer.Connect() );
+ User::LeaveIfError( iEmergencyCall.Open( iServer ) );
+ }
+
+// -----------------------------------------------------------------------------
+// CPhCltEmergencyCallImpl::RunL
+//
+// -----------------------------------------------------------------------------
+//
+void CPhCltEmergencyCallImpl::RunL()
+ {
+ // inform observer
+ iObserver->HandleEmergencyDialL( iStatus.Int() );
+ }
+
+// -----------------------------------------------------------------------------
+// CPhCltEmergencyCallImpl::DoCancel
+//
+// -----------------------------------------------------------------------------
+//
+void CPhCltEmergencyCallImpl::DoCancel()
+ {
+ iEmergencyCall.CancelDialEmergencyCall();
+ }
+
+// -----------------------------------------------------------------------------
+// CPhCltEmergencyCallImpl::IsEmergenyPhoneNumber
+//
+// -----------------------------------------------------------------------------
+//
+TInt CPhCltEmergencyCallImpl::IsEmergencyPhoneNumber(
+ const TDesC& aNumber,
+ TBool& aIsEmergencyNumber )
+ {
+ return iEmergencyCall.IsEmergencyPhoneNumber(
+ aNumber,
+ aIsEmergencyNumber );
+ }
+
+// -----------------------------------------------------------------------------
+// CPhCltEmergencyCallImpl::IsEmergenyPhoneNumber
+//
+// -----------------------------------------------------------------------------
+//
+TInt CPhCltEmergencyCallImpl::IsEmergencyPhoneNumber(
+ const TDesC& aNumber,
+ TDes& aMatchedEmergencyNumber,
+ TBool& aIsEmergencyNumber )
+ {
+
+ return iEmergencyCall.IsEmergencyPhoneNumber(
+ aNumber,
+ aMatchedEmergencyNumber,
+ aIsEmergencyNumber );
+ }
+
+// -----------------------------------------------------------------------------
+// CPhCltEmergencyCallImpl::FindEmergencyPhoneNumber
+//
+// -----------------------------------------------------------------------------
+//
+TInt CPhCltEmergencyCallImpl::FindEmergencyPhoneNumber(
+ TDes& aNumber,
+ TBool& aIsEmergencyNumber )
+ {
+ return iEmergencyCall.FindEmergencyPhoneNumber(
+ aNumber,
+ aIsEmergencyNumber );
+ }
+
+// -----------------------------------------------------------------------------
+// CPhCltEmergencyCallImpl::DialEmergencyCallL
+//
+// Sends a dial request to the server.
+// -----------------------------------------------------------------------------
+//
+void CPhCltEmergencyCallImpl::DialEmergencyCallL(
+ const TDesC& aNumber )
+ {
+ TBool isEmNumber( EFalse );
+ TInt error( KErrNone );
+ DialEmergencyPreconditionCheckL();
+
+ if ( aNumber.Length() < 1 )
+ {
+ iEmergencyCallNumber.Copy( KEmNumber );
+ }
+ else
+ {
+ TPhCltEmergencyNumber matchedEmNumber;
+ error = IsEmergencyPhoneNumber( aNumber,
+ matchedEmNumber, isEmNumber );
+
+ if ( !isEmNumber || error )
+ {
+ User::Leave( KErrArgument );
+ }
+ iEmergencyCallNumber = matchedEmNumber;
+ }
+
+ iEmergencyCallNumberPtr.Set(
+ reinterpret_cast<const TText8*>( &iEmergencyCallNumber ),
+ sizeof( TPhCltEmergencyNumber ) );
+ iEmergencyCall.DialEmergencyCall( iStatus, iEmergencyCallNumberPtr );
+ SetActive();
+ }
+
+// -----------------------------------------------------------------------------
+// CPhCltEmergencyCallImpl::DialEmergencyPreconditionCheckL
+//
+// -----------------------------------------------------------------------------
+//
+void CPhCltEmergencyCallImpl::DialEmergencyPreconditionCheckL()
+ {
+ if( IsActive() )
+ {
+ User::Leave( KErrInUse );
+ }
+ if( iEmergencyCall.SubSessionHandle() == 0 )
+ {
+ User::Leave( KErrBadHandle );
+ }
+ }
+
+// End of File