omads/omadsappui/AspSyncUtil/src/AspUtil.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 19 Aug 2010 09:41:17 +0300
branchRCL_3
changeset 23 2bb96f4ecad8
parent 14 2bbcc0756c6d
permissions -rw-r--r--
Revision: 201031 Kit: 201033

/*
* Copyright (c) 2002-2005 Nokia Corporation and/or its subsidiary(-ies). 
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:  
*
*/




// INCLUDES

#include <SyncMLTransportProperties.h>
#include <flogger.h>
#include <eikenv.h>
#include <bautils.h>  // BaflUtils
#include <AiwGenericParam.hrh>  // for application ids
#include <collate.h>   // for TCollationMethod

#include <featmgr.h>   // FeatureManager
#include <ApUtils.h>   // CApUtils
#include <avkon.rsg>
#include <hlplch.h>    // HlpLauncher

#include <MuiuMsvUiServiceUtilities.h> // for MsvUiServiceUtilities
#include <NsmlOperatorDataCRKeys.h> // KCRUidOperatorDatasyncInternalKeys


#include "AspUtil.h"
#include "AspDialogUtil.h"
#include "AspResHandler.h"
#include "AspDebug.h"
#include <AspSyncUtil.rsg>

#include <SyncMLErr.h>  // sync error codes
#include <cmapplicationsettingsui.h>

//#ifdef __SAP_POLICY_MANAGEMENT
#include <SettingEnforcementInfo.h> // VSettingEnforcementInfo
//#endif





/******************************************************************************
 * class TAspParam
 ******************************************************************************/


// -------------------------------------------------------------------------------
// TAspParam::TAspParam
//
// -------------------------------------------------------------------------------
//
TAspParam::TAspParam(TInt aApplicationId)
 : iApplicationId(aApplicationId), iProfileId(KErrNotFound), iMode(KErrNotFound),
   iId(KErrNotFound), iReturnValue(KErrNotFound), iDataProviderId(KErrNotFound),
   iSyncTaskId(KErrNotFound), iProfile(NULL), 
   iSyncTask(NULL), iSyncFilter(NULL), iSyncSession(NULL),
   iProfileList(NULL), iContentList(NULL), iSchedule(NULL)
	 {
	 }


// -------------------------------------------------------------------------------
// TAspParam::TAspParam
//
// -------------------------------------------------------------------------------
//
TAspParam::TAspParam(TInt aApplicationId, RSyncMLSession* aSyncSession)
 : iApplicationId(aApplicationId), iProfileId(KErrNotFound), iMode(KErrNotFound),
   iId(KErrNotFound), iReturnValue(KErrNotFound), iDataProviderId(KErrNotFound),
   iSyncTaskId(KErrNotFound), iProfile(NULL),
   iSyncTask(NULL), iSyncFilter(NULL), iSyncSession(aSyncSession),
   iProfileList(NULL), iContentList(NULL), iSchedule(NULL)
  	 {
	 }



/******************************************************************************
 * class TAspUtil
 ******************************************************************************/


// -------------------------------------------------------------------------------
// TUtil::Panic
//
// -------------------------------------------------------------------------------
//
void TUtil::Panic(TInt aReason)
    {
	_LIT(KPanicCategory,"AspSyncUtil");

	User::Panic(KPanicCategory, aReason); 
    }


// -------------------------------------------------------------------------------
// TUtil::StrCopy
//
// String copy with lenght check.
// -------------------------------------------------------------------------------
//
void TUtil::StrCopy(TDes8& aTarget, const TDesC& aSource)
    {
	TInt len = aTarget.MaxLength();
    if(len < aSource.Length()) 
	    {
		aTarget.Copy(aSource.Left(len));
		return;
	    }
	aTarget.Copy(aSource);
    }

// -------------------------------------------------------------------------------
// TUtil::StrCopy
//
// String copy with lenght check.
// -------------------------------------------------------------------------------
//
void TUtil::StrCopy(TDes& aTarget, const TDesC8& aSource)
    {
	TInt len = aTarget.MaxLength();
    if(len < aSource.Length()) 
	    {
		aTarget.Copy(aSource.Left(len));
		return;
	    }
	aTarget.Copy(aSource);
    }


// -------------------------------------------------------------------------------
// TUtil::StrCopy
//
// String copy with lenght check.
// -------------------------------------------------------------------------------
//
void TUtil::StrCopy(TDes& aTarget, const TDesC& aSource)
    {
	TInt len = aTarget.MaxLength();
    if(len < aSource.Length()) 
	    {
		aTarget.Copy(aSource.Left(len));
		return;
	    }
	aTarget.Copy(aSource);
    }

//--------------------------------------------------------------------------------
//TUtil::StrConversion
//
//Convert TBuf to HBuf
//--------------------------------------------------------------------------------
//
HBufC* TUtil::StrConversion(const TDesC& aDefaultText)
{
	return aDefaultText.AllocLC();
    }


// -------------------------------------------------------------------------------
// TUtil::StrAppend
//
// -------------------------------------------------------------------------------
//
void TUtil::StrAppend(TDes& aTarget, const TDesC& aSource)
{
    if (aSource.Length() == 0)
    	{
    	return;
    	}
    	
	TInt free = aTarget.MaxLength() - aTarget.Length();
	if (aSource.Length() < free)
		{
		aTarget.Append(aSource);
		}
}


// -------------------------------------------------------------------------------
// TUtil::StrInsert
//
// -------------------------------------------------------------------------------
//
void TUtil::StrInsert(TDes& aTarget, const TDesC& aSource)
{
	TInt free = aTarget.MaxLength() - aTarget.Length();
	if (aSource.Length() < free)
		{
		aTarget.Insert(0, aSource);
		}
}


// -------------------------------------------------------------------------------
// TUtil::StrToInt
//
// -------------------------------------------------------------------------------
//
TInt TUtil::StrToInt(const TDesC& aText, TInt& aNum)
	{
    TLex lex(aText);

    TInt err=lex.Val(aNum); 
	return err;
	}


// -------------------------------------------------------------------------------
// TUtil::IsEmpty
//
// Function returns ETrue if string only contains white space or has no characters.
// -------------------------------------------------------------------------------
//
TBool TUtil::IsEmpty(const TDesC& aText)
	{
	TInt len=aText.Length();
	for (TInt i=0; i<len; i++)
		{
		TChar c=aText[i];
		if (!c.IsSpace())
			{
			return EFalse;
			}
		}
	return ETrue;
	}


// -------------------------------------------------------------------------------
// TUtil::Fill
//
// -------------------------------------------------------------------------------
//
void TUtil::Fill(TDes& aTarget, const TDesC& aOneCharStr, TInt aLength)
	{
	TInt len = aTarget.MaxLength();
    if(len > aLength)
    	{
    	TBuf<KBufSize16> buf(aOneCharStr);
	    aTarget.Fill(buf[0], aLength);
    	}
	}


// -----------------------------------------------------------------------------
// TUtil::AddResFileL
//
// -----------------------------------------------------------------------------
//
TInt TUtil::AddResFileL(const TDesC& aFile)
	{
	CEikonEnv* env = CEikonEnv::Static();

	TFileName fileName(aFile);

	BaflUtils::NearestLanguageFile(env->FsSession(), fileName);

    return env->AddResourceFileL(fileName);
	}


// -----------------------------------------------------------------------------
// TUtil::IsValidAppId
//
// -----------------------------------------------------------------------------
//
TBool TUtil::IsValidAppId(TInt aApplicationId)
	{
	TInt id = aApplicationId;
	
	if (id == EApplicationIdSync || id == EApplicationIdContact || 
	    id == EApplicationIdCalendar || id == EApplicationIdEmail ||
	    id == EApplicationIdNote || id == EApplicationIdMms)
		{
		return ETrue;
		}
		
	return EFalse;
	}


// -----------------------------------------------------------------------------
// TUtil::IsValidSID
//
// -----------------------------------------------------------------------------
//
TBool TUtil::IsValidSID(TInt aSid)
	{
	TInt id = aSid;
	
	if (id == KUidAppSync.iUid || id == KUidAppPhonebook.iUid || 
	    id == KUidAppCalendar.iUid || id == KUidAppMessages.iUid ||
	    id == KUidAppNotepad.iUid || id == KUidAppTest.iUid || 
	    id == KUidAppMailEditor.iUid)
		{
		return ETrue;
		}
		
	return EFalse;
	}


// -----------------------------------------------------------------------------
// TUtil::ProviderIdFromAppId
//
// -----------------------------------------------------------------------------
//
TInt TUtil::ProviderIdFromAppId(TInt aApplicationId)
	{
	TInt id=KErrNotFound;

	switch (aApplicationId)
		{
		case EApplicationIdContact:
			id = KUidNSmlAdapterContact.iUid;
			break;
		case EApplicationIdCalendar:
			id = KUidNSmlAdapterCalendar.iUid;
			break;
		case EApplicationIdEmail:
     		id = KUidNSmlAdapterEMail.iUid;
			break;
		case EApplicationIdNote:
			id = KUidNSmlAdapterNote.iUid;
			break;
		default:
            id = KErrNotFound;
			break;
		}

	return id;
	}

// -----------------------------------------------------------------------------
// TUtil::ProviderIdFromAppId
//
// -----------------------------------------------------------------------------
//
TInt TUtil::ProviderIdFromAppId(TInt aApplicationId, TBool aOperatorProfile)
    {
    TInt id=KErrNotFound;

    if (aOperatorProfile)
        {
        id = OperatorProviderIdFromAppId( aApplicationId );
        }
    else
        {
        id = ProviderIdFromAppId( aApplicationId );
        }
    return id;
    }

// -----------------------------------------------------------------------------
// TUtil::OperatorProviderIdFromAppId
//
// -----------------------------------------------------------------------------
//
TInt TUtil::OperatorProviderIdFromAppId(TInt aApplicationId)
    {
    TInt id = KErrNotFound;
    CRepository* repository = NULL;
    
    TInt err = KErrNotFound;
    TRAP(err, repository = CRepository::NewL(KCRUidOperatorDatasyncInternalKeys));
    if (err == KErrNone)
        {
        switch (aApplicationId)
            {
             // Operator specific version of Contacts adapter is supported
            case EApplicationIdContact:
                {
                err = repository->Get(KNsmlOpDsOperatorAdapterUid, id);
                break;
                }
            default:
                {
                id = ProviderIdFromAppId(aApplicationId);
                break;
                }
            }
         delete repository;
        }

    if ( (id == KErrNotFound) || (err != KErrNone) || (id == 0) )
        {
        // Use default adapter
        id = ProviderIdFromAppId(aApplicationId);        
        }
    return id;
    }
        
// -----------------------------------------------------------------------------
// TUtil::AppIdFromProviderId
//
// -----------------------------------------------------------------------------
//
TInt TUtil::AppIdFromProviderId(TInt aAdapterId)
	{
	TInt id=KErrNotFound;

	if (aAdapterId == KUidNSmlAdapterContact.iUid)
		{
		id = EApplicationIdContact;
		}
	if (aAdapterId == KUidNSmlAdapterCalendar.iUid)
		{
		id = EApplicationIdCalendar;
		}
	if (aAdapterId == KUidNSmlAdapterEMail.iUid)
		{
		id = EApplicationIdEmail;
		}
	if (aAdapterId == KUidNSmlAdapterNote.iUid)
		{
		id = EApplicationIdNote;
		}
	if (id == KErrNotFound) // Check if this operator specific adapter
	    {
	    id = AppIdFromOperatorSpecificProviderId( aAdapterId );
	    }
	return id;
	}

// -----------------------------------------------------------------------------
// TUtil::AppIdFromOperatorSpecificProviderId
//
// -----------------------------------------------------------------------------
//
TInt TUtil::AppIdFromOperatorSpecificProviderId(TInt aAdapterId)
    {
    TInt id=KErrNotFound;
    CRepository* repository = NULL;
    
    TRAPD(err, repository = CRepository::NewL(KCRUidOperatorDatasyncInternalKeys));
    if (err == KErrNone)
        {
        TInt operatorContactsProvider = KErrNotFound;
        err = repository->Get(KNsmlOpDsOperatorAdapterUid, operatorContactsProvider);
        
        if ( err == KErrNone && aAdapterId == operatorContactsProvider )
            {
            id = EApplicationIdContact;
            }
        delete repository;
        }
    return id;
    }


// -----------------------------------------------------------------------------
// TUtil::IsToDay
//
// -----------------------------------------------------------------------------
//
TBool TUtil::IsToday(TTime aTime)
	{
	TTime now;
	now.HomeTime();
	
	TInt day1 = now.DayNoInYear();
	TInt day2 = aTime.DayNoInYear();
	
	TDateTime date1 = now.DateTime();
	TDateTime date2 = aTime.DateTime();
	
	
	TTimeIntervalDays daysBetween = now.DaysFrom(aTime);
	
	if (day1 != day2 || date1.Year() != date2.Year())
		{
		return EFalse;
		}
		
	if (daysBetween.Int() > 0)
		{
		return EFalse;
		}
		
	return ETrue; 
	}


// -----------------------------------------------------------------------------
// TUtil::SyncTimeLC
//
// -----------------------------------------------------------------------------
//
HBufC* TUtil::SyncTimeLC(TTime aLastSync)
	{
	TTime homeTime = ConvertUniversalToHomeTime(aLastSync);
	
	HBufC* hBuf = HBufC::NewLC(KBufSize255);
	TPtr ptr = hBuf->Des();

	if (IsToday(homeTime))
		{
		TBuf<KBufSize> timeFormat;
		CAspResHandler::ReadL(timeFormat, R_QTN_TIME_USUAL_WITH_ZERO);
		homeTime.FormatL(ptr, timeFormat);
		}
	else
		{
		TBuf<KBufSize> dateFormat;
		CAspResHandler::ReadL(dateFormat, R_QTN_DATE_USUAL_WITH_ZERO);
		homeTime.FormatL(ptr, dateFormat);
		}
   
	return hBuf;
	}
	
	
// -----------------------------------------------------------------------------
// TUtil::ConvertUniversalToHomeTime
//
// -----------------------------------------------------------------------------
//
TTime TUtil::ConvertUniversalToHomeTime(const TTime& aUniversalTime)
    {
    TTime time(aUniversalTime);   // time stores UTC time.

    TLocale locale;
    TTimeIntervalSeconds universalTimeOffset(locale.UniversalTimeOffset());
    
    // Add locale's universal time offset to universal time.
    time += universalTimeOffset;    // time stores Local Time.

    // If home daylight saving in effect, add one hour offset.
    if (locale.QueryHomeHasDaylightSavingOn())
        {
        TTimeIntervalHours daylightSaving(1);
        time += daylightSaving;
        }

    return time;
    }
	

// -----------------------------------------------------------------------------
// TUtil::GetDateTextL
//
// -----------------------------------------------------------------------------
//
void TUtil::GetDateTextL(TDes& aText, TTime aDateTime)
	{
	TTime homeTime = ConvertUniversalToHomeTime(aDateTime);
	
	HBufC* hBuf = CAspResHandler::ReadLC(R_QTN_DATE_USUAL_WITH_ZERO);
    homeTime.FormatL(aText, *hBuf);
    CleanupStack::PopAndDestroy(hBuf);
	}


// -----------------------------------------------------------------------------
// TUtil::GetTimeTextL
//
// -----------------------------------------------------------------------------
//
void TUtil::GetTimeTextL(TDes& aText, TTime aDateTime)
	{
	TTime homeTime = ConvertUniversalToHomeTime(aDateTime);
	
	HBufC* hBuf = CAspResHandler::ReadLC(R_QTN_TIME_USUAL_WITH_ZERO);
    homeTime.FormatL(aText, *hBuf);
    CleanupStack::PopAndDestroy(hBuf);
	}


// -----------------------------------------------------------------------------
// TUtil::GetDateTimeTextL
//
// -----------------------------------------------------------------------------
//
void TUtil::GetDateTimeTextL(TDes& aText, TTime aDateTime)
	{
	TDateTime dt = aDateTime.DateTime();
	aText.Format(_L("%02d.%02d.%04d %02d:%02d:%02d"), dt.Day()+1, dt.Month()+1, dt.Year(),  dt.Hour(), dt.Minute(), dt.Second());
	}


// -----------------------------------------------------------------------------
// TUtil::LaunchHelpAppL
//
// -----------------------------------------------------------------------------
//
void TUtil::LaunchHelpAppL()
	{
	if (!FeatureManager::FeatureSupported(KFeatureIdHelp))
		{
		return;
		}
		
	CEikonEnv* eikEnv = CEikonEnv::Static();
	HlpLauncher::LaunchHelpApplicationL(eikEnv->WsSession(), eikEnv->EikAppUi()->AppHelpContextL());
	}


// -----------------------------------------------------------------------------
// TUtil::LaunchHelpAppL
//
// -----------------------------------------------------------------------------
//
void TUtil::LaunchHelpAppL(CEikonEnv* aEikonkEnv)
	{
	if (!FeatureManager::FeatureSupported(KFeatureIdHelp))
		{
		return;
		}
		
	CEikonEnv* eikEnv = CEikonEnv::Static();
	HlpLauncher::LaunchHelpApplicationL(aEikonkEnv->WsSession(), 
	                                    aEikonkEnv->EikAppUi()->AppHelpContextL());
	}


// ---------------------------------------------------------
// TUtil::SettingEnforcementStateL
// 
// Checks if setting enforcement is activated.
// ---------------------------------------------------------
TBool TUtil::SettingEnforcementStateL()
    {
    
 FeatureManager::InitializeLibL();
 if(!FeatureManager::FeatureSupported(KFeatureIdSapPolicyManagement))
 {
		//#ifndef __SAP_POLICY_MANAGEMENT
		FeatureManager::UnInitializeLib();
		    return EFalse;
		//#else
}
else
{
	FeatureManager::UnInitializeLib();
	CSettingEnforcementInfo* info = CSettingEnforcementInfo::NewL();
	CleanupStack::PushL(info);

	TBool active = EFalse;
	User::LeaveIfError(info->EnforcementActive(EDataSyncEnforcement, active));
	CleanupStack::PopAndDestroy(info);

	return active;
 //#endif
}


    }


// ---------------------------------------------------------
// TUtil::SettingEnforcementState
// 
// Checks if setting enforcement is activated.
// ---------------------------------------------------------
TBool TUtil::SettingEnforcementState()
    {
    TBool ret = EFalse;
    
    TRAP_IGNORE(ret = SettingEnforcementStateL());
    
    return ret;
    }


// ---------------------------------------------------------
// TUtil::NumberConversionLC
// 
// ---------------------------------------------------------
CDesCArray* TUtil::NumberConversionLC(CDesCArray* aList)
    {
    CDesCArrayFlat* arr = new (ELeave) CDesCArrayFlat(KDefaultArraySize);
    CleanupStack::PushL(arr);
    
    TInt count = aList->Count();
    
    for (TInt i=0; i<count; i++)
    	{
    	TBuf<KBufSize> buf((*aList)[i]);
     	AknTextUtils::DisplayTextLanguageSpecificNumberConversion(buf);
     	arr->AppendL(buf);
    	}
    	
    return arr;
    }



#ifdef _DEBUG

// -------------------------------------------------------------------------------
// TUtil::Print
//
// -------------------------------------------------------------------------------
//
void TUtil::Print(const TDesC& aText)
    {
	CEikonEnv::Static()->InfoMsg(aText);
	}


// -------------------------------------------------------------------------------
// TUtil::Print
//
// -------------------------------------------------------------------------------
//
void TUtil::Print(const TDesC& aText, TInt aNum)
    {
	_LIT(KFormat, "%S (%d)");

	TBuf<KBufSize> buf;
	buf.Format(KFormat, &aText, aNum);
	CEikonEnv::Static()->InfoMsg(buf);
	}


// -------------------------------------------------------------------------------
// TUtil::GetMandatoryFieldText
//
// -------------------------------------------------------------------------------
//
void TUtil::GetMandatoryFieldText(TDes& aText, TInt aStatus)
    {
	switch (aStatus)
		{
		case EMandatoryNoProfileName:
            aText = _L("no profile name");
			break;
		case EMandatoryNoHostAddress:
			aText = _L("no host address");
			break;
		case EMandatoryNoContent:
			aText = _L("no content");
			break;
		case EMandatoryNoLocalDatabase:
			aText = _L("no local database");
			break;
		case EMandatoryNoRemoteDatabase:
			aText = _L("no remote database");
			break;
		default:
			aText = _L("profile ok");
			break;
		}
    }


// -----------------------------------------------------------------------------
// TUtil::TimeBefore
//
// Function returns TTime of the current time (needed with function TimeAfter).
// -----------------------------------------------------------------------------
//
TTime TUtil::TimeBefore()
{
    TTime now;
	now.UniversalTime();
	return now;
}


// -----------------------------------------------------------------------------
// TUtil::TimeAfter
//
// Function returns milliseconds passed since aBefore.
// -----------------------------------------------------------------------------
//
TInt TUtil::TimeAfter(TTime aBefore)
{
	TTime after;
	after.UniversalTime();
	TTimeIntervalMicroSeconds microSeconds = after.MicroSecondsFrom(aBefore); 
	TInt seconds = microSeconds.Int64()/1000;
	return seconds;
}


// -----------------------------------------------------------------------------
// TUtil::TimeAfter
//
// -----------------------------------------------------------------------------
//
void TUtil::TimeAfter(TTime aBefore, const TDesC& aText)
    {
	TTime after;
	after.UniversalTime();
	TTimeIntervalMicroSeconds microSeconds = after.MicroSecondsFrom(aBefore); 
	
	FTRACE( RDebug::Print(_L("%S %d ms"), &aText, microSeconds.Int64()/1000) );
    }


// -----------------------------------------------------------------------------
// TUtil::GetApplicationNameL
//
// -----------------------------------------------------------------------------
//
void TUtil::GetApplicationName(TDes& aText, TInt aApplicationId)
    {
	switch (aApplicationId)
		{
		case EApplicationIdSync:
			aText = _L("EApplicationIdSync");
			break;
		case EApplicationIdContact:
			aText = _L("EApplicationIdContact");
			break;
		case EApplicationIdCalendar:
			aText = _L("EApplicationIdCalendar");
			break;
		case EApplicationIdEmail:
			aText = _L("EApplicationIdEmail");
			break;
		case EApplicationIdMms:
			aText = _L("EApplicationIdMms");
			break;
		case EApplicationIdNote:
			aText = _L("EApplicationIdNote");
			break;
		default:
			aText = _L("unknown app");
			break;
		}
    }

#endif



/******************************************************************************
 * class TURIParser
 ******************************************************************************/


// ---------------------------------------------------------
// TURIParser::TURIParser
// 
// ---------------------------------------------------------
TURIParser::TURIParser(const TDesC& aStr) : iOriginalStr(aStr)
    {
    SkipHttp();
    }


// ---------------------------------------------------------
// TURIParser::GetUriWithoutPort
// 
// URI format: "http://serveraddress/documentname/"
// ---------------------------------------------------------
void TURIParser::GetUriWithoutPort(TDes& aText)
	{
	_LIT(KSlash, "/");
	
	aText = KNullDesC;
	
	TPtrC http = ParseHttp();
	TPtrC address = ParseAddress();
	TPtrC document = ParseDocument();
	
	TUtil::StrAppend(aText, http);
	TUtil::StrAppend(aText, address);
	
	if (document.Length() > 0)
		{
		TUtil::StrAppend(aText, KSlash);
		TUtil::StrAppend(aText, document);
		}
	//else if (aText.Length() > 0)
	//	{
	//	TUtil::StrAppend(aText, KSlash);
	//	}
	}
	

// ---------------------------------------------------------
// TURIParser::GetUriWithPort
// 
// URI format: "http://serveraddress:port/documentname/"
// ---------------------------------------------------------
void TURIParser::GetUriWithPort(TDes& aText, const TInt aPort)
	{
	_LIT(KColon, ":");
	_LIT(KSlash, "/");
	
	aText = KNullDesC;
	
	TPtrC http = ParseHttp();
	
	TPtrC address = ParseAddress();
	
	TPtrC document = ParseDocument();
	
	TUtil::StrAppend(aText, http);
	TUtil::StrAppend(aText, address);
	
	TBuf<KBufSize32> buf;
	buf.Num(aPort);
	TUtil::StrAppend(aText, KColon);
	TUtil::StrAppend(aText, buf);
	
	if (document.Length() > 0)
		{
		TUtil::StrAppend(aText, KSlash);
		TUtil::StrAppend(aText, document);
		}
	//else if (aText.Length() > 0)
	//	{
	//	TUtil::StrAppend(aText, KSlash);
	//	}
	}


// ---------------------------------------------------------
// TURIParser::Port
// 
// ---------------------------------------------------------
TInt TURIParser::Port()
	{
	TInt port = KErrNotFound;
	
	TInt err = ParsePort(port);
	if (err != KErrNone)
		{
		return KErrNotFound;
		}
		
	return port;
	}


// ---------------------------------------------------------
// TURIParser::DefaultPort
// 
// ---------------------------------------------------------
TInt TURIParser::DefaultPort()
	{
	_LIT(KHttpsHeader, "https://");
	
	TInt pos = iOriginalStr.FindF(KHttpsHeader);
	if (pos != KErrNotFound)
		{
		return EDefaultHttpsPort;
		}

	return EDefaultHttpPort;
	}


// ---------------------------------------------------------
// TURIParser::IsValidUri
// 
// ---------------------------------------------------------
TBool TURIParser::IsValidUri(const TDesC& aText)
	{
	_LIT(KHttpHeader, "http://");
	_LIT(KHttpsHeader, "https://");

	const TInt KHttpLength = 7;
	const TInt KHttpsLength = 8;
	
	// IsValidDomainL this does not accept comma ("http://" fails)
	//return MsvUiServiceUtilities::IsValidDomainL(aText);
	
	if (TUtil::IsEmpty(aText))
		{
		return EFalse;
		}
		
    if (aText.Compare(KHttpHeader) == 0)
    	{
    	return EFalse;
    	}
	
    if (aText.Compare(KHttpsHeader) == 0)
    	{
    	return EFalse;
    	}
    
    if (aText.Left(KHttpLength).Compare(KHttpHeader) != 0
    				&& aText.Left(KHttpsLength).Compare(KHttpsHeader) != 0)
    	{
    	return EFalse;
    	}
	
	return ETrue;
	}

// ---------------------------------------------------------
// TURIParser::IsValidBluetoothHostAddress
// 
// ---------------------------------------------------------
TBool TURIParser::IsValidBluetoothHostAddress(const TDesC& aText)
	{
	_LIT(KHttpHeader, "http://");
	_LIT(KHttpsHeader, "https://");

	const TInt KHttpLength = 7;
	const TInt KHttpsLength = 8;
	
	// IsValidDomainL this does not accept comma ("http://" fails)
	//return MsvUiServiceUtilities::IsValidDomainL(aText);
	
	if (TUtil::IsEmpty(aText))
		{
		return EFalse;
		}
		
    if (aText.Compare(KHttpHeader) == 0)
    	{
    	return EFalse;
    	}
	
    if (aText.Compare(KHttpsHeader) == 0)
    	{
    	return EFalse;
    	}
    
    if (aText.Left(KHttpLength).Compare(KHttpHeader) == 0
    				|| aText.Left(KHttpsLength).Compare(KHttpsHeader) == 0)
    	{
    	return EFalse;
    	}
	
	return ETrue;
	}
// ---------------------------------------------------------
// TURIParser::IsValidPort
// 
// ---------------------------------------------------------
TBool TURIParser::IsValidPort(const TInt aPort)
	{
	if (aPort < TURIParser::EMinURIPortNumber || 
	    aPort > TURIParser::EMaxURIPortNumber)
		{
		return EFalse;
		}
		
	return ETrue;
	}


// ---------------------------------------------------------
// TURIParser::SkipHttp
// 
// Set pointer to the end of "http://".
// ---------------------------------------------------------
void TURIParser::SkipHttp()
	{
    TInt start = KErrNotFound;
    TInt end   = KErrNotFound;
    TStr str(iOriginalStr);
    
    GetHttpPos(start, end);
    
    if (start != KErrNotFound)
    	{
    	iPtr.Set(str.Right(end+1));
    	}
    else
    	{
    	iPtr.Set(str.Right(0));
    	}
	}


// ---------------------------------------------------------
// TURIParser::ParseHttp
// 
// ---------------------------------------------------------
TPtrC TURIParser::ParseHttp()
	{
    TInt start = KErrNotFound;
    TInt end   = KErrNotFound;
    
    GetHttpPos(start, end);
    
    if (start == KErrNotFound)
    	{
    	return TPtrC();
    	}
    
   	TStr str(iOriginalStr);
    return str.SubStr(start, end);
	}


// ---------------------------------------------------------
// TURIParser::GetHttpPos
// 
// ---------------------------------------------------------
void TURIParser::GetHttpPos(TInt& aStartPos, TInt& aEndPos)
	{
	_LIT(KHttpHeader, "http://");
    _LIT(KHttpsHeader, "https://");

	aEndPos = KErrNotFound;
	
	aStartPos = iOriginalStr.FindF(KHttpHeader);
	if (aStartPos != KErrNotFound)
		{
		aEndPos = aStartPos + KHttpHeader().Length() - 1;
		return;
		}
	
	aStartPos = iOriginalStr.FindF(KHttpsHeader);
	if (aStartPos != KErrNotFound)
		{
		aEndPos = aStartPos + KHttpsHeader().Length() - 1;
		return;
		}
	}


// ---------------------------------------------------------
// TURIParser::ParseAddress
// 
// ---------------------------------------------------------
TPtrC TURIParser::ParseAddress()
	{
	const TChar KSlash('/');
	const TChar KColon(':');
	
	TStr str(iPtr);
	
    TInt firstSlash = str.Find(0, KSlash);
	TInt firstcolon = str.Find(0, KColon);
	
	TBool portFound = EFalse;
	if (firstcolon != KErrNotFound)
		{
		if (firstSlash == KErrNotFound)
			{
			portFound = ETrue;
			}
		else if (firstcolon < firstSlash)
			{
			portFound = ETrue;
			}
		}
    
	if (portFound)
		{
		// address is text before first colon
		return str.Left(firstcolon-1);
		}
	else if (firstSlash != KErrNotFound)
		{
		// address is text before first slash
		return str.Left(firstSlash-1);
		}
	else
		{
		// address is all text
		return str.Right(0);
		}
	}


// ---------------------------------------------------------
// TURIParser::ParseDocument
// 
// ---------------------------------------------------------
TPtrC TURIParser::ParseDocument()
	{
	const TChar KSlash('/');
	
	TStr str(iPtr);
    TInt firstSlash = str.Find(0, KSlash);
    
	if (firstSlash != KErrNotFound)
		{
		// document is all text after first slash
		return str.Right(firstSlash+1);
		}
		
	return TPtrC();
	
	}


// ---------------------------------------------------------
// TURIParser::ParsePort
// 
// ---------------------------------------------------------
TInt TURIParser::ParsePort(TInt& aNumber)
	{
	TPtrC port = ParsePort();
	if (port.Length() == 0)
		{
		return KErrNotFound;
		}
		
	return TUtil::StrToInt(port, aNumber);
	}


// ---------------------------------------------------------
// TURIParser::ParsePort
// 
// ---------------------------------------------------------
TPtrC TURIParser::ParsePort()
	{
	const TChar KSlash('/');
	const TChar KColon(':');
	
	TStr str(iPtr);
    TInt firstSlash = str.Find(0, KSlash);
	TInt firstColon = str.Find(0, KColon);
    
	if (firstSlash != KErrNotFound)
		{
		if (firstColon != KErrNotFound && firstColon < firstSlash)
			{
		    // port number is text between colon and slash 
		    return str.SubStrEx(firstColon, firstSlash);
			}
		}
	else 
		{
		if (firstColon != KErrNotFound)
			{
		    // port number is all text after colon 
		    return str.Right(firstColon+1);
			}
		}
		
	return TPtrC();
	}




/******************************************************************************
 * class TStr
 ******************************************************************************/


// -----------------------------------------------------------------------------
// TStr::TStr
//
// C++ default constructor can NOT contain any code, that
// might leave.
// -----------------------------------------------------------------------------
//
TStr::TStr(const TDesC& aStr) : iStr(aStr)
    {
    }


// -------------------------------------------------------------------------------
// TStr::Mid
//
// -------------------------------------------------------------------------------
//
TPtrC TStr::Mid(TInt aPos)
    {
	TInt len = iStr.Length();
	if ( (aPos < 0) || (aPos >= len) )
	    {
		return TPtrC();  // return empty descriptor
	    }

	return iStr.Mid(aPos);
    }


// -------------------------------------------------------------------------------
// TStr::Mid
//
// -------------------------------------------------------------------------------
//
TPtrC TStr::Mid(TInt aPos, TInt aLen)
    {
	TInt len = iStr.Length();
	if ( (aPos < 0) || (aPos >= len) )
	    {
		return TPtrC();
	    }
	if ( (aLen <= 0) || (aPos + aLen > len) )
	    {
		return TPtrC();
	    }

	return iStr.Mid(aPos, aLen);
    }


// -------------------------------------------------------------------------------
// TStr::Right
//
// -------------------------------------------------------------------------------
//
TPtrC TStr::Right(TInt aPos)
    {
	return Mid(aPos);
    }


// -------------------------------------------------------------------------------
// TStr::Left
//
// -------------------------------------------------------------------------------
//
TPtrC TStr::Left(TInt aPos)
    {
	TInt len = iStr.Length();

	if ( (aPos < 0) || (len == 0) )
	    {
		return TPtrC();
	    }

	TInt pos = len;
	if ( (aPos + 1) < len )
	    {
		pos = aPos + 1;
	    }

	return iStr.Left(pos);
    }


// -------------------------------------------------------------------------------
// TStr::SubStr
//
// -------------------------------------------------------------------------------
//
TPtrC TStr::SubStr(TInt aStartPos, TInt aEndPos)
    {
	return Mid(aStartPos, aEndPos - aStartPos + 1);
    }


// -------------------------------------------------------------------------------
// TStr::SubStrEx
//
// -------------------------------------------------------------------------------
//
TPtrC TStr::SubStrEx(TInt aStartPos, TInt aEndPos)
    {
	return Mid(aStartPos + 1, aEndPos - aStartPos - 1);
    }


// -------------------------------------------------------------------------------
// TStr::LastPos
//
// -------------------------------------------------------------------------------
//
TInt TStr::LastPos()
    {
	return iStr.Length() - 1;
    }


// -------------------------------------------------------------------------------
// TStr::Len
//
// -------------------------------------------------------------------------------
//
TInt TStr::Len()
    {
    return iStr.Length();
    }

// -------------------------------------------------------------------------------
// TStr::Compare
//
// -------------------------------------------------------------------------------
//
TBool TStr::Compare(TInt aPos, TChar aChar)
    {
	TInt len = iStr.Length();
	if ( (aPos < 0) || (aPos >= len) )
	    {
		return EFalse;
	    }
	TChar ch = iStr[aPos];
	if (ch == aChar)
	    {
		return ETrue;
	    }
	return EFalse;
    }


// -------------------------------------------------------------------------------
// TStr::Find
//
// -------------------------------------------------------------------------------
//
TInt TStr::Find(TInt aPos, TChar aChar)
    {
	TInt len = iStr.Length();
	if ( (aPos < 0) || (aPos >= len) )
	    {
		return KErrNotFound;
	    }
	    
	TPtrC ptr(iStr.Mid(aPos)); // move to possition aPos
	return ptr.Locate(aChar);
    }


// -------------------------------------------------------------------------------
// TStr::Trim
//
// -------------------------------------------------------------------------------
//
TPtrC TStr::Trim()
    {
	TInt first = FirstNonSpace();
	TInt last = LastNonSpace();

	return Mid(first, last - first + 1);
    }


// -------------------------------------------------------------------------------
// TStr::FirstNonSpace
//
// -------------------------------------------------------------------------------
//
TInt TStr::FirstNonSpace()
    {
	TInt len = Len();
	for (TInt i = 0; i < len; i++)
	    {
		TChar c = iStr[i];
        if (!c.IsSpace())
		    {
		    return i;
		    }
	    }
	return KErrNotFound;
    }


// -------------------------------------------------------------------------------
// TStr::LastNonSpace
//
// -------------------------------------------------------------------------------
//
TInt TStr::LastNonSpace()
    {
	TInt last = LastPos();
	for (TInt i = last; i >= 0; i--)
	    {
		TChar c = iStr[i];
        if (!c.IsSpace())
		    {
		    return i;
		    }
	    }
	return KErrNotFound;
    }



/******************************************************************************
 * class TFlag
 ******************************************************************************/

// -----------------------------------------------------------------------------
// TFlag::TFlag
//
// C++ default constructor can NOT contain any code, that
// might leave.
// -----------------------------------------------------------------------------
//
TFlag::TFlag(TUint32& aFlag) : iFlag(aFlag)
    {
    }

// -------------------------------------------------------------------------------
// TFlag::SetOn
//
// -------------------------------------------------------------------------------
//
void TFlag::SetOn(const TUint32 aValue)
    {
    iFlag |= aValue;
    }

// -------------------------------------------------------------------------------
// TFlag::SetOff
//
// -------------------------------------------------------------------------------
//
void TFlag::SetOff(const TUint32 aValue)
    {
    iFlag &= ~aValue;
    }

// -------------------------------------------------------------------------------
// TFlag::IsOn
//
// -------------------------------------------------------------------------------
//
TBool TFlag::IsOn(const TUint32 aValue) const
    {
    return iFlag & aValue;
    }



/*******************************************************************************
 * class CAspIdleWait
 *******************************************************************************/


// -----------------------------------------------------------------------------
// CAspIdleWait::WaitL
// 
// -----------------------------------------------------------------------------
//
void CAspIdleWait::WaitL()
	{
    CAspIdleWait* waiter = CAspIdleWait::NewL();
    CleanupStack::PushL(waiter);
    
    CIdle* idle = CIdle::NewL(CActive::EPriorityIdle);
	CleanupStack::PushL(idle);
	
	idle->Start(TCallBack(IdleCallback, waiter));
	if (!waiter->iWait.IsStarted())
		{
		waiter->iWait.Start();
		}

    CleanupStack::PopAndDestroy(idle);
    CleanupStack::PopAndDestroy(waiter);
    }


// -----------------------------------------------------------------------------
// CAspIdleWait::NewLC
//
// -----------------------------------------------------------------------------
//
CAspIdleWait* CAspIdleWait::NewL()
    {
    CAspIdleWait* self = new (ELeave) CAspIdleWait();
    return self;
    }


// -----------------------------------------------------------------------------
// CAspIdleWait::CAspIdleWait
// 
// -----------------------------------------------------------------------------
//
CAspIdleWait::CAspIdleWait() 
    {
    }


// -----------------------------------------------------------------------------
// Destructor
//
// -----------------------------------------------------------------------------
//
CAspIdleWait::~CAspIdleWait()
    {
    }


// -----------------------------------------------------------------------------
// CAspIdleWait::IdleCallback
// 
// -----------------------------------------------------------------------------
//
TInt CAspIdleWait::IdleCallback(TAny* aThisPtr)
    {
    static_cast<CAspIdleWait*>(aThisPtr)->iWait.AsyncStop();
    return KErrNone;
    }



/******************************************************************************
 * class CAspActiveCaller
 ******************************************************************************/


// -----------------------------------------------------------------------------
// CAspActiveCaller::NewL
// 
// -----------------------------------------------------------------------------
//
CAspActiveCaller* CAspActiveCaller::NewL(MAspActiveCallerObserver* aObserver)
    {
    FLOG( _L("CAspActiveCaller::NewL START") );
    
    CAspActiveCaller* self = new (ELeave) CAspActiveCaller(aObserver);
	CleanupStack::PushL(self);
	self->ConstructL();
	CleanupStack::Pop(self);

    FLOG( _L("CAspActiveCaller::NewL END") );
	return self;
    }


// -----------------------------------------------------------------------------
// Destructor
// 
// -----------------------------------------------------------------------------
//
CAspActiveCaller::~CAspActiveCaller()
    {
    FLOG( _L("CAspActiveCaller::~CAspActiveCaller START") );
    
	Cancel();
	iTimer.Close();
	
    FLOG( _L("CAspActiveCaller::~CAspActiveCaller END") );
    }


// -----------------------------------------------------------------------------
// CAspActiveCaller::CAspActiveCaller
// 
// -----------------------------------------------------------------------------
//
CAspActiveCaller::CAspActiveCaller(MAspActiveCallerObserver* aObserver) : CActive(CActive::EPriorityStandard)
    {
	iObserver = aObserver;
    }


// -----------------------------------------------------------------------------
// CAspActiveCaller::ConstructL
// 
// -----------------------------------------------------------------------------
//
void CAspActiveCaller::ConstructL()
    {
	User::LeaveIfError(iTimer.CreateLocal());
	CActiveScheduler::Add(this);
    }


// -----------------------------------------------------------------------------
// CAspActiveCaller::DoCancel
//
// -----------------------------------------------------------------------------
//
void CAspActiveCaller::DoCancel()
    {
    FLOG( _L("CAspActiveCaller::DoCancel START") );
    
	iTimer.Cancel();
	
    FLOG( _L( "CAspActiveCaller::DoCancel END" ) );
    }


// -----------------------------------------------------------------------------
// CAspActiveCaller::RunL
//
// -----------------------------------------------------------------------------
//
void CAspActiveCaller::RunL()
    {
    FLOG( _L("CAspActiveCaller::RunL START") );

	TRAP_IGNORE(iObserver->HandleActiveCallL(iCallId));

    FLOG( _L("CAspActiveCaller::RunL END") );
    }


// -----------------------------------------------------------------------------
// CAspActiveCaller::Request
//
// This function calls this class RunL.
// -----------------------------------------------------------------------------
//
void CAspActiveCaller::Request()
    {
    FLOG( _L("CAspActiveCaller::Request START") );
    
	Cancel();
	SetActive();
	TRequestStatus* status = &iStatus;
	User::RequestComplete(status, KErrNone);
    
    FLOG( _L("CAspActiveCaller::Request END") );
    }


// -----------------------------------------------------------------------------
// CAspActiveCaller::Start
//
// -----------------------------------------------------------------------------
//
void CAspActiveCaller::Start(TInt aCallId, TInt aMilliseconds)
    {
    FLOG( _L("CAspActiveCaller::Start START") );
    
	if (IsActive())
		{
		return;
		}
	
	iCallId = aCallId;

	if (aMilliseconds <= 0)
		{
		Request();  // no delay - complete right away
		}
	else
		{
	    iTimer.After(iStatus, aMilliseconds*1000);
	    SetActive();
		}
    
    FLOG( _L("CAspActiveCaller::Start END") );
    }




/******************************************************************************
 * class CAspBearerHandler
 ******************************************************************************/


// -----------------------------------------------------------------------------
// CAspBearerHandler::NewLC
//
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CAspBearerHandler* CAspBearerHandler::NewL(const TAspParam& aParam)
    {
    CAspBearerHandler* self = new (ELeave) CAspBearerHandler(aParam);
	CleanupStack::PushL(self);
	self->ConstructL();
	CleanupStack::Pop(self);

	return self;
    }


// -----------------------------------------------------------------------------
// Destructor
//
// -----------------------------------------------------------------------------
//
CAspBearerHandler::~CAspBearerHandler()
	{
	iList.Close();
	}


// -----------------------------------------------------------------------------
// CAspBearerHandler::CAspBearerHandler
// -----------------------------------------------------------------------------
//
CAspBearerHandler::CAspBearerHandler(const TAspParam& aParam)
	{
	__ASSERT_ALWAYS(aParam.iSyncSession, TUtil::Panic(KErrGeneral));

	iSyncSession = aParam.iSyncSession;	
	}


// -----------------------------------------------------------------------------
// CAspBearerHandler::ConstructL
//
// Symbian 2nd phase constructor can leave.
// -----------------------------------------------------------------------------
//
void CAspBearerHandler::ConstructL(void)
    {
	CreateSupportedBearerListL();
    }


// -----------------------------------------------------------------------------
// CAspBearerHandler::IsSupported
//
// -----------------------------------------------------------------------------
//
TBool CAspBearerHandler::IsSupported(TInt aBearer)
	{
	TInt count = iList.Count();

    for (TInt i=0; i<count; i++)
		{
		TAspBearerItem& item = iList[i];
		if (item.iBearerType == aBearer)
			{
			return ETrue;
			}
		}
	
	return EFalse; // unknown bearer
}


// -----------------------------------------------------------------------------
// CAspBearerHandler::BearerForListIndex
//
// -----------------------------------------------------------------------------
//
TInt CAspBearerHandler::BearerForListIndex(TInt aIndex)
	{
	TInt count = iList.Count();
	if (aIndex < 0 || aIndex >= count)
	    {
		TUtil::Panic(KErrArgument);
	    }

	TAspBearerItem& item = iList[aIndex];
	return item.iBearerType;
	}


// -----------------------------------------------------------------------------
// CAspBearerHandler::ListIndexForBearer
//
// -----------------------------------------------------------------------------
//
TInt CAspBearerHandler::ListIndexForBearer(TInt aBearer)
	{
	TInt count = iList.Count();
	for (TInt i=0; i<count; i++)
		{
		TAspBearerItem& item = iList[i];
		if (item.iBearerType == aBearer)
			{
			return i;
			}
		}

	return KErrNotFound;
	}


// -----------------------------------------------------------------------------
// CAspBearerHandler::CreateSupportedBearerListL
//
// -----------------------------------------------------------------------------
//
void CAspBearerHandler::CreateSupportedBearerListL()
	{
	RSyncMLTransport transport;
	
	RArray<TSmlTransportId> arr(8);
	CleanupClosePushL(arr);
	
	//
	// ListTransportsL returns transports that can be used in current phone.
	// RSyncMLSession uses FeatureManager to construct this list.
	//
	iSyncSession->ListTransportsL(arr);
	TInt count = arr.Count();
	
	for (TInt i=0; i<count; i++)
		{
		TInt id = arr[i];
		transport.OpenL(*iSyncSession, id);
		CleanupClosePushL(transport);
		
		TAspBearerItem item;
		TInt smlBearerId = transport.Identifier();
		item.iBearerType = AspBearerId(smlBearerId);  // convert bearer type
		TUtil::StrCopy(item.iBearerName, transport.DisplayName());
		

#ifndef __SYNCML_DS_OVER_HTTP   // KFeatureIdDsOverHttp
        
   		if (item.iBearerType == EAspBearerInternet)
			{
			CleanupStack::PopAndDestroy(&transport);
			continue;
			}
#endif

   		if (item.iBearerType != EAspBearerInternet && 
   		    item.iBearerType != EAspBearerBlueTooth)
			{
			CleanupStack::PopAndDestroy(&transport);
			continue; // only internet and bluetooth are supported
			}

		if (item.iBearerType != KErrNotFound)
			{
			User::LeaveIfError(iList.Append(item));
			}
		
		CleanupStack::PopAndDestroy(&transport);
		}
		
	CleanupStack::PopAndDestroy(&arr);
	}


// -----------------------------------------------------------------------------
// CAspBearerHandler::AspBearerId
//
// -----------------------------------------------------------------------------
//
TInt CAspBearerHandler::AspBearerId(const TInt aId)
	{
	if (aId == KUidNSmlMediumTypeInternet.iUid)
		{
		return EAspBearerInternet;
		}
	else if (aId == KUidNSmlMediumTypeBluetooth.iUid)
		{
		return EAspBearerBlueTooth;
		}
	else if (aId == KUidNSmlMediumTypeUSB.iUid)
		{
		return EAspBearerUsb;
		}
	else if (aId == KUidNSmlMediumTypeIrDA.iUid)
		{
		return EAspBearerIrda;
		}
	//else if (aId == KUidNSmlMediumTypeWSP.iUid)
	//	{
	//	return EAspBearerWsp;
	//	}
	//else if (aId == KUidNSmlMediumTypeNSmlUSB.iUid)
	//	{
	//	return EAspBearerSmlUsb;
	//	}

	else
		{
		return KErrNotFound;
		}
    }


// -----------------------------------------------------------------------------
// CAspBearerHandler::SmlBearerId
//
// -----------------------------------------------------------------------------
//
TInt CAspBearerHandler::SmlBearerId(const TInt aId)
	{
	if (aId == EAspBearerInternet)
		{
		return KUidNSmlMediumTypeInternet.iUid;
		}
	else if (aId == EAspBearerBlueTooth)
		{
		return KUidNSmlMediumTypeBluetooth.iUid;
    	}
	else if (aId == EAspBearerUsb)
		{
		return KUidNSmlMediumTypeUSB.iUid;		
		}
	else if (aId == EAspBearerIrda)
		{
		return KUidNSmlMediumTypeIrDA.iUid;		
		}
	//else if (aId == EAspBearerWsp)
	//	{
	//	return KUidNSmlMediumTypeWSP.iUid;		
	//	}
	//else if (aId == EAspBearerSmlUsb)
	//	{
	//	return KUidNSmlMediumTypeNSmlUSB.iUid;		
	//	}
	else
		{
		return KErrNotFound;
		}
	}


// -----------------------------------------------------------------------------
// CAspBearerHandler::DefaultBearer
//
// -----------------------------------------------------------------------------
//
TInt CAspBearerHandler::DefaultBearer()
	{
	if (IsSupported(EAspBearerInternet))
		{
		return EAspBearerInternet;
		}
	if (IsSupported(EAspBearerBlueTooth))
		{
		return EAspBearerBlueTooth;
		}
    if (IsSupported(EAspBearerUsb))
		{
		return EAspBearerUsb;
		}
	if (IsSupported(EAspBearerIrda))
		{
		return EAspBearerIrda;
		}

	return KErrNotFound; // something is wrong
	}


// -----------------------------------------------------------------------------
// CAspBearerHandler::GetBearerName
//
// -----------------------------------------------------------------------------
//
void CAspBearerHandler::GetBearerName(TDes& aText, TInt aBearerType)
	{
    aText = KNullDesC;
	TInt count = iList.Count();

	for (TInt i=0; i<count; i++)
		{
		TAspBearerItem& item = iList[i];
		if (item.iBearerType == aBearerType)
			{
			TUtil::StrCopy(aText, item.iBearerName);
			break;
			}
		}
	}


// -----------------------------------------------------------------------------
// CAspBearerHandler::BuildBearerListLC
//
// -----------------------------------------------------------------------------
//
CDesCArray* CAspBearerHandler::BuildBearerListLC()
	{	
	CDesCArray* arr = new (ELeave) CDesCArrayFlat(1);
	CleanupStack::PushL(arr);

	TInt count = iList.Count();
	for (TInt i=0; i<count; i++)
		{
		TAspBearerItem& item = iList[i];
		arr->AppendL(item.iBearerName);
		}

	return arr;
	}


// -----------------------------------------------------------------------------
// CAspBearerHandler::SupportedBearerCount
//
// -----------------------------------------------------------------------------
//
TInt CAspBearerHandler::SupportedBearerCount()
	{
	return iList.Count();
	}





/******************************************************************************
 * class CAspAccessPointHandler
 ******************************************************************************/



// -----------------------------------------------------------------------------
// CAspAccessPointHandler::NewLC
//
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CAspAccessPointHandler* CAspAccessPointHandler::NewL(const TAspParam& aParam)
    {
    CAspAccessPointHandler* self = new(ELeave) CAspAccessPointHandler(aParam);
	CleanupStack::PushL(self);
	self->ConstructL();
	CleanupStack::Pop(self);

	return self;
    }


// -----------------------------------------------------------------------------
// Destructor
//
// -----------------------------------------------------------------------------
//
CAspAccessPointHandler::~CAspAccessPointHandler()
	{
	delete iCommDb;
	delete iApUtil;
	}


// -----------------------------------------------------------------------------
// CAspAccessPointHandler::CAspAccessPointHandler
//
// -----------------------------------------------------------------------------
//
CAspAccessPointHandler::CAspAccessPointHandler(const TAspParam& /*aParam*/)
	{
	}


// -----------------------------------------------------------------------------
// CAspAccessPointHandler::ConstructL
//
// Symbian 2nd phase constructor can leave.
// -----------------------------------------------------------------------------
//
void CAspAccessPointHandler::ConstructL(void)
    {
	iCommDb = CCommsDatabase::NewL(EDatabaseTypeIAP);
	
	iApUtil = CApUtils::NewLC(*iCommDb);
	CleanupStack::Pop(iApUtil);
    }


// -----------------------------------------------------------------------------
// CAspAccessPointHandler::ShowApSelectDialogL
//
// -----------------------------------------------------------------------------
//
TInt CAspAccessPointHandler::ShowApSelectDialogL(TAspAccessPointItem& aItem)
	{
	FLOG( _L("CAspAccessPointHandler::ShowApSelectDialogL START") );

	aItem.iUid = KErrNotFound;
	aItem.iName = KNullDesC;

	TInt err(KErrNone);
	TInt retVal( KErrNone );
	TCmSettingSelection selection;
	TBearerFilterArray filterArray;

	TUint32 currentAp = 0;
	if (aItem.iUid2 != KAskAlways && aItem.iUid2 != KDefaultConnection)
		{
		FLOG( _L("ShowApSelectDialogL aItem.iUid2 = %d"), aItem.iUid2 );        
		// convert internet ap to Wap ap (CApSettingsHandler requires this)
		TRAP_IGNORE(currentAp = iApUtil->WapIdFromIapIdL(aItem.iUid2));
		}
	else
		{
		FLOG( _L("ShowApSelectDialogL KAskAlways or KDefaultConnection"));
		}

	// Mark the current selection
	selection.iResult = CMManager::EConnectionMethod;
	selection.iId = currentAp;
	FLOG( _L("ShowApSelectDialogL selection.iId = %d"), selection.iId );        
	
	// Start the connection dialog
	CCmApplicationSettingsUi* settings = CCmApplicationSettingsUi::NewL();
	CleanupStack::PushL( settings );

	TRAP ( err, retVal = settings->RunApplicationSettingsL( selection, 
		CMManager::EShowConnectionMethods, // Show only access points
		filterArray ) );
    	
	CleanupStack::PopAndDestroy(); // settings

	if (err != KErrNone)
	{
		// Error showing dialogue, return
		FLOG( _L("ShowApSelectDialogL err = %d"), err );
		return EAspDialogCancel;
	}

	if (retVal)
		{
		TAspAccessPointItem item;
		item.iUid = selection.iId;
		FLOG( _L("ShowApSelectDialogL Uid (%d)"), item.iUid );

		GetApInfo(item);

		// convert Wap ap to internet ap
		aItem.iUid = iApUtil->IapIdFromWapIdL(selection.iId);
		FLOG( _L("ShowApSelectDialogL Uid Conv (%d)"), item.iUid );
	    
		aItem.iName = item.iName;

		FLOG( _L("ShowApSelectDialogL RETURNING EAspDialogSelect") );
		return EAspDialogSelect;
		}
	else
		{
		FLOG( _L("ShowApSelectDialogL RETURNING EAspDialogCancel") );
		return EAspDialogCancel;
		}
	FLOG( _L("CAspAccessPointHandler::ShowApSelectDialogL END") );
	}


// -----------------------------------------------------------------------------
// CAspAccessPointHandler::GetApInfoL
//
// -----------------------------------------------------------------------------
//
TInt CAspAccessPointHandler::GetApInfoL(TAspAccessPointItem& aItem)
	{
	if (aItem.iUid == KAskAlways || aItem.iUid == KErrNotFound || aItem.iUid == KDefaultConnection)
		{
		return KErrNotFound;
		}

	CApSelect* selector = CApSelect::NewLC(*iCommDb,
	                             KEApIspTypeAll,
		                         BearerFlags(),
		                         KEApSortUidAscending);
	
	TInt ret = KErrNone;
	TBool found = EFalse;
	
	// find access point with id aId
	if (selector->MoveToFirst())
		{
		if (aItem.iUid == (TInt)selector->Uid())
			{
			found = ETrue;		
			}
		while (!found && selector->MoveNext())
			{
			if (aItem.iUid == (TInt)selector->Uid())
				{
				found = ETrue;
				}
			}
		}

	if (found) 
		{
		TUtil::StrCopy(aItem.iName, selector->Name());
		}
	else
		{
		aItem.iName = KNullDesC;
		ret = KErrNotFound;
		}
		
    CleanupStack::PopAndDestroy(selector);
	return ret;
	}
	

// -----------------------------------------------------------------------------
// CAspAccessPointHandler::GetApInfo
//
// -----------------------------------------------------------------------------
//
TInt CAspAccessPointHandler::GetApInfo(TAspAccessPointItem& aItem)
	{
	aItem.iName = KNullDesC;
	
	TInt ret = KErrNone;
	TRAPD(err, ret = GetApInfoL(aItem));
	
	if (err != KErrNone)
		{
		return KErrNotFound;
		}
	return ret;
	}


// -----------------------------------------------------------------------------
// CAspAccessPointHandler::GetInternetApInfo
//
// -----------------------------------------------------------------------------
//
TInt CAspAccessPointHandler::GetInternetApInfo(TAspAccessPointItem& aItem)
	{
	if (aItem.iUid == KAskAlways || aItem.iUid == KErrNotFound || aItem.iUid == KDefaultConnection)
		{
		return KErrNotFound;
		}

	TAspAccessPointItem item;
	
	// convert internet ap to Wap ap
	TRAPD(err, item.iUid = iApUtil->WapIdFromIapIdL(aItem.iUid));
	if (err != KErrNone)
		{
		return KErrNotFound;
		}
	
	TInt ret = GetApInfo(item);
	
	TUtil::StrCopy(aItem.iName, item.iName);
	return ret;
	}


// -----------------------------------------------------------------------------
// CAspAccessPointHandler::BearerFlags
//
// -----------------------------------------------------------------------------
//
TInt CAspAccessPointHandler::BearerFlags()
	{
	TInt flags;
	if (FeatureManager::FeatureSupported(KFeatureIdAppCsdSupport))
		{
		//flags = EApBearerTypeGPRS | EApBearerTypeCDMA | EApBearerTypeWLAN | EApBearerTypeHSCSD | EApBearerTypeCSD;
		flags = EApBearerTypeAllBearers;
		}
	else
		{
		flags = EApBearerTypeGPRS | EApBearerTypeCDMA | EApBearerTypeWLAN;
		}
		
	return flags;
	}




/******************************************************************************
 * class TAspSyncError
 ******************************************************************************/




// -----------------------------------------------------------------------------
// TAspSyncError::GetSmlErrorText
//
// -----------------------------------------------------------------------------
//
HBufC* TAspSyncError::GetSmlErrorText(TInt aErrorCode, TInt aTransport)
	{
	HBufC* hBuf = NULL;
	
	TRAPD(err, hBuf = GetSmlErrorTextL(aErrorCode, aTransport));
	
	if (err == KErrNone)
		{
		return hBuf;
		}
	else
		{
		return NULL;
		}
	}


// -----------------------------------------------------------------------------
// TAspSyncError::GetSmlErrorTextL
//
// -----------------------------------------------------------------------------
//
HBufC* TAspSyncError::GetSmlErrorTextL(TInt aErrorCode, TInt /*aTransport*/)
	{
    TInt id = R_ASP_LOG_ERR_SYSTEMERROR;  // "System Error"
   
	switch (aErrorCode)
		{
		case SyncMLError::KErrTransportAuthenticationFailure:
			{
			id = R_ASP_LOG_ERR_HTTPAUTH;  // "Http authentication failed"
		    break;
			}
	
		case SyncMLError::KErrAuthenticationFailure:
			{
			id = R_ASP_LOG_ERR_CLIENTAUTH;  // "Invalid user name or password"
		    break;
			}

		case KErrServerBusy:
		    id = R_ASP_LOG_ERR_SERVERBUSY;  // "Synchronisation server was busy"
		    break;
		    
		case SyncMLError::KErrServerDatabaseNotFound:
		    id = R_ASP_LOG_ERR_REMOTEDATABASE;  // "Invalid remote database"
		    break;

		case SyncMLError::KErrClientDatabaseNotFound:
		    id = R_ASP_LOG_ERR_LOCALDATABASE;  // "Unable to open database"
		    break;

		case SyncMLError::KErrConnectionError:
		    id = R_ASP_LOG_ERR_SERVERNOTRESPONDING; // "Server is not responding"
		    break;
		    
		case SyncMLError::KErrTransportSvrNoUri:
		    id = R_ASP_LOG_ERR_URIINVALID; // "Invalid host address"
		    break;
		
		case SyncMLError::KErrPhoneOnOfflineMode:
		    id = R_ASP_LOG_ERR_OFFLINE; // "Operation not possible in Off-line mode"
		    break;
		    
		case SyncMLError::KErrTransportRequest:
		case SyncMLError::KErrTransportHeader:
		case SyncMLError::KErrTransportSvrError:
		case SyncMLError::KErrTransportDisconnected:
		case SyncMLError::KErrCannotCommunicateWithServer:
		    id = R_ASP_LOG_ERR_COMM;  // "Error in communication"
		    break;
		    
		case SyncMLError::KErrVerDTDMissing:
		case SyncMLError::KErrProtoMissing:
		case SyncMLError::KErrVersionDTDNotSupported:
		case SyncMLError::KErrProtoNotSupported:
		    id = R_ASP_LOG_ERR_VERSIONNOTSUPPORTED;  // "Unsupported SyncML software version in server"
		    break;
       
		case SyncMLError::KErrSessionIdNotValid:
		case SyncMLError::KErrMappingInfoMissing:
		case SyncMLError::KErrMappingInfoNotAcked:
		case SyncMLError::KErrStatusCommandForCommandNotSent:
		case SyncMLError::KErrStatusCommandNotTheSame:
		case SyncMLError::KErrMissingStatusCommands:
		case SyncMLError::KErrFailedToAddRecord:
		case SyncMLError::KErrFailedToReplaceRecord:
		case SyncMLError::KErrFailedToDeleteRecord:
		case SyncMLError::KErrXmlParsingError:
		case SyncMLError::KErrReferenceToolkitError:
		case SyncMLError::KErrObjectTooLargeToSendToServer:
		case SyncMLError::KErrFailedToGetRecord:
		case SyncMLError::KErrUserInteractionFailed:
		case SyncMLError::KErrStatusSizeMismatch:
		case SyncMLError::KErrFailedToCloseDatabase:
		case SyncMLError::KErrDatabaseAdapterIndexError:
	   	    id = R_ASP_LOG_ERR_SERVERERROR;  // "Error in sync server"
		    break;
	        
		/* Implementation of CMCC PIM v3 begins*/
		case SyncMLError::KErrServerFull:
		    if ( FeatureManager::FeatureSupported(KFeatureIdFfTdCmccpimpromptserverfullwhenreceive420statuscodefromserver) )
		        {
                id = R_QTN_NSML_LOG_ERR_SERVERFULL;
		        }
		    break;
		/* Implementation of CMCC PIM v3 ends*/
		    
        default:
            id = R_ASP_LOG_ERR_SYSTEMERROR;  // "System Error"
		    break;
		}
		
	HBufC* hBuf = CAspResHandler::ReadLC(id);
	
#ifdef _DEBUG
	TBuf<KBufSize> buf2(hBuf->Des());
	TBuf<KBufSize> buf1;
	CleanupStack::PopAndDestroy(hBuf);
		
	hBuf = HBufC::NewLC(256);
	TPtr ptr = hBuf->Des();
		
	GetSyncMLErrorText(buf1, aErrorCode);
	ptr.Format(_L("%S (%S)"), &buf2, &buf1);
#endif		
		
	CleanupStack::Pop(hBuf);
	return hBuf;
	}
	

// -----------------------------------------------------------------------------
// TAspSyncError::GetSmlErrorValue
// 
// -----------------------------------------------------------------------------
TInt TAspSyncError::GetSmlErrorValue(TInt aErrorCode)
	{
    TInt id = R_ASP_LOG_ERR_SYSTEMERROR;  // "System Error"
   
	switch (aErrorCode)
		{
		case SyncMLError::KErrTransportAuthenticationFailure:
			{
			id = R_ASP_LOG_ERR_HTTPAUTH;  // "Http authentication failed"
		    break;
			}
	
		case SyncMLError::KErrAuthenticationFailure:
			{
			id = R_ASP_LOG_ERR_CLIENTAUTH;  // "Invalid user name or password"
		    break;
			}

		case KErrServerBusy:
		    id = R_ASP_LOG_ERR_SERVERBUSY;  // "Synchronisation server was busy"
		    break;
		    
		case SyncMLError::KErrServerDatabaseNotFound:
		    id = R_ASP_LOG_ERR_REMOTEDATABASE;  // "Invalid remote database"
		    break;

		case SyncMLError::KErrClientDatabaseNotFound:
		    id = R_ASP_LOG_ERR_LOCALDATABASE;  // "Unable to open database"
		    break;

		case SyncMLError::KErrConnectionError:
		    id = R_ASP_LOG_ERR_SERVERNOTRESPONDING; // "Server is not responding"
		    break;
		    
		case SyncMLError::KErrTransportSvrNoUri:
		    id = R_ASP_LOG_ERR_URIINVALID; // "Invalid host address"
		    break;
		
		case SyncMLError::KErrPhoneOnOfflineMode:
		    id = R_ASP_LOG_ERR_OFFLINE; // "Operation not possible in Off-line mode"
		    break;
		    
		case SyncMLError::KErrTransportRequest:
		case SyncMLError::KErrTransportHeader:
		case SyncMLError::KErrTransportSvrError:
		case SyncMLError::KErrTransportDisconnected:
		case SyncMLError::KErrCannotCommunicateWithServer:
		    id = R_ASP_LOG_ERR_COMM;  // "Error in communication"
		    break;
		    
		case SyncMLError::KErrVerDTDMissing:
		case SyncMLError::KErrProtoMissing:
		case SyncMLError::KErrVersionDTDNotSupported:
		case SyncMLError::KErrProtoNotSupported:
		    id = R_ASP_LOG_ERR_VERSIONNOTSUPPORTED;  // "Unsupported SyncML software version in server"
		    break;
       
		case SyncMLError::KErrSessionIdNotValid:
		case SyncMLError::KErrMappingInfoMissing:
		case SyncMLError::KErrMappingInfoNotAcked:
		case SyncMLError::KErrStatusCommandForCommandNotSent:
		case SyncMLError::KErrStatusCommandNotTheSame:
		case SyncMLError::KErrMissingStatusCommands:
		case SyncMLError::KErrFailedToAddRecord:
		case SyncMLError::KErrFailedToReplaceRecord:
		case SyncMLError::KErrFailedToDeleteRecord:
		case SyncMLError::KErrXmlParsingError:
		case SyncMLError::KErrReferenceToolkitError:
		case SyncMLError::KErrObjectTooLargeToSendToServer:
		case SyncMLError::KErrFailedToGetRecord:
		case SyncMLError::KErrUserInteractionFailed:
		case SyncMLError::KErrStatusSizeMismatch:
		case SyncMLError::KErrFailedToCloseDatabase:
		case SyncMLError::KErrDatabaseAdapterIndexError:
	   	    id = R_ASP_LOG_ERR_SERVERERROR;  // "Error in sync server"
		    break;
	        
        default:
            id = R_ASP_LOG_ERR_SYSTEMERROR;  // "System Error"
		    break;
		}
		
		return id ;
	}
	

#ifdef _DEBUG

// -----------------------------------------------------------------------------
// TAspSyncError::GetSyncMLErrorText
//
// -----------------------------------------------------------------------------
//
void TAspSyncError::GetSyncMLErrorText(TDes& aText, TInt aError)
	{
    aText = KNullDesC();
  
   
	switch (aError)
		{
		case SyncMLError::KErrTransportRequest:
		    aText = _L("KErrTransportRequest");
		    break;
		case SyncMLError::KErrTransportHeader:
		    aText = _L("KErrTransportHeader");
		    break;
		case SyncMLError::KErrTransportSvrNoUri:
		    aText = _L("KErrTransportSvrNoUri");
		    break;
		case SyncMLError::KErrTransportSvrError:
		    aText = _L("KErrTransportSvrError");
		    break;
		case SyncMLError::KErrTransportAuthenticationFailure:
		    aText = _L("KErrTransportAuthenticationFailure");
		    break;
		case SyncMLError::KErrTransportDisconnected:
		    aText = _L("KErrTransportDisconnected");
		    break;
		case SyncMLError::KErrConnectionError:
		    aText = _L("KErrConnectionError");
		    break;
		case SyncMLError::KErrCannotCommunicateWithServer:
		    aText = _L("KErrCannotCommunicateWithServer");
		    break;
		case SyncMLError::KErrDatabaseAdapterIndexError:
		    aText = _L("KErrDatabaseAdapterIndexError");
		    break;
		case SyncMLError::KErrParseCallbackError:
		    aText = _L("KErrParseCallbackError");
		    break;
		case SyncMLError::KErrCommandInvalid:
		    aText = _L("KErrCommandInvalid");
		    break;
		case SyncMLError::KErrSessionIdNotValid:
		    aText = _L("KErrSessionIdNotValid");
		    break;
		case SyncMLError::KErrVerDTDMissing:
		    aText = _L("KErrVerDTDMissing");
		    break;
		case SyncMLError::KErrProtoMissing:
		    aText = _L("KErrProtoMissing");
		    break;
		case SyncMLError::KErrSyncHdrMissing:
		    aText = _L("KErrSyncHdrMissing");
		    break;
		case SyncMLError::KErrTargetLocMissing:
		    aText = _L("KErrTargetLocMissing");
		    break;
		case SyncMLError::KErrSourceLocMissing:
		    aText = _L("KErrSourceLocMissing");
		    break;
		case SyncMLError::KErrTargetLocNameMissing:
		    aText = _L("KErrTargetLocNameMissing");
		    break;
		case SyncMLError::KErrSourceLocNameMissing:
		    aText = _L("KErrSourceLocNameMissing");
		    break;
		case SyncMLError::KErrMappingInfoMissing:
		    aText = _L("KErrMappingInfoMissing");
		    break;
		case SyncMLError::KErrMappingInfoNotAcked:
		    aText = _L("KErrMappingInfoNotAcked");
		    break;
		case SyncMLError::KErrVersionDTDNotSupported:
		    aText = _L("KErrVersionDTDNotSupported");
		    break;
		case SyncMLError::KErrProtoNotSupported:
		    aText = _L("KErrProtoNotSupported");
		    break;
		case SyncMLError::KErrStatusCommandForCommandNotSent:
		    aText = _L("KErrStatusCommandForCommandNotSent");
		    break;
		case SyncMLError::KErrStatusCommandNotTheSame:
		    aText = _L("KErrStatusCommandNotTheSame");
		    break;
		case SyncMLError::KErrMissingStatusCommands:
		    aText = _L("KErrMissingStatusCommands");
		    break;
		case SyncMLError::KErrFailedToAddRecord:
		    aText = _L("KErrFailedToAddRecord");
		    break;
		case SyncMLError::KErrFailedToReplaceRecord:
		    aText = _L("KErrFailedToReplaceRecord");
		    break;
		case SyncMLError::KErrFailedToDeleteRecord:
		    aText = _L("KErrFailedToDeleteRecord");
		    break;
		case SyncMLError::KErrXmlParsingError:
		    aText = _L("KErrXmlParsingError");
		    break;
		case SyncMLError::KErrReferenceToolkitError:
		    aText = _L("KErrReferenceToolkitError");
		    break;
		case SyncMLError::KErrClientDatabaseNotFound:
		    aText = _L("KErrClientDatabaseNotFound");
		    break;
		case SyncMLError::KErrServerDatabaseNotFound:
		    aText = _L("KErrServerDatabaseNotFound");
		    break;
		case SyncMLError::KErrDevInfFileNotFound:
		    aText = _L("KErrDevInfFileNotFound");
		    break;
		case SyncMLError::KErrObjectTooLargeToSendToServer:
		    aText = _L("KErrObjectTooLargeToSendToServer");
		    break;
		case SyncMLError::KErrSlowSync:
		    aText = _L("KErrSlowSync");
		    break;
		case SyncMLError::KErrFailedToGetRecord:
		    aText = _L("KErrFailedToGetRecord");
		    break;
		case SyncMLError::KErrUserInteractionFailed:
		    aText = _L("KErrUserInteractionFailed");
		    break;
		case SyncMLError::KErrStatusSizeMismatch:
		    aText = _L("KErrStatusSizeMismatch");
		    break;
		case SyncMLError::KErrFailedToCloseDatabase:
		    aText = _L("KErrFailedToCloseDatabase");
		    break;
	
    	case SyncMLError::KErrPhoneOnOfflineMode:
		    aText = _L("KErrPhoneOnOfflineMode");
		    break;
		
	    case SyncMLError::KErrAuthenticationFailure:
		    aText = _L("KErrAuthenticationFailure");
		    break;
		
		case SyncMLError::KErrGeneral:
		    aText = _L("KErrGeneral");
		    break;
		
		case SyncMLError::KErrMessageTooShort:
		    aText = _L("KErrMessageTooShort");
		    break;
		case SyncMLError::KErrMessageIsCorrupt:
		    aText = _L("KErrMessageIsCorrupt");
		    break;
		case SyncMLError::KErrBadTransportId:
		    aText = _L("KErrBadTransportId");
		    break;
		case SyncMLError::KErrNoNotificationBody:
		    aText = _L("KErrNoNotificationBody");
		    break;
		case SyncMLError::KErrWrongVersion:
		    aText = _L("KErrWrongVersion");
		    break;
		case SyncMLError::KErrUnsupportedMimeType:
		    aText = _L("KErrUnsupportedMimeType");
		    break;
		case SyncMLError::KErrNoSuchTask:
		    aText = _L("KErrNoSuchTask");
		    break;
		case SyncMLError::KErrUnknownSyncType:
		    aText = _L("KErrUnknownSyncType");
		    break;
		case SyncMLError::KErrUnknownProfile:
		    aText = _L("KErrUnknownProfile");
		    break;
		case SyncMLError::KErrInvalidProfile:
		    aText = _L("KErrInvalidProfile");
		    break;
		case SyncMLError::KErrInvalidCredentials:
		    aText = _L("KErrInvalidCredentials");
		    break;
		case SyncMLError::KErrNoCredentials:
		    aText = _L("KErrNoCredentials");
		    break;
		case SyncMLError::KErrIntegrityFailureHMAC:
		    aText = _L("KErrIntegrityFailureHMAC");
		    break;
		case SyncMLError::KErrMustUsageUriNotComplete:
		    aText = _L("KErrMustUsageUriNotComplete");
		    break;
		case SyncMLError::KErrDMAccUriIsCorrupt:
		    aText = _L("KErrDMAccUriIsCorrupt");
		    break;
		case SyncMLError::KErrDMConUriIsCorrupt:
		    aText = _L("KErrDMConUriIsCorrupt");
		    break;
		case SyncMLError::KErrParmNameNotInProvDoc:
		    aText = _L("KErrParmNameNotInProvDoc");
		    break;
		case SyncMLError::KErrInvalidAppIdValue:
		    aText = _L("KErrInvalidAppIdValue");
		    break;
		case SyncMLError::KErrInvalidToNapIdValue:
		    aText = _L("KErrInvalidToNapIdValue");
		    break;
		case SyncMLError::KErrInvalidProviderIdValue:
		    aText = _L("KErrInvalidProviderIdValue");
		    break;
		case SyncMLError::KErrEmptyAauthLevelValue:
		    aText = _L("KErrEmptyAauthLevelValue");
		    break;
		case SyncMLError::KErrAppSrvAAuthLevelNotFound:
		    aText = _L("KErrAppSrvAAuthLevelNotFound");
		    break;
		case SyncMLError::KErrClientAAuthLevelNotFound:
		    aText = _L("KErrClientAAuthLevelNotFound");
		    break;
		case SyncMLError::KErrInvalidAppAuth:
		    aText = _L("KErrInvalidAppAuth");
		    break;
		case SyncMLError::KErrNoApplicationCharac:
		    aText = _L("KErrNoApplicationCharac");
		    break;
		case SyncMLError::KErrNoAppAuthCharac:
		    aText = _L("KErrNoAppAuthCharac");
		    break;
		case SyncMLError::KErrMissingRequiredParmInSvr:
		    aText = _L("KErrMissingRequiredParmInSvr");
		    break;
		case SyncMLError::KErrMissingRequiredParmInClient:
		    aText = _L("KErrMissingRequiredParmInClient");
		    break;
		case SyncMLError::KErrAppAddrCharacNotFound:
		    aText = _L("KErrAppAddrCharacNotFound");
		    break;
		case SyncMLError::KErrUnsupportedVersion:
		    aText = _L("KErrUnsupportedVersion");
		    break;
		case SyncMLError::KErrWrongProvPublicDocId:
		    aText = _L("KErrWrongProvPublicDocId");
		    break;
		case SyncMLError::KErrProfileNotFound:
		    aText = _L("KErrProfileNotFound");
		    break;
		case SyncMLError::KErrConnectionNotFound:
		    aText = _L("KErrConnectionNotFound");
		    break;
		case SyncMLError::KErrTaskNotFound:
		    aText = _L("KErrTaskNotFound");
		    break;
		case SyncMLError::KErrTransportNotFound:
		    aText = _L("KErrTransportNotFound");
		    break;
		case SyncMLError::KErrDataProviderNotFound:
		    aText = _L("KErrDataProviderNotFound");
		    break;
		case SyncMLError::KErrJobNotFound:
		    aText = _L("KErrJobNotFound");
		    break;
		case SyncMLError::KErrObjectPendingDelete:
		    aText = _L("KErrObjectPendingDelete");
		    break;
		case SyncMLError::KErrObjectInUse:
		    aText = _L("KErrObjectInUse");
		    break;
		case SyncMLError::KErrProfileAccessDenied:
		    aText = _L("KErrProfileAccessDenied");
		    break;
		case SyncMLError::KErrSuspended:
		    aText = _L("KErrSuspended");
		    break;
		case SyncMLError::KErrDataDepotStreamNotFound:
		    aText = _L("KErrDataDepotStreamNotFound");
		    break;
		
		case SyncMLError::KErrServerIdNotMatching:
		    aText = _L("KErrServerIdNotMatching");
		    break;
	        
        default:
            aText.Format(_L("%d"), aError);
		    break;
		}
	}

#endif







// End of file