omadmadapters/nsmldminternet/inc/NSmlWLanAdapter.h
changeset 42 aa33c2cb9a50
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadmadapters/nsmldminternet/inc/NSmlWLanAdapter.h	Tue Jul 06 14:06:19 2010 +0300
@@ -0,0 +1,397 @@
+/*
+ * Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies). 
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:   Wlan adapter
+ *
+ */
+
+#ifndef __NSMLWLANADAPTER_H__
+#define __NSMLWLANADAPTER_H__
+
+// -----------------------------------------------------------------------------------------------
+// Includes
+// -----------------------------------------------------------------------------------------------
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <commsdat_partner.h>
+#endif
+#include <utf.h>
+#include <commdb.h>
+#include <EapSettings.h>
+#include "smldmadapter.h"
+#include "nsmlconstants.h"
+#include "NSmlWlanSettings.h"
+
+// -----------------------------------------------------------------------------------------------
+// Constants
+// -----------------------------------------------------------------------------------------------
+const TInt KNSmlWepKeyGranularity = 4;
+const TInt KNSmlMaxURISegLen = 32;
+const TInt KExpandedEAPIdLength = 8;
+const TInt KNsmlSubjectKeyIdLength = 255;
+const TInt KIdentifierLength = 20;
+const TUint KMaxLengthOfEapList = 50;
+
+_LIT8( KNSmlWLanAdapterDDFversion, "1.0" );
+_LIT16( KNSmlWLanServiceTable, "WLANServiceTable" );
+_LIT8( KNSmlWLanId, "Id" );
+_LIT8( KNSmlWLanName, "Name" );
+_LIT8( KNSmlWLanHidden, "Hidden" );
+_LIT8( KNSmlWLanReadOnly, "ReadOnly" );
+_LIT8( KNSmlWLanServiceId, "ServiceID" );
+_LIT8( KNSmlWLanNetworkMode, "NetworkMode" );
+_LIT8( KNSmlWLanConnectionMode, "WlanConnectionMode" );
+_LIT8( KNSmlWLanSsid, "SSID" );
+_LIT8( KNSmlWLanUsedSsid, "UsedSSID" );
+_LIT8( KNSmlWLanSsidHidden, "SSIDHidden" );
+_LIT8( KNSmlWLanUseWPAPSK, "UseWPAPSK" );
+_LIT8( KNSmlWLanEnablePSK, "EnablePSK" );
+_LIT8( KNSmlWLanWepKey1, "WEPKey1InHex" );
+_LIT8( KNSmlWLanWepKey2, "WEPKey2InHex" );
+_LIT8( KNSmlWLanWepKey3, "WEPKey3InHex" );
+_LIT8( KNSmlWLanWepKey4, "WEPKey4InHex" );
+_LIT8( KNSmlWLanWepIndex, "WEPKeyIndex" );
+_LIT8( KNSmlWLanWepKey, "WEPKey" );
+_LIT8( KNSmlWLanSecurityMode, "SecurityMode" );
+_LIT8( KNSmlWLanWpaAuthMode, "WPAAuthMode" );
+_LIT8( KNSmlWLanWpaPreSharedKey, "WPAPreSharedKey" );
+_LIT8( KNSmlWLanEapList, "WLANEAPList" );
+_LIT8( KNSmlWLanAuthMode, "WEPAuthMode" );
+_LIT8( KNSmlWLanWepKeyId, "WEPKeyID" );
+_LIT8( KNSmlWLanWepKeyData, "Data" );
+_LIT8( KNSmlWLanNodeName, "WLAN" );
+
+_LIT8( KNSmlEmpty, "" );
+#define  KNSmlWLanDefaultSSID _S("Net1")
+
+_LIT8( KNSmlWLan, "/WLAN" );
+_LIT8( KNSmlNAPDefWlanNode,"Name/NAPID/Bearer/IPAddrFromServer/IfNetworks/NAPAddr/NAPAddrTy/IPDNSAddrFromServer/DNSAddr/DefGW/NetworkMask/Networks/IAPService");
+
+_LIT8( KNSmlWLanListOfLeafs, "SSID/UsedSSID/SSIDHidden/NetworkMode/SecurityMode/WPAPreSharedKey/UseWPAPSK/WEPKey/WEPKeyIndex/WLANEAPList/WEPAuthMode/EAP/SecondarySSID" );
+
+_LIT8( KNSmlWLanListOfSecondaryLeafs, "SSID/UsedSSID" );
+_LIT8( KNSmlWLanListOfWepKeys, "1/2/3/4" );
+_LIT8( KNSmlWLanListOfWepKeyLeafs, "WEPKeyID/Data" );
+_LIT8( KNSmlWLanAllowUnsecure8, "allow unsecure" );
+_LIT8( KNSmlWLanWep8, "WEP" );
+_LIT8( KNSmlWLan8021x8, "802.1X" );
+_LIT8( KNSmlWLanWpa8, "WPA" );
+_LIT8( KNSmlWLanWpa28, "WPA2" );
+_LIT8( KNSmlWLanWpaPreSharedKey8, "WPA pre-shared key" );
+_LIT8( KNSmlWLanAdHoc8, "ADHOC" );
+_LIT8( KNSmlWLanInfrastructure8, "Infrastructure" );
+_LIT8( KNSmlMimeType, "text/plain" );
+
+#ifdef FF_WLAN_EXTENSIONS
+_LIT8( KNSmlWLanListOfEAPLeafs, "EAPType/Username/Password/Realm/UsePseudonym/VerifyCertRealm/RequireClientAuthentication/SessionValidityTime/CipherSuite/AllowPEAPv0/AllowPEAPv1/AllowPEAPv2/Certificate/AuthProvMode/UnauthProvMode/PACGroupRef/WarnADHPNoPAC/WarnADHPNoMatchPAC/WarnNotDefaultSrv" );
+#else
+_LIT8( KNSmlWLanListOfEAPLeafs, "EAPType/Username/Password/Realm/UsePseudonym/VerifyCertRealm/RequireClientAuthentication/SessionValidityTime/CipherSuite/AllowPEAPv0/AllowPEAPv1/AllowPEAPv2/Certificate" );
+#endif
+
+_LIT8( KNSmlWLanListOfCertificateLeafs, "IssuerName/SubjectName/CertType/SerialNumber/SubjectKeyId/Fingerprint" );
+
+_LIT8( KNSmlWLanSecSsid, "SecondarySSID" );
+_LIT8( KNSmlWLanEap, "EAP" );
+_LIT8( KNSmlWLanEapType, "EAPType" );
+_LIT8( KNSmlWLanUsername, "Username" );
+_LIT8( KNSmlWLanPassword, "Password" );
+_LIT8( KNSmlWLanRealm, "Realm" );
+_LIT8( KNSmlWLanUsePseudonym, "UsePseudonym" );
+_LIT8( KNSmlWLanEncapsulation, "Encapsulation" );
+_LIT8( KNSmlWLanVerifyCertRealm, "VerifyCertRealm" );
+_LIT8( KNSmlWLanRequireClientAuthentication, "RequireClientAuthentication" );
+_LIT8( KNSmlWLanSessionValidityTime, "SessionValidityTime" );
+_LIT8( KNSmlWLanCipherSuite, "CipherSuite" );
+_LIT8( KNSmlWLanAllowPEAPv0, "AllowPEAPv0" );
+_LIT8( KNSmlWLanAllowPEAPv1, "AllowPEAPv1" );
+_LIT8( KNSmlWLanAllowPEAPv2, "AllowPEAPv2" );
+#ifdef FF_WLAN_EXTENSIONS 
+_LIT8( KNSmlWLanAuthProvMode, "AuthProvMode" );
+_LIT8( KNSmlWLanUnauthProvMode, "UnauthProvMode" );
+_LIT8( KNSmlWLanPACGroupRef, "PACGroupRef" );
+_LIT8( KNSmlWLanWarnADHPNoPAC, "WarnADHPNoPAC" );
+_LIT8( KNSmlWLanWarnADHPNoMatchPAC, "WarnADHPNoMatchPAC" );
+_LIT8( KNSmlWLanWarnNotDefaultSrv, "WarnNotDefaultSrv" );
+#endif
+_LIT8( KNSmlWLanCertificate, "Certificate" );
+_LIT8( KNSmlWLanIssuerName, "IssuerName" );
+_LIT8( KNSmlWLanSubjectName, "SubjectName" );
+_LIT8( KNSmlWLanCertType, "CertType" );
+_LIT8( KNSmlWLanSerialNumber, "SerialNumber" );
+_LIT8( KNSmlWLanSubjectKeyId, "SubjectKeyId" );
+_LIT8( KNSmlWLanFingerprint, "Fingerprint" );
+
+_LIT8(KTrue, "True");
+_LIT8(KFalse, "False");
+_LIT8(KTtrue, "true");
+_LIT8(KFfalse, "false");
+_LIT8(KSlash, "/");
+_LIT8(KDash, "-");
+_LIT8(KNSmlWLanEapId, "EAPId" );
+
+_LIT8(KSuitesDefault, "-010,-022,-019,-047,-050,-051,-004,-005");
+
+const TUint RSA_3DES_SHA = 10;
+const TUint DHE_RSA_3DES_SHA = 22;
+const TUint DHE_DSS_3DES_SHA = 19;
+const TUint RSA_AES_SHA = 47; // ?
+const TUint DHE_RSA_AES_SHA = 50; // ?
+const TUint DHE_DSS_AES_SHA = 51; // ?
+const TUint RSA_RC4_MD5 = 4;
+const TUint RSA_RC4_SHA = 5;
+const TUint NUMBER_OF_CIPHERSUITES = 8;
+const TUint KExpandedEapIdLength = 8;
+const TUint8 KEapPlus = '+';
+
+_LIT8(KEAPSIM, "EAP-SIM");
+_LIT8(KEAPAKA, "EAP-AKA");
+_LIT8(KEAPTLS, "EAP-TLS");
+_LIT8(KEAPPEAP, "EAP-PEAP");
+_LIT8(KEAPTTLS, "EAP-TTLS");
+_LIT8(KEAPLEAP, "EAP-LEAP");
+_LIT8(KEAPMSCHAPV2, "EAP-MSCHAPV2");
+_LIT8(KMSCHAPV2, "MSCHAPV2");
+_LIT8(KEAPGTC, "EAP-GTC");
+_LIT8(KEAPFAST, "EAP-FAST");
+_LIT8(KEAPTTLSPAP, "EAP-TTLSPAP");
+
+_LIT8(KEapAll,"-017,-018,-023,-013,-025,-021,-043" );
+
+const TUint8 KEapNoneId[] =
+    {
+    0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+    };
+const TUint8 KEapTlsTypeId[] =
+    {
+    0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d
+    };
+const TUint8 KEapGtcTypeId[] =
+    {
+    0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06
+    };
+const TUint8 KEapLeapTypeId[] =
+    {
+    0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11
+    };
+const TUint8 KEapSimTypeId[] =
+    {
+    0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12
+    };
+const TUint8 KEapTtlsTypeId[] =
+    {
+    0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15
+    };
+const TUint8 KEapAkaTypeId[] =
+    {
+    0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17
+    };
+const TUint8 KEapPeapTypeId[] =
+    {
+    0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19
+    };
+const TUint8 KEapMschapv2TypeId[] =
+    {
+    0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A
+    };
+const TUint8 KEapSecuridTypeId[] =
+    {
+    0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20
+    };
+const TUint8 KEapFastTypeId[] =
+    {
+    0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B
+    };
+const TUint8 KMschapv2TypeId[] =
+    {
+    0xfe, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x63
+    };
+const TUint8 KTtlspapTypeId[] =
+    {
+    0xfe, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x62
+    };
+const TUint8 KNotInsidePEAP = 0x04;
+const TUint8 KNotOutsidePEAP = 0x08;
+const TUint8 KNotInsideTTLS = 0x10;
+
+//Forward Declarations
+class TEapExpandedType;
+
+// -----------------------------------------------------------------------------------------------
+// Structures
+// -----------------------------------------------------------------------------------------------
+struct TNSmlWepKeyBufferElement
+    {
+    HBufC8* iUri;
+    HBufC8* iData;
+    TInt iWepKeyId;
+    TInt iIdStatusRef;
+    //TInt iUseWPAPSK;
+    TInt iDataStatusRef;
+    TInt iNodeStatusRef;
+    TInt iLengthStatusRef;
+    TBool iExecuted;
+    TBool iDataSet;
+    TInt iLuid;
+    };
+
+struct TNSmlSecondarySSIDBufferElement
+    {
+    HBufC8* iUri;
+    TBuf<KMaxTextLength> ScannedId;
+    TBuf<KMaxTextLength> UsedId;
+    TInt wlanLuid;
+    TBool iExecuted;
+    };
+
+struct TNSmlEAPBufferElement
+    {
+    EAPSettings* iEAPSettings;
+    TEapExpandedType iEncapsulatingExpandedEapId;
+    RArray<TInt> iStatusRefArray;
+    TInt iWLANServiceId;
+    TBuf8<KExpandedEapIdLength> iEapTypeString;
+    TBuf8<KExpandedEapIdLength> iEncapsulatingString;
+    };
+
+// -----------------------------------------------------------------------------------------------
+// Enumerations
+// -----------------------------------------------------------------------------------------------
+enum TConnectionMode
+    {
+    EAdhoc = 0, EInfrastructure = 1
+    };
+
+enum TWLanSecurityMode
+    {
+    EAllowUnsecure = 1, EWep = 2, EWlan8021x = 4, EWpa = 8, EWpa2 = 16
+    };
+
+enum TWepAuthenticationMode
+    {
+    EOpen = 0, EShared = 1
+    };
+
+enum TNsmlWLANAdapterEapType
+    {
+    EEapNone = 0,
+    EEapGtc = 6,
+    EEapTls = 13,
+    EEapLeap = 17,
+    EEapSim = 18,
+    EEapTtls = 21,
+    EEapAka = 23,
+    EEapPeap = 25,
+    EEapMschapv2 = 26,
+    EEapSecurid = 32,
+    EEapFast = 43,
+    ETtlsPlainPap = 98,
+    EPlainMschapv2 = 99
+    };
+// ------------------------------------------------------------------------------------------------
+// CNSmlWLanAdapter 
+// ------------------------------------------------------------------------------------------------
+class CNSmlWLanAdapter : public CSmlDmAdapter
+    {
+public:
+    static CNSmlWLanAdapter* NewL(MSmlDmCallback* aDmCallback,
+            CCommsDatabase& aDatabase);
+    static CNSmlWLanAdapter* NewLC(MSmlDmCallback* aDmCallback,
+            CCommsDatabase& aDatabase);
+    void ConstructL(CCommsDatabase& aDatabase);
+    virtual ~CNSmlWLanAdapter();
+
+    // Adapter interface
+    void DDFVersionL(CBufBase& aDDFVersion);
+    void DDFStructureL(MSmlDmDDFObject& aDDF);
+    void
+            AddLeafObjectL(const TDesC8& aURI, const TDesC8& aParentLUID,
+                    const TDesC8& aObject, const TDesC8& aType,
+                    const TInt aStatusRef);
+    void
+            UpdateLeafObjectL(const TDesC8& aURI, const TDesC8& aLUID,
+                    const TDesC8& aObject, const TDesC8& aType,
+                    const TInt aStatusRef);
+    void UpdateLeafObjectL(const TDesC8& aURI, const TDesC8& aLUID,
+            RWriteStream*& aStream, const TDesC8& aType, TInt aStatusRef);
+    void DeleteObjectL(const TDesC8& aURI, const TDesC8& aLUID,
+            const TInt aStatusRef);
+    void FetchLeafObjectL(const TDesC8& aURI, const TDesC8& aLUID,
+            const TDesC8& aType, const TInt aResultsRef,
+            const TInt aStatusRef);
+    void FetchLeafObjectSizeL(const TDesC8& aURI, const TDesC8& aLUID,
+            const TDesC8& aType, TInt aResultsRef, TInt aStatusRef);
+
+    void ChildURIListL(const TDesC8& aURI, const TDesC8& aLUID,
+            const CArrayFix<TSmlDmMappingInfo>& aPreviousURISegmentList,
+            const TInt aResultsRef, const TInt aStatusRef);
+    void AddNodeObjectL(const TDesC8& aURI, const TDesC8& aParentLUID,
+            const TInt aStatusRef);
+    void ExecuteCommandL(const TDesC8& aURI, const TDesC8& aLUID,
+            const TDesC8& aArgument, const TDesC8& aType, TInt aStatusRef);
+    void ExecuteCommandL(const TDesC8& aURI, const TDesC8& aLUID,
+            RWriteStream*& aStream, const TDesC8& aType, TInt aStatusRef);
+    void CopyCommandL(const TDesC8& aTargetURI, const TDesC8& aTargetLUID,
+            const TDesC8& aSourceURI, const TDesC8& aSourceLUID,
+            const TDesC8& aType, TInt aStatusRef);
+    void StartAtomicL();
+    void CommitAtomicL();
+    void RollbackAtomicL();
+    TBool StreamingSupport(TInt& aItemSize);
+    void StreamCommittedL();
+    void CompleteOutstandingCmdsL();
+    CSmlDmAdapter::TError FetchLeafObjectL(const TDesC8& aURI,
+            const TDesC8& aLUID, const TDesC8& aType, CBufBase& aObject);
+
+private:
+    CNSmlWLanAdapter(TAny* aEcomArguments, CCommsDatabase& aDatabase);
+    void FillNodeInfoL(MSmlDmDDFObject& aNode, TSmlDmAccessTypes aAccTypes,
+            MSmlDmDDFObject::TOccurence aOccurrence,
+            MSmlDmDDFObject::TScope aScope,
+            MSmlDmDDFObject::TDFFormat aFormat, const TDesC8& aDescription);
+    HBufC* IntToDesLC(const TInt aLuid);
+    HBufC8* IntToDes8LC(const TInt aLuid);
+    TInt DesToInt(const TDesC8& aLuid);
+    TInt GetIdFromLuid(const TDesC8& aLuid);
+    TUint32 GetSecSSIDFromUriL(const TDesC8& aUri);
+    TInt GetEAPIdFromUri(const TDesC8& aUri);
+    TInt GetCertificateIdFromUri(const TDesC8& aUri);
+    TInt GetWepKeyIdFromLuid(const TDesC8& aLuid);
+    TInt GetWepKeyIdFromUri(const TDesC8& aUri);
+    TInt NumOfUriSegs(const TDesC8& aUri);
+    TPtrC8 GetLastUriSeg(const TDesC8& aURI);
+    TPtrC8 RemoveLastUriSeg(const TDesC8& aURI);
+    void ExecuteBufferL(TBool aFinal = EFalse);
+    TDesC8& ConvertTo8LC(const TDesC& aSource);
+    TDesC16& ConvertTo16LC(const TDesC8& aSource);
+    void DesToBufferL(CBufBase& aTo, const TDesC& aFrom);
+    void FillCipherSuiteBufferL(CBufBase& aBuffer);
+    void FillCipherSuitesL(const TDesC8& aObject, const TInt aLuid);
+    void ConvertEAPStringToIds(TDes8& aEAPString, TEapExpandedType& aId);
+    TInt GetServiceIdFromUriL(const TDesC8& aURI);
+    TInt GetEncapsEAPIdFromUri(const TDesC8& aUri);
+    void ResetEAPStructL();
+    void DeleteEAPStructL();
+    void GetExpandedType(const TInt aEapType, const TInt aTunnelingType,
+            TEapExpandedType& aExpanedId, TEapExpandedType& aExpanedEncapsId);
+
+    MSmlDmCallback* iCallBack;
+    CWlanSettings* iWlanSettings;
+    CArrayFixFlat<TNSmlWepKeyBufferElement> *iBuffer;
+    TWlanSettings *iSettings;
+    EAPSettings* iEAPSettings;
+    RPointerArray<TNSmlSecondarySSIDBufferElement> iSecondaryBuffer;
+    RPointerArray<TNSmlEAPBufferElement> iEAPBuffer;
+    CCommsDatabase& iDatabase;
+
+    };
+
+#endif __NSMLWLANADAPTER_H__