diff -r 000000000000 -r b497e44ab2fc syncmlfw/common/sosserver_clientapi/src/NSmlErrorCodeConversion.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/syncmlfw/common/sosserver_clientapi/src/NSmlErrorCodeConversion.cpp Thu Dec 17 09:07:52 2009 +0200 @@ -0,0 +1,197 @@ +/* +* Copyright (c) 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: Conversion for private error codes to public syncML errors. +* +*/ + + + +// INCLUDE FILES +#include "NSmlErrorCodeConversion.h" +#include "nsmlerror.h" +#include "nsmldserror.h" +#include "nsmldmerror.h" +#include "nsmlhttp.h" +#include + +using namespace SyncMLError; + +// CONSTANTS +const TNSmlErrorConversion::TNSmlErrorMapping TNSmlErrorConversion::KErrors[] = + { + /* Transport related */ + { TNSmlHTTPErrCode::ENSmlHTTPErr_BadRequest, KErrTransportRequest }, + { TNSmlHTTPErrCode::ENSmlHTTPErr_MethodNotAllowed, KErrTransportRequest }, + { TNSmlHTTPErrCode::ENSmlHTTPErr_Forbidden, KErrTransportRequest }, + { TNSmlHTTPErrCode::ENSmlHTTPErr_Conflict, KErrTransportRequest }, + { TNSmlHTTPErrCode::ENSmlHTTPErr_Gone, KErrTransportRequest }, + { TNSmlHTTPErrCode::ENSmlHTTPErr_RequestEntityTooLarge, KErrTransportRequest }, + { TNSmlHTTPErrCode::ENSmlHTTPErr_RequestURITooLong, KErrTransportRequest }, + { TNSmlHTTPErrCode::ENSmlHTTPErr_UnsupportedMediaType, KErrTransportRequest }, + { TNSmlHTTPErrCode::ENSmlHTTPErr_RequestedRangeNotSatisfiable, KErrTransportRequest }, + { TNSmlHTTPErrCode::ENSmlHTTPErr_ExpectationFailed, KErrTransportRequest }, + { TNSmlHTTPErrCode::ENSmlHTTPErr_NotImplemented, KErrTransportRequest }, + { TNSmlHTTPErrCode::ENSmlHTTPErr_ServiceUnavailable, KErrTransportRequest }, + { TNSmlHTTPErrCode::ENSmlHTTPErr_HTTPVersionNotSupported, KErrTransportRequest }, + { TNSmlHTTPErrCode::ENSmlHTTPErr_NotAcceptable, KErrTransportHeader }, + { TNSmlHTTPErrCode::ENSmlHTTPErr_LengthRequired, KErrTransportHeader }, + { TNSmlHTTPErrCode::ENSmlHTTPErr_PreconditionFailed, KErrTransportHeader }, + { TNSmlHTTPErrCode::ENSmlHTTPErr_NotFound, KErrTransportSvrNoUri }, + { TNSmlHTTPErrCode::ENSmlHTTPErr_Unauthorized, KErrTransportAuthenticationFailure }, + { TNSmlHTTPErrCode::ENSmlHTTPErr_ProxyAuthenticationRequired, KErrTransportAuthenticationFailure }, + { TNSmlHTTPErrCode::ENSmlHTTPErr_BadGateway, KErrTransportDisconnected }, + { TNSmlHTTPErrCode::ENSmlHTTPErr_PaymentRequired, KErrTransportDisconnected }, + { TNSmlHTTPErrCode::ENSmlHTTPErr_RequestTimeout, KErrTransportDisconnected }, + { TNSmlHTTPErrCode::ENSmlHTTPErr_InternalServerError, KErrTransportDisconnected }, + { TNSmlHTTPErrCode::ENSmlHTTPErr_GatewayTimeout, KErrTransportDisconnected }, + /* Engine related*/ + { TNSmlError::ESmlServerNotResponding, KErrConnectionError }, + { TNSmlError::ESmlCommunicationError, KErrCannotCommunicateWithServer }, + { TNSmlError::ESmlServerUnauthorized, KErrInvalidCredentials }, + { TNSmlError::ESmlStatusUnauthorized, KErrAuthenticationFailure }, + { TNSmlError::ESmlStatusClientAuthenticationRequired, KErrAuthenticationFailure }, + { TNSmlError::ESmlChalMissing, KErrCannotCommunicateWithServer }, + { TNSmlError::ESmlChalInvalid, KErrCannotCommunicateWithServer }, + { TNSmlError::ESmlVerDTDMissing, KErrVerDTDMissing }, + { TNSmlError::ESmlVerProtoMissing, KErrProtoMissing }, + { TNSmlError::ESmlSyncHdrMissing, KErrSyncHdrMissing }, + { TNSmlError::ESmlTargetLocURIMissing, KErrTargetLocMissing }, + { TNSmlError::ESmlTargetLocURIInvalid, KErrTargetLocMissing }, + { TNSmlError::ESmlSyncTargetLocURIMissing, KErrTargetLocMissing }, + { TNSmlError::ESmlSyncTargetLocURIInvalid, KErrTargetLocMissing }, + { TNSmlError::ESmlSourceLocURIMissing, KErrSourceLocMissing }, + { TNSmlError::ESmlSourceLocURIInvalid, KErrSourceLocMissing }, + { TNSmlError::ESmlSyncSourceLocURIMissing, KErrSourceLocMissing }, + { TNSmlError::ESmlSyncSourceLocURIInvalid, KErrSourceLocMissing }, + { TNSmlError::ESmlVerDTDNotSupported, KErrVersionDTDNotSupported }, + { TNSmlError::ESmlVerProtoNotSupported, KErrProtoNotSupported }, + { TNSmlError::ESmlCmdInvalid, KErrStatusCommandNotTheSame }, + { TNSmlError::ESmlStatusDataInvalid, KErrStatusCommandNotTheSame }, + { TNSmlError::ESmlCmdIDInvalid, KErrStatusCommandNotTheSame }, + { TNSmlError::ESmlCmdMissing, KErrMissingStatusCommands }, + { TNSmlError::ESmlStatusDataMissing, KErrMissingStatusCommands }, + { TNSmlError::ESmlCmdIDMissing, KErrMissingStatusCommands }, + { TNSmlError::ESmlIncompleteMessage, KErrXmlParsingError }, + { TNSmlDSError::ESmlDSDeviceInfoMissing, KErrMissingStatusCommands }, + { TNSmlDSError::ESmlDSDeviceInfoInvalid, KErrMissingStatusCommands }, + { TNSmlDSError::ESmlDSLocalDatabaseError, KErrClientDatabaseNotFound }, + { TNSmlError::ESmlStatusNotFound, KErrServerDatabaseNotFound }, + { TNSmlError::ESmlStatusGone, KErrServerDatabaseNotFound }, + { TNSmlError::ESmlMaxMsgSizeInvalid, KErrServerDatabaseNotFound }, + { TNSmlError::ESmlCommandInvalid, KErrCommandInvalid }, + { TNSmlError::ESmlUnexpectedCmd, KErrCommandInvalid }, + { TNSmlError::ESmlUnsupportedCmd, KErrCommandInvalid }, + { TNSmlError::ESmlStatusCommandNotImplemented, KErrCommandInvalid }, + { TNSmlError::ESmlMsgIDMissing, KErrCommandInvalid }, + { TNSmlError::ESmlTargetLocURIMissing, KErrCommandInvalid }, + { TNSmlError::ESmlTargetLocURIInvalid, KErrCommandInvalid }, + { TNSmlDSError::ESmlDSDeviceInfoMissing, KErrCommandInvalid }, + { TNSmlDSError::ESmlDSDatastoreSourceRefInvalid, KErrCommandInvalid }, + { TNSmlError::ESmlMsgIDInvalid, KErrCommandInvalid }, + { TNSmlError::ESmlSourceRefInvalid, KErrCommandInvalid }, + { TNSmlError::ESmlItemSourceLocURIMissing, KErrCommandInvalid }, + { TNSmlError::ESmlItemDataMissing, KErrCommandInvalid }, + { TNSmlError::ESmlItemTargetLocURIMissing, KErrCommandInvalid }, + { TNSmlError::ESmlErrorInSettings, KErrCommandInvalid }, + { TNSmlError::ESmlLowMemory, KErrCommandInvalid }, + { TNSmlError::ESmlServerIsBusy, KErrCommandInvalid }, + { TNSmlError::ESmlStatusNotPossibleInOfflineMode, KErrPhoneOnOfflineMode }, + { TNSmlDMError::ESmlServerSessionAbort, KErrServerDatabaseNotFound }, + { TNSmlDSError::ESmlDSServerIdNotMatching, KErrServerIdNotMatching }, + { TNSmlDSError::ESmlDSNoValidDatabases, KErrClientDatabaseNotFound }, + { TNSmlDSError::ESmlDSDatastoreSourceRefMissing, KErrCommandInvalid }, + { TNSmlDSError::ESmlDSDatastoreRxPrefCTTypeMissing, KErrCommandInvalid }, + { TNSmlDSError::ESmlDSDatastoreRxCTTypeNotMatching, KErrCommandInvalid }, + { TNSmlDSError::ESmlDSDatastoreTxPrefCTTypeMissing, KErrCommandInvalid }, + { TNSmlDSError::ESmlDSDatastoreTxCTTypeNotMatching, KErrCommandInvalid }, + { TNSmlDSError::ESmlDSLocalDatabaseChanged, KErrCommandInvalid }, + { TNSmlDSError::ESmlDSUnsupportedSyncType, KErrCommandInvalid }, + { TNSmlError::ESmlCommunicationInterrupted, KErrCannotCommunicateWithServer }, + { TNSmlError::ESmlUntrustedCert, KErrInvalidCert }, + { KErrNone, KErrNone } + }; + +const TNSmlErrorConversion::TNSmlErrorMappingRange TNSmlErrorConversion::KErrorRanges[] = + { + { TNSmlError::ESmlResultsInvalid, TNSmlError::ESmlGetItemTargetInvalid, KErrCommandInvalid }, + { TNSmlError::ESmlStatusMissing, TNSmlError::ESmlCmdRefInvalid, KErrCommandInvalid }, + { TNSmlError::ESmlFormatNotSupported, TNSmlError::ESmlTypeInvalid, KErrCommandInvalid }, + { KErrNone, KErrNone, KErrNone } + }; + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// TNSmlErrorConversion::TNSmlErrorConversion +// C++ constructor +// ----------------------------------------------------------------------------- +// +EXPORT_C TNSmlErrorConversion::TNSmlErrorConversion( + TInt aErrorCode ) + : iErrorCode( aErrorCode ) + { + } + +// ----------------------------------------------------------------------------- +// TNSmlErrorConversion::SetErrorCode +// sets error code +// ----------------------------------------------------------------------------- +// +void TNSmlErrorConversion::SetErrorCode( TInt aErrorCode ) + { + iErrorCode = aErrorCode; + } + +// ----------------------------------------------------------------------------- +// TNSmlErrorConversion::Convert +// converts error code. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt TNSmlErrorConversion::Convert() const + { + if ( iErrorCode == KErrNone ) + { + return KErrNone; + } + + if ( iErrorCode < 0 ) + { + // no conversion for system errors. + return iErrorCode; + } + + TInt error( KErrNone ); + + for ( TInt i(0); ( error = KErrors[i].iErrorCode ) != KErrNone; i++ ) + { + if ( error == iErrorCode ) + { + return KErrors[i].iSyncMLError; + } + } + + TInt errorRangeStart( KErrNone ); + + for ( TInt i(0); ( errorRangeStart = KErrorRanges[i].iErrorCodeRangeStart ) != KErrNone; i++ ) + { + if ( iErrorCode >= errorRangeStart && iErrorCode <= KErrorRanges[i].iErrorCodeRangeEnd ) + { + return KErrorRanges[i].iSyncMLError; + } + } + + return SyncMLError::KErrGeneral; + } + +// End of File