/**
* XML Security Library (http://www.aleksey.com/xmlsec).
*
* Error codes and error reporting functions.
*
* This is free software; see Copyright file in the source
* distribution for preciese wording.
*
* Copyright (C) 2002-2003 Aleksey Sanin <aleksey@aleksey.com>
* Portion Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
*/
#ifndef __XMLSEC_ERRORS_H__
#define __XMLSEC_ERRORS_H__
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
#include "xmlsec_config.h"
/***************************************************************
*
* Error codes
*
**************************************************************/
/**
* XMLSEC_ERRORS_R_XMLSEC_FAILED:
*
* An XMLSec function failed (error subject is the failed function).
*/
#define XMLSEC_ERRORS_R_XMLSEC_FAILED 1
/**
* XMLSEC_ERRORS_R_MALLOC_FAILED:
*
* Failed to allocate memory error.
*/
#define XMLSEC_ERRORS_R_MALLOC_FAILED 2
/**
* XMLSEC_ERRORS_R_STRDUP_FAILED:
*
* Failed to duplicate string error.
*/
#define XMLSEC_ERRORS_R_STRDUP_FAILED 3
/**
* XMLSEC_ERRORS_R_CRYPTO_FAILED:
*
* Crypto (OpenSSL) function failed (error subject is the failed function).
*/
#define XMLSEC_ERRORS_R_CRYPTO_FAILED 4
/**
* XMLSEC_ERRORS_R_XML_FAILED:
*
* LibXML function failed (error subject is the failed function).
*/
#define XMLSEC_ERRORS_R_XML_FAILED 5
/**
* XMLSEC_ERRORS_R_XSLT_FAILED:
*
* LibXSLT function failed (error subject is the failed function).
*/
#define XMLSEC_ERRORS_R_XSLT_FAILED 6
/**
* XMLSEC_ERRORS_R_IO_FAILED:
*
* IO operation failed.
*/
#define XMLSEC_ERRORS_R_IO_FAILED 7
/**
* XMLSEC_ERRORS_R_DISABLED:
*
* The feature is disabled during compilation.
* Check './configure --help' for details on how to
* enable it.
*/
#define XMLSEC_ERRORS_R_DISABLED 8
/**
* XMLSEC_ERRORS_R_NOT_IMPLEMENTED:
*
* Feature is not implemented.
*/
#define XMLSEC_ERRORS_R_NOT_IMPLEMENTED 9
/**
* XMLSEC_ERRORS_R_INVALID_SIZE:
*
* Invalid size.
*/
#define XMLSEC_ERRORS_R_INVALID_SIZE 11
/**
* XMLSEC_ERRORS_R_INVALID_DATA:
*
* Invalid data.
*/
#define XMLSEC_ERRORS_R_INVALID_DATA 12
/**
* XMLSEC_ERRORS_R_INVALID_RESULT:
*
* Invalid result.
*/
#define XMLSEC_ERRORS_R_INVALID_RESULT 13
/**
* XMLSEC_ERRORS_R_INVALID_TYPE:
*
* Invalid type.
*/
#define XMLSEC_ERRORS_R_INVALID_TYPE 14
/**
* XMLSEC_ERRORS_R_INVALID_OPERATION:
*
* Invalid operation.
*/
#define XMLSEC_ERRORS_R_INVALID_OPERATION 15
/**
* XMLSEC_ERRORS_R_INVALID_STATUS:
*
* Invalid status.
*/
#define XMLSEC_ERRORS_R_INVALID_STATUS 16
/**
* XMLSEC_ERRORS_R_INVALID_FORMAT:
*
* Invalid format.
*/
#define XMLSEC_ERRORS_R_INVALID_FORMAT 17
/**
* XMLSEC_ERRORS_R_DATA_NOT_MATCH:
*
* The data do not match our expectation.
*/
#define XMLSEC_ERRORS_R_DATA_NOT_MATCH 18
/**
* XMLSEC_ERRORS_R_INVALID_NODE:
*
* Invalid node (error subject is the node name).
*/
#define XMLSEC_ERRORS_R_INVALID_NODE 21
/**
* XMLSEC_ERRORS_R_INVALID_NODE_CONTENT:
*
* Invalid node content (error subject is the node name).
*/
#define XMLSEC_ERRORS_R_INVALID_NODE_CONTENT 22
/**
* XMLSEC_ERRORS_R_INVALID_NODE_ATTRIBUTE:
*
* Invalid node attribute (error subject is the node name).
*/
#define XMLSEC_ERRORS_R_INVALID_NODE_ATTRIBUTE 23
/**
* XMLSEC_ERRORS_R_MISSING_NODE_ATTRIBUTE:
*
* Missing node attribute (error subject is the node name).
*/
#define XMLSEC_ERRORS_R_MISSING_NODE_ATTRIBUTE 25
/**
* XMLSEC_ERRORS_R_NODE_ALREADY_PRESENT:
*
* Node already present,
*/
#define XMLSEC_ERRORS_R_NODE_ALREADY_PRESENT 26
/**
* XMLSEC_ERRORS_R_UNEXPECTED_NODE:
*
* Unexpected node (error subject is the node name).
*/
#define XMLSEC_ERRORS_R_UNEXPECTED_NODE 27
/**
* XMLSEC_ERRORS_R_NODE_NOT_FOUND:
*
* Node not found (error subject is the required node name).
*/
#define XMLSEC_ERRORS_R_NODE_NOT_FOUND 28
/**
* XMLSEC_ERRORS_R_INVALID_TRANSFORM:
*
* This transform is invlaid here.
*/
#define XMLSEC_ERRORS_R_INVALID_TRANSFORM 31
/**
* XMLSEC_ERRORS_R_INVALID_TRANSFORM_KEY:
*
* Key is invalid for this transform.
*/
#define XMLSEC_ERRORS_R_INVALID_TRANSFORM_KEY 32
/**
* XMLSEC_ERRORS_R_INVALID_URI_TYPE:
*
* Invalid URI type.
*/
#define XMLSEC_ERRORS_R_INVALID_URI_TYPE 33
/**
* XMLSEC_ERRORS_R_TRANSFORM_SAME_DOCUMENT_REQUIRED:
*
* The transform requires the input document to be the same as context.
*/
#define XMLSEC_ERRORS_R_TRANSFORM_SAME_DOCUMENT_REQUIRED 34
/**
* XMLSEC_ERRORS_R_TRANSFORM_DISABLED:
*
* The transform is disabled.
*/
#define XMLSEC_ERRORS_R_TRANSFORM_DISABLED 35
/**
* XMLSEC_ERRORS_R_INVALID_KEY_DATA:
*
* Key data is invalid.
*/
#define XMLSEC_ERRORS_R_INVALID_KEY_DATA 41
/**
* XMLSEC_ERRORS_R_KEY_DATA_NOT_FOUND:
*
* Data is not found (error subject is the data name).
*/
#define XMLSEC_ERRORS_R_KEY_DATA_NOT_FOUND 42
/**
* XMLSEC_ERRORS_R_KEY_DATA_ALREADY_EXIST:
*
* The key data is already exist.
*/
#define XMLSEC_ERRORS_R_KEY_DATA_ALREADY_EXIST 43
/**
* XMLSEC_ERRORS_R_INVALID_KEY_DATA_SIZE:
*
* Invalid key size.
*/
#define XMLSEC_ERRORS_R_INVALID_KEY_DATA_SIZE 44
/**
* XMLSEC_ERRORS_R_KEY_NOT_FOUND:
*
* Key not found.
*/
#define XMLSEC_ERRORS_R_KEY_NOT_FOUND 45
/**
* XMLSEC_ERRORS_R_KEYDATA_DISABLED:
*
* The key data type disabled.
*/
#define XMLSEC_ERRORS_R_KEYDATA_DISABLED 46
/**
* XMLSEC_ERRORS_R_MAX_RETRIEVALS_LEVEL:
*
* Max allowed retrievals level reached.
*/
#define XMLSEC_ERRORS_R_MAX_RETRIEVALS_LEVEL 51
/**
* XMLSEC_ERRORS_R_MAX_RETRIEVAL_TYPE_MISMATCH:
*
* The retrieved key data type does not match the one specified
* in the <dsig:RetrievalMethod/> node.
*/
#define XMLSEC_ERRORS_R_MAX_RETRIEVAL_TYPE_MISMATCH 52
/**
* XMLSEC_ERRORS_R_MAX_ENCKEY_LEVEL:
*
* Max EncryptedKey level reached.
*/
#define XMLSEC_ERRORS_R_MAX_ENCKEY_LEVEL 61
/**
* XMLSEC_ERRORS_R_CERT_VERIFY_FAILED:
*
* Certificate verification failed.
*/
#define XMLSEC_ERRORS_R_CERT_VERIFY_FAILED 71
/**
* XMLSEC_ERRORS_R_CERT_NOT_FOUND:
*
* Requested certificate is not found.
*/
#define XMLSEC_ERRORS_R_CERT_NOT_FOUND 72
/**
* XMLSEC_ERRORS_R_CERT_REVOKED:
*
* The certificate is revoked.
*/
#define XMLSEC_ERRORS_R_CERT_REVOKED 73
/**
* XMLSEC_ERRORS_R_CERT_ISSUER_FAILED:
*
* Failed to get certificate issuer.
*/
#define XMLSEC_ERRORS_R_CERT_ISSUER_FAILED 74
/**
* XMLSEC_ERRORS_R_CERT_NOT_YET_VALID:
*
* "Not valid before" verification failed.
*/
#define XMLSEC_ERRORS_R_CERT_NOT_YET_VALID 75
/**
* XMLSEC_ERRORS_R_CERT_HAS_EXPIRED:
*
* "Not valid after" verification failed.
*/
#define XMLSEC_ERRORS_R_CERT_HAS_EXPIRED 76
/**
* XMLSEC_ERRORS_R_DSIG_NO_REFERENCES:
*
* The <dsig:Reference> nodes not found.
*/
#define XMLSEC_ERRORS_R_DSIG_NO_REFERENCES 81
/**
* XMLSEC_ERRORS_R_DSIG_INVALID_REFERENCE:
*
* The <dsig:Reference> validation failed.
*/
#define XMLSEC_ERRORS_R_DSIG_INVALID_REFERENCE 82
/**
* XMLSEC_ERRORS_R_ASSERTION:
*
* Invalid assertion.
*/
#define XMLSEC_ERRORS_R_ASSERTION 100
/**
* XMLSEC_ERRORS_MAX_NUMBER:
*
* The maximum xmlsec errors number.
*/
#define XMLSEC_ERRORS_MAX_NUMBER 256
/*******************************************************************
*
* Error functions
*
*******************************************************************/
/**
* xmlSecErrorsCallback:
* @file: the error location file name (__FILE__ macro).
* @line: the error location line number (__LINE__ macro).
* @func: the error location function name (__FUNCTION__ macro).
* @errorObject: the error specific error object
* @errorSubject: the error specific error subject.
* @reason: the error code.
* @msg: the additional error message.
*
* The errors reporting callback function.
*/
typedef void (*xmlSecErrorsCallback) (const char* file,
int line,
const char* func,
const char* errorObject,
const char* errorSubject,
int reason,
const char* msg);
XMLSEC_EXPORT void xmlSecErrorsInit (void);
XMLSEC_EXPORT void xmlSecErrorsShutdown (void);
XMLSEC_EXPORT void xmlSecErrorsSetCallback (xmlSecErrorsCallback callback);
XMLSEC_EXPORT void xmlSecErrorsDefaultCallback (const char* file,
int line,
const char* func,
const char* errorObject,
const char* errorSubject,
int reason,
const char* msg);
XMLSEC_EXPORT void xmlSecErrorsDefaultCallbackEnableOutput
(int enabled);
XMLSEC_EXPORT int xmlSecErrorsGetCode (xmlSecSize pos);
XMLSEC_EXPORT const char* xmlSecErrorsGetMsg (xmlSecSize pos);
/* __FUNCTION__ is defined for MSC compiler < MS VS .NET 2003 */
#if defined(_MSC_VER) && (_MSC_VER >= 1300)
#define __XMLSEC_FUNCTION__ __FUNCTION__
#endif /* _MSC_VER */
/* fallback for __FUNCTION__ */
#if !defined(__XMLSEC_FUNCTION__)
#define __XMLSEC_FUNCTION__ ""
#endif /*!defined(__XMLSEC_FUNCTION__) */
/**
* XMLSEC_ERRORS_HERE:
*
* The macro that specifies the location (file, line and function)
* for the xmlSecError() function.
*/
#define XMLSEC_ERRORS_HERE __FILE__,__LINE__,__XMLSEC_FUNCTION__
#ifdef __GNUC__
#define XMLSEC_ERRORS_PRINTF_ATTRIBUTE __attribute__ ((format (printf, 7, 8)))
#else /* __GNUC__ */
#define XMLSEC_ERRORS_PRINTF_ATTRIBUTE
#endif /* __GNUC__ */
/**
* xmlSecErrorsSafeString:
* @str: the string.
*
* Macro. Returns @str if it is not NULL or pointer to "NULL" otherwise.
*/
#define xmlSecErrorsSafeString(str) \
(((str) != NULL) ? ((char*)(str)) : (char*)"NULL")
/**
* XMLSEC_ERRORS_NO_MESSAGE:
*
* Empty error message " ".
*/
#define XMLSEC_ERRORS_NO_MESSAGE " "
XMLSEC_EXPORT void xmlSecError (const char* file,
int line,
const char* func,
const char* errorObject,
const char* errorSubject,
int reason,
const char* msg, ...) XMLSEC_ERRORS_PRINTF_ATTRIBUTE;
/**********************************************************************
*
* Assertions
*
**********************************************************************/
/**
* xmlSecAssert:
* @p: the expression.
*
* Macro. Verifies that @p is true and calls return() otherwise.
*/
#define xmlSecAssert( p ) \
if(!( p ) ) { \
xmlSecError(XMLSEC_ERRORS_HERE, \
NULL, \
#p, \
XMLSEC_ERRORS_R_ASSERTION, \
XMLSEC_ERRORS_NO_MESSAGE); \
return; \
}
/**
* xmlSecAssert2:
* @p: the expression.
* @ret: the return value.
*
* Macro. Verifies that @p is true and calls return(@ret) otherwise.
*/
#define xmlSecAssert2( p, ret ) \
if(!( p ) ) { \
xmlSecError(XMLSEC_ERRORS_HERE, \
NULL, \
#p, \
XMLSEC_ERRORS_R_ASSERTION, \
XMLSEC_ERRORS_NO_MESSAGE); \
return(ret); \
}
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* __XMLSEC_ERRORS_H__ */