omadmadapters/syncmlds/src/NSmlDsSettingsAdapter.cpp
author hgs
Tue, 13 Jul 2010 03:48:30 +0530
changeset 45 0f9fc722d255
parent 44 deviceupdatesui/omadmadapters/syncmlds/src/NSmlDsSettingsAdapter.cpp@137912d1a556
child 56 a9afc3a8dbfa
permissions -rw-r--r--
201021_01
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
44
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies). 
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:    DS-settings adapter
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
hgs
parents:
diff changeset
    21
// INCLUDE FILES
hgs
parents:
diff changeset
    22
#include "NSmlDSSettingsAdapter.h"
hgs
parents:
diff changeset
    23
#include "nsmldebug.h"
hgs
parents:
diff changeset
    24
#include "nsmlconstants.h"
hgs
parents:
diff changeset
    25
#include "nsmldmconstants.h"
hgs
parents:
diff changeset
    26
#include "nsmldmimpluids.h"
hgs
parents:
diff changeset
    27
#include "nsmldmiapmatcher.h"
hgs
parents:
diff changeset
    28
hgs
parents:
diff changeset
    29
#include <implementationproxy.h>
hgs
parents:
diff changeset
    30
#include <badesca.h>
hgs
parents:
diff changeset
    31
#include <utf.h>
hgs
parents:
diff changeset
    32
#include <SyncMLTransportProperties.h>
hgs
parents:
diff changeset
    33
hgs
parents:
diff changeset
    34
#ifndef __WINS__
hgs
parents:
diff changeset
    35
// This lowers the unnecessary compiler warning (armv5) to remark.
hgs
parents:
diff changeset
    36
// "Warning:  #174-D: expression has no effect..." is caused by 
hgs
parents:
diff changeset
    37
// DBG_ARGS8 macro in no-debug builds.
hgs
parents:
diff changeset
    38
#pragma diag_remark 174
hgs
parents:
diff changeset
    39
#endif
hgs
parents:
diff changeset
    40
hgs
parents:
diff changeset
    41
hgs
parents:
diff changeset
    42
// ============================ MEMBER FUNCTIONS ===============================
hgs
parents:
diff changeset
    43
hgs
parents:
diff changeset
    44
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    45
//  CNSmlDSSettingsAdapter::NewL
hgs
parents:
diff changeset
    46
//  Two-phased constructor.
hgs
parents:
diff changeset
    47
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    48
CNSmlDSSettingsAdapter* CNSmlDSSettingsAdapter::NewL( MSmlDmCallback* aDmCallback )
hgs
parents:
diff changeset
    49
	{
hgs
parents:
diff changeset
    50
	_DBG_FILE("CNSmlDSSettingsAdapter::NewL(): begin");
hgs
parents:
diff changeset
    51
hgs
parents:
diff changeset
    52
	CNSmlDSSettingsAdapter* self = NewLC( aDmCallback );
hgs
parents:
diff changeset
    53
	CleanupStack::Pop();
hgs
parents:
diff changeset
    54
hgs
parents:
diff changeset
    55
	_DBG_FILE("CNSmlDSSettingsAdapter::NewL(): end");
hgs
parents:
diff changeset
    56
	return self;
hgs
parents:
diff changeset
    57
	}
hgs
parents:
diff changeset
    58
hgs
parents:
diff changeset
    59
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    60
//  CNSmlDSSettingsAdapter::NewLC
hgs
parents:
diff changeset
    61
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    62
CNSmlDSSettingsAdapter* CNSmlDSSettingsAdapter::NewLC(MSmlDmCallback* aDmCallback )
hgs
parents:
diff changeset
    63
	{
hgs
parents:
diff changeset
    64
	_DBG_FILE("CNSmlDSSettingsAdapter::NewLC(): begin");
hgs
parents:
diff changeset
    65
	CNSmlDSSettingsAdapter* self = new ( ELeave ) CNSmlDSSettingsAdapter( aDmCallback );
hgs
parents:
diff changeset
    66
	CleanupStack::PushL( self );
hgs
parents:
diff changeset
    67
	self->iCallBack = aDmCallback;
hgs
parents:
diff changeset
    68
hgs
parents:
diff changeset
    69
	self->ConstructL();
hgs
parents:
diff changeset
    70
	self->iLeafType = EDSUnset;
hgs
parents:
diff changeset
    71
    
hgs
parents:
diff changeset
    72
	_DBG_FILE("CNSmlDSSettingsAdapter::NewLC(): end");
hgs
parents:
diff changeset
    73
	return self;
hgs
parents:
diff changeset
    74
	}
hgs
parents:
diff changeset
    75
hgs
parents:
diff changeset
    76
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
    77
// CNSmlDSSettingsAdapter::CNSmlDSSettingsAdapter
hgs
parents:
diff changeset
    78
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
    79
CNSmlDSSettingsAdapter::CNSmlDSSettingsAdapter(TAny* aEcomArguments) : CSmlDmAdapter(aEcomArguments)
hgs
parents:
diff changeset
    80
	{
hgs
parents:
diff changeset
    81
	_DBG_FILE("CNSmlDSSettingsAdapter::CNSmlDSSettingsAdapter(): begin");
hgs
parents:
diff changeset
    82
	_DBG_FILE("CNSmlDSSettingsAdapter::CNSmlDSSettingsAdapter(): end");
hgs
parents:
diff changeset
    83
	}
hgs
parents:
diff changeset
    84
hgs
parents:
diff changeset
    85
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
    86
//  CNSmlDSSettingsAdapter::~CNSmlDSSettingsAdapter()
hgs
parents:
diff changeset
    87
//  Class destructor.
hgs
parents:
diff changeset
    88
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
    89
CNSmlDSSettingsAdapter::~CNSmlDSSettingsAdapter()
hgs
parents:
diff changeset
    90
	{
hgs
parents:
diff changeset
    91
	_DBG_FILE("CNSmlDSSettingsAdapter::~CNSmlDSSettingsAdapter(): begin");
hgs
parents:
diff changeset
    92
    delete iPrevURI;
hgs
parents:
diff changeset
    93
    delete iField;
hgs
parents:
diff changeset
    94
    
hgs
parents:
diff changeset
    95
	// Command buffer cleaning
hgs
parents:
diff changeset
    96
	if ( iBuffer )
hgs
parents:
diff changeset
    97
		{
hgs
parents:
diff changeset
    98
		
hgs
parents:
diff changeset
    99
		for( TInt i=0; i<iBuffer->Count(); i++ )
hgs
parents:
diff changeset
   100
			{
hgs
parents:
diff changeset
   101
			delete iBuffer->At(i).iMappingName;
hgs
parents:
diff changeset
   102
			delete iBuffer->At(i).iName;
hgs
parents:
diff changeset
   103
hgs
parents:
diff changeset
   104
			for( TInt j=0; j<iBuffer->At(i).iNodeBuf->Count(); j++ )
hgs
parents:
diff changeset
   105
				{
hgs
parents:
diff changeset
   106
				delete iBuffer->At(i).iNodeBuf->At(j).iUri;
hgs
parents:
diff changeset
   107
				if( iBuffer->At(i).iNodeBuf->At(j).iData )
hgs
parents:
diff changeset
   108
					{
hgs
parents:
diff changeset
   109
					delete iBuffer->At(i).iNodeBuf->At(j).iData;
hgs
parents:
diff changeset
   110
					}
hgs
parents:
diff changeset
   111
				}
hgs
parents:
diff changeset
   112
			iBuffer->At(i).iNodeBuf->Reset();
hgs
parents:
diff changeset
   113
			delete iBuffer->At(i).iNodeBuf;
hgs
parents:
diff changeset
   114
			}
hgs
parents:
diff changeset
   115
hgs
parents:
diff changeset
   116
		iBuffer->Reset();
hgs
parents:
diff changeset
   117
		delete iBuffer;
hgs
parents:
diff changeset
   118
		}
hgs
parents:
diff changeset
   119
    
hgs
parents:
diff changeset
   120
    iDSProfile.Close();
hgs
parents:
diff changeset
   121
    iSyncSession.Close();
hgs
parents:
diff changeset
   122
    iSyncSessionOpen = EFalse;
hgs
parents:
diff changeset
   123
        
hgs
parents:
diff changeset
   124
    delete iPortNbr;
hgs
parents:
diff changeset
   125
    delete iPortBuf;
hgs
parents:
diff changeset
   126
    delete iRdbDataStore;
hgs
parents:
diff changeset
   127
    
hgs
parents:
diff changeset
   128
    iBufferExecution = EFalse;
hgs
parents:
diff changeset
   129
    
hgs
parents:
diff changeset
   130
    iCallBack = 0;
hgs
parents:
diff changeset
   131
hgs
parents:
diff changeset
   132
	_DBG_FILE("CNSmlDSSettingsAdapter::~CNSmlDSSettingsAdapter(): end");
hgs
parents:
diff changeset
   133
	}
hgs
parents:
diff changeset
   134
hgs
parents:
diff changeset
   135
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
   136
//		CNSmlDSSettingsAdapter::ConstructL
hgs
parents:
diff changeset
   137
//		Second phase constructor.
hgs
parents:
diff changeset
   138
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
   139
void CNSmlDSSettingsAdapter::ConstructL()
hgs
parents:
diff changeset
   140
	{
hgs
parents:
diff changeset
   141
	iField = HBufC8::NewL( KNSmlMaxURLLength );
hgs
parents:
diff changeset
   142
	iPrevURI = HBufC8::NewL( KNSmlMaxURLLength );
hgs
parents:
diff changeset
   143
    iRdbDataStore = HBufC16::NewL( KNSmlMaxRemoteNameLength );
hgs
parents:
diff changeset
   144
//
hgs
parents:
diff changeset
   145
//	Command buffering used for AddNode + AddLeaf
hgs
parents:
diff changeset
   146
//
hgs
parents:
diff changeset
   147
	iBuffer = new ( ELeave ) CArrayFixFlat <TNSmlDSBufferElement> ( KNSmlDSGranularity );
hgs
parents:
diff changeset
   148
hgs
parents:
diff changeset
   149
    iSyncSessionOpen = EFalse;
hgs
parents:
diff changeset
   150
hgs
parents:
diff changeset
   151
    iPortNbr = 0;
hgs
parents:
diff changeset
   152
    iBufferExecution = EFalse;
hgs
parents:
diff changeset
   153
	}
hgs
parents:
diff changeset
   154
	
hgs
parents:
diff changeset
   155
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
   156
//  CNSmlDSSettingsAdapter::DDFVersionL
hgs
parents:
diff changeset
   157
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
   158
void CNSmlDSSettingsAdapter::DDFVersionL(CBufBase& aVersion)
hgs
parents:
diff changeset
   159
	{
hgs
parents:
diff changeset
   160
	aVersion.InsertL( 0, KVersion );
hgs
parents:
diff changeset
   161
    }
hgs
parents:
diff changeset
   162
hgs
parents:
diff changeset
   163
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
   164
//  CNSmlDSSettingsAdapter::DDFStructureL
hgs
parents:
diff changeset
   165
//  Fills the DDF structure of the adapter.
hgs
parents:
diff changeset
   166
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
   167
void CNSmlDSSettingsAdapter::DDFStructureL( MSmlDmDDFObject& aDDF )
hgs
parents:
diff changeset
   168
	{
hgs
parents:
diff changeset
   169
	_DBG_FILE("CNSmlDSSettingsAdapter::DDFStructureL(): begin");
hgs
parents:
diff changeset
   170
hgs
parents:
diff changeset
   171
	TSmlDmAccessTypes *aclTypes = new ( ELeave ) TSmlDmAccessTypes();
hgs
parents:
diff changeset
   172
	CleanupStack::PushL( aclTypes );
hgs
parents:
diff changeset
   173
hgs
parents:
diff changeset
   174
    //  Set Get as acceptable operations
hgs
parents:
diff changeset
   175
	aclTypes->SetGet();
hgs
parents:
diff changeset
   176
hgs
parents:
diff changeset
   177
    MSmlDmDDFObject* ddfRoot = &aDDF;
hgs
parents:
diff changeset
   178
    MSmlDmDDFObject& ddf = ddfRoot->AddChildObjectL( KNSmlDdfRoot );
hgs
parents:
diff changeset
   179
    FillNodeInfoL( ddf, *aclTypes, MSmlDmDDFObject::EOne, 
hgs
parents:
diff changeset
   180
                    MSmlDmDDFObject::EPermanent, MSmlDmDDFObject::ENode, 
hgs
parents:
diff changeset
   181
                    KNSmlDdfRootDescription, KNullDesC8, KMimeType );
hgs
parents:
diff changeset
   182
    
hgs
parents:
diff changeset
   183
    ddf.SetDFTitleL( KDSSettingsTitle );
hgs
parents:
diff changeset
   184
hgs
parents:
diff changeset
   185
hgs
parents:
diff changeset
   186
	MSmlDmDDFObject& nDSAcc = ddf.AddChildObjectL( KNSmlDefDSAcc );
hgs
parents:
diff changeset
   187
	nDSAcc.SetOccurenceL( MSmlDmDDFObject::EOne );
hgs
parents:
diff changeset
   188
	nDSAcc.SetDefaultValueL( KNullDesC8 );
hgs
parents:
diff changeset
   189
	nDSAcc.SetScopeL( MSmlDmDDFObject::EPermanent );
hgs
parents:
diff changeset
   190
	nDSAcc.SetAccessTypesL( *aclTypes );
hgs
parents:
diff changeset
   191
	nDSAcc.SetDFFormatL( MSmlDmDDFObject::ENode );
hgs
parents:
diff changeset
   192
//
hgs
parents:
diff changeset
   193
//  Set rest acceptable operations for data itself
hgs
parents:
diff changeset
   194
//
hgs
parents:
diff changeset
   195
    aclTypes->SetAdd();
hgs
parents:
diff changeset
   196
	aclTypes->SetReplace();
hgs
parents:
diff changeset
   197
	aclTypes->SetDelete();
hgs
parents:
diff changeset
   198
hgs
parents:
diff changeset
   199
	TSmlDmAccessTypes aclTypesLimit;
hgs
parents:
diff changeset
   200
	aclTypesLimit.SetGet();
hgs
parents:
diff changeset
   201
	aclTypesLimit.SetAdd();
hgs
parents:
diff changeset
   202
hgs
parents:
diff changeset
   203
	TSmlDmAccessTypes aclTypesGet;
hgs
parents:
diff changeset
   204
	aclTypesGet.SetGet();
hgs
parents:
diff changeset
   205
hgs
parents:
diff changeset
   206
	TSmlDmAccessTypes aclTypesNoGet;
hgs
parents:
diff changeset
   207
	aclTypesNoGet.SetReplace();
hgs
parents:
diff changeset
   208
	aclTypesNoGet.SetAdd();
hgs
parents:
diff changeset
   209
	aclTypesNoGet.SetDelete();
hgs
parents:
diff changeset
   210
hgs
parents:
diff changeset
   211
	TSmlDmAccessTypes aclTypesNoDelete;
hgs
parents:
diff changeset
   212
	aclTypesNoDelete.SetGet();
hgs
parents:
diff changeset
   213
	aclTypesNoDelete.SetAdd();
hgs
parents:
diff changeset
   214
	aclTypesNoDelete.SetReplace();
hgs
parents:
diff changeset
   215
hgs
parents:
diff changeset
   216
	MSmlDmDDFObject& nProDDF = nDSAcc.AddChildObjectGroupL();
hgs
parents:
diff changeset
   217
    FillNodeInfoL( nProDDF, *aclTypes, MSmlDmDDFObject::EZeroOrMore, 
hgs
parents:
diff changeset
   218
                    MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::ENode, 
hgs
parents:
diff changeset
   219
                    KNullDesC8, KNullDesC8, KMimeType );
hgs
parents:
diff changeset
   220
hgs
parents:
diff changeset
   221
	MSmlDmDDFObject& nAddrDDF = nProDDF.AddChildObjectL(KNSmlDdfAddr);	// Addr
hgs
parents:
diff changeset
   222
	FillNodeInfoL( nAddrDDF, *aclTypes, MSmlDmDDFObject::EOne, 
hgs
parents:
diff changeset
   223
                    MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::EChr, 
hgs
parents:
diff changeset
   224
                    KNSmlDdfAddrDescription, KNullDesC8, KMimeType );
hgs
parents:
diff changeset
   225
hgs
parents:
diff changeset
   226
	MSmlDmDDFObject& nAddrTypeDDF = nProDDF.AddChildObjectL(KNSmlDdfAddrType);	// AddrType
hgs
parents:
diff changeset
   227
    FillNodeInfoL( nAddrTypeDDF, *aclTypes, MSmlDmDDFObject::EZeroOrOne, 
hgs
parents:
diff changeset
   228
                    MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::EChr, 
hgs
parents:
diff changeset
   229
                    KNSmlDdfAddrTypeDescription, KNullDesC8, KMimeType );
hgs
parents:
diff changeset
   230
hgs
parents:
diff changeset
   231
	MSmlDmDDFObject& nPortNbrDDF = nProDDF.AddChildObjectL(KNSmlDdfPortNbr);// PortNbr
hgs
parents:
diff changeset
   232
	FillNodeInfoL( nPortNbrDDF, *aclTypes, MSmlDmDDFObject::EZeroOrOne, 
hgs
parents:
diff changeset
   233
                    MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::EInt, 
hgs
parents:
diff changeset
   234
                    KNSmlDdfPortNbrDescription, KNullDesC8, KMimeType );
hgs
parents:
diff changeset
   235
hgs
parents:
diff changeset
   236
	MSmlDmDDFObject& nNameDDF = nProDDF.AddChildObjectL(KNSmlDdfName);	// Name
hgs
parents:
diff changeset
   237
	FillNodeInfoL( nNameDDF, *aclTypes, MSmlDmDDFObject::EZeroOrOne, 
hgs
parents:
diff changeset
   238
                    MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::EChr, 
hgs
parents:
diff changeset
   239
                    KNSmlDdfNameDescription, KNullDesC8, KMimeType );
hgs
parents:
diff changeset
   240
hgs
parents:
diff changeset
   241
	MSmlDmDDFObject& nDBrootDDF = nProDDF.AddChildObjectL(KNSmlDdfDB);	// DB
hgs
parents:
diff changeset
   242
    FillNodeInfoL( nDBrootDDF, *aclTypes, MSmlDmDDFObject::EZeroOrOne, 
hgs
parents:
diff changeset
   243
                    MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::ENode, 
hgs
parents:
diff changeset
   244
                    KNSmlDdfDBDescription, KNullDesC8, KMimeType );
hgs
parents:
diff changeset
   245
hgs
parents:
diff changeset
   246
	MSmlDmDDFObject& nDBDDF = nDBrootDDF.AddChildObjectGroupL(); // DB/<X>
hgs
parents:
diff changeset
   247
    FillNodeInfoL( nDBDDF, *aclTypes, MSmlDmDDFObject::EZeroOrMore, 
hgs
parents:
diff changeset
   248
                    MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::ENode, 
hgs
parents:
diff changeset
   249
                    KNullDesC8, KNullDesC8, KMimeType );
hgs
parents:
diff changeset
   250
hgs
parents:
diff changeset
   251
	MSmlDmDDFObject& nCTTypeDDF = nDBDDF.AddChildObjectL(KNSmlDdfCTType);	// CTType
hgs
parents:
diff changeset
   252
	FillNodeInfoL( nCTTypeDDF, aclTypesLimit, MSmlDmDDFObject::EOne, 
hgs
parents:
diff changeset
   253
                    MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::EChr, 
hgs
parents:
diff changeset
   254
                    KNSmlDdfCTTypeDescription, KNullDesC8, KMimeType );
hgs
parents:
diff changeset
   255
hgs
parents:
diff changeset
   256
	MSmlDmDDFObject& nRDBURIDDF = nDBDDF.AddChildObjectL(KNSmlDdfRDBURI);	// RDBURI
hgs
parents:
diff changeset
   257
	FillNodeInfoL( nRDBURIDDF, aclTypesNoDelete, MSmlDmDDFObject::EOne, 
hgs
parents:
diff changeset
   258
                    MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::EChr, 
hgs
parents:
diff changeset
   259
                    KNSmlDdfRDBURIDescription, KNullDesC8, KMimeType );
hgs
parents:
diff changeset
   260
hgs
parents:
diff changeset
   261
	MSmlDmDDFObject& nLDBURIDDF = nDBDDF.AddChildObjectL(KNSmlDdfLDBURI);	// LDBURI
hgs
parents:
diff changeset
   262
    FillNodeInfoL( nLDBURIDDF, aclTypesNoDelete, MSmlDmDDFObject::EOne, 
hgs
parents:
diff changeset
   263
                    MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::EChr, 
hgs
parents:
diff changeset
   264
                    KNSmlDdfLDBURIDescription, KNullDesC8, KMimeType );
hgs
parents:
diff changeset
   265
hgs
parents:
diff changeset
   266
	MSmlDmDDFObject& nClientUserNameDDF = nProDDF.AddChildObjectL(KNSmlDdfClientUserName);
hgs
parents:
diff changeset
   267
    FillNodeInfoL( nClientUserNameDDF, *aclTypes, MSmlDmDDFObject::EZeroOrOne, 
hgs
parents:
diff changeset
   268
                    MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::EChr, 
hgs
parents:
diff changeset
   269
                    KNSmlDdfClientUserNameDescription, KNullDesC8, KMimeType );
hgs
parents:
diff changeset
   270
hgs
parents:
diff changeset
   271
	MSmlDmDDFObject& nServerIdDDF = nProDDF.AddChildObjectL(KNSmlDdfServerId);
hgs
parents:
diff changeset
   272
    FillNodeInfoL( nServerIdDDF, *aclTypes, MSmlDmDDFObject::EZeroOrOne, 
hgs
parents:
diff changeset
   273
                    MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::EChr, 
hgs
parents:
diff changeset
   274
                    KNSmlDdfServerIdDescription, KNullDesC8, KMimeType );
hgs
parents:
diff changeset
   275
hgs
parents:
diff changeset
   276
	MSmlDmDDFObject& nClientPWDDF = nProDDF.AddChildObjectL(KNSmlDdfClientPW);// ClientPW
hgs
parents:
diff changeset
   277
	FillNodeInfoL( nClientPWDDF, aclTypesNoGet, MSmlDmDDFObject::EOne, 
hgs
parents:
diff changeset
   278
                    MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::EChr, 
hgs
parents:
diff changeset
   279
                    KNSmlDdfClientPWDescription, KNullDesC8, KMimeType );
hgs
parents:
diff changeset
   280
hgs
parents:
diff changeset
   281
	MSmlDmDDFObject& nToNAPIDDDF = nProDDF.AddChildObjectL(KNSmlDdfToNAPID);// ToNAPID
hgs
parents:
diff changeset
   282
    FillNodeInfoL( nToNAPIDDDF, aclTypesNoDelete, MSmlDmDDFObject::EOne, 
hgs
parents:
diff changeset
   283
                    MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::EChr, 
hgs
parents:
diff changeset
   284
                    KNSmlDdfToNAPIDDescription, KNullDesC8, KMimeType );
hgs
parents:
diff changeset
   285
hgs
parents:
diff changeset
   286
	CleanupStack::PopAndDestroy(); //aclTypes
hgs
parents:
diff changeset
   287
	_DBG_FILE("CNSmlDSSettingsAdapter::DDFStructureL(): end");
hgs
parents:
diff changeset
   288
	}
hgs
parents:
diff changeset
   289
hgs
parents:
diff changeset
   290
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
   291
//  CNSmlDSSettingsAdapter::UpdateLeafObjectL
hgs
parents:
diff changeset
   292
//  The function updates the leaf object data.
hgs
parents:
diff changeset
   293
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
   294
void CNSmlDSSettingsAdapter::UpdateLeafObjectL( const TDesC8& aURI, 
hgs
parents:
diff changeset
   295
                                                const TDesC8& aParentLUID, 
hgs
parents:
diff changeset
   296
                                                const TDesC8& aObject, 
hgs
parents:
diff changeset
   297
                                                const TDesC8& /*aType*/, 
hgs
parents:
diff changeset
   298
                                                const TInt aStatusRef )
hgs
parents:
diff changeset
   299
	{
hgs
parents:
diff changeset
   300
	_DBG_FILE("CNSmlDSSettingsAdapter::UpdateLeafObjectL(): begin");
hgs
parents:
diff changeset
   301
//
hgs
parents:
diff changeset
   302
//	Check which field going to be handled
hgs
parents:
diff changeset
   303
//
hgs
parents:
diff changeset
   304
	// Static node feature start
hgs
parents:
diff changeset
   305
		TInt profileLUID = -1;
hgs
parents:
diff changeset
   306
		if(aParentLUID.Length() == 0 )
hgs
parents:
diff changeset
   307
		{
hgs
parents:
diff changeset
   308
			iLUID = -1;
hgs
parents:
diff changeset
   309
			if( IsDSAccUriFormatMatchPredefined(aURI) )
hgs
parents:
diff changeset
   310
    	{
hgs
parents:
diff changeset
   311
    		iLUID = ConstructTreeL(aURI);
hgs
parents:
diff changeset
   312
    		profileLUID = GetProfileIdFromURIL( aURI ); 
hgs
parents:
diff changeset
   313
    	}    	
hgs
parents:
diff changeset
   314
    	if ((iLUID == 0 ) && (aURI.Match(_L8("SyncML/DSAcc/DSId*/DB/CTId*"))  == KErrNone))
hgs
parents:
diff changeset
   315
			{
hgs
parents:
diff changeset
   316
				_DBG_FILE("CNSmlDSSettingsAdapter::FetchObjectL(): ENotFound end");
hgs
parents:
diff changeset
   317
				iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
hgs
parents:
diff changeset
   318
				return;
hgs
parents:
diff changeset
   319
    	}
hgs
parents:
diff changeset
   320
    }
hgs
parents:
diff changeset
   321
		// Static node feature end
hgs
parents:
diff changeset
   322
	SetField( aURI );
hgs
parents:
diff changeset
   323
    TInt fieldID = GetDSField();
hgs
parents:
diff changeset
   324
	TInt fieldType = GetDSFieldTypeL();
hgs
parents:
diff changeset
   325
	if ( fieldType == EWrong || fieldID < 0 )
hgs
parents:
diff changeset
   326
		{
hgs
parents:
diff changeset
   327
		_DBG_FILE("CNSmlDSSettingsAdapter::UpdateLeafObjectL(): EError end");
hgs
parents:
diff changeset
   328
		iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError );
hgs
parents:
diff changeset
   329
		return;
hgs
parents:
diff changeset
   330
		}
hgs
parents:
diff changeset
   331
	if(profileLUID == -1)
hgs
parents:
diff changeset
   332
    	profileLUID = GetIntObject( aParentLUID );
hgs
parents:
diff changeset
   333
	
hgs
parents:
diff changeset
   334
	if( profileLUID == -1 && fieldType != EParam )
hgs
parents:
diff changeset
   335
		{
hgs
parents:
diff changeset
   336
		_DBG_FILE("CNSmlDSSettingsAdapter::UpdateLeafObjectL( ): ENotFound end");
hgs
parents:
diff changeset
   337
		iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
hgs
parents:
diff changeset
   338
		return;
hgs
parents:
diff changeset
   339
		}	
hgs
parents:
diff changeset
   340
    
hgs
parents:
diff changeset
   341
    if ( fieldType == EParam )
hgs
parents:
diff changeset
   342
		{
hgs
parents:
diff changeset
   343
		if( GetBufferIndex( aURI ) >= 0 && iBufferExecution == EFalse )
hgs
parents:
diff changeset
   344
			{
hgs
parents:
diff changeset
   345
			AddLeafBufferL( aURI, aParentLUID, aObject, aStatusRef );
hgs
parents:
diff changeset
   346
            return;
hgs
parents:
diff changeset
   347
			}
hgs
parents:
diff changeset
   348
		profileLUID = GetProfileIdFromURIL( aURI );
hgs
parents:
diff changeset
   349
        if( FindProfileIdL( profileLUID ) == EFalse )
hgs
parents:
diff changeset
   350
            {
hgs
parents:
diff changeset
   351
            iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
hgs
parents:
diff changeset
   352
			return;
hgs
parents:
diff changeset
   353
            }
hgs
parents:
diff changeset
   354
        if( iField->Compare( KNSmlDdfCTType ) == 0 )
hgs
parents:
diff changeset
   355
            {
hgs
parents:
diff changeset
   356
            if( MimeTypeAllreadyExitsL( profileLUID, aObject ) )
hgs
parents:
diff changeset
   357
                {
hgs
parents:
diff changeset
   358
                iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EAlreadyExists );
hgs
parents:
diff changeset
   359
                return;
hgs
parents:
diff changeset
   360
                }
hgs
parents:
diff changeset
   361
            if( aObject.Length() == 0 )
hgs
parents:
diff changeset
   362
                {
hgs
parents:
diff changeset
   363
                iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EInvalidObject );
hgs
parents:
diff changeset
   364
                return;
hgs
parents:
diff changeset
   365
                }
hgs
parents:
diff changeset
   366
            }
hgs
parents:
diff changeset
   367
        }
hgs
parents:
diff changeset
   368
hgs
parents:
diff changeset
   369
	if( profileLUID != iParentLUID && fieldType != EParam )
hgs
parents:
diff changeset
   370
		{											    
hgs
parents:
diff changeset
   371
		if( FindProfileIdL( profileLUID ) )
hgs
parents:
diff changeset
   372
			{
hgs
parents:
diff changeset
   373
			iParentLUID = profileLUID;
hgs
parents:
diff changeset
   374
			}
hgs
parents:
diff changeset
   375
		else
hgs
parents:
diff changeset
   376
			{
hgs
parents:
diff changeset
   377
			iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
hgs
parents:
diff changeset
   378
			return;
hgs
parents:
diff changeset
   379
			}
hgs
parents:
diff changeset
   380
		}
hgs
parents:
diff changeset
   381
	if ( fieldType == EStr || fieldType == EInt )
hgs
parents:
diff changeset
   382
		{
hgs
parents:
diff changeset
   383
//
hgs
parents:
diff changeset
   384
//		Check if Object length id valid
hgs
parents:
diff changeset
   385
//
hgs
parents:
diff changeset
   386
		if( NotValidStrLenght( fieldID, aObject ) )
hgs
parents:
diff changeset
   387
			{
hgs
parents:
diff changeset
   388
			_DBG_FILE("CNSmlDSSettingsAdapter::AddLeafObjectL(): KErr length end");
hgs
parents:
diff changeset
   389
			iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ETooLargeObject );
hgs
parents:
diff changeset
   390
			return;
hgs
parents:
diff changeset
   391
			}
hgs
parents:
diff changeset
   392
		}
hgs
parents:
diff changeset
   393
hgs
parents:
diff changeset
   394
    TInt ret = 0;
hgs
parents:
diff changeset
   395
	if ( fieldType == EStr || fieldType == EInt )
hgs
parents:
diff changeset
   396
		{
hgs
parents:
diff changeset
   397
		if( fieldID == EProfileURL )
hgs
parents:
diff changeset
   398
			{
hgs
parents:
diff changeset
   399
			TInt num=0;
hgs
parents:
diff changeset
   400
            ret = ParseUri( aObject, num );
hgs
parents:
diff changeset
   401
            if( ret == KErrNone )
hgs
parents:
diff changeset
   402
				{
hgs
parents:
diff changeset
   403
			    ret = SetProfileServerURIL( iParentLUID, aObject );
hgs
parents:
diff changeset
   404
                if( ret != 0 )
hgs
parents:
diff changeset
   405
					{
hgs
parents:
diff changeset
   406
					_DBG_FILE("CNSmlDSSettingsAdapter::AddLeafObjectL(): URI set failed");
hgs
parents:
diff changeset
   407
					iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError );
hgs
parents:
diff changeset
   408
					return;
hgs
parents:
diff changeset
   409
					}
hgs
parents:
diff changeset
   410
				}
hgs
parents:
diff changeset
   411
			else //if port number not included in URL
hgs
parents:
diff changeset
   412
				{
hgs
parents:
diff changeset
   413
                ret = SetProfileServerURIL( iParentLUID, aObject );
hgs
parents:
diff changeset
   414
                if( ret != 0 )
hgs
parents:
diff changeset
   415
					{
hgs
parents:
diff changeset
   416
					_DBG_FILE("CNSmlDSSettingsAdapter::AddLeafObjectL(): URI set failed");
hgs
parents:
diff changeset
   417
					iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError );
hgs
parents:
diff changeset
   418
					return;
hgs
parents:
diff changeset
   419
					}
hgs
parents:
diff changeset
   420
				}
hgs
parents:
diff changeset
   421
		    		    
hgs
parents:
diff changeset
   422
			}
hgs
parents:
diff changeset
   423
		else if( fieldID == EProfileURL )
hgs
parents:
diff changeset
   424
			{
hgs
parents:
diff changeset
   425
			ret = SetProfileServerURIL( iParentLUID, aObject );
hgs
parents:
diff changeset
   426
            }
hgs
parents:
diff changeset
   427
        else if( fieldID == EProfileMediumType )//AddrType
hgs
parents:
diff changeset
   428
			{
hgs
parents:
diff changeset
   429
			if ( iLeafType == EDSDelete )
hgs
parents:
diff changeset
   430
			    {
hgs
parents:
diff changeset
   431
                iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
hgs
parents:
diff changeset
   432
	            return;            
hgs
parents:
diff changeset
   433
			    }
hgs
parents:
diff changeset
   434
            iObject = GetIntObject( aObject );
hgs
parents:
diff changeset
   435
            ret = SetProfileAddrTypeL( iParentLUID, iObject );
hgs
parents:
diff changeset
   436
			}
hgs
parents:
diff changeset
   437
        else
hgs
parents:
diff changeset
   438
			{
hgs
parents:
diff changeset
   439
			ret = SetProfileStrValueL( iParentLUID, aObject, fieldID );
hgs
parents:
diff changeset
   440
			}
hgs
parents:
diff changeset
   441
		}
hgs
parents:
diff changeset
   442
	else if ( fieldType == EParam )
hgs
parents:
diff changeset
   443
		{
hgs
parents:
diff changeset
   444
        TInt sRet = KErrGeneral;
hgs
parents:
diff changeset
   445
        if( iField->Compare( KNSmlDdfCTType ) == 0 ) //Task Mime Type
hgs
parents:
diff changeset
   446
			{
hgs
parents:
diff changeset
   447
//			DBG_ARGS8(_S8("NEW: Object <%S>"), &aObject);
hgs
parents:
diff changeset
   448
			TInt dataProviderId(-1);
hgs
parents:
diff changeset
   449
			if(aParentLUID.Length() == 0 )
hgs
parents:
diff changeset
   450
			{
hgs
parents:
diff changeset
   451
				dataProviderId = iLUID ;
hgs
parents:
diff changeset
   452
			}
hgs
parents:
diff changeset
   453
			else
hgs
parents:
diff changeset
   454
			{
hgs
parents:
diff changeset
   455
				dataProviderId = GetIntObject( aParentLUID );
hgs
parents:
diff changeset
   456
			}
hgs
parents:
diff changeset
   457
            if( FindTaskIDL( profileLUID, dataProviderId ) == EFalse )
hgs
parents:
diff changeset
   458
                {
hgs
parents:
diff changeset
   459
                sRet = AddNewDataProviderL( profileLUID, aObject, dataProviderId );
hgs
parents:
diff changeset
   460
                }
hgs
parents:
diff changeset
   461
            else
hgs
parents:
diff changeset
   462
                {
hgs
parents:
diff changeset
   463
                sRet = KErrAlreadyExists;
hgs
parents:
diff changeset
   464
                }
hgs
parents:
diff changeset
   465
            if( sRet == KErrDiskFull )
hgs
parents:
diff changeset
   466
			    {
hgs
parents:
diff changeset
   467
				iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EDiskFull );
hgs
parents:
diff changeset
   468
				}
hgs
parents:
diff changeset
   469
			else if( sRet == KErrNotFound )
hgs
parents:
diff changeset
   470
                {
hgs
parents:
diff changeset
   471
                iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
hgs
parents:
diff changeset
   472
                }
hgs
parents:
diff changeset
   473
            else if( sRet == KErrAlreadyExists )
hgs
parents:
diff changeset
   474
                {
hgs
parents:
diff changeset
   475
                iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EAlreadyExists );
hgs
parents:
diff changeset
   476
                }
hgs
parents:
diff changeset
   477
            else if( sRet != KErrNone )
hgs
parents:
diff changeset
   478
			    {
hgs
parents:
diff changeset
   479
				iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError );
hgs
parents:
diff changeset
   480
				}
hgs
parents:
diff changeset
   481
            else
hgs
parents:
diff changeset
   482
                {
hgs
parents:
diff changeset
   483
                TPtrC8 addDBURI = RemoveLastURISeg( aURI ); 
hgs
parents:
diff changeset
   484
				TBuf8<16> dataProvider;
hgs
parents:
diff changeset
   485
				dataProvider.Num( dataProviderId );
hgs
parents:
diff changeset
   486
		    	iCallBack->SetMappingL( addDBURI, dataProvider );
hgs
parents:
diff changeset
   487
				SetBufferLUID( aURI,dataProviderId );
hgs
parents:
diff changeset
   488
				iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk ); 
hgs
parents:
diff changeset
   489
				
hgs
parents:
diff changeset
   490
				
hgs
parents:
diff changeset
   491
                }                        
hgs
parents:
diff changeset
   492
            return;
hgs
parents:
diff changeset
   493
            }
hgs
parents:
diff changeset
   494
        //
hgs
parents:
diff changeset
   495
        // Only database values handled
hgs
parents:
diff changeset
   496
        //
hgs
parents:
diff changeset
   497
/*		if( iField->Compare( KNSmlDdfLDBURI ) == 0 )
hgs
parents:
diff changeset
   498
		    {
hgs
parents:
diff changeset
   499
			iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
hgs
parents:
diff changeset
   500
			return;
hgs
parents:
diff changeset
   501
		    }
hgs
parents:
diff changeset
   502
*/
hgs
parents:
diff changeset
   503
		if( !(iField->Compare( KNSmlDdfLDBURI ) == 0) &&
hgs
parents:
diff changeset
   504
		    !(iField->Compare( KNSmlDdfRDBURI ) == 0) )	
hgs
parents:
diff changeset
   505
		    {
hgs
parents:
diff changeset
   506
			_DBG_FILE("CNSmlDSSettingsAdapter::AddLeafObjectL(): Param header end");
hgs
parents:
diff changeset
   507
			iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
hgs
parents:
diff changeset
   508
			return;
hgs
parents:
diff changeset
   509
			}
hgs
parents:
diff changeset
   510
hgs
parents:
diff changeset
   511
hgs
parents:
diff changeset
   512
        TInt dataProviderId(-1);
hgs
parents:
diff changeset
   513
		if(aParentLUID.Length() == 0 )
hgs
parents:
diff changeset
   514
		{
hgs
parents:
diff changeset
   515
			dataProviderId = iLUID ;
hgs
parents:
diff changeset
   516
		}
hgs
parents:
diff changeset
   517
		else
hgs
parents:
diff changeset
   518
		{
hgs
parents:
diff changeset
   519
        	dataProviderId = GetIntObject( aParentLUID );
hgs
parents:
diff changeset
   520
		}
hgs
parents:
diff changeset
   521
        if( FindTaskIDL( profileLUID, dataProviderId ) )
hgs
parents:
diff changeset
   522
            {
hgs
parents:
diff changeset
   523
            ret = UpdateDataSourceL( profileLUID, dataProviderId, aObject, *iField);
hgs
parents:
diff changeset
   524
            if( ret != KErrNone )
hgs
parents:
diff changeset
   525
                {
hgs
parents:
diff changeset
   526
                ret = KErrGeneral;
hgs
parents:
diff changeset
   527
                }
hgs
parents:
diff changeset
   528
            TPtrC8 dbURI = RemoveLastURISeg( aURI ); 
hgs
parents:
diff changeset
   529
		    TBuf8<16> dataProvider;
hgs
parents:
diff changeset
   530
		    dataProvider.Num( dataProviderId );
hgs
parents:
diff changeset
   531
		    iCallBack->SetMappingL( dbURI, dataProvider );
hgs
parents:
diff changeset
   532
			}
hgs
parents:
diff changeset
   533
		else
hgs
parents:
diff changeset
   534
		    {
hgs
parents:
diff changeset
   535
		    ret = KErrNone;
hgs
parents:
diff changeset
   536
		    //ret = KErrNotFound;
hgs
parents:
diff changeset
   537
			}
hgs
parents:
diff changeset
   538
        }
hgs
parents:
diff changeset
   539
	
hgs
parents:
diff changeset
   540
    if ( ret != KErrNone )
hgs
parents:
diff changeset
   541
		{
hgs
parents:
diff changeset
   542
		if( ret == KErrDiskFull)
hgs
parents:
diff changeset
   543
			{
hgs
parents:
diff changeset
   544
			iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EDiskFull );
hgs
parents:
diff changeset
   545
			}
hgs
parents:
diff changeset
   546
        else if( ret == KErrNotFound )
hgs
parents:
diff changeset
   547
            {
hgs
parents:
diff changeset
   548
            iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
hgs
parents:
diff changeset
   549
            }
hgs
parents:
diff changeset
   550
        else if( ret == KErrArgument )
hgs
parents:
diff changeset
   551
            {
hgs
parents:
diff changeset
   552
            iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EInvalidObject );
hgs
parents:
diff changeset
   553
            }
hgs
parents:
diff changeset
   554
        else if( ret == KErrOverflow)
hgs
parents:
diff changeset
   555
            {
hgs
parents:
diff changeset
   556
            iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ETooLargeObject  );
hgs
parents:
diff changeset
   557
            }
hgs
parents:
diff changeset
   558
		else
hgs
parents:
diff changeset
   559
			{
hgs
parents:
diff changeset
   560
			iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError );
hgs
parents:
diff changeset
   561
			}
hgs
parents:
diff changeset
   562
		}
hgs
parents:
diff changeset
   563
	else if ( fieldID == EProfilePort )
hgs
parents:
diff changeset
   564
	    {
hgs
parents:
diff changeset
   565
        // in case port is updated, save status ref to be used in 
hgs
parents:
diff changeset
   566
        // CompleteOutstandingCmdsL (i.e. status not set yet)
hgs
parents:
diff changeset
   567
        iPortBufStatusRef = aStatusRef;
hgs
parents:
diff changeset
   568
	    }
hgs
parents:
diff changeset
   569
	else
hgs
parents:
diff changeset
   570
	    {
hgs
parents:
diff changeset
   571
    	iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
hgs
parents:
diff changeset
   572
	    }
hgs
parents:
diff changeset
   573
	
hgs
parents:
diff changeset
   574
	_DBG_FILE("CNSmlDSSettingsAdapter::AddLeafObjectL(): end");
hgs
parents:
diff changeset
   575
	return;
hgs
parents:
diff changeset
   576
	}
hgs
parents:
diff changeset
   577
hgs
parents:
diff changeset
   578
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
   579
//  CNSmlDSSettingsAdapter::DeleteObjectL
hgs
parents:
diff changeset
   580
//  The function Deletes leaf object data or node data content.
hgs
parents:
diff changeset
   581
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
   582
void CNSmlDSSettingsAdapter::DeleteObjectL( const TDesC8& aURI, 
hgs
parents:
diff changeset
   583
                                            const TDesC8& aLUID, 
hgs
parents:
diff changeset
   584
                                            const TInt aStatusRef )
hgs
parents:
diff changeset
   585
	{
hgs
parents:
diff changeset
   586
    _DBG_FILE("CNSmlDSSettingsAdapter::DeleteObjectL( ): begin");
hgs
parents:
diff changeset
   587
	iLUID = IntLUID( aLUID );
hgs
parents:
diff changeset
   588
	if( aLUID.Length() == 0 )
hgs
parents:
diff changeset
   589
		{
hgs
parents:
diff changeset
   590
		_DBG_FILE("CNSmlDSSettingsAdapter DELETE::DeleteObjectL( ): ENotFound end");
hgs
parents:
diff changeset
   591
		iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
hgs
parents:
diff changeset
   592
		return;
hgs
parents:
diff changeset
   593
		}
hgs
parents:
diff changeset
   594
hgs
parents:
diff changeset
   595
//
hgs
parents:
diff changeset
   596
//	Check which field going to be handled
hgs
parents:
diff changeset
   597
//
hgs
parents:
diff changeset
   598
	SetField( aURI );
hgs
parents:
diff changeset
   599
    if ( iField->Compare( KNSmlDdfCTType ) == 0 
hgs
parents:
diff changeset
   600
        || iField->Compare( KNSmlDdfRDBURI ) == 0 
hgs
parents:
diff changeset
   601
        || iField->Compare( KNSmlDdfLDBURI ) == 0 
hgs
parents:
diff changeset
   602
        || iField->Compare( KNSmlDdfToNAPID ) == 0 )
hgs
parents:
diff changeset
   603
		{
hgs
parents:
diff changeset
   604
		_DBG_FILE("CNSmlDSSettingsAdapter DELETE::DeleteObjectL( ): EError end");
hgs
parents:
diff changeset
   605
		iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError );
hgs
parents:
diff changeset
   606
		return;
hgs
parents:
diff changeset
   607
		}
hgs
parents:
diff changeset
   608
	
hgs
parents:
diff changeset
   609
	TInt last = aURI.LocateReverse( KNSmlDMUriSeparator );
hgs
parents:
diff changeset
   610
	TInt pos  = aURI.Find( KNSmlDefDSAcc );
hgs
parents:
diff changeset
   611
hgs
parents:
diff changeset
   612
	if(last - 5 == pos )
hgs
parents:
diff changeset
   613
		{
hgs
parents:
diff changeset
   614
		iLUID = IntLUID( aLUID );
hgs
parents:
diff changeset
   615
		if( !FindProfileIdL( iLUID ) )
hgs
parents:
diff changeset
   616
			{
hgs
parents:
diff changeset
   617
			_DBG_FILE("CNSmlDSSettingsAdapter::DeleteObjectL( ): notfound end");
hgs
parents:
diff changeset
   618
			iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
hgs
parents:
diff changeset
   619
			return;
hgs
parents:
diff changeset
   620
			}
hgs
parents:
diff changeset
   621
		else
hgs
parents:
diff changeset
   622
			{
hgs
parents:
diff changeset
   623
			TInt sRet = DeleteProfileL( iLUID );
hgs
parents:
diff changeset
   624
			if( sRet!=KErrNone )
hgs
parents:
diff changeset
   625
				{
hgs
parents:
diff changeset
   626
				_DBG_FILE("CNSmlDSSettingsAdapter::DeleteObjectL( ): ENotCommitted end");
hgs
parents:
diff changeset
   627
				if( sRet == KErrNotFound )
hgs
parents:
diff changeset
   628
				    {
hgs
parents:
diff changeset
   629
                    iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
hgs
parents:
diff changeset
   630
				    }
hgs
parents:
diff changeset
   631
				else if( sRet == KErrInUse )
hgs
parents:
diff changeset
   632
				    {
hgs
parents:
diff changeset
   633
                    iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EObjectInUse );
hgs
parents:
diff changeset
   634
				    }
hgs
parents:
diff changeset
   635
				else
hgs
parents:
diff changeset
   636
                    {
hgs
parents:
diff changeset
   637
                    iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError );
hgs
parents:
diff changeset
   638
                    }
hgs
parents:
diff changeset
   639
				return;
hgs
parents:
diff changeset
   640
				}
hgs
parents:
diff changeset
   641
			else
hgs
parents:
diff changeset
   642
				{
hgs
parents:
diff changeset
   643
				iPrevURI->Des().Format( KNullDesC8 );
hgs
parents:
diff changeset
   644
				iPrevLUID = 0;
hgs
parents:
diff changeset
   645
				_DBG_FILE("CNSmlDSSettingsAdapter::DeleteObjectL( ): EOk end");
hgs
parents:
diff changeset
   646
				iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
hgs
parents:
diff changeset
   647
				return;
hgs
parents:
diff changeset
   648
				}
hgs
parents:
diff changeset
   649
			}
hgs
parents:
diff changeset
   650
		}
hgs
parents:
diff changeset
   651
	else if( aURI.Match( KDBUri1 ) != KErrNotFound )
hgs
parents:
diff changeset
   652
		{
hgs
parents:
diff changeset
   653
		iLUID = GetProfileIdFromURIL( aURI ); // Get profile Id for DB-level
hgs
parents:
diff changeset
   654
		if (iLUID < 0)
hgs
parents:
diff changeset
   655
			{
hgs
parents:
diff changeset
   656
			_DBG_FILE("CNSmlDSSettingsAdapter::DeleteObjectL( ): EError end");
hgs
parents:
diff changeset
   657
			iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError );
hgs
parents:
diff changeset
   658
			return;
hgs
parents:
diff changeset
   659
			}
hgs
parents:
diff changeset
   660
hgs
parents:
diff changeset
   661
		if( !FindProfileIdL( iLUID ) )
hgs
parents:
diff changeset
   662
			{
hgs
parents:
diff changeset
   663
			_DBG_FILE("CNSmlDSSettingsAdapter::DeleteObjectL( ): ENotFound end");
hgs
parents:
diff changeset
   664
			iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
hgs
parents:
diff changeset
   665
			return;
hgs
parents:
diff changeset
   666
			}
hgs
parents:
diff changeset
   667
		TInt adapterId = GetIntObject( aLUID );//Get task ID
hgs
parents:
diff changeset
   668
        TInt retval =  DeleteTaskByIDL( iLUID, adapterId );
hgs
parents:
diff changeset
   669
        if( retval != KErrNone )
hgs
parents:
diff changeset
   670
            {
hgs
parents:
diff changeset
   671
            if( retval == KErrNotFound )
hgs
parents:
diff changeset
   672
                {
hgs
parents:
diff changeset
   673
                _DBG_FILE("CNSmlDSSettingsAdapter::DeleteObjectL( ): ENotFound end");
hgs
parents:
diff changeset
   674
                iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
hgs
parents:
diff changeset
   675
                }
hgs
parents:
diff changeset
   676
            else
hgs
parents:
diff changeset
   677
				{
hgs
parents:
diff changeset
   678
				_DBG_FILE("CNSmlDSSettingsAdapter::DeleteObjectL( ): EError end");
hgs
parents:
diff changeset
   679
                iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError );
hgs
parents:
diff changeset
   680
               	}
hgs
parents:
diff changeset
   681
            }
hgs
parents:
diff changeset
   682
		else
hgs
parents:
diff changeset
   683
            {
hgs
parents:
diff changeset
   684
            _DBG_FILE("CNSmlDSSettingsAdapter::DeleteObjectL( ): EOk end");
hgs
parents:
diff changeset
   685
		    iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
hgs
parents:
diff changeset
   686
            }
hgs
parents:
diff changeset
   687
        return;
hgs
parents:
diff changeset
   688
		}
hgs
parents:
diff changeset
   689
hgs
parents:
diff changeset
   690
	iLUID = IntLUID( aLUID );
hgs
parents:
diff changeset
   691
hgs
parents:
diff changeset
   692
	if ( iLUID != iParentLUID )
hgs
parents:
diff changeset
   693
		{
hgs
parents:
diff changeset
   694
		if( !FindProfileIdL( iLUID ) )
hgs
parents:
diff changeset
   695
			{
hgs
parents:
diff changeset
   696
			_DBG_FILE("CNSmlDSSettingsAdapter::DeleteObjectL( ): end");
hgs
parents:
diff changeset
   697
			iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
hgs
parents:
diff changeset
   698
			return;
hgs
parents:
diff changeset
   699
			}
hgs
parents:
diff changeset
   700
		iParentLUID = iLUID;
hgs
parents:
diff changeset
   701
		}
hgs
parents:
diff changeset
   702
hgs
parents:
diff changeset
   703
	HBufC8* lObject = HBufC8::NewLC( 15 );
hgs
parents:
diff changeset
   704
    lObject->Des().Format( KNullDesC8 );
hgs
parents:
diff changeset
   705
	
hgs
parents:
diff changeset
   706
	iLeafType = EDSDelete;
hgs
parents:
diff changeset
   707
	UpdateLeafObjectL( aURI, aLUID, *lObject, KMimeType, aStatusRef );
hgs
parents:
diff changeset
   708
	iLeafType = EDSUnset;
hgs
parents:
diff changeset
   709
hgs
parents:
diff changeset
   710
	_DBG_FILE("CNSmlDSSettingsAdapter::DeleteObjectL( ): end");
hgs
parents:
diff changeset
   711
	CleanupStack::PopAndDestroy(); //lObject 
hgs
parents:
diff changeset
   712
	return;
hgs
parents:
diff changeset
   713
	}
hgs
parents:
diff changeset
   714
hgs
parents:
diff changeset
   715
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
   716
//  CNSmlDSSettingsAdapter::FetchLeafObjectL
hgs
parents:
diff changeset
   717
//  The function fetches the leaf object data.
hgs
parents:
diff changeset
   718
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
   719
void CNSmlDSSettingsAdapter::FetchLeafObjectL( const TDesC8& aURI, 
hgs
parents:
diff changeset
   720
                                                const TDesC8& aLUID, 
hgs
parents:
diff changeset
   721
                                                const TDesC8& aType, 
hgs
parents:
diff changeset
   722
                                                const TInt aResultsRef, 
hgs
parents:
diff changeset
   723
                                                const TInt aStatusRef )
hgs
parents:
diff changeset
   724
	{
hgs
parents:
diff changeset
   725
	_DBG_FILE("CNSmlDSSettingsAdapter::FetchLeafObjectL(): begin");
hgs
parents:
diff changeset
   726
	DBG_ARGS(_S16("DS:Fetch aURI    - %S - %S"), &aURI, &aLUID);
hgs
parents:
diff changeset
   727
hgs
parents:
diff changeset
   728
    CBufBase *lObject = CBufFlat::NewL( 128 );
hgs
parents:
diff changeset
   729
	CleanupStack::PushL( lObject );
hgs
parents:
diff changeset
   730
	lObject->Reset();
hgs
parents:
diff changeset
   731
    if( FetchObjectL( aURI, aLUID, lObject, aStatusRef ) != KErrNone )
hgs
parents:
diff changeset
   732
        {
hgs
parents:
diff changeset
   733
        CleanupStack::PopAndDestroy(); //lObject
hgs
parents:
diff changeset
   734
        _DBG_FILE("CNSmlDSSettingsAdapter::FetchLeafObjectL() : Error end");
hgs
parents:
diff changeset
   735
        return;
hgs
parents:
diff changeset
   736
        };
hgs
parents:
diff changeset
   737
    iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
hgs
parents:
diff changeset
   738
    iCallBack->SetResultsL( aResultsRef, *lObject, aType );
hgs
parents:
diff changeset
   739
	CleanupStack::PopAndDestroy(); //object    
hgs
parents:
diff changeset
   740
    _DBG_FILE("CNSmlDSSettingsAdapter::FetchLeafObjectL() : end");
hgs
parents:
diff changeset
   741
    return;
hgs
parents:
diff changeset
   742
	}
hgs
parents:
diff changeset
   743
hgs
parents:
diff changeset
   744
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
   745
//  CSmlDSSettingsAdapter::ChildURIListL
hgs
parents:
diff changeset
   746
//  Function returns the list of profiles or leafs of the profile 
hgs
parents:
diff changeset
   747
//  acording to aURI.
hgs
parents:
diff changeset
   748
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
   749
void CNSmlDSSettingsAdapter::ChildURIListL( const TDesC8& aURI, 
hgs
parents:
diff changeset
   750
                                            const TDesC8& aLUID, 
hgs
parents:
diff changeset
   751
                                            const CArrayFix<TSmlDmMappingInfo>& aPreviousURISegmentList, 
hgs
parents:
diff changeset
   752
                                            const TInt aResultsRef, const TInt aStatusRef )
hgs
parents:
diff changeset
   753
	{
hgs
parents:
diff changeset
   754
    _DBG_FILE("CNSmlDSSettingsAdapter::ChildURIListL(): begin");
hgs
parents:
diff changeset
   755
//	DBG_ARGS(_S16("ChildURIListL URI - <%S>"), &aURI);
hgs
parents:
diff changeset
   756
hgs
parents:
diff changeset
   757
	CBufBase *currentURISegmentList = CBufFlat::NewL( 128 );
hgs
parents:
diff changeset
   758
	CleanupStack::PushL( currentURISegmentList );
hgs
parents:
diff changeset
   759
hgs
parents:
diff changeset
   760
	if( aURI.Match( KDSAccMatch ) != KErrNotFound &&
hgs
parents:
diff changeset
   761
	   aURI.Match( KDSAccMatch2 ) == KErrNotFound )
hgs
parents:
diff changeset
   762
		{
hgs
parents:
diff changeset
   763
		//
hgs
parents:
diff changeset
   764
		//	Check if Profile exists
hgs
parents:
diff changeset
   765
		//
hgs
parents:
diff changeset
   766
		TInt checkLUID = GetIntObject( aLUID ); 
hgs
parents:
diff changeset
   767
		if( FindProfileIdL( checkLUID ) )
hgs
parents:
diff changeset
   768
		{
hgs
parents:
diff changeset
   769
			currentURISegmentList->InsertL( currentURISegmentList->Size(), KSegmDSAcc );
hgs
parents:
diff changeset
   770
			iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
hgs
parents:
diff changeset
   771
		   	iCallBack->SetResultsL( aResultsRef, *currentURISegmentList, KNullDesC8 );
hgs
parents:
diff changeset
   772
        }
hgs
parents:
diff changeset
   773
        else
hgs
parents:
diff changeset
   774
        {
hgs
parents:
diff changeset
   775
			checkLUID = -1;
hgs
parents:
diff changeset
   776
			if( IsDSAccUriFormatMatchPredefined(aURI) )
hgs
parents:
diff changeset
   777
		    {
hgs
parents:
diff changeset
   778
		    	checkLUID = ConstructTreeL(aURI); 
hgs
parents:
diff changeset
   779
    		}    	
hgs
parents:
diff changeset
   780
    		if (checkLUID == -1 ) 
hgs
parents:
diff changeset
   781
		    {
hgs
parents:
diff changeset
   782
		    	_DBG_FILE( "CNSmlDMSettingsAdapter::childURI(): ENotFound end" );
hgs
parents:
diff changeset
   783
				iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
hgs
parents:
diff changeset
   784
				CleanupStack::PopAndDestroy(  ); // currentURISegmentList
hgs
parents:
diff changeset
   785
        		_DBG_FILE( "CNSmlDMSettingsAdapter::ChildURIListL(): end" );
hgs
parents:
diff changeset
   786
			    return;
hgs
parents:
diff changeset
   787
		   	}
hgs
parents:
diff changeset
   788
		    else
hgs
parents:
diff changeset
   789
		    {
hgs
parents:
diff changeset
   790
       		    currentURISegmentList->InsertL( currentURISegmentList->Size(), KSegmDSAcc );
hgs
parents:
diff changeset
   791
 				iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
hgs
parents:
diff changeset
   792
			    iCallBack->SetResultsL( aResultsRef, *currentURISegmentList, KNullDesC8 );
hgs
parents:
diff changeset
   793
		    	}
hgs
parents:
diff changeset
   794
    	
hgs
parents:
diff changeset
   795
			// Static node feature start end
hgs
parents:
diff changeset
   796
hgs
parents:
diff changeset
   797
			_DBG_FILE("CNSmlDSSettingsAdapter::ChildURIListL(): end");
hgs
parents:
diff changeset
   798
			CleanupStack::PopAndDestroy(); //currentURISegmentList 
hgs
parents:
diff changeset
   799
			return;
hgs
parents:
diff changeset
   800
		}
hgs
parents:
diff changeset
   801
		}		
hgs
parents:
diff changeset
   802
	else if( aURI.Match( KDSDBMatch ) != KErrNotFound )
hgs
parents:
diff changeset
   803
		{
hgs
parents:
diff changeset
   804
		//
hgs
parents:
diff changeset
   805
		//	Check if ContenType exists (profileId from adapters)
hgs
parents:
diff changeset
   806
		// 
hgs
parents:
diff changeset
   807
		TInt profileLUID = GetProfileIdFromURIL( aURI ); // ProfileId for DB-level
hgs
parents:
diff changeset
   808
        if( OpenSyncSessionAndDSProfileL( profileLUID, ESmlOpenRead ) == KErrNone )
hgs
parents:
diff changeset
   809
            {
hgs
parents:
diff changeset
   810
            RArray<TSmlTaskId> taskIdArray;
hgs
parents:
diff changeset
   811
            CleanupClosePushL( taskIdArray );
hgs
parents:
diff changeset
   812
            iDSProfile.ListTasksL( taskIdArray );
hgs
parents:
diff changeset
   813
            if( taskIdArray.Count() == 0 )
hgs
parents:
diff changeset
   814
                {
hgs
parents:
diff changeset
   815
                currentURISegmentList->InsertL( currentURISegmentList->Size(), KNullDesC8 );
hgs
parents:
diff changeset
   816
                }
hgs
parents:
diff changeset
   817
            else
hgs
parents:
diff changeset
   818
                {
hgs
parents:
diff changeset
   819
                currentURISegmentList->InsertL( currentURISegmentList->Size(), KSegmDSAcc2 );
hgs
parents:
diff changeset
   820
                }
hgs
parents:
diff changeset
   821
            CloseDSProfile();
hgs
parents:
diff changeset
   822
            CleanupStack::PopAndDestroy();//taskIdArray
hgs
parents:
diff changeset
   823
            }
hgs
parents:
diff changeset
   824
        else
hgs
parents:
diff changeset
   825
            { 
hgs
parents:
diff changeset
   826
            iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
hgs
parents:
diff changeset
   827
		    _DBG_FILE("CNSmlDSSettingsAdapter::ChildURIListL(): CT-NOTFOUND end");
hgs
parents:
diff changeset
   828
			CleanupStack::PopAndDestroy();//currentURISegmentList 
hgs
parents:
diff changeset
   829
			return;
hgs
parents:
diff changeset
   830
            }
hgs
parents:
diff changeset
   831
            
hgs
parents:
diff changeset
   832
        iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
hgs
parents:
diff changeset
   833
		iCallBack->SetResultsL( aResultsRef, *currentURISegmentList, KNullDesC8 );
hgs
parents:
diff changeset
   834
		_DBG_FILE("CNSmlDSSettingsAdapter::ChildURIListL(): end");
hgs
parents:
diff changeset
   835
		CleanupStack::PopAndDestroy(); //currentURISegmentList
hgs
parents:
diff changeset
   836
		return;
hgs
parents:
diff changeset
   837
		}
hgs
parents:
diff changeset
   838
//
hgs
parents:
diff changeset
   839
//	Handle ContentType (DB) request -> TASKS of the profile
hgs
parents:
diff changeset
   840
//
hgs
parents:
diff changeset
   841
	if( aURI.Match( KDSDBMatch2 ) != KErrNotFound )
hgs
parents:
diff changeset
   842
		{
hgs
parents:
diff changeset
   843
		TInt lProfileId = GetIntObject( aLUID ); 
hgs
parents:
diff changeset
   844
		
hgs
parents:
diff changeset
   845
		if( ! FindProfileIdL( lProfileId ) )
hgs
parents:
diff changeset
   846
			{
hgs
parents:
diff changeset
   847
			_DBG_FILE("CNSmlDSSettingsAdapter::ChildURIListL(): NOTFOUND CTTYPE end");
hgs
parents:
diff changeset
   848
			CleanupStack::PopAndDestroy();// currentURISegmentList
hgs
parents:
diff changeset
   849
			iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
hgs
parents:
diff changeset
   850
			return;
hgs
parents:
diff changeset
   851
			}
hgs
parents:
diff changeset
   852
		
hgs
parents:
diff changeset
   853
        TInt ret = CreateURITaskSegmentListL( aURI, lProfileId, currentURISegmentList, 
hgs
parents:
diff changeset
   854
                                                aPreviousURISegmentList );
hgs
parents:
diff changeset
   855
		if( ret != KErrNone && ret != KErrNotFound )
hgs
parents:
diff changeset
   856
			{
hgs
parents:
diff changeset
   857
			_DBG_FILE("CNSmlDSSettingsAdapter::ChildURIListL(): ContentType error end");
hgs
parents:
diff changeset
   858
			CleanupStack::PopAndDestroy();// currentURISegmentList
hgs
parents:
diff changeset
   859
			iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
hgs
parents:
diff changeset
   860
			return;
hgs
parents:
diff changeset
   861
			}
hgs
parents:
diff changeset
   862
		_DBG_FILE("CNSmlDSSettingsAdapter::ChildURIListL(): CTTYPE-OK end");
hgs
parents:
diff changeset
   863
		iCallBack->SetResultsL( aResultsRef, *currentURISegmentList, KNullDesC8);
hgs
parents:
diff changeset
   864
		iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );	
hgs
parents:
diff changeset
   865
		CleanupStack::PopAndDestroy();// currentURISegmentList
hgs
parents:
diff changeset
   866
		return;
hgs
parents:
diff changeset
   867
		}
hgs
parents:
diff changeset
   868
hgs
parents:
diff changeset
   869
	
hgs
parents:
diff changeset
   870
    TInt ret = CreateURIProfileSegmentListL( currentURISegmentList, aPreviousURISegmentList );
hgs
parents:
diff changeset
   871
hgs
parents:
diff changeset
   872
    if( ret != KErrNone )
hgs
parents:
diff changeset
   873
	    {
hgs
parents:
diff changeset
   874
		_DBG_FILE("CNSmlDSSettingsAdapter::ChildURIListL(): Profile not found end");
hgs
parents:
diff changeset
   875
		CleanupStack::PopAndDestroy();// currentURISegmentList
hgs
parents:
diff changeset
   876
		iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
hgs
parents:
diff changeset
   877
		return;
hgs
parents:
diff changeset
   878
		}
hgs
parents:
diff changeset
   879
   
hgs
parents:
diff changeset
   880
	iCallBack->SetResultsL( aResultsRef, *currentURISegmentList, KNullDesC8 );
hgs
parents:
diff changeset
   881
	CleanupStack::PopAndDestroy(); // currentURISegmentList
hgs
parents:
diff changeset
   882
	iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
hgs
parents:
diff changeset
   883
	_DBG_FILE("CNSmlDSSettingsAdapter::ChildURIListL(): end");
hgs
parents:
diff changeset
   884
	return;
hgs
parents:
diff changeset
   885
    }
hgs
parents:
diff changeset
   886
hgs
parents:
diff changeset
   887
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
   888
//  CNSmlDSSettingsAdapter::AddNodeObjectL
hgs
parents:
diff changeset
   889
//  The function adds the new node object.
hgs
parents:
diff changeset
   890
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
   891
void CNSmlDSSettingsAdapter::AddNodeObjectL( const TDesC8& aURI, 
hgs
parents:
diff changeset
   892
                                                const TDesC8& aParentLUID, 
hgs
parents:
diff changeset
   893
                                                const TInt aStatusRef )
hgs
parents:
diff changeset
   894
	{
hgs
parents:
diff changeset
   895
	_DBG_FILE("CNSmlDSSettingsAdapter::AddNodeObjectL(): begin");
hgs
parents:
diff changeset
   896
//
hgs
parents:
diff changeset
   897
//	Check if ContentType-add and insert to Buffer
hgs
parents:
diff changeset
   898
//
hgs
parents:
diff changeset
   899
    iParentLUID = GetIntObject( aParentLUID );
hgs
parents:
diff changeset
   900
    
hgs
parents:
diff changeset
   901
	if( aURI.Match( KDSDBAddMatch )!= KErrNotFound &&
hgs
parents:
diff changeset
   902
		aURI.Match( KDSDBAddMatch2 )== KErrNotFound )
hgs
parents:
diff changeset
   903
		{
hgs
parents:
diff changeset
   904
		if( aParentLUID.Length() > 0 && iParentLUID >= 0 && iBufferExecution == EFalse )
hgs
parents:
diff changeset
   905
			{
hgs
parents:
diff changeset
   906
            AddNodeBufferL( aURI, aParentLUID, aStatusRef );
hgs
parents:
diff changeset
   907
            }
hgs
parents:
diff changeset
   908
		else if( iParentLUID < 0 )
hgs
parents:
diff changeset
   909
			{
hgs
parents:
diff changeset
   910
			iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
hgs
parents:
diff changeset
   911
			_DBG_FILE("CNSmlDSSettingsAdapter::AddNodeObjectL(): end");
hgs
parents:
diff changeset
   912
			}
hgs
parents:
diff changeset
   913
		else
hgs
parents:
diff changeset
   914
			{
hgs
parents:
diff changeset
   915
			iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError );
hgs
parents:
diff changeset
   916
			_DBG_FILE("CNSmlDSSettingsAdapter::AddNodeObjectL(): end");
hgs
parents:
diff changeset
   917
			}
hgs
parents:
diff changeset
   918
		return;
hgs
parents:
diff changeset
   919
		}
hgs
parents:
diff changeset
   920
    
hgs
parents:
diff changeset
   921
	if( aURI.Match(KDSDBAddMatch3) != KErrNotFound )
hgs
parents:
diff changeset
   922
		{
hgs
parents:
diff changeset
   923
		if( FindProfileIdL( iParentLUID ) ) // Profile on database
hgs
parents:
diff changeset
   924
			{
hgs
parents:
diff changeset
   925
			iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
hgs
parents:
diff changeset
   926
			_DBG_FILE("CNSmlDSSettingsAdapter::AddNodeObjectL(): end");
hgs
parents:
diff changeset
   927
			}
hgs
parents:
diff changeset
   928
		else
hgs
parents:
diff changeset
   929
			{
hgs
parents:
diff changeset
   930
			iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError );
hgs
parents:
diff changeset
   931
			_DBG_FILE("CNSmlDSSettingsAdapter::AddNodeObjectL(): end");
hgs
parents:
diff changeset
   932
			}
hgs
parents:
diff changeset
   933
		return;
hgs
parents:
diff changeset
   934
		}
hgs
parents:
diff changeset
   935
   
hgs
parents:
diff changeset
   936
	if( FindProfileIdL( iParentLUID ) )
hgs
parents:
diff changeset
   937
		{
hgs
parents:
diff changeset
   938
		iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EAlreadyExists);
hgs
parents:
diff changeset
   939
		_DBG_FILE("CNSmlDSSettingsAdapter::AddNodeObjectL(): EAlreadyExists end");
hgs
parents:
diff changeset
   940
		return;
hgs
parents:
diff changeset
   941
		}
hgs
parents:
diff changeset
   942
	else
hgs
parents:
diff changeset
   943
		{
hgs
parents:
diff changeset
   944
		if( aParentLUID.Length() > 0 )
hgs
parents:
diff changeset
   945
		{		
hgs
parents:
diff changeset
   946
			TInt ret = iCallBack->RemoveMappingL(KNSmlDSSettingsAdapterImplUid,
hgs
parents:
diff changeset
   947
						GetDynamicDSNodeUri( aURI ), ETrue );
hgs
parents:
diff changeset
   948
			if(ret)
hgs
parents:
diff changeset
   949
				{
hgs
parents:
diff changeset
   950
				iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError );
hgs
parents:
diff changeset
   951
				return;
hgs
parents:
diff changeset
   952
				}
hgs
parents:
diff changeset
   953
		}		
hgs
parents:
diff changeset
   954
        //
hgs
parents:
diff changeset
   955
        //	Create new profile
hgs
parents:
diff changeset
   956
        //
hgs
parents:
diff changeset
   957
   	    TInt newPID = -1;
hgs
parents:
diff changeset
   958
        TInt sRet = CreateNewProfileL( newPID );
hgs
parents:
diff changeset
   959
        if( sRet != KErrNone || newPID < 0 )
hgs
parents:
diff changeset
   960
		    {	
hgs
parents:
diff changeset
   961
		    if( sRet == KErrDiskFull )
hgs
parents:
diff changeset
   962
			    {
hgs
parents:
diff changeset
   963
			    iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EDiskFull );
hgs
parents:
diff changeset
   964
			    }
hgs
parents:
diff changeset
   965
		    else if( sRet == KErrInUse )
hgs
parents:
diff changeset
   966
			    {
hgs
parents:
diff changeset
   967
			    iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EObjectInUse );
hgs
parents:
diff changeset
   968
			    }
hgs
parents:
diff changeset
   969
		    else
hgs
parents:
diff changeset
   970
			    {
hgs
parents:
diff changeset
   971
			    iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError );
hgs
parents:
diff changeset
   972
			    }
hgs
parents:
diff changeset
   973
		    return;
hgs
parents:
diff changeset
   974
		    }
hgs
parents:
diff changeset
   975
		//
hgs
parents:
diff changeset
   976
        //	Get new ProfileId from database
hgs
parents:
diff changeset
   977
        //
hgs
parents:
diff changeset
   978
	    iLUID = newPID;
hgs
parents:
diff changeset
   979
        //
hgs
parents:
diff changeset
   980
   	    TBuf8<8> newLUID;
hgs
parents:
diff changeset
   981
	    newLUID.Num( iLUID );
hgs
parents:
diff changeset
   982
	    iCallBack->SetMappingL( aURI, newLUID );
hgs
parents:
diff changeset
   983
        newLUID.Delete( 0, newLUID.Size() );
hgs
parents:
diff changeset
   984
        }
hgs
parents:
diff changeset
   985
	iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
hgs
parents:
diff changeset
   986
	_DBG_FILE("CNSmlDSSettingsAdapter::AddNodeObjectL(): end");
hgs
parents:
diff changeset
   987
    return;
hgs
parents:
diff changeset
   988
	}
hgs
parents:
diff changeset
   989
hgs
parents:
diff changeset
   990
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
   991
//  CNSmlDSSettingsAdapter::UpdateLeafObjectL
hgs
parents:
diff changeset
   992
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
   993
void CNSmlDSSettingsAdapter::UpdateLeafObjectL( const TDesC8& /*aURI*/, 
hgs
parents:
diff changeset
   994
                                                const TDesC8& /*aLUID*/, 
hgs
parents:
diff changeset
   995
                                                RWriteStream*& /*aStream*/, 
hgs
parents:
diff changeset
   996
                                                const TDesC8& /*aType*/, 
hgs
parents:
diff changeset
   997
                                                const TInt /*aStatusRef*/ )
hgs
parents:
diff changeset
   998
	{
hgs
parents:
diff changeset
   999
	//Not supported since streaming is not supported by the adapter.
hgs
parents:
diff changeset
  1000
	}
hgs
parents:
diff changeset
  1001
	
hgs
parents:
diff changeset
  1002
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1003
//  CNSmlDSSettingsAdapter::FetchLeafObjectSizeL
hgs
parents:
diff changeset
  1004
//  The function fetches the size of the leaf object data.
hgs
parents:
diff changeset
  1005
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1006
void CNSmlDSSettingsAdapter::FetchLeafObjectSizeL( const TDesC8& aURI, 
hgs
parents:
diff changeset
  1007
                                                    const TDesC8& aLUID, 
hgs
parents:
diff changeset
  1008
                                                    const TDesC8& aType, 
hgs
parents:
diff changeset
  1009
                                                    const TInt aResultsRef, 
hgs
parents:
diff changeset
  1010
                                                    const TInt aStatusRef )
hgs
parents:
diff changeset
  1011
	{
hgs
parents:
diff changeset
  1012
	_DBG_FILE("CNSmlDSSettingsAdapter::FetchLeafObjectSizeL() : begin");
hgs
parents:
diff changeset
  1013
    CBufBase *lObject = CBufFlat::NewL( 128 );
hgs
parents:
diff changeset
  1014
	CleanupStack::PushL( lObject );
hgs
parents:
diff changeset
  1015
	lObject->Reset();
hgs
parents:
diff changeset
  1016
    if( FetchObjectL( aURI, aLUID, lObject, aStatusRef ) != KErrNone )
hgs
parents:
diff changeset
  1017
        {
hgs
parents:
diff changeset
  1018
        CleanupStack::PopAndDestroy(); //lObject
hgs
parents:
diff changeset
  1019
        _DBG_FILE("CNSmlDSSettingsAdapter::FetchLeafObjectSizeL() : Error end");
hgs
parents:
diff changeset
  1020
        return;
hgs
parents:
diff changeset
  1021
        };
hgs
parents:
diff changeset
  1022
    TInt objSizeInBytes = lObject->Size();
hgs
parents:
diff changeset
  1023
	TBuf8<16> stringObjSizeInBytes;
hgs
parents:
diff changeset
  1024
	stringObjSizeInBytes.Num( objSizeInBytes );
hgs
parents:
diff changeset
  1025
	lObject->Reset();
hgs
parents:
diff changeset
  1026
    lObject->InsertL( 0, stringObjSizeInBytes );
hgs
parents:
diff changeset
  1027
	
hgs
parents:
diff changeset
  1028
	iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
hgs
parents:
diff changeset
  1029
	iCallBack->SetResultsL( aResultsRef, *lObject, aType );
hgs
parents:
diff changeset
  1030
	CleanupStack::PopAndDestroy(); //object
hgs
parents:
diff changeset
  1031
    _DBG_FILE("CNSmlDSSettingsAdapter::FetchLeafObjectSizeL() : end");
hgs
parents:
diff changeset
  1032
    return;
hgs
parents:
diff changeset
  1033
    }
hgs
parents:
diff changeset
  1034
hgs
parents:
diff changeset
  1035
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1036
//  CNSmlDSSettingsAdapter::ExecuteCommandL
hgs
parents:
diff changeset
  1037
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1038
void CNSmlDSSettingsAdapter::ExecuteCommandL( const TDesC8& /*aURI*/, 
hgs
parents:
diff changeset
  1039
                                                const TDesC8& /*aLUID*/, 
hgs
parents:
diff changeset
  1040
                                                const TDesC8& /*aArgument*/, 
hgs
parents:
diff changeset
  1041
                                                const TDesC8& /*aType*/, 
hgs
parents:
diff changeset
  1042
                                                const TInt /*aStatusRef*/ )
hgs
parents:
diff changeset
  1043
	{
hgs
parents:
diff changeset
  1044
	// Not supported	
hgs
parents:
diff changeset
  1045
	}
hgs
parents:
diff changeset
  1046
hgs
parents:
diff changeset
  1047
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1048
//  CNSmlDSSettingsAdapter::ExecuteCommandL
hgs
parents:
diff changeset
  1049
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1050
void CNSmlDSSettingsAdapter::ExecuteCommandL( const TDesC8& /*aURI*/, 
hgs
parents:
diff changeset
  1051
                                                const TDesC8& /*aLUID*/, 
hgs
parents:
diff changeset
  1052
                                                RWriteStream*& /*aStream*/, 
hgs
parents:
diff changeset
  1053
                                                const TDesC8& /*aType*/, 
hgs
parents:
diff changeset
  1054
                                                const TInt /*aStatusRef*/ )
hgs
parents:
diff changeset
  1055
	{
hgs
parents:
diff changeset
  1056
	// Not supported by the adapter.
hgs
parents:
diff changeset
  1057
	}
hgs
parents:
diff changeset
  1058
hgs
parents:
diff changeset
  1059
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1060
//  CNSmlDSSettingsAdapter::CopyCommandL
hgs
parents:
diff changeset
  1061
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1062
void CNSmlDSSettingsAdapter::CopyCommandL( const TDesC8& /*aTargetURI*/, 
hgs
parents:
diff changeset
  1063
                                            const TDesC8& /*aTargetLUID*/, 
hgs
parents:
diff changeset
  1064
                                            const TDesC8& /*aSourceURI*/, 
hgs
parents:
diff changeset
  1065
                                            const TDesC8& /*aSourceLUID*/, 
hgs
parents:
diff changeset
  1066
                                            const TDesC8& /*aType*/, 
hgs
parents:
diff changeset
  1067
                                            TInt /*aStatusRef*/ )
hgs
parents:
diff changeset
  1068
	{
hgs
parents:
diff changeset
  1069
	// Not supported by the adapter.
hgs
parents:
diff changeset
  1070
	}
hgs
parents:
diff changeset
  1071
hgs
parents:
diff changeset
  1072
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1073
//  CNSmlDSSettingsAdapter::StartAtomicL
hgs
parents:
diff changeset
  1074
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1075
void CNSmlDSSettingsAdapter::StartAtomicL()
hgs
parents:
diff changeset
  1076
	{
hgs
parents:
diff changeset
  1077
	// Atomic commands not supported by the adapter.
hgs
parents:
diff changeset
  1078
	}
hgs
parents:
diff changeset
  1079
hgs
parents:
diff changeset
  1080
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1081
//  CNSmlDSSettingsAdapter::CommitAtomicL
hgs
parents:
diff changeset
  1082
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1083
void CNSmlDSSettingsAdapter::CommitAtomicL()
hgs
parents:
diff changeset
  1084
	{
hgs
parents:
diff changeset
  1085
	// Atomic commands not supported by the adapter.
hgs
parents:
diff changeset
  1086
	}
hgs
parents:
diff changeset
  1087
hgs
parents:
diff changeset
  1088
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1089
//  CNSmlDSSettingsAdapter::RollbackAtomicL
hgs
parents:
diff changeset
  1090
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1091
void CNSmlDSSettingsAdapter::RollbackAtomicL()
hgs
parents:
diff changeset
  1092
	{
hgs
parents:
diff changeset
  1093
	// Atomic commands not supported by the adapter.
hgs
parents:
diff changeset
  1094
	}
hgs
parents:
diff changeset
  1095
hgs
parents:
diff changeset
  1096
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1097
//  CNSmlDSSettingsAdapter::StreamingSupport()
hgs
parents:
diff changeset
  1098
//  Indicates if streaming is supported.
hgs
parents:
diff changeset
  1099
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1100
TBool CNSmlDSSettingsAdapter::StreamingSupport( TInt& /*aItemSize*/ )
hgs
parents:
diff changeset
  1101
	{
hgs
parents:
diff changeset
  1102
	return EFalse;
hgs
parents:
diff changeset
  1103
	}
hgs
parents:
diff changeset
  1104
hgs
parents:
diff changeset
  1105
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1106
//  CNSmlDSSettingsAdapter::StreamCommittedL
hgs
parents:
diff changeset
  1107
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1108
void CNSmlDSSettingsAdapter::StreamCommittedL()
hgs
parents:
diff changeset
  1109
	{
hgs
parents:
diff changeset
  1110
	//  Not supported since streaming not supported by the adapter.
hgs
parents:
diff changeset
  1111
	}
hgs
parents:
diff changeset
  1112
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1113
//  CNSmlDSSettingsAdapter::CompleteOutstandingCmdsL
hgs
parents:
diff changeset
  1114
//  The function completes all buffered command from the buffer.
hgs
parents:
diff changeset
  1115
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1116
void CNSmlDSSettingsAdapter::CompleteOutstandingCmdsL()
hgs
parents:
diff changeset
  1117
	{
hgs
parents:
diff changeset
  1118
    
hgs
parents:
diff changeset
  1119
//
hgs
parents:
diff changeset
  1120
//	Handle unhandled nodes if any
hgs
parents:
diff changeset
  1121
//
hgs
parents:
diff changeset
  1122
    TInt count = iBuffer->Count();
hgs
parents:
diff changeset
  1123
	for( TInt h = 0; h < count ; h++ )
hgs
parents:
diff changeset
  1124
		{
hgs
parents:
diff changeset
  1125
		TBuf8<150> commandURI;
hgs
parents:
diff changeset
  1126
		commandURI.Append( iBuffer->At(0).iMappingName->Des() );
hgs
parents:
diff changeset
  1127
		commandURI.Append( KDummyTxt );
hgs
parents:
diff changeset
  1128
		TRAP_IGNORE( ExecuteBufferL( commandURI ) );
hgs
parents:
diff changeset
  1129
		}
hgs
parents:
diff changeset
  1130
	iBuffer->Reset();
hgs
parents:
diff changeset
  1131
	CloseDSProfile();
hgs
parents:
diff changeset
  1132
	
hgs
parents:
diff changeset
  1133
	// if port was updated, set it
hgs
parents:
diff changeset
  1134
    if ( iPortBuf )
hgs
parents:
diff changeset
  1135
        {
hgs
parents:
diff changeset
  1136
        TInt err = SetProfileConnectionPortNrL( iPortBufLUID, *iPortBuf );
hgs
parents:
diff changeset
  1137
        
hgs
parents:
diff changeset
  1138
        // set status
hgs
parents:
diff changeset
  1139
        if ( err != KErrNone )
hgs
parents:
diff changeset
  1140
            {
hgs
parents:
diff changeset
  1141
            iCallBack->SetStatusL( iPortBufStatusRef, CSmlDmAdapter::EError );
hgs
parents:
diff changeset
  1142
            }
hgs
parents:
diff changeset
  1143
        else
hgs
parents:
diff changeset
  1144
            {
hgs
parents:
diff changeset
  1145
            iCallBack->SetStatusL( iPortBufStatusRef, CSmlDmAdapter::EOk );
hgs
parents:
diff changeset
  1146
            }
hgs
parents:
diff changeset
  1147
hgs
parents:
diff changeset
  1148
        delete iPortBuf;
hgs
parents:
diff changeset
  1149
        iPortBuf = NULL;
hgs
parents:
diff changeset
  1150
        }
hgs
parents:
diff changeset
  1151
	}
hgs
parents:
diff changeset
  1152
hgs
parents:
diff changeset
  1153
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1154
//  TBool CNSmlDSSettingsAdapter::AcceptDSField
hgs
parents:
diff changeset
  1155
//  The function checks if leaf to be handled is valid for the adapter.
hgs
parents:
diff changeset
  1156
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1157
TBool CNSmlDSSettingsAdapter::AcceptDSField()
hgs
parents:
diff changeset
  1158
	{
hgs
parents:
diff changeset
  1159
	_DBG_FILE("CNSmlDSSettingsAdapter::AcceptDSField(): begin");
hgs
parents:
diff changeset
  1160
hgs
parents:
diff changeset
  1161
	if ( iField->Compare( KNSmlDdfAddrType ) == 0 )
hgs
parents:
diff changeset
  1162
		{
hgs
parents:
diff changeset
  1163
		return ETrue;
hgs
parents:
diff changeset
  1164
		}
hgs
parents:
diff changeset
  1165
	else if ( iField->Compare( KNSmlDdfAddr ) == 0 )
hgs
parents:
diff changeset
  1166
		{
hgs
parents:
diff changeset
  1167
		return ETrue;
hgs
parents:
diff changeset
  1168
		}
hgs
parents:
diff changeset
  1169
	else if ( iField->Compare( KNSmlDdfPortNbr ) == 0 )
hgs
parents:
diff changeset
  1170
		{
hgs
parents:
diff changeset
  1171
		return ETrue;
hgs
parents:
diff changeset
  1172
		}
hgs
parents:
diff changeset
  1173
	else if ( iField->Compare( KNSmlDdfClientUserName ) == 0 )
hgs
parents:
diff changeset
  1174
		{
hgs
parents:
diff changeset
  1175
		return ETrue;
hgs
parents:
diff changeset
  1176
		}
hgs
parents:
diff changeset
  1177
	else if ( iField->Compare( KNSmlDdfName ) == 0 )
hgs
parents:
diff changeset
  1178
		{
hgs
parents:
diff changeset
  1179
		return ETrue;
hgs
parents:
diff changeset
  1180
		}
hgs
parents:
diff changeset
  1181
	else if ( iField->Compare( KNSmlDdfCTType ) == 0 )
hgs
parents:
diff changeset
  1182
		{
hgs
parents:
diff changeset
  1183
		return ETrue;
hgs
parents:
diff changeset
  1184
		}
hgs
parents:
diff changeset
  1185
	else if ( iField->Compare( KNSmlDdfRDBURI ) == 0 )
hgs
parents:
diff changeset
  1186
		{
hgs
parents:
diff changeset
  1187
		return ETrue;
hgs
parents:
diff changeset
  1188
		}
hgs
parents:
diff changeset
  1189
	else if ( iField->Compare( KNSmlDdfLDBURI ) == 0 )
hgs
parents:
diff changeset
  1190
		{
hgs
parents:
diff changeset
  1191
		return ETrue;
hgs
parents:
diff changeset
  1192
		}
hgs
parents:
diff changeset
  1193
	else if ( iField->Compare( KNSmlDdfClientPW ) == 0 )
hgs
parents:
diff changeset
  1194
		{
hgs
parents:
diff changeset
  1195
		return ETrue;
hgs
parents:
diff changeset
  1196
		}
hgs
parents:
diff changeset
  1197
	else if ( iField->Compare( KNSmlDdfToNAPID ) == 0 )
hgs
parents:
diff changeset
  1198
		{
hgs
parents:
diff changeset
  1199
		return ETrue;
hgs
parents:
diff changeset
  1200
		}
hgs
parents:
diff changeset
  1201
	else if ( iField->Compare( KNSmlDdfHidden ) == 0 )
hgs
parents:
diff changeset
  1202
		{
hgs
parents:
diff changeset
  1203
		return EFalse;
hgs
parents:
diff changeset
  1204
		}
hgs
parents:
diff changeset
  1205
hgs
parents:
diff changeset
  1206
	_DBG_FILE("CNSmlDSSettingsAdapter::AcceptDSField(): end");
hgs
parents:
diff changeset
  1207
	return EFalse;
hgs
parents:
diff changeset
  1208
	}
hgs
parents:
diff changeset
  1209
hgs
parents:
diff changeset
  1210
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1211
//  CNSmlDSSettingsAdapter::GetDSField
hgs
parents:
diff changeset
  1212
//  The function checks what leaf to handled and returns enum value for the leaf.
hgs
parents:
diff changeset
  1213
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1214
TInt CNSmlDSSettingsAdapter::GetDSField() const
hgs
parents:
diff changeset
  1215
	{
hgs
parents:
diff changeset
  1216
	_DBG_FILE("CNSmlDSSettingsAdapter::GetDSField(): begin");
hgs
parents:
diff changeset
  1217
hgs
parents:
diff changeset
  1218
	if ( iField->Compare( KNSmlDdfAddrType ) == 0 )
hgs
parents:
diff changeset
  1219
		{
hgs
parents:
diff changeset
  1220
		return EProfileMediumType;
hgs
parents:
diff changeset
  1221
		}
hgs
parents:
diff changeset
  1222
	else if ( iField->Compare( KNSmlDdfAddr ) == 0 )
hgs
parents:
diff changeset
  1223
		{
hgs
parents:
diff changeset
  1224
		return EProfileURL;
hgs
parents:
diff changeset
  1225
		}
hgs
parents:
diff changeset
  1226
	else if ( iField->Compare( KNSmlDdfPortNbr ) == 0 )
hgs
parents:
diff changeset
  1227
		{
hgs
parents:
diff changeset
  1228
		return EProfilePort;
hgs
parents:
diff changeset
  1229
		}
hgs
parents:
diff changeset
  1230
	else if ( iField->Compare( KNSmlDdfClientUserName ) == 0 )
hgs
parents:
diff changeset
  1231
		{
hgs
parents:
diff changeset
  1232
		return EProfileSyncServerUsername;
hgs
parents:
diff changeset
  1233
		}
hgs
parents:
diff changeset
  1234
	else if ( iField->Compare( KNSmlDdfServerId ) == 0 )
hgs
parents:
diff changeset
  1235
		{
hgs
parents:
diff changeset
  1236
		return EProfileServerId;
hgs
parents:
diff changeset
  1237
		}
hgs
parents:
diff changeset
  1238
	else if ( iField->Compare( KNSmlDdfClientPW ) == 0 )
hgs
parents:
diff changeset
  1239
		{
hgs
parents:
diff changeset
  1240
		return EProfileSyncServerPassword;
hgs
parents:
diff changeset
  1241
		}
hgs
parents:
diff changeset
  1242
	else if ( iField->Compare( KNSmlDdfName ) == 0 )
hgs
parents:
diff changeset
  1243
		{
hgs
parents:
diff changeset
  1244
		return EProfileName;
hgs
parents:
diff changeset
  1245
		}
hgs
parents:
diff changeset
  1246
	else if ( iField->Compare( KNSmlDdfToNAPID ) == 0 )
hgs
parents:
diff changeset
  1247
		{
hgs
parents:
diff changeset
  1248
		return EProfileIAPId;
hgs
parents:
diff changeset
  1249
		}
hgs
parents:
diff changeset
  1250
	else if ( iField->Compare( KNSmlDdfHidden ) == 0 )
hgs
parents:
diff changeset
  1251
		{
hgs
parents:
diff changeset
  1252
		return EHiddenProfile;
hgs
parents:
diff changeset
  1253
		}
hgs
parents:
diff changeset
  1254
    else if ( iField->Compare( KNSmlDdfDB ) == 0 ||
hgs
parents:
diff changeset
  1255
            iField->Compare( KNSmlDdfCTType ) == 0 ||
hgs
parents:
diff changeset
  1256
            iField->Compare( KNSmlDdfCTVerL ) == 0 ||
hgs
parents:
diff changeset
  1257
            iField->Compare( KNSmlDdfRDBURI ) == 0 ||
hgs
parents:
diff changeset
  1258
            iField->Compare( KNSmlDdfLDBURI ) == 0 )
hgs
parents:
diff changeset
  1259
		{
hgs
parents:
diff changeset
  1260
		return ESyncAccepted;
hgs
parents:
diff changeset
  1261
		}
hgs
parents:
diff changeset
  1262
	
hgs
parents:
diff changeset
  1263
	_DBG_FILE("CNSmlDSSettingsAdapter::GetDSField(): end");
hgs
parents:
diff changeset
  1264
	return KErrNotFound;
hgs
parents:
diff changeset
  1265
	}
hgs
parents:
diff changeset
  1266
hgs
parents:
diff changeset
  1267
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1268
//  CNSmlDSSettingsAdapter::GetDSFieldTypeL
hgs
parents:
diff changeset
  1269
//  The function return the data type for the leaf.
hgs
parents:
diff changeset
  1270
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1271
TInt CNSmlDSSettingsAdapter::GetDSFieldTypeL() const
hgs
parents:
diff changeset
  1272
	{
hgs
parents:
diff changeset
  1273
	_DBG_FILE("CNSmlDSSettingsAdapter::GetDSFieldTypeL(): begin");
hgs
parents:
diff changeset
  1274
hgs
parents:
diff changeset
  1275
	if ( iField->Compare( KNSmlDdfAddrType ) == 0 ||
hgs
parents:
diff changeset
  1276
        iField->Compare( KNSmlDdfPortNbr ) == 0 ||
hgs
parents:
diff changeset
  1277
        iField->Compare( KNSmlDdfToNAPID ) == 0 ||
hgs
parents:
diff changeset
  1278
        iField->Compare( KNSmlDdfHidden ) == 0 )
hgs
parents:
diff changeset
  1279
		{
hgs
parents:
diff changeset
  1280
		return EInt;
hgs
parents:
diff changeset
  1281
		}
hgs
parents:
diff changeset
  1282
	else if ( iField->Compare( KNSmlDdfAddr ) == 0 ||
hgs
parents:
diff changeset
  1283
            iField->Compare( KNSmlDdfClientUserName ) == 0 ||
hgs
parents:
diff changeset
  1284
            iField->Compare( KNSmlDdfServerId ) == 0 ||
hgs
parents:
diff changeset
  1285
            iField->Compare( KNSmlDdfClientPW ) == 0 ||
hgs
parents:
diff changeset
  1286
            iField->Compare( KNSmlDdfName ) == 0 )
hgs
parents:
diff changeset
  1287
		{
hgs
parents:
diff changeset
  1288
		return EStr;
hgs
parents:
diff changeset
  1289
		}
hgs
parents:
diff changeset
  1290
	else if ( iField->Compare( KNSmlDdfDB ) == 0 ||
hgs
parents:
diff changeset
  1291
            iField->Compare( KNSmlDdfCTType ) == 0 ||
hgs
parents:
diff changeset
  1292
            iField->Compare( KNSmlDdfCTVerL ) == 0 ||
hgs
parents:
diff changeset
  1293
            iField->Compare( KNSmlDdfRDBURI ) == 0 ||
hgs
parents:
diff changeset
  1294
            iField->Compare( KNSmlDdfLDBURI ) == 0 )
hgs
parents:
diff changeset
  1295
		{
hgs
parents:
diff changeset
  1296
		return EParam;
hgs
parents:
diff changeset
  1297
		}
hgs
parents:
diff changeset
  1298
hgs
parents:
diff changeset
  1299
	_DBG_FILE("CNSmlDSSettingsAdapter::GetDSFieldTypeL(): end");
hgs
parents:
diff changeset
  1300
	return EWrong;
hgs
parents:
diff changeset
  1301
	}
hgs
parents:
diff changeset
  1302
hgs
parents:
diff changeset
  1303
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1304
//  CNSmlDSSettingsAdapter::IntLUID
hgs
parents:
diff changeset
  1305
//	Returns IntValue for aLUID.
hgs
parents:
diff changeset
  1306
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1307
TInt CNSmlDSSettingsAdapter::IntLUID( const TDesC8& aLUID )
hgs
parents:
diff changeset
  1308
	{
hgs
parents:
diff changeset
  1309
hgs
parents:
diff changeset
  1310
	TLex8 lLex( aLUID );
hgs
parents:
diff changeset
  1311
hgs
parents:
diff changeset
  1312
	if ( lLex.Val( iLUID ) == KErrNone )
hgs
parents:
diff changeset
  1313
	    {
hgs
parents:
diff changeset
  1314
	    return iLUID;
hgs
parents:
diff changeset
  1315
	    }
hgs
parents:
diff changeset
  1316
	else
hgs
parents:
diff changeset
  1317
        {
hgs
parents:
diff changeset
  1318
        return 0;
hgs
parents:
diff changeset
  1319
        }
hgs
parents:
diff changeset
  1320
	}
hgs
parents:
diff changeset
  1321
hgs
parents:
diff changeset
  1322
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1323
//	CNSmlDSSettingsAdapter::GetIntObject
hgs
parents:
diff changeset
  1324
//	Returns IntValue for a aObject
hgs
parents:
diff changeset
  1325
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1326
TInt CNSmlDSSettingsAdapter::GetIntObject( const TDesC8& aObject )
hgs
parents:
diff changeset
  1327
	{
hgs
parents:
diff changeset
  1328
	TLex8 lLex( aObject );
hgs
parents:
diff changeset
  1329
hgs
parents:
diff changeset
  1330
	TInt value = 0;
hgs
parents:
diff changeset
  1331
hgs
parents:
diff changeset
  1332
	if ( lLex.Val( value ) == KErrNone )
hgs
parents:
diff changeset
  1333
	    {
hgs
parents:
diff changeset
  1334
	    return value;
hgs
parents:
diff changeset
  1335
	    }
hgs
parents:
diff changeset
  1336
	else
hgs
parents:
diff changeset
  1337
        {
hgs
parents:
diff changeset
  1338
        return KErrGeneral;
hgs
parents:
diff changeset
  1339
        }
hgs
parents:
diff changeset
  1340
	}
hgs
parents:
diff changeset
  1341
hgs
parents:
diff changeset
  1342
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1343
//	CNSmlDSSettingsAdapter::GetIntObject16()
hgs
parents:
diff changeset
  1344
//	Returns IntValue for a 16-bit aObject
hgs
parents:
diff changeset
  1345
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1346
TInt CNSmlDSSettingsAdapter::GetIntObject16( const TDesC& aObject )
hgs
parents:
diff changeset
  1347
	{
hgs
parents:
diff changeset
  1348
	TLex lLex( aObject );
hgs
parents:
diff changeset
  1349
hgs
parents:
diff changeset
  1350
	TInt value = 0;
hgs
parents:
diff changeset
  1351
hgs
parents:
diff changeset
  1352
	if ( lLex.Val( value ) == KErrNone )
hgs
parents:
diff changeset
  1353
	    {
hgs
parents:
diff changeset
  1354
	    return value;
hgs
parents:
diff changeset
  1355
	    }
hgs
parents:
diff changeset
  1356
	else
hgs
parents:
diff changeset
  1357
        {
hgs
parents:
diff changeset
  1358
        return KErrGeneral;
hgs
parents:
diff changeset
  1359
        }
hgs
parents:
diff changeset
  1360
	}
hgs
parents:
diff changeset
  1361
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1362
//	CNSmlDSSettingsAdapter::SetIntObjectLC
hgs
parents:
diff changeset
  1363
//	Converts integer to HBufC8 type buffer and returns reference to it.
hgs
parents:
diff changeset
  1364
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1365
TDesC8& CNSmlDSSettingsAdapter::SetIntObjectLC( const TInt& aObject )
hgs
parents:
diff changeset
  1366
	{
hgs
parents:
diff changeset
  1367
	HBufC8* buf = HBufC8::NewLC( 8 );
hgs
parents:
diff changeset
  1368
	TPtr8 ptrBuf = buf->Des();
hgs
parents:
diff changeset
  1369
hgs
parents:
diff changeset
  1370
	ptrBuf.Num( aObject );
hgs
parents:
diff changeset
  1371
hgs
parents:
diff changeset
  1372
	return *buf;
hgs
parents:
diff changeset
  1373
	}
hgs
parents:
diff changeset
  1374
hgs
parents:
diff changeset
  1375
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1376
//	CNSmlDSSettingsAdapter::NotValidStrLenght
hgs
parents:
diff changeset
  1377
//	The function checks if data length for a leaf is valid.
hgs
parents:
diff changeset
  1378
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1379
hgs
parents:
diff changeset
  1380
TBool CNSmlDSSettingsAdapter::NotValidStrLenght( const TInt& aProfileItem, 
hgs
parents:
diff changeset
  1381
                                                const TDesC8& aSource )
hgs
parents:
diff changeset
  1382
	{
hgs
parents:
diff changeset
  1383
	TInt lLen = aSource.Length();
hgs
parents:
diff changeset
  1384
	TBool lBool = EFalse;
hgs
parents:
diff changeset
  1385
	
hgs
parents:
diff changeset
  1386
	switch ( aProfileItem )
hgs
parents:
diff changeset
  1387
		{
hgs
parents:
diff changeset
  1388
		case ( EProfileName ) :
hgs
parents:
diff changeset
  1389
			{
hgs
parents:
diff changeset
  1390
			if( lLen > KNSmlMaxProfileNameLength )
hgs
parents:
diff changeset
  1391
				lBool = ETrue;	
hgs
parents:
diff changeset
  1392
			}
hgs
parents:
diff changeset
  1393
		break;
hgs
parents:
diff changeset
  1394
		
hgs
parents:
diff changeset
  1395
		case ( EProfileSyncServerUsername ) :
hgs
parents:
diff changeset
  1396
			{
hgs
parents:
diff changeset
  1397
			if( lLen > KNSmlMaxUsernameLength )
hgs
parents:
diff changeset
  1398
				lBool = ETrue;	
hgs
parents:
diff changeset
  1399
			}
hgs
parents:
diff changeset
  1400
		break;
hgs
parents:
diff changeset
  1401
hgs
parents:
diff changeset
  1402
		case ( EProfileSyncServerPassword ) :
hgs
parents:
diff changeset
  1403
			{
hgs
parents:
diff changeset
  1404
			if( lLen > KNSmlMaxPasswordLength )
hgs
parents:
diff changeset
  1405
				lBool = ETrue;	
hgs
parents:
diff changeset
  1406
			}
hgs
parents:
diff changeset
  1407
		break;
hgs
parents:
diff changeset
  1408
hgs
parents:
diff changeset
  1409
		case ( EProfileURL ) :
hgs
parents:
diff changeset
  1410
			{
hgs
parents:
diff changeset
  1411
			if( lLen > KNSmlMaxURLLength )
hgs
parents:
diff changeset
  1412
				lBool = ETrue;	
hgs
parents:
diff changeset
  1413
			}
hgs
parents:
diff changeset
  1414
		break;
hgs
parents:
diff changeset
  1415
hgs
parents:
diff changeset
  1416
		case ( EProfileIAPId ) :
hgs
parents:
diff changeset
  1417
			{
hgs
parents:
diff changeset
  1418
			if( lLen > KNSmlMaxURLLength )// Value from InternetAdapter for
hgs
parents:
diff changeset
  1419
				lBool = ETrue;			// given URI ./AP/xxx
hgs
parents:
diff changeset
  1420
			}
hgs
parents:
diff changeset
  1421
		break;
hgs
parents:
diff changeset
  1422
hgs
parents:
diff changeset
  1423
		case ( EProfilePort ) :
hgs
parents:
diff changeset
  1424
		case ( EHiddenProfile ) :
hgs
parents:
diff changeset
  1425
		case ( EProfileMediumType ) :
hgs
parents:
diff changeset
  1426
			{
hgs
parents:
diff changeset
  1427
			if( lLen > 8 )
hgs
parents:
diff changeset
  1428
				lBool = ETrue;	
hgs
parents:
diff changeset
  1429
			}
hgs
parents:
diff changeset
  1430
		break;
hgs
parents:
diff changeset
  1431
hgs
parents:
diff changeset
  1432
		case ( EProfileServerId ) :
hgs
parents:
diff changeset
  1433
			{
hgs
parents:
diff changeset
  1434
			if( lLen > KNSmlMaxUsernameLength )
hgs
parents:
diff changeset
  1435
				lBool = ETrue;			
hgs
parents:
diff changeset
  1436
			}
hgs
parents:
diff changeset
  1437
		break;
hgs
parents:
diff changeset
  1438
hgs
parents:
diff changeset
  1439
		default:
hgs
parents:
diff changeset
  1440
			{
hgs
parents:
diff changeset
  1441
			return ETrue;
hgs
parents:
diff changeset
  1442
			}
hgs
parents:
diff changeset
  1443
		}
hgs
parents:
diff changeset
  1444
hgs
parents:
diff changeset
  1445
	return lBool;
hgs
parents:
diff changeset
  1446
	}
hgs
parents:
diff changeset
  1447
hgs
parents:
diff changeset
  1448
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1449
//	CNSmlDSSettingsAdapter::SetField
hgs
parents:
diff changeset
  1450
//	The function finds out the last element of the URI.
hgs
parents:
diff changeset
  1451
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1452
TInt CNSmlDSSettingsAdapter::SetField( const TDesC8& aSource )
hgs
parents:
diff changeset
  1453
	{
hgs
parents:
diff changeset
  1454
	if ( aSource.LocateReverse( KNSmlDMUriSeparator ) == KErrNotFound )
hgs
parents:
diff changeset
  1455
	    {
hgs
parents:
diff changeset
  1456
	    iField->Des().Format( aSource );
hgs
parents:
diff changeset
  1457
	    }
hgs
parents:
diff changeset
  1458
	else
hgs
parents:
diff changeset
  1459
        {
hgs
parents:
diff changeset
  1460
        iField->Des().Format( aSource.Mid( aSource.LocateReverse( KNSmlDMUriSeparator ) + 1 ) );
hgs
parents:
diff changeset
  1461
        }
hgs
parents:
diff changeset
  1462
hgs
parents:
diff changeset
  1463
    return KErrNone;
hgs
parents:
diff changeset
  1464
	}
hgs
parents:
diff changeset
  1465
hgs
parents:
diff changeset
  1466
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1467
//	CNSmlDSSettingsAdapter::ConvertTo8LC
hgs
parents:
diff changeset
  1468
//	Converts 16-bit string value to 8-bit.
hgs
parents:
diff changeset
  1469
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1470
TDesC8& CNSmlDSSettingsAdapter::ConvertTo8LC( const TDesC& aSource )
hgs
parents:
diff changeset
  1471
	{
hgs
parents:
diff changeset
  1472
	HBufC8* buf = HBufC8::NewLC( aSource.Length() * 2 );
hgs
parents:
diff changeset
  1473
	TPtr8 bufPtr = buf->Des();
hgs
parents:
diff changeset
  1474
	CnvUtfConverter::ConvertFromUnicodeToUtf8( bufPtr, aSource );
hgs
parents:
diff changeset
  1475
    return *buf;
hgs
parents:
diff changeset
  1476
	}
hgs
parents:
diff changeset
  1477
hgs
parents:
diff changeset
  1478
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1479
//	CNSmlDSSettingsAdapter::ConvertTo16LC
hgs
parents:
diff changeset
  1480
//	Converts 8-bit string value to 16-bit.
hgs
parents:
diff changeset
  1481
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1482
TDesC16& CNSmlDSSettingsAdapter::ConvertTo16LC( const TDesC8& aSource )
hgs
parents:
diff changeset
  1483
	{
hgs
parents:
diff changeset
  1484
	HBufC16* buf16 = HBufC16::NewLC( aSource.Length() );
hgs
parents:
diff changeset
  1485
	TPtr16 bufPtr16 = buf16->Des();
hgs
parents:
diff changeset
  1486
	CnvUtfConverter::ConvertToUnicodeFromUtf8( bufPtr16, aSource );
hgs
parents:
diff changeset
  1487
    return *buf16;
hgs
parents:
diff changeset
  1488
	}
hgs
parents:
diff changeset
  1489
hgs
parents:
diff changeset
  1490
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1491
//	CNSmlDSSettingsAdapter::AddNewDataProviderL
hgs
parents:
diff changeset
  1492
//	Check if data provider exits and required MIME type is supported by the 
hgs
parents:
diff changeset
  1493
//  data provider. If supported new task will be created.
hgs
parents:
diff changeset
  1494
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1495
TInt CNSmlDSSettingsAdapter::AddNewDataProviderL( TInt aIntLUID, 
hgs
parents:
diff changeset
  1496
                                                    const TDesC8& aMIMEType, 
hgs
parents:
diff changeset
  1497
                                                    TInt& aDataProviderId )
hgs
parents:
diff changeset
  1498
	{
hgs
parents:
diff changeset
  1499
	_DBG_FILE("CNSmlDSSettingsAdapter::AddNewDataProviderL(): begin");
hgs
parents:
diff changeset
  1500
    
hgs
parents:
diff changeset
  1501
    TInt retVal = OpenSyncSessionAndDSProfileL( aIntLUID, ESmlOpenReadWrite );
hgs
parents:
diff changeset
  1502
    if( retVal != KErrNone )
hgs
parents:
diff changeset
  1503
		{
hgs
parents:
diff changeset
  1504
        CloseDSProfile();
hgs
parents:
diff changeset
  1505
        return KErrGeneral;	
hgs
parents:
diff changeset
  1506
		}
hgs
parents:
diff changeset
  1507
    if( iRdbDataStore->Size() <= 0 )
hgs
parents:
diff changeset
  1508
        {
hgs
parents:
diff changeset
  1509
        CloseDSProfile();
hgs
parents:
diff changeset
  1510
        return KErrGeneral;
hgs
parents:
diff changeset
  1511
        }
hgs
parents:
diff changeset
  1512
    RArray<TSmlDataProviderId> dataProviderArray;
hgs
parents:
diff changeset
  1513
    CleanupClosePushL( dataProviderArray );
hgs
parents:
diff changeset
  1514
    iSyncSession.ListDataProvidersL( dataProviderArray );
hgs
parents:
diff changeset
  1515
    TInt dataProviderCount = dataProviderArray.Count();
hgs
parents:
diff changeset
  1516
    if( dataProviderCount == 0 )
hgs
parents:
diff changeset
  1517
        {
hgs
parents:
diff changeset
  1518
        CloseDSProfile();
hgs
parents:
diff changeset
  1519
        CleanupStack::PopAndDestroy(); // dataProviderIdArray
hgs
parents:
diff changeset
  1520
    	_DBG_FILE("CNSmlDSSettingsAdapter::AddNewDataProviderL(): dataprovirdercount == 0 End");
hgs
parents:
diff changeset
  1521
        return KErrNotFound;   
hgs
parents:
diff changeset
  1522
        }
hgs
parents:
diff changeset
  1523
    HBufC8* object = aMIMEType.AllocLC();
hgs
parents:
diff changeset
  1524
    TPtr8 objectPtr = object->Des();
hgs
parents:
diff changeset
  1525
	objectPtr.LowerCase();
hgs
parents:
diff changeset
  1526
    RSyncMLDataProvider dataProvider;
hgs
parents:
diff changeset
  1527
        
hgs
parents:
diff changeset
  1528
    for ( TInt i= 0; i < dataProviderCount; i++ )
hgs
parents:
diff changeset
  1529
        {
hgs
parents:
diff changeset
  1530
        dataProvider.OpenL( iSyncSession, dataProviderArray[i] );
hgs
parents:
diff changeset
  1531
        CleanupClosePushL( dataProvider );   
hgs
parents:
diff changeset
  1532
        for ( TInt n = 0; n < dataProvider.MimeTypeCount(); n++ )
hgs
parents:
diff changeset
  1533
            {
hgs
parents:
diff changeset
  1534
            HBufC* mimeType = dataProvider.MimeType(n).AllocLC();
hgs
parents:
diff changeset
  1535
            if( objectPtr.CompareF( ConvertTo8LC( *mimeType ) ) == 0 ) //if MIME match
hgs
parents:
diff changeset
  1536
                {
hgs
parents:
diff changeset
  1537
               	_DBG_FILE("CNSmlDSSettingsAdapter::AddNewDataProviderL(): Mimetype found");
hgs
parents:
diff changeset
  1538
hgs
parents:
diff changeset
  1539
                aDataProviderId = dataProvider.Identifier();
hgs
parents:
diff changeset
  1540
                RSyncMLTask task;
hgs
parents:
diff changeset
  1541
                CleanupClosePushL( task ); 
hgs
parents:
diff changeset
  1542
                if( dataProvider.AllowsMultipleDataStores() )
hgs
parents:
diff changeset
  1543
                    {
hgs
parents:
diff changeset
  1544
                   	_DBG_FILE("CNSmlDSSettingsAdapter::AddNewDataProviderL(): AllowsMultipleDataStores");
hgs
parents:
diff changeset
  1545
                    CDesCArray* dataStoreName = new ( ELeave ) CDesCArrayFlat( 1 );
hgs
parents:
diff changeset
  1546
                    CleanupStack::PushL( dataStoreName );
hgs
parents:
diff changeset
  1547
                    dataProvider.GetDataStoreNamesL( *dataStoreName );
hgs
parents:
diff changeset
  1548
                    if ( dataStoreName->Count() == 0 )
hgs
parents:
diff changeset
  1549
                        {
hgs
parents:
diff changeset
  1550
                        // Get default if there are no databases
hgs
parents:
diff changeset
  1551
                        _DBG_FILE("CNSmlDSSettingsAdapter::AddNewDataProviderL():  no databases -> get default");
hgs
parents:
diff changeset
  1552
                        HBufC* localDataStoreName = dataProvider.DefaultDataStoreName().AllocLC();
hgs
parents:
diff changeset
  1553
                        task.CreateL( iDSProfile, aDataProviderId, *iRdbDataStore, 
hgs
parents:
diff changeset
  1554
                                    *localDataStoreName );
hgs
parents:
diff changeset
  1555
					    task.UpdateL();
hgs
parents:
diff changeset
  1556
						CleanupStack::PopAndDestroy();  //localDataStoreName
hgs
parents:
diff changeset
  1557
                        }
hgs
parents:
diff changeset
  1558
                    else
hgs
parents:
diff changeset
  1559
                        {
hgs
parents:
diff changeset
  1560
                        TPtrC16 ptrDataStoreName = dataStoreName->MdcaPoint(0);
hgs
parents:
diff changeset
  1561
                        task.CreateL( iDSProfile, aDataProviderId, *iRdbDataStore, 
hgs
parents:
diff changeset
  1562
		                            ptrDataStoreName );
hgs
parents:
diff changeset
  1563
		                task.UpdateL();
hgs
parents:
diff changeset
  1564
                        }
hgs
parents:
diff changeset
  1565
                    CleanupStack::PopAndDestroy();//dataStoreName
hgs
parents:
diff changeset
  1566
                    }
hgs
parents:
diff changeset
  1567
                else
hgs
parents:
diff changeset
  1568
                    {
hgs
parents:
diff changeset
  1569
                   	_DBG_FILE("CNSmlDSSettingsAdapter::AddNewDataProviderL():  MultipleDataStores not allowed");
hgs
parents:
diff changeset
  1570
                    HBufC* localDataStoreName = dataProvider.DefaultDataStoreName().AllocLC();
hgs
parents:
diff changeset
  1571
                    task.CreateL( iDSProfile, aDataProviderId, *iRdbDataStore, 
hgs
parents:
diff changeset
  1572
                                    *localDataStoreName );
hgs
parents:
diff changeset
  1573
                    task.UpdateL();
hgs
parents:
diff changeset
  1574
                    CleanupStack::PopAndDestroy();  //localDataStoreName
hgs
parents:
diff changeset
  1575
                    }
hgs
parents:
diff changeset
  1576
                iDSProfile.UpdateL();
hgs
parents:
diff changeset
  1577
                CleanupStack::PopAndDestroy( 6 ); //dataProviderArray, dataProvider, 
hgs
parents:
diff changeset
  1578
                                                //object, mimeType, ConvertTo8LC, 
hgs
parents:
diff changeset
  1579
                                                //task
hgs
parents:
diff changeset
  1580
                CloseDSProfile();
hgs
parents:
diff changeset
  1581
                _DBG_FILE("CNSmlDSSettingsAdapter::AddNewDataProviderL(): end KErrNone");
hgs
parents:
diff changeset
  1582
                return KErrNone;
hgs
parents:
diff changeset
  1583
                }
hgs
parents:
diff changeset
  1584
            CleanupStack::PopAndDestroy( 2 ); //mimeType, ConvertTo8LC    
hgs
parents:
diff changeset
  1585
            }
hgs
parents:
diff changeset
  1586
        CleanupStack::PopAndDestroy(  ); //dataProvider
hgs
parents:
diff changeset
  1587
        }
hgs
parents:
diff changeset
  1588
    
hgs
parents:
diff changeset
  1589
    CleanupStack::PopAndDestroy( 2 ); //dataProviderArray, object
hgs
parents:
diff changeset
  1590
    CloseDSProfile();
hgs
parents:
diff changeset
  1591
    _DBG_FILE("CNSmlDSSettingsAdapter::AddNewDataProviderL(): end KErrNotFound");
hgs
parents:
diff changeset
  1592
    return KErrNotFound;
hgs
parents:
diff changeset
  1593
	}
hgs
parents:
diff changeset
  1594
hgs
parents:
diff changeset
  1595
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1596
//  CNSmlDSSettingsAdapter::GetToNAPIDL
hgs
parents:
diff changeset
  1597
//	The function gets URI for given aObject.
hgs
parents:
diff changeset
  1598
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1599
TInt CNSmlDSSettingsAdapter::GetToNAPIDL( const TInt aLUID, CBufBase& aObject )
hgs
parents:
diff changeset
  1600
	{
hgs
parents:
diff changeset
  1601
	_DBG_FILE("CNSmlDSSettingsAdapter::GetToNAPIDL() : begin");
hgs
parents:
diff changeset
  1602
		
hgs
parents:
diff changeset
  1603
    TInt profIAPid = -1;
hgs
parents:
diff changeset
  1604
    TInt apIdResponse = GetProfileIAPIdL(aLUID, profIAPid);
hgs
parents:
diff changeset
  1605
    if( profIAPid < 0 || apIdResponse != KErrNone )
hgs
parents:
diff changeset
  1606
        {
hgs
parents:
diff changeset
  1607
        return KErrNotFound;
hgs
parents:
diff changeset
  1608
        }
hgs
parents:
diff changeset
  1609
    CNSmlDMIAPMatcher* apmatch = CNSmlDMIAPMatcher::NewL( iCallBack );
hgs
parents:
diff changeset
  1610
    CleanupStack::PushL( apmatch );
hgs
parents:
diff changeset
  1611
    HBufC8* uri8 = apmatch->URIFromIAPIdL( profIAPid );
hgs
parents:
diff changeset
  1612
    if( uri8 )
hgs
parents:
diff changeset
  1613
        {
hgs
parents:
diff changeset
  1614
        CleanupStack::PushL( uri8 );
hgs
parents:
diff changeset
  1615
        aObject.InsertL(aObject.Size(),uri8->Des());
hgs
parents:
diff changeset
  1616
        CleanupStack::PopAndDestroy(); // uri8
hgs
parents:
diff changeset
  1617
        }
hgs
parents:
diff changeset
  1618
    else
hgs
parents:
diff changeset
  1619
        {
hgs
parents:
diff changeset
  1620
        CleanupStack::PopAndDestroy(); // apMatch
hgs
parents:
diff changeset
  1621
        return KErrGeneral;    
hgs
parents:
diff changeset
  1622
        }
hgs
parents:
diff changeset
  1623
    CleanupStack::PopAndDestroy(); // apMatch
hgs
parents:
diff changeset
  1624
	_DBG_FILE("CNSmlDSSettingsAdapter::GetToNAPIDL() : end");
hgs
parents:
diff changeset
  1625
	return KErrNone;
hgs
parents:
diff changeset
  1626
	}
hgs
parents:
diff changeset
  1627
hgs
parents:
diff changeset
  1628
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1629
//  CNSmlDSSettingsAdapter::SetToNAPIDL
hgs
parents:
diff changeset
  1630
//	The function sets NAPId value according given URI.
hgs
parents:
diff changeset
  1631
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1632
TInt CNSmlDSSettingsAdapter::SetToNAPIDL( const TInt aLUID, const TDesC8& aObject )
hgs
parents:
diff changeset
  1633
	{
hgs
parents:
diff changeset
  1634
	_DBG_FILE("CNSmlDSSettingsAdapter::SetToNAPIDL() : begin");
hgs
parents:
diff changeset
  1635
    CNSmlDMIAPMatcher* apmatch = CNSmlDMIAPMatcher::NewL( iCallBack );
hgs
parents:
diff changeset
  1636
    CleanupStack::PushL( apmatch );
hgs
parents:
diff changeset
  1637
    TInt lIAPid = apmatch->IAPIdFromURIL( aObject );
hgs
parents:
diff changeset
  1638
    TInt apIdResponse = SetProfileIAPIdL( aLUID, lIAPid );
hgs
parents:
diff changeset
  1639
	CleanupStack::PopAndDestroy(); // apmatch
hgs
parents:
diff changeset
  1640
    _DBG_FILE("CNSmlDSSettingsAdapter::SetToNAPIDL() : end");
hgs
parents:
diff changeset
  1641
	return apIdResponse;
hgs
parents:
diff changeset
  1642
	}
hgs
parents:
diff changeset
  1643
hgs
parents:
diff changeset
  1644
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1645
//  CNSmlDSSettingsAdapter::AddNodeBufferL
hgs
parents:
diff changeset
  1646
//	The function sets the new node to buffer.	
hgs
parents:
diff changeset
  1647
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1648
void CNSmlDSSettingsAdapter::AddNodeBufferL( const TDesC8& aURI, 
hgs
parents:
diff changeset
  1649
                                                const TDesC8& aParentLUID,
hgs
parents:
diff changeset
  1650
                                                const TInt aStatusRef )
hgs
parents:
diff changeset
  1651
	{
hgs
parents:
diff changeset
  1652
	TNSmlDSBufferElement newNode;
hgs
parents:
diff changeset
  1653
	newNode.iMappingName = aURI.AllocLC();
hgs
parents:
diff changeset
  1654
	newNode.iName = LastURISeg(aURI).AllocLC(); 
hgs
parents:
diff changeset
  1655
	newNode.iNodeBuf = new (ELeave) CArrayFixFlat <TNSmlDSAddElement> ( KNSmlDSGranularity );
hgs
parents:
diff changeset
  1656
	newNode.iExecuted = EFalse;
hgs
parents:
diff changeset
  1657
	newNode.iLuid = GetIntObject( aParentLUID );
hgs
parents:
diff changeset
  1658
	iBuffer->AppendL( newNode );
hgs
parents:
diff changeset
  1659
	CleanupStack::Pop( 2 ); //newNode.iMappingName,newNode.iName
hgs
parents:
diff changeset
  1660
hgs
parents:
diff changeset
  1661
	TNSmlDSAddElement newCommand;
hgs
parents:
diff changeset
  1662
hgs
parents:
diff changeset
  1663
	newCommand.iUri = aURI.AllocLC();
hgs
parents:
diff changeset
  1664
	newCommand.iData = 0;
hgs
parents:
diff changeset
  1665
	newCommand.iStatusRef = aStatusRef;
hgs
parents:
diff changeset
  1666
	newCommand.iLeaf = EFalse;
hgs
parents:
diff changeset
  1667
	newCommand.iDone = EFalse;
hgs
parents:
diff changeset
  1668
hgs
parents:
diff changeset
  1669
	TInt index = iBuffer->Count() - 1;
hgs
parents:
diff changeset
  1670
	iBuffer->At(index).iNodeBuf->AppendL( newCommand );
hgs
parents:
diff changeset
  1671
	CleanupStack::Pop(); //newCommand.iUri
hgs
parents:
diff changeset
  1672
	}
hgs
parents:
diff changeset
  1673
hgs
parents:
diff changeset
  1674
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1675
//  CNSmlDSSettingsAdapter::AddLeafBufferL
hgs
parents:
diff changeset
  1676
//  The function sets the new leaf to buffer.
hgs
parents:
diff changeset
  1677
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1678
void CNSmlDSSettingsAdapter::AddLeafBufferL( const TDesC8& aURI, 
hgs
parents:
diff changeset
  1679
                                                const TDesC8& aParentLUID, 
hgs
parents:
diff changeset
  1680
                                                const TDesC8& aObject, 
hgs
parents:
diff changeset
  1681
                                                const TInt aStatusRef )
hgs
parents:
diff changeset
  1682
	{
hgs
parents:
diff changeset
  1683
    TInt index = GetBufferIndex( aURI );
hgs
parents:
diff changeset
  1684
    if(index<0)
hgs
parents:
diff changeset
  1685
		{
hgs
parents:
diff changeset
  1686
		DBG_ARGS(_S16("DS-adapter:AddLeafBufferL URI - <%S> <%S> NOTFOUND"), &aURI, &aParentLUID );
hgs
parents:
diff changeset
  1687
		iCallBack->SetStatusL(aStatusRef,  CSmlDmAdapter::ENotFound);
hgs
parents:
diff changeset
  1688
		return;
hgs
parents:
diff changeset
  1689
        }
hgs
parents:
diff changeset
  1690
hgs
parents:
diff changeset
  1691
	TNSmlDSAddElement newCommand;
hgs
parents:
diff changeset
  1692
	newCommand.iUri = aURI.AllocLC();
hgs
parents:
diff changeset
  1693
	newCommand.iData = aObject.AllocLC();
hgs
parents:
diff changeset
  1694
	newCommand.iStatusRef = aStatusRef;
hgs
parents:
diff changeset
  1695
	newCommand.iLeaf = ETrue;
hgs
parents:
diff changeset
  1696
	newCommand.iDone = EFalse;
hgs
parents:
diff changeset
  1697
    iBuffer->At(index).iNodeBuf->AppendL( newCommand );
hgs
parents:
diff changeset
  1698
	CleanupStack::Pop( 2 ); //newCommand.iUri, newCommand.iData
hgs
parents:
diff changeset
  1699
    }
hgs
parents:
diff changeset
  1700
hgs
parents:
diff changeset
  1701
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1702
//  CNSmlDSSettingsAdapter::LastURISeg
hgs
parents:
diff changeset
  1703
//  The function returns only the last uri segment.
hgs
parents:
diff changeset
  1704
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1705
TPtrC8 CNSmlDSSettingsAdapter::LastURISeg(const TDesC8& aURI)
hgs
parents:
diff changeset
  1706
	{
hgs
parents:
diff changeset
  1707
	TInt i;
hgs
parents:
diff changeset
  1708
	for( i=aURI.Length() - 1; i >= 0; i-- )
hgs
parents:
diff changeset
  1709
		{
hgs
parents:
diff changeset
  1710
		if( aURI[i] == KNSmlDMUriSeparator )
hgs
parents:
diff changeset
  1711
			{
hgs
parents:
diff changeset
  1712
			break;
hgs
parents:
diff changeset
  1713
			}
hgs
parents:
diff changeset
  1714
		}
hgs
parents:
diff changeset
  1715
	if( i == 0 )
hgs
parents:
diff changeset
  1716
		{
hgs
parents:
diff changeset
  1717
		return aURI;
hgs
parents:
diff changeset
  1718
		}
hgs
parents:
diff changeset
  1719
	else
hgs
parents:
diff changeset
  1720
		{
hgs
parents:
diff changeset
  1721
		return aURI.Mid( i + 1 );
hgs
parents:
diff changeset
  1722
		}
hgs
parents:
diff changeset
  1723
	}
hgs
parents:
diff changeset
  1724
hgs
parents:
diff changeset
  1725
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1726
//  CNSmlDSSettingsAdapter::RemoveLastURISeg
hgs
parents:
diff changeset
  1727
//  The function removes the last URI segment.
hgs
parents:
diff changeset
  1728
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1729
TPtrC8 CNSmlDSSettingsAdapter::RemoveLastURISeg( const TDesC8& aURI )
hgs
parents:
diff changeset
  1730
	{
hgs
parents:
diff changeset
  1731
	TInt i;
hgs
parents:
diff changeset
  1732
	for( i = aURI.Length() - 1; i >= 0; i-- )
hgs
parents:
diff changeset
  1733
		{
hgs
parents:
diff changeset
  1734
		if( aURI[i] == KNSmlDMUriSeparator )
hgs
parents:
diff changeset
  1735
			{
hgs
parents:
diff changeset
  1736
			break;
hgs
parents:
diff changeset
  1737
			}
hgs
parents:
diff changeset
  1738
		}
hgs
parents:
diff changeset
  1739
	if( i == 0 )
hgs
parents:
diff changeset
  1740
		{
hgs
parents:
diff changeset
  1741
		return aURI;
hgs
parents:
diff changeset
  1742
		}
hgs
parents:
diff changeset
  1743
	else
hgs
parents:
diff changeset
  1744
		{
hgs
parents:
diff changeset
  1745
		return aURI.Left( i );
hgs
parents:
diff changeset
  1746
		}
hgs
parents:
diff changeset
  1747
	}
hgs
parents:
diff changeset
  1748
hgs
parents:
diff changeset
  1749
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1750
//  CNSmlDSSettingsAdapter::ExecuteBufferL
hgs
parents:
diff changeset
  1751
//  Executes commands which have not been executed.
hgs
parents:
diff changeset
  1752
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1753
void CNSmlDSSettingsAdapter::ExecuteBufferL( const TDesC8& aURI )
hgs
parents:
diff changeset
  1754
	{
hgs
parents:
diff changeset
  1755
	TInt index = GetBufferIndex( aURI );
hgs
parents:
diff changeset
  1756
	if( index < 0 )
hgs
parents:
diff changeset
  1757
		{
hgs
parents:
diff changeset
  1758
		return;
hgs
parents:
diff changeset
  1759
		}
hgs
parents:
diff changeset
  1760
	//
hgs
parents:
diff changeset
  1761
	// Execute all commands for Profiles new ContentType
hgs
parents:
diff changeset
  1762
	//
hgs
parents:
diff changeset
  1763
    TBool rdburinotfound = ETrue;
hgs
parents:
diff changeset
  1764
    TInt newcmd = 1;
hgs
parents:
diff changeset
  1765
    
hgs
parents:
diff changeset
  1766
    TNSmlDSBufferElement& bufElem = iBuffer->At(index); 
hgs
parents:
diff changeset
  1767
    
hgs
parents:
diff changeset
  1768
	for( TInt cmd = bufElem.iNodeBuf->Count() - 1; cmd >= 0; cmd-- )
hgs
parents:
diff changeset
  1769
		{
hgs
parents:
diff changeset
  1770
		TBuf8<16> addLUID;
hgs
parents:
diff changeset
  1771
		
hgs
parents:
diff changeset
  1772
		TNSmlDSAddElement& addElem = bufElem.iNodeBuf->At(cmd); 
hgs
parents:
diff changeset
  1773
			
hgs
parents:
diff changeset
  1774
		if( cmd == 0 )
hgs
parents:
diff changeset
  1775
			{
hgs
parents:
diff changeset
  1776
			if( bufElem.iLuid > 0 )
hgs
parents:
diff changeset
  1777
			    {
hgs
parents:
diff changeset
  1778
			    addLUID.Format( KFormat, -1 ); // Set status for addnode command
hgs
parents:
diff changeset
  1779
			    }
hgs
parents:
diff changeset
  1780
			else
hgs
parents:
diff changeset
  1781
                {
hgs
parents:
diff changeset
  1782
                addLUID.Format( KFormat, 0 );
hgs
parents:
diff changeset
  1783
                }
hgs
parents:
diff changeset
  1784
            iBufferExecution = ETrue;
hgs
parents:
diff changeset
  1785
            AddNodeObjectL( addElem.iUri->Des(), 
hgs
parents:
diff changeset
  1786
                            addLUID, addElem.iStatusRef );
hgs
parents:
diff changeset
  1787
hgs
parents:
diff changeset
  1788
			bufElem.iExecuted = ETrue;
hgs
parents:
diff changeset
  1789
            iBufferExecution = EFalse;
hgs
parents:
diff changeset
  1790
            }
hgs
parents:
diff changeset
  1791
		else 
hgs
parents:
diff changeset
  1792
			{
hgs
parents:
diff changeset
  1793
            //First RDBURI leaf must be stored
hgs
parents:
diff changeset
  1794
            while( rdburinotfound && newcmd < iBuffer->At(index).iNodeBuf->Count() )
hgs
parents:
diff changeset
  1795
    			{
hgs
parents:
diff changeset
  1796
	    		if( bufElem.iNodeBuf->At(newcmd).iUri->Des().Find( KNSmlDdfRDBURI ) >= 0 )
hgs
parents:
diff changeset
  1797
				    {
hgs
parents:
diff changeset
  1798
                    SetRDBDataStore( bufElem.iNodeBuf->At(newcmd).iData->Des() );
hgs
parents:
diff changeset
  1799
				    rdburinotfound = EFalse;
hgs
parents:
diff changeset
  1800
				    break;
hgs
parents:
diff changeset
  1801
				    }
hgs
parents:
diff changeset
  1802
			    newcmd++;
hgs
parents:
diff changeset
  1803
			    }//while
hgs
parents:
diff changeset
  1804
			addLUID.Format( KFormat, bufElem.iLuid );
hgs
parents:
diff changeset
  1805
			iBufferExecution = ETrue;
hgs
parents:
diff changeset
  1806
            UpdateLeafObjectL( addElem.iUri->Des(),
hgs
parents:
diff changeset
  1807
				addLUID,
hgs
parents:
diff changeset
  1808
				addElem.iData->Des(),
hgs
parents:
diff changeset
  1809
				KNullDesC8,
hgs
parents:
diff changeset
  1810
				addElem.iStatusRef );
hgs
parents:
diff changeset
  1811
            iBufferExecution = EFalse;
hgs
parents:
diff changeset
  1812
			}
hgs
parents:
diff changeset
  1813
hgs
parents:
diff changeset
  1814
		addElem.iDone = ETrue;
hgs
parents:
diff changeset
  1815
hgs
parents:
diff changeset
  1816
		delete addElem.iUri;
hgs
parents:
diff changeset
  1817
		addElem.iUri=NULL;
hgs
parents:
diff changeset
  1818
		if( addElem.iData )
hgs
parents:
diff changeset
  1819
			{
hgs
parents:
diff changeset
  1820
			delete addElem.iData;
hgs
parents:
diff changeset
  1821
			addElem.iData=NULL;
hgs
parents:
diff changeset
  1822
			}
hgs
parents:
diff changeset
  1823
		bufElem.iNodeBuf->Delete(cmd);
hgs
parents:
diff changeset
  1824
		}
hgs
parents:
diff changeset
  1825
//
hgs
parents:
diff changeset
  1826
//	Remove data from handled ContentType-commands
hgs
parents:
diff changeset
  1827
//
hgs
parents:
diff changeset
  1828
	bufElem.iNodeBuf->Reset();
hgs
parents:
diff changeset
  1829
	delete bufElem.iNodeBuf;
hgs
parents:
diff changeset
  1830
hgs
parents:
diff changeset
  1831
	if( bufElem.iMappingName )
hgs
parents:
diff changeset
  1832
		{
hgs
parents:
diff changeset
  1833
		delete bufElem.iMappingName;
hgs
parents:
diff changeset
  1834
		bufElem.iMappingName=NULL;
hgs
parents:
diff changeset
  1835
		}
hgs
parents:
diff changeset
  1836
hgs
parents:
diff changeset
  1837
	if( bufElem.iName )
hgs
parents:
diff changeset
  1838
		{
hgs
parents:
diff changeset
  1839
		delete bufElem.iName;
hgs
parents:
diff changeset
  1840
		bufElem.iName=NULL;
hgs
parents:
diff changeset
  1841
		}
hgs
parents:
diff changeset
  1842
hgs
parents:
diff changeset
  1843
	iBuffer->Delete( index ); 
hgs
parents:
diff changeset
  1844
	iBuffer->Compress();
hgs
parents:
diff changeset
  1845
	}
hgs
parents:
diff changeset
  1846
hgs
parents:
diff changeset
  1847
hgs
parents:
diff changeset
  1848
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1849
//  CNSmlDSSettingsAdapter::GetProfileIdFromURIL
hgs
parents:
diff changeset
  1850
//	The function gets the Profile Id for given aURI.
hgs
parents:
diff changeset
  1851
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1852
TInt CNSmlDSSettingsAdapter::GetProfileIdFromURIL( const TDesC8& aURI )
hgs
parents:
diff changeset
  1853
	{
hgs
parents:
diff changeset
  1854
	HBufC8* apURI = HBufC8::NewLC( aURI.Size() );
hgs
parents:
diff changeset
  1855
//
hgs
parents:
diff changeset
  1856
//  Second slash after SyncML/DSAcc/XXXX/
hgs
parents:
diff changeset
  1857
//
hgs
parents:
diff changeset
  1858
	TInt i = 0;
hgs
parents:
diff changeset
  1859
	
hgs
parents:
diff changeset
  1860
	for( i = aURI.Find( KDSAcc1 ) + 13; i < aURI.Length(); i++ )
hgs
parents:
diff changeset
  1861
		{
hgs
parents:
diff changeset
  1862
		if( aURI[i] == KNSmlDMUriSeparator )
hgs
parents:
diff changeset
  1863
			{
hgs
parents:
diff changeset
  1864
			break;
hgs
parents:
diff changeset
  1865
			}
hgs
parents:
diff changeset
  1866
		}
hgs
parents:
diff changeset
  1867
	if( i > 0 )
hgs
parents:
diff changeset
  1868
		{
hgs
parents:
diff changeset
  1869
		apURI->Des().Format( aURI.Left(i) );
hgs
parents:
diff changeset
  1870
		}
hgs
parents:
diff changeset
  1871
//
hgs
parents:
diff changeset
  1872
//	Same profile as previous
hgs
parents:
diff changeset
  1873
//
hgs
parents:
diff changeset
  1874
	if( iPrevURI->Match( *apURI ) != KErrNotFound )
hgs
parents:
diff changeset
  1875
		{
hgs
parents:
diff changeset
  1876
		CleanupStack::PopAndDestroy(); // apURI
hgs
parents:
diff changeset
  1877
		return iPrevLUID;
hgs
parents:
diff changeset
  1878
		}
hgs
parents:
diff changeset
  1879
//
hgs
parents:
diff changeset
  1880
//	Fetch Profile-id for URI
hgs
parents:
diff changeset
  1881
//
hgs
parents:
diff changeset
  1882
hgs
parents:
diff changeset
  1883
    HBufC8* apLUID = iCallBack->GetLuidAllocL( *apURI );
hgs
parents:
diff changeset
  1884
	CleanupStack::PushL( apLUID );
hgs
parents:
diff changeset
  1885
    if( apLUID->Length() == 0 )
hgs
parents:
diff changeset
  1886
        {
hgs
parents:
diff changeset
  1887
        CleanupStack::PopAndDestroy( 2 );//apURI, apLUID
hgs
parents:
diff changeset
  1888
        return KErrGeneral;
hgs
parents:
diff changeset
  1889
        }
hgs
parents:
diff changeset
  1890
	TInt resLUID = GetIntObject( *apLUID );
hgs
parents:
diff changeset
  1891
	iPrevURI->Des().Format( *apURI );
hgs
parents:
diff changeset
  1892
	iPrevLUID = resLUID;
hgs
parents:
diff changeset
  1893
	CleanupStack::PopAndDestroy(2); //apURI,apLUID
hgs
parents:
diff changeset
  1894
hgs
parents:
diff changeset
  1895
	return resLUID;
hgs
parents:
diff changeset
  1896
	}
hgs
parents:
diff changeset
  1897
hgs
parents:
diff changeset
  1898
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1899
//  CNSmlDSSettingsAdapter::GetContentTypeL
hgs
parents:
diff changeset
  1900
//  Get CTType (MimeType) for given adapter.
hgs
parents:
diff changeset
  1901
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1902
TInt CNSmlDSSettingsAdapter::GetContentTypeL( const TInt aDataProviderId, 
hgs
parents:
diff changeset
  1903
                                              const TInt aProfileLUID, 
hgs
parents:
diff changeset
  1904
                                              CBufBase*& aObject )
hgs
parents:
diff changeset
  1905
	{
hgs
parents:
diff changeset
  1906
    _DBG_FILE("CNSmlDSSettingsAdapter::GetContentTypeL(): begin");
hgs
parents:
diff changeset
  1907
    TInt retVal = OpenSyncSessionAndDSProfileL( aProfileLUID, ESmlOpenRead );
hgs
parents:
diff changeset
  1908
    if( retVal != KErrNone )
hgs
parents:
diff changeset
  1909
		{
hgs
parents:
diff changeset
  1910
        CloseDSProfile();
hgs
parents:
diff changeset
  1911
		return retVal;
hgs
parents:
diff changeset
  1912
		}
hgs
parents:
diff changeset
  1913
hgs
parents:
diff changeset
  1914
    RArray<TSmlDataProviderId> dataProviderIdArray;
hgs
parents:
diff changeset
  1915
    CleanupClosePushL( dataProviderIdArray );
hgs
parents:
diff changeset
  1916
    iSyncSession.ListDataProvidersL( dataProviderIdArray );
hgs
parents:
diff changeset
  1917
    
hgs
parents:
diff changeset
  1918
    TInt dpIndex = dataProviderIdArray.Find( aDataProviderId );
hgs
parents:
diff changeset
  1919
    if( dpIndex == KErrNotFound )
hgs
parents:
diff changeset
  1920
        {
hgs
parents:
diff changeset
  1921
        CloseDSProfile();
hgs
parents:
diff changeset
  1922
        CleanupStack::PopAndDestroy( 1 ); // dataProviderIdArray
hgs
parents:
diff changeset
  1923
        return KErrNotFound;
hgs
parents:
diff changeset
  1924
        }
hgs
parents:
diff changeset
  1925
    RSyncMLDataProvider dataProvider;
hgs
parents:
diff changeset
  1926
    CleanupClosePushL( dataProvider );
hgs
parents:
diff changeset
  1927
    dataProvider.OpenL( iSyncSession, dataProviderIdArray[dpIndex] );
hgs
parents:
diff changeset
  1928
    for( TInt i = 0; i < dataProvider.MimeTypeCount(); i++ )
hgs
parents:
diff changeset
  1929
        {
hgs
parents:
diff changeset
  1930
        //first mime type will be returned now
hgs
parents:
diff changeset
  1931
        HBufC* mimeType = dataProvider.MimeType(i).AllocLC();
hgs
parents:
diff changeset
  1932
        aObject->InsertL( aObject->Size(), ConvertTo8LC( *mimeType ) );  
hgs
parents:
diff changeset
  1933
        CleanupStack::PopAndDestroy( 2 ); //mimeType, ConvertTo8LC
hgs
parents:
diff changeset
  1934
        break;
hgs
parents:
diff changeset
  1935
        }
hgs
parents:
diff changeset
  1936
    CleanupStack::PopAndDestroy( 2 ); // dataProviderIdArray, dataProvider
hgs
parents:
diff changeset
  1937
    CloseDSProfile();
hgs
parents:
diff changeset
  1938
    _DBG_FILE("CNSmlDSSettingsAdapter::GetContentTypeL(): end");
hgs
parents:
diff changeset
  1939
    return KErrNone;
hgs
parents:
diff changeset
  1940
	}
hgs
parents:
diff changeset
  1941
hgs
parents:
diff changeset
  1942
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1943
//  CNSmlDSSettingsAdapter::GetBufferIndex
hgs
parents:
diff changeset
  1944
//  The function resolves buffer index for given URI.
hgs
parents:
diff changeset
  1945
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1946
TInt CNSmlDSSettingsAdapter::GetBufferIndex( const TDesC8& aURI )
hgs
parents:
diff changeset
  1947
	{
hgs
parents:
diff changeset
  1948
	TInt index = -1;
hgs
parents:
diff changeset
  1949
	for( TInt i = 0; i<iBuffer->Count(); i++ )
hgs
parents:
diff changeset
  1950
		{
hgs
parents:
diff changeset
  1951
		TPtrC8 parentUri = RemoveLastURISeg( aURI );
hgs
parents:
diff changeset
  1952
		if( iBuffer->At(i).iMappingName->Compare( parentUri ) == 0 )
hgs
parents:
diff changeset
  1953
			{
hgs
parents:
diff changeset
  1954
			index = i;
hgs
parents:
diff changeset
  1955
			break;
hgs
parents:
diff changeset
  1956
			}
hgs
parents:
diff changeset
  1957
		}
hgs
parents:
diff changeset
  1958
	return index;
hgs
parents:
diff changeset
  1959
	}
hgs
parents:
diff changeset
  1960
hgs
parents:
diff changeset
  1961
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1962
//  CNSmlDSSettingsAdapter::SetBufferLUID
hgs
parents:
diff changeset
  1963
//  The function sets the LUID to buffer for given URI.
hgs
parents:
diff changeset
  1964
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1965
TInt CNSmlDSSettingsAdapter::SetBufferLUID( const TDesC8& aURI, const TInt aLUID )
hgs
parents:
diff changeset
  1966
	{
hgs
parents:
diff changeset
  1967
	TInt index = GetBufferIndex( aURI );
hgs
parents:
diff changeset
  1968
	if( index < 0 )
hgs
parents:
diff changeset
  1969
		{
hgs
parents:
diff changeset
  1970
		return 0;
hgs
parents:
diff changeset
  1971
		}
hgs
parents:
diff changeset
  1972
	iBuffer->At(index).iLuid = aLUID;
hgs
parents:
diff changeset
  1973
	return 1;
hgs
parents:
diff changeset
  1974
	}
hgs
parents:
diff changeset
  1975
hgs
parents:
diff changeset
  1976
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1977
//  CNSmlDSSettingsAdapter::ParseUri
hgs
parents:
diff changeset
  1978
//  Resolves portnbr (separated with ':') as integer from URI.
hgs
parents:
diff changeset
  1979
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1980
TInt CNSmlDSSettingsAdapter::ParseUri( const TDesC8& aRealURI, TInt& aPort )
hgs
parents:
diff changeset
  1981
	{
hgs
parents:
diff changeset
  1982
    TInt offset=0;
hgs
parents:
diff changeset
  1983
    //http:
hgs
parents:
diff changeset
  1984
	if( aRealURI.Find( KNSmlDSSettingsHTTP )==0 )//http:
hgs
parents:
diff changeset
  1985
		{
hgs
parents:
diff changeset
  1986
		offset = KNSmlDSSettingsHTTP().Length();
hgs
parents:
diff changeset
  1987
		}
hgs
parents:
diff changeset
  1988
	else if( aRealURI.Find( KNSmlDSSettingsHTTPS )==0 )//https:
hgs
parents:
diff changeset
  1989
		{
hgs
parents:
diff changeset
  1990
		offset = KNSmlDSSettingsHTTPS().Length();
hgs
parents:
diff changeset
  1991
		}
hgs
parents:
diff changeset
  1992
hgs
parents:
diff changeset
  1993
	TBool portFound=EFalse;
hgs
parents:
diff changeset
  1994
	TBool portExtracted = EFalse;
hgs
parents:
diff changeset
  1995
    ////123.234.345.456:80/syncml
hgs
parents:
diff changeset
  1996
	for( TInt i = offset; i < aRealURI.Length() && !portExtracted; i++ )
hgs
parents:
diff changeset
  1997
		{
hgs
parents:
diff changeset
  1998
		if( aRealURI[i] == KNSmlDMColon )// ':'
hgs
parents:
diff changeset
  1999
			{
hgs
parents:
diff changeset
  2000
			portFound = ETrue;
hgs
parents:
diff changeset
  2001
			offset=i;
hgs
parents:
diff changeset
  2002
			}
hgs
parents:
diff changeset
  2003
		if( portFound && aRealURI[i] == KNSmlDMUriSeparator )// '/'
hgs
parents:
diff changeset
  2004
			{
hgs
parents:
diff changeset
  2005
			aPort = GetIntObject( aRealURI.Mid( (offset + 1), (i - offset-1) ) );
hgs
parents:
diff changeset
  2006
			portExtracted = ETrue;
hgs
parents:
diff changeset
  2007
			}
hgs
parents:
diff changeset
  2008
		else if ( portFound && i == aRealURI.Length() - 1 ) // last char
hgs
parents:
diff changeset
  2009
		    {
hgs
parents:
diff changeset
  2010
		    // port is from offset to the end
hgs
parents:
diff changeset
  2011
		    aPort = GetIntObject( aRealURI.Right( aRealURI.Length() - offset - 1 ) );
hgs
parents:
diff changeset
  2012
			portExtracted = ETrue;
hgs
parents:
diff changeset
  2013
		    }
hgs
parents:
diff changeset
  2014
		}
hgs
parents:
diff changeset
  2015
	
hgs
parents:
diff changeset
  2016
	if( aPort != 0 )
hgs
parents:
diff changeset
  2017
		{
hgs
parents:
diff changeset
  2018
		return KErrNone;
hgs
parents:
diff changeset
  2019
		}
hgs
parents:
diff changeset
  2020
	else
hgs
parents:
diff changeset
  2021
		{
hgs
parents:
diff changeset
  2022
		return KErrNotFound;
hgs
parents:
diff changeset
  2023
		}
hgs
parents:
diff changeset
  2024
	}
hgs
parents:
diff changeset
  2025
hgs
parents:
diff changeset
  2026
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2027
//  CNSmlDSSettingsAdapter::FindProfileIdL
hgs
parents:
diff changeset
  2028
//  The function checkd if profile can be found.
hgs
parents:
diff changeset
  2029
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2030
TBool CNSmlDSSettingsAdapter::FindProfileIdL( const TInt aIntLUID )
hgs
parents:
diff changeset
  2031
	{
hgs
parents:
diff changeset
  2032
	if( iSyncSessionOpen == EFalse )
hgs
parents:
diff changeset
  2033
	    {
hgs
parents:
diff changeset
  2034
        iSyncSession.OpenL();
hgs
parents:
diff changeset
  2035
        iSyncSessionOpen = ETrue;
hgs
parents:
diff changeset
  2036
	    }
hgs
parents:
diff changeset
  2037
    RArray <TSmlProfileId> profileList;
hgs
parents:
diff changeset
  2038
    CleanupClosePushL( profileList );
hgs
parents:
diff changeset
  2039
	TSmlUsageType usageType = ESmlDataSync;		
hgs
parents:
diff changeset
  2040
	iSyncSession.ListProfilesL( profileList, usageType );
hgs
parents:
diff changeset
  2041
	if( profileList.Count() == 0 )
hgs
parents:
diff changeset
  2042
	    {
hgs
parents:
diff changeset
  2043
        CleanupStack::PopAndDestroy(); //profileList
hgs
parents:
diff changeset
  2044
        return EFalse;
hgs
parents:
diff changeset
  2045
	    }
hgs
parents:
diff changeset
  2046
    TInt item = profileList.Find( aIntLUID );
hgs
parents:
diff changeset
  2047
    CleanupStack::PopAndDestroy(); //profileList
hgs
parents:
diff changeset
  2048
    if( item != KErrNotFound )
hgs
parents:
diff changeset
  2049
		{
hgs
parents:
diff changeset
  2050
		return ETrue;
hgs
parents:
diff changeset
  2051
		}
hgs
parents:
diff changeset
  2052
	return EFalse;
hgs
parents:
diff changeset
  2053
	}
hgs
parents:
diff changeset
  2054
hgs
parents:
diff changeset
  2055
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2056
//  CNSmlDSSettingsAdapter::GetProfileIdentifierL
hgs
parents:
diff changeset
  2057
//  The function gets profile Id from Client API.
hgs
parents:
diff changeset
  2058
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2059
TInt CNSmlDSSettingsAdapter::GetProfileIdentifierL( const TInt aIntLUID, 
hgs
parents:
diff changeset
  2060
                                                    TInt& aProfileID )
hgs
parents:
diff changeset
  2061
	{
hgs
parents:
diff changeset
  2062
	TInt retVal = OpenSyncSessionAndDSProfileL( aIntLUID, ESmlOpenRead );
hgs
parents:
diff changeset
  2063
    if( retVal != KErrNone )
hgs
parents:
diff changeset
  2064
		{
hgs
parents:
diff changeset
  2065
        CloseDSProfile();
hgs
parents:
diff changeset
  2066
		return retVal;	
hgs
parents:
diff changeset
  2067
		}
hgs
parents:
diff changeset
  2068
	aProfileID = iDSProfile.Identifier();
hgs
parents:
diff changeset
  2069
	CloseDSProfile();
hgs
parents:
diff changeset
  2070
    return retVal;
hgs
parents:
diff changeset
  2071
	}
hgs
parents:
diff changeset
  2072
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2073
//  CNSmlDSSettingsAdapter::GetDSFieldDataL
hgs
parents:
diff changeset
  2074
//  The function checks what leaf to be handled and fetches the data for a leaf.
hgs
parents:
diff changeset
  2075
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2076
TInt CNSmlDSSettingsAdapter::GetDSFieldDataL( const TInt aIntLUID, 
hgs
parents:
diff changeset
  2077
                                                CBufBase*& aObject )
hgs
parents:
diff changeset
  2078
	{
hgs
parents:
diff changeset
  2079
	_DBG_FILE("CNSmlDSSettingsAdapter::GetDSFieldData(): begin");
hgs
parents:
diff changeset
  2080
    
hgs
parents:
diff changeset
  2081
	if ( iField->Compare( KNSmlDdfAddrType ) == 0 )
hgs
parents:
diff changeset
  2082
		{
hgs
parents:
diff changeset
  2083
        TSmlTransportId connType = -1;
hgs
parents:
diff changeset
  2084
		connType = GetProfileConnectiontypeL( aIntLUID );
hgs
parents:
diff changeset
  2085
        if ( connType <= 0 )
hgs
parents:
diff changeset
  2086
			{
hgs
parents:
diff changeset
  2087
            return KErrNotFound;
hgs
parents:
diff changeset
  2088
			}
hgs
parents:
diff changeset
  2089
		aObject->InsertL( aObject->Size(), SetIntObjectLC( connType ) );
hgs
parents:
diff changeset
  2090
		CleanupStack::PopAndDestroy();//SetIntObjectLC
hgs
parents:
diff changeset
  2091
        return KErrNone;
hgs
parents:
diff changeset
  2092
		}
hgs
parents:
diff changeset
  2093
	else if ( iField->Compare( KNSmlDdfAddr ) == 0 ) //Server URL
hgs
parents:
diff changeset
  2094
		{
hgs
parents:
diff changeset
  2095
		TInt retValue1 = GetProfileServerURLL( aIntLUID, aObject );
hgs
parents:
diff changeset
  2096
		TInt port(0);
hgs
parents:
diff changeset
  2097
		if(ParseUri(aObject->Ptr(0),port)==KErrNone)
hgs
parents:
diff changeset
  2098
		    {
hgs
parents:
diff changeset
  2099
		    HBufC8* addr = aObject->Ptr(0).AllocLC();
hgs
parents:
diff changeset
  2100
		    aObject->Reset();
hgs
parents:
diff changeset
  2101
		    TInt portStart = addr->LocateReverse(KNSmlDMColon);		    
hgs
parents:
diff changeset
  2102
		    aObject->InsertL(aObject->Size(),addr->Left(portStart));
hgs
parents:
diff changeset
  2103
		    
hgs
parents:
diff changeset
  2104
		    TInt portLen=addr->Mid(portStart).Locate(KNSmlDMUriSeparator);
hgs
parents:
diff changeset
  2105
		    if(portLen!=KErrNotFound)
hgs
parents:
diff changeset
  2106
		        {
hgs
parents:
diff changeset
  2107
		        aObject->InsertL(aObject->Size(),addr->Mid(portStart+portLen));
hgs
parents:
diff changeset
  2108
		        }
hgs
parents:
diff changeset
  2109
		    	    			    
hgs
parents:
diff changeset
  2110
		    CleanupStack::PopAndDestroy(); //addr
hgs
parents:
diff changeset
  2111
		    }
hgs
parents:
diff changeset
  2112
hgs
parents:
diff changeset
  2113
        if( retValue1 != KErrNone )
hgs
parents:
diff changeset
  2114
		    {
hgs
parents:
diff changeset
  2115
		    return KErrNotFound;
hgs
parents:
diff changeset
  2116
		    }
hgs
parents:
diff changeset
  2117
		return KErrNone;
hgs
parents:
diff changeset
  2118
		}
hgs
parents:
diff changeset
  2119
	else if ( iField->Compare( KNSmlDdfPortNbr ) == 0 )
hgs
parents:
diff changeset
  2120
		{
hgs
parents:
diff changeset
  2121
		TInt retValue2 = GetProfileServerURLL( aIntLUID, aObject );
hgs
parents:
diff changeset
  2122
        if( retValue2 != KErrNone )
hgs
parents:
diff changeset
  2123
		    {
hgs
parents:
diff changeset
  2124
		    return KErrNotFound;
hgs
parents:
diff changeset
  2125
            }
hgs
parents:
diff changeset
  2126
        if ( aObject->Size() == 0 )
hgs
parents:
diff changeset
  2127
            {
hgs
parents:
diff changeset
  2128
            return KErrNone;
hgs
parents:
diff changeset
  2129
            }
hgs
parents:
diff changeset
  2130
        TInt bSize = aObject->Size();
hgs
parents:
diff changeset
  2131
        HBufC8* buf = HBufC8::NewLC( bSize );
hgs
parents:
diff changeset
  2132
		TPtr8 bufPtr = buf->Des();
hgs
parents:
diff changeset
  2133
		aObject->Read( 0, bufPtr, aObject->Size() );
hgs
parents:
diff changeset
  2134
		aObject->Reset();
hgs
parents:
diff changeset
  2135
		
hgs
parents:
diff changeset
  2136
        TInt pnum = 0;
hgs
parents:
diff changeset
  2137
		//find out the port number
hgs
parents:
diff changeset
  2138
        ParseUri( *buf, pnum );
hgs
parents:
diff changeset
  2139
        if(pnum)
hgs
parents:
diff changeset
  2140
            {
hgs
parents:
diff changeset
  2141
    		aObject->InsertL( aObject->Size(), SetIntObjectLC( pnum ) );
hgs
parents:
diff changeset
  2142
            CleanupStack::PopAndDestroy(  ); //SetIntObjectLC( pnum )
hgs
parents:
diff changeset
  2143
            }
hgs
parents:
diff changeset
  2144
        CleanupStack::PopAndDestroy(  ); //buf
hgs
parents:
diff changeset
  2145
        return KErrNone;
hgs
parents:
diff changeset
  2146
		}
hgs
parents:
diff changeset
  2147
	else if ( iField->Compare( KNSmlDdfClientUserName ) == 0 )
hgs
parents:
diff changeset
  2148
		{
hgs
parents:
diff changeset
  2149
		if( GetProfileUserNameL( aIntLUID, aObject ) != KErrNone )
hgs
parents:
diff changeset
  2150
            {
hgs
parents:
diff changeset
  2151
            return KErrGeneral;
hgs
parents:
diff changeset
  2152
            }
hgs
parents:
diff changeset
  2153
		return KErrNone;
hgs
parents:
diff changeset
  2154
		}
hgs
parents:
diff changeset
  2155
	else if ( iField->Compare( KNSmlDdfServerId ) == 0 )
hgs
parents:
diff changeset
  2156
		{
hgs
parents:
diff changeset
  2157
		if( GetProfileServerIdL( aIntLUID, aObject ) != KErrNone )
hgs
parents:
diff changeset
  2158
            {
hgs
parents:
diff changeset
  2159
            return KErrGeneral;
hgs
parents:
diff changeset
  2160
            }
hgs
parents:
diff changeset
  2161
		return KErrNone;
hgs
parents:
diff changeset
  2162
		}
hgs
parents:
diff changeset
  2163
	else if ( iField->Compare( KNSmlDdfClientPW ) == 0 ) //Not allowed
hgs
parents:
diff changeset
  2164
		{
hgs
parents:
diff changeset
  2165
		return KErrGeneral;
hgs
parents:
diff changeset
  2166
        }
hgs
parents:
diff changeset
  2167
	else if ( iField->Compare( KNSmlDdfName ) == 0 )
hgs
parents:
diff changeset
  2168
		{
hgs
parents:
diff changeset
  2169
		TInt retValue = GetProfileDisplayNameL( aIntLUID, aObject );
hgs
parents:
diff changeset
  2170
		if( retValue != KErrNone )
hgs
parents:
diff changeset
  2171
		    {
hgs
parents:
diff changeset
  2172
            return KErrGeneral;
hgs
parents:
diff changeset
  2173
		    }
hgs
parents:
diff changeset
  2174
		return KErrNone;
hgs
parents:
diff changeset
  2175
		}
hgs
parents:
diff changeset
  2176
	else if ( iField->Compare( KNSmlDdfToNAPID ) == 0 )
hgs
parents:
diff changeset
  2177
		{
hgs
parents:
diff changeset
  2178
		TInt retToNaPID = GetToNAPIDL( aIntLUID, *aObject );
hgs
parents:
diff changeset
  2179
		if ( retToNaPID == KErrNone || retToNaPID == KErrNotFound )
hgs
parents:
diff changeset
  2180
			{
hgs
parents:
diff changeset
  2181
			return retToNaPID;
hgs
parents:
diff changeset
  2182
			}
hgs
parents:
diff changeset
  2183
		return KErrGeneral;			
hgs
parents:
diff changeset
  2184
		}
hgs
parents:
diff changeset
  2185
	else if ( iField->Compare( KNSmlDdfHidden ) == 0 )
hgs
parents:
diff changeset
  2186
		{
hgs
parents:
diff changeset
  2187
		//Hidden profile not supported
hgs
parents:
diff changeset
  2188
		return KErrGeneral;
hgs
parents:
diff changeset
  2189
		}
hgs
parents:
diff changeset
  2190
    _DBG_FILE("CNSmlDSSettingsAdapter::GetDSFieldData(): end");
hgs
parents:
diff changeset
  2191
    return KErrGeneral;
hgs
parents:
diff changeset
  2192
	}
hgs
parents:
diff changeset
  2193
hgs
parents:
diff changeset
  2194
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2195
//  CNSmlDSSettingsAdapter::GetProfileConnectiontypeL()
hgs
parents:
diff changeset
  2196
//  The function what medium type is supported and returns it.
hgs
parents:
diff changeset
  2197
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2198
TInt CNSmlDSSettingsAdapter::GetProfileConnectiontypeL( const TInt aIntLUID )
hgs
parents:
diff changeset
  2199
	{
hgs
parents:
diff changeset
  2200
	TInt retVal = OpenSyncSessionAndDSProfileL( aIntLUID, ESmlOpenRead );
hgs
parents:
diff changeset
  2201
    if( retVal != KErrNone )
hgs
parents:
diff changeset
  2202
		{
hgs
parents:
diff changeset
  2203
        CloseDSProfile();
hgs
parents:
diff changeset
  2204
		return retVal;	
hgs
parents:
diff changeset
  2205
		}
hgs
parents:
diff changeset
  2206
	RArray<TSmlTransportId> transportIdArray;
hgs
parents:
diff changeset
  2207
    CleanupClosePushL( transportIdArray );
hgs
parents:
diff changeset
  2208
	iDSProfile.ListConnectionsL( transportIdArray );
hgs
parents:
diff changeset
  2209
	TInt transportItems = transportIdArray.Count();
hgs
parents:
diff changeset
  2210
    if( transportItems == 0 )
hgs
parents:
diff changeset
  2211
		{
hgs
parents:
diff changeset
  2212
		//No matching items
hgs
parents:
diff changeset
  2213
        CleanupStack::PopAndDestroy(); //transportIdArray	
hgs
parents:
diff changeset
  2214
		CloseDSProfile();
hgs
parents:
diff changeset
  2215
		return KErrGeneral;
hgs
parents:
diff changeset
  2216
		}
hgs
parents:
diff changeset
  2217
	else if( transportItems > 1 )
hgs
parents:
diff changeset
  2218
		{
hgs
parents:
diff changeset
  2219
		//Error case : against specification
hgs
parents:
diff changeset
  2220
        CleanupStack::PopAndDestroy(); //transportIdArray	
hgs
parents:
diff changeset
  2221
		CloseDSProfile();
hgs
parents:
diff changeset
  2222
		return KErrGeneral;
hgs
parents:
diff changeset
  2223
		}
hgs
parents:
diff changeset
  2224
	
hgs
parents:
diff changeset
  2225
    TInt mediumType = ENone;	
hgs
parents:
diff changeset
  2226
    if ( transportIdArray[0] == KUidNSmlMediumTypeInternet.iUid )
hgs
parents:
diff changeset
  2227
        {
hgs
parents:
diff changeset
  2228
        mediumType = EHttp;
hgs
parents:
diff changeset
  2229
        }
hgs
parents:
diff changeset
  2230
    else if ( transportIdArray[0] == KUidNSmlMediumTypeBluetooth.iUid ||
hgs
parents:
diff changeset
  2231
              transportIdArray[0] == KUidNSmlMediumTypeUSB.iUid ||   
hgs
parents:
diff changeset
  2232
              transportIdArray[0] == KUidNSmlMediumTypeIrDA.iUid  )
hgs
parents:
diff changeset
  2233
        {
hgs
parents:
diff changeset
  2234
        mediumType = EObex;
hgs
parents:
diff changeset
  2235
        }
hgs
parents:
diff changeset
  2236
    
hgs
parents:
diff changeset
  2237
    CleanupStack::PopAndDestroy(); //transportIdArray
hgs
parents:
diff changeset
  2238
	CloseDSProfile();
hgs
parents:
diff changeset
  2239
	return mediumType;
hgs
parents:
diff changeset
  2240
	}
hgs
parents:
diff changeset
  2241
hgs
parents:
diff changeset
  2242
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2243
//  CNSmlDSSettingsAdapter::GetProfileServerURLL
hgs
parents:
diff changeset
  2244
//  The function gets the profile Addr leaf value.
hgs
parents:
diff changeset
  2245
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2246
TInt CNSmlDSSettingsAdapter::GetProfileServerURLL( const TInt aIntLUID, 
hgs
parents:
diff changeset
  2247
                                                    CBufBase*& aURL )
hgs
parents:
diff changeset
  2248
	{
hgs
parents:
diff changeset
  2249
	TInt retVal = OpenSyncSessionAndDSProfileL( aIntLUID, ESmlOpenRead );
hgs
parents:
diff changeset
  2250
    if( retVal != KErrNone )
hgs
parents:
diff changeset
  2251
		{
hgs
parents:
diff changeset
  2252
        CloseDSProfile();
hgs
parents:
diff changeset
  2253
		return retVal;	
hgs
parents:
diff changeset
  2254
		}
hgs
parents:
diff changeset
  2255
	RArray<TSmlTransportId> transportIdArray;
hgs
parents:
diff changeset
  2256
    CleanupClosePushL( transportIdArray );
hgs
parents:
diff changeset
  2257
	iDSProfile.ListConnectionsL( transportIdArray );
hgs
parents:
diff changeset
  2258
    if( transportIdArray.Count() > 0 )
hgs
parents:
diff changeset
  2259
        {
hgs
parents:
diff changeset
  2260
        RSyncMLConnection profConn;
hgs
parents:
diff changeset
  2261
        CleanupClosePushL( profConn );
hgs
parents:
diff changeset
  2262
	    profConn.OpenL( iDSProfile, transportIdArray[0] );
hgs
parents:
diff changeset
  2263
hgs
parents:
diff changeset
  2264
	    HBufC8* sURI = profConn.ServerURI().AllocL();
hgs
parents:
diff changeset
  2265
        CleanupStack::PushL( sURI );
hgs
parents:
diff changeset
  2266
        TPtr8 uriPtr = sURI->Des();
hgs
parents:
diff changeset
  2267
        if( uriPtr.Length() > 0 )
hgs
parents:
diff changeset
  2268
            {
hgs
parents:
diff changeset
  2269
            aURL->InsertL( aURL->Size(),uriPtr );
hgs
parents:
diff changeset
  2270
            }
hgs
parents:
diff changeset
  2271
        else
hgs
parents:
diff changeset
  2272
            {
hgs
parents:
diff changeset
  2273
            aURL->InsertL( aURL->Size(), KNullDesC8 );
hgs
parents:
diff changeset
  2274
            }
hgs
parents:
diff changeset
  2275
        CleanupStack::PopAndDestroy( 2 );//profConn, sURI
hgs
parents:
diff changeset
  2276
        retVal = KErrNone;
hgs
parents:
diff changeset
  2277
        }
hgs
parents:
diff changeset
  2278
    else
hgs
parents:
diff changeset
  2279
        {
hgs
parents:
diff changeset
  2280
        retVal = KErrNotFound;
hgs
parents:
diff changeset
  2281
        }
hgs
parents:
diff changeset
  2282
    CleanupStack::PopAndDestroy(); //transportIdArray
hgs
parents:
diff changeset
  2283
    CloseDSProfile();
hgs
parents:
diff changeset
  2284
    return retVal;
hgs
parents:
diff changeset
  2285
	}
hgs
parents:
diff changeset
  2286
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2287
//  CNSmlDSSettingsAdapter::GetProfileUserNameL
hgs
parents:
diff changeset
  2288
//  The function gets the ClientUserName leaf value.
hgs
parents:
diff changeset
  2289
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2290
TInt CNSmlDSSettingsAdapter::GetProfileUserNameL( const TInt aIntLUID, 
hgs
parents:
diff changeset
  2291
                                                    CBufBase*& aUserName )
hgs
parents:
diff changeset
  2292
	{
hgs
parents:
diff changeset
  2293
	TInt retVal = OpenSyncSessionAndDSProfileL( aIntLUID, ESmlOpenRead );
hgs
parents:
diff changeset
  2294
    if( retVal != KErrNone )
hgs
parents:
diff changeset
  2295
		{
hgs
parents:
diff changeset
  2296
        CloseDSProfile();
hgs
parents:
diff changeset
  2297
		return retVal;	
hgs
parents:
diff changeset
  2298
		}
hgs
parents:
diff changeset
  2299
	HBufC8* userName = iDSProfile.UserName().AllocL();
hgs
parents:
diff changeset
  2300
    CleanupStack::PushL( userName );
hgs
parents:
diff changeset
  2301
    TPtr8 ptrUserName = userName->Des();
hgs
parents:
diff changeset
  2302
    CloseDSProfile();
hgs
parents:
diff changeset
  2303
    aUserName->InsertL( aUserName->Size(), ptrUserName );
hgs
parents:
diff changeset
  2304
    CleanupStack::PopAndDestroy(); //userName
hgs
parents:
diff changeset
  2305
    return KErrNone;
hgs
parents:
diff changeset
  2306
	}
hgs
parents:
diff changeset
  2307
	
hgs
parents:
diff changeset
  2308
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2309
//  CNSmlDSSettingsAdapter::GetProfileServerIdL
hgs
parents:
diff changeset
  2310
//  The function gets the ClientUserName leaf value.
hgs
parents:
diff changeset
  2311
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2312
TInt CNSmlDSSettingsAdapter::GetProfileServerIdL( const TInt aIntLUID, 
hgs
parents:
diff changeset
  2313
                                                    CBufBase*& aUserName )
hgs
parents:
diff changeset
  2314
	{
hgs
parents:
diff changeset
  2315
	TInt retVal = OpenSyncSessionAndDSProfileL( aIntLUID, ESmlOpenRead );
hgs
parents:
diff changeset
  2316
    if( retVal != KErrNone )
hgs
parents:
diff changeset
  2317
		{
hgs
parents:
diff changeset
  2318
        CloseDSProfile();
hgs
parents:
diff changeset
  2319
		return retVal;	
hgs
parents:
diff changeset
  2320
		}
hgs
parents:
diff changeset
  2321
    aUserName->InsertL( aUserName->Size(), iDSProfile.ServerId() );
hgs
parents:
diff changeset
  2322
    CloseDSProfile();
hgs
parents:
diff changeset
  2323
    return KErrNone;
hgs
parents:
diff changeset
  2324
	}
hgs
parents:
diff changeset
  2325
	
hgs
parents:
diff changeset
  2326
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2327
//  CNSmlDSSettingsAdapter::GetProfileIAPIdL
hgs
parents:
diff changeset
  2328
//  The function gets the IAP id value from Client API.
hgs
parents:
diff changeset
  2329
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2330
TInt CNSmlDSSettingsAdapter::GetProfileIAPIdL( const TInt aIntLUID, TInt& aIAPid )
hgs
parents:
diff changeset
  2331
	{
hgs
parents:
diff changeset
  2332
    aIAPid = -1;
hgs
parents:
diff changeset
  2333
    TInt retVal = OpenSyncSessionAndDSProfileL( aIntLUID, ESmlOpenRead );
hgs
parents:
diff changeset
  2334
    if( retVal != KErrNone )
hgs
parents:
diff changeset
  2335
		{
hgs
parents:
diff changeset
  2336
		CloseDSProfile();
hgs
parents:
diff changeset
  2337
        return retVal;	
hgs
parents:
diff changeset
  2338
		}
hgs
parents:
diff changeset
  2339
    RArray<TSmlTransportId> connIdArray;
hgs
parents:
diff changeset
  2340
    CleanupClosePushL( connIdArray );
hgs
parents:
diff changeset
  2341
    iDSProfile.ListConnectionsL( connIdArray );
hgs
parents:
diff changeset
  2342
    if( connIdArray.Count() == 1 )
hgs
parents:
diff changeset
  2343
        {
hgs
parents:
diff changeset
  2344
        RSyncMLTransport transport;
hgs
parents:
diff changeset
  2345
        CleanupClosePushL( transport );
hgs
parents:
diff changeset
  2346
	    transport.OpenL( iSyncSession, connIdArray[0] );
hgs
parents:
diff changeset
  2347
	    const CSyncMLTransportPropertiesArray& props = transport.Properties();
hgs
parents:
diff changeset
  2348
	    TInt index = props.Find( KNSmlIAPId );
hgs
parents:
diff changeset
  2349
        if( index > 0 )
hgs
parents:
diff changeset
  2350
            {
hgs
parents:
diff changeset
  2351
            RSyncMLConnection conn;
hgs
parents:
diff changeset
  2352
            CleanupClosePushL( conn );
hgs
parents:
diff changeset
  2353
	        conn.OpenL( iDSProfile, connIdArray[0] );
hgs
parents:
diff changeset
  2354
            HBufC8* iapId = conn.GetPropertyL( KNSmlIAPId ).AllocLC();
hgs
parents:
diff changeset
  2355
            aIAPid = GetIntObject( *iapId );
hgs
parents:
diff changeset
  2356
            CleanupStack::PopAndDestroy( 2 ); //conn, iapId
hgs
parents:
diff changeset
  2357
            retVal = KErrNone;
hgs
parents:
diff changeset
  2358
            }
hgs
parents:
diff changeset
  2359
        else
hgs
parents:
diff changeset
  2360
            {
hgs
parents:
diff changeset
  2361
            retVal = KErrNotFound;
hgs
parents:
diff changeset
  2362
            }
hgs
parents:
diff changeset
  2363
        CleanupStack::PopAndDestroy(); //transport
hgs
parents:
diff changeset
  2364
        CloseDSProfile();
hgs
parents:
diff changeset
  2365
        }
hgs
parents:
diff changeset
  2366
    else
hgs
parents:
diff changeset
  2367
        {
hgs
parents:
diff changeset
  2368
        retVal = KErrNotFound;
hgs
parents:
diff changeset
  2369
        }
hgs
parents:
diff changeset
  2370
    CleanupStack::PopAndDestroy(); //connIdArray
hgs
parents:
diff changeset
  2371
    return retVal;
hgs
parents:
diff changeset
  2372
    }
hgs
parents:
diff changeset
  2373
hgs
parents:
diff changeset
  2374
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2375
//  CNSmlDSSettingsAdapter::GetProfileDisplayNameL
hgs
parents:
diff changeset
  2376
//  The function gets the Name leaf value for a profile.
hgs
parents:
diff changeset
  2377
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2378
TInt CNSmlDSSettingsAdapter::GetProfileDisplayNameL( const TInt aIntLUID, 
hgs
parents:
diff changeset
  2379
                                                        CBufBase*& aDisplayName )
hgs
parents:
diff changeset
  2380
	{
hgs
parents:
diff changeset
  2381
	TInt retVal = OpenSyncSessionAndDSProfileL( aIntLUID, ESmlOpenRead );
hgs
parents:
diff changeset
  2382
    if(retVal != KErrNone)
hgs
parents:
diff changeset
  2383
		{
hgs
parents:
diff changeset
  2384
		CloseDSProfile();
hgs
parents:
diff changeset
  2385
        return retVal;	
hgs
parents:
diff changeset
  2386
		}
hgs
parents:
diff changeset
  2387
	HBufC* dataBuf = iDSProfile.DisplayName().AllocL();
hgs
parents:
diff changeset
  2388
    CleanupStack::PushL( dataBuf );
hgs
parents:
diff changeset
  2389
    TPtr16 ptrDisplayName = dataBuf->Des();
hgs
parents:
diff changeset
  2390
    aDisplayName->InsertL( aDisplayName->Size(), ConvertTo8LC( ptrDisplayName ) );
hgs
parents:
diff changeset
  2391
    CleanupStack::PopAndDestroy( 2 );//dataBuf, ConvertTo8LC
hgs
parents:
diff changeset
  2392
    CloseDSProfile();
hgs
parents:
diff changeset
  2393
    return KErrNone;
hgs
parents:
diff changeset
  2394
	}
hgs
parents:
diff changeset
  2395
hgs
parents:
diff changeset
  2396
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2397
//  CNSmlDSSettingsAdapter::CreateNewProfileL
hgs
parents:
diff changeset
  2398
//  The function creates new profile through Client API.
hgs
parents:
diff changeset
  2399
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2400
TInt CNSmlDSSettingsAdapter::CreateNewProfileL( TInt& aPID )
hgs
parents:
diff changeset
  2401
	{
hgs
parents:
diff changeset
  2402
    if( iSyncSessionOpen == EFalse )
hgs
parents:
diff changeset
  2403
	    {
hgs
parents:
diff changeset
  2404
        iSyncSession.OpenL();
hgs
parents:
diff changeset
  2405
        iSyncSessionOpen = ETrue;
hgs
parents:
diff changeset
  2406
	    }
hgs
parents:
diff changeset
  2407
    TRAPD( trapValue1, iDSProfile.CreateL( iSyncSession ) );
hgs
parents:
diff changeset
  2408
    if( trapValue1 != KErrNone )
hgs
parents:
diff changeset
  2409
        {
hgs
parents:
diff changeset
  2410
        return trapValue1;
hgs
parents:
diff changeset
  2411
        }
hgs
parents:
diff changeset
  2412
    //iDSProfile.SetProtocolVersionL(ESmlVersion1_1_2);
hgs
parents:
diff changeset
  2413
    TRAPD( trapValue2, iDSProfile.UpdateL() );
hgs
parents:
diff changeset
  2414
    if( trapValue2 != KErrNone )
hgs
parents:
diff changeset
  2415
        {
hgs
parents:
diff changeset
  2416
        return trapValue2;
hgs
parents:
diff changeset
  2417
        }
hgs
parents:
diff changeset
  2418
    aPID = iDSProfile.Identifier();
hgs
parents:
diff changeset
  2419
   	
hgs
parents:
diff changeset
  2420
hgs
parents:
diff changeset
  2421
    CloseDSProfile();
hgs
parents:
diff changeset
  2422
    return KErrNone;
hgs
parents:
diff changeset
  2423
    }
hgs
parents:
diff changeset
  2424
hgs
parents:
diff changeset
  2425
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2426
//  CNSmlDSSettingsAdapter::SetProfileServerURIL
hgs
parents:
diff changeset
  2427
//  The function sets the Addr leaf value.
hgs
parents:
diff changeset
  2428
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2429
TInt CNSmlDSSettingsAdapter::SetProfileServerURIL( const TInt aPID, 
hgs
parents:
diff changeset
  2430
                                                    const TDesC8& aObj )
hgs
parents:
diff changeset
  2431
	{
hgs
parents:
diff changeset
  2432
	TInt retVal = OpenSyncSessionAndDSProfileL( aPID, ESmlOpenReadWrite );
hgs
parents:
diff changeset
  2433
    if(retVal != KErrNone)
hgs
parents:
diff changeset
  2434
		{
hgs
parents:
diff changeset
  2435
		CloseDSProfile();
hgs
parents:
diff changeset
  2436
        return retVal;	
hgs
parents:
diff changeset
  2437
		}
hgs
parents:
diff changeset
  2438
	RArray<TSmlTransportId> transportIdArray;
hgs
parents:
diff changeset
  2439
    CleanupClosePushL( transportIdArray );
hgs
parents:
diff changeset
  2440
	iDSProfile.ListConnectionsL( transportIdArray );
hgs
parents:
diff changeset
  2441
	if( transportIdArray.Count() == 0 )
hgs
parents:
diff changeset
  2442
	    {
hgs
parents:
diff changeset
  2443
        CleanupStack::PopAndDestroy();//transportIdArray
hgs
parents:
diff changeset
  2444
        CloseDSProfile();
hgs
parents:
diff changeset
  2445
        return KErrGeneral;
hgs
parents:
diff changeset
  2446
	    }
hgs
parents:
diff changeset
  2447
	    
hgs
parents:
diff changeset
  2448
	TInt newPort(0);
hgs
parents:
diff changeset
  2449
	
hgs
parents:
diff changeset
  2450
	RSyncMLConnection conn;
hgs
parents:
diff changeset
  2451
    CleanupClosePushL( conn );
hgs
parents:
diff changeset
  2452
    conn.OpenL( iDSProfile, transportIdArray[0] );
hgs
parents:
diff changeset
  2453
    
hgs
parents:
diff changeset
  2454
    if( transportIdArray[0] == KUidNSmlMediumTypeInternet.iUid )
hgs
parents:
diff changeset
  2455
        {
hgs
parents:
diff changeset
  2456
        if(ParseUri(aObj,newPort)==KErrNotFound)
hgs
parents:
diff changeset
  2457
            {
hgs
parents:
diff changeset
  2458
            TInt port(0);
hgs
parents:
diff changeset
  2459
            ParseUri(conn.ServerURI(),port);
hgs
parents:
diff changeset
  2460
            if(port==0)
hgs
parents:
diff changeset
  2461
            	{
hgs
parents:
diff changeset
  2462
            	// set default port
hgs
parents:
diff changeset
  2463
            	if( aObj.Find( KNSmlDSSettingsHTTPS ) == 0 ) //https://
hgs
parents:
diff changeset
  2464
            		{
hgs
parents:
diff changeset
  2465
            		port = KNSmlDSSettingsHTTPSPort;
hgs
parents:
diff changeset
  2466
            		}
hgs
parents:
diff changeset
  2467
            	else //http://
hgs
parents:
diff changeset
  2468
        	        {
hgs
parents:
diff changeset
  2469
        	        port = KNSmlDSSettingsHTTPPort;
hgs
parents:
diff changeset
  2470
        	        }
hgs
parents:
diff changeset
  2471
            	}
hgs
parents:
diff changeset
  2472
hgs
parents:
diff changeset
  2473
           	TBuf8<5> buf;
hgs
parents:
diff changeset
  2474
        	buf.Num( port );
hgs
parents:
diff changeset
  2475
            	
hgs
parents:
diff changeset
  2476
            TInt totalSize = aObj.Length() + buf.Length() + 1;
hgs
parents:
diff changeset
  2477
            HBufC8* newServerURI = HBufC8::NewLC( totalSize );
hgs
parents:
diff changeset
  2478
            SetPortNrToAddrStr( aObj, newServerURI, buf );
hgs
parents:
diff changeset
  2479
hgs
parents:
diff changeset
  2480
            conn.SetServerURIL( *newServerURI );
hgs
parents:
diff changeset
  2481
        	conn.UpdateL();
hgs
parents:
diff changeset
  2482
            CleanupStack::PopAndDestroy( newServerURI ); 
hgs
parents:
diff changeset
  2483
            
hgs
parents:
diff changeset
  2484
            }
hgs
parents:
diff changeset
  2485
        else
hgs
parents:
diff changeset
  2486
            {
hgs
parents:
diff changeset
  2487
            conn.SetServerURIL( aObj );
hgs
parents:
diff changeset
  2488
    	    conn.UpdateL();
hgs
parents:
diff changeset
  2489
            }
hgs
parents:
diff changeset
  2490
        }
hgs
parents:
diff changeset
  2491
    else // medium type not internet, no port allowed
hgs
parents:
diff changeset
  2492
        {
hgs
parents:
diff changeset
  2493
        if(ParseUri(aObj,newPort)==KErrNotFound)
hgs
parents:
diff changeset
  2494
            {
hgs
parents:
diff changeset
  2495
            conn.SetServerURIL( aObj );
hgs
parents:
diff changeset
  2496
    	    conn.UpdateL();
hgs
parents:
diff changeset
  2497
            }
hgs
parents:
diff changeset
  2498
        else
hgs
parents:
diff changeset
  2499
            {
hgs
parents:
diff changeset
  2500
            // remove port from uri
hgs
parents:
diff changeset
  2501
            HBufC8* newServerURI = HBufC8::NewL( aObj.Length() );
hgs
parents:
diff changeset
  2502
            CleanupStack::PushL( newServerURI );
hgs
parents:
diff changeset
  2503
            TBuf8<5> buf;
hgs
parents:
diff changeset
  2504
        	buf.Num( 0 );
hgs
parents:
diff changeset
  2505
            // change iLeafType to EDSDelete -> deleting port
hgs
parents:
diff changeset
  2506
            TNSmlDSLeafType	tmpType(iLeafType); // store current value
hgs
parents:
diff changeset
  2507
            iLeafType = EDSDelete;
hgs
parents:
diff changeset
  2508
            SetPortNrToAddrStr( aObj, newServerURI, buf );
hgs
parents:
diff changeset
  2509
            iLeafType = tmpType; // restore original value
hgs
parents:
diff changeset
  2510
            
hgs
parents:
diff changeset
  2511
            conn.SetServerURIL( *newServerURI );
hgs
parents:
diff changeset
  2512
            conn.UpdateL();
hgs
parents:
diff changeset
  2513
            CleanupStack::PopAndDestroy( newServerURI );
hgs
parents:
diff changeset
  2514
            }
hgs
parents:
diff changeset
  2515
        }
hgs
parents:
diff changeset
  2516
hgs
parents:
diff changeset
  2517
     
hgs
parents:
diff changeset
  2518
    iDSProfile.UpdateL();
hgs
parents:
diff changeset
  2519
    CleanupStack::PopAndDestroy( 2 ); //transportIdArray, conn
hgs
parents:
diff changeset
  2520
	CloseDSProfile();
hgs
parents:
diff changeset
  2521
	return retVal;
hgs
parents:
diff changeset
  2522
	}
hgs
parents:
diff changeset
  2523
hgs
parents:
diff changeset
  2524
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2525
//  CNSmlDSSettingsAdapter::SetProfileDisplayNameL
hgs
parents:
diff changeset
  2526
//  The function sets the Name leaf value for a profile.
hgs
parents:
diff changeset
  2527
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2528
TInt CNSmlDSSettingsAdapter::SetProfileDisplayNameL( const TInt aPID, 
hgs
parents:
diff changeset
  2529
                                                        const TDesC8& aObj )
hgs
parents:
diff changeset
  2530
	{
hgs
parents:
diff changeset
  2531
	TInt retVal = OpenSyncSessionAndDSProfileL( aPID, ESmlOpenReadWrite );
hgs
parents:
diff changeset
  2532
    if( retVal != KErrNone )
hgs
parents:
diff changeset
  2533
		{
hgs
parents:
diff changeset
  2534
		CloseDSProfile();
hgs
parents:
diff changeset
  2535
        return retVal;
hgs
parents:
diff changeset
  2536
		}
hgs
parents:
diff changeset
  2537
	iDSProfile.SetDisplayNameL( ConvertTo16LC( aObj ) );
hgs
parents:
diff changeset
  2538
	iDSProfile.UpdateL();
hgs
parents:
diff changeset
  2539
    CleanupStack::PopAndDestroy();//ConvertTo16LC
hgs
parents:
diff changeset
  2540
	CloseDSProfile();
hgs
parents:
diff changeset
  2541
	return retVal;
hgs
parents:
diff changeset
  2542
	}
hgs
parents:
diff changeset
  2543
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2544
//  CNSmlDSSettingsAdapter::SetProfileUserNameL
hgs
parents:
diff changeset
  2545
//  The function sets the ClientUserName leaf value for a profile.
hgs
parents:
diff changeset
  2546
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2547
TInt CNSmlDSSettingsAdapter::SetProfileUserNameL( const TInt aPID,  
hgs
parents:
diff changeset
  2548
                                                    const TDesC8& aObj )
hgs
parents:
diff changeset
  2549
	{
hgs
parents:
diff changeset
  2550
	TInt retVal = OpenSyncSessionAndDSProfileL( aPID, ESmlOpenReadWrite );
hgs
parents:
diff changeset
  2551
    if( retVal != KErrNone )
hgs
parents:
diff changeset
  2552
		{
hgs
parents:
diff changeset
  2553
		CloseDSProfile();
hgs
parents:
diff changeset
  2554
        return retVal;	
hgs
parents:
diff changeset
  2555
		}
hgs
parents:
diff changeset
  2556
	iDSProfile.SetUserNameL( aObj );
hgs
parents:
diff changeset
  2557
	iDSProfile.UpdateL();
hgs
parents:
diff changeset
  2558
	CloseDSProfile();
hgs
parents:
diff changeset
  2559
	return retVal;
hgs
parents:
diff changeset
  2560
	}
hgs
parents:
diff changeset
  2561
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2562
//  CNSmlDSSettingsAdapter::SetProfileServerIdL
hgs
parents:
diff changeset
  2563
//  The function sets the ClientUserName leaf value for a profile.
hgs
parents:
diff changeset
  2564
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2565
TInt CNSmlDSSettingsAdapter::SetProfileServerIdL( const TInt aPID,  
hgs
parents:
diff changeset
  2566
                                                    const TDesC8& aObj )
hgs
parents:
diff changeset
  2567
	{
hgs
parents:
diff changeset
  2568
	TInt retVal = OpenSyncSessionAndDSProfileL( aPID, ESmlOpenReadWrite );
hgs
parents:
diff changeset
  2569
    if( retVal != KErrNone )
hgs
parents:
diff changeset
  2570
		{
hgs
parents:
diff changeset
  2571
		CloseDSProfile();
hgs
parents:
diff changeset
  2572
        return retVal;	
hgs
parents:
diff changeset
  2573
		}
hgs
parents:
diff changeset
  2574
	iDSProfile.SetServerIdL( aObj );
hgs
parents:
diff changeset
  2575
	if(aObj.Length())
hgs
parents:
diff changeset
  2576
	    {
hgs
parents:
diff changeset
  2577
    	iDSProfile.SetProtocolVersionL(ESmlVersion1_2);
hgs
parents:
diff changeset
  2578
	    }
hgs
parents:
diff changeset
  2579
	else
hgs
parents:
diff changeset
  2580
	    {
hgs
parents:
diff changeset
  2581
    	iDSProfile.SetProtocolVersionL(ESmlVersion1_1_2);	    
hgs
parents:
diff changeset
  2582
	    }
hgs
parents:
diff changeset
  2583
	iDSProfile.UpdateL();
hgs
parents:
diff changeset
  2584
	CloseDSProfile();
hgs
parents:
diff changeset
  2585
	return retVal;
hgs
parents:
diff changeset
  2586
	}
hgs
parents:
diff changeset
  2587
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2588
//  CNSmlDSSettingsAdapter::SetProfilePasswordL
hgs
parents:
diff changeset
  2589
//  The function sets the ClientPW leaf value for a profile.
hgs
parents:
diff changeset
  2590
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2591
TInt CNSmlDSSettingsAdapter::SetProfilePasswordL( const TInt aPID, 
hgs
parents:
diff changeset
  2592
                                                    const TDesC8& aObj )
hgs
parents:
diff changeset
  2593
	{
hgs
parents:
diff changeset
  2594
	TInt retVal = OpenSyncSessionAndDSProfileL( aPID, ESmlOpenReadWrite );
hgs
parents:
diff changeset
  2595
    if( retVal != KErrNone )
hgs
parents:
diff changeset
  2596
		{
hgs
parents:
diff changeset
  2597
		CloseDSProfile();
hgs
parents:
diff changeset
  2598
        return retVal;	
hgs
parents:
diff changeset
  2599
		}
hgs
parents:
diff changeset
  2600
	iDSProfile.SetPasswordL( aObj );
hgs
parents:
diff changeset
  2601
	iDSProfile.UpdateL();
hgs
parents:
diff changeset
  2602
	CloseDSProfile();
hgs
parents:
diff changeset
  2603
	return retVal;
hgs
parents:
diff changeset
  2604
	}
hgs
parents:
diff changeset
  2605
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2606
//  CNSmlDSSettingsAdapter::SetProfileStrValueL
hgs
parents:
diff changeset
  2607
//  The function checks what leaf to be handles and calls the proper function to
hgs
parents:
diff changeset
  2608
//  set leaf data.
hgs
parents:
diff changeset
  2609
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2610
TInt CNSmlDSSettingsAdapter::SetProfileStrValueL( const TInt aPID, 
hgs
parents:
diff changeset
  2611
                                                    const TDesC8& aObj, 
hgs
parents:
diff changeset
  2612
                                                    const TInt aFieldID )
hgs
parents:
diff changeset
  2613
	{
hgs
parents:
diff changeset
  2614
	TInt ret = 0;
hgs
parents:
diff changeset
  2615
	switch ( aFieldID )
hgs
parents:
diff changeset
  2616
		{
hgs
parents:
diff changeset
  2617
		case ( EProfileName ) :
hgs
parents:
diff changeset
  2618
			{
hgs
parents:
diff changeset
  2619
			ret = SetProfileDisplayNameL( aPID, aObj );
hgs
parents:
diff changeset
  2620
			}
hgs
parents:
diff changeset
  2621
		break;
hgs
parents:
diff changeset
  2622
		
hgs
parents:
diff changeset
  2623
		case ( EProfileSyncServerUsername ) :
hgs
parents:
diff changeset
  2624
			{
hgs
parents:
diff changeset
  2625
			ret = SetProfileUserNameL( aPID, aObj );
hgs
parents:
diff changeset
  2626
			}
hgs
parents:
diff changeset
  2627
		break;
hgs
parents:
diff changeset
  2628
hgs
parents:
diff changeset
  2629
		case ( EProfileServerId ) :
hgs
parents:
diff changeset
  2630
			{
hgs
parents:
diff changeset
  2631
			ret = SetProfileServerIdL( aPID, aObj );
hgs
parents:
diff changeset
  2632
			}
hgs
parents:
diff changeset
  2633
		break;
hgs
parents:
diff changeset
  2634
hgs
parents:
diff changeset
  2635
hgs
parents:
diff changeset
  2636
		case ( EProfileSyncServerPassword ) :
hgs
parents:
diff changeset
  2637
			{
hgs
parents:
diff changeset
  2638
			ret = SetProfilePasswordL( aPID, aObj );
hgs
parents:
diff changeset
  2639
			}
hgs
parents:
diff changeset
  2640
		break;
hgs
parents:
diff changeset
  2641
        case ( EProfileIAPId ) :
hgs
parents:
diff changeset
  2642
			{
hgs
parents:
diff changeset
  2643
			ret = SetToNAPIDL( aPID, aObj );
hgs
parents:
diff changeset
  2644
			}
hgs
parents:
diff changeset
  2645
		break;
hgs
parents:
diff changeset
  2646
		case ( EProfilePort ) :
hgs
parents:
diff changeset
  2647
            {
hgs
parents:
diff changeset
  2648
			delete iPortBuf;
hgs
parents:
diff changeset
  2649
			iPortBuf = NULL;
hgs
parents:
diff changeset
  2650
			
hgs
parents:
diff changeset
  2651
            // check that port is a valid integer
hgs
parents:
diff changeset
  2652
            TLex8 lex( aObj );
hgs
parents:
diff changeset
  2653
            TInt port = KErrNotFound;
hgs
parents:
diff changeset
  2654
            TInt err = lex.Val( port );
hgs
parents:
diff changeset
  2655
            
hgs
parents:
diff changeset
  2656
            if ( err != KErrNone || !lex.Eos() )
hgs
parents:
diff changeset
  2657
                {
hgs
parents:
diff changeset
  2658
                ret = KErrArgument;
hgs
parents:
diff changeset
  2659
                }
hgs
parents:
diff changeset
  2660
            else
hgs
parents:
diff changeset
  2661
                {
hgs
parents:
diff changeset
  2662
    			TInt portval = GetIntObject(aObj);
hgs
parents:
diff changeset
  2663
			if(portval<0)
hgs
parents:
diff changeset
  2664
			{
hgs
parents:
diff changeset
  2665
				ret=KErrArgument;
hgs
parents:
diff changeset
  2666
			}
hgs
parents:
diff changeset
  2667
			else if(portval>65535)
hgs
parents:
diff changeset
  2668
			{
hgs
parents:
diff changeset
  2669
			    	ret=KErrOverflow;	
hgs
parents:
diff changeset
  2670
			}
hgs
parents:
diff changeset
  2671
			
hgs
parents:
diff changeset
  2672
			else
hgs
parents:
diff changeset
  2673
			{
hgs
parents:
diff changeset
  2674
			// save information of the port
hgs
parents:
diff changeset
  2675
    			iPortBuf = aObj.AllocL();
hgs
parents:
diff changeset
  2676
    			iPortBufLUID = aPID;
hgs
parents:
diff changeset
  2677
    			SetProfileConnectionPortNrL( iPortBufLUID, *iPortBuf );
hgs
parents:
diff changeset
  2678
			}
hgs
parents:
diff changeset
  2679
                }
hgs
parents:
diff changeset
  2680
            }
hgs
parents:
diff changeset
  2681
        break;
hgs
parents:
diff changeset
  2682
        case ( EProfileURL ) :
hgs
parents:
diff changeset
  2683
		case ( EHiddenProfile ) :
hgs
parents:
diff changeset
  2684
		case ( EProfileMediumType ) :
hgs
parents:
diff changeset
  2685
		default:
hgs
parents:
diff changeset
  2686
			{
hgs
parents:
diff changeset
  2687
			User::Panic( KNSmlIndexOutOfBoundStr, KNSmlPanicIndexOutOfBound );
hgs
parents:
diff changeset
  2688
			}
hgs
parents:
diff changeset
  2689
		}
hgs
parents:
diff changeset
  2690
	return ret;
hgs
parents:
diff changeset
  2691
	}
hgs
parents:
diff changeset
  2692
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2693
//  CNSmlDSSettingsAdapter::DeleteProfileL
hgs
parents:
diff changeset
  2694
//  The function deletes profile data content.
hgs
parents:
diff changeset
  2695
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2696
TInt CNSmlDSSettingsAdapter::DeleteProfileL( const TInt aPID )
hgs
parents:
diff changeset
  2697
	{
hgs
parents:
diff changeset
  2698
	TInt retVal = OpenSyncSessionAndDSProfileL( aPID, ESmlOpenReadWrite );
hgs
parents:
diff changeset
  2699
    if( retVal != KErrNone )
hgs
parents:
diff changeset
  2700
		{
hgs
parents:
diff changeset
  2701
		CloseDSProfile();
hgs
parents:
diff changeset
  2702
        return KErrGeneral;	
hgs
parents:
diff changeset
  2703
		}
hgs
parents:
diff changeset
  2704
    RArray<TSmlTaskId> taskIdArray;
hgs
parents:
diff changeset
  2705
    CleanupClosePushL( taskIdArray );
hgs
parents:
diff changeset
  2706
    iDSProfile.ListTasksL( taskIdArray );
hgs
parents:
diff changeset
  2707
    if( taskIdArray.Count() > 0 )
hgs
parents:
diff changeset
  2708
        {
hgs
parents:
diff changeset
  2709
        for ( TInt i = 0; i < taskIdArray.Count(); i++ )
hgs
parents:
diff changeset
  2710
            {
hgs
parents:
diff changeset
  2711
            iDSProfile.DeleteTaskL( taskIdArray[i] );
hgs
parents:
diff changeset
  2712
            iDSProfile.UpdateL();
hgs
parents:
diff changeset
  2713
            }
hgs
parents:
diff changeset
  2714
        }
hgs
parents:
diff changeset
  2715
    CloseDSProfile();
hgs
parents:
diff changeset
  2716
    RArray<TSmlProfileId> profileIdArray;
hgs
parents:
diff changeset
  2717
    CleanupClosePushL( profileIdArray );
hgs
parents:
diff changeset
  2718
    TSmlUsageType usageType = ESmlDataSync;
hgs
parents:
diff changeset
  2719
    iSyncSession.ListProfilesL( profileIdArray, usageType );
hgs
parents:
diff changeset
  2720
    TInt index = profileIdArray.Find( aPID );
hgs
parents:
diff changeset
  2721
    iSyncSession.DeleteProfileL( profileIdArray[index] );
hgs
parents:
diff changeset
  2722
    CleanupStack::PopAndDestroy( 2 ); //profileIdArray, taskIdArray
hgs
parents:
diff changeset
  2723
    iSyncSession.Close();
hgs
parents:
diff changeset
  2724
    iSyncSessionOpen = EFalse;
hgs
parents:
diff changeset
  2725
    return KErrNone;
hgs
parents:
diff changeset
  2726
	}
hgs
parents:
diff changeset
  2727
hgs
parents:
diff changeset
  2728
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2729
//  CNSmlDSSettingsAdapter::CreateURITaskSegmentListL
hgs
parents:
diff changeset
  2730
//  The function creates list of the content types that profile supports.
hgs
parents:
diff changeset
  2731
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2732
TInt CNSmlDSSettingsAdapter::CreateURITaskSegmentListL( const TDesC8& aURI, 
hgs
parents:
diff changeset
  2733
                                                        const TInt aPID, 
hgs
parents:
diff changeset
  2734
                                                        CBufBase*& aCurrentURISegmentList, 
hgs
parents:
diff changeset
  2735
                                                        const CArrayFix<TSmlDmMappingInfo>& aPreviousURISegmentList )
hgs
parents:
diff changeset
  2736
	{
hgs
parents:
diff changeset
  2737
	TInt retVal = OpenSyncSessionAndDSProfileL( aPID, ESmlOpenRead );
hgs
parents:
diff changeset
  2738
    if( retVal != KErrNone )
hgs
parents:
diff changeset
  2739
		{
hgs
parents:
diff changeset
  2740
		CloseDSProfile();
hgs
parents:
diff changeset
  2741
        return KErrGeneral;	
hgs
parents:
diff changeset
  2742
		}
hgs
parents:
diff changeset
  2743
    RArray<TSmlTaskId> taskIdArray;
hgs
parents:
diff changeset
  2744
    CleanupClosePushL( taskIdArray );
hgs
parents:
diff changeset
  2745
    iDSProfile.ListTasksL( taskIdArray );
hgs
parents:
diff changeset
  2746
	if( taskIdArray.Count() == 0 )
hgs
parents:
diff changeset
  2747
		{
hgs
parents:
diff changeset
  2748
		CloseDSProfile();
hgs
parents:
diff changeset
  2749
		CleanupStack::PopAndDestroy();//taskIdArray
hgs
parents:
diff changeset
  2750
    	return KErrNotFound;
hgs
parents:
diff changeset
  2751
		}
hgs
parents:
diff changeset
  2752
	
hgs
parents:
diff changeset
  2753
	RSyncMLTask task;
hgs
parents:
diff changeset
  2754
    CleanupClosePushL( task );
hgs
parents:
diff changeset
  2755
            
hgs
parents:
diff changeset
  2756
    for ( TInt i = 0; i < taskIdArray.Count(); i++ )
hgs
parents:
diff changeset
  2757
		{			
hgs
parents:
diff changeset
  2758
		//	
hgs
parents:
diff changeset
  2759
		//	Check if ContentType -> Task ID on list
hgs
parents:
diff changeset
  2760
		//
hgs
parents:
diff changeset
  2761
		TBool notInList( ETrue );
hgs
parents:
diff changeset
  2762
		TInt newline( 0 );
hgs
parents:
diff changeset
  2763
		TInt ddId( 0 );
hgs
parents:
diff changeset
  2764
		task.OpenL( iDSProfile, taskIdArray[i] );
hgs
parents:
diff changeset
  2765
        ddId = task.DataProvider();
hgs
parents:
diff changeset
  2766
        task.Close();
hgs
parents:
diff changeset
  2767
		while( notInList && newline <aPreviousURISegmentList.Count() )
hgs
parents:
diff changeset
  2768
			{
hgs
parents:
diff changeset
  2769
			TInt ppId = GetIntObject( aPreviousURISegmentList.At(newline).iURISegLUID );
hgs
parents:
diff changeset
  2770
			if( ppId == ddId )
hgs
parents:
diff changeset
  2771
				{
hgs
parents:
diff changeset
  2772
				notInList = EFalse;
hgs
parents:
diff changeset
  2773
				break;
hgs
parents:
diff changeset
  2774
				}
hgs
parents:
diff changeset
  2775
			newline++;
hgs
parents:
diff changeset
  2776
			}//while
hgs
parents:
diff changeset
  2777
hgs
parents:
diff changeset
  2778
		if( notInList )
hgs
parents:
diff changeset
  2779
			{
hgs
parents:
diff changeset
  2780
			TBuf8<9> addNAME( Kprev );
hgs
parents:
diff changeset
  2781
			//Get Task ID
hgs
parents:
diff changeset
  2782
			addNAME.AppendNumFixedWidth( taskIdArray[i], EDecimal,3 ); 
hgs
parents:
diff changeset
  2783
			aCurrentURISegmentList->InsertL( aCurrentURISegmentList->Size(), addNAME );
hgs
parents:
diff changeset
  2784
			aCurrentURISegmentList->InsertL( aCurrentURISegmentList->Size(), KNSmlDSSlash );
hgs
parents:
diff changeset
  2785
	
hgs
parents:
diff changeset
  2786
			TBuf8<80> addURI;
hgs
parents:
diff changeset
  2787
			
hgs
parents:
diff changeset
  2788
			addURI.Append( aURI );
hgs
parents:
diff changeset
  2789
			addURI.Append( Kprev2 );
hgs
parents:
diff changeset
  2790
			addURI.AppendNumFixedWidth( taskIdArray[i], EDecimal, 3 ); 
hgs
parents:
diff changeset
  2791
hgs
parents:
diff changeset
  2792
			TBuf8<16> addLUID;
hgs
parents:
diff changeset
  2793
			addLUID.Num( ddId );
hgs
parents:
diff changeset
  2794
				
hgs
parents:
diff changeset
  2795
			iCallBack->SetMappingL( addURI, addLUID );
hgs
parents:
diff changeset
  2796
			}
hgs
parents:
diff changeset
  2797
		else //not a new object
hgs
parents:
diff changeset
  2798
			{
hgs
parents:
diff changeset
  2799
			aCurrentURISegmentList->InsertL( aCurrentURISegmentList->Size(), 
hgs
parents:
diff changeset
  2800
                                            aPreviousURISegmentList.At(newline).iURISeg );
hgs
parents:
diff changeset
  2801
hgs
parents:
diff changeset
  2802
			aCurrentURISegmentList->InsertL( aCurrentURISegmentList->Size(), KNSmlDSSlash );
hgs
parents:
diff changeset
  2803
hgs
parents:
diff changeset
  2804
//			DBG_ARGS8(_S8("InList: Id = %d Name %S"), newline, 
hgs
parents:
diff changeset
  2805
//                            aPreviousURISegmentList.At(newline).iURISeg);
hgs
parents:
diff changeset
  2806
			}
hgs
parents:
diff changeset
  2807
		} //For
hgs
parents:
diff changeset
  2808
	CloseDSProfile();
hgs
parents:
diff changeset
  2809
	CleanupStack::PopAndDestroy(2);// task, taskIdArray
hgs
parents:
diff changeset
  2810
	return KErrNone;
hgs
parents:
diff changeset
  2811
	}
hgs
parents:
diff changeset
  2812
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2813
//  CNSmlDSSettingsAdapter::CreateURIProfileSegmentListL
hgs
parents:
diff changeset
  2814
//  The function creates list of the profiles.
hgs
parents:
diff changeset
  2815
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2816
TInt CNSmlDSSettingsAdapter::CreateURIProfileSegmentListL( CBufBase*& aCurrentURISegmentList, 
hgs
parents:
diff changeset
  2817
                                                            const CArrayFix<TSmlDmMappingInfo>& aPreviousURISegmentList )
hgs
parents:
diff changeset
  2818
	{
hgs
parents:
diff changeset
  2819
	if( iSyncSessionOpen == EFalse )
hgs
parents:
diff changeset
  2820
	    {
hgs
parents:
diff changeset
  2821
        iSyncSession.OpenL();
hgs
parents:
diff changeset
  2822
        iSyncSessionOpen = ETrue;
hgs
parents:
diff changeset
  2823
	    }
hgs
parents:
diff changeset
  2824
    RArray<TSmlProfileId> profileIdArray;
hgs
parents:
diff changeset
  2825
    CleanupClosePushL( profileIdArray );
hgs
parents:
diff changeset
  2826
	TSmlUsageType usageType = ESmlDataSync;
hgs
parents:
diff changeset
  2827
	iSyncSession.ListProfilesL( profileIdArray, usageType );
hgs
parents:
diff changeset
  2828
		
hgs
parents:
diff changeset
  2829
    if(profileIdArray.Count() == 0)
hgs
parents:
diff changeset
  2830
		{
hgs
parents:
diff changeset
  2831
        CleanupStack::PopAndDestroy();//profileIdArray
hgs
parents:
diff changeset
  2832
		return KErrNotFound;
hgs
parents:
diff changeset
  2833
		}
hgs
parents:
diff changeset
  2834
		
hgs
parents:
diff changeset
  2835
	for(TInt p = 0; p < profileIdArray.Count(); p++ )
hgs
parents:
diff changeset
  2836
		{
hgs
parents:
diff changeset
  2837
		TBool notInList = ETrue;
hgs
parents:
diff changeset
  2838
		TInt newline = 0;
hgs
parents:
diff changeset
  2839
		while( notInList && newline < aPreviousURISegmentList.Count() )
hgs
parents:
diff changeset
  2840
			{
hgs
parents:
diff changeset
  2841
				TInt ddId = profileIdArray[p];
hgs
parents:
diff changeset
  2842
				TInt ppId = GetIntObject( aPreviousURISegmentList.At(newline).iURISegLUID );
hgs
parents:
diff changeset
  2843
				if( ppId == ddId ) 
hgs
parents:
diff changeset
  2844
					{
hgs
parents:
diff changeset
  2845
					notInList = EFalse;
hgs
parents:
diff changeset
  2846
					break;
hgs
parents:
diff changeset
  2847
					}
hgs
parents:
diff changeset
  2848
				newline++;
hgs
parents:
diff changeset
  2849
			}
hgs
parents:
diff changeset
  2850
hgs
parents:
diff changeset
  2851
		if( notInList )
hgs
parents:
diff changeset
  2852
			{ // Those which not have mapping data
hgs
parents:
diff changeset
  2853
			
hgs
parents:
diff changeset
  2854
			TBuf8<9> addNAME( KDSprev );
hgs
parents:
diff changeset
  2855
			addNAME.AppendNumFixedWidth( profileIdArray[p], EDecimal, 3 ); 
hgs
parents:
diff changeset
  2856
hgs
parents:
diff changeset
  2857
			aCurrentURISegmentList->InsertL( aCurrentURISegmentList->Size(), addNAME );
hgs
parents:
diff changeset
  2858
			aCurrentURISegmentList->InsertL( aCurrentURISegmentList->Size(), KNSmlDSSlash );
hgs
parents:
diff changeset
  2859
            
hgs
parents:
diff changeset
  2860
			// KNSmlDSStart includes start text for URISeg
hgs
parents:
diff changeset
  2861
			TBuf8<20> addURI; // SyncML/DSAcc/DSIdnnn , nnn = profileid
hgs
parents:
diff changeset
  2862
			addURI.Append( KNSmlDSStart );
hgs
parents:
diff changeset
  2863
			addURI.AppendNumFixedWidth( profileIdArray[p], EDecimal, 3 ); 
hgs
parents:
diff changeset
  2864
			
hgs
parents:
diff changeset
  2865
			TBuf8<16> addLUID;
hgs
parents:
diff changeset
  2866
			addLUID.Num( profileIdArray[p] );
hgs
parents:
diff changeset
  2867
			
hgs
parents:
diff changeset
  2868
			iCallBack->SetMappingL( addURI,addLUID );
hgs
parents:
diff changeset
  2869
            }
hgs
parents:
diff changeset
  2870
		else
hgs
parents:
diff changeset
  2871
			{ // Add those in PreviousList which are on database
hgs
parents:
diff changeset
  2872
			aCurrentURISegmentList->InsertL( aCurrentURISegmentList->Size(), 
hgs
parents:
diff changeset
  2873
                                            aPreviousURISegmentList.At(newline).iURISeg );
hgs
parents:
diff changeset
  2874
hgs
parents:
diff changeset
  2875
			aCurrentURISegmentList->InsertL( aCurrentURISegmentList->Size(), KNSmlDSSlash );
hgs
parents:
diff changeset
  2876
//			DBG_ARGS8(_S8("InList: Id = %d Name %S"), newline, 
hgs
parents:
diff changeset
  2877
//                           aPreviousURISegmentList.At(newline).iURISeg);
hgs
parents:
diff changeset
  2878
			}
hgs
parents:
diff changeset
  2879
		}
hgs
parents:
diff changeset
  2880
    CleanupStack::PopAndDestroy();//profileIdArray
hgs
parents:
diff changeset
  2881
	return KErrNone;
hgs
parents:
diff changeset
  2882
	}
hgs
parents:
diff changeset
  2883
hgs
parents:
diff changeset
  2884
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2885
//  CNSmlDSSettingsAdapter::OpenSyncSessionAndDSProfileL
hgs
parents:
diff changeset
  2886
//  The function opens the server session and DS profile.
hgs
parents:
diff changeset
  2887
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2888
TInt CNSmlDSSettingsAdapter::OpenSyncSessionAndDSProfileL( const TInt aIntLUID, 
hgs
parents:
diff changeset
  2889
                                                            TSmlOpenMode aMode )
hgs
parents:
diff changeset
  2890
    {
hgs
parents:
diff changeset
  2891
    if( iSyncSessionOpen == EFalse )
hgs
parents:
diff changeset
  2892
        {
hgs
parents:
diff changeset
  2893
        iSyncSession.OpenL();
hgs
parents:
diff changeset
  2894
        iSyncSessionOpen = ETrue;
hgs
parents:
diff changeset
  2895
        }
hgs
parents:
diff changeset
  2896
    RArray<TSmlProfileId> profileIdArray;
hgs
parents:
diff changeset
  2897
    CleanupClosePushL( profileIdArray );
hgs
parents:
diff changeset
  2898
    TSmlUsageType usageType = ESmlDataSync;
hgs
parents:
diff changeset
  2899
    iSyncSession.ListProfilesL( profileIdArray, usageType );
hgs
parents:
diff changeset
  2900
    TInt index = profileIdArray.Find( aIntLUID );
hgs
parents:
diff changeset
  2901
    CleanupStack::PopAndDestroy(); //profileIdArray
hgs
parents:
diff changeset
  2902
    if( index == KErrNotFound )
hgs
parents:
diff changeset
  2903
        {
hgs
parents:
diff changeset
  2904
        return KErrNotFound;
hgs
parents:
diff changeset
  2905
        }
hgs
parents:
diff changeset
  2906
    TRAPD( rValue, iDSProfile.OpenL( iSyncSession, aIntLUID, aMode ) );
hgs
parents:
diff changeset
  2907
    if( rValue != KErrNone )
hgs
parents:
diff changeset
  2908
        {
hgs
parents:
diff changeset
  2909
        iDSProfile.Close();
hgs
parents:
diff changeset
  2910
		iSyncSession.Close();
hgs
parents:
diff changeset
  2911
        iSyncSessionOpen = EFalse;
hgs
parents:
diff changeset
  2912
        }
hgs
parents:
diff changeset
  2913
    return rValue;
hgs
parents:
diff changeset
  2914
    }
hgs
parents:
diff changeset
  2915
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2916
//  CNSmlDSSettingsAdapter::CloseDSProfile
hgs
parents:
diff changeset
  2917
//  The function closes the DS profile connection.
hgs
parents:
diff changeset
  2918
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2919
void CNSmlDSSettingsAdapter::CloseDSProfile()
hgs
parents:
diff changeset
  2920
    {
hgs
parents:
diff changeset
  2921
    iDSProfile.Close();
hgs
parents:
diff changeset
  2922
    }
hgs
parents:
diff changeset
  2923
hgs
parents:
diff changeset
  2924
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2925
//  CNSmlDSSettingsAdapter::FindTaskIDL
hgs
parents:
diff changeset
  2926
//  The function searches if task can be found from the profile task list.
hgs
parents:
diff changeset
  2927
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2928
TBool CNSmlDSSettingsAdapter::FindTaskIDL( const TInt aProfLUID, const TInt aDataProviderId )
hgs
parents:
diff changeset
  2929
    {
hgs
parents:
diff changeset
  2930
    TInt retVal = OpenSyncSessionAndDSProfileL( aProfLUID, ESmlOpenRead );
hgs
parents:
diff changeset
  2931
    if( retVal != KErrNone )
hgs
parents:
diff changeset
  2932
		{
hgs
parents:
diff changeset
  2933
		CloseDSProfile();
hgs
parents:
diff changeset
  2934
        return EFalse;	
hgs
parents:
diff changeset
  2935
		}
hgs
parents:
diff changeset
  2936
    RArray<TSmlTaskId> taskIdArray;
hgs
parents:
diff changeset
  2937
    CleanupClosePushL( taskIdArray );//taskIdArray
hgs
parents:
diff changeset
  2938
    iDSProfile.ListTasksL( taskIdArray );
hgs
parents:
diff changeset
  2939
    
hgs
parents:
diff changeset
  2940
    RSyncMLTask task;
hgs
parents:
diff changeset
  2941
    CleanupClosePushL( task );
hgs
parents:
diff changeset
  2942
    // find task
hgs
parents:
diff changeset
  2943
    for (TInt i=0; i<taskIdArray.Count(); i++)
hgs
parents:
diff changeset
  2944
        {
hgs
parents:
diff changeset
  2945
        task.OpenL( iDSProfile, taskIdArray[i] );
hgs
parents:
diff changeset
  2946
        if (task.DataProvider() == aDataProviderId)
hgs
parents:
diff changeset
  2947
            {
hgs
parents:
diff changeset
  2948
            CleanupStack::PopAndDestroy(2); //taskIdArray, task
hgs
parents:
diff changeset
  2949
            CloseDSProfile();
hgs
parents:
diff changeset
  2950
            return ETrue;
hgs
parents:
diff changeset
  2951
            }
hgs
parents:
diff changeset
  2952
        task.Close();
hgs
parents:
diff changeset
  2953
        }
hgs
parents:
diff changeset
  2954
    // task not found
hgs
parents:
diff changeset
  2955
    CleanupStack::PopAndDestroy(2); //taskIdArray, task
hgs
parents:
diff changeset
  2956
    CloseDSProfile();
hgs
parents:
diff changeset
  2957
    return EFalse;
hgs
parents:
diff changeset
  2958
    }
hgs
parents:
diff changeset
  2959
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2960
//  CNSmlDSSettingsAdapter::DeleteTaskByIDL
hgs
parents:
diff changeset
  2961
//  The function deletes the task by given id.
hgs
parents:
diff changeset
  2962
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2963
TInt CNSmlDSSettingsAdapter::DeleteTaskByIDL( const TInt aLUID, const TInt aDataProviderId )
hgs
parents:
diff changeset
  2964
    {
hgs
parents:
diff changeset
  2965
    TInt retVal = OpenSyncSessionAndDSProfileL( aLUID, ESmlOpenReadWrite );
hgs
parents:
diff changeset
  2966
    if( retVal != KErrNone )
hgs
parents:
diff changeset
  2967
		{
hgs
parents:
diff changeset
  2968
		CloseDSProfile();
hgs
parents:
diff changeset
  2969
        return retVal;	
hgs
parents:
diff changeset
  2970
		}
hgs
parents:
diff changeset
  2971
    RArray<TSmlTaskId> taskIdArray;
hgs
parents:
diff changeset
  2972
    CleanupClosePushL( taskIdArray );
hgs
parents:
diff changeset
  2973
    iDSProfile.ListTasksL( taskIdArray );
hgs
parents:
diff changeset
  2974
    
hgs
parents:
diff changeset
  2975
    RSyncMLTask task;
hgs
parents:
diff changeset
  2976
    CleanupClosePushL( task );
hgs
parents:
diff changeset
  2977
    // find task
hgs
parents:
diff changeset
  2978
    for (TInt i=0; i<taskIdArray.Count(); i++)
hgs
parents:
diff changeset
  2979
        {
hgs
parents:
diff changeset
  2980
        task.OpenL( iDSProfile, taskIdArray[i] );
hgs
parents:
diff changeset
  2981
        if (task.DataProvider() == aDataProviderId)
hgs
parents:
diff changeset
  2982
            {
hgs
parents:
diff changeset
  2983
            task.Close();
hgs
parents:
diff changeset
  2984
            CleanupStack::PopAndDestroy(); // task
hgs
parents:
diff changeset
  2985
            iDSProfile.DeleteTaskL( taskIdArray[i] );
hgs
parents:
diff changeset
  2986
            iDSProfile.UpdateL();
hgs
parents:
diff changeset
  2987
            CleanupStack::PopAndDestroy(); //taskIdArray
hgs
parents:
diff changeset
  2988
            CloseDSProfile();
hgs
parents:
diff changeset
  2989
            return KErrNone;
hgs
parents:
diff changeset
  2990
            }
hgs
parents:
diff changeset
  2991
        task.Close();
hgs
parents:
diff changeset
  2992
        }
hgs
parents:
diff changeset
  2993
    // task not found
hgs
parents:
diff changeset
  2994
    CleanupStack::PopAndDestroy(2); //taskIdArray, task
hgs
parents:
diff changeset
  2995
    CloseDSProfile();
hgs
parents:
diff changeset
  2996
    return KErrNotFound;
hgs
parents:
diff changeset
  2997
    }
hgs
parents:
diff changeset
  2998
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2999
//  CNSmlDSSettingsAdapter::GetClientDataSourceL
hgs
parents:
diff changeset
  3000
//  The function gets the local data store (LDBURI).
hgs
parents:
diff changeset
  3001
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3002
TInt CNSmlDSSettingsAdapter::GetClientDataSourceL( const TInt aDataProviderId, 
hgs
parents:
diff changeset
  3003
                                                    const TInt aProfileLUID, 
hgs
parents:
diff changeset
  3004
                                                    CBufBase*& aObject )
hgs
parents:
diff changeset
  3005
    {
hgs
parents:
diff changeset
  3006
    TInt retVal = OpenSyncSessionAndDSProfileL( aProfileLUID, ESmlOpenRead );
hgs
parents:
diff changeset
  3007
    if( retVal != KErrNone )
hgs
parents:
diff changeset
  3008
		{
hgs
parents:
diff changeset
  3009
		CloseDSProfile();
hgs
parents:
diff changeset
  3010
        return retVal;	
hgs
parents:
diff changeset
  3011
		}
hgs
parents:
diff changeset
  3012
    RArray<TSmlTaskId> taskArray;
hgs
parents:
diff changeset
  3013
    CleanupClosePushL( taskArray );
hgs
parents:
diff changeset
  3014
    iDSProfile.ListTasksL( taskArray );
hgs
parents:
diff changeset
  3015
    
hgs
parents:
diff changeset
  3016
    RSyncMLTask task;
hgs
parents:
diff changeset
  3017
    CleanupClosePushL( task );
hgs
parents:
diff changeset
  3018
    // find task
hgs
parents:
diff changeset
  3019
    for (TInt i=0; i<taskArray.Count(); i++)
hgs
parents:
diff changeset
  3020
        {
hgs
parents:
diff changeset
  3021
        task.OpenL( iDSProfile, taskArray[i] );
hgs
parents:
diff changeset
  3022
        if (task.DataProvider() == aDataProviderId)
hgs
parents:
diff changeset
  3023
            {
hgs
parents:
diff changeset
  3024
            HBufC* localDataStore = task.ClientDataSource().AllocLC();
hgs
parents:
diff changeset
  3025
            aObject->InsertL( aObject->Size(), ConvertTo8LC( *localDataStore ) );
hgs
parents:
diff changeset
  3026
            CloseDSProfile();
hgs
parents:
diff changeset
  3027
            CleanupStack::PopAndDestroy(4); //taskIdArray, task, localDataStore, ConvertTo8LC
hgs
parents:
diff changeset
  3028
            
hgs
parents:
diff changeset
  3029
            return KErrNone;
hgs
parents:
diff changeset
  3030
            }
hgs
parents:
diff changeset
  3031
        task.Close();
hgs
parents:
diff changeset
  3032
        }
hgs
parents:
diff changeset
  3033
    // task not found
hgs
parents:
diff changeset
  3034
    CleanupStack::PopAndDestroy(2); //taskArray, task
hgs
parents:
diff changeset
  3035
    CloseDSProfile();
hgs
parents:
diff changeset
  3036
    return KErrNotFound;
hgs
parents:
diff changeset
  3037
    }
hgs
parents:
diff changeset
  3038
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3039
//  CNSmlDSSettingsAdapter::GetServerDataSourceL
hgs
parents:
diff changeset
  3040
//  The function gets the remote data store (RDBURI).
hgs
parents:
diff changeset
  3041
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3042
TInt CNSmlDSSettingsAdapter::GetServerDataSourceL( const TInt aDataProviderId, 
hgs
parents:
diff changeset
  3043
                                                    const TInt aProfileLUID, 
hgs
parents:
diff changeset
  3044
                                                    CBufBase*& aObject )
hgs
parents:
diff changeset
  3045
    {
hgs
parents:
diff changeset
  3046
    TInt retVal = OpenSyncSessionAndDSProfileL( aProfileLUID, ESmlOpenRead );
hgs
parents:
diff changeset
  3047
    if( retVal != KErrNone )
hgs
parents:
diff changeset
  3048
		{
hgs
parents:
diff changeset
  3049
		CloseDSProfile();
hgs
parents:
diff changeset
  3050
        return retVal;	
hgs
parents:
diff changeset
  3051
		}
hgs
parents:
diff changeset
  3052
    RArray<TSmlTaskId> taskArray;
hgs
parents:
diff changeset
  3053
    CleanupClosePushL( taskArray );
hgs
parents:
diff changeset
  3054
    iDSProfile.ListTasksL( taskArray );
hgs
parents:
diff changeset
  3055
    
hgs
parents:
diff changeset
  3056
    RSyncMLTask task;
hgs
parents:
diff changeset
  3057
    CleanupClosePushL( task );
hgs
parents:
diff changeset
  3058
    // find task
hgs
parents:
diff changeset
  3059
    for (TInt i=0; i<taskArray.Count(); i++)
hgs
parents:
diff changeset
  3060
        {
hgs
parents:
diff changeset
  3061
        task.OpenL( iDSProfile, taskArray[i] );
hgs
parents:
diff changeset
  3062
        if (task.DataProvider() == aDataProviderId)
hgs
parents:
diff changeset
  3063
            {
hgs
parents:
diff changeset
  3064
            HBufC* serverDataStore = task.ServerDataSource().AllocLC();
hgs
parents:
diff changeset
  3065
            aObject->InsertL( aObject->Size(), ConvertTo8LC( *serverDataStore ) );
hgs
parents:
diff changeset
  3066
            CloseDSProfile();
hgs
parents:
diff changeset
  3067
            CleanupStack::PopAndDestroy(4); //taskIdArray, task, serverDataStore, ConvertTo8LC
hgs
parents:
diff changeset
  3068
            
hgs
parents:
diff changeset
  3069
            return KErrNone;
hgs
parents:
diff changeset
  3070
            }
hgs
parents:
diff changeset
  3071
        task.Close();
hgs
parents:
diff changeset
  3072
        }
hgs
parents:
diff changeset
  3073
    // task not found
hgs
parents:
diff changeset
  3074
    CleanupStack::PopAndDestroy(2); //taskIdArray, task
hgs
parents:
diff changeset
  3075
    CloseDSProfile();
hgs
parents:
diff changeset
  3076
    return KErrNotFound;
hgs
parents:
diff changeset
  3077
    }
hgs
parents:
diff changeset
  3078
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3079
//  CNSmlDSSettingsAdapter::UpdateDataSourceL
hgs
parents:
diff changeset
  3080
//  The function updates the LDBURI or RDBURI leaf value.
hgs
parents:
diff changeset
  3081
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3082
TInt CNSmlDSSettingsAdapter::UpdateDataSourceL( const TInt aProfileLUID, 
hgs
parents:
diff changeset
  3083
                                                const TInt aDataProviderId, 
hgs
parents:
diff changeset
  3084
                                                const TDesC8& aObject, 
hgs
parents:
diff changeset
  3085
                                                const HBufC8& aField)
hgs
parents:
diff changeset
  3086
    {
hgs
parents:
diff changeset
  3087
    // check that aField is RemoteDB or LocalDB
hgs
parents:
diff changeset
  3088
    if( aField.Compare( KNSmlDdfRDBURI ) != 0 && aField.Compare( KNSmlDdfLDBURI ) != 0)
hgs
parents:
diff changeset
  3089
        {
hgs
parents:
diff changeset
  3090
        return KErrGeneral;
hgs
parents:
diff changeset
  3091
        }
hgs
parents:
diff changeset
  3092
    
hgs
parents:
diff changeset
  3093
    TInt retVal = OpenSyncSessionAndDSProfileL( aProfileLUID, ESmlOpenReadWrite );
hgs
parents:
diff changeset
  3094
    if( retVal != KErrNone )
hgs
parents:
diff changeset
  3095
		{
hgs
parents:
diff changeset
  3096
		CloseDSProfile();
hgs
parents:
diff changeset
  3097
        return retVal;	
hgs
parents:
diff changeset
  3098
		}
hgs
parents:
diff changeset
  3099
    RArray<TSmlTaskId> taskArray;
hgs
parents:
diff changeset
  3100
    CleanupClosePushL( taskArray );
hgs
parents:
diff changeset
  3101
    iDSProfile.ListTasksL( taskArray );
hgs
parents:
diff changeset
  3102
    
hgs
parents:
diff changeset
  3103
    RSyncMLTask task;
hgs
parents:
diff changeset
  3104
    CleanupClosePushL( task );
hgs
parents:
diff changeset
  3105
    // find correct task
hgs
parents:
diff changeset
  3106
    for (TInt i=0; i<taskArray.Count(); i++)
hgs
parents:
diff changeset
  3107
        {
hgs
parents:
diff changeset
  3108
        task.OpenL( iDSProfile, taskArray[i] );
hgs
parents:
diff changeset
  3109
        if (task.DataProvider() == aDataProviderId)
hgs
parents:
diff changeset
  3110
            {
hgs
parents:
diff changeset
  3111
            // task found, get current localDataStore and remoteDataStore
hgs
parents:
diff changeset
  3112
            HBufC* localDataStore = task.ClientDataSource().AllocLC();
hgs
parents:
diff changeset
  3113
            HBufC* remoteDataStore = task.ServerDataSource().AllocLC();
hgs
parents:
diff changeset
  3114
            task.Close();
hgs
parents:
diff changeset
  3115
            
hgs
parents:
diff changeset
  3116
            HBufC16* objectBuffer = HBufC16::NewLC( aObject.Size() );
hgs
parents:
diff changeset
  3117
            TPtr16 ptrDataObject = objectBuffer->Des();
hgs
parents:
diff changeset
  3118
            CnvUtfConverter::ConvertToUnicodeFromUtf8( ptrDataObject, aObject );
hgs
parents:
diff changeset
  3119
            iDSProfile.DeleteTaskL( taskArray[i] );
hgs
parents:
diff changeset
  3120
            iDSProfile.UpdateL();
hgs
parents:
diff changeset
  3121
            
hgs
parents:
diff changeset
  3122
            // create new task with new values
hgs
parents:
diff changeset
  3123
            RSyncMLTask newTask;
hgs
parents:
diff changeset
  3124
            CleanupClosePushL( newTask );
hgs
parents:
diff changeset
  3125
            if( aField.Compare( KNSmlDdfRDBURI ) == 0 ) //Remote DB, Mandatory
hgs
parents:
diff changeset
  3126
                {
hgs
parents:
diff changeset
  3127
                newTask.CreateL( iDSProfile, aDataProviderId, ptrDataObject, *localDataStore );
hgs
parents:
diff changeset
  3128
                }
hgs
parents:
diff changeset
  3129
            else if( aField.Compare( KNSmlDdfLDBURI ) == 0 )
hgs
parents:
diff changeset
  3130
                {
hgs
parents:
diff changeset
  3131
                newTask.CreateL( iDSProfile, aDataProviderId, *remoteDataStore, ptrDataObject );
hgs
parents:
diff changeset
  3132
                }
hgs
parents:
diff changeset
  3133
            newTask.UpdateL();
hgs
parents:
diff changeset
  3134
            
hgs
parents:
diff changeset
  3135
            CloseDSProfile();
hgs
parents:
diff changeset
  3136
            CleanupStack::PopAndDestroy( 6 ); //taskArray, task, localDataStore, 
hgs
parents:
diff changeset
  3137
                                            //remoteDataStore, objectBuffer, newTask
hgs
parents:
diff changeset
  3138
            return retVal;
hgs
parents:
diff changeset
  3139
            }
hgs
parents:
diff changeset
  3140
        task.Close();
hgs
parents:
diff changeset
  3141
        }
hgs
parents:
diff changeset
  3142
    // task not found
hgs
parents:
diff changeset
  3143
    CleanupStack::PopAndDestroy(2);//taskArray, task
hgs
parents:
diff changeset
  3144
    CloseDSProfile();
hgs
parents:
diff changeset
  3145
    return KErrNotFound;
hgs
parents:
diff changeset
  3146
    }
hgs
parents:
diff changeset
  3147
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3148
//  CNSmlDSSettingsAdapter::FetchObjectL
hgs
parents:
diff changeset
  3149
//  The function fetches the requested leaf object data.
hgs
parents:
diff changeset
  3150
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3151
TInt CNSmlDSSettingsAdapter::FetchObjectL( const TDesC8& aURI, const TDesC8& aLUID, 
hgs
parents:
diff changeset
  3152
                                            CBufBase*& aObj, const TInt aStatusRef )
hgs
parents:
diff changeset
  3153
	{
hgs
parents:
diff changeset
  3154
	_DBG_FILE("CNSmlDSSettingsAdapter::FetchObjectL(): begin");
hgs
parents:
diff changeset
  3155
//
hgs
parents:
diff changeset
  3156
	DBG_ARGS(_S16("DS:Fetch aURI    - %S - %S"), &aURI, &aLUID);
hgs
parents:
diff changeset
  3157
hgs
parents:
diff changeset
  3158
    TInt retVal = KErrNone;
hgs
parents:
diff changeset
  3159
    TInt profileLUID = -1;
hgs
parents:
diff changeset
  3160
hgs
parents:
diff changeset
  3161
	iLUID = IntLUID( aLUID );
hgs
parents:
diff changeset
  3162
hgs
parents:
diff changeset
  3163
    if ( aLUID.Length() > 0 && 
hgs
parents:
diff changeset
  3164
	   ( aURI.Match( KCTTypeMatch ) != KErrNotFound ||
hgs
parents:
diff changeset
  3165
	    aURI.Match( KRDBUriMatch ) != KErrNotFound ||
hgs
parents:
diff changeset
  3166
	    aURI.Match( KLDBUriMatch ) != KErrNotFound ) )
hgs
parents:
diff changeset
  3167
	   {
hgs
parents:
diff changeset
  3168
		profileLUID = GetProfileIdFromURIL( aURI ); // ProfileId for DB-level
hgs
parents:
diff changeset
  3169
        if( FindTaskIDL( profileLUID, iLUID ) == EFalse )
hgs
parents:
diff changeset
  3170
            {
hgs
parents:
diff changeset
  3171
            _DBG_FILE("CNSmlDSSettingsAdapter::FetchObjectL(): ENotFound end");
hgs
parents:
diff changeset
  3172
			iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
hgs
parents:
diff changeset
  3173
			return KErrNotFound;
hgs
parents:
diff changeset
  3174
			}
hgs
parents:
diff changeset
  3175
        }
hgs
parents:
diff changeset
  3176
	else if ( aLUID.Length() > 0 ) //Profile
hgs
parents:
diff changeset
  3177
		{
hgs
parents:
diff changeset
  3178
		TInt profileID = -1; 
hgs
parents:
diff changeset
  3179
        TInt retValue = GetProfileIdentifierL( iLUID, profileID );
hgs
parents:
diff changeset
  3180
		if( retValue != KErrNone || profileID < 0 )
hgs
parents:
diff changeset
  3181
			{
hgs
parents:
diff changeset
  3182
			_DBG_FILE("CNSmlDSSettingsAdapter::FetchObjectL(): ENotFound end");
hgs
parents:
diff changeset
  3183
			iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
hgs
parents:
diff changeset
  3184
			return KErrNotFound;
hgs
parents:
diff changeset
  3185
			}
hgs
parents:
diff changeset
  3186
		iLUID = profileID;
hgs
parents:
diff changeset
  3187
		}
hgs
parents:
diff changeset
  3188
	else
hgs
parents:
diff changeset
  3189
		{
hgs
parents:
diff changeset
  3190
		// Static node feature start
hgs
parents:
diff changeset
  3191
		iLUID = -1;
hgs
parents:
diff changeset
  3192
		if( IsDSAccUriFormatMatchPredefined(aURI) )
hgs
parents:
diff changeset
  3193
    	{
hgs
parents:
diff changeset
  3194
    		iLUID = ConstructTreeL(aURI);
hgs
parents:
diff changeset
  3195
    		profileLUID = GetProfileIdFromURIL( aURI ); 
hgs
parents:
diff changeset
  3196
    	}
hgs
parents:
diff changeset
  3197
    	
hgs
parents:
diff changeset
  3198
    	if ((iLUID == 0 ) && (aURI.Match(_L8("SyncML/DSAcc/DSId*/DB/CTId*"))  == KErrNone))
hgs
parents:
diff changeset
  3199
		{
hgs
parents:
diff changeset
  3200
		_DBG_FILE("CNSmlDSSettingsAdapter::FetchObjectL(): ENotFound end");
hgs
parents:
diff changeset
  3201
		iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
hgs
parents:
diff changeset
  3202
		return KErrNotFound;
hgs
parents:
diff changeset
  3203
    	}
hgs
parents:
diff changeset
  3204
		// Static node feature end
hgs
parents:
diff changeset
  3205
		}
hgs
parents:
diff changeset
  3206
hgs
parents:
diff changeset
  3207
	SetField( aURI );
hgs
parents:
diff changeset
  3208
//
hgs
parents:
diff changeset
  3209
//	Check if valid field
hgs
parents:
diff changeset
  3210
//
hgs
parents:
diff changeset
  3211
/*	if( !AcceptDSField() )
hgs
parents:
diff changeset
  3212
		{
hgs
parents:
diff changeset
  3213
		_DBG_FILE("CNSmlDSSettingsAdapter::FetchObjectL(): EInvalidObject end");
hgs
parents:
diff changeset
  3214
		iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EInvalidObject );
hgs
parents:
diff changeset
  3215
		return KErrGeneral;
hgs
parents:
diff changeset
  3216
		}
hgs
parents:
diff changeset
  3217
*/
hgs
parents:
diff changeset
  3218
//
hgs
parents:
diff changeset
  3219
//	Check which field going to be handled
hgs
parents:
diff changeset
  3220
//
hgs
parents:
diff changeset
  3221
    TInt fType = GetDSFieldTypeL();
hgs
parents:
diff changeset
  3222
    if ( fType == EInt || fType == EStr )
hgs
parents:
diff changeset
  3223
		{
hgs
parents:
diff changeset
  3224
		retVal = GetDSFieldDataL( iLUID, aObj );
hgs
parents:
diff changeset
  3225
        }
hgs
parents:
diff changeset
  3226
	else if ( fType == EParam )
hgs
parents:
diff changeset
  3227
		{ // DB and CTType (dataprovider info / MIME type)
hgs
parents:
diff changeset
  3228
		  // RDBURI + LDBURI (dataprovider data paths)
hgs
parents:
diff changeset
  3229
	    if( iField->Compare( KNSmlDdfCTType ) == 0 )
hgs
parents:
diff changeset
  3230
		    {
hgs
parents:
diff changeset
  3231
		    retVal = GetContentTypeL( iLUID, profileLUID, aObj );
hgs
parents:
diff changeset
  3232
		    }
hgs
parents:
diff changeset
  3233
        else if( iField->Compare( KNSmlDdfLDBURI ) == 0 ) // Local database (optional)
hgs
parents:
diff changeset
  3234
			{
hgs
parents:
diff changeset
  3235
			//ClientDataSource
hgs
parents:
diff changeset
  3236
            retVal = GetClientDataSourceL( iLUID, profileLUID, aObj );
hgs
parents:
diff changeset
  3237
            }
hgs
parents:
diff changeset
  3238
		else if( iField->Compare( KNSmlDdfRDBURI ) == 0 ) // Remote database 
hgs
parents:
diff changeset
  3239
			{
hgs
parents:
diff changeset
  3240
            //ServerDataSource
hgs
parents:
diff changeset
  3241
		    retVal = GetServerDataSourceL( iLUID, profileLUID, aObj );
hgs
parents:
diff changeset
  3242
            }
hgs
parents:
diff changeset
  3243
		}
hgs
parents:
diff changeset
  3244
	else 
hgs
parents:
diff changeset
  3245
		{
hgs
parents:
diff changeset
  3246
		_DBG_FILE("CNSmlDSSettingsAdapter::FetchObjectL(): Unknown type end");
hgs
parents:
diff changeset
  3247
		iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
hgs
parents:
diff changeset
  3248
		return KErrNotFound;
hgs
parents:
diff changeset
  3249
		}
hgs
parents:
diff changeset
  3250
    if( retVal != KErrNone )
hgs
parents:
diff changeset
  3251
        {
hgs
parents:
diff changeset
  3252
        if ( retVal == KErrNotFound )
hgs
parents:
diff changeset
  3253
            {
hgs
parents:
diff changeset
  3254
			_DBG_FILE("CNSmlDSSettingsAdapter::FetchObjectL(): ENotFound end");
hgs
parents:
diff changeset
  3255
			iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
hgs
parents:
diff changeset
  3256
            }
hgs
parents:
diff changeset
  3257
        else
hgs
parents:
diff changeset
  3258
            {
hgs
parents:
diff changeset
  3259
			_DBG_FILE("CNSmlDSSettingsAdapter::FetchObjectL(): retVal != KErrNone");
hgs
parents:
diff changeset
  3260
            iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError );        
hgs
parents:
diff changeset
  3261
            }            
hgs
parents:
diff changeset
  3262
        }
hgs
parents:
diff changeset
  3263
    return retVal;
hgs
parents:
diff changeset
  3264
    
hgs
parents:
diff changeset
  3265
	}
hgs
parents:
diff changeset
  3266
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3267
//  CNSmlDSSettingsAdapter::FillNodeInfoL
hgs
parents:
diff changeset
  3268
//  The function fills the node or leaf information.
hgs
parents:
diff changeset
  3269
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3270
void CNSmlDSSettingsAdapter::FillNodeInfoL( MSmlDmDDFObject& aNode, 
hgs
parents:
diff changeset
  3271
                                            TSmlDmAccessTypes aAccTypes, 
hgs
parents:
diff changeset
  3272
                                            MSmlDmDDFObject::TOccurence aOccurrence, 
hgs
parents:
diff changeset
  3273
                                            MSmlDmDDFObject::TScope aScope, 
hgs
parents:
diff changeset
  3274
                                            MSmlDmDDFObject::TDFFormat aFormat, 
hgs
parents:
diff changeset
  3275
                                            const TDesC8& aDescription, 
hgs
parents:
diff changeset
  3276
                                            const TDesC8& aDefaultValue, 
hgs
parents:
diff changeset
  3277
                                            const TDesC8& aMimeType )
hgs
parents:
diff changeset
  3278
    {
hgs
parents:
diff changeset
  3279
    aNode.AddDFTypeMimeTypeL( aMimeType );
hgs
parents:
diff changeset
  3280
    aNode.SetAccessTypesL( aAccTypes );
hgs
parents:
diff changeset
  3281
	aNode.SetDescriptionL( aDescription );
hgs
parents:
diff changeset
  3282
	aNode.SetOccurenceL( aOccurrence );
hgs
parents:
diff changeset
  3283
	aNode.SetDefaultValueL( aDefaultValue );
hgs
parents:
diff changeset
  3284
	aNode.SetScopeL( aScope );
hgs
parents:
diff changeset
  3285
	aNode.SetDFFormatL( aFormat );
hgs
parents:
diff changeset
  3286
    return;
hgs
parents:
diff changeset
  3287
    }
hgs
parents:
diff changeset
  3288
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3289
//  CNSmlDSSettingsAdapter::SetProfileAddrTypeL
hgs
parents:
diff changeset
  3290
//  The function sets the medium type for a profile.
hgs
parents:
diff changeset
  3291
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3292
TInt CNSmlDSSettingsAdapter::SetProfileAddrTypeL( const TInt aLUID, 
hgs
parents:
diff changeset
  3293
                                                    const TInt aIntObj )
hgs
parents:
diff changeset
  3294
    {
hgs
parents:
diff changeset
  3295
    _DBG_FILE("CNSmlDSSettingsAdapter::SetProfileAddrTypeL(): begin");
hgs
parents:
diff changeset
  3296
    TInt retVal = OpenSyncSessionAndDSProfileL( aLUID, ESmlOpenReadWrite );
hgs
parents:
diff changeset
  3297
    if( retVal != KErrNone )
hgs
parents:
diff changeset
  3298
		{
hgs
parents:
diff changeset
  3299
		CloseDSProfile();
hgs
parents:
diff changeset
  3300
        _DBG_FILE("CNSmlDSSettingsAdapter::SetProfileAddrTypeL(): end");
hgs
parents:
diff changeset
  3301
        return retVal;	
hgs
parents:
diff changeset
  3302
		}
hgs
parents:
diff changeset
  3303
    TSmlTransportId mediumType = ENone;
hgs
parents:
diff changeset
  3304
    GetMediumTypeL( aIntObj, mediumType );
hgs
parents:
diff changeset
  3305
    if( mediumType == ENone )
hgs
parents:
diff changeset
  3306
        {
hgs
parents:
diff changeset
  3307
        return KErrGeneral;
hgs
parents:
diff changeset
  3308
        }
hgs
parents:
diff changeset
  3309
    RArray<TSmlTransportId> transportIdArray;
hgs
parents:
diff changeset
  3310
    CleanupClosePushL( transportIdArray );
hgs
parents:
diff changeset
  3311
    iDSProfile.ListConnectionsL( transportIdArray );
hgs
parents:
diff changeset
  3312
hgs
parents:
diff changeset
  3313
    RSyncMLConnection conn;
hgs
parents:
diff changeset
  3314
    conn.OpenL( iDSProfile, transportIdArray[0] );
hgs
parents:
diff changeset
  3315
    CleanupClosePushL( conn );
hgs
parents:
diff changeset
  3316
hgs
parents:
diff changeset
  3317
    HBufC8* sURI = conn.ServerURI().AllocLC();
hgs
parents:
diff changeset
  3318
    if(mediumType!=transportIdArray[0])
hgs
parents:
diff changeset
  3319
        {
hgs
parents:
diff changeset
  3320
        conn.CreateL( iDSProfile, mediumType ); //changes medium type and clears the buffer
hgs
parents:
diff changeset
  3321
        }
hgs
parents:
diff changeset
  3322
        
hgs
parents:
diff changeset
  3323
    if(mediumType!=KUidNSmlMediumTypeInternet.iUid && sURI->Length() > 0)
hgs
parents:
diff changeset
  3324
        {
hgs
parents:
diff changeset
  3325
        // remove port
hgs
parents:
diff changeset
  3326
        HBufC8* newServerURI = HBufC8::NewL( sURI->Size() );
hgs
parents:
diff changeset
  3327
        CleanupStack::PushL( newServerURI );
hgs
parents:
diff changeset
  3328
        TBuf8<5> buf;
hgs
parents:
diff changeset
  3329
    	buf.Num( 0 );
hgs
parents:
diff changeset
  3330
        // change iLeafType to EDSDelete -> deleting port
hgs
parents:
diff changeset
  3331
        TNSmlDSLeafType	tmpType(iLeafType); // store old value
hgs
parents:
diff changeset
  3332
        iLeafType = EDSDelete;
hgs
parents:
diff changeset
  3333
        SetPortNrToAddrStr( *sURI, newServerURI, buf );
hgs
parents:
diff changeset
  3334
        iLeafType = tmpType; // restore original value
hgs
parents:
diff changeset
  3335
        
hgs
parents:
diff changeset
  3336
        conn.SetServerURIL( *newServerURI );
hgs
parents:
diff changeset
  3337
        conn.UpdateL();
hgs
parents:
diff changeset
  3338
        
hgs
parents:
diff changeset
  3339
        CleanupStack::PopAndDestroy( newServerURI );
hgs
parents:
diff changeset
  3340
        }
hgs
parents:
diff changeset
  3341
    else
hgs
parents:
diff changeset
  3342
        {
hgs
parents:
diff changeset
  3343
        conn.SetServerURIL( *sURI );
hgs
parents:
diff changeset
  3344
        conn.UpdateL();
hgs
parents:
diff changeset
  3345
        }
hgs
parents:
diff changeset
  3346
                      
hgs
parents:
diff changeset
  3347
    CleanupStack::PopAndDestroy( 3 );//transportIdArray, conn, sURI
hgs
parents:
diff changeset
  3348
    CloseDSProfile();
hgs
parents:
diff changeset
  3349
    _DBG_FILE("CNSmlDSSettingsAdapter::SetProfileAddrTypeL(): end");
hgs
parents:
diff changeset
  3350
    return KErrNone;
hgs
parents:
diff changeset
  3351
    }
hgs
parents:
diff changeset
  3352
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3353
//  CNSmlDSSettingsAdapter::SetProfileConnectionPortNrL
hgs
parents:
diff changeset
  3354
//  The function sets the port number (PortNbr) for a profile.
hgs
parents:
diff changeset
  3355
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3356
TInt CNSmlDSSettingsAdapter::SetProfileConnectionPortNrL( const TInt aLUID, 
hgs
parents:
diff changeset
  3357
                                                            const TDesC8& aPort )
hgs
parents:
diff changeset
  3358
    {
hgs
parents:
diff changeset
  3359
    _DBG_FILE("CNSmlDSSettingsAdapter::SetProfileConnectionPortNrL(): begin");
hgs
parents:
diff changeset
  3360
    TInt retVal = KErrNone;
hgs
parents:
diff changeset
  3361
    
hgs
parents:
diff changeset
  3362
    if( iPortNbr )
hgs
parents:
diff changeset
  3363
        {
hgs
parents:
diff changeset
  3364
        delete iPortNbr;
hgs
parents:
diff changeset
  3365
        iPortNbr = NULL;
hgs
parents:
diff changeset
  3366
        }
hgs
parents:
diff changeset
  3367
    iPortNbr = HBufC8::NewL( aPort.Length() );
hgs
parents:
diff changeset
  3368
    TPtr8 newPortNbr = iPortNbr->Des();
hgs
parents:
diff changeset
  3369
    newPortNbr.Append( aPort );
hgs
parents:
diff changeset
  3370
        
hgs
parents:
diff changeset
  3371
    retVal = OpenSyncSessionAndDSProfileL( aLUID, ESmlOpenReadWrite );
hgs
parents:
diff changeset
  3372
    if( retVal != KErrNone )
hgs
parents:
diff changeset
  3373
		{
hgs
parents:
diff changeset
  3374
		CloseDSProfile();
hgs
parents:
diff changeset
  3375
        _DBG_FILE("CNSmlDSSettingsAdapter::SetProfileConnectionPortNrL(): end");
hgs
parents:
diff changeset
  3376
        return retVal;	
hgs
parents:
diff changeset
  3377
		}
hgs
parents:
diff changeset
  3378
    
hgs
parents:
diff changeset
  3379
    RArray<TSmlTransportId> transportIdArray;
hgs
parents:
diff changeset
  3380
    CleanupClosePushL( transportIdArray );
hgs
parents:
diff changeset
  3381
    iDSProfile.ListConnectionsL( transportIdArray );
hgs
parents:
diff changeset
  3382
    
hgs
parents:
diff changeset
  3383
    RSyncMLConnection conn;
hgs
parents:
diff changeset
  3384
    CleanupClosePushL( conn );
hgs
parents:
diff changeset
  3385
    conn.OpenL( iDSProfile, transportIdArray[0] );
hgs
parents:
diff changeset
  3386
    
hgs
parents:
diff changeset
  3387
    // if medium type is not internet -> do not add port
hgs
parents:
diff changeset
  3388
    if( transportIdArray[0] != KUidNSmlMediumTypeInternet.iUid )
hgs
parents:
diff changeset
  3389
        {
hgs
parents:
diff changeset
  3390
        CloseDSProfile();
hgs
parents:
diff changeset
  3391
        CleanupStack::PopAndDestroy( 2 ); //transportIdArray, conn
hgs
parents:
diff changeset
  3392
        _DBG_FILE("CNSmlDSSettingsAdapter::SetProfileConnectionPortNrL(): end");
hgs
parents:
diff changeset
  3393
        return retVal;
hgs
parents:
diff changeset
  3394
        }
hgs
parents:
diff changeset
  3395
        
hgs
parents:
diff changeset
  3396
    HBufC8* serverURI = conn.ServerURI().AllocLC();
hgs
parents:
diff changeset
  3397
    if( serverURI->Length() == 0 )
hgs
parents:
diff changeset
  3398
        {
hgs
parents:
diff changeset
  3399
        CloseDSProfile();
hgs
parents:
diff changeset
  3400
        CleanupStack::PopAndDestroy( 3 ); //transportIdArray, conn, serverURI
hgs
parents:
diff changeset
  3401
        _DBG_FILE("CNSmlDSSettingsAdapter::SetProfileConnectionPortNrL(): end");
hgs
parents:
diff changeset
  3402
        return retVal;
hgs
parents:
diff changeset
  3403
	    }
hgs
parents:
diff changeset
  3404
    TInt totalSize = serverURI->Size() + newPortNbr.Size() + 1;
hgs
parents:
diff changeset
  3405
    HBufC8* newServerURI = HBufC8::NewL( totalSize );
hgs
parents:
diff changeset
  3406
    CleanupStack::PushL( newServerURI );
hgs
parents:
diff changeset
  3407
    SetPortNrToAddrStr( *serverURI, newServerURI, newPortNbr );
hgs
parents:
diff changeset
  3408
    
hgs
parents:
diff changeset
  3409
    conn.SetServerURIL( *newServerURI );
hgs
parents:
diff changeset
  3410
    conn.UpdateL();
hgs
parents:
diff changeset
  3411
    
hgs
parents:
diff changeset
  3412
    CleanupStack::PopAndDestroy( 4 ); //transportIdArray, conn, serverURI, newServerURI
hgs
parents:
diff changeset
  3413
    CloseDSProfile();
hgs
parents:
diff changeset
  3414
    _DBG_FILE("CNSmlDSSettingsAdapter::SetProfileConnectionPortNrL(): end");
hgs
parents:
diff changeset
  3415
    return KErrNone;	
hgs
parents:
diff changeset
  3416
    }
hgs
parents:
diff changeset
  3417
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3418
//  CNSmlDSSettingsAdapter::SetPortNrToAddrStr
hgs
parents:
diff changeset
  3419
//  The function sets or replaces a portnbr (separated with ':') to Addr Uri.
hgs
parents:
diff changeset
  3420
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3421
void CNSmlDSSettingsAdapter::SetPortNrToAddrStr( const TDesC8& aSrvURI, 
hgs
parents:
diff changeset
  3422
                                                    HBufC8* aNewURI, 
hgs
parents:
diff changeset
  3423
                                                    const TDesC8& aPort )
hgs
parents:
diff changeset
  3424
	{
hgs
parents:
diff changeset
  3425
	TInt offset=0;
hgs
parents:
diff changeset
  3426
    if( aSrvURI.Find( KNSmlDSSettingsHTTP ) == 0 )//http://
hgs
parents:
diff changeset
  3427
		{
hgs
parents:
diff changeset
  3428
		offset = KNSmlDSSettingsHTTP().Length();
hgs
parents:
diff changeset
  3429
		}
hgs
parents:
diff changeset
  3430
	else if( aSrvURI.Find( KNSmlDSSettingsHTTPS ) == 0 )//https://
hgs
parents:
diff changeset
  3431
		{
hgs
parents:
diff changeset
  3432
		offset = KNSmlDSSettingsHTTPS().Length();
hgs
parents:
diff changeset
  3433
		}
hgs
parents:
diff changeset
  3434
	
hgs
parents:
diff changeset
  3435
	TInt portStart = -1;
hgs
parents:
diff changeset
  3436
    TInt separatorPos = aSrvURI.Length();
hgs
parents:
diff changeset
  3437
    
hgs
parents:
diff changeset
  3438
    TInt i = 0;
hgs
parents:
diff changeset
  3439
    for( i = offset; i < aSrvURI.Length(); i++ )
hgs
parents:
diff changeset
  3440
		{
hgs
parents:
diff changeset
  3441
		if( aSrvURI[i] == KNSmlDMColon )// ':'
hgs
parents:
diff changeset
  3442
			{
hgs
parents:
diff changeset
  3443
			portStart = i;
hgs
parents:
diff changeset
  3444
			}
hgs
parents:
diff changeset
  3445
		if( aSrvURI[i] == KNSmlDMUriSeparator )// '/'
hgs
parents:
diff changeset
  3446
			{
hgs
parents:
diff changeset
  3447
            separatorPos = i;
hgs
parents:
diff changeset
  3448
			break;
hgs
parents:
diff changeset
  3449
			}
hgs
parents:
diff changeset
  3450
		}
hgs
parents:
diff changeset
  3451
    
hgs
parents:
diff changeset
  3452
    TPtr8 ptrNewSrvURI = aNewURI->Des();
hgs
parents:
diff changeset
  3453
    if( portStart < 0 && separatorPos > 0 && iLeafType != EDSDelete )
hgs
parents:
diff changeset
  3454
        {
hgs
parents:
diff changeset
  3455
        ptrNewSrvURI.Append( aSrvURI.Left( separatorPos ) );//http://123.234.345.456
hgs
parents:
diff changeset
  3456
        ptrNewSrvURI.Append( KNSmlDMColon );
hgs
parents:
diff changeset
  3457
        ptrNewSrvURI.Append( aPort );
hgs
parents:
diff changeset
  3458
        ptrNewSrvURI.Append( aSrvURI.Right( aSrvURI.Length() - separatorPos ) );//123.234.345.456:xx(x)/syncml    
hgs
parents:
diff changeset
  3459
        }
hgs
parents:
diff changeset
  3460
    else if ( portStart > 0 && separatorPos > 0 && iLeafType != EDSDelete )
hgs
parents:
diff changeset
  3461
        {
hgs
parents:
diff changeset
  3462
        ptrNewSrvURI.Append( aSrvURI.Left( portStart + 1 ) );//123.234.345.456:
hgs
parents:
diff changeset
  3463
        ptrNewSrvURI.Append( aPort );//123.234.345.456:xx(x)
hgs
parents:
diff changeset
  3464
        ptrNewSrvURI.Append( aSrvURI.Right( aSrvURI.Length() - separatorPos ) );//123.234.345.456:xx(x)/syncml
hgs
parents:
diff changeset
  3465
        }
hgs
parents:
diff changeset
  3466
    else if ( portStart > 0 &&  iLeafType == EDSDelete ) //delete port number from uri
hgs
parents:
diff changeset
  3467
        {
hgs
parents:
diff changeset
  3468
        ptrNewSrvURI.Append( aSrvURI.Left( portStart ) );//123.234.345.456
hgs
parents:
diff changeset
  3469
        ptrNewSrvURI.Append( aSrvURI.Right( aSrvURI.Length() - separatorPos ) );//123.234.345.456:xx(x)/syncml
hgs
parents:
diff changeset
  3470
        }
hgs
parents:
diff changeset
  3471
    else
hgs
parents:
diff changeset
  3472
        {
hgs
parents:
diff changeset
  3473
        ptrNewSrvURI.Append( aSrvURI );
hgs
parents:
diff changeset
  3474
        }
hgs
parents:
diff changeset
  3475
    return;
hgs
parents:
diff changeset
  3476
	}
hgs
parents:
diff changeset
  3477
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3478
//  CNSmlDSSettingsAdapter::MimeTypeAllreadyExitsL
hgs
parents:
diff changeset
  3479
//  The function checks if mime type allready exits in this profile.
hgs
parents:
diff changeset
  3480
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3481
TBool CNSmlDSSettingsAdapter::MimeTypeAllreadyExitsL( const TInt aLuid, 
hgs
parents:
diff changeset
  3482
                                                        const TDesC8& aMimeType )
hgs
parents:
diff changeset
  3483
    {
hgs
parents:
diff changeset
  3484
    TInt retVal = OpenSyncSessionAndDSProfileL( aLuid, ESmlOpenRead );
hgs
parents:
diff changeset
  3485
    if( retVal != KErrNone )
hgs
parents:
diff changeset
  3486
		{
hgs
parents:
diff changeset
  3487
		CloseDSProfile();
hgs
parents:
diff changeset
  3488
        return EFalse;	
hgs
parents:
diff changeset
  3489
		}
hgs
parents:
diff changeset
  3490
    RArray<TSmlDataProviderId> dataProviderArray;
hgs
parents:
diff changeset
  3491
    CleanupClosePushL( dataProviderArray );
hgs
parents:
diff changeset
  3492
    iSyncSession.ListDataProvidersL( dataProviderArray );
hgs
parents:
diff changeset
  3493
    TInt dataProviderCount = dataProviderArray.Count();
hgs
parents:
diff changeset
  3494
    if( dataProviderCount == 0 )
hgs
parents:
diff changeset
  3495
        {//error case, data provider not found
hgs
parents:
diff changeset
  3496
        CloseDSProfile();
hgs
parents:
diff changeset
  3497
        CleanupStack::PopAndDestroy();//dataProviderIdArray
hgs
parents:
diff changeset
  3498
        return EFalse;   
hgs
parents:
diff changeset
  3499
        }
hgs
parents:
diff changeset
  3500
hgs
parents:
diff changeset
  3501
    RSyncMLTask task;
hgs
parents:
diff changeset
  3502
    RSyncMLDataProvider dataProvider;
hgs
parents:
diff changeset
  3503
    RArray<TSmlTaskId> taskIdArray;
hgs
parents:
diff changeset
  3504
    iDSProfile.ListTasksL( taskIdArray );
hgs
parents:
diff changeset
  3505
    CleanupClosePushL(taskIdArray);
hgs
parents:
diff changeset
  3506
    
hgs
parents:
diff changeset
  3507
    HBufC8* object = aMimeType.AllocLC();
hgs
parents:
diff changeset
  3508
    TPtr8 objectPtr = object->Des();
hgs
parents:
diff changeset
  3509
	objectPtr.LowerCase();
hgs
parents:
diff changeset
  3510
    
hgs
parents:
diff changeset
  3511
    for( TInt i = 0; i<taskIdArray.Count(); i++ )
hgs
parents:
diff changeset
  3512
        {
hgs
parents:
diff changeset
  3513
        task.OpenL( iDSProfile, taskIdArray[i] );
hgs
parents:
diff changeset
  3514
        CleanupClosePushL(task);
hgs
parents:
diff changeset
  3515
        TInt dataProviderUID = task.DataProvider();
hgs
parents:
diff changeset
  3516
        TInt dataProviderIndex = dataProviderArray.Find( dataProviderUID );
hgs
parents:
diff changeset
  3517
        if( dataProviderIndex != KErrNotFound )
hgs
parents:
diff changeset
  3518
            {
hgs
parents:
diff changeset
  3519
            dataProvider.OpenL( iSyncSession, dataProviderArray[dataProviderIndex] );
hgs
parents:
diff changeset
  3520
            CleanupClosePushL(dataProvider);
hgs
parents:
diff changeset
  3521
            for ( TInt n = 0; n < dataProvider.MimeTypeCount(); n++ )
hgs
parents:
diff changeset
  3522
                {
hgs
parents:
diff changeset
  3523
                HBufC* mimeType = dataProvider.MimeType(n).AllocLC();
hgs
parents:
diff changeset
  3524
                if( objectPtr.Compare( ConvertTo8LC( *mimeType ) ) == 0 ) //if MIME match
hgs
parents:
diff changeset
  3525
                    {
hgs
parents:
diff changeset
  3526
                    CleanupStack::PopAndDestroy( 7 ); //dataProviderArray, task, dataProvider,
hgs
parents:
diff changeset
  3527
                                                    //taskIdArray, object, mimeType, ConvertTo8LC    
hgs
parents:
diff changeset
  3528
                    CloseDSProfile();            
hgs
parents:
diff changeset
  3529
                    return ETrue;
hgs
parents:
diff changeset
  3530
                    }
hgs
parents:
diff changeset
  3531
                CleanupStack::PopAndDestroy( 2 ); //mimeType, ConvertTo8LC
hgs
parents:
diff changeset
  3532
                }
hgs
parents:
diff changeset
  3533
            CleanupStack::PopAndDestroy( ); //dataProvider
hgs
parents:
diff changeset
  3534
            }
hgs
parents:
diff changeset
  3535
        CleanupStack::PopAndDestroy( ); //task
hgs
parents:
diff changeset
  3536
        }
hgs
parents:
diff changeset
  3537
    CleanupStack::PopAndDestroy( 3 ); //dataProviderArray,taskIdArray, object
hgs
parents:
diff changeset
  3538
    CloseDSProfile();
hgs
parents:
diff changeset
  3539
    return EFalse;
hgs
parents:
diff changeset
  3540
    }
hgs
parents:
diff changeset
  3541
hgs
parents:
diff changeset
  3542
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3543
//  CNSmlDSSettingsAdapter::SetRDBDataStore
hgs
parents:
diff changeset
  3544
//  The function sets the RDMURI to memeber variable.
hgs
parents:
diff changeset
  3545
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3546
void CNSmlDSSettingsAdapter::SetRDBDataStore( const TDesC8& aStore )
hgs
parents:
diff changeset
  3547
    {
hgs
parents:
diff changeset
  3548
	TPtr16 bufPtr16 = iRdbDataStore->Des();
hgs
parents:
diff changeset
  3549
    bufPtr16.Delete(0, bufPtr16.Size());
hgs
parents:
diff changeset
  3550
	CnvUtfConverter::ConvertToUnicodeFromUtf8( bufPtr16, aStore );
hgs
parents:
diff changeset
  3551
    }
hgs
parents:
diff changeset
  3552
hgs
parents:
diff changeset
  3553
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3554
//	CNSmlDSSettingsAdapter::SetProfileIAPIdL
hgs
parents:
diff changeset
  3555
//	The function sets the IAPId value to profile connection properties.
hgs
parents:
diff changeset
  3556
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3557
TInt CNSmlDSSettingsAdapter::SetProfileIAPIdL( const TInt aLUID, const TInt aIAPid )
hgs
parents:
diff changeset
  3558
    {
hgs
parents:
diff changeset
  3559
    TInt retVal = OpenSyncSessionAndDSProfileL( aLUID, ESmlOpenReadWrite );
hgs
parents:
diff changeset
  3560
    if( retVal != KErrNone )
hgs
parents:
diff changeset
  3561
		{
hgs
parents:
diff changeset
  3562
		CloseDSProfile();
hgs
parents:
diff changeset
  3563
        return retVal;	
hgs
parents:
diff changeset
  3564
		}
hgs
parents:
diff changeset
  3565
    RArray<TSmlTransportId> connIdArray;
hgs
parents:
diff changeset
  3566
    CleanupClosePushL( connIdArray );
hgs
parents:
diff changeset
  3567
    iDSProfile.ListConnectionsL( connIdArray );
hgs
parents:
diff changeset
  3568
    if( connIdArray.Count() == 1 )
hgs
parents:
diff changeset
  3569
        {
hgs
parents:
diff changeset
  3570
        RSyncMLTransport transport;
hgs
parents:
diff changeset
  3571
        CleanupClosePushL( transport );
hgs
parents:
diff changeset
  3572
	    transport.OpenL( iSyncSession, connIdArray[0] );
hgs
parents:
diff changeset
  3573
	    const CSyncMLTransportPropertiesArray& props = transport.Properties();
hgs
parents:
diff changeset
  3574
	    TInt index = props.Find( KNSmlIAPId );
hgs
parents:
diff changeset
  3575
        if( index > 0 )
hgs
parents:
diff changeset
  3576
            {
hgs
parents:
diff changeset
  3577
            RSyncMLConnection conn;
hgs
parents:
diff changeset
  3578
            CleanupClosePushL( conn );
hgs
parents:
diff changeset
  3579
	        conn.OpenL( iDSProfile, connIdArray[0] );
hgs
parents:
diff changeset
  3580
            HBufC8* apIdBuffer = HBufC8::NewLC( 4 );
hgs
parents:
diff changeset
  3581
	        TPtr8 ptrIapIdBuf = apIdBuffer->Des();
hgs
parents:
diff changeset
  3582
        	ptrIapIdBuf.Num( aIAPid );
hgs
parents:
diff changeset
  3583
            conn.SetPropertyL( KNSmlIAPId, ptrIapIdBuf );
hgs
parents:
diff changeset
  3584
            conn.UpdateL();
hgs
parents:
diff changeset
  3585
            CleanupStack::PopAndDestroy( 2 ); //conn, apIdBuffer
hgs
parents:
diff changeset
  3586
            retVal = KErrNone;
hgs
parents:
diff changeset
  3587
            }
hgs
parents:
diff changeset
  3588
        else
hgs
parents:
diff changeset
  3589
            {
hgs
parents:
diff changeset
  3590
            retVal = KErrNotFound;
hgs
parents:
diff changeset
  3591
            }
hgs
parents:
diff changeset
  3592
        CleanupStack::PopAndDestroy(); //transport
hgs
parents:
diff changeset
  3593
        }
hgs
parents:
diff changeset
  3594
    else
hgs
parents:
diff changeset
  3595
        {
hgs
parents:
diff changeset
  3596
        retVal = KErrNotFound;
hgs
parents:
diff changeset
  3597
        }
hgs
parents:
diff changeset
  3598
    CloseDSProfile();
hgs
parents:
diff changeset
  3599
    CleanupStack::PopAndDestroy(); //connIdArray
hgs
parents:
diff changeset
  3600
    return retVal;
hgs
parents:
diff changeset
  3601
    }
hgs
parents:
diff changeset
  3602
hgs
parents:
diff changeset
  3603
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3604
//	CNSmlDSSettingsAdapter::GetMediumTypeL
hgs
parents:
diff changeset
  3605
//	The function checks the requested medium type and gets it UID.
hgs
parents:
diff changeset
  3606
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3607
void CNSmlDSSettingsAdapter::GetMediumTypeL( const TInt aIntObj, 
hgs
parents:
diff changeset
  3608
                                            TSmlTransportId& aMediumType )
hgs
parents:
diff changeset
  3609
    {
hgs
parents:
diff changeset
  3610
    if( aIntObj == EHttp|| aIntObj == ENone || aIntObj == EWsp)
hgs
parents:
diff changeset
  3611
        {
hgs
parents:
diff changeset
  3612
        aMediumType = KUidNSmlMediumTypeInternet.iUid;
hgs
parents:
diff changeset
  3613
        return;
hgs
parents:
diff changeset
  3614
        }
hgs
parents:
diff changeset
  3615
    RArray<TSmlTransportId> transportIdArray;
hgs
parents:
diff changeset
  3616
    CleanupClosePushL( transportIdArray );
hgs
parents:
diff changeset
  3617
    iSyncSession.ListTransportsL( transportIdArray );
hgs
parents:
diff changeset
  3618
    if ( transportIdArray.Find( KUidNSmlMediumTypeBluetooth.iUid ) != KErrNotFound )
hgs
parents:
diff changeset
  3619
        {
hgs
parents:
diff changeset
  3620
        aMediumType = KUidNSmlMediumTypeBluetooth.iUid;
hgs
parents:
diff changeset
  3621
        }
hgs
parents:
diff changeset
  3622
    else if ( transportIdArray.Find( KUidNSmlMediumTypeUSB.iUid ) != KErrNotFound )
hgs
parents:
diff changeset
  3623
        {
hgs
parents:
diff changeset
  3624
        aMediumType = KUidNSmlMediumTypeUSB.iUid;
hgs
parents:
diff changeset
  3625
        }
hgs
parents:
diff changeset
  3626
    else if ( transportIdArray.Find( KUidNSmlMediumTypeIrDA.iUid ) != KErrNotFound )
hgs
parents:
diff changeset
  3627
        {
hgs
parents:
diff changeset
  3628
        aMediumType = KUidNSmlMediumTypeIrDA.iUid;
hgs
parents:
diff changeset
  3629
        }
hgs
parents:
diff changeset
  3630
    CleanupStack::PopAndDestroy(); //transportIdArray
hgs
parents:
diff changeset
  3631
    return;    
hgs
parents:
diff changeset
  3632
    }
hgs
parents:
diff changeset
  3633
hgs
parents:
diff changeset
  3634
hgs
parents:
diff changeset
  3635
// ========================== OTHER EXPORTED FUNCTIONS =========================
hgs
parents:
diff changeset
  3636
hgs
parents:
diff changeset
  3637
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3638
// TImplementationProxy ImplementationTable[]
hgs
parents:
diff changeset
  3639
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3640
hgs
parents:
diff changeset
  3641
#ifndef IMPLEMENTATION_PROXY_ENTRY
hgs
parents:
diff changeset
  3642
#define IMPLEMENTATION_PROXY_ENTRY(aUid, aFuncPtr)	{{aUid},(aFuncPtr)}
hgs
parents:
diff changeset
  3643
#endif
hgs
parents:
diff changeset
  3644
hgs
parents:
diff changeset
  3645
const TImplementationProxy ImplementationTable[] = 
hgs
parents:
diff changeset
  3646
    {
hgs
parents:
diff changeset
  3647
	IMPLEMENTATION_PROXY_ENTRY( KNSmlDSSettingsAdapterImplUid, CNSmlDSSettingsAdapter::NewL )
hgs
parents:
diff changeset
  3648
    };
hgs
parents:
diff changeset
  3649
hgs
parents:
diff changeset
  3650
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3651
// TImplementationProxy* ImplementationGroupProxy()
hgs
parents:
diff changeset
  3652
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3653
EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount )
hgs
parents:
diff changeset
  3654
    {
hgs
parents:
diff changeset
  3655
	_DBG_FILE("ImplementationGroupProxy() for CNSmlDSSettingsAdapter: begin");
hgs
parents:
diff changeset
  3656
hgs
parents:
diff changeset
  3657
    aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
hgs
parents:
diff changeset
  3658
hgs
parents:
diff changeset
  3659
	_DBG_FILE("ImplementationGroupProxy() for CNSmlDSSettingsAdapter: end");
hgs
parents:
diff changeset
  3660
    return ImplementationTable;
hgs
parents:
diff changeset
  3661
	}
hgs
parents:
diff changeset
  3662
hgs
parents:
diff changeset
  3663
hgs
parents:
diff changeset
  3664
//--------------------------------------------------------------------
hgs
parents:
diff changeset
  3665
//TInt CNSmlDMSettingsAdapter::IsDSAccUriFormatMatchPredefined(const TDesC8 & aURI)
hgs
parents:
diff changeset
  3666
//
hgs
parents:
diff changeset
  3667
//-------------------------------------------------------------------
hgs
parents:
diff changeset
  3668
hgs
parents:
diff changeset
  3669
TBool CNSmlDSSettingsAdapter::IsDSAccUriFormatMatchPredefined(const TDesC8 & aURI)
hgs
parents:
diff changeset
  3670
{
hgs
parents:
diff changeset
  3671
	
hgs
parents:
diff changeset
  3672
	// include strings for  tree for Bearer , DNS related Dynamic nodes . 
hgs
parents:
diff changeset
  3673
	
hgs
parents:
diff changeset
  3674
	if(aURI.Match(_L8("SyncML/DSAcc/DSId*"))  != KErrNotFound ||
hgs
parents:
diff changeset
  3675
         aURI.Match(_L8("SyncML/DSAcc/DSId*/DB/CTId*"))  != KErrNotFound)
hgs
parents:
diff changeset
  3676
	{
hgs
parents:
diff changeset
  3677
		return ETrue;
hgs
parents:
diff changeset
  3678
	}
hgs
parents:
diff changeset
  3679
	else
hgs
parents:
diff changeset
  3680
	{
hgs
parents:
diff changeset
  3681
		return EFalse;
hgs
parents:
diff changeset
  3682
	}
hgs
parents:
diff changeset
  3683
	
hgs
parents:
diff changeset
  3684
	
hgs
parents:
diff changeset
  3685
}
hgs
parents:
diff changeset
  3686
hgs
parents:
diff changeset
  3687
//--------------------------------------------------------------------
hgs
parents:
diff changeset
  3688
//TInt CNSmlDMSettingsAdapter::ConstructTreeL(const TDesC8& aURI)
hgs
parents:
diff changeset
  3689
//
hgs
parents:
diff changeset
  3690
//-------------------------------------------------------------------
hgs
parents:
diff changeset
  3691
hgs
parents:
diff changeset
  3692
TInt CNSmlDSSettingsAdapter::ConstructTreeL(const TDesC8& aURI)
hgs
parents:
diff changeset
  3693
{
hgs
parents:
diff changeset
  3694
		TInt profileID = KErrNotFound;
hgs
parents:
diff changeset
  3695
RDebug::Print( _L("jshong FOTA : ConstructTreeL 1 ")) ;
hgs
parents:
diff changeset
  3696
		TBool notDBSet(EFalse);
hgs
parents:
diff changeset
  3697
        if( iSyncSessionOpen == EFalse )
hgs
parents:
diff changeset
  3698
            {
hgs
parents:
diff changeset
  3699
            iSyncSession.OpenL();
hgs
parents:
diff changeset
  3700
            iSyncSessionOpen = ETrue;
hgs
parents:
diff changeset
  3701
            }
hgs
parents:
diff changeset
  3702
        RArray<TSmlProfileId> profileIdArray;
hgs
parents:
diff changeset
  3703
        CleanupClosePushL( profileIdArray );
hgs
parents:
diff changeset
  3704
        TSmlUsageType usageType = ESmlDataSync;
hgs
parents:
diff changeset
  3705
        iSyncSession.ListProfilesL( profileIdArray, usageType );
hgs
parents:
diff changeset
  3706
RDebug::Print( _L("jshong FOTA : ConstructTreeL 1-2 ") );
hgs
parents:
diff changeset
  3707
	    
hgs
parents:
diff changeset
  3708
        for( TInt p = 0; p < profileIdArray.Count(); p++ )
hgs
parents:
diff changeset
  3709
		    {
hgs
parents:
diff changeset
  3710
            TInt ddId = profileIdArray[p] ; // update remove KMAxDatasyncID - KMaxDataSyncID;
hgs
parents:
diff changeset
  3711
RDebug::Print( _L("jshong FOTA : ConstructTreeL 1-3 ") );
hgs
parents:
diff changeset
  3712
            
hgs
parents:
diff changeset
  3713
		    _LIT8( Kprev, "DSId" );//  update changed from DMId to DSId
hgs
parents:
diff changeset
  3714
		    TBuf8<7> addNAME(Kprev); // DMIdnnn , nnn = profileid
hgs
parents:
diff changeset
  3715
            TInt fixedProfId = profileIdArray[p] ; // update remove KMAxDatasyncID // - KMaxDataSyncID; //fit to 3 decimal
hgs
parents:
diff changeset
  3716
		    addNAME.AppendNumFixedWidth( fixedProfId, EDecimal, 3 ); 
hgs
parents:
diff changeset
  3717
   		   	DBG_ARGS8( _S8("notInList: Id = %d Name %S"), p, &addNAME );
hgs
parents:
diff changeset
  3718
   		   	RDebug::Print( _L("notInList: Id = %d Name %S"), p, &addNAME );
hgs
parents:
diff changeset
  3719
		    // KNSmlDMStart includes start text for URISeg
hgs
parents:
diff changeset
  3720
			    TBuf8<20> addURI; // SyncML/DMAcc/DMIdnnn , nnn = profileid
hgs
parents:
diff changeset
  3721
			    addURI.Append( KNSmlDSStart );
hgs
parents:
diff changeset
  3722
			    addURI.AppendNumFixedWidth( fixedProfId, EDecimal, 3 ); 
hgs
parents:
diff changeset
  3723
				TBuf8<3> addLUID;
hgs
parents:
diff changeset
  3724
	    		addLUID.Num( fixedProfId );
hgs
parents:
diff changeset
  3725
hgs
parents:
diff changeset
  3726
			HBufC8* mapInfo = iCallBack->GetLuidAllocL(addURI);
hgs
parents:
diff changeset
  3727
RDebug::Print( _L("jshong FOTA : ConstructTreeL 1-4 addURI = %S"), &addURI );
hgs
parents:
diff changeset
  3728
					
hgs
parents:
diff changeset
  3729
						 if (mapInfo->Length() == 0)
hgs
parents:
diff changeset
  3730
						 {
hgs
parents:
diff changeset
  3731
						 	 iCallBack->SetMappingL(addURI,addLUID);
hgs
parents:
diff changeset
  3732
							 
hgs
parents:
diff changeset
  3733
RDebug::Print( _L("jshong FOTA : ConstructTreeL 1-5 ") );
hgs
parents:
diff changeset
  3734
						 	 	 
hgs
parents:
diff changeset
  3735
						 	 if(( aURI.Find(addURI) >= 0 ) && !notDBSet)
hgs
parents:
diff changeset
  3736
                    			{ 
hgs
parents:
diff changeset
  3737
                    				profileID = fixedProfId;
hgs
parents:
diff changeset
  3738
                    			}
hgs
parents:
diff changeset
  3739
                    			
hgs
parents:
diff changeset
  3740
						 	 // update , Update ../DB/CTId also 
hgs
parents:
diff changeset
  3741
						 	 	TInt retVal = OpenSyncSessionAndDSProfileL( fixedProfId, ESmlOpenRead );
hgs
parents:
diff changeset
  3742
						    if( retVal == KErrNone )
hgs
parents:
diff changeset
  3743
								{
hgs
parents:
diff changeset
  3744
							
hgs
parents:
diff changeset
  3745
RDebug::Print( _L("jshong FOTA : ConstructTreeL 2 ") );
hgs
parents:
diff changeset
  3746
						        
hgs
parents:
diff changeset
  3747
						 	 						 	 
hgs
parents:
diff changeset
  3748
						    RArray<TSmlTaskId> taskIdArray;
hgs
parents:
diff changeset
  3749
						    CleanupClosePushL( taskIdArray );
hgs
parents:
diff changeset
  3750
						    iDSProfile.ListTasksL( taskIdArray );
hgs
parents:
diff changeset
  3751
							if( taskIdArray.Count() == 0 )
hgs
parents:
diff changeset
  3752
								{
hgs
parents:
diff changeset
  3753
RDebug::Print( _L("jshong FOTA : ConstructTreeL 3 ")) ;
hgs
parents:
diff changeset
  3754
								CloseDSProfile();
hgs
parents:
diff changeset
  3755
								CleanupStack::PopAndDestroy();//taskIdArray
hgs
parents:
diff changeset
  3756
						    //	return KErrNotFound;
hgs
parents:
diff changeset
  3757
								}
hgs
parents:
diff changeset
  3758
							else
hgs
parents:
diff changeset
  3759
							{
hgs
parents:
diff changeset
  3760
								RSyncMLTask task;
hgs
parents:
diff changeset
  3761
RDebug::Print( _L("jshong FOTA : ConstructTreeL 4 ")) ;
hgs
parents:
diff changeset
  3762
hgs
parents:
diff changeset
  3763
						    CleanupClosePushL( task );
hgs
parents:
diff changeset
  3764
						            
hgs
parents:
diff changeset
  3765
						    for ( TInt i = 0; i < taskIdArray.Count(); i++ )
hgs
parents:
diff changeset
  3766
								{			
hgs
parents:
diff changeset
  3767
								//	
hgs
parents:
diff changeset
  3768
								//	Check if ContentType -> Task ID on list
hgs
parents:
diff changeset
  3769
								//
hgs
parents:
diff changeset
  3770
								TInt ddId( 0 );
hgs
parents:
diff changeset
  3771
RDebug::Print( _L("jshong FOTA : ConstructTreeL 5 ")) ;
hgs
parents:
diff changeset
  3772
								
hgs
parents:
diff changeset
  3773
								task.OpenL( iDSProfile, taskIdArray[i] );
hgs
parents:
diff changeset
  3774
						        ddId = task.DataProvider();
hgs
parents:
diff changeset
  3775
						        task.Close();
hgs
parents:
diff changeset
  3776
								
hgs
parents:
diff changeset
  3777
									//Get Task ID
hgs
parents:
diff changeset
  3778
								//	addNAME.AppendNumFixedWidth( taskIdArray[i], EDecimal,3 ); 
hgs
parents:
diff changeset
  3779
RDebug::Print( _L("jshong FOTA : ConstructTreeL 6 ") );
hgs
parents:
diff changeset
  3780
							
hgs
parents:
diff changeset
  3781
									TBuf8<80> addDBURI;
hgs
parents:
diff changeset
  3782
									
hgs
parents:
diff changeset
  3783
									addDBURI.Append( addURI );
hgs
parents:
diff changeset
  3784
									_LIT8( KDB, "/DB" );// addDb also 
hgs
parents:
diff changeset
  3785
									addDBURI.Append( KDB );
hgs
parents:
diff changeset
  3786
									addDBURI.Append( Kprev2 );
hgs
parents:
diff changeset
  3787
									addDBURI.AppendNumFixedWidth( taskIdArray[i], EDecimal, 3 ); 
hgs
parents:
diff changeset
  3788
RDebug::Print( _L("jshong FOTA : ConstructTreeL 7 ")) ;
hgs
parents:
diff changeset
  3789
hgs
parents:
diff changeset
  3790
									TBuf8<16> addDBLUID;
hgs
parents:
diff changeset
  3791
									addDBLUID.Num( ddId );
hgs
parents:
diff changeset
  3792
									HBufC8* mapInfo = iCallBack->GetLuidAllocL(addDBURI);
hgs
parents:
diff changeset
  3793
								 	if (mapInfo->Length() == 0)
hgs
parents:
diff changeset
  3794
						 			{
hgs
parents:
diff changeset
  3795
						 	 			iCallBack->SetMappingL(addDBURI,addDBLUID);
hgs
parents:
diff changeset
  3796
					 	 	 
hgs
parents:
diff changeset
  3797
						 	 			if( aURI.Find(addDBURI) >= 0 )
hgs
parents:
diff changeset
  3798
                    					{ 
hgs
parents:
diff changeset
  3799
                    						profileID = ddId;
hgs
parents:
diff changeset
  3800
                    						notDBSet = ETrue;
hgs
parents:
diff changeset
  3801
                    					}
hgs
parents:
diff changeset
  3802
						 			}							
hgs
parents:
diff changeset
  3803
								
hgs
parents:
diff changeset
  3804
								} //For
hgs
parents:
diff changeset
  3805
							CloseDSProfile();
hgs
parents:
diff changeset
  3806
							CleanupStack::PopAndDestroy(2);// task, taskIdArray
hgs
parents:
diff changeset
  3807
							}
hgs
parents:
diff changeset
  3808
							
hgs
parents:
diff changeset
  3809
						 //return KErrGeneral;	
hgs
parents:
diff changeset
  3810
								}	 
hgs
parents:
diff changeset
  3811
							else
hgs
parents:
diff changeset
  3812
							{
hgs
parents:
diff changeset
  3813
									CloseDSProfile();
hgs
parents:
diff changeset
  3814
						 }
hgs
parents:
diff changeset
  3815
						 
hgs
parents:
diff changeset
  3816
						 }
hgs
parents:
diff changeset
  3817
						 else
hgs
parents:
diff changeset
  3818
						 {
hgs
parents:
diff changeset
  3819
RDebug::Print( _L("jshong FOTA : ConstructTreeL 1-5 ") );
hgs
parents:
diff changeset
  3820
						 
hgs
parents:
diff changeset
  3821
						 	delete mapInfo;
hgs
parents:
diff changeset
  3822
						 }
hgs
parents:
diff changeset
  3823
						 
hgs
parents:
diff changeset
  3824
	    			
hgs
parents:
diff changeset
  3825
    			}
hgs
parents:
diff changeset
  3826
	    	
hgs
parents:
diff changeset
  3827
         CleanupStack::PopAndDestroy( 1 );//profileIdArray
hgs
parents:
diff changeset
  3828
        return profileID;
hgs
parents:
diff changeset
  3829
}
hgs
parents:
diff changeset
  3830
hgs
parents:
diff changeset
  3831
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3832
// TPtrC8 CUtils::GetDynamicDSNodeUri( const TDesC8& aURI )
hgs
parents:
diff changeset
  3833
// returns Syncml/DSAcc/xxx URI
hgs
parents:
diff changeset
  3834
//------------------------------------------------------------------------------
hgs
parents:
diff changeset
  3835
TPtrC8 CNSmlDSSettingsAdapter::GetDynamicDSNodeUri(const TDesC8& aURI)
hgs
parents:
diff changeset
  3836
    {    
hgs
parents:
diff changeset
  3837
    TInt i= 0;
hgs
parents:
diff changeset
  3838
    TBuf8<50> DsAccRoot(KDSAcc1);
hgs
parents:
diff changeset
  3839
    for ( i = aURI.Find( KDSAcc1 ) + DsAccRoot.Length() + 1 ; i < aURI.Length(); i++ )
hgs
parents:
diff changeset
  3840
        {
hgs
parents:
diff changeset
  3841
        if( aURI[i] == '/'  )            
hgs
parents:
diff changeset
  3842
			{            break;            
hgs
parents:
diff changeset
  3843
			}
hgs
parents:
diff changeset
  3844
        }    
hgs
parents:
diff changeset
  3845
		
hgs
parents:
diff changeset
  3846
    return aURI.Left( i );
hgs
parents:
diff changeset
  3847
    }
hgs
parents:
diff changeset
  3848
	
hgs
parents:
diff changeset
  3849
// End of File
hgs
parents:
diff changeset
  3850