--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/realtimenetprots/sipfw/ProfileAgent/ApnManager/src/sipapnmanager.cpp Fri Mar 12 15:44:11 2010 +0200
@@ -0,0 +1,244 @@
+// Copyright (c) 2007-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 : sipapnmanager.cpp
+// Part of : SIP Profile Server
+// implementation
+// Version : 1.0
+//
+
+#include <commsdattypesv1_1.h>
+#include <commsdat.h>
+#include <commdb.h>
+#include <f32file.h>
+#include "sipapnmanager.h"
+#include "SipProfileLog.h"
+#include "sipapnconfigurationhandler.h"
+
+// ============================ MEMBER FUNCTIONS ==============================
+
+// ----------------------------------------------------------------------------
+// CSIPApnManager::NewL
+// ----------------------------------------------------------------------------
+//
+CSIPApnManager* CSIPApnManager::NewL(
+ MSIPApnChangeObserver& aObserver )
+ {
+ CSIPApnManager* self = new (ELeave) CSIPApnManager( aObserver );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// CSIPApnManager::~CSIPApnManager
+// ----------------------------------------------------------------------------
+//
+CSIPApnManager::~CSIPApnManager()
+ {
+ iHandlers.ResetAndDestroy();
+ }
+
+// ----------------------------------------------------------------------------
+// CSIPApnManager::UpdateApnL
+// ----------------------------------------------------------------------------
+//
+void CSIPApnManager::UpdateApnL( TUint32 aIapId, TBool aIsPrimaryApn, const TDesC8& aApn )
+ {
+ CSIPApnConfigurationHandler* handler = FindIapIdHandler( aIapId );
+ if (!handler)
+ {
+ CreateHandlerL(aIapId);
+ handler = FindIapIdHandler(aIapId);
+ }
+
+ PROFILE_DEBUG1("CSIPApnManager::UpdateApnL(), handler exists")
+ handler->UpdateApnL( aIsPrimaryApn, aApn);
+ }
+
+// ----------------------------------------------------------------------------
+// CSIPApnManager::IsFailed
+// ----------------------------------------------------------------------------
+//
+TBool CSIPApnManager::IsFailed( TUint32 aIapId )
+ {
+ CSIPApnConfigurationHandler* handler = FindIapIdHandler( aIapId );
+ return (handler && handler->IsFailed());
+ }
+
+// ----------------------------------------------------------------------------
+// CSIPApnManager::SetFailed
+// Setting back to "not-failed" state is allowed only if fatal failure has not
+// occured.
+// ----------------------------------------------------------------------------
+//
+void CSIPApnManager::SetFailed( TUint32 aIapId ,TBool aIsFailed, TBool aIsFatalFailure )
+ {
+ CSIPApnConfigurationHandler* handler = FindIapIdHandler( aIapId );
+ if(handler)
+ {
+ handler->SetFailed( aIsFailed, aIsFatalFailure );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CSIPApnManager::IsPrimaryApnInUse
+// ----------------------------------------------------------------------------
+//
+TBool CSIPApnManager::IsPrimaryApnInUse( TUint32 aIapId )
+ {
+ CSIPApnConfigurationHandler* handler = FindIapIdHandler( aIapId );
+ return ( handler && handler->IsPrimaryApnUsed() );
+ }
+
+// ----------------------------------------------------------------------------
+// CSIPApnManager::WriteApnL
+// ----------------------------------------------------------------------------
+//
+void CSIPApnManager::WriteApnL( TUint32 aIapId, TBool aIsPrimaryApn, const TDesC8* aApn )
+ {
+ PROFILE_DEBUG3( "CSIPApnManager::WriteApnL isPrimary", aIsPrimaryApn )
+ TBool useSecureAuth = aIsPrimaryApn ? EFalse : ETrue;
+
+ CSIPApnConfigurationHandler* handler = FindIapIdHandler( aIapId );
+ if (!handler)
+ {
+ CreateHandlerL(aIapId);
+ handler = FindIapIdHandler(aIapId);
+ }
+
+ handler->SetApnL( *aApn, useSecureAuth, ETrue);
+ }
+
+// ----------------------------------------------------------------------------
+// CSIPApnManager::HasPendingTasks
+// ----------------------------------------------------------------------------
+//
+TBool CSIPApnManager::HasPendingTasks() const
+ {
+ TInt count = iHandlers.Count();
+ PROFILE_DEBUG3(
+ "CSIPApnManager::HasPendingTasks handler count", count )
+
+ for ( TInt i = 0; i < count; ++i )
+ {
+ if ( iHandlers[ i ]->HasPendingTasks() )
+ {
+ PROFILE_DEBUG1(
+ "CSIPApnManager::HasPendingTasks return ETrue" )
+ return ETrue;
+ }
+ }
+ PROFILE_DEBUG1(
+ "CSIPApnManager::HasPendingTasks return EFalse" )
+ return EFalse;
+ }
+// ----------------------------------------------------------------------------
+// CSIPApnManager::CSIPApnManager
+// ----------------------------------------------------------------------------
+//
+CSIPApnManager::CSIPApnManager( MSIPApnChangeObserver& aObserver ) :
+ iObserver( aObserver )
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CSIPApnManager::ConstructL
+// Read APNs from settings file but don't write to CommsDat yet. If IMS profile
+// has APNs, use them instead. APN is written to CommsDat when the operation
+// (register, deregister, update..) that caused IMS agent to be loaded, starts
+// (CSIPIMSProfileAgent::SelectInitialApnL).
+// ----------------------------------------------------------------------------
+//
+void CSIPApnManager::ConstructL()
+ {
+ PROFILE_DEBUG1("CSIPApnManager::ConstructL()" )
+ }
+
+// ----------------------------------------------------------------------------
+// CSIPApnManager::FindIapIdHandler
+// ----------------------------------------------------------------------------
+//
+CSIPApnConfigurationHandler* CSIPApnManager::FindIapIdHandler( TUint32 aIapId )
+ {
+ CSIPApnConfigurationHandler* handler = NULL;
+ TBool found(EFalse);
+
+ for(TInt i =0; i<iHandlers.Count() && !found ; i++)
+ {
+ if (iHandlers[i]->HandlerIapId()== aIapId)
+ {
+ PROFILE_DEBUG3("CSIPApnManager::FindIapIdHandler, found handler for aIapId", aIapId )
+ found = ETrue;
+ handler = iHandlers[ i ];
+ }
+ }
+
+ return handler;
+ }
+
+// ----------------------------------------------------------------------------
+// CSIPApnManager::CreateHandlerL
+// ----------------------------------------------------------------------------
+//
+void CSIPApnManager::CreateHandlerL( TUint32 aIapId )
+ {
+ PROFILE_DEBUG1(
+ "CSIPApnManager::CreateHandlerL , enter" )
+ PROFILE_DEBUG3(
+ "CSIPApnManager::CreateHandlerL for IapId", aIapId )
+
+ CSIPApnConfigurationHandler* Handler =
+ CSIPApnConfigurationHandler::NewL( iObserver, aIapId);
+ CleanupStack::PushL( Handler );
+ iHandlers.AppendL( Handler );
+ CleanupStack::Pop( Handler );
+ PROFILE_DEBUG1(
+ "CSIPApnManager::CreateHandlerL, exit" )
+ }
+
+// ----------------------------------------------------------------------------
+// CSIPApnManager::IsIapGPRSL
+// ----------------------------------------------------------------------------
+//
+TBool CSIPApnManager::IsIapGPRSL( TUint32 aIapId )
+ {
+ TBool isIapGPRS(EFalse);
+ using namespace CommsDat;
+ CMDBSession* db = CMDBSession::NewL( CMDBSession::LatestVersion() );
+ CleanupStack::PushL( db );
+ // Set any attributes if any
+ db->SetAttributeMask( ECDHidden );
+ // Create an iap record
+ CCDIAPRecord* iapRecord =
+ static_cast<CCDIAPRecord*>(
+ CCDRecordBase::RecordFactoryL( KCDTIdIAPRecord ) );
+ CleanupStack::PushL( iapRecord );
+ iapRecord->SetRecordId( aIapId );
+ iapRecord->LoadL( *db );
+ TPtrC bearerType(iapRecord->iBearerType);
+ if(bearerType.CompareF(TPtrC(KCDTypeNameModemBearer)) == 0)
+ {
+ isIapGPRS = ETrue;
+ }
+
+ db->ClearAttributeMask( ECDHidden );
+
+ CleanupStack::PopAndDestroy( iapRecord );
+ CleanupStack::PopAndDestroy( db );
+ PROFILE_DEBUG3(
+ "CSIPApnConfigurationHandler::IsIapGPRSL(),isIapGPRS", isIapGPRS )
+ return isIapGPRS;
+ }
+// End of File