syncmlfw/common/sosserver_clientapi/src/NSmlErrorCodeConversion.cpp
changeset 0 b497e44ab2fc
--- /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	<SyncMLErr.h>
+
+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