Eneboo - Documentación para desarrolladores
|
00001 /* crypto/err/err.h */ 00002 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 00003 * All rights reserved. 00004 * 00005 * This package is an SSL implementation written 00006 * by Eric Young (eay@cryptsoft.com). 00007 * The implementation was written so as to conform with Netscapes SSL. 00008 * 00009 * This library is free for commercial and non-commercial use as long as 00010 * the following conditions are aheared to. The following conditions 00011 * apply to all code found in this distribution, be it the RC4, RSA, 00012 * lhash, DES, etc., code; not just the SSL code. The SSL documentation 00013 * included with this distribution is covered by the same copyright terms 00014 * except that the holder is Tim Hudson (tjh@cryptsoft.com). 00015 * 00016 * Copyright remains Eric Young's, and as such any Copyright notices in 00017 * the code are not to be removed. 00018 * If this package is used in a product, Eric Young should be given attribution 00019 * as the author of the parts of the library used. 00020 * This can be in the form of a textual message at program startup or 00021 * in documentation (online or textual) provided with the package. 00022 * 00023 * Redistribution and use in source and binary forms, with or without 00024 * modification, are permitted provided that the following conditions 00025 * are met: 00026 * 1. Redistributions of source code must retain the copyright 00027 * notice, this list of conditions and the following disclaimer. 00028 * 2. Redistributions in binary form must reproduce the above copyright 00029 * notice, this list of conditions and the following disclaimer in the 00030 * documentation and/or other materials provided with the distribution. 00031 * 3. All advertising materials mentioning features or use of this software 00032 * must display the following acknowledgement: 00033 * "This product includes cryptographic software written by 00034 * Eric Young (eay@cryptsoft.com)" 00035 * The word 'cryptographic' can be left out if the rouines from the library 00036 * being used are not cryptographic related :-). 00037 * 4. If you include any Windows specific code (or a derivative thereof) from 00038 * the apps directory (application code) you must include an acknowledgement: 00039 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" 00040 * 00041 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 00042 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00043 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 00044 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 00045 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 00046 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 00047 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 00048 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 00049 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 00050 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 00051 * SUCH DAMAGE. 00052 * 00053 * The licence and distribution terms for any publically available version or 00054 * derivative of this code cannot be changed. i.e. this code cannot simply be 00055 * copied and put under another distribution licence 00056 * [including the GNU Public Licence.] 00057 */ 00058 00059 #ifndef HEADER_ERR_H 00060 #define HEADER_ERR_H 00061 00062 #include <openssl/e_os2.h> 00063 00064 #ifndef OPENSSL_NO_FP_API 00065 #include <stdio.h> 00066 #include <stdlib.h> 00067 #endif 00068 00069 #include <openssl/ossl_typ.h> 00070 #ifndef OPENSSL_NO_BIO 00071 #include <openssl/bio.h> 00072 #endif 00073 #ifndef OPENSSL_NO_LHASH 00074 #include <openssl/lhash.h> 00075 #endif 00076 00077 #ifdef __cplusplus 00078 extern "C" { 00079 #endif 00080 00081 #ifndef OPENSSL_NO_ERR 00082 #define ERR_PUT_error(a,b,c,d,e) ERR_put_error(a,b,c,d,e) 00083 #else 00084 #define ERR_PUT_error(a,b,c,d,e) ERR_put_error(a,b,c,NULL,0) 00085 #endif 00086 00087 #include <errno.h> 00088 00089 #define ERR_TXT_MALLOCED 0x01 00090 #define ERR_TXT_STRING 0x02 00091 00092 #define ERR_FLAG_MARK 0x01 00093 00094 #define ERR_NUM_ERRORS 16 00095 typedef struct err_state_st 00096 { 00097 unsigned long pid; 00098 int err_flags[ERR_NUM_ERRORS]; 00099 unsigned long err_buffer[ERR_NUM_ERRORS]; 00100 char *err_data[ERR_NUM_ERRORS]; 00101 int err_data_flags[ERR_NUM_ERRORS]; 00102 const char *err_file[ERR_NUM_ERRORS]; 00103 int err_line[ERR_NUM_ERRORS]; 00104 int top,bottom; 00105 } ERR_STATE; 00106 00107 /* library */ 00108 #define ERR_LIB_NONE 1 00109 #define ERR_LIB_SYS 2 00110 #define ERR_LIB_BN 3 00111 #define ERR_LIB_RSA 4 00112 #define ERR_LIB_DH 5 00113 #define ERR_LIB_EVP 6 00114 #define ERR_LIB_BUF 7 00115 #define ERR_LIB_OBJ 8 00116 #define ERR_LIB_PEM 9 00117 #define ERR_LIB_DSA 10 00118 #define ERR_LIB_X509 11 00119 /* #define ERR_LIB_METH 12 */ 00120 #define ERR_LIB_ASN1 13 00121 #define ERR_LIB_CONF 14 00122 #define ERR_LIB_CRYPTO 15 00123 #define ERR_LIB_EC 16 00124 #define ERR_LIB_SSL 20 00125 /* #define ERR_LIB_SSL23 21 */ 00126 /* #define ERR_LIB_SSL2 22 */ 00127 /* #define ERR_LIB_SSL3 23 */ 00128 /* #define ERR_LIB_RSAREF 30 */ 00129 /* #define ERR_LIB_PROXY 31 */ 00130 #define ERR_LIB_BIO 32 00131 #define ERR_LIB_PKCS7 33 00132 #define ERR_LIB_X509V3 34 00133 #define ERR_LIB_PKCS12 35 00134 #define ERR_LIB_RAND 36 00135 #define ERR_LIB_DSO 37 00136 #define ERR_LIB_ENGINE 38 00137 #define ERR_LIB_OCSP 39 00138 #define ERR_LIB_UI 40 00139 #define ERR_LIB_COMP 41 00140 #define ERR_LIB_ECDSA 42 00141 #define ERR_LIB_ECDH 43 00142 #define ERR_LIB_STORE 44 00143 #define ERR_LIB_FIPS 45 00144 #define ERR_LIB_CMS 46 00145 #define ERR_LIB_JPAKE 47 00146 00147 #define ERR_LIB_USER 128 00148 00149 #define SYSerr(f,r) ERR_PUT_error(ERR_LIB_SYS,(f),(r),__FILE__,__LINE__) 00150 #define BNerr(f,r) ERR_PUT_error(ERR_LIB_BN,(f),(r),__FILE__,__LINE__) 00151 #define RSAerr(f,r) ERR_PUT_error(ERR_LIB_RSA,(f),(r),__FILE__,__LINE__) 00152 #define DHerr(f,r) ERR_PUT_error(ERR_LIB_DH,(f),(r),__FILE__,__LINE__) 00153 #define EVPerr(f,r) ERR_PUT_error(ERR_LIB_EVP,(f),(r),__FILE__,__LINE__) 00154 #define BUFerr(f,r) ERR_PUT_error(ERR_LIB_BUF,(f),(r),__FILE__,__LINE__) 00155 #define OBJerr(f,r) ERR_PUT_error(ERR_LIB_OBJ,(f),(r),__FILE__,__LINE__) 00156 #define PEMerr(f,r) ERR_PUT_error(ERR_LIB_PEM,(f),(r),__FILE__,__LINE__) 00157 #define DSAerr(f,r) ERR_PUT_error(ERR_LIB_DSA,(f),(r),__FILE__,__LINE__) 00158 #define X509err(f,r) ERR_PUT_error(ERR_LIB_X509,(f),(r),__FILE__,__LINE__) 00159 #define ASN1err(f,r) ERR_PUT_error(ERR_LIB_ASN1,(f),(r),__FILE__,__LINE__) 00160 #define CONFerr(f,r) ERR_PUT_error(ERR_LIB_CONF,(f),(r),__FILE__,__LINE__) 00161 #define CRYPTOerr(f,r) ERR_PUT_error(ERR_LIB_CRYPTO,(f),(r),__FILE__,__LINE__) 00162 #define ECerr(f,r) ERR_PUT_error(ERR_LIB_EC,(f),(r),__FILE__,__LINE__) 00163 #define SSLerr(f,r) ERR_PUT_error(ERR_LIB_SSL,(f),(r),__FILE__,__LINE__) 00164 #define BIOerr(f,r) ERR_PUT_error(ERR_LIB_BIO,(f),(r),__FILE__,__LINE__) 00165 #define PKCS7err(f,r) ERR_PUT_error(ERR_LIB_PKCS7,(f),(r),__FILE__,__LINE__) 00166 #define X509V3err(f,r) ERR_PUT_error(ERR_LIB_X509V3,(f),(r),__FILE__,__LINE__) 00167 #define PKCS12err(f,r) ERR_PUT_error(ERR_LIB_PKCS12,(f),(r),__FILE__,__LINE__) 00168 #define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),__FILE__,__LINE__) 00169 #define DSOerr(f,r) ERR_PUT_error(ERR_LIB_DSO,(f),(r),__FILE__,__LINE__) 00170 #define ENGINEerr(f,r) ERR_PUT_error(ERR_LIB_ENGINE,(f),(r),__FILE__,__LINE__) 00171 #define OCSPerr(f,r) ERR_PUT_error(ERR_LIB_OCSP,(f),(r),__FILE__,__LINE__) 00172 #define UIerr(f,r) ERR_PUT_error(ERR_LIB_UI,(f),(r),__FILE__,__LINE__) 00173 #define COMPerr(f,r) ERR_PUT_error(ERR_LIB_COMP,(f),(r),__FILE__,__LINE__) 00174 #define ECDSAerr(f,r) ERR_PUT_error(ERR_LIB_ECDSA,(f),(r),__FILE__,__LINE__) 00175 #define ECDHerr(f,r) ERR_PUT_error(ERR_LIB_ECDH,(f),(r),__FILE__,__LINE__) 00176 #define STOREerr(f,r) ERR_PUT_error(ERR_LIB_STORE,(f),(r),__FILE__,__LINE__) 00177 #define FIPSerr(f,r) ERR_PUT_error(ERR_LIB_FIPS,(f),(r),__FILE__,__LINE__) 00178 #define CMSerr(f,r) ERR_PUT_error(ERR_LIB_CMS,(f),(r),__FILE__,__LINE__) 00179 #define JPAKEerr(f,r) ERR_PUT_error(ERR_LIB_JPAKE,(f),(r),__FILE__,__LINE__) 00180 00181 /* Borland C seems too stupid to be able to shift and do longs in 00182 * the pre-processor :-( */ 00183 #define ERR_PACK(l,f,r) (((((unsigned long)l)&0xffL)*0x1000000)| \ 00184 ((((unsigned long)f)&0xfffL)*0x1000)| \ 00185 ((((unsigned long)r)&0xfffL))) 00186 #define ERR_GET_LIB(l) (int)((((unsigned long)l)>>24L)&0xffL) 00187 #define ERR_GET_FUNC(l) (int)((((unsigned long)l)>>12L)&0xfffL) 00188 #define ERR_GET_REASON(l) (int)((l)&0xfffL) 00189 #define ERR_FATAL_ERROR(l) (int)((l)&ERR_R_FATAL) 00190 00191 00192 /* OS functions */ 00193 #define SYS_F_FOPEN 1 00194 #define SYS_F_CONNECT 2 00195 #define SYS_F_GETSERVBYNAME 3 00196 #define SYS_F_SOCKET 4 00197 #define SYS_F_IOCTLSOCKET 5 00198 #define SYS_F_BIND 6 00199 #define SYS_F_LISTEN 7 00200 #define SYS_F_ACCEPT 8 00201 #define SYS_F_WSASTARTUP 9 /* Winsock stuff */ 00202 #define SYS_F_OPENDIR 10 00203 #define SYS_F_FREAD 11 00204 00205 00206 /* reasons */ 00207 #define ERR_R_SYS_LIB ERR_LIB_SYS /* 2 */ 00208 #define ERR_R_BN_LIB ERR_LIB_BN /* 3 */ 00209 #define ERR_R_RSA_LIB ERR_LIB_RSA /* 4 */ 00210 #define ERR_R_DH_LIB ERR_LIB_DH /* 5 */ 00211 #define ERR_R_EVP_LIB ERR_LIB_EVP /* 6 */ 00212 #define ERR_R_BUF_LIB ERR_LIB_BUF /* 7 */ 00213 #define ERR_R_OBJ_LIB ERR_LIB_OBJ /* 8 */ 00214 #define ERR_R_PEM_LIB ERR_LIB_PEM /* 9 */ 00215 #define ERR_R_DSA_LIB ERR_LIB_DSA /* 10 */ 00216 #define ERR_R_X509_LIB ERR_LIB_X509 /* 11 */ 00217 #define ERR_R_ASN1_LIB ERR_LIB_ASN1 /* 13 */ 00218 #define ERR_R_CONF_LIB ERR_LIB_CONF /* 14 */ 00219 #define ERR_R_CRYPTO_LIB ERR_LIB_CRYPTO /* 15 */ 00220 #define ERR_R_EC_LIB ERR_LIB_EC /* 16 */ 00221 #define ERR_R_SSL_LIB ERR_LIB_SSL /* 20 */ 00222 #define ERR_R_BIO_LIB ERR_LIB_BIO /* 32 */ 00223 #define ERR_R_PKCS7_LIB ERR_LIB_PKCS7 /* 33 */ 00224 #define ERR_R_X509V3_LIB ERR_LIB_X509V3 /* 34 */ 00225 #define ERR_R_PKCS12_LIB ERR_LIB_PKCS12 /* 35 */ 00226 #define ERR_R_RAND_LIB ERR_LIB_RAND /* 36 */ 00227 #define ERR_R_DSO_LIB ERR_LIB_DSO /* 37 */ 00228 #define ERR_R_ENGINE_LIB ERR_LIB_ENGINE /* 38 */ 00229 #define ERR_R_OCSP_LIB ERR_LIB_OCSP /* 39 */ 00230 #define ERR_R_UI_LIB ERR_LIB_UI /* 40 */ 00231 #define ERR_R_COMP_LIB ERR_LIB_COMP /* 41 */ 00232 #define ERR_R_ECDSA_LIB ERR_LIB_ECDSA /* 42 */ 00233 #define ERR_R_ECDH_LIB ERR_LIB_ECDH /* 43 */ 00234 #define ERR_R_STORE_LIB ERR_LIB_STORE /* 44 */ 00235 00236 #define ERR_R_NESTED_ASN1_ERROR 58 00237 #define ERR_R_BAD_ASN1_OBJECT_HEADER 59 00238 #define ERR_R_BAD_GET_ASN1_OBJECT_CALL 60 00239 #define ERR_R_EXPECTING_AN_ASN1_SEQUENCE 61 00240 #define ERR_R_ASN1_LENGTH_MISMATCH 62 00241 #define ERR_R_MISSING_ASN1_EOS 63 00242 00243 /* fatal error */ 00244 #define ERR_R_FATAL 64 00245 #define ERR_R_MALLOC_FAILURE (1|ERR_R_FATAL) 00246 #define ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED (2|ERR_R_FATAL) 00247 #define ERR_R_PASSED_NULL_PARAMETER (3|ERR_R_FATAL) 00248 #define ERR_R_INTERNAL_ERROR (4|ERR_R_FATAL) 00249 #define ERR_R_DISABLED (5|ERR_R_FATAL) 00250 00251 /* 99 is the maximum possible ERR_R_... code, higher values 00252 * are reserved for the individual libraries */ 00253 00254 00255 typedef struct ERR_string_data_st 00256 { 00257 unsigned long error; 00258 const char *string; 00259 } ERR_STRING_DATA; 00260 00261 void ERR_put_error(int lib, int func,int reason,const char *file,int line); 00262 void ERR_set_error_data(char *data,int flags); 00263 00264 unsigned long ERR_get_error(void); 00265 unsigned long ERR_get_error_line(const char **file,int *line); 00266 unsigned long ERR_get_error_line_data(const char **file,int *line, 00267 const char **data, int *flags); 00268 unsigned long ERR_peek_error(void); 00269 unsigned long ERR_peek_error_line(const char **file,int *line); 00270 unsigned long ERR_peek_error_line_data(const char **file,int *line, 00271 const char **data,int *flags); 00272 unsigned long ERR_peek_last_error(void); 00273 unsigned long ERR_peek_last_error_line(const char **file,int *line); 00274 unsigned long ERR_peek_last_error_line_data(const char **file,int *line, 00275 const char **data,int *flags); 00276 void ERR_clear_error(void ); 00277 char *ERR_error_string(unsigned long e,char *buf); 00278 void ERR_error_string_n(unsigned long e, char *buf, size_t len); 00279 const char *ERR_lib_error_string(unsigned long e); 00280 const char *ERR_func_error_string(unsigned long e); 00281 const char *ERR_reason_error_string(unsigned long e); 00282 void ERR_print_errors_cb(int (*cb)(const char *str, size_t len, void *u), 00283 void *u); 00284 #ifndef OPENSSL_NO_FP_API 00285 void ERR_print_errors_fp(FILE *fp); 00286 #endif 00287 #ifndef OPENSSL_NO_BIO 00288 void ERR_print_errors(BIO *bp); 00289 void ERR_add_error_data(int num, ...); 00290 #endif 00291 void ERR_load_strings(int lib,ERR_STRING_DATA str[]); 00292 void ERR_unload_strings(int lib,ERR_STRING_DATA str[]); 00293 void ERR_load_ERR_strings(void); 00294 void ERR_load_crypto_strings(void); 00295 void ERR_free_strings(void); 00296 00297 void ERR_remove_state(unsigned long pid); /* if zero we look it up */ 00298 ERR_STATE *ERR_get_state(void); 00299 00300 #ifndef OPENSSL_NO_LHASH 00301 LHASH *ERR_get_string_table(void); 00302 LHASH *ERR_get_err_state_table(void); 00303 void ERR_release_err_state_table(LHASH **hash); 00304 #endif 00305 00306 int ERR_get_next_error_library(void); 00307 00308 int ERR_set_mark(void); 00309 int ERR_pop_to_mark(void); 00310 00311 #ifdef OPENSSL_FIPS 00312 void int_ERR_set_state_func(ERR_STATE *(*get_func)(void), 00313 void (*remove_func)(unsigned long pid)); 00314 void int_ERR_lib_init(void); 00315 #endif 00316 00317 /* Already defined in ossl_typ.h */ 00318 /* typedef struct st_ERR_FNS ERR_FNS; */ 00319 /* An application can use this function and provide the return value to loaded 00320 * modules that should use the application's ERR state/functionality */ 00321 const ERR_FNS *ERR_get_implementation(void); 00322 /* A loaded module should call this function prior to any ERR operations using 00323 * the application's "ERR_FNS". */ 00324 int ERR_set_implementation(const ERR_FNS *fns); 00325 00326 #ifdef __cplusplus 00327 } 00328 #endif 00329 00330 #endif