omaprovisioning/provisioning/alwaysonadapter/Src/alwaysonadapter.cpp
changeset 0 b497e44ab2fc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omaprovisioning/provisioning/alwaysonadapter/Src/alwaysonadapter.cpp	Thu Dec 17 09:07:52 2009 +0200
@@ -0,0 +1,350 @@
+/*
+* Copyright (c) 2006-2006 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:  Handles Always-On settings in OMA provisioning.
+*
+*/
+
+
+// INCLUDE FILES
+#include    <f32file.h>
+#include    <CWPCharacteristic.h>
+#include    <CWPParameter.h>
+#include    <pdpcontextmanagerinternalcrkeys.h>
+#include    <centralrepository.h>
+
+#include    "WPAdapterUtil.h"
+#include    "alwaysonadapter.h"
+#include    "ProvisioningDebug.h"
+
+// CONSTANTS
+_LIT( KAlwaysOnAwonPdpcStr, "AWON-PDPC" );
+_LIT( KAlwaysOnTRetryStr, "T-RETRY" );
+
+// AlwaysON PDP context status
+// Parameters shall be binary encoded using the in-line string.
+// Max length for each item is 2bytes.
+// Values are XY, where X is related to 3G flag and Y is related to 2G flag.
+// Possible values are:
+//  *   "00", AlwaysOn is OFF for both 3G and 2G
+//  *   "10", AlwaysOn is ON for 3G, OFF for 2G
+//  *   "01", AlwaysOn is OFF for 3G, ON for 2G
+//  *   "11", AlwaysOn is ON for 3G, ON for 2G
+const TInt KAwonPdpc_Off3G_Off2G = 00;
+const TInt KAwonPdpc_Off3G_On2G  = 01;
+const TInt KAwonPdpc_On3G_Off2G  = 10;
+const TInt KAwonPdpc_On3G_On2G   = 11;
+
+// ======== LOCAL FUNCTIONS ========
+
+// ======== MEMBER FUNCTIONS ========
+
+// -----------------------------------------------------------------------------
+// CAlwaysOnAdapter::CAlwaysOnAdapter
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CAlwaysOnAdapter::CAlwaysOnAdapter()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CAlwaysOnAdapter::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CAlwaysOnAdapter::ConstructL()
+    {
+    iPdpCenrep = CRepository::NewL( KCRUidPDPContextManager );
+    }
+
+// -----------------------------------------------------------------------------
+// CAlwaysOnAdapter::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CAlwaysOnAdapter* CAlwaysOnAdapter::NewL()
+    {
+    CAlwaysOnAdapter* self = new( ELeave ) CAlwaysOnAdapter;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CAlwaysOnAdapter::~CAlwaysOnAdapter
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CAlwaysOnAdapter::~CAlwaysOnAdapter()
+    {
+    delete iVConfigData;
+    delete iTempVConfigData;
+    delete iPdpCenrep;
+    }
+
+// -----------------------------------------------------------------------------
+// CAlwaysOnAdapter::ItemCount
+// -----------------------------------------------------------------------------
+//
+TInt CAlwaysOnAdapter::ItemCount() const
+    {
+    // SummaryTitle(), SummaryText(), SaveL(), SetAsDefaultL() and
+    // CanSetAsDefault() are called ItemCount() times
+    return iVConfigData ? 1 : 0;
+    }
+
+// -----------------------------------------------------------------------------
+// CAlwaysOnAdapter::SummaryTitle
+// -----------------------------------------------------------------------------
+//
+const TDesC16& CAlwaysOnAdapter::SummaryTitle( TInt /*aIndex*/ ) const
+    {
+    return KNullDesC();
+    }
+
+// -----------------------------------------------------------------------------
+// CAlwaysOnAdapter::SummaryText
+// -----------------------------------------------------------------------------
+//
+const TDesC16& CAlwaysOnAdapter::SummaryText( TInt /*aIndex*/ ) const
+    {
+    return KNullDesC();
+    }
+
+// -----------------------------------------------------------------------------
+// CAlwaysOnAdapter::DetailsL
+// -----------------------------------------------------------------------------
+//
+TInt CAlwaysOnAdapter::DetailsL( TInt /*aItem*/, MWPPairVisitor& /*aVisitor*/ )
+    {
+    // Detail view is a feature for later release.
+    return KErrNotSupported;
+    }
+
+// -----------------------------------------------------------------------------
+// CAlwaysOnAdapter::SaveL
+// -----------------------------------------------------------------------------
+//
+void CAlwaysOnAdapter::SaveL( TInt /*aItem*/ )
+    {
+    FLOG( _L( "[Provisioning] CAlwaysOnAdapter::SaveL:" ) );
+    __ASSERT_DEBUG( iVConfigData, User::Leave( KErrCorrupt ) );
+
+    User::LeaveIfError( iPdpCenrep->Set( KPDPContextManagerEnableWhenHome,
+        TInt( iVConfigData->iAwonPdpcHPLMN ) ) );
+    User::LeaveIfError( iPdpCenrep->Set( KPDPContextManagerEnableWhenRoaming,
+        TInt( iVConfigData->iAwonPdpcVPLMN ) ) );
+    User::LeaveIfError( iPdpCenrep->Set( KPDPContextManagerRetryTimer,
+        iVConfigData->iTRetry ) );
+
+    FLOG( _L( "[Provisioning] CStreamingAdapter::SaveL: Done" ) );
+    }
+
+// -----------------------------------------------------------------------------
+// CAlwaysOnAdapter::CanSetAsDefault
+// -----------------------------------------------------------------------------
+//
+TBool CAlwaysOnAdapter::CanSetAsDefault( TInt /*aItem*/ ) const
+    {
+    return EFalse;
+    }
+
+// -----------------------------------------------------------------------------
+// CAlwaysOnAdapter::SetAsDefault
+// -----------------------------------------------------------------------------
+//
+void CAlwaysOnAdapter::SetAsDefaultL( TInt /*aItem*/ )
+    {
+    // This shouldn't be called because CanSetAsDefault
+    // always returns EFalse.
+    }
+
+// -----------------------------------------------------------------------------
+// CAlwaysOnAdapter::VisitL
+// -----------------------------------------------------------------------------
+//
+void CAlwaysOnAdapter::VisitL( CWPCharacteristic& aCharacteristic )
+    {
+    switch( aCharacteristic.Type() )
+        {
+        case KWPVendorConfig:
+            {
+            // Init settings temporary storage
+            InitTempVConfigL();
+
+            // Accept characteristic
+            aCharacteristic.AcceptL( *this );
+
+            // Validate data
+            if( IsVConfigValid() )
+                {
+                // data is valid -> assign it to member variable
+                delete iVConfigData;
+                iVConfigData = iTempVConfigData;
+                iTempVConfigData = NULL;
+                }
+            else
+                {
+                // data is invalid
+                delete iTempVConfigData;
+                iTempVConfigData = NULL;
+                }
+            break;
+            }
+        default:
+            break;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CAlwaysOnAdapter::VisitL
+//
+//   Used to parse, the following always-on related provisioning settings
+//
+//   <characteristic type="VENDORCONFIG">
+//          <parm name="NAME" value="MRBLOBBY"/>
+//          <parm name="AWON-PDPC" value="11"/>
+//          <parm name="T-RETRY" value="100"/>
+//      </characteristic>
+//   </characteristic>
+// -----------------------------------------------------------------------------
+//
+void CAlwaysOnAdapter::VisitL( CWPParameter& aParameter )
+    {
+    switch( aParameter.ID() )
+        {
+        case EWPParameterName:
+            iTempVConfigData->iName.Set( aParameter.Value() );
+            break;
+        case EWPNamedParameter:
+            {
+            if( aParameter.Name().Compare( KAlwaysOnAwonPdpcStr ) == 0 )
+                {
+                TInt awonPdpcTemp( KErrNotFound );
+                ParseIntegerL( aParameter.Value(), awonPdpcTemp );
+                ParseAwonPdpcValuesL( awonPdpcTemp );
+                }
+            else if( aParameter.Name().Compare( KAlwaysOnTRetryStr ) == 0 )
+                {
+                ParseIntegerL( aParameter.Value(), iTempVConfigData->iTRetry );
+                }
+            break;
+            }
+        default:
+            break;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CAlwaysOnAdapter::VisitLinkL
+// -----------------------------------------------------------------------------
+//
+void CAlwaysOnAdapter::VisitLinkL( CWPCharacteristic& /*aCharacteristic*/ )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CAlwaysOnAdapter::IsVConfigValid
+// -----------------------------------------------------------------------------
+//
+TBool CAlwaysOnAdapter::IsVConfigValid()
+    {
+    TBool validity( ETrue );
+
+    // Validity check:
+    //
+    // T-Retry must be >= 0
+    //      ** 0 means infinity
+    //      ** > 0 is retry timer value in seconds
+    if( iTempVConfigData->iTRetry < 0 )
+        {
+        validity = EFalse;
+        }
+
+    // AWON-PDPC
+    //      ** Allowed awon-pdpc values are speficied in the beginning of file
+    // There is no need to validate AWON-PDPC because if parsing has succeeded
+    // the values are inside correct range.
+
+    return validity;
+    }
+
+// -----------------------------------------------------------------------------
+// CAlwaysOnAdapter::InitTempVConfigL
+// -----------------------------------------------------------------------------
+//
+void CAlwaysOnAdapter::InitTempVConfigL()
+    {
+    delete iTempVConfigData;
+    iTempVConfigData = NULL;
+    iTempVConfigData = new ( ELeave ) TAlwaysOnVConfigAdapterData;
+
+    // Initialize iTempVConfigData's members
+    iTempVConfigData->iName.Set( KNullDesC );
+    TInt temp( 0 );
+    User::LeaveIfError(
+        iPdpCenrep->Get( KPDPContextManagerEnableWhenHome, temp ) );
+    iTempVConfigData->iAwonPdpcHPLMN = TBool( temp );
+    User::LeaveIfError(
+        iPdpCenrep->Get( KPDPContextManagerEnableWhenRoaming, temp ) );
+    iTempVConfigData->iAwonPdpcVPLMN = TBool( temp );
+    User::LeaveIfError( iPdpCenrep->Get( KPDPContextManagerRetryTimer,
+                                iTempVConfigData->iTRetry ) );
+
+    }
+
+// -----------------------------------------------------------------------------
+// CAlwaysOnAdapter::ParseIntegerL
+// -----------------------------------------------------------------------------
+//
+void CAlwaysOnAdapter::ParseIntegerL( const TDesC& aPtr, TInt& aInt )
+    {
+    TLex lex( aPtr );
+    User::LeaveIfError( lex.Val( aInt ) );
+    }
+
+// -----------------------------------------------------------------------------
+// CAlwaysOnAdapter::ParseAwonPdpcValuesL
+// -----------------------------------------------------------------------------
+//
+void CAlwaysOnAdapter::ParseAwonPdpcValuesL( TInt aInt )
+    {
+    switch( aInt )
+        {
+        case KAwonPdpc_Off3G_Off2G:
+            iTempVConfigData->iAwonPdpcHPLMN = EFalse;
+            iTempVConfigData->iAwonPdpcVPLMN = EFalse;
+            break;
+        case KAwonPdpc_Off3G_On2G:
+            iTempVConfigData->iAwonPdpcHPLMN = EFalse;
+            iTempVConfigData->iAwonPdpcVPLMN = ETrue;
+            break;
+        case KAwonPdpc_On3G_Off2G:
+            iTempVConfigData->iAwonPdpcHPLMN = ETrue;
+            iTempVConfigData->iAwonPdpcVPLMN = EFalse;
+            break;
+        case KAwonPdpc_On3G_On2G:
+            iTempVConfigData->iAwonPdpcHPLMN = ETrue;
+            iTempVConfigData->iAwonPdpcVPLMN = ETrue;
+            break;
+        default:
+            User::Leave( KErrNotSupported );
+            break;
+        }
+    }
+
+//  End of File