diff -r 13d7c31c74e0 -r b183ec05bd8c omaprovisioning/provisioning/StreamingAdapter/Src/Streamingadapter.cpp --- a/omaprovisioning/provisioning/StreamingAdapter/Src/Streamingadapter.cpp Thu Aug 19 10:44:50 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,543 +0,0 @@ -/* -* 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: Handles streaming app settings in OMA provisioning. -* -*/ - - -// INCLUDE FILES -#include -#include -#include -#include -#include -#include -#include -#include - -#include "WPAdapterUtil.h" -#include "StreamingAdapter.h" -#include "ProvisioningDebug.h" - -// CONSTANTS -#if ( defined (__WINS__) || defined (__WINSCW) ) // this different on hw - _LIT( KAdapterName, "WPStreamingAdapterResource" ); -#else - _LIT( KAdapterName, "WPStreamingAdapter" ); -#endif -_LIT(KMaxBandwidthStr,"MAX-BANDWIDTH"); -_LIT(KMaxUdpPortStr,"MAX-UDP-PORT"); -_LIT(KMinUdpPortStr,"MIN-UDP-PORT"); -_LIT(KStreamingAppId, "554"); - -const TInt KInvalidValue = -1; -const TInt KProxyEnabled = 1; - -const TInt KMinUDPPort = 1024; //6970; -const TInt KMaxUDPPort = 65535; //32000; -const TInt KDefaultMinUDPPort = 6970; -const TInt KDefaultMaxUDPPort = 32000; - -const TInt KBandwidthValue1 = 9050; -const TInt KBandwidthValue2 = 13400; -const TInt KBandwidthValue3 = 18100; -const TInt KBandwidthValue4 = 26800; -const TInt KBandwidthValue5 = 27150; -const TInt KBandwidthValue6 = 40200; - -// MODULE DATA STRUCTURES -struct TStreamingAdapterData - { - TPtrC iName; - TInt iMaxBw; - TInt iMinUdpPort; - TInt iMaxUdpPort; - CWPCharacteristic* iNapDef; - }; - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CStreamingAdapter::CStreamingAdapter -// C++ default constructor can NOT contain any code, that -// might leave. -// ----------------------------------------------------------------------------- -// -CStreamingAdapter::CStreamingAdapter() - { - } - -// ----------------------------------------------------------------------------- -// CStreamingAdapter::ConstructL -// Symbian 2nd phase constructor can leave. -// ----------------------------------------------------------------------------- -// -void CStreamingAdapter::ConstructL() - { - FLOG( _L( "[Provisioning] CStreamingAdapter::ConstructL:" ) ); - - TFileName fileName; - Dll::FileName( fileName ); - iTitle = WPAdapterUtil::ReadHBufCL( fileName, - KAdapterName, - R_STREAMING_ADAPTER_TITLE ); - - FLOG( _L( "[Provisioning] CStreamingAdapter::ConstructL: Done" ) ); - } - -// ----------------------------------------------------------------------------- -// CStreamingAdapter::NewL -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -CStreamingAdapter* CStreamingAdapter::NewL() - { - CStreamingAdapter* self = new(ELeave) CStreamingAdapter; - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - - return self; - } - -// ----------------------------------------------------------------------------- -// CStreamingAdapter::~CStreamingAdapter -// Destructor -// ----------------------------------------------------------------------------- -// -CStreamingAdapter::~CStreamingAdapter() - { - delete iTitle; - delete iCurrentData; - delete iTempData; - delete iModel; - } - -// ----------------------------------------------------------------------------- -// CStreamingAdapter::ItemCount -// ----------------------------------------------------------------------------- -// -TInt CStreamingAdapter::ItemCount() const - { - // If ItemCount() returns zero, the adapter is unloaded at startup. - // SummaryTitle(), SummaryText(), SaveL(), SetAsDefaultL() and - // CanSetAsDefault() are called ItemCount() times - return iCurrentData ? 1 : 0; - } - -// ----------------------------------------------------------------------------- -// CStreamingAdapter::SummaryTitle -// ----------------------------------------------------------------------------- -// -const TDesC16& CStreamingAdapter::SummaryTitle(TInt /*aIndex*/) const - { - return *iTitle; - } - -// ----------------------------------------------------------------------------- -// CStreamingAdapter::SummaryText -// ----------------------------------------------------------------------------- -// -const TDesC16& CStreamingAdapter::SummaryText(TInt /*aIndex*/) const - { - return iCurrentData->iName; - } - -// ----------------------------------------------------------------------------- -// CStreamingAdapter::DetailsL -// ----------------------------------------------------------------------------- -// -TInt CStreamingAdapter::DetailsL(TInt /*aItem*/, MWPPairVisitor& /*aVisitor*/) - { - // Detail view is a feature for later release. - return KErrNotSupported; - } - -// ----------------------------------------------------------------------------- -// CStreamingAdapter::SaveL -// ----------------------------------------------------------------------------- -// -void CStreamingAdapter::SaveL( TInt /*aItem*/ ) - { - FLOG( _L( "[Provisioning] CStreamingAdapter::SaveL:" ) ); - - __ASSERT_DEBUG( iCurrentData->iNapDef, User::Leave( KErrCorrupt ) ); - - InitSettingsModelL(); - - // Load default values - iModel->LoadSettingsL(EConfigDefault); - - // Set max bandwidth value if valid - if (iCurrentData->iMaxBw != KInvalidValue) - { - iModel->SetMaxBandwidth(iCurrentData->iMaxBw, EBearerGPRS); - } - - // Set udp port range if valid - if (iCurrentData->iMinUdpPort != KInvalidValue && - iCurrentData->iMaxUdpPort != KInvalidValue) - { - iModel->SetMinUDPPort(iCurrentData->iMinUdpPort); - iModel->SetMaxUDPPort(iCurrentData->iMaxUdpPort); - } - - // Get the IAP id - - CCommsDatabase* commDb = CCommsDatabase::NewL(EDatabaseTypeIAP); - CleanupStack::PushL(commDb); - CApDataHandler* apDataHandler = CApDataHandler::NewLC(*commDb); - CApAccessPointItem* apItem = CApAccessPointItem::NewLC(); - - TPckgBuf uid; - TBool proxyDefined(EFalse); - TBool apDefined(EFalse); - TBool apWithoutProxyDefined(EFalse); - - for (TInt i(0); iCurrentData->iNapDef->Data(i).Length() == uid.MaxLength() - && !(proxyDefined && apWithoutProxyDefined); i++) - { - uid.Copy(iCurrentData->iNapDef->Data(i)); - - apDataHandler->AccessPointDataL(uid(), *apItem); - - TBool useProxy(EFalse); - apItem->ReadBool(EApProxyUseProxy, useProxy); - - if (!apDefined || (!useProxy && !apWithoutProxyDefined)) - { - iModel->SetDefaultAp(uid()); - apDefined = ETrue; - - iSavedID.Copy(uid); - - if (!useProxy) - { - apWithoutProxyDefined = ETrue; - } - } - - if (!proxyDefined && useProxy) - { - // Get proxy port - TUint32 proxyPort(0); - apItem->ReadUint(EApProxyPortNumber, proxyPort); - - // Get proxy host name - const HBufC* proxyHost = apItem->ReadConstLongTextL( - EApProxyServerAddress); - - if(*proxyHost != KNullDesC && proxyPort <= 65535) - { - iModel->SetProxyHostNameL(*proxyHost); - iModel->SetProxyPort(static_cast(proxyPort)); - iModel->SetProxyMode(KProxyEnabled); - - proxyDefined = ETrue; - } - } - } - - CleanupStack::PopAndDestroy(3); // apItem & apDataHandler & commDb - - iModel->StoreSettingsL(); - - FLOG( _L( "[Provisioning] CStreamingAdapter::SaveL: Done" ) ); - } - -// ----------------------------------------------------------------------------- -// CStreamingAdapter::CanSetAsDefault -// ----------------------------------------------------------------------------- -// -TBool CStreamingAdapter::CanSetAsDefault(TInt /*aItem*/) const - { - return EFalse; - } - -// ----------------------------------------------------------------------------- -// CStreamingAdapter::SetAsDefault -// ----------------------------------------------------------------------------- -// -void CStreamingAdapter::SetAsDefaultL(TInt /*aItem*/) - { - // This shouldn't be called because CanSetAsDefault - // always returns EFalse. - } - -// ----------------------------------------------------------------------------- -// CStreamingAdapter::VisitL -// ----------------------------------------------------------------------------- -// -void CStreamingAdapter::VisitL(CWPCharacteristic& aCharacteristic) - { - switch(aCharacteristic.Type()) - { - case KWPApplication: - // Create new iTempData - if (iTempData) - { - delete iTempData; - iTempData = NULL; - } - - iTempData = new (ELeave) TStreamingAdapterData; - - // Initialize iTempData's members - iTempData->iName.Set(KNullDesC); - iTempData->iMaxBw = KInvalidValue; - iTempData->iMinUdpPort = KInvalidValue; - iTempData->iMaxUdpPort = KInvalidValue; - iTempData->iNapDef = NULL; - - // Accept characteristic - aCharacteristic.AcceptL(*this); - - // Check iAppId and validate data - if (iAppId == KStreamingAppId && IsValid()) - { - // iAppId is correct and data is valid - delete iCurrentData; - iCurrentData = iTempData; - iTempData = NULL; - } - else - { - // iAppId is incorrect or data is invalid - delete iTempData; - iTempData = NULL; - } - break; - default: - break; - } - } - -// ----------------------------------------------------------------------------- -// CStreamingAdapter::VisitL -// ----------------------------------------------------------------------------- -// -void CStreamingAdapter::VisitL(CWPParameter& aParameter) - { - // Check the contents of whole characteristic before overwriting iMaxBw, - // iMinUdpPort and iMaxUdpPort. Might be looking at the wrong application - // characteristic - - __ASSERT_DEBUG(iTempData, User::Leave(KErrCorrupt)); - - TInt value; - switch(aParameter.ID()) - { - case EWPParameterAppID: - iAppId.Set(aParameter.Value()); - break; - case EWPParameterName: - if (iTempData->iName == KNullDesC) - { - iTempData->iName.Set(aParameter.Value()); - } - break; - case EWPNamedParameter: - { - if( aParameter.Name().Compare( KMaxBandwidthStr ) == 0 - && !ParseIntegerL( aParameter.Value(), value ) ) - { - iTempData->iMaxBw = value; - } - else if( aParameter.Name().Compare( KMaxUdpPortStr ) == 0 - && !ParseIntegerL( aParameter.Value(), value ) ) - { - iTempData->iMaxUdpPort = value; - } - else if( aParameter.Name().Compare( KMinUdpPortStr ) == 0 - && !ParseIntegerL( aParameter.Value(), value ) ) - { - iTempData->iMinUdpPort = value; - } - break; - } - default: - break; - } - } - -// ----------------------------------------------------------------------------- -// CStreamingAdapter::VisitLinkL -// ----------------------------------------------------------------------------- -// -void CStreamingAdapter::VisitLinkL(CWPCharacteristic& aCharacteristic) - { - // Here again, do not overwrite iPXLogical before you're sure - // you're looking at the correct APPLICATION - - __ASSERT_DEBUG(iTempData, User::Leave(KErrCorrupt)); - - switch(aCharacteristic.Type()) - { - //intentional fall-through - case KWPNapDef: - case KWPPxLogical: - iTempData->iNapDef = &aCharacteristic; - break; - default: - break; - } - } - -// ----------------------------------------------------------------------------- -// CStreamingAdapter::ContextExtension -// ----------------------------------------------------------------------------- -// -TInt CStreamingAdapter::ContextExtension(MWPContextExtension*& aExtension) - { - aExtension = this; - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// CStreamingAdapter::SaveDataL -// ----------------------------------------------------------------------------- -// -const TDesC8& CStreamingAdapter::SaveDataL(TInt /*aIndex*/) const - { - return iSavedID; - } - -// ----------------------------------------------------------------------------- -// CStreamingAdapter::DeleteL -// ----------------------------------------------------------------------------- -// -void CStreamingAdapter::DeleteL(const TDesC8& aSaveData) - { - TUint32 id; - - InitSettingsModelL(); - - iModel->GetDefaultAp(id); - - TPckgBuf pckg; - pckg.Copy(aSaveData); - - if (id == pckg()) - { - iModel->LoadSettingsL(EConfigDefault); - iModel->StoreSettingsL(); - } - } - -// ----------------------------------------------------------------------------- -// CStreamingAdapter::Uid -// ----------------------------------------------------------------------------- -// -TUint32 CStreamingAdapter::Uid() const - { - return iDtor_ID_Key.iUid; - } - -// ----------------------------------------------------------------------------- -// CStreamingAdapter::IsValid -// ----------------------------------------------------------------------------- -// -TBool CStreamingAdapter::IsValid() - { - TBool validity(EFalse); - - if (iTempData->iNapDef) - { - // Validity checks for min and max UDP port values - if (iTempData->iMinUdpPort < KMinUDPPort) - { - iTempData->iMinUdpPort = KDefaultMinUDPPort; - } - - if (iTempData->iMaxUdpPort > KMaxUDPPort) - { - iTempData->iMaxUdpPort = KDefaultMaxUDPPort; - } - - if (iTempData->iMinUdpPort > iTempData->iMaxUdpPort) - { - iTempData->iMinUdpPort = KInvalidValue; - iTempData->iMaxUdpPort = KInvalidValue; - } - - // Validity check for max bandwidth value - switch (iTempData->iMaxBw) - { - case KBandwidthValue1: - case KBandwidthValue2: - case KBandwidthValue3: - case KBandwidthValue4: - case KBandwidthValue5: - case KBandwidthValue6: - // iMaxBw is valid - break; - default: - // iMaxBw is invalid - iTempData->iMaxBw = KInvalidValue; - break; - } - - validity = ETrue; - } - - return validity; - } - -// ----------------------------------------------------------------------------- -// CStreamingAdapter::ParseIntegerL -// ----------------------------------------------------------------------------- -// -TInt CStreamingAdapter::ParseIntegerL(const TDesC& aPtr, TInt& aInt) - { - TLex lex(aPtr); - return lex.Val(aInt); - } - -// ----------------------------------------------------------------------------- -// CStreamingAdapter::Cleanup -// ----------------------------------------------------------------------------- -// -void CStreamingAdapter::Cleanup( TAny* aAny ) - { - RImplInfoPtrArray* implArray = - reinterpret_cast< RImplInfoPtrArray*> ( aAny ); - implArray->ResetAndDestroy(); - implArray->Close(); - } - -// ----------------------------------------------------------------------------- -// CStreamingAdapter::InitSettingsModelL -// ----------------------------------------------------------------------------- -// -void CStreamingAdapter::InitSettingsModelL() - { - FLOG( _L( "[Provisioning] CStreamingAdapter::InitSettingsModelL:" ) ); - - if ( !iModel ) - { - RImplInfoPtrArray impl; - CleanupStack::PushL( TCleanupItem( Cleanup, &impl ) ); - CMPSettingsModel::ListImplementationsL( impl ); - if( impl.Count() > 0 ) - { - FLOG( _L( "[Provisioning] CStreamingAdapter::InitSettingsModelL: Creating CMPSettingsModel" ) ); - // using the first available implementation - iModel= CMPSettingsModel::NewL( impl[0]->ImplementationUid() ); - FLOG( _L( "[Provisioning] CStreamingAdapter::InitSettingsModelL: Creating CMPSettingsModel Done" ) ); - } - CleanupStack::PopAndDestroy(); // implArray - } - } - -// End of File