summaryrefslogtreecommitdiff
path: root/libdigidoc/DigiDocError.h
blob: c8a4608e43ea6acb7eb4c6f80286844c6450a7f7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
#ifndef __DIGI_DOC_ERROR_H__
#define __DIGI_DOC_ERROR_H__
//==================================================
// FILE:	DigiDocError.h
// PROJECT: Digi Doc
// DESCRIPTION: Digi Doc error codes and functions 
// AUTHOR:  Veiko Sinivee, S|E|B IT Partner Estonia
//==================================================
// Copyright (C) AS Sertifitseerimiskeskus
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Lesser General Public License for more details.ode
// GNU Lesser General Public Licence is available at
// http://www.gnu.org/copyleft/lesser.html
//==========< HISTORY >=============================
//==================================================

#ifdef WIN32
	#include <windows.h>
#endif

#ifdef  __cplusplus
extern "C" {
#endif
	
//==========< error codes >=======================

#define ERR_OK						0
#define ERR_UNSUPPORTED_DIGEST		1
#define ERR_FILE_READ				2
#define ERR_FILE_WRITE				3
#define ERR_DIGEST_LEN				4
#define ERR_BUF_LEN					5
#define ERR_SIGNATURE_LEN			6
#define ERR_PRIVKEY_READ			7
#define ERR_PUBKEY_READ				8
#define ERR_CERT_READ				9
#define ERR_SIGNEDINFO_CREATE		10
#define ERR_SIGNEDINFO_DATA			11
#define ERR_SIGNEDINFO_FINAL		12
#define ERR_UNSUPPORTED_FORMAT		13
#define ERR_BAD_INDEX				14
#define ERR_TIMESTAMP_DECODE		15
#define ERR_DIGIDOC_PARSE			16
#define ERR_UNSUPPORTED_SIGNATURE	17
#define ERR_CERT_STORE_READ			18
#define ERR_SIGPROP_DIGEST			19
#define ERR_COMPARE					20
#define ERR_DOC_DIGEST				21
#define ERR_MIME_DIGEST				22
#define ERR_SIGNATURE				23
#define ERR_CERT_INVALID			24
#define ERR_OCSP_UNSUCCESSFUL		25
#define ERR_OCSP_UNKNOWN_TYPE		26
#define ERR_OCSP_NO_BASIC_RESP		27
#define ERR_OCSP_WRONG_VERSION		28
#define ERR_OCSP_WRONG_RESPID		29
#define ERR_OCSP_ONE_RESPONSE		30
#define ERR_OCSP_RESP_STATUS		31
#define ERR_OCSP_NO_SINGLE_EXT		32
#define ERR_OCSP_NO_NONCE			33
#define ERR_NOTARY_NO_SIGNATURE		34
#define ERR_NOTARY_SIG_MATCH		35
#define ERR_SIGNERS_CERT_NOT_TRUSTED   36

#define ERR_WRONG_CERT				37
#define ERR_NULL_POINTER            38
#define ERR_NULL_CERT_POINTER       39
#define ERR_NULL_SER_NUM_POINTER    40
#define ERR_NULL_KEY_POINTER        41
#define ERR_EMPTY_STRING            42
#define ERR_BAD_DATAFILE_INDEX      43
#define ERR_BAD_DATAFILE_COUNT      44
#define ERR_BAD_ATTR_COUNT          45
#define ERR_BAD_ATTR_INDEX          46
#define ERR_BAD_SIG_INDEX           47
#define ERR_BAD_SIG_COUNT           48
#define ERR_BAD_ROLE_INDEX          49
#define ERR_BAD_DOCINFO_COUNT       50
#define ERR_BAD_DOCINFO_INDEX       51
#define	ERR_BAD_NOTARY_INDEX        52
#define	ERR_BAD_NOTARY_ID			53
#define ERR_BAD_NOTARY_COUNT		54
#define ERR_X509_DIGEST             55
#define ERR_CERT_LENGTH             56
#define ERR_PKCS_LIB_LOAD           57
#define ERR_PKCS_SLOT_LIST          58
#define ERR_PKCS_WRONG_SLOT         59
#define ERR_PKCS_LOGIN              60
#define ERR_PKCS_PK                 61
#define ERR_PKCS_CERT_LOC           62
#define ERR_PKCS_CERT_DECODE        63
#define ERR_PKCS_SIGN_DATA          64
#define ERR_PKCS_CARD_READ          65
#define ERR_CSP_NO_CARD_DATA        66
#define ERR_CSP_OPEN_STORE			67
#define ERR_CSP_CERT_FOUND			68
#define ERR_CSP_SIGN				69
#define ERR_CSP_NO_HASH_START	70
#define ERR_CSP_NO_HASH			71
#define ERR_CSP_NO_HASH_RESULT		72
#define ERR_CSP_OPEN_KEY		73
#define ERR_CSP_READ_KEY		74
#define ERR_OCSP_SIGN_NOT_SUPPORTED		75
#define ERR_OCSP_SIGN_CSP_NAME			76
#define ERR_CSP_CERT_DECODE				77
#define ERR_OCSP_SIGN_PKCS_NAME			78
#define ERR_OCSP_SIGN_OSLL_CERT			79
#define ERR_OCSP_SIGN					80
#define ERR_CERT_ISSUER					81
#define ERR_OCSP_PKCS12_CONTAINER		82
#define ERR_MODIFY_SIGNED_DOC       83
#define ERR_NOTARY_EXISTS			84
#define ERR_UNSUPPORTED_CERT_SEARCH	85
#define ERR_INCORRECT_CERT_SEARCH	86
#define ERR_BAD_OCSP_RESPONSE_DIGEST 87
#define ERR_LAST_ESTID_CACHED		88
#define ERR_BAD_DATAFILE_XML		89
#define ERR_UNSUPPORTED_VERSION		90
#define ERR_UNSUPPORTED_CHARSET		91
#define ERR_PKCS12_EXPIRED			92
#define ERR_CSP_USER_CANCEL         93
#define ERR_CSP_NODEFKEY_CONTAINER  94
#define ERR_CONNECTION_FAILURE      95
#define ERR_WRONG_URL_OR_PROXY      96
#define ERR_NULL_PARAM				97
#define ERR_BAD_ALLOC				98
#define ERR_CONF_FILE				99
#define ERR_CONF_LINE			   100
#define ERR_OCSP_CERT_REVOKED              101
#define ERR_OCSP_CERT_UNKNOWN              102
#define ERR_OCSP_PKCS12_NO_FILE            103
#define ERR_OCSP_PKCS12_NO_PASSWD          104
#define ERR_BAD_DATAFILE_CONTENT_TYPE      105
#define ERR_OCSP_WRONG_URL					106
#define ERR_OCSP_MALFORMED			107
#define ERR_OCSP_INTERNALERR		108
#define ERR_OCSP_TRYLATER			109
#define ERR_OCSP_SIGREQUIRED		110
#define ERR_OCSP_UNAUTHORIZED		111
#define ERR_UNKNOWN_CA                  112
// DigiDocEnc errors
#define ERR_DENC_ENC_METHOD             113
#define ERR_DENC_ENC_XMLNS              114
#define ERR_DENC_BAD_PROP_IDX           115
#define ERR_DENC_BAD_KEY_IDX           116
#define ERR_DENC_KEY_STATUS            117
#define ERR_DENC_DATA_STATUS            118
#define ERR_DENC_DECRYPT               119
#define ERR_CHARSET_CONVERT            120
#define ERR_COMPRESS                121
#define ERR_DECOMPRESS              122
#define ERR_OCSP_CERT_NOTFOUND      123
#define ERR_INVALID_CONTENT         124
#define ERR_DENC_NO_KEY_FOUND       125
#define ERR_OCSP_RESP_NOT_TRUSTED   126
#define ERR_PRIV_CERT_NOT_FOUND     127
#define ERR_NO_OCSP                 128
#define ERR_OCSP_WRONG_SIGNATURE    129
#define ERR_BAD_PARAM				130
#define ERR_GENERIC_SOAP_ERR		131

#define ERR_TS_TIMESTAMPINFO_TYPE      132
#define ERR_TS_BAD_INCLUDEINFO_IDX    133
#define ERR_TS_BAD_TIMESTAMPINFO_IDX    134
#define ERR_TS_CREATE_TS_REQ            135
#define ERR_CREATE_NONCE                136
#define ERR_TXT2OID                     137
#define ERR_HTTP_ERR                    138

#define ERR_BAD_CERTID_IDX              139
#define ERR_BAD_CERTVALUE_IDX           140
#define ERR_TS_VERIFY                   141
#define ERR_TS_REQUEST                  142
#define ERR_TSA_NOT_TRUSTED		143
#define ERR_ORPHONED_SIGNATURE		144

#define ERR_WPKI_UNKNOWN_USER		145
#define ERR_WPKI_INVALID_PHONE_NO	146
#define ERR_WPKI_UNTRUSTED_SRVICE	147
#define ERR_WPKI_UNTRUSTED_USER		148

#define ERR_WPKI_UNUSABLE_PHONE    149
#define ERR_WPKI_TIMEOUT		   150
#define ERR_WPKI_CANCELLED		   151
#define ERR_WPKI_MID_NOT_READY	   152
#define ERR_WPKI_PHONE_NOT_REACHABLE  153
#define ERR_WPKI_SENDING_ERROR	   154
#define ERR_WPKI_SIM_ERROR		   155
#define ERR_WPKI_SERVICE_ERR	   156
//AM 18.03.08
#define ERR_ZIP_FILE_READ				157
#define ERR_ZIP									158
#define ERR_MANIFEST						159
#define ERR_DATAFILE_NOT_MANIFEST	   160
#define ERR_SIG_INVALID_PROFILE     161
#define ERR_SIGNERS_CERT_NON_REPU  162
#define ERR_OCSP_NONCE_SIGVAL_NOMATCH 163
#define ERR_VALIDATE			164
#define ERR_OCSP_NONCE_INVALID   165
#define ERR_SIGVAL_ASN1         166
#define ERR_MAX_1_ROLES         167
#define ERR_DF_NAME         168
#define ERR_DF_WRONG_DIG          169
#define ERR_ISSUER_XMLNS          170
#define ERR_OLD_VERSION           171
#define ERR_TEST_SIGNATURE        172
#define ERR_UNKNOWN_ERROR        173
#define ERR_TRANSFORM_UNSUPPORTED        174
#define ERR_NETWORK_SYNC            175
#define ERR_XML_VALIDATION            176

#define ERROR_BUF_LENGTH            20


typedef struct ErrorMessage_st {
		char	*errorMessage;
		int 	errorClass;
} ErrorMessage;

typedef int ErrorClass;

// Error classes 

// Wasn't an error at all, no reaction neccessary
#define NO_ERRORS	0	
// Various problems of technical nature
#define TECHNICAL	1
// User-repairable errors
#define USER		2
// Bug in DigiDoc library (?)
#define LIBRARY		3

//==========< error info structure >==============

typedef struct ErrorInfo_st {
        int code;
        char *fileName;
        int line;
        char *assertion;
} ErrorInfo;

#ifdef WIN32
extern 	CRITICAL_SECTION cs_ddocErrors;
#endif

// checks and prints errors
EXP_OPTION long checkErrors();

//returns textual explanation of the error code
EXP_OPTION char* getErrorString(int code);

//returns the classification for the error code 
EXP_OPTION ErrorClass getErrorClass(int code);

//returns the code of the error that occurred in the library
EXP_OPTION ErrorInfo* getErrorInfo(void);

//returns 1, if all errors are read and 0 otherwise
EXP_OPTION int hasUnreadErrors(void);

//resets error information
EXP_OPTION void clearErrors(void);

EXP_OPTION void addError(int code, char *fileName, int line, char *assertion);

EXP_OPTION int checkDigiDocErrors(void);

EXP_OPTION int getLastError();
    
//returns -1, if all errors are read and valid index otherwise
EXP_OPTION int getLastErrorsIdx();
    
//returns NULL, if all errors are read and valid ErrorInfo structre pointer otherwise
// does not mark error as read so it can be found again
EXP_OPTION ErrorInfo* getErrorsInfo(int nIdx);
    
// return ERR_UNKNOWN_ERROR if multiple different errors exist, otherwise first error code
EXP_OPTION int checkUnknownErr();

//==========< macros >====================

#define SET_LAST_ERROR(code)                (addError((code), __FILE__, __LINE__, ""))
#define SET_LAST_ERROR_IF_NOT(expr, code)   { if(!(expr)) addError((code), __FILE__, __LINE__, #expr); }
#define SET_LAST_ERROR_RETURN(code, retVal) { SET_LAST_ERROR(code); return (retVal); }
#define SET_LAST_ERROR_RETURN_IF_NOT(expr, code, retVal) { if(!(expr)) { addError((code), __FILE__, __LINE__, #expr); return (retVal); } }
#define SET_LAST_ERROR_RETURN_VOID_IF_NOT(expr, code) { if(!(expr)) { addError((code), __FILE__, __LINE__, #expr); return; } }
#define SET_LAST_ERROR_RETURN_VOID_IF(expr, code) { if(expr) { addError((code), __FILE__, __LINE__, #expr); return; } }
#define RETURN_IF_NOT(expr, code) SET_LAST_ERROR_RETURN_IF_NOT((expr), (code), (code));
#define RETURN_IF_NULL(p)                   RETURN_IF_NOT((p), ERR_NULL_POINTER);
#define RETURN_VOID_IF_NULL(p)              SET_LAST_ERROR_RETURN_VOID_IF_NOT((p), ERR_NULL_POINTER);
#define RETURN_OBJ_IF_NULL(p, obj)          SET_LAST_ERROR_RETURN_IF_NOT((p), ERR_NULL_POINTER, (obj));
#define SET_LAST_ERROR_RETURN_CODE(code)    { SET_LAST_ERROR(code); return (code); }
#define RETURN_IF_NULL_PARAM(p)				RETURN_IF_NOT((p), ERR_NULL_PARAM);
#define RETURN_IF_BAD_ALLOC(p)				RETURN_IF_NOT((p), ERR_BAD_ALLOC)
#define RETURN_VOID_IF_BAD_ALLOC(p)	    SET_LAST_ERROR_RETURN_VOID_IF_NOT((p), ERR_BAD_ALLOC);

//========================================

#ifdef  __cplusplus
}
#endif

#endif