diff -r 3ce708148e4d -r 4490afcb47b1 omadm/omadmextensions/adapters/nsmldinternet/src/NSmlWLanAdapter.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/omadm/omadmextensions/adapters/nsmldinternet/src/NSmlWLanAdapter.cpp Thu Jan 07 12:39:15 2010 +0200 @@ -0,0 +1,3952 @@ +/* +* Copyright (c) 2002-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: Wlan Adapter +* +*/ + + + +#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS +#include +#endif +#include "NSmlWLanAdapter.h" +#include "NSmlWlanSettings.h" +#include "nsmldebug.h" +#include +#include +#include +#include +#include +#include + + +#ifndef __WINS__ +// This lowers the unnecessary compiler warning (armv5) to remark. +// "Warning: #174-D: expression has no effect..." is caused by +// DBG_ARGS8 macro in no-debug builds. +#pragma diag_remark 174 +#endif + +//----------------------------------------------------------------------------- +// CNSmlWLanAdapter* CNSmlWLanAdapter::NewL( ) +//----------------------------------------------------------------------------- +CNSmlWLanAdapter* CNSmlWLanAdapter::NewL( MSmlDmCallback* aDmCallback,CCommsDatabase& aDatabase ) + { + _DBG_FILE("CNSmlWLanAdapter::NewL(): begin"); + + CNSmlWLanAdapter* self = NewLC( aDmCallback, aDatabase ); + CleanupStack::Pop( self ); + + _DBG_FILE("CNSmlWLanAdapter::NewL(): end"); + return self; + } + +//----------------------------------------------------------------------------- +// CNSmlWLanAdapter* CNSmlWLanAdapter::NewLC( ) +//----------------------------------------------------------------------------- +CNSmlWLanAdapter* CNSmlWLanAdapter::NewLC( MSmlDmCallback* aDmCallback, CCommsDatabase& aDatabase ) + { + _DBG_FILE("CNSmlWLanAdapter::NewLC(): begin"); + + CNSmlWLanAdapter* self = new(ELeave) CNSmlWLanAdapter(aDmCallback); + CleanupStack::PushL( self ); + + self->iCallBack = aDmCallback; + self->ConstructL( aDatabase ); + + _DBG_FILE("CNSmlWLanAdapter::NewLC(): end"); + return self; + } + +//----------------------------------------------------------------------------- +// void CNSmlWLanAdapter::ConstructL( ) +// Second phase constructor +//----------------------------------------------------------------------------- +void CNSmlWLanAdapter::ConstructL( CCommsDatabase& aDatabase ) + { + _DBG_FILE("CNSmlWLanAdapter::ConstructL(): begin"); + + iWlanSettings = CWlanSettings::NewL( aDatabase ); + iBuffer = new (ELeave) CArrayFixFlat (KNSmlWepKeyGranularity); + iSettings = new (ELeave) TWlanSettings; + iEAPSettings = new (ELeave) EAPSettings; + + _DBG_FILE("CNSmlWLanAdapter::ConstructL(): end"); + } + +//----------------------------------------------------------------------------- +// CNSmlWLanAdapter::CNSmlWLanAdapter( ) +// Constructor +//----------------------------------------------------------------------------- +CNSmlWLanAdapter::CNSmlWLanAdapter( TAny* aEcomArguments ) + : CSmlDmAdapter(aEcomArguments) + { + _DBG_FILE("CNSmlWLanAdapter::CNSmlWLanAdapter(): begin"); + _DBG_FILE("CNSmlWLanAdapter::CNSmlWLanAdapter(): end"); + } + +//----------------------------------------------------------------------------- +// CNSmlWLanAdapter::~CNSmlWLanAdapter( ) +// Destructor +//----------------------------------------------------------------------------- +CNSmlWLanAdapter::~CNSmlWLanAdapter( ) + { + _DBG_FILE("CNSmlWLanAdapter::~CNSmlWLanAdapter(): begin"); + + if ( iBuffer ) + { + + for( TInt index=0; indexCount(); index++ ) + { + delete iBuffer->At(index).iUri; + delete iBuffer->At(index).iData; + + iBuffer->Delete(index); + } + + iBuffer->Reset(); + delete iBuffer; + + } + delete iWlanSettings; + delete iSettings; + + TRAP_IGNORE( DeleteEAPStructL() ); + + for ( TInt i = 0 ; i < iEAPBuffer.Count() ; i++ ) + { + iEAPBuffer[i]->iStatusRefArray.Close(); + iEAPBuffer[i]->iEAPSettings->iEncapsulatedEAPTypes.Close(); + iEAPBuffer[i]->iEAPSettings->iCipherSuites.Close(); + delete iEAPBuffer[i]->iEAPSettings; + iEAPBuffer[i]->iEAPSettings = NULL; + } + iEAPBuffer.ResetAndDestroy(); + + TInt count = iSecondaryBuffer.Count(); + for( TInt index=0; indexSetGet(); + aclTypes->SetAdd(); // 041208 Added + aclTypes->SetDelete( ); + aclTypes->SetReplace( ); + + TSmlDmAccessTypes accessTypesAll; + accessTypesAll.SetGet( ); + accessTypesAll.SetDelete( ); + accessTypesAll.SetAdd( ); + accessTypesAll.SetReplace( ); + + TSmlDmAccessTypes accessTypesNoDelete; + accessTypesNoDelete.SetGet( ); + accessTypesNoDelete.SetAdd( ); + accessTypesNoDelete.SetReplace( ); + + TSmlDmAccessTypes accessTypesGetAdd; + accessTypesGetAdd.SetGet( ); + accessTypesGetAdd.SetAdd(); + + TSmlDmAccessTypes accessTypesGetAddDel; + accessTypesGetAddDel.SetGet(); + accessTypesGetAddDel.SetAdd(); + accessTypesGetAddDel.SetDelete(); + //WLAN + MSmlDmDDFObject& rootNode = aDDF.AddChildObjectL( KNSmlWLanNodeName ); + FillNodeInfoL( rootNode, + accessTypesGetAdd, + MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::ENode, + KNSmlEmpty ); + + //WLAN/ + MSmlDmDDFObject& wlanNode = rootNode.AddChildObjectGroupL( ); + FillNodeInfoL( wlanNode, + accessTypesGetAddDel, + MSmlDmDDFObject::EOne, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::ENode, + KNSmlEmpty ); + + //WLAN//SSID + MSmlDmDDFObject& ssid = wlanNode.AddChildObjectL( KNSmlWLanSsid ); + FillNodeInfoL( ssid, + accessTypesNoDelete, + MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::EChr, + KNSmlEmpty ); + + //WLAN//UsedSSID + MSmlDmDDFObject& usedSsid = wlanNode.AddChildObjectL( KNSmlWLanUsedSsid ); + FillNodeInfoL( usedSsid, + accessTypesNoDelete, + MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::EChr, + KNSmlEmpty ); + + //WLAN//SSIDHidden + MSmlDmDDFObject& ssidHidden = wlanNode.AddChildObjectL( KNSmlWLanSsidHidden ); + FillNodeInfoL( ssidHidden, + accessTypesNoDelete, + MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::EBool, + KNSmlEmpty ); + + //WLAN//NetworkMode + MSmlDmDDFObject& networkMode = wlanNode.AddChildObjectL( KNSmlWLanNetworkMode ); + FillNodeInfoL( networkMode, + accessTypesNoDelete, + MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::EChr, + KNSmlEmpty ); + + //WLAN//SecurityMode + MSmlDmDDFObject& securityMode = wlanNode.AddChildObjectL( KNSmlWLanSecurityMode ); + FillNodeInfoL( securityMode, + accessTypesNoDelete, + MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::EChr, + KNSmlEmpty ); + + //WLAN//UseWPAPSK + MSmlDmDDFObject& useWPAPSK = wlanNode.AddChildObjectL( KNSmlWLanUseWPAPSK ); + FillNodeInfoL( useWPAPSK, + accessTypesNoDelete, + MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::EBool, + KNSmlEmpty ); + + //WLAN//WPAPreSharedKey + MSmlDmDDFObject& wpaPreSharedKey = wlanNode.AddChildObjectL( KNSmlWLanWpaPreSharedKey ); + FillNodeInfoL( wpaPreSharedKey, + accessTypesNoDelete, + MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::EBin, + KNSmlEmpty ); + + //WLAN//WLANEAPList + MSmlDmDDFObject& wlanEapList = wlanNode.AddChildObjectL( KNSmlWLanEapList ); + FillNodeInfoL( wlanEapList, + accessTypesNoDelete, + MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::EChr, + KNSmlEmpty ); + + //WLAN//WEPKeyIndex + MSmlDmDDFObject& wepKeyIndex = wlanNode.AddChildObjectL( KNSmlWLanWepIndex ); + FillNodeInfoL( wepKeyIndex, + accessTypesNoDelete, + MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::EInt, + KNSmlEmpty ); + + //WLAN//WEPAuthMode + MSmlDmDDFObject& wlanWepAuthMode = wlanNode.AddChildObjectL( KNSmlWLanAuthMode ); + FillNodeInfoL( wlanWepAuthMode, + accessTypesNoDelete, + MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::EInt, + KNSmlEmpty ); + + //WLAN//WEPKey/ + MSmlDmDDFObject& wepKeyRoot = wlanNode.AddChildObjectL( KNSmlWLanWepKey ); + FillNodeInfoL( wepKeyRoot, + accessTypesNoDelete, + MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::ENode, + KNSmlEmpty ); + + //WLAN//WEPKey/ + MSmlDmDDFObject& wepKey = wepKeyRoot.AddChildObjectGroupL( ); + FillNodeInfoL( wepKey, + accessTypesGetAdd, + MSmlDmDDFObject::EOneOrN, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::ENode, + KNSmlEmpty ); + + //WLAN//WEPKey//WEPKeyID + MSmlDmDDFObject& wepKeyId = wepKey.AddChildObjectL( KNSmlWLanWepKeyId ); + FillNodeInfoL( wepKeyId, + accessTypesNoDelete, + MSmlDmDDFObject::EOne, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::EInt, + KNSmlEmpty ); + + //WLAN//WEPKey//Data + MSmlDmDDFObject& data = wepKey.AddChildObjectL( KNSmlWLanWepKeyData ); + FillNodeInfoL( data, + accessTypesNoDelete, + MSmlDmDDFObject::EOne, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::EBin, + KNSmlEmpty ); + + + //WLAN//SecondarySSID/ + MSmlDmDDFObject& secondarySSidRoot = wlanNode.AddChildObjectL( KNSmlWLanSecSsid ); + FillNodeInfoL( secondarySSidRoot, + accessTypesGetAdd, + MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::ENode, + KNSmlEmpty ); + + //WLAN//SecondarySSID/ + MSmlDmDDFObject& secondarySSid = secondarySSidRoot.AddChildObjectGroupL( ); + FillNodeInfoL( secondarySSid, + accessTypesGetAddDel, + MSmlDmDDFObject::EOneOrN, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::ENode, + KNSmlEmpty ); + + //WLAN//SecondarySSID//SSID + MSmlDmDDFObject& secSsidId = secondarySSid.AddChildObjectL( KNSmlWLanSsid ); + FillNodeInfoL( secSsidId, + accessTypesNoDelete, + MSmlDmDDFObject::EOne, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::EChr, + KNSmlEmpty ); + + //WLAN//SecondarySSID//UsedSSID + MSmlDmDDFObject& secUsedSsidId = secondarySSid.AddChildObjectL( KNSmlWLanUsedSsid ); + FillNodeInfoL( secUsedSsidId, + accessTypesNoDelete, + MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::EChr, + KNSmlEmpty ); + + //WLAN//EAP/ + MSmlDmDDFObject& eapRoot = wlanNode.AddChildObjectL( KNSmlWLanEap ); + FillNodeInfoL( eapRoot, + accessTypesGetAdd, + MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::ENode, + KNSmlEmpty ); + + //WLAN//EAP/ + MSmlDmDDFObject& eap = eapRoot.AddChildObjectGroupL( ); + FillNodeInfoL( eap, + accessTypesGetAdd, + MSmlDmDDFObject::EOneOrN, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::ENode, + KNSmlEmpty ); + + //WLAN//EAP//EAPType + MSmlDmDDFObject& eapType = eap.AddChildObjectL( KNSmlWLanEapType ); + FillNodeInfoL( eapType, + accessTypesNoDelete, + MSmlDmDDFObject::EOne, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::EChr, + KNSmlEmpty ); + + //WLAN//EAP//Username + MSmlDmDDFObject& eapUsername = eap.AddChildObjectL( KNSmlWLanUsername ); + FillNodeInfoL( eapUsername, + accessTypesNoDelete, + MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::EChr, + KNSmlEmpty ); + + //WLAN//EAP//Password + MSmlDmDDFObject& eapPassword = eap.AddChildObjectL( KNSmlWLanPassword ); + FillNodeInfoL( eapPassword, + accessTypesNoDelete, + MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::EChr, + KNSmlEmpty ); + + //WLAN//EAP//Realm + MSmlDmDDFObject& eapRealm = eap.AddChildObjectL( KNSmlWLanRealm ); + FillNodeInfoL( eapRealm, + accessTypesNoDelete, + MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::EChr, + KNSmlEmpty ); + + //WLAN//EAP//UsePseudonym + MSmlDmDDFObject& eapPseudo = eap.AddChildObjectL( KNSmlWLanUsePseudonym ); + FillNodeInfoL( eapPseudo, + accessTypesNoDelete, + MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::EBool, + KNSmlEmpty ); + + //WLAN//EAP//Encapsulation + // Encapsulation is not supported using this parameter. It is done + // with */EAP/EAPIdxxx-yyy/* where xxx is the encapsulated and yyy the encapsulating method. + /*MSmlDmDDFObject& eapEncapsulation = eap.AddChildObjectL( KNSmlWLanEncapsulation ); + FillNodeInfoL( eapEncapsulation, + accessTypesNoDelete, + MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::EChr, + KNSmlEmpty ); */ + + //WLAN//EAP//VerifyCertRealm + MSmlDmDDFObject& eapVerifyCertRealm = eap.AddChildObjectL( KNSmlWLanVerifyCertRealm ); + FillNodeInfoL( eapVerifyCertRealm, + accessTypesNoDelete, + MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::EBool, + KNSmlEmpty ); + + //WLAN//EAP//RequireClientAuthentication + MSmlDmDDFObject& eapRequireClientAuthentication = eap.AddChildObjectL( KNSmlWLanRequireClientAuthentication ); + FillNodeInfoL( eapRequireClientAuthentication, + accessTypesNoDelete, + MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::EBool, + KNSmlEmpty ); + + //WLAN//EAP//SessionValidityTime + MSmlDmDDFObject& eapSessionValidityTime = eap.AddChildObjectL( KNSmlWLanSessionValidityTime ); + FillNodeInfoL( eapSessionValidityTime, + accessTypesNoDelete, + MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::EChr, + KNSmlEmpty ); + + //WLAN//EAP//CipherSuite + MSmlDmDDFObject& eapCipherSuite = eap.AddChildObjectL( KNSmlWLanCipherSuite ); + FillNodeInfoL( eapCipherSuite, + accessTypesNoDelete, + MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::EChr, + KNSmlEmpty ); + + //WLAN//EAP//AllowPEAPv0 + MSmlDmDDFObject& eapAllowPEAPv0 = eap.AddChildObjectL( KNSmlWLanAllowPEAPv0 ); + FillNodeInfoL( eapAllowPEAPv0, + accessTypesNoDelete, + MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::EBool, + KNSmlEmpty ); + + //WLAN//EAP//AllowPEAPv1 + MSmlDmDDFObject& eapAllowPEAPv1 = eap.AddChildObjectL( KNSmlWLanAllowPEAPv1 ); + FillNodeInfoL( eapAllowPEAPv1, + accessTypesNoDelete, + MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::EBool, + KNSmlEmpty ); + + //WLAN//EAP//AllowPEAPv2 + MSmlDmDDFObject& eapAllowPEAPv2 = eap.AddChildObjectL( KNSmlWLanAllowPEAPv2 ); + FillNodeInfoL( eapAllowPEAPv2, + accessTypesNoDelete, + MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::EBool, + KNSmlEmpty ); + +#ifdef FF_WLAN_EXTENSIONS + + //WLAN//EAP//AuthProvModeAllowed + MSmlDmDDFObject& authProvMode = eap.AddChildObjectL( KNSmlWLanAuthProvMode ); + FillNodeInfoL( authProvMode, + accessTypesNoDelete, + MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::EBool, + KNSmlEmpty ); + + //WLAN//EAP//UnauthProvModeAllowed + MSmlDmDDFObject& unauthProvMode = eap.AddChildObjectL( KNSmlWLanUnauthProvMode ); + FillNodeInfoL( unauthProvMode, + accessTypesNoDelete, + MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::EBool, + KNSmlEmpty ); + + //WLAN//EAP//PACGroupReference + MSmlDmDDFObject& pacGroupRef = eap.AddChildObjectL( KNSmlWLanPACGroupRef ); + FillNodeInfoL( pacGroupRef, + accessTypesNoDelete, + MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::EChr, + KNSmlEmpty ); + + //WLAN//EAP//WarnADHPNoPAC + MSmlDmDDFObject& warnADHPNoPAC = eap.AddChildObjectL( KNSmlWLanWarnADHPNoPAC ); + FillNodeInfoL( warnADHPNoPAC, + accessTypesNoDelete, + MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::EBool, + KNSmlEmpty ); + + //WLAN//EAP//WarnADHPNoMatchingPAC + MSmlDmDDFObject& warnADHPNoMatchingPAC = eap.AddChildObjectL( KNSmlWLanWarnADHPNoMatchPAC ); + FillNodeInfoL( warnADHPNoMatchingPAC, + accessTypesNoDelete, + MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::EBool, + KNSmlEmpty ); + + //WLAN//EAP//WarnNotDefaultServer + MSmlDmDDFObject& warnNoDefServ = eap.AddChildObjectL( KNSmlWLanWarnNotDefaultSrv ); + FillNodeInfoL( warnNoDefServ, + accessTypesNoDelete, + MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::EBool, + KNSmlEmpty ); + +#endif + + + //WLAN//EAP//Certificate + MSmlDmDDFObject& eapCertificateRoot = eap.AddChildObjectL( KNSmlWLanCertificate ); + FillNodeInfoL( eapCertificateRoot, + accessTypesGetAdd, + MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::ENode, + KNSmlEmpty ); + + //WLAN//EAP//Certificate/ + MSmlDmDDFObject& eapCertificate = eapCertificateRoot.AddChildObjectGroupL( ); + FillNodeInfoL( eapCertificate, + accessTypesGetAdd, + MSmlDmDDFObject::EOneOrMore, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::ENode, + KNSmlEmpty ); + + //WLAN//EAP//Certificate//IssuerName + MSmlDmDDFObject& eapIssuerName = eapCertificate.AddChildObjectL( KNSmlWLanIssuerName ); + FillNodeInfoL( eapIssuerName, + accessTypesNoDelete, + MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::EChr, + KNSmlEmpty ); + + //WLAN//EAP//Certificate//SubjectName + MSmlDmDDFObject& eapSubjectName = eapCertificate.AddChildObjectL( KNSmlWLanSubjectName ); + FillNodeInfoL( eapSubjectName, + accessTypesNoDelete, + MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::EChr, + KNSmlEmpty ); + + //WLAN//EAP//Certificate//CertType + MSmlDmDDFObject& eapCertType = eapCertificate.AddChildObjectL( KNSmlWLanCertType ); + FillNodeInfoL( eapCertType, + accessTypesNoDelete, + MSmlDmDDFObject::EOne, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::EChr, + KNSmlEmpty ); + + //WLAN//EAP//Certificate//SerialNumber + MSmlDmDDFObject& eapSerialNumber = eapCertificate.AddChildObjectL( KNSmlWLanSerialNumber ); + FillNodeInfoL( eapSerialNumber, + accessTypesNoDelete, + MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::EChr, + KNSmlEmpty ); + + //WLAN//EAP//Certificate//SubjectKeyId + MSmlDmDDFObject& eapSubjectKeyId = eapCertificate.AddChildObjectL( KNSmlWLanSubjectKeyId ); + FillNodeInfoL( eapSubjectKeyId, + accessTypesNoDelete, + MSmlDmDDFObject::EOne, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::EChr, + KNSmlEmpty ); + + //WLAN//EAP//Certificate//Fingerprint + MSmlDmDDFObject& eapFingerprint = eapCertificate.AddChildObjectL( KNSmlWLanFingerprint ); + FillNodeInfoL( eapFingerprint, + accessTypesNoDelete, + MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic, + MSmlDmDDFObject::EChr, + KNSmlEmpty ); + + CleanupStack::PopAndDestroy(); //aclTypes + + _DBG_FILE("CNSmlWLanAdapter::DDFStructureL(): end"); + } + +//----------------------------------------------------------------------------- +// CNSmlWLanAdapter* CNSmlWLanAdapter::AddLeafObjectL( const TDesC& aURI,const +// TDesC& aParentLUID, const TDesC8& aObject, const TDesC& aType, +// const TInt aStatusRef ) +//----------------------------------------------------------------------------- +void CNSmlWLanAdapter::AddLeafObjectL( const TDesC8& aURI, + const TDesC8& aParentLUID, + const TDesC8& aObject, + const TDesC8& /*aType*/, + const TInt aStatusRef ) + { + DBG_ARGS8(_S8("CNSmlWLanAdapter::AddLeafObjectL - <%S> <%S> <%S>"), &aURI, &aParentLUID, &aObject ); + + TInt uriSegs = NumOfUriSegs( aURI ); + TInt luid = GetIdFromLuid( aParentLUID ); + TInt err(KErrNone); + TPtrC8 lastUriSeg = GetLastUriSeg( aURI ); + + TInt eapIndex(0); + + TInt eapId = GetEAPIdFromUri( aURI ); + if (eapId == KErrNotFound) + { + _DBG_FILE("CNSmlWLanAdapter::AddLeafObjectL(): Non-EAP setting."); + err = iWlanSettings->GetWlanSettings( luid, *iSettings ); + } + else + { + _DBG_FILE("CNSmlWLanAdapter::AddLeafObjectL(): EAP setting."); + TInt encapsEapId = GetEncapsEAPIdFromUri( aURI ); + if ( encapsEapId == KErrNotFound ) + { + _DBG_FILE("CNSmlWLanAdapter::AddLeafObjectL(): Does not have encapsulation id xx-xx."); + encapsEapId = EAPSettings::EEapNone; + } + TInt i(0); + // This is EAP addition. Check if the buffer for this EAP already exists + for ( i = 0 ; i < iEAPBuffer.Count() ; i++ ) + { + if ( eapId == iEAPBuffer[i]->iEAPSettings->iEAPType + && encapsEapId == iEAPBuffer[i]->iEncapsulatingEAPId ) + { + // The correct buffer was found. + _DBG_FILE("CNSmlWLanAdapter::AddLeafObjectL(): Found existing buffer."); + eapIndex = i; + break; + } + } + if ( i == iEAPBuffer.Count() ) + { + DBG_ARGS8(_S8("CNSmlWLanAdapter::AddLeafObjectL(): No buffer found. Create new: <%d>-<%d>"), eapId, encapsEapId ); + // Buffer was not found. Create new. + TInt WLANServiceId = GetServiceIdFromUriL ( aURI ); + + if ( WLANServiceId == KErrNotFound ) + { + _DBG_FILE("CNSmlWLanAdapter::AddLeafObjectL(): Could not find WLAN service ID from URI."); + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound ); + return; + } + + TNSmlEAPBufferElement* buffer = new (ELeave) TNSmlEAPBufferElement; + CleanupStack::PushL( buffer ); + + buffer->iEAPSettings = new (ELeave) EAPSettings; + CleanupStack::PushL( buffer->iEAPSettings ); + + buffer->iEAPSettings->iEAPType = static_cast ( eapId ); + buffer->iWLANServiceId = WLANServiceId; + buffer->iEncapsulatingEAPId = static_cast( encapsEapId ); + iEAPBuffer.AppendL(buffer); + + CleanupStack::Pop( buffer->iEAPSettings ); + CleanupStack::Pop( buffer ); + + eapIndex = iEAPBuffer.Count() - 1; + } + } + if( err != KErrNone ) + { + DBG_ARGS(_S16("CNSmlWLanAdapter::AddLeafObjectL - ErrorCode <%D>"), err ); + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound ); + return; + } + + else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/WEPKey/*/*") ) != KErrNotFound && uriSegs==9 ) + { + TInt wepKeyId = GetWepKeyIdFromLuid( aParentLUID ); + + if( wepKeyId != KErrNotFound ) + { + if( lastUriSeg.Match( KNSmlWLanWepKeyData ) != KErrNotFound ) + { + switch( wepKeyId ) + { + case 1: + iSettings->WepKey1 = aObject; + break; + case 2: + iSettings->WepKey2 = aObject; + break; + case 3: + iSettings->WepKey3 = aObject; + break; + case 4: + iSettings->WepKey4 = aObject; + break; + default: + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound ); + return; + } + } + else if( lastUriSeg.Match( KNSmlWLanWepKeyId ) != KErrNotFound ) + { + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk ); + return; + } + else + { + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound ); + return; + } + } + + else + { + TInt index = -1; + + for( TInt i=0; iCount(); i++ ) + { + if( aURI.Find( iBuffer->At(i).iUri->Des() ) != KErrNotFound ) + { + index = i; + break; + } + } + if( index < 0 ) + { + wepKeyId = GetWepKeyIdFromUri( aURI ); + + TBuf8<80> addLUID; // AP//NapDef//WLAN//WEPKey/WKIdnnn + addLUID.AppendNum( wepKeyId ); + addLUID.AppendNumFixedWidth( luid, EDecimal, 3 ); + + DBG_ARGS8(_S8("WLanAdapter::AddleafObject - mapping uri: <%S> to luid: <%S>"), &aURI, &addLUID ); + DBG_ARGS8(_S8("Parametrit - <%S> <%S>"), &aURI, &addLUID ); + iCallBack->SetMappingL(aURI, addLUID); + if( lastUriSeg.Match( KNSmlWLanWepKeyData ) != KErrNotFound ) + { + switch( wepKeyId ) + { + case 1: + iSettings->WepKey1 = aObject; + break; + case 2: + iSettings->WepKey2 = aObject; + break; + case 3: + iSettings->WepKey3 = aObject; + break; + case 4: + iSettings->WepKey4 = aObject; + break; + default: + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound ); + return; + } + } + else if( lastUriSeg.Match( KNSmlWLanWepKeyId ) != KErrNotFound ) + { + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk ); + return; + } + else + { + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound ); + return; + } + } + else + { + //Add WepKeyId and execute buffer + if( lastUriSeg.Match( KNSmlWLanWepKeyId ) != KErrNotFound ) + { + iBuffer->At(index).iWepKeyId = DesToInt( aObject ); + iBuffer->At(index).iIdStatusRef = aStatusRef; + +// ExecuteBufferL( ); (JPLA-6M29NR caused error in WEPkey Data if buffer is executed here) + return; + } + + else if( lastUriSeg.Match( KNSmlWLanWepKeyData ) != KErrNotFound ) + { + iBuffer->At(index).iData = aObject.AllocLC(); + iBuffer->At(index).iDataSet = ETrue; + CleanupStack::Pop( ); //iBuffer->At(index).iData + iBuffer->At(index).iDataStatusRef = aStatusRef; + return; + } + else + { + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound ); + return; + } + } + } + } + + else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/*") ) != KErrNotFound && uriSegs==7 ) + { + if( lastUriSeg.Compare(KNSmlWLanSsid) == 0 ) + { + TInt returnValue = CnvUtfConverter::ConvertToUnicodeFromUtf8( iSettings->SSID, aObject ); + DBG_ARGS(_S16("WLanAdapter::ssid convert: <%D>"), returnValue ); + if (returnValue != KErrNone) + { + // setting the default value to the network name + iSettings->SSID = TPtrC(KNSmlWLanDefaultSSID); + DBG_ARGS(_S16("CNSmlWLanAdapter::AddLeafObjectL SSID - ErrorCode <%D>"), returnValue ); + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError ); + return; + } + } + + else if( lastUriSeg.Compare(KNSmlWLanUsedSsid) == 0 ) + { + TInt returnValue = CnvUtfConverter::ConvertToUnicodeFromUtf8( iSettings->UsedSSID, aObject ); + DBG_ARGS(_S16("WLanAdapter::usedSsid convert: <%D>"), returnValue ); + } + + else if( lastUriSeg.Compare(KNSmlWLanSsidHidden) == 0 ) + { + if( aObject.MatchF( _L8("True")) != KErrNotFound ) + { + iSettings->ScanSSID = 1; + } + else + { + iSettings->ScanSSID = 0; + } + } + + else if( lastUriSeg.Compare(KNSmlWLanNetworkMode) == 0 ) + { + if( aObject.MatchF( _L8("ADHOC") ) != KErrNotFound ) + { + iSettings->ConnectionMode = EAdhoc; + } + + else if( aObject.MatchF( _L8("Infrastructure") ) != KErrNotFound ) + { + iSettings->ConnectionMode = EInfrastructure; + } + else + { + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EInvalidObject ); + return; + } + } + + else if( lastUriSeg.Compare(KNSmlWLanSecurityMode) == 0 ) + { + if( aObject.MatchF( _L8("NONE") ) != KErrNotFound ) + { + iSettings->SecurityMode = EAllowUnsecure; + } + else if( aObject.MatchF( _L8("WEP") ) != KErrNotFound ) + { + iSettings->SecurityMode = EWep; + } + else if( aObject.MatchF( _L8("8021X") ) != KErrNotFound ) + { + iSettings->SecurityMode = EWlan8021x; + } + else if( aObject.MatchF( _L8("WPA") ) != KErrNotFound ) + { + iSettings->SecurityMode = EWpa; + } + else if( aObject.MatchF( _L8("WPA2") ) != KErrNotFound ) + { + iSettings->SecurityMode = EWpa2; + } + else + { + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EInvalidObject ); + return; + } + } + + else if( lastUriSeg.Compare( KNSmlWLanUseWPAPSK ) == 0 ) + { + if( aObject.MatchF( _L8("True")) != KErrNotFound ) + { + iSettings->UseWPAPSK = 1; + } + else + { + iSettings->UseWPAPSK = 0; + } + } + + else if( lastUriSeg.Compare(KNSmlWLanWpaPreSharedKey) == 0 ) + { + if(aObject.Length() > KMaxPSKLength) + { + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ETooLargeObject ); + return; + } + /*else if(aObject.Length() < KMinPSKLength) + { + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EInvalidObject ); + return; + }*/ + else + { + iSettings->WPAPreSharedKey = aObject; + } + } + + else if( lastUriSeg.Compare( KNSmlWLanEapList ) == 0 ) + { + TInt returnValue = CnvUtfConverter::ConvertToUnicodeFromUtf8( iSettings->EapList, aObject ); + DBG_ARGS(_S16("WLanAdapter::EapList convert: <%D>"), returnValue ); + } + + else if( lastUriSeg.Compare( KNSmlWLanAuthMode ) == 0 ) + { + if( aObject.MatchF( _L8("1")) != KErrNotFound ) + { + iSettings->AuthMode = EShared; + } + else + { + iSettings->AuthMode = EOpen; + } + } + + else if( lastUriSeg.Compare(KNSmlWLanWepIndex) == 0 ) + { + TInt32 actualIndex = DesToInt( aObject ); + if( actualIndex < 4 && actualIndex >= 0 ) + { + iSettings->WepIndex = actualIndex ; + } + else + { + if ( actualIndex > 3) + { + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ETooLargeObject ); + } + else + { + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError ); + } + return; + } + } + + else + { + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound ); + return; + } + } + + else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/SecondarySSID/*/*") ) != KErrNotFound && uriSegs == 9 ) + { + TSecondarySSID ssid; + ssid.Id = 0; + TUint32 id = GetSecSSIDFromUriL(aURI); + RArray secondaryList; + CleanupClosePushL( secondaryList ); + iWlanSettings->GetSecondarySSIDListL(luid, secondaryList); + TInt count = secondaryList.Count(); + for (TInt i=0;iiUri->Des() ) != KErrNotFound ) + { + index = i; + _DBG_FILE("CNSmlWLanAdapter::one indexis matched :-)"); + break; + } + } + if( index < 0 ) + { + _DBG_FILE("CNSmlWLanAdapter::one indexis matched :-)"); + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound ); + return; + } + else + { + DBG_ARGS8(_S8("CWlanadaptes::Execute Buffer - copying in buffer instead of giving 404 uri: object id : <%S>"), &aObject); + + if( lastUriSeg.Compare(KNSmlWLanSsid) == 0 ) + { + if ( aObject.Length() <= KMaxTextLength ) + { + iSecondaryBuffer[index]->ScannedId.Copy(aObject); + } + else + { + _DBG_FILE("CNSmlWLanAdapter::AddLeafObject - SecondarySSID too long"); + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError ); + return; + } + + } + else if (lastUriSeg.Compare(KNSmlWLanUsedSsid) == 0 ) + { + iSecondaryBuffer[index]->UsedId.Copy(aObject); + } + + } + + + } + + else + { + + if( lastUriSeg.Compare(KNSmlWLanSsid) == 0 ) + { + ssid.ScannedId.Copy(aObject); + } + else if (lastUriSeg.Compare(KNSmlWLanUsedSsid) == 0 ) + { + ssid.UsedId.Copy(aObject); + } + TInt retval = iWlanSettings->WriteSecondarySSIDL(luid, ssid, EFalse); + if (retval == KErrNone) + { + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk ); + } + else + { + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError ); + } + } + } + else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/EAP/*/*") ) != KErrNotFound && uriSegs == 9 ) + { + DBG_ARGS8(_S8("CNSmlWLanAdapter::AddLeafObjectL - EAP index: <%d>"), eapIndex ); + + if( lastUriSeg.Compare(KNSmlWLanEapType) == 0 ) + { + // Get EAP ID from URI instead of the value because the server gives the value + // incorrectly as the textual representation of the EAP method instead of the IANA number. + iEAPBuffer[eapIndex]->iEAPSettings->iEAPType = static_cast(GetEAPIdFromUri(aURI)); + } + else if (lastUriSeg.Compare(KNSmlWLanUsername) == 0) + { + TInt retval = CnvUtfConverter::ConvertToUnicodeFromUtf8( iEAPBuffer[eapIndex]->iEAPSettings->iUsername, aObject ); + if (retval == KErrNone) + { + iEAPBuffer[eapIndex]->iEAPSettings->iUsernamePresent = ETrue; + } + else + { + iEAPBuffer[eapIndex]->iEAPSettings->iUsername.Zero(); + DBG_ARGS(_S16("CNSmlWLanAdapter::AddLeafObjectL EAP username - ErrorCode <%D>"), retval ); + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError ); + return; + } + + } + else if (lastUriSeg.Compare(KNSmlWLanPassword) == 0) + { + TInt retval = CnvUtfConverter::ConvertToUnicodeFromUtf8( iEAPBuffer[eapIndex]->iEAPSettings->iPassword, aObject ); + if (retval == KErrNone) + { + iEAPBuffer[eapIndex]->iEAPSettings->iPasswordPresent = ETrue; + } + else + { + iEAPBuffer[eapIndex]->iEAPSettings->iPassword.Zero(); + DBG_ARGS(_S16("CNSmlWLanAdapter::AddLeafObjectL EAP password - ErrorCode <%D>"), retval ); + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError ); + return; + } + } + else if (lastUriSeg.Compare(KNSmlWLanRealm) == 0) + { + TInt retval = CnvUtfConverter::ConvertToUnicodeFromUtf8( iEAPBuffer[eapIndex]->iEAPSettings->iRealm, aObject ); + if (retval == KErrNone) + iEAPBuffer[eapIndex]->iEAPSettings->iRealmPresent = ETrue; + + } + else if (lastUriSeg.Compare(KNSmlWLanUsePseudonym) == 0) + { + if ( (aObject == KTrue) || (aObject == KTtrue) ) + iEAPBuffer[eapIndex]->iEAPSettings->iUsePseudonyms = ETrue; + else + iEAPBuffer[eapIndex]->iEAPSettings->iUsePseudonyms = EFalse; + + + iEAPBuffer[eapIndex]->iEAPSettings->iUsePseudonymsPresent = ETrue; + } + else if (lastUriSeg.Compare(KNSmlWLanEncapsulation) == 0) + { + TBuf8 dummy; + ConvertEAPStringToIds( aObject, dummy, iEAPBuffer[eapIndex]->iEncapsulatingEAPId ); + } + else if (lastUriSeg.Compare(KNSmlWLanVerifyCertRealm) == 0) + { + if ( (aObject == KTrue) || (aObject == KTtrue) ) + iEAPBuffer[eapIndex]->iEAPSettings->iVerifyServerRealm = ETrue; + else + iEAPBuffer[eapIndex]->iEAPSettings->iVerifyServerRealm = EFalse; + + + iEAPBuffer[eapIndex]->iEAPSettings->iVerifyServerRealmPresent = ETrue; + + } + else if (lastUriSeg.Compare(KNSmlWLanRequireClientAuthentication) == 0) + { + if ( (aObject == KTrue) || (aObject == KTtrue) ) + iEAPBuffer[eapIndex]->iEAPSettings->iRequireClientAuthentication = ETrue; + else + iEAPBuffer[eapIndex]->iEAPSettings->iRequireClientAuthentication = EFalse; + + + iEAPBuffer[eapIndex]->iEAPSettings->iRequireClientAuthenticationPresent = ETrue; + + } + else if (lastUriSeg.Compare(KNSmlWLanSessionValidityTime) == 0) + { + TLex8 lex(aObject); + TUint newVal; + TInt sesValErr = lex.Val(newVal); + // Check whether the conversion went ok + if ( sesValErr == KErrNone ) + { + iEAPBuffer[eapIndex]->iEAPSettings->iSessionValidityTime = newVal; + iEAPBuffer[eapIndex]->iEAPSettings->iSessionValidityTimePresent = ETrue; + } + else + { + // there were errors, let's leave the function and update status + DBG_ARGS(_S16("CNSmlWLanAdapter::AddLeafObjectL SessionValidityTime - ErrorCode <%D>"), sesValErr ); + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EInvalidObject ); + return; + } + } + else if (lastUriSeg.Compare(KNSmlWLanCipherSuite) == 0) + { + FillCipherSuitesL( aObject , eapIndex ); + } + else if (lastUriSeg.Compare(KNSmlWLanAllowPEAPv0) == 0) + { + if ( (aObject == KTrue) || (aObject == KTtrue) ) + iEAPBuffer[eapIndex]->iEAPSettings->iPEAPv0Allowed = ETrue; + else + iEAPBuffer[eapIndex]->iEAPSettings->iPEAPv0Allowed = EFalse; + + iEAPBuffer[eapIndex]->iEAPSettings->iPEAPVersionsPresent = ETrue; + } + else if (lastUriSeg.Compare(KNSmlWLanAllowPEAPv1) == 0) + { + if ( (aObject == KTrue) || (aObject == KTtrue) ) + iEAPBuffer[eapIndex]->iEAPSettings->iPEAPv1Allowed = ETrue; + else + iEAPBuffer[eapIndex]->iEAPSettings->iPEAPv1Allowed = EFalse; + + iEAPBuffer[eapIndex]->iEAPSettings->iPEAPVersionsPresent = ETrue; + + } + else if (lastUriSeg.Compare(KNSmlWLanAllowPEAPv2) == 0) + { + if ( (aObject == KTrue) || (aObject == KTtrue) ) + iEAPBuffer[eapIndex]->iEAPSettings->iPEAPv2Allowed = ETrue; + else + iEAPBuffer[eapIndex]->iEAPSettings->iPEAPv2Allowed = EFalse; + + iEAPBuffer[eapIndex]->iEAPSettings->iPEAPVersionsPresent = ETrue; + } + +#ifdef FF_WLAN_EXTENSIONS + else if (lastUriSeg.Compare(KNSmlWLanAuthProvMode) == 0) + { + if ( (aObject == KTrue) || (aObject == KTtrue) ) + iEAPBuffer[eapIndex]->iEAPSettings->iAuthProvModeAllowed = ETrue; + else + iEAPBuffer[eapIndex]->iEAPSettings->iAuthProvModeAllowed = EFalse; + + iEAPBuffer[eapIndex]->iEAPSettings->iAuthProvModeAllowedPresent = ETrue; + } + + + else if (lastUriSeg.Compare(KNSmlWLanUnauthProvMode) == 0) + { + if ( (aObject == KTrue) || (aObject == KTtrue) ) + iEAPBuffer[eapIndex]->iEAPSettings->iUnauthProvModeAllowed = ETrue; + else + iEAPBuffer[eapIndex]->iEAPSettings->iUnauthProvModeAllowed = EFalse; + + iEAPBuffer[eapIndex]->iEAPSettings->iUnauthProvModeAllowedPresent = ETrue; + } + + + else if (lastUriSeg.Compare(KNSmlWLanPACGroupRef) == 0) + { + TInt retval = CnvUtfConverter::ConvertToUnicodeFromUtf8( iEAPBuffer[eapIndex]->iEAPSettings->iPACGroupReference, aObject ); + if (retval == KErrNone) + iEAPBuffer[eapIndex]->iEAPSettings->iPACGroupReferencePresent = ETrue; + + } + + else if (lastUriSeg.Compare(KNSmlWLanWarnADHPNoPAC) == 0) + { + if ( (aObject == KTrue) || (aObject == KTtrue) ) + iEAPBuffer[eapIndex]->iEAPSettings->iWarnADHPNoPAC = ETrue; + else + iEAPBuffer[eapIndex]->iEAPSettings->iWarnADHPNoPAC = EFalse; + + iEAPBuffer[eapIndex]->iEAPSettings->iWarnADHPNoPACPresent = ETrue; + } + + + else if (lastUriSeg.Compare(KNSmlWLanWarnADHPNoMatchPAC) == 0) + { + if ( (aObject == KTrue) || (aObject == KTtrue) ) + iEAPBuffer[eapIndex]->iEAPSettings->iWarnADHPNoMatchingPAC = ETrue; + else + iEAPBuffer[eapIndex]->iEAPSettings->iWarnADHPNoMatchingPAC = EFalse; + + iEAPBuffer[eapIndex]->iEAPSettings->iWarnADHPNoMatchingPACPresent = ETrue; + } + + + else if (lastUriSeg.Compare(KNSmlWLanWarnNotDefaultSrv) == 0) + { + if ( (aObject == KTrue) || (aObject == KTtrue) ) + iEAPBuffer[eapIndex]->iEAPSettings->iWarnNotDefaultServer = ETrue; + else + iEAPBuffer[eapIndex]->iEAPSettings->iWarnNotDefaultServer = EFalse; + + iEAPBuffer[eapIndex]->iEAPSettings->iWarnNotDefaultServerPresent = ETrue; + } + + +#endif + + // Save the status reference + iEAPBuffer[eapIndex]->iStatusRefArray.AppendL(aStatusRef); + return; + } + else if (aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/EAP/*/Certificate/*/*") ) != KErrNotFound && uriSegs == 11) + { + TPtrC8 ptr = NSmlDmURI::ParentURI( aURI ); + + // Get the LUID from ptr2 + HBufC8* certLuid = iCallBack->GetLuidAllocL( ptr ); + + TInt certIndex = GetIdFromLuid( *certLuid ); + + delete certLuid; + + DBG_ARGS8(_S8("CNSmlWLanAdapter::AddLeafObjectL - cert index: <%d>, cert count: <%d>"), + certIndex, iEAPBuffer[eapIndex]->iEAPSettings->iCertificates.Count()); + + if ( iEAPBuffer[eapIndex]->iEAPSettings->iCertificates.Count() - 1 < certIndex ) + { + _DBG_FILE("CNSmlWLanAdapter::AddLeafObject - Certificate buffer does not exist. Create it."); + // The certificate buffer does not exist. Create a new one + CertificateEntry entry; + iEAPBuffer[eapIndex]->iEAPSettings->iCertificates.AppendL(entry); + iEAPBuffer[eapIndex]->iEAPSettings->iCertificatesPresent = ETrue; + + certIndex = iEAPBuffer[eapIndex]->iEAPSettings->iCertificates.Count() - 1; + + TBuf8<2> newLuid; + newLuid.Num( certIndex ); + + DBG_ARGS8(_S8("WLanAdapter::AddLeafObjectL - mapping uri: <%S> to luid: <%S>"), &aURI, &newLuid ); + iCallBack->SetMappingL( aURI, newLuid); + } + + if (lastUriSeg.Compare(KNSmlWLanIssuerName) == 0) + { + TInt retval = + CnvUtfConverter::ConvertToUnicodeFromUtf8( + iEAPBuffer[eapIndex]->iEAPSettings->iCertificates[certIndex].iIssuerName, aObject ); + if (retval == KErrNone) + iEAPBuffer[eapIndex]->iEAPSettings->iCertificates[certIndex].iIssuerNamePresent = ETrue; + } + else if (lastUriSeg.Compare(KNSmlWLanSubjectName) == 0) + { + TInt retval = CnvUtfConverter::ConvertToUnicodeFromUtf8( + iEAPBuffer[eapIndex]->iEAPSettings->iCertificates[certIndex].iSubjectName, aObject ); + if (retval == KErrNone) + iEAPBuffer[eapIndex]->iEAPSettings->iCertificates[certIndex].iSubjectNamePresent = ETrue; + } + else if (lastUriSeg.Compare(KNSmlWLanCertType) == 0) + { + iEAPBuffer[eapIndex]->iEAPSettings->iCertificates[certIndex].iCertType = (CertificateEntry::TCertType)DesToInt(aObject); + } + else if (lastUriSeg.Compare(KNSmlWLanSerialNumber) == 0) + { + TInt retval = CnvUtfConverter::ConvertToUnicodeFromUtf8( + iEAPBuffer[eapIndex]->iEAPSettings->iCertificates[certIndex].iSerialNumber, aObject ); + if (retval == KErrNone) + iEAPBuffer[eapIndex]->iEAPSettings->iCertificates[certIndex].iSerialNumberPresent = ETrue; + + } + else if (lastUriSeg.Compare(KNSmlWLanSubjectKeyId) == 0) + { + + // Define literals to search the subject key for possible 0X/0x beginning + _LIT(KHexIdLC, "0x"); + _LIT(KHexIdUC, "0X"); + TBuf<2> hexIdBuf; + // The lenght of the key given as input + TInt keyLen = aObject.Length(); + + // setting the given key to the key buffer + TBuf8 origKey = aObject; + origKey.SetLength(keyLen); + TBuf key; + TLex8 tmpByte; + TUint16 byte; + + // Remove possible spaces from the beginning + origKey.TrimLeft(); + + // the key should be atleast two chars long + if (origKey.Length() >= 2) + { + // Copy the two left most characters in to the buffer + hexIdBuf.Copy(origKey.Left(2)); + + // If the first characters are 0x or 0X, then thet should be ignored + if (hexIdBuf.Compare(KHexIdLC) == 0 + || hexIdBuf.Compare(KHexIdUC) == 0) + { + // delete two characters + origKey.Delete(0, 2); + } + } + + + // looping the subject key through, removing whitespaces + for (TInt i = 0; i < keyLen; i++) + { + // removing white spaces from the left side of the key + origKey.TrimLeft(); + // check that there are characters left + if (origKey.Length() >= 2) + { + // pick the two left most bytes from the key + tmpByte = origKey.Left(2); + // convert byte into binary format + err = tmpByte.Val(byte, EHex); + + // check whether conversion to decimal went ok + if (err != KErrNone) + { + // if there are problems, then leave the loop + break; + } + + // store the appended byte into the key variable + key.Append(byte); + // delete two characters from the left side of the character array in the buffer + origKey.Delete(0, 2); + } + else if ( origKey.Length() == 1 ) + { + // pick the left most byte from the key + tmpByte = origKey.Left(1); + // convert byte into binary format + err = tmpByte.Val(byte, EHex); + + // check whether conversion to decimal went ok + if (err != KErrNone) + { + // if there are problems, then leave the loop + break; + } + + // store the appended byte into the key variable + key.Append(byte); + // delete two characters from the left side of the character array in the buffer + origKey.Delete(0, 1); + } + else { + // leave the loop, no characters are left + break; + } + } + // store key value only if no errors occurred + if (err == KErrNone) + { + iEAPBuffer[eapIndex]->iEAPSettings->iCertificates[certIndex].iSubjectKeyID.Copy(key); + iEAPBuffer[eapIndex]->iEAPSettings->iCertificates[certIndex].iSubjectKeyIDPresent = ETrue; + } + else + { + // there were errors, let's leave the function and update status + DBG_ARGS(_S16("CNSmlWLanAdapter::AddLeafObjectL - ErrorCode <%D>"), err ); + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError ); + return; + } + } + else if (lastUriSeg.Compare(KNSmlWLanFingerprint) == 0) + { + TInt retval = CnvUtfConverter::ConvertToUnicodeFromUtf8( + iEAPBuffer[eapIndex]->iEAPSettings->iCertificates[certIndex].iThumbprint, aObject ); + if (retval == KErrNone) + iEAPBuffer[eapIndex]->iEAPSettings->iCertificates[certIndex].iThumbprintPresent = ETrue; + } + // Save the status reference + iEAPBuffer[eapIndex]->iStatusRefArray.AppendL(aStatusRef); + + return; + } + + if (eapId == KErrNotFound) + { + err = iWlanSettings->WriteWlanSettings( *iSettings ); + } + + if( err != KErrNone ) + { + DBG_ARGS(_S16("CNSmlWLanAdapter::AddLeafObjectL - ErrorCode <%D>"), err ); + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError ); + return; + } + + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk ); + + _DBG_FILE("CNSmlWLanAdapter::AddLeafObjectL(): end"); + } + +//----------------------------------------------------------------------------- +// CNSmlWLanAdapter* CNSmlWLanAdapter::UpdateLeafObjectL( const TDesC& aURI, +// const TDesC& aLUID, const TDesC8& aObject, const TDesC& aType, +// const TInt aStatusRef ) +//----------------------------------------------------------------------------- +void CNSmlWLanAdapter::UpdateLeafObjectL( const TDesC8& aURI, + const TDesC8& aLUID, + const TDesC8& aObject, + const TDesC8& aType, + const TInt aStatusRef ) + { + _DBG_FILE("CNSmlWLanAdapter::UpdateLeafObjectL(): begin"); + DBG_ARGS8(_S8("WLanAdapter::UpdateLeafObjectL - <%S> <%S> <%S>"), &aURI, &aLUID, &aObject ); + + AddLeafObjectL( aURI, aLUID, aObject, aType, aStatusRef ); + + _DBG_FILE("CNSmlWLanAdapter::UpdateLeafObjectL(): end"); + } + +//------------------------------------------------------------------------------ +// CNSmlWLanAdapter::UpdateLeafObjectL( const TDesC8& aURI, +// const TDesC8& aLUID, const TDesC8& aObject, const TDesC8& aType ) +//------------------------------------------------------------------------------ + +void CNSmlWLanAdapter::UpdateLeafObjectL( const TDesC8& /*aURI*/, + const TDesC8& /*aLUID*/, + RWriteStream*& /*aStream*/, + const TDesC8& /*aType*/, + TInt aStatusRef ) + { + _DBG_FILE("CNSmlWLanAdapter::UpdateLeafObjectL(): begin"); + iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError); + _DBG_FILE("CNSmlWLanAdapter::UpdateLeafObjectL(): end"); + } + +//----------------------------------------------------------------------------- +// CNSmlWLanAdapter* CNSmlWLanAdapter::DeleteObjectL( const TDesC8& aURI, +// const TDesC8& aLUID, const TInt aStatusRef ) +//----------------------------------------------------------------------------- +void CNSmlWLanAdapter::DeleteObjectL( const TDesC8& aURI, + const TDesC8& aLUID, + const TInt aStatusRef ) + { + _DBG_FILE("CNSmlWLanAdapter::DeleteObjectL(): begin"); + CSmlDmAdapter::TError status = CSmlDmAdapter::ENotFound; + + if( aLUID.Length() == 0 ) + { + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound ); + + _DBG_FILE("CNSmlWLanAdapter::DeleteObjectL(): end"); + return; + } + + TInt luid = GetIdFromLuid( aLUID ); + + + if( ( NumOfUriSegs( aURI ) < 6 ) + || (aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*") ) != KErrNotFound && NumOfUriSegs( aURI ) == 6 ) ) + { + TInt ret = iWlanSettings->DeleteWlanSettings( luid ); + + if( ret == KErrNone ) + { + status = CSmlDmAdapter::EOk; + } + else + { + status = CSmlDmAdapter::EError; + } + + } + else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/WEPKey") ) != KErrNotFound && NumOfUriSegs( aURI ) == 7 ) + { + // Individual WLAN settings cannot be deleted and this case should never happen. + // These are deleted through WLAN parent nodes. + status = CSmlDmAdapter::EError; + } + + else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/SecondarySSID/*"))!= KErrNotFound && NumOfUriSegs( aURI ) == 8 ) + { + _DBG_FILE("CNSmlWLanAdapter::DeleteObjectL(): matching SecondarySSID/*"); + //Check if the secondary SSID is present , if so delete that + TUint32 secid = GetSecSSIDFromUriL(aURI); + TInt retvalue( KErrNone ); + _DBG_FILE("CNSmlWLanAdapter::DeleteObjectL() before call to DeleteOneSecondarySSIDL "); + TRAPD(ssidError, retvalue = iWlanSettings->DeleteOneSecondarySSIDL(luid,secid)); + _DBG_FILE("CNSmlWLanAdapter::DeleteObjectL() After call to DeleteOneSecondarySSIDL "); + DBG_ARGS8(_S8("TRAP ERROR ssidError : Id = %d and retvalue eror = %d"), ssidError, retvalue); + + if(ssidError == KErrNone ) + { + _DBG_FILE("CNSmlWLanAdapter::DeleteObjectL() SSID trap KERRONONE"); + if(retvalue == KErrNone) + { + _DBG_FILE("CNSmlWLanAdapter::DeleteObjectL() retvalue also KERRONONE, so its deleted"); + status = CSmlDmAdapter::EOk; + } + + else if (retvalue == KErrNotFound) + { + status = CSmlDmAdapter::ENotFound; + _DBG_FILE("CNSmlWLanAdapter::DeleteObjectL() retvalue KErrNotFound :-("); + } + + else + { + _DBG_FILE("CNSmlWLanAdapter::DeleteObjectL() retvalue some error :-("); + status = CSmlDmAdapter::EError; + } + + + } + else + { + _DBG_FILE("CNSmlWLanAdapter::DeleteObjectL() trap error :-( "); + status = CSmlDmAdapter::EError; + } + + } + + else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/*") ) != KErrNotFound && NumOfUriSegs( aURI ) == 7 ) + { + // Individual WLAN settings cannot be deleted and this case should never happen. + // These are deleted through WLAN parent nodes. + status = CSmlDmAdapter::EError; + } + + else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/WEPKey/*") ) != KErrNotFound && NumOfUriSegs( aURI ) == 8 ) + { + // Individual WEP keys cannot be deleted and this case should never happen. + // These are deleted through WLAN parent nodes. + status = CSmlDmAdapter::EError; + } + + else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/WEPKey/*/Data") ) != KErrNotFound && NumOfUriSegs( aURI ) == 9 ) + { + // Individual WEP keys cannot be deleted and this case should never happen. + // These are deleted through WLAN parent nodes. + status = CSmlDmAdapter::EError; + } + + else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/EAP/*") ) != KErrNotFound && NumOfUriSegs( aURI ) == 8 ) + { + // Individual EAP settings cannot be deleted and this case should never happen. + // These are deleted through WLAN parent nodes. + status = CSmlDmAdapter::EError; + } + else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/EAP/*/*") ) != KErrNotFound && NumOfUriSegs( aURI ) == 9 ) + { + // Individual EAP settings cannot be deleted and this case should never happen. + // These are deleted through WLAN parent nodes. + status = CSmlDmAdapter::EError; + } + else if (aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/EAP/*/Certificate/*") ) != KErrNotFound && NumOfUriSegs( aURI ) == 10) + { + // Individual certificates are not allowed to be deleted and this case should never happen + // These are deleted through WLAN parent nodes. + status = CSmlDmAdapter::EError; + + } + else if (aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/EAP/*/Certificate/*/*") ) != KErrNotFound && NumOfUriSegs( aURI ) == 11) + { + // Individual certificate fields are not allowed to be deleted and this case should never happen. + // These are deleted through WLAN parent nodes. + status = CSmlDmAdapter::EError; + } + + iCallBack->SetStatusL( aStatusRef, status ); + + _DBG_FILE("CNSmlWLanAdapter::DeleteObjectL(): end"); + } + +//----------------------------------------------------------------------------- +// CNSmlWLanAdapter* CNSmlWLanAdapter::FetchLeafObjectL( const TDesC8& aURI, +// const TDesC8& aLUID, const TDesC8& aType, +// const TInt aResultsRef, const TInt aStatusRef ) +// not used. +//----------------------------------------------------------------------------- + +void CNSmlWLanAdapter::FetchLeafObjectSizeL( const TDesC8& /*aURI*/, + const TDesC8& /*aLUID*/, + const TDesC8& /*aType*/, + TInt /*aResultsRef*/, + TInt /*aStatusRef*/ ) + { + _DBG_FILE("CNSmlWLanAdapter::FetchLeafObjectSizeL(): begin"); + _DBG_FILE("CNSmlWLanAdapter::FetchLeafObjectSizeL(): end"); + return; +} + + +//----------------------------------------------------------------------------- +// CNSmlWLanAdapter* CNSmlWLanAdapter::FetchLeafObjectL( const TDesC8& aURI, +// const TDesC8& aLUID, const TDesC8& aType, +// const TInt aResultsRef, const TInt aStatusRef ) +//----------------------------------------------------------------------------- +void CNSmlWLanAdapter::FetchLeafObjectL( const TDesC8& /*aURI*/, + const TDesC8& /*aLUID*/, + const TDesC8& /*aType*/, + const TInt /*aResultsRef*/, + const TInt /*aStatusRef*/ ) + { + _DBG_FILE("CNSmlWLanAdapter::FetchLeafObjectL(): begin"); + _DBG_FILE("CNSmlWLanAdapter::FetchLeafObjectL(): end"); + + } + +//----------------------------------------------------------------------------- +// CNSmlWLanAdapter* CNSmlWLanAdapter::FetchLeafObjectL( const TDesC& aURI, +// const TDesC& aLUID, const TDesC& aType, +// const TInt aResultsRef, const TInt aStatusRef ) +//----------------------------------------------------------------------------- +CSmlDmAdapter::TError CNSmlWLanAdapter::FetchLeafObjectL( const TDesC8& aURI, + const TDesC8& aLUID, + const TDesC8& aType, + CBufBase& aObject ) + { + + _DBG_FILE("CNSmlWLanAdapter::FetchLeafObjectL(): begin"); + DBG_ARGS8(_S8("WLanAdapter::FetchLeafObjectL - <%S> <%S> <%S>"), &aURI, &aLUID, &aType); + + if(aLUID.Length()==0) + { + + _DBG_FILE("CNSmlWLanAdapter::FetchLeafObjectL(): ENotFound"); + return CSmlDmAdapter::ENotFound; + } + + CSmlDmAdapter::TError status = CSmlDmAdapter::ENotFound; + + // This luid is the service table id (Found from EAP node and parents) + TInt luid; + if ( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/EAP/*")) != KErrNotFound ) + { + luid = GetServiceIdFromUriL( aURI ); + } + else + { + // The luid supplied is ok + luid = GetIdFromLuid( aLUID ); + } + + TPtrC8 lastUriSeg = GetLastUriSeg( aURI ); + + TInt err = iWlanSettings->GetWlanSettings( luid, *iSettings ); + + if( err == KErrNotFound ) + { + + _DBG_FILE("CNSmlWLanAdapter::FetchLeafObjectL(): ENotFound"); + return CSmlDmAdapter::ENotFound; + } + + if( lastUriSeg.Compare( KNSmlWLanSsid ) == 0 ) + { + + if (aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/SecondarySSID/*")) != KErrNotFound) + { + RArray secondarySSIDs; + CleanupClosePushL( secondarySSIDs ); + iWlanSettings->GetSecondarySSIDListL(luid, secondarySSIDs); + TSecondarySSID ssid; + ssid.Id = 0; + TUint32 id = GetSecSSIDFromUriL(aURI); + TInt count = secondarySSIDs.Count(); + for (TInt i=0;iSize()); + TPtr8 dataPtr8 = data8->Des(); + //FFS + CnvUtfConverter::ConvertFromUnicodeToUtf8( dataPtr8, data->Des() ); + + aObject.InsertL( 0, dataPtr8 ); + status = CSmlDmAdapter::EOk; + + CleanupStack::PopAndDestroy( 2 ); //data, data8 + } + } + else + { + + HBufC* data = iSettings->SSID.AllocLC(); + HBufC8* data8 = HBufC8::NewLC(data->Size()); + TPtr8 dataPtr8 = data8->Des(); + //FFS + CnvUtfConverter::ConvertFromUnicodeToUtf8( dataPtr8, data->Des() ); + + aObject.InsertL( 0, dataPtr8 ); + status = CSmlDmAdapter::EOk; + + CleanupStack::PopAndDestroy( 2 ); //data, data8 + + } + + } + + else if( lastUriSeg.Compare( KNSmlWLanUsedSsid ) == 0 ) + { + + if (aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/SecondarySSID/*")) != KErrNotFound) + { + RArray secondarySSIDs; + CleanupClosePushL( secondarySSIDs ); + iWlanSettings->GetSecondarySSIDListL(luid, secondarySSIDs); + TSecondarySSID ssid; + ssid.Id = 0; + TUint32 id = GetSecSSIDFromUriL(aURI); + TInt count = secondarySSIDs.Count(); + for (TInt i=0;iSize()); + TPtr8 dataPtr8 = data8->Des(); + //FFS + CnvUtfConverter::ConvertFromUnicodeToUtf8( dataPtr8, data->Des() ); + + aObject.InsertL( 0, dataPtr8 ); + status = CSmlDmAdapter::EOk; + + CleanupStack::PopAndDestroy( 2 ); //data, data8 + } + } + else + { + + HBufC* data = iSettings->UsedSSID.AllocLC(); + HBufC8* data8 = HBufC8::NewLC(data->Size()); + TPtr8 dataPtr8 = data8->Des(); + //FFS + CnvUtfConverter::ConvertFromUnicodeToUtf8( dataPtr8, data->Des() ); + + aObject.InsertL( 0, dataPtr8 ); + status = CSmlDmAdapter::EOk; + + CleanupStack::PopAndDestroy( 2 ); //data, data8 + + } + + } + + else if( lastUriSeg.Compare( KNSmlWLanSsidHidden ) == 0 ) + { + if ( iSettings->ScanSSID == 1 ) + { + aObject.InsertL( 0, _L8("True" ) ); + } + else + { + aObject.InsertL( 0, _L8("False" ) ); + } + status = CSmlDmAdapter::EOk; + } + + + else if( lastUriSeg.Compare( KNSmlWLanNetworkMode ) == 0 ) + { + status = CSmlDmAdapter::EOk; + + switch( iSettings->ConnectionMode ) + { + case 0: + aObject.InsertL( 0, KNSmlWLanAdHoc8 ); + break; + case 1: + aObject.InsertL( 0, KNSmlWLanInfrastructure8 ); + break; + default: + status = CSmlDmAdapter::ENotFound; + break; + } + } + else if( lastUriSeg.Compare( KNSmlWLanSecurityMode ) == 0 ) + { + status = CSmlDmAdapter::EOk; + + switch( iSettings->SecurityMode ) + { + case EAllowUnsecure: + aObject.InsertL( 0, KNSmlWLanAllowUnsecure8 ); + break; + case EWep: + aObject.InsertL( 0, KNSmlWLanWep8 ); + break; + case EWlan8021x: + aObject.InsertL( 0, KNSmlWLan8021x8 ); + break; + case EWpa: + aObject.InsertL( 0, KNSmlWLanWpa8 ); + break; + case EWpa2: + aObject.InsertL( 0, KNSmlWLanWpa28 ); + break; + default: + status = CSmlDmAdapter::ENotFound; + break; + } + } + + else if( lastUriSeg.Compare( KNSmlWLanWpaPreSharedKey ) == 0 ) + { + aObject.InsertL( 0, iSettings->WPAPreSharedKey ); + status = CSmlDmAdapter::EOk; + } + + else if( lastUriSeg.Compare( KNSmlWLanUseWPAPSK ) == 0 ) + { + if ( iSettings->UseWPAPSK == 1 ) + { + aObject.InsertL( 0, _L8("True" ) ); + } + else + { + aObject.InsertL( 0, _L8("False" ) ); + } + status = CSmlDmAdapter::EOk; + } + + else if( lastUriSeg.Compare( KNSmlWLanWepIndex ) == 0 ) + { + HBufC8* data = IntToDes8LC( iSettings->WepIndex ); + aObject.InsertL( 0, data->Des() ); + + CleanupStack::PopAndDestroy( data ); //data + status = CSmlDmAdapter::EOk; + } + + else if( lastUriSeg.Compare( KNSmlWLanEapList ) == 0 ) + { + HBufC* data = iSettings->EapList.AllocLC(); + HBufC8* data8 = HBufC8::NewLC(data->Size()); + TPtr8 dataPtr8 = data8->Des(); + //FFS + CnvUtfConverter::ConvertFromUnicodeToUtf8( dataPtr8, data->Des() ); + + aObject.InsertL( 0, dataPtr8 ); + status = CSmlDmAdapter::EOk; + + CleanupStack::PopAndDestroy( 2 ); //data, data8 + + } + + else if( lastUriSeg.Compare( KNSmlWLanAuthMode ) == 0 ) + { + HBufC8* data = IntToDes8LC( iSettings->AuthMode ); + aObject.InsertL( 0, data->Des() ); + + CleanupStack::PopAndDestroy( data ); //data + status = CSmlDmAdapter::EOk; + } + + else if( lastUriSeg.Compare( KNSmlWLanWepKeyData ) == 0 ) + { + TInt wepKeyIndex = GetWepKeyIdFromLuid( aLUID ); + if(wepKeyIndex == KErrNotFound) + { + wepKeyIndex = GetWepKeyIdFromUri( aURI ); + TBuf8<80> addLUID; // AP//NapDef//WLAN//WEPKey/WKIdnnn + addLUID.AppendNum( wepKeyIndex ); + addLUID.AppendNumFixedWidth( luid, EDecimal, 3 ); + DBG_ARGS8(_S8("WLanAdapter::Fetchleaf object, set mapping uri: <%S> to luid: <%S>"), &aURI, &addLUID ); + DBG_ARGS8(_S8("Parametrit - <%S> <%S>"), &aURI, &addLUID ); + iCallBack->SetMappingL(aURI, addLUID); + + } + status = CSmlDmAdapter::EOk; + switch( wepKeyIndex ) + { + case 1: + aObject.InsertL( 0, iSettings->WepKey1 ); + break; + case 2: + aObject.InsertL( 0, iSettings->WepKey2 ); + break; + case 3: + aObject.InsertL( 0, iSettings->WepKey3 ); + break; + case 4: + aObject.InsertL( 0, iSettings->WepKey4 ); + break; + default: + status = CSmlDmAdapter::EError; + } + } + else if( lastUriSeg.Compare( KNSmlWLanWepKeyId ) == 0 ) + { + TInt wepKeyIndex = GetWepKeyIdFromLuid( aLUID ); + if(wepKeyIndex == KErrNotFound) + { + wepKeyIndex = GetWepKeyIdFromUri( aURI ); + TBuf8<80> addLUID; // AP//NapDef//WLAN//WEPKey/WKIdnnn + addLUID.AppendNum( wepKeyIndex ); + addLUID.AppendNumFixedWidth( luid, EDecimal, 3 ); + DBG_ARGS8(_S8("WLanAdapter::Fetchleaf object, set mapping uri: <%S> to luid: <%S>"), &aURI, &addLUID ); + DBG_ARGS8(_S8("Parametrit - <%S> <%S>"), &aURI, &addLUID ); + iCallBack->SetMappingL(aURI, addLUID); + } + if( wepKeyIndex > 0 ) + { + HBufC8* data = IntToDes8LC( wepKeyIndex ); + aObject.InsertL( 0, data->Des() ); + CleanupStack::PopAndDestroy( data ); //data + status = CSmlDmAdapter::EOk; + } + else + { + status = CSmlDmAdapter::EError; + } + } + + else if (aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/EAP/*")) != KErrNotFound) + { + TInt eapId = GetEAPIdFromUri(aURI); + + // Check if the id contains encapsulating type as well + TInt encapsEapId = GetEncapsEAPIdFromUri( aURI ); + if ( encapsEapId == KErrNotFound ) + { + encapsEapId = EAPSettings::EEapNone; + } + + ResetEAPStructL(); + + TInt err = iWlanSettings->GetEAPSettings( luid, eapId, encapsEapId, *iEAPSettings ); + if (err != KErrNone || iEAPSettings == NULL) + { + status = CSmlDmAdapter::EError; + } + else if (lastUriSeg.Compare( KNSmlWLanEapType ) == 0 ) + { + aObject.InsertL(0, *IntToDes8LC((TInt)iEAPSettings->iEAPType)); + CleanupStack::PopAndDestroy(); // IntToDes8LC + status = CSmlDmAdapter::EOk; + } + else if (lastUriSeg.Compare( KNSmlWLanUsername ) == 0 ) + { + if (iEAPSettings->iUsernamePresent) + { + DesToBufferL(aObject, iEAPSettings->iUsername); + } + status = CSmlDmAdapter::EOk; + } + else if (lastUriSeg.Compare( KNSmlWLanPassword ) == 0 ) + { + if (iEAPSettings->iPasswordPresent) + { + DesToBufferL(aObject, iEAPSettings->iPassword); + } + status = CSmlDmAdapter::EOk; + } + else if (lastUriSeg.Compare( KNSmlWLanRealm ) == 0 ) + { + if (iEAPSettings->iRealmPresent) + { + DesToBufferL(aObject, iEAPSettings->iRealm); + } + status = CSmlDmAdapter::EOk; + } + else if (lastUriSeg.Compare( KNSmlWLanUsePseudonym ) == 0 ) + { + if (iEAPSettings->iUsePseudonymsPresent && iEAPSettings->iUsePseudonyms) + { + aObject.InsertL(0, KTrue); + } + else + { + aObject.InsertL(0, KFalse); + } + status = CSmlDmAdapter::EOk; + } + else if (lastUriSeg.Compare( KNSmlWLanEncapsulation ) == 0 ) + { + if ( encapsEapId == EAPSettings::EEapPeap ) + { + aObject.InsertL( 0, KEAPPEAP); + } + else if ( encapsEapId == EAPSettings::EEapTtls ) + { + aObject.InsertL( 0, KEAPTTLS); + } + status = CSmlDmAdapter::EOk; + } + else if (lastUriSeg.Compare( KNSmlWLanVerifyCertRealm ) == 0 ) + { + if (iEAPSettings->iVerifyServerRealmPresent && iEAPSettings->iVerifyServerRealm) + { + aObject.InsertL(0, KTrue); + } + else + { + aObject.InsertL(0, KFalse); + } + status = CSmlDmAdapter::EOk; + } + else if (lastUriSeg.Compare( KNSmlWLanRequireClientAuthentication ) == 0 ) + { + if (iEAPSettings->iRequireClientAuthenticationPresent && iEAPSettings->iRequireClientAuthentication) + { + aObject.InsertL(0, KTrue); + } + else + { + aObject.InsertL(0, KFalse); + } + status = CSmlDmAdapter::EOk; + } + else if (lastUriSeg.Compare( KNSmlWLanSessionValidityTime ) == 0 ) + { + if (iEAPSettings->iSessionValidityTimePresent) + { + aObject.InsertL(0, *IntToDes8LC((TInt)iEAPSettings->iSessionValidityTime)); + CleanupStack::PopAndDestroy(); // IntToDes8LC + } + status = CSmlDmAdapter::EOk; + } + else if (lastUriSeg.Compare( KNSmlWLanCipherSuite ) == 0 ) + { + FillCipherSuiteBufferL(aObject); + status = CSmlDmAdapter::EOk; + } + else if (lastUriSeg.Compare( KNSmlWLanAllowPEAPv0 ) == 0 ) + { + if (iEAPSettings->iPEAPVersionsPresent && iEAPSettings->iPEAPv0Allowed) + { + aObject.InsertL(0, KTrue); + } + else + { + aObject.InsertL(0, KFalse); + } + status = CSmlDmAdapter::EOk; + } + else if (lastUriSeg.Compare( KNSmlWLanAllowPEAPv1 ) == 0 ) + { + if (iEAPSettings->iPEAPVersionsPresent && iEAPSettings->iPEAPv1Allowed) + { + aObject.InsertL(0, KTrue); + } + else + { + aObject.InsertL(0, KFalse); + } + status = CSmlDmAdapter::EOk; + } + else if (lastUriSeg.Compare( KNSmlWLanAllowPEAPv2 ) == 0 ) + { + if (iEAPSettings->iPEAPVersionsPresent && iEAPSettings->iPEAPv2Allowed) + { + aObject.InsertL(0, KTrue); + } + else + { + aObject.InsertL(0, KFalse); + } + status = CSmlDmAdapter::EOk; + } + + + +#ifdef FF_WLAN_EXTENSIONS + else if (lastUriSeg.Compare(KNSmlWLanAuthProvMode) == 0) + { + if (iEAPSettings->iAuthProvModeAllowedPresent && iEAPSettings->iAuthProvModeAllowed) + { + aObject.InsertL(0, KTrue); + } + else + { + aObject.InsertL(0, KFalse); + } + status = CSmlDmAdapter::EOk; + } + + + else if (lastUriSeg.Compare(KNSmlWLanUnauthProvMode) == 0) + { + if (iEAPSettings->iUnauthProvModeAllowedPresent && iEAPSettings->iUnauthProvModeAllowed) + { + aObject.InsertL(0, KTrue); + } + else + { + aObject.InsertL(0, KFalse); + } + status = CSmlDmAdapter::EOk; + } + + else if (lastUriSeg.Compare(KNSmlWLanPACGroupRef) == 0) + { + if (iEAPSettings->iPACGroupReferencePresent) + { + DesToBufferL(aObject, iEAPSettings->iPACGroupReference); + } + status = CSmlDmAdapter::EOk; + } + + else if (lastUriSeg.Compare(KNSmlWLanWarnADHPNoPAC) == 0) + { + if (iEAPSettings->iWarnADHPNoPACPresent && iEAPSettings->iWarnADHPNoPAC) + { + aObject.InsertL(0, KTrue); + } + else + { + aObject.InsertL(0, KFalse); + } + status = CSmlDmAdapter::EOk; + } + + + else if (lastUriSeg.Compare(KNSmlWLanWarnADHPNoMatchPAC) == 0) + { + if (iEAPSettings->iWarnADHPNoMatchingPACPresent && iEAPSettings->iWarnADHPNoMatchingPAC) + { + aObject.InsertL(0, KTrue); + } + else + { + aObject.InsertL(0, KFalse); + } + status = CSmlDmAdapter::EOk; + } + + + + else if (lastUriSeg.Compare(KNSmlWLanWarnNotDefaultSrv) == 0) + { + if (iEAPSettings->iWarnNotDefaultServerPresent && iEAPSettings->iWarnNotDefaultServer) + { + aObject.InsertL(0, KTrue); + } + else + { + aObject.InsertL(0, KFalse); + } + status = CSmlDmAdapter::EOk; + } + +#endif + + + else if (lastUriSeg.Compare( KNSmlWLanIssuerName ) == 0 ) + { + status = CSmlDmAdapter::ENotFound; + + TInt certId = GetCertificateIdFromUri(aURI); + + if ( iEAPSettings->iCertificatesPresent + && iEAPSettings->iCertificates.Count() >= certId + && certId != KErrNotFound ) + { + if (iEAPSettings->iCertificates[certId-1].iIssuerNamePresent) + { + aObject.InsertL(0, ConvertTo8LC(iEAPSettings->iCertificates[certId-1].iIssuerName)); + CleanupStack::PopAndDestroy(); // ConvertTo8LC + status = CSmlDmAdapter::EOk; + } + } + } + else if (lastUriSeg.Compare( KNSmlWLanSubjectName ) == 0 ) + { + status = CSmlDmAdapter::ENotFound; + + TInt certId = GetCertificateIdFromUri(aURI); + + if ( iEAPSettings->iCertificatesPresent + && iEAPSettings->iCertificates.Count() >= certId + && certId != KErrNotFound ) + { + if (iEAPSettings->iCertificates[certId-1].iSubjectNamePresent) + { + aObject.InsertL(0, ConvertTo8LC(iEAPSettings->iCertificates[certId-1].iSubjectName)); + CleanupStack::PopAndDestroy(); // ConvertTo8LC + status = CSmlDmAdapter::EOk; + } + } + } + else if (lastUriSeg.Compare( KNSmlWLanCertType ) == 0 ) + { + status = CSmlDmAdapter::ENotFound; + + TInt certId = GetCertificateIdFromUri(aURI); + + if ( iEAPSettings->iCertificatesPresent + && iEAPSettings->iCertificates.Count() >= certId + && certId != KErrNotFound ) + { + aObject.InsertL(0, *IntToDes8LC(iEAPSettings->iCertificates[certId-1].iCertType)); + CleanupStack::PopAndDestroy(); // IntToDes8LC + status = CSmlDmAdapter::EOk; + } + } + else if (lastUriSeg.Compare( KNSmlWLanSerialNumber ) == 0 ) + { + status = CSmlDmAdapter::ENotFound; + + TInt certId = GetCertificateIdFromUri(aURI); + + if ( iEAPSettings->iCertificatesPresent + && iEAPSettings->iCertificates.Count() >= certId + && certId != KErrNotFound ) + { + if (iEAPSettings->iCertificates[certId-1].iSerialNumberPresent) + { + aObject.InsertL(0, ConvertTo8LC(iEAPSettings->iCertificates[certId-1].iSerialNumber)); + CleanupStack::PopAndDestroy(); // ConvertTo8LC + status = CSmlDmAdapter::EOk; + } + } + } + else if (lastUriSeg.Compare( KNSmlWLanSubjectKeyId ) == 0 ) + { + status = CSmlDmAdapter::ENotFound; + + TInt certId = GetCertificateIdFromUri(aURI); + + if ( iEAPSettings->iCertificatesPresent + && iEAPSettings->iCertificates.Count() >= certId + && certId != KErrNotFound ) + { + if (iEAPSettings->iCertificates[certId-1].iSubjectKeyIDPresent) + { + _DBG_FILE("CNSmlWLanAdapter::FetchLeafObject - Fetch subject key."); + // check the lenght of the given subjectKeyId, if it is longer that 20, then we + // update the status with error and will not go through the key + if ((iEAPSettings->iCertificates[certId-1].iSubjectKeyID.Length()) > KKeyIdentifierLength) + { + status = CSmlDmAdapter::EError; + } + else + { + _DBG_FILE("CNSmlWLanAdapter::FetchLeafObject - key is under max lenght"); + TBuf8 binKey = iEAPSettings->iCertificates[certId-1].iSubjectKeyID; + TBuf8<2> idBuf; + TBuf8 key; + TUint8 byte; + + // hexadecimal representation + _LIT8(KFormat, "%02x"); + + // looping the subject key through + for (TInt i = 0; i < binKey.Length(); i++) + { + _DBG_FILE("CNSmlWLanAdapter::FetchLeafObject - Loop the key through."); + // pick the next value from the buffer + byte = binKey[i]; + // convert the value into hexadecimal format + idBuf.Format(KFormat, byte); + // store the hexa value into the key variable + key.Append(idBuf); + } + // Copy the key to the aObject variable + aObject.InsertL(0, key); + status = CSmlDmAdapter::EOk; + } + } + } + } + else if (lastUriSeg.Compare( KNSmlWLanFingerprint ) == 0 ) + { + status = CSmlDmAdapter::ENotFound; + + TInt certId = GetCertificateIdFromUri(aURI); + + if ( iEAPSettings->iCertificatesPresent + && iEAPSettings->iCertificates.Count() >= certId + && certId != KErrNotFound ) + { + if (iEAPSettings->iCertificates[certId-1].iThumbprintPresent) + { + aObject.InsertL(0, ConvertTo8LC(iEAPSettings->iCertificates[certId-1].iThumbprint)); + CleanupStack::PopAndDestroy(); // ConvertTo8LC + status = CSmlDmAdapter::EOk; + } + } + } + else if (lastUriSeg.Compare( KNSmlWLanSerialNumber ) == 0 ) + { + status = CSmlDmAdapter::ENotFound; + + TInt certId = GetCertificateIdFromUri(aURI); + + if ( iEAPSettings->iCertificatesPresent + && iEAPSettings->iCertificates.Count() >= certId + && certId != KErrNotFound ) + { + if (iEAPSettings->iCertificates[certId-1].iSerialNumberPresent) + { + aObject.InsertL(0, ConvertTo8LC(iEAPSettings->iCertificates[certId-1].iSerialNumber)); + CleanupStack::PopAndDestroy(); // ConvertTo8LC + status = CSmlDmAdapter::EOk; + } + } + } + } + + + DBG_ARGS(_S16("CNSmlWLanAdapter::FetchLeafObjectL - Status <%D>"), status ); + _DBG_FILE("CNSmlWLanAdapter::FetchLeafObjectL(): end"); + return status; + } + +//----------------------------------------------------------------------------- +// CNSmlWLanAdapter* CNSmlWLanAdapter::ChildURIListL( const TDesC& aURI, +// const TDesC& aLUID, const CArrayFix& aPreviousURISegmentList, +// const TInt aResultsRef, const TInt aStatusRef ) +//----------------------------------------------------------------------------- +void CNSmlWLanAdapter::ChildURIListL( const TDesC8& aURI, + const TDesC8& aLUID, + const CArrayFix& aPreviousURISegmentList, + const TInt aResultsRef, + const TInt aStatusRef ) + { + _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): begin"); + DBG_ARGS8(_S8("WLanAdapter::ChildURIListL - <%S> <%S>"), &aURI, &aLUID ); + CBufBase* currentUriSegmentList = CBufFlat::NewL( 128 ); + CleanupStack::PushL( currentUriSegmentList ); + + TInt uriSegs = NumOfUriSegs( aURI ); + TInt luid = GetIdFromLuid( aLUID ); + + //AP//NAPDef// + if( aURI.Match( _L8("AP/*/NAPDef/*") ) != KErrNotFound && uriSegs==4 ) + { + DBG_ARGS8(_S8("WLanAdapter::ChildURIListL->NAPDef - <%S> <%S>"), &aURI, &aLUID ); + if( iWlanSettings->RecordExists( luid ) < 0 ) + { + currentUriSegmentList->InsertL( 0, KNSmlNAPDefWlanNode ); + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk ); + iCallBack->SetResultsL( aResultsRef, *currentUriSegmentList, KNullDesC8 ); + _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): status ok"); + } + else + { + currentUriSegmentList->InsertL( 0, KNSmlNAPDefWlanNode ); + currentUriSegmentList->InsertL( currentUriSegmentList->Size(), KNSmlWLan ); + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk ); + iCallBack->SetResultsL( aResultsRef, *currentUriSegmentList, KNullDesC8 ); + _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): status ok"); + } + } + + //AP//NAPDef//WLAN + else if (aURI.Match(_L8("AP/*/NAPDef/*/WLAN")) != KErrNotFound && uriSegs == 5 ) + { + if( aPreviousURISegmentList.Count() > 0 ) + { + HBufC8 *uriSeg = HBufC8::NewLC(KNSmlMaxURISegLen); + TPtr8 uriSegPtr = uriSeg->Des(); + uriSegPtr = aPreviousURISegmentList.At(0).iURISeg; + currentUriSegmentList->InsertL( currentUriSegmentList->Size(), uriSegPtr ); + CleanupStack::PopAndDestroy( uriSeg ); //uriSeg + iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk); + iCallBack->SetResultsL(aResultsRef,*currentUriSegmentList,KNullDesC8); + _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): status ok"); + } + else + { + if( iWlanSettings->RecordExists( luid ) < 0) + { + iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::ENotFound); + _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): status: Not found"); + } + else + { + _LIT8(Kprev,"WLId"); + TBuf8<9> addNAME(Kprev); // WLId + addNAME.AppendNumFixedWidth(luid,EDecimal,3); + + currentUriSegmentList->InsertL(currentUriSegmentList->Size(),addNAME); + currentUriSegmentList->InsertL(currentUriSegmentList->Size(),_L8("/")); + + TBuf8<80> addURI; // AP//NapDef//WLAN/WLIdnnn , n=aLUID + addURI.Append(aURI); + addURI.Append(_L8("/WLId")); + addURI.AppendNumFixedWidth(luid,EDecimal,3); + + TBuf8<16> addLUID; + _LIT8(KFormat,"%d"); + addLUID.Format(KFormat,luid); + + // Also added to mapping + DBG_ARGS8(_S8("WLanAdapter::ChildURIListL - mapping uri: <%S> to luid: <%S>"), &addURI, &addLUID ); + DBG_ARGS8(_S8("Parameters - <%S> <%S>"), &aURI, &aLUID ); + iCallBack->SetMappingL(addURI,addLUID); + iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk); + iCallBack->SetResultsL(aResultsRef,*currentUriSegmentList,KNullDesC8); + _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): status ok"); + } + } + } + + //AP//NAPDef//WLAN/ + else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*") ) != KErrNotFound && uriSegs==6 ) + { + DBG_ARGS8(_S8("WLanAdapter::ChildURIListL->NAPDef - <%S> <%S>"), &aURI, &aLUID ); + if( iWlanSettings->RecordExists( luid ) < 0 ) + { + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound ); + _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): ENotFound end"); + } + else + { + currentUriSegmentList->InsertL( currentUriSegmentList->Size(), KNSmlWLanListOfLeafs ); + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk ); + iCallBack->SetResultsL( aResultsRef, *currentUriSegmentList, KNullDesC8 ); + _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): status ok"); + } + } + + + //AP//NAPDef//WLAN//WEPKey + else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/WEPKey") ) != KErrNotFound && uriSegs==7 ) + { + DBG_ARGS8(_S8("WLanAdapter::ChildURIListL->WEPKey - <%S> <%S> <%D> <%D>"), &aURI, &aLUID, aResultsRef, aStatusRef ); + + for( TInt i=0; i<4; i++ ) + { + if( aPreviousURISegmentList.Count()>i ) + { + HBufC8 *uriSeg = HBufC8::NewLC( KNSmlMaxURISegLen) ; + TPtr8 uriSegPtr = uriSeg->Des(); + uriSegPtr = aPreviousURISegmentList.At(i).iURISeg; + + currentUriSegmentList->InsertL( currentUriSegmentList->Size(),uriSegPtr ); + currentUriSegmentList->InsertL( currentUriSegmentList->Size(),_L8( "/" ) ); + CleanupStack::PopAndDestroy(); //uriSeg + } + else + { + TBuf8<25> addNAME; + addNAME.Append( _L8("WKId") ); + addNAME.AppendNum( i+1 ); + addNAME.Append( _L8("/") ); + + currentUriSegmentList->InsertL( currentUriSegmentList->Size(),addNAME ); + } + } + + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk ); + iCallBack->SetResultsL( aResultsRef, *currentUriSegmentList, KNullDesC8 ); + _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): status ok"); + } + + //AP//NAPDef//WEPKey/ + else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/WEPKey/*") ) != KErrNotFound && uriSegs==8 ) + { + DBG_ARGS8(_S8("WLanAdapter::ChildURIListL->WEPKey/* - <%S> <%D>"), &aURI, luid ); + if( iWlanSettings->RecordExists( luid ) < 0 ) + { + //wlan settings not found for aLUID + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound ); + _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): ENotFound end"); + } + else + { + TInt wepKeyId = GetWepKeyIdFromLuid( aLUID ); + if( wepKeyId == KErrNotFound ) + { + wepKeyId = GetWepKeyIdFromUri( aURI ); + + TBuf8<80> addLUID; // AP//NapDef//WLAN//WEPKey/WKIdnnn + addLUID.AppendNum( wepKeyId ); + addLUID.AppendNumFixedWidth( luid, EDecimal, 3 ); + + DBG_ARGS8(_S8("WLanAdapter::ChildURIListL - mapping uri: <%S> to luid: <%S>"), &aURI, &addLUID ); + DBG_ARGS8(_S8("Parametrit - <%S> <%S>"), &aURI, &addLUID ); + iCallBack->SetMappingL(aURI, addLUID); + } + + currentUriSegmentList->InsertL( currentUriSegmentList->Size(), KNSmlWLanListOfWepKeyLeafs ); + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk ); + iCallBack->SetResultsL( aResultsRef, *currentUriSegmentList, KNullDesC8 ); + _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): status ok"); + } + } + + //AP//NAPDef//WLAN//SecondarySSID/ + else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/SecondarySSID") ) != KErrNotFound && uriSegs==7 ) + { + DBG_ARGS8(_S8("WLanAdapter::ChildURIListL->EAP - <%S> <%S> <%D> <%D>"), &aURI, &aLUID, aResultsRef, aStatusRef ); + if( aPreviousURISegmentList.Count() > 0 ) + { + HBufC8 *uriSeg = HBufC8::NewLC(KNSmlMaxURISegLen); + TPtr8 uriSegPtr = uriSeg->Des(); + uriSegPtr = aPreviousURISegmentList.At(0).iURISeg; + currentUriSegmentList->InsertL( currentUriSegmentList->Size(), uriSegPtr ); + CleanupStack::PopAndDestroy( uriSeg ); //uriSeg + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk ); + iCallBack->SetResultsL( aResultsRef, *currentUriSegmentList, KNullDesC8 ); + _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): status ok"); + } + else + { + if( iWlanSettings->RecordExists( luid ) < 0) + { + iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::ENotFound); + _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): status: Not found"); + } + else + { + RArray secondarySSIDs; + CleanupClosePushL( secondarySSIDs ); + iWlanSettings->GetSecondarySSIDListL(luid, secondarySSIDs); + TInt count = secondarySSIDs.Count(); + _LIT8(KPrefixSSID,"SecSSID"); + TBuf8<5> addNAME; // number + for (TInt i=0;iInsertL(currentUriSegmentList->Size(),_L8("/")); + } + currentUriSegmentList->InsertL(currentUriSegmentList->Size(),KPrefixSSID); + addNAME.Zero(); + addNAME.AppendNumFixedWidth(secondarySSIDs[i].Id ,EDecimal,3); + currentUriSegmentList->InsertL(currentUriSegmentList->Size(),addNAME); + } + CleanupStack::PopAndDestroy(&secondarySSIDs); + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk ); + iCallBack->SetResultsL( aResultsRef, *currentUriSegmentList, KNullDesC8 ); + _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): status ok"); + } + } + } + //AP//NAPDef//WLAN//SecondarySSID/* + else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/SecondarySSID/*") ) != KErrNotFound && uriSegs==8 ) + { + DBG_ARGS8(_S8("WLanAdapter::ChildURIListL->SecondarySSID/* - <%S> <%D>"), &aURI, luid ); + if( iWlanSettings->RecordExists( luid ) < 0 ) + { + //wlan settings not found for aLUID + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound ); + _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): ENotFound end"); + } + else + { + currentUriSegmentList->InsertL( currentUriSegmentList->Size(), KNSmlWLanListOfSecondaryLeafs ); + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk ); + iCallBack->SetResultsL( aResultsRef, *currentUriSegmentList, KNullDesC8 ); + _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): status ok"); + } + } + //AP//NAPDef//WLAN//EAP + else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/EAP") ) != KErrNotFound && uriSegs==7 ) + { + DBG_ARGS8(_S8("WLanAdapter::ChildURIListL->EAP - <%S> <%S> <%D> <%D>"), &aURI, &aLUID, aResultsRef, aStatusRef ); + + // Need to get the service id from parent node + luid = GetServiceIdFromUriL ( aURI ); + + if( iWlanSettings->RecordExists( luid ) < 0 ) + { + //wlan settings not found for aLUID + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound ); + _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): ENotFound end"); + } + else + { + iWlanSettings->InstalledEAPsL(*currentUriSegmentList); + + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk ); + iCallBack->SetResultsL( aResultsRef, *currentUriSegmentList, KNullDesC8 ); + _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): status ok"); + } + } + //AP//NAPDef//WLAN//EAP/ + else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/EAP/*") ) != KErrNotFound && uriSegs==8 ) + { + // Need to get the service id from parent node + luid = GetServiceIdFromUriL ( aURI ); + + DBG_ARGS8(_S8("WLanAdapter::ChildURIListL->EAP/* - <%S> <%D>"), &aURI, luid ); + if( iWlanSettings->RecordExists( luid ) < 0 ) + { + //wlan settings not found for aLUID + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound ); + _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): ENotFound end"); + } + else + { + currentUriSegmentList->InsertL( currentUriSegmentList->Size(), KNSmlWLanListOfEAPLeafs ); + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk ); + iCallBack->SetResultsL( aResultsRef, *currentUriSegmentList, KNullDesC8 ); + _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): status ok"); + } + } + //AP//NAPDef//WLAN//EAP//Certificate + else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/EAP/*/Certificate") ) != KErrNotFound && uriSegs== 9 ) + { + luid = GetServiceIdFromUriL ( aURI ); + + DBG_ARGS8(_S8("WLanAdapter::ChildURIListL->Certificate - <%S> <%D>"), &aURI, luid ); + if( iWlanSettings->RecordExists( luid ) < 0 ) + { + //wlan settings not found for aLUID + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound ); + _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): ENotFound end"); + } + else + { + TInt eapId = GetEAPIdFromUri( aURI ); + + // Check if the id contains encapsulating type as well + TInt encapsEapId = GetEncapsEAPIdFromUri( aURI ); + if ( encapsEapId == KErrNotFound ) + { + encapsEapId = EAPSettings::EEapNone; + } + + ResetEAPStructL(); + TInt err = iWlanSettings->GetEAPSettings(luid, eapId, encapsEapId, *iEAPSettings); + if (err != KErrNone || !iEAPSettings->iCertificatesPresent) + { + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound ); + _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): ENotFound end"); + } + else + { + TInt certCount = iEAPSettings->iCertificates.Count(); + HBufC8* pBuf = HBufC8::NewLC(KNSmlMaxURISegLen); + TPtr8 ptrCerts = pBuf->Des(); + for (TInt i=0; iInsertL( currentUriSegmentList->Size(), ptrCerts ); + CleanupStack::PopAndDestroy(pBuf); // pBuf + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk ); + iCallBack->SetResultsL( aResultsRef, *currentUriSegmentList, KNullDesC8 ); + _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): status ok"); + } + } + } + //AP//NAPDef//WLAN//EAP//Certificate/ + else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/EAP/*/Certificate/*") ) != KErrNotFound && uriSegs==10 ) + { + DBG_ARGS8(_S8("WLanAdapter::ChildURIListL->EAP/* - <%S> <%D>"), &aURI, luid ); + TInt eapId = GetEAPIdFromUri(aURI); + // Check if the id contains encapsulating type as well + TInt encapsEapId = GetEncapsEAPIdFromUri( aURI ); + if ( encapsEapId == KErrNotFound ) + { + encapsEapId = EAPSettings::EEapNone; + } + + ResetEAPStructL(); + TInt err = iWlanSettings->GetEAPSettings(luid, eapId, encapsEapId, *iEAPSettings); + if (err != KErrNone || !iEAPSettings->iCertificatesPresent) + { + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound ); + _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): ENotFound end"); + } + else + { + currentUriSegmentList->InsertL( currentUriSegmentList->Size(), KNSmlWLanListOfCertificateLeafs ); + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk ); + iCallBack->SetResultsL( aResultsRef, *currentUriSegmentList, KNullDesC8 ); + _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): status ok"); + } + } + + + CleanupStack::PopAndDestroy( currentUriSegmentList ); + + _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): end"); + } + +//----------------------------------------------------------------------------- +// void CNSmlWLanAdapter::AddNodeObjectL( const TDesC& aURI, const TDesC& aParentLUID, +// const TInt aStatusRef ) +//----------------------------------------------------------------------------- +void CNSmlWLanAdapter::AddNodeObjectL( const TDesC8& aURI, + const TDesC8& aParentLUID, + const TInt aStatusRef ) + { + _DBG_FILE("CNSmlWLanAdapter::AddNodeObjectL(): begin"); + DBG_ARGS8(_S8("WLanAdapter::AddNodeObjectL - uri: <%S> to aParentLuid: <%S>"), + &aURI, &aParentLUID ); + + TInt uriSegs = NumOfUriSegs( aURI ); + if( (aURI.Match (_L8( "AP/*/NAPDef/*/WLAN") ) != KErrNotFound && uriSegs == 5 ) + || (aURI.Match (_L8( "AP/*/NAPDef/*/WLAN/*/EAP") ) != KErrNotFound && uriSegs == 7 ) + || (aURI.Match (_L8( "AP/*/NAPDef/*/WLAN/*/EAP/*/Certificate") ) != KErrNotFound && uriSegs == 9 ) ) + { + iCallBack->SetMappingL( aURI, aParentLUID ); + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk ); + return; + } + + //Add new wlan settings + else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*") ) != + KErrNotFound && NumOfUriSegs( aURI ) == 6 ) + { + iSettings->Id = 0; + iSettings->ServiceID = DesToInt( aParentLUID ); + iSettings->ConnectionMode = 0; + iSettings->SSID = TPtrC(KNSmlWLanDefaultSSID); + iSettings->UsedSSID = _L(""); + iSettings->ScanSSID = 0; + iSettings->WepKey1 = _L8(""); + iSettings->WepKey2 = _L8(""); + iSettings->WepKey3 = _L8(""); + iSettings->WepKey4 = _L8(""); + iSettings->WepIndex = 0; + iSettings->SecurityMode = EAllowUnsecure; + iSettings->WPAPreSharedKey = _L8(""); + iSettings->UseWPAPSK = 0; + iSettings->EapList = _L(""); + iSettings->AuthMode = 0; + + TInt err = iWlanSettings->WriteWlanSettings( *iSettings ); + if( err != KErrNone ) + { + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError ); + return; + } + + DBG_ARGS8(_S8("WLanAdapter::AddNodeObjectL - mapping uri: <%S> to luid: <%S>"), &aURI, &aParentLUID ); + iCallBack->SetMappingL( aURI, aParentLUID ); + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk ); + } + + else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/WEPKey") ) != KErrNotFound && uriSegs == 7 ) + { + if( iWlanSettings->RecordExists( DesToInt( aParentLUID ) ) ) + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk ); + else + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound ); + return; + } + + //Add wep key for existing record + else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/WEPKey/*") ) != KErrNotFound && uriSegs == 8 ) + { + for( TInt i=0; iCount(); i++ ) + { + if( iBuffer->At(i).iUri->Match( aURI ) != KErrNotFound ) + { + iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EAlreadyExists ); + + _DBG_FILE("CNSmlWLanAdapter::AddNodeObjectL(): EAlreadyExists"); + return; + } + } + DBG_ARGS8(_S8("WLanAdapter::Bufferiin - uri: <%S> to aParentLuid: <%S>"), &aURI, &aParentLUID ); + + TNSmlWepKeyBufferElement newNode; + newNode.iUri = aURI.AllocLC(); + newNode.iData = 0; + newNode.iWepKeyId = 0; + //newNode.iUseWPAPSK = 0; + newNode.iIdStatusRef = 0; + newNode.iDataStatusRef = 0; + newNode.iLengthStatusRef = 0; + newNode.iNodeStatusRef = aStatusRef; + newNode.iExecuted = EFalse; + newNode.iDataSet = EFalse; + newNode.iLuid = DesToInt( aParentLUID ); + iBuffer->AppendL( newNode ); + + CleanupStack::Pop( ); //newNode.iUri + + _DBG_FILE("CNSmlWLanAdapter::AddNodeObjectL(): end"); + return; + } + + else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/SecondarySSID/*") ) != + KErrNotFound && NumOfUriSegs( aURI ) == 8 ) + { + /* + TSecondarySSID ssid; + ssid.ScannedId = KNullDesC; + ssid.UsedId = KNullDesC; + TInt luid = GetIdFromLuid( aParentLUID ); + TInt retval = iWlanSettings->WriteSecondarySSIDL(luid, ssid, ETrue);*/ + + TNSmlSecondarySSIDBufferElement *newSecNode = new (ELeave) TNSmlSecondarySSIDBufferElement;; + newSecNode->iUri = aURI.AllocLC(); + newSecNode->ScannedId = KNullDesC; + newSecNode->UsedId = KNullDesC; + newSecNode->iExecuted = EFalse; + newSecNode->wlanLuid = GetIdFromLuid( aParentLUID ); + iSecondaryBuffer.AppendL( newSecNode ); + CleanupStack::Pop( ); //newNode.iUri + return; + } + + else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/EAP/*") ) != + KErrNotFound && NumOfUriSegs( aURI ) == 8 ) + { + TInt eapTypeId = GetEAPIdFromUri(aURI); + TInt encapsEapId = GetEncapsEAPIdFromUri( aURI ); + if ( encapsEapId == KErrNotFound ) + { + encapsEapId = EAPSettings::EEapNone; + } + + + TInt WLANServiceId = GetServiceIdFromUriL ( aURI ); + + if ( WLANServiceId == KErrNotFound ) + { + _DBG_FILE("CNSmlWLanAdapter::AddNodeObjectL(): Could not find WLAN service ID from URI."); + User::Leave( KErrNotFound ); + } + + TInt i(0); + // Check if the buffer for this EAP already exists + for ( i = 0 ; i < iEAPBuffer.Count() ; i++ ) + { + if ( eapTypeId == iEAPBuffer[i]->iEAPSettings->iEAPType + && encapsEapId == iEAPBuffer[i]->iEncapsulatingEAPId ) + { + // The correct buffer was found. + _DBG_FILE("CNSmlWLanAdapter::AddNodeObjectL(): Found existing buffer."); + break; + } + } + // buffer did not exist. Update the existing buffer + if ( i == iEAPBuffer.Count() ) + { + TNSmlEAPBufferElement* buffer = new (ELeave) TNSmlEAPBufferElement; + CleanupStack::PushL( buffer ); + + buffer->iEAPSettings = new (ELeave) EAPSettings; + CleanupStack::PushL( buffer->iEAPSettings ); + + buffer->iEAPSettings->iEAPType = static_cast (eapTypeId); + buffer->iStatusRefArray.AppendL(aStatusRef); + buffer->iWLANServiceId = WLANServiceId; + buffer->iEncapsulatingEAPId = static_cast(encapsEapId); + iEAPBuffer.AppendL(buffer); + + CleanupStack::Pop( buffer->iEAPSettings ); + CleanupStack::Pop( buffer ); + } + + // Set the mapping luid to be the index to the iEAPBuffer + TBuf8<2> luid; + luid.Num( iEAPBuffer.Count() - 1 ); + DBG_ARGS8(_S8("WLanAdapter::AddNodeObjectL - mapping uri: <%S> to luid: <%S>"), &aURI, &luid ); + iCallBack->SetMappingL( aURI, luid); + + } + else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/EAP/*/Certificate/*") ) != + KErrNotFound && NumOfUriSegs( aURI ) == 10 ) + { + TPtrC8 ptr = NSmlDmURI::ParentURI( aURI ); + TPtrC8 ptr2 = NSmlDmURI::ParentURI( ptr ); + + HBufC8* eapLuidBuf = iCallBack->GetLuidAllocL( ptr2 ); + + TInt index = GetIdFromLuid( *eapLuidBuf ); + + delete eapLuidBuf; + + CertificateEntry entry; + iEAPBuffer[index]->iEAPSettings->iCertificates.AppendL(entry); + iEAPBuffer[index]->iEAPSettings->iCertificatesPresent = ETrue; + iEAPBuffer[index]->iStatusRefArray.AppendL(aStatusRef); + + TBuf8<2> luid; + luid.Num( iEAPBuffer[index]->iEAPSettings->iCertificates.Count() - 1 ); + + DBG_ARGS8(_S8("WLanAdapter::AddNodeObjectL - mapping uri: <%S> to luid: <%S>"), &aURI, &luid ); + iCallBack->SetMappingL( aURI, luid); + } + _DBG_FILE("CNSmlWLanAdapter::AddNodeObjectL(): end"); + } + +//------------------------------------------------------------------------------ +// CNSmlWLanAdapter::ExecuteCommandL +// not supported +//------------------------------------------------------------------------------ +void CNSmlWLanAdapter::ExecuteCommandL( const TDesC8& /*aURI*/, + const TDesC8& /*aLUID*/, + const TDesC8& /*aArgument*/, + const TDesC8& /*aType*/, + TInt aStatusRef ) + { + _DBG_FILE("CNSmlWLanAdapter::ExecuteCommandL(): begin"); + iCallBack->SetStatusL(aStatusRef, CSmlDmAdapter::EError); + _DBG_FILE("CNSmlWLanAdapter::ExecuteCommandL(): end"); + } + +//------------------------------------------------------------------------------ +// CNSmlWLanAdapter::ExecuteCommandL ( .. RWriteStream ..) +// not supported +//------------------------------------------------------------------------------ +void CNSmlWLanAdapter::ExecuteCommandL( const TDesC8& /*aURI*/, + const TDesC8& /*aLUID*/, + RWriteStream*& /*aStream*/, + const TDesC8& /*aType*/, + TInt aStatusref ) + { + _DBG_FILE("CNSmlWLanAdapter::ExecuteCommandL(): begin"); + iCallBack->SetStatusL(aStatusref, CSmlDmAdapter::EError); + _DBG_FILE("CNSmlWLanAdapter::ExecuteCommandL(): end"); + } + +//------------------------------------------------------------------------------ +// CNSmlWLanAdapter::CopyCommandL +// not supported +//------------------------------------------------------------------------------ +void CNSmlWLanAdapter::CopyCommandL( const TDesC8& /*aTargetURI*/, + const TDesC8& /*aTargetLUID*/, + const TDesC8& /* aSourceURI*/, + const TDesC8& /*aSourceLUID*/, + const TDesC8& /*aType*/, + TInt aStatusRef ) + { + _DBG_FILE("CNSmlWLanAdapter::CopyCommandL(): begin"); + iCallBack->SetStatusL(aStatusRef, CSmlDmAdapter::EError); + _DBG_FILE("CNSmlWLanAdapter::CopyCommandL(): end"); + } +//------------------------------------------------------------------------------ +// CNSmlWLanAdapter::StartAtomicL +// not supported +//------------------------------------------------------------------------------ +void CNSmlWLanAdapter::StartAtomicL() + { + _DBG_FILE("CNSmlWLanAdapter::StartAtomicL(): begin"); + _DBG_FILE("CNSmlWLanAdapter::StartAtomicL(): end"); + } + +//------------------------------------------------------------------------------ +// CNSmlWLanAdapter::CommitAtomicL +// not supported +//------------------------------------------------------------------------------ +void CNSmlWLanAdapter::CommitAtomicL() + { + _DBG_FILE("CNSmlWLanAdapter::CommitAtomicL(): begin"); + _DBG_FILE("CNSmlWLanAdapter::CommitAtomicL(): end"); + } + +//------------------------------------------------------------------------------ +// CNSmlWLanAdapter::RollbackAtomicL +// returns EError +//------------------------------------------------------------------------------ +void CNSmlWLanAdapter::RollbackAtomicL() + { + _DBG_FILE("CNSmlWLanAdapter::RollbackAtomicL(): begin"); + _DBG_FILE("CNSmlWLanAdapter::RollbackAtomicL(): end"); + } + +//------------------------------------------------------------------------------ +// CNSmlWLanAdapter::StreamingSupport +// returns EFalse +//------------------------------------------------------------------------------ + +TBool CNSmlWLanAdapter::StreamingSupport( TInt& /*aItemSize*/ ) + { + _DBG_FILE("CNSmlWLanAdapter::StreamingSupport(): begin"); + _DBG_FILE("CNSmlWLanAdapter::StreamingSupport(): end"); + return EFalse; + } + +//------------------------------------------------------------------------------ +// CNSmlWLanAdapter::StreamCommittedL +// not used in this adapter +//------------------------------------------------------------------------------ + +void CNSmlWLanAdapter::StreamCommittedL() + { + _DBG_FILE("CNSmlWLanAdapter::StreamCommittedL(): begin"); + _DBG_FILE("CNSmlWLanAdapter::StreamCommittedL(): end"); + } + +//----------------------------------------------------------------------------- +// CNSmlWLanAdapter* CNSmlWLanAdapter::CompleteOutstandingCmdsL( ) +//----------------------------------------------------------------------------- +void CNSmlWLanAdapter::CompleteOutstandingCmdsL( ) + { + _DBG_FILE("CNSmlWLanAdapter::CompleteOutStandingCmdsL(): begin"); + + ExecuteBufferL( ETrue ); + + _DBG_FILE("CNSmlWLanAdapter::CompleteOutStandingCmdsL(): end"); + } + +// ------------------------------------------------------------------------------------------------ +// TPtrC8 CNSmlWLanAdapter::GetLastUriSeg(const TDesC8& aURI) +// Returns only the last uri segemnt +// ------------------------------------------------------------------------------------------------ +TPtrC8 CNSmlWLanAdapter::GetLastUriSeg( const TDesC8& aURI ) + { + _DBG_FILE("CNSmlWLanAdapter::GetLastUriSeg(): begin"); + + TInt i; + for( i = aURI.Length()-1; i >= 0; i-- ) + { + if( aURI[i] == '/' ) + { + break; + } + } + + if( i==0 ) + { + _DBG_FILE("CNSmlWLanAdapter::GetLastUriSeg(): end"); + return aURI; + } + else + { + _DBG_FILE("CNSmlWLanAdapter::GetLastUriSeg(): end"); + return aURI.Mid( i+1 ); + } + } + + +// ------------------------------------------------------------------------------------------------ +// TPtrC16 CNSmlWLanAdapter::RemoveLastURISeg(const TDesC8& aURI) +// returns parent uri, i.e. removes last uri segment +// ------------------------------------------------------------------------------------------------ +TPtrC8 CNSmlWLanAdapter::RemoveLastUriSeg(const TDesC8& aURI) + { + _DBG_FILE("CNSmlWLanAdapter::RemoveLastUriSeg(): begin"); + + TInt i; + for( i = aURI.Length()-1; i >= 0; i-- ) + { + if(aURI[i] == '/') + { + break; + } + } + + _DBG_FILE("CNSmlWLanAdapter::RemoveLastUriSeg(): end"); + return aURI.Left(i); + } + + +// ------------------------------------------------------------------------------------------------ +// TInt CNSmlWLanAdapter::DesToInt( const TDesC8& aLuid ) +// Returns aLuid as integer value +// ------------------------------------------------------------------------------------------------ +TInt CNSmlWLanAdapter::DesToInt( const TDesC8& aLuid ) + { + _DBG_FILE("CNSmlWLanAdapter::DesToInt(): begin"); + + TLex8 lex(aLuid); + TInt value = 0; + lex.Val( value ); + + DBG_ARGS8(_S8("WLanAdapter::DesToInt() - Des: <%S> Int: <%D>"), &aLuid, value ); + _DBG_FILE("CNSmlWLanAdapter::DesToInt(): end"); + return value; + } + + +// ------------------------------------------------------------------------------------------------ +// HBufC* CNSmlWLanAdapter::IntToDesLC(const TInt aLuid) +// ------------------------------------------------------------------------------------------------ +HBufC* CNSmlWLanAdapter::IntToDesLC(const TInt aLuid) + { + _DBG_FILE("CNSmlWLanAdapter::IntToDesLC(): begin"); + + HBufC* buf = HBufC::NewLC(10); + TPtr ptrBuf = buf->Des(); + ptrBuf.Num(aLuid); + + _DBG_FILE("CNSmlWLanAdapter::IntToDesLC(): end"); + return buf; + } + +// ------------------------------------------------------------------------------------------------ +// HBufC8* CNSmlWLanAdapter::IntToDes8LC(const TInt aLuid) +// ------------------------------------------------------------------------------------------------ +HBufC8* CNSmlWLanAdapter::IntToDes8LC(const TInt aLuid) + { + _DBG_FILE("CNSmlWLanAdapter::IntToDes8LC(): begin"); + + HBufC8* buf = HBufC8::NewLC(10); + TPtr8 ptrBuf = buf->Des(); + ptrBuf.Num(aLuid); + + _DBG_FILE("CNSmlWLanAdapter::IntToDes8LC(): end"); + return buf; + } + +// ------------------------------------------------------------------------------------------------ +// TInt CNSmlWLanAdapter::NumOfUriSegs( const TDesC8& aUri ) +// Return count of URI segments of aUri +// ------------------------------------------------------------------------------------------------ +TInt CNSmlWLanAdapter::NumOfUriSegs( const TDesC8& aUri ) + { + _DBG_FILE("CNSmlWLanAdapter::NumOfUriSegs(): begin"); + + TInt count = 1; + for( TInt i=0; i"), &aUri ); + + if( aUri.Match( _L8("AP/*/NAPDef/*/WLAN/*/EAP/*") ) == KErrNotFound ) + { + return KErrNotFound; + } + + TInt begin = aUri.Find(_L8("/EAPId")) + 6; + if ( begin == KErrNotFound ) + { + return KErrNotFound; + } + + TInt eapId = DesToInt( aUri.Mid( begin, 3 ) ); + + return eapId; + } + +// ------------------------------------------------------------------------------------------------ +// TInt CNSmlWLanAdapter::GetEncapsEAPIdFromUri( const TDesC8& aUri ) +// Return WLan ID number from URI +// ------------------------------------------------------------------------------------------------ +TInt CNSmlWLanAdapter::GetEncapsEAPIdFromUri( const TDesC8& aUri ) + { + DBG_ARGS8(_S8("WLanAdapter::GetEncapsEAPIdFromUri - <%S>"), &aUri ); + + if( aUri.Match( _L8("AP/*/NAPDef/*/WLAN/*/EAP/EAPId*-*") ) == KErrNotFound ) + { + return KErrNotFound; + } + + TInt begin = aUri.Find(_L8("/EAPId")) + 9; + if ( aUri[begin] != '-' ) + { + return KErrNotFound; + } + begin++; + TInt end = -1; + TInt count; + + for( count=0; count+begin 0 ) + { + TInt eapId = DesToInt( aUri.Mid( begin, count ) ); + return eapId; + } + return KErrNotFound; + } + +// ------------------------------------------------------------------------------------------------ +// TInt CNSmlWLanAdapter::GetEAPIdFromUriL( const TDesC8& aUri ) +// Return WLan ID number from URI +// ------------------------------------------------------------------------------------------------ +TInt CNSmlWLanAdapter::GetServiceIdFromUriL( const TDesC8& aURI) + { + DBG_ARGS8(_S8("WLanAdapter::GetServiceIdFromUriL - <%S>"), &aURI ); + + if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/EAP*") ) == KErrNotFound ) + { + return KErrNotFound; + } + + TInt end = aURI.Find(_L8("/EAP")) + 4; + + if( end > 0 ) + { + + HBufC8* luidBuf = iCallBack->GetLuidAllocL( aURI.Left( end ) ); + + TInt serviceId = GetIdFromLuid( *luidBuf ); + + delete luidBuf; + + return serviceId; + } + return KErrNotFound; + } + +// ------------------------------------------------------------------------------------------------ +// TInt CNSmlWLanAdapter::GetSecSSIDFromUriL( const TDesC8& aUri ) +// Return WLan ID number from URI +// ------------------------------------------------------------------------------------------------ +TUint32 CNSmlWLanAdapter::GetSecSSIDFromUriL( const TDesC8& aUri ) + { + DBG_ARGS8(_S8("WLanAdapter::GetSecSSIDFromUriL - <%S>"), &aUri ); + + if( aUri.Match( _L8("AP/*/NAPDef/*/WLAN/*/SecondarySSID/*") ) == KErrNotFound ) + { + User::Leave(KErrNotFound); + } + _LIT8(KSSIDString, "/SecondarySSID/SecSSID"); + TInt begin = aUri.Find(KSSIDString) + KSSIDString().Length(); + TInt end = -1; + TInt count; + + for( count=0; count+begin 0 ) + { + TLex8 lex(aUri.Mid( begin, count )); + TUint32 value = 0; + lex.Val( value, EDecimal ); + return value; + } + else + { + User::Leave(KErrNotFound); + } + return 0; + } + + +// ------------------------------------------------------------------------------------------------ +// TInt CNSmlWLanAdapter::GetEAPIdFromUri( const TDesC8& aUri ) +// Return WLan ID number from URI +// ------------------------------------------------------------------------------------------------ +TInt CNSmlWLanAdapter::GetCertificateIdFromUri( const TDesC8& aUri ) + { + DBG_ARGS8(_S8("WLanAdapter::GetCertificateIdFromUri - <%S>"), &aUri ); + + if( aUri.Match( _L8("AP/*/NAPDef/*/WLAN/*/EAP/*/Certificate/*") ) == KErrNotFound ) + { + return KErrNotFound; + } + _LIT8(KCertString, "/Certificate/CertId"); + + TInt begin = aUri.Find(KCertString); + if ( begin == KErrNotFound ) + { + return KErrNotFound; + } + + begin += KCertString().Length(); + + TInt end = -1; + TInt count; + + for( count=0; count+begin 0 ) + { + TInt certId = DesToInt( aUri.Mid( begin, count ) ); + return certId; + } + return KErrNotFound; + } + + +// ------------------------------------------------------------------------------------------------ +// TInt CNSmlWLanAdapter::GetWepKeyIdFromUri( const TDesC8& aUri ) +// Returns WepKey ID number from URI +// ------------------------------------------------------------------------------------------------ +TInt CNSmlWLanAdapter::GetWepKeyIdFromUri( const TDesC8& aUri ) + { + if( aUri.Match( _L8("AP/*/NAPDef/*/WLAN/*/WEPKey/*") ) == KErrNotFound ) + { + return KErrNotFound; + } + + TInt begin = aUri.Find(_L8("WEPKey/WKId")) + 11; + TInt end = -1; + TInt count; + + for( count=0; count 0 ) + { + TInt wlanId = DesToInt( aUri.Mid( begin, count ) ); + return wlanId; + } + return KErrNotFound; + } + +// ------------------------------------------------------------------------------------------------ +// TInt CNSmlWLanAdapter::GetWepKeyIdFromLuid( const TDesC8& aLuid ) +// Return id number of wepkey +// ------------------------------------------------------------------------------------------------ +TInt CNSmlWLanAdapter::GetWepKeyIdFromLuid( const TDesC8& aLuid ) + { + TLex8 iLex( aLuid ); + + TInt luid; + if (iLex.Val( luid ) == KErrNone) + { + if( luid > 1000 ) + { + return luid / 1000; + } + else + { + return KErrNotFound; + } + } + else + { + return KErrNotFound; + } + } + +// ------------------------------------------------------------------------------------------------ +// TInt CNSmlWLanAdapter::GetIdFromLuid( const TDesC& aLuid ) +// Return luid of wlan node +// ------------------------------------------------------------------------------------------------ +TInt CNSmlWLanAdapter::GetIdFromLuid( const TDesC8& aLuid ) + { + TLex8 iLex( aLuid ); + + TInt luid; + if( iLex.Val(luid) == KErrNone ) + { + if( luid < 1000 ) + { + return luid; + } + else + { + TInt tmp = luid / 1000 * 1000; //First number of luid > 1000 + return luid - tmp; + } + } + else + { + return KErrNotFound; + } + } + +// ------------------------------------------------------------------------------------------------ +// void CNSmlWLanAdapter::ExecuteBufferL( TBool aFinal ) +// Executes buffered commands from iBuffer +// ------------------------------------------------------------------------------------------------ +void CNSmlWLanAdapter::ExecuteBufferL( TBool aFinal ) + { + for( TInt index=0; indexCount(); index++ ) + { + DBG_ARGS8(_S8("WLanAdapter::ExecuteBuffer(): Buf count: <%D> index: <%D>"), iBuffer->Count(), index ); + + if( iBuffer->At(index).iExecuted ) + { + continue; + } + TInt err = 0; + + TInt luid = iBuffer->At(index).iLuid; + TInt wepKeyId = iBuffer->At(index).iWepKeyId; + if( ! wepKeyId && ! aFinal ) + { + continue; + } + + if( wepKeyId > 4 || + ! wepKeyId && aFinal ) + { + if( iBuffer->At(index).iDataStatusRef ) + iCallBack->SetStatusL( iBuffer->At(index).iDataStatusRef, CSmlDmAdapter::EError ); + if( iBuffer->At(index).iNodeStatusRef ) + iCallBack->SetStatusL( iBuffer->At(index).iNodeStatusRef, CSmlDmAdapter::EError ); + if( iBuffer->At(index).iLengthStatusRef ) + iCallBack->SetStatusL( iBuffer->At(index).iLengthStatusRef, CSmlDmAdapter::EError ); + + iBuffer->At(index).iIdStatusRef = 0; + iBuffer->At(index).iNodeStatusRef = 0; + iBuffer->At(index).iDataStatusRef = 0; + iBuffer->At(index).iLengthStatusRef = 0; + iBuffer->At(index).iExecuted = ETrue; + + continue; + } + + if( iBuffer->At(index).iDataSet && + iBuffer->At(index).iWepKeyId > 0 ) + { + iWlanSettings->GetWlanSettings( luid, *iSettings ); + + switch( wepKeyId ) + { + case 1: + iSettings->WepKey1 = iBuffer->At(index).iData->Des(); + break; + case 2: + iSettings->WepKey2 = iBuffer->At(index).iData->Des(); + break; + case 3: + iSettings->WepKey3 = iBuffer->At(index).iData->Des(); + break; + case 4: + iSettings->WepKey4 = iBuffer->At(index).iData->Des(); + break; + default: + continue; + } + + err = iWlanSettings->WriteWlanSettings( *iSettings ); + if( err == KErrNone ) + { + iCallBack->SetStatusL( iBuffer->At(index).iDataStatusRef, CSmlDmAdapter::EOk ); + } + else + { + iCallBack->SetStatusL( iBuffer->At(index).iDataStatusRef, CSmlDmAdapter::EError ); + } + + iBuffer->At(index).iDataStatusRef = 0; + } + + TBuf8<5> addLUID; + addLUID.AppendNum( wepKeyId ); + addLUID.AppendNumFixedWidth( luid, EDecimal, 3 ); + + iCallBack->SetMappingL( iBuffer->At( index).iUri->Des(), addLUID ); + if( iBuffer->At(index).iIdStatusRef ) + iCallBack->SetStatusL( iBuffer->At(index).iIdStatusRef, CSmlDmAdapter::EOk ); + if( iBuffer->At(index).iNodeStatusRef ) + iCallBack->SetStatusL( iBuffer->At(index).iNodeStatusRef, CSmlDmAdapter::EOk ); + if( iBuffer->At(index).iLengthStatusRef ) + iCallBack->SetStatusL( iBuffer->At(index).iLengthStatusRef, CSmlDmAdapter::EOk ); + + iBuffer->At(index).iIdStatusRef = 0; + iBuffer->At(index).iNodeStatusRef = 0; + iBuffer->At(index).iLengthStatusRef = 0; + iBuffer->At(index).iExecuted = ETrue; + } + + //Clean executed command from buffer + for( TInt i=0; iCount(); i++ ) + { + if( iBuffer->At(i).iExecuted ) + { + if( iBuffer->At(i).iUri ) + { + delete iBuffer->At(i).iUri; + iBuffer->At(i).iUri = 0; + } + if( iBuffer->At(i).iData ) + { + delete iBuffer->At(i).iData; + iBuffer->At(i).iData = 0; + } + iBuffer->Delete(i); + iBuffer->Compress(); + } + } +// Secondary SSID Buffer + for( TInt index=0; index index: <%D>"), iBuffer->Count(), index ); + + if( iSecondaryBuffer[index]->iExecuted ) + { + continue; + } + + TSecondarySSID ssid; + ssid.ScannedId = iSecondaryBuffer[index]->ScannedId; + ssid.UsedId = iSecondaryBuffer[index]->UsedId; + + DBG_ARGS8(_S8("CWlanadaptes::Execute Buffer - WLAN_SEC_SSID_SCANNED_SSID uri: <%S> ad WLAN_SEC_SSID_USED_SSID : <%S>"), &iSecondaryBuffer[index]->ScannedId, &iSecondaryBuffer[index]->UsedId ); + + TInt retval = iWlanSettings->WriteSecondarySSIDL(iSecondaryBuffer[index]->wlanLuid, ssid, ETrue); + iSecondaryBuffer[index]->iExecuted=ETrue; + + } + // EAP settings + for( TInt i = 0 ; i < iEAPBuffer.Count() ; i++ ) + { + // Check if this method has encapsulated methods + for ( TInt j = 0; j < iEAPBuffer.Count() ; j++ ) + { + if ( iEAPBuffer[i]->iEAPSettings->iEAPType == iEAPBuffer[j]->iEncapsulatingEAPId ) + { + // j is encapsulated inside i + iEAPBuffer[i]->iEAPSettings->iEncapsulatedEAPTypes.Append( iEAPBuffer[j]->iEAPSettings->iEAPType ); + iEAPBuffer[i]->iEAPSettings->iEncapsulatedEAPTypesPresent = ETrue; + } + } + + TRAPD( err, iWlanSettings->GetEAPInterfaceL(iEAPBuffer[i]->iWLANServiceId, + iEAPBuffer[i]->iEncapsulatingEAPId, + static_cast (iEAPBuffer[i]->iEAPSettings->iEAPType ) ) ); + if ( err == KErrNone ) + { + err = iWlanSettings->WriteEAPSettings( *iEAPBuffer[i]->iEAPSettings ); + } + + MSmlDmAdapter::TError status; + switch ( err ) + { + case KErrNotFound: + { + status = CSmlDmAdapter::ENotFound; + break; + } + case KErrNone: + { + status = CSmlDmAdapter::EOk; + break; + } + default: + { + status = CSmlDmAdapter::EError; + } + } + + for ( TInt j = 0; j < iEAPBuffer[i]->iStatusRefArray.Count() ; j++) + { + iCallBack->SetStatusL( iEAPBuffer[i]->iStatusRefArray[j], status ); + } + } + for ( TInt i = 0 ; i < iEAPBuffer.Count() ; i++ ) + { + iEAPBuffer[i]->iStatusRefArray.Close(); + iEAPBuffer[i]->iEAPSettings->iEncapsulatedEAPTypes.Close(); + iEAPBuffer[i]->iEAPSettings->iCipherSuites.Close(); + delete iEAPBuffer[i]->iEAPSettings; + iEAPBuffer[i]->iEAPSettings = NULL; + } + iEAPBuffer.ResetAndDestroy(); + } + + +//============================================= +// CNSmlWLanAdapter::ConvertTo8LC() +// Converts string value to 8-bit +// +//============================================= +TDesC8& CNSmlWLanAdapter::ConvertTo8LC( const TDesC& aSource ) + { + HBufC8* buf = HBufC8::NewLC( aSource.Length()*2); + TPtr8 bufPtr = buf->Des(); + CnvUtfConverter::ConvertFromUnicodeToUtf8( bufPtr, aSource ); + + return *buf; + } + +//============================================= +// CNSmlWLanAdapter::ConvertTo16LC() +// Converts string value to 16-bit +// +//============================================= +TDesC16& CNSmlWLanAdapter::ConvertTo16LC( const TDesC8& aSource) + { + HBufC16* buf16 = HBufC16::NewLC( aSource.Length() ); + TPtr bufPtr16 = buf16->Des(); + + CnvUtfConverter::ConvertToUnicodeFromUtf8(bufPtr16, aSource); + + return *buf16; + } + +void CNSmlWLanAdapter::ResetEAPStructL() + { + DeleteEAPStructL(); + iEAPSettings = new (ELeave) EAPSettings; + } + + +void CNSmlWLanAdapter::DeleteEAPStructL() + { + if (iEAPSettings != NULL) + { + if (iEAPSettings->iCertificatesPresent) + { + iEAPSettings->iCertificates.Reset(); + } + iEAPSettings->iEncapsulatedEAPTypes.Close(); + iEAPSettings->iCipherSuites.Close(); + + delete iEAPSettings; + iEAPSettings = NULL; + } + } + + +void CNSmlWLanAdapter::DesToBufferL(CBufBase& aTo, const TDesC& aFrom) + { + aTo.InsertL( 0, ConvertTo8LC(aFrom) ); + CleanupStack::PopAndDestroy(); // ConvertTo8LC + } + +void CNSmlWLanAdapter::FillCipherSuiteBufferL(CBufBase& aBuffer) + { + if (iEAPSettings == NULL || !iEAPSettings->iCipherSuitesPresent) + { + return; + } + // 0 5 10 15 20 25 30 35 + _LIT8(KPlus, "+"); + aBuffer.InsertL(0,KSuitesDefault); + TInt count = iEAPSettings->iCipherSuites.Count(); + for (TInt i=count-1; i>=0;--i) + { + switch (iEAPSettings->iCipherSuites[i]) + { + case RSA_3DES_SHA: + { + aBuffer.Write(0, KPlus); + break; + } + case DHE_RSA_3DES_SHA: + { + aBuffer.Write(5, KPlus); + break; + } + case DHE_DSS_3DES_SHA: + { + aBuffer.Write(10, KPlus); + break; + } + case RSA_AES_SHA: + { + aBuffer.Write(15, KPlus); + break; + } + case DHE_RSA_AES_SHA: + { + aBuffer.Write(20, KPlus); + break; + } + case DHE_DSS_AES_SHA: + { + aBuffer.Write(25, KPlus); + break; + } + case RSA_RC4_MD5: + { + aBuffer.Write(30, KPlus); + break; + } + case RSA_RC4_SHA: + { + aBuffer.Write(35, KPlus); + break; + } + default: + { + break; + } + + } + } + + } + + +void CNSmlWLanAdapter::FillCipherSuitesL(const TDesC8& aObject, const TInt aLuid) + { + if (iEAPBuffer[aLuid] == NULL) + { + return; + } + iEAPBuffer[aLuid]->iEAPSettings->iCipherSuites.Reset(); + iEAPBuffer[aLuid]->iEAPSettings->iCipherSuitesPresent = EFalse; // init to EFalse + + TChar plus('+'); + + TInt length = aObject.Length(); + for (TInt i=0; i+3iEAPSettings->iCipherSuites.Append(suite); + iEAPBuffer[aLuid]->iEAPSettings->iCipherSuitesPresent = ETrue; + } + } + } + +void CNSmlWLanAdapter::ConvertEAPStringToIds( const TDesC8& aEAPString, TDes8& aExpandedId, EAPSettings::TEapType& aId) + { + if ( aEAPString == KEAPSIM ) + { + aExpandedId.Copy( KEapSimTypeId, KExpandedEAPIdLength ); + aId = EAPSettings::EEapSim; + } + else if( aEAPString == KEAPAKA ) + { + aExpandedId.Copy( KEapAkaTypeId, KExpandedEAPIdLength ); + aId = EAPSettings::EEapAka; + } + else if( aEAPString == KEAPTLS ) + { + aExpandedId.Copy( KEapTlsTypeId, KExpandedEAPIdLength ); + aId = EAPSettings::EEapTls; + } + else if( aEAPString == KEAPPEAP ) + { + aExpandedId.Copy( KEapPeapTypeId, KExpandedEAPIdLength ); + aId = EAPSettings::EEapPeap; + } + else if( aEAPString == KEAPTTLS ) + { + aExpandedId.Copy( KEapTtlsTypeId, KExpandedEAPIdLength ); + aId = EAPSettings::EEapTtls; + } + else if( aEAPString == KEAPLEAP ) + { + aExpandedId.Copy( KEapLeapTypeId, KExpandedEAPIdLength ); + aId = EAPSettings::EEapLeap; + } + else if( aEAPString == KEAPMSCHAPV2 ) + { + aExpandedId.Copy( KEapMschapv2TypeId, KExpandedEAPIdLength ); + aId = EAPSettings::EEapMschapv2; + } + else if( aEAPString == KMSCHAPV2 ) + { + aExpandedId.Copy( KMschapv2TypeId, KExpandedEAPIdLength ); + aId = EAPSettings::EPlainMschapv2; + } + else if( aEAPString == KEAPGTC ) + { + aExpandedId.Copy( KEapGtcTypeId, KExpandedEAPIdLength ); + aId = EAPSettings::EEapGtc; + } + else if( aEAPString == KEAPFAST ) + { + aExpandedId.Copy( KEapFastTypeId, KExpandedEAPIdLength ); + aId = EAPSettings::EEapFast; + } + else if( aEAPString == KEAPTTLSPAP ) + { + aExpandedId.Copy( KTtlspapTypeId, KExpandedEAPIdLength ); + aId = static_cast(98); + } + else + { + aExpandedId.Copy( KEapNoneId, KExpandedEAPIdLength ); + aId = EAPSettings::EEapNone; + } + + } + + +// end of file