1*90e502c7SAndroid Build Coastguard Worker /* 2*90e502c7SAndroid Build Coastguard Worker * err.h 3*90e502c7SAndroid Build Coastguard Worker * 4*90e502c7SAndroid Build Coastguard Worker * error status codes 5*90e502c7SAndroid Build Coastguard Worker * 6*90e502c7SAndroid Build Coastguard Worker * David A. McGrew 7*90e502c7SAndroid Build Coastguard Worker * Cisco Systems, Inc. 8*90e502c7SAndroid Build Coastguard Worker */ 9*90e502c7SAndroid Build Coastguard Worker /* 10*90e502c7SAndroid Build Coastguard Worker * 11*90e502c7SAndroid Build Coastguard Worker * Copyright (c) 2001-2017, Cisco Systems, Inc. 12*90e502c7SAndroid Build Coastguard Worker * All rights reserved. 13*90e502c7SAndroid Build Coastguard Worker * 14*90e502c7SAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without 15*90e502c7SAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions 16*90e502c7SAndroid Build Coastguard Worker * are met: 17*90e502c7SAndroid Build Coastguard Worker * 18*90e502c7SAndroid Build Coastguard Worker * Redistributions of source code must retain the above copyright 19*90e502c7SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer. 20*90e502c7SAndroid Build Coastguard Worker * 21*90e502c7SAndroid Build Coastguard Worker * Redistributions in binary form must reproduce the above 22*90e502c7SAndroid Build Coastguard Worker * copyright notice, this list of conditions and the following 23*90e502c7SAndroid Build Coastguard Worker * disclaimer in the documentation and/or other materials provided 24*90e502c7SAndroid Build Coastguard Worker * with the distribution. 25*90e502c7SAndroid Build Coastguard Worker * 26*90e502c7SAndroid Build Coastguard Worker * Neither the name of the Cisco Systems, Inc. nor the names of its 27*90e502c7SAndroid Build Coastguard Worker * contributors may be used to endorse or promote products derived 28*90e502c7SAndroid Build Coastguard Worker * from this software without specific prior written permission. 29*90e502c7SAndroid Build Coastguard Worker * 30*90e502c7SAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 31*90e502c7SAndroid Build Coastguard Worker * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 32*90e502c7SAndroid Build Coastguard Worker * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 33*90e502c7SAndroid Build Coastguard Worker * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 34*90e502c7SAndroid Build Coastguard Worker * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 35*90e502c7SAndroid Build Coastguard Worker * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 36*90e502c7SAndroid Build Coastguard Worker * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 37*90e502c7SAndroid Build Coastguard Worker * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38*90e502c7SAndroid Build Coastguard Worker * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39*90e502c7SAndroid Build Coastguard Worker * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 40*90e502c7SAndroid Build Coastguard Worker * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 41*90e502c7SAndroid Build Coastguard Worker * OF THE POSSIBILITY OF SUCH DAMAGE. 42*90e502c7SAndroid Build Coastguard Worker * 43*90e502c7SAndroid Build Coastguard Worker */ 44*90e502c7SAndroid Build Coastguard Worker 45*90e502c7SAndroid Build Coastguard Worker #ifndef ERR_H 46*90e502c7SAndroid Build Coastguard Worker #define ERR_H 47*90e502c7SAndroid Build Coastguard Worker 48*90e502c7SAndroid Build Coastguard Worker #include <stdio.h> 49*90e502c7SAndroid Build Coastguard Worker #include <stdarg.h> 50*90e502c7SAndroid Build Coastguard Worker #include "srtp.h" 51*90e502c7SAndroid Build Coastguard Worker 52*90e502c7SAndroid Build Coastguard Worker #ifdef __cplusplus 53*90e502c7SAndroid Build Coastguard Worker extern "C" { 54*90e502c7SAndroid Build Coastguard Worker #endif 55*90e502c7SAndroid Build Coastguard Worker 56*90e502c7SAndroid Build Coastguard Worker /** 57*90e502c7SAndroid Build Coastguard Worker * @defgroup Error Error Codes 58*90e502c7SAndroid Build Coastguard Worker * 59*90e502c7SAndroid Build Coastguard Worker * Error status codes are represented by the enumeration srtp_err_status_t. 60*90e502c7SAndroid Build Coastguard Worker * 61*90e502c7SAndroid Build Coastguard Worker * @{ 62*90e502c7SAndroid Build Coastguard Worker */ 63*90e502c7SAndroid Build Coastguard Worker 64*90e502c7SAndroid Build Coastguard Worker /** 65*90e502c7SAndroid Build Coastguard Worker * @} 66*90e502c7SAndroid Build Coastguard Worker */ 67*90e502c7SAndroid Build Coastguard Worker 68*90e502c7SAndroid Build Coastguard Worker typedef enum { 69*90e502c7SAndroid Build Coastguard Worker srtp_err_level_error, 70*90e502c7SAndroid Build Coastguard Worker srtp_err_level_warning, 71*90e502c7SAndroid Build Coastguard Worker srtp_err_level_info, 72*90e502c7SAndroid Build Coastguard Worker srtp_err_level_debug 73*90e502c7SAndroid Build Coastguard Worker } srtp_err_reporting_level_t; 74*90e502c7SAndroid Build Coastguard Worker 75*90e502c7SAndroid Build Coastguard Worker /* 76*90e502c7SAndroid Build Coastguard Worker * err_reporting_init prepares the error system. If 77*90e502c7SAndroid Build Coastguard Worker * ERR_REPORTING_STDOUT is defined, it will log to stdout. 78*90e502c7SAndroid Build Coastguard Worker * 79*90e502c7SAndroid Build Coastguard Worker */ 80*90e502c7SAndroid Build Coastguard Worker 81*90e502c7SAndroid Build Coastguard Worker srtp_err_status_t srtp_err_reporting_init(void); 82*90e502c7SAndroid Build Coastguard Worker 83*90e502c7SAndroid Build Coastguard Worker typedef void(srtp_err_report_handler_func_t)(srtp_err_reporting_level_t level, 84*90e502c7SAndroid Build Coastguard Worker const char *msg); 85*90e502c7SAndroid Build Coastguard Worker 86*90e502c7SAndroid Build Coastguard Worker srtp_err_status_t srtp_install_err_report_handler( 87*90e502c7SAndroid Build Coastguard Worker srtp_err_report_handler_func_t func); 88*90e502c7SAndroid Build Coastguard Worker 89*90e502c7SAndroid Build Coastguard Worker /* 90*90e502c7SAndroid Build Coastguard Worker * srtp_err_report reports a 'printf' formatted error 91*90e502c7SAndroid Build Coastguard Worker * string, followed by a an arg list. The level argument 92*90e502c7SAndroid Build Coastguard Worker * is one of srtp_err_reporting_level_t. 93*90e502c7SAndroid Build Coastguard Worker * 94*90e502c7SAndroid Build Coastguard Worker * Errors will be reported to stdout, if ERR_REPORTING_STDOUT 95*90e502c7SAndroid Build Coastguard Worker * is defined. 96*90e502c7SAndroid Build Coastguard Worker * 97*90e502c7SAndroid Build Coastguard Worker */ 98*90e502c7SAndroid Build Coastguard Worker 99*90e502c7SAndroid Build Coastguard Worker void srtp_err_report(srtp_err_reporting_level_t level, const char *format, ...); 100*90e502c7SAndroid Build Coastguard Worker 101*90e502c7SAndroid Build Coastguard Worker /* 102*90e502c7SAndroid Build Coastguard Worker * debug_module_t defines a debug module 103*90e502c7SAndroid Build Coastguard Worker */ 104*90e502c7SAndroid Build Coastguard Worker 105*90e502c7SAndroid Build Coastguard Worker typedef struct { 106*90e502c7SAndroid Build Coastguard Worker int on; /* 1 if debugging is on, 0 if it is off */ 107*90e502c7SAndroid Build Coastguard Worker const char *name; /* printable name for debug module */ 108*90e502c7SAndroid Build Coastguard Worker } srtp_debug_module_t; 109*90e502c7SAndroid Build Coastguard Worker 110*90e502c7SAndroid Build Coastguard Worker #ifdef ENABLE_DEBUG_LOGGING 111*90e502c7SAndroid Build Coastguard Worker 112*90e502c7SAndroid Build Coastguard Worker #define debug_print(mod, format, arg) \ 113*90e502c7SAndroid Build Coastguard Worker srtp_err_report(srtp_err_level_debug, ("%s: " format "\n"), mod.name, arg) 114*90e502c7SAndroid Build Coastguard Worker #define debug_print2(mod, format, arg1, arg2) \ 115*90e502c7SAndroid Build Coastguard Worker srtp_err_report(srtp_err_level_debug, ("%s: " format "\n"), mod.name, \ 116*90e502c7SAndroid Build Coastguard Worker arg1, arg2) 117*90e502c7SAndroid Build Coastguard Worker 118*90e502c7SAndroid Build Coastguard Worker #else 119*90e502c7SAndroid Build Coastguard Worker 120*90e502c7SAndroid Build Coastguard Worker #define debug_print(mod, format, arg) \ 121*90e502c7SAndroid Build Coastguard Worker if (mod.on) \ 122*90e502c7SAndroid Build Coastguard Worker srtp_err_report(srtp_err_level_debug, ("%s: " format "\n"), mod.name, arg) 123*90e502c7SAndroid Build Coastguard Worker #define debug_print2(mod, format, arg1, arg2) \ 124*90e502c7SAndroid Build Coastguard Worker if (mod.on) \ 125*90e502c7SAndroid Build Coastguard Worker srtp_err_report(srtp_err_level_debug, ("%s: " format "\n"), mod.name, \ 126*90e502c7SAndroid Build Coastguard Worker arg1, arg2) 127*90e502c7SAndroid Build Coastguard Worker 128*90e502c7SAndroid Build Coastguard Worker #endif 129*90e502c7SAndroid Build Coastguard Worker 130*90e502c7SAndroid Build Coastguard Worker #ifdef __cplusplus 131*90e502c7SAndroid Build Coastguard Worker } 132*90e502c7SAndroid Build Coastguard Worker #endif 133*90e502c7SAndroid Build Coastguard Worker 134*90e502c7SAndroid Build Coastguard Worker #endif /* ERR_H */ 135