1 /* 2 * %CopyrightBegin% 3 * 4 * Copyright Ericsson AB 2002-2020. All Rights Reserved. 5 * 6 * Licensed under the Apache License, Version 2.0 (the "License"); 7 * you may not use this file except in compliance with the License. 8 * You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, software 13 * distributed under the License is distributed on an "AS IS" BASIS, 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 * 18 * %CopyrightEnd% 19 * 20 21 */ 22 #ifndef _EI_INTERNAL_H 23 #define _EI_INTERNAL_H 24 25 #ifdef EI_HIDE_REAL_ERRNO 26 # define EI_CONN_SAVE_ERRNO__(E) \ 27 ((E) == ETIMEDOUT ? (erl_errno = ETIMEDOUT) : (erl_errno = EIO)) 28 #else 29 # define EI_CONN_SAVE_ERRNO__(E) \ 30 (erl_errno = (E)) 31 #endif 32 33 /* 34 * Some useful stuff not to be exported to users. 35 */ 36 37 #ifdef __WIN32__ 38 #define MAXPATHLEN 256 39 #endif 40 41 /* 42 * Trace functions 43 * 44 * The variable ei_tracelevel means 45 * 0 No tracing 46 * 1 Write verbose error messages 47 * 2 Write verbose warning messages + 1 48 * 3 Write progress reports for connect handlin + 1 + 2 49 * 4 Write progress reports for communication + 1 + 2 + 3 50 * 5 Write progress reports for data conversion + 1 + 2 + 3 + 4 51 * 52 */ 53 54 #define EI_TRACE_ERR0(NAME,FORMAT) \ 55 {if (ei_tracelevel >= 1) ei_trace_printf(NAME,1,FORMAT);} 56 #define EI_TRACE_ERR1(NAME,FORMAT,ARG1) \ 57 {if (ei_tracelevel >= 1) ei_trace_printf(NAME,1,FORMAT,ARG1);} 58 #define EI_TRACE_ERR2(NAME,FORMAT,ARG1,ARG2) \ 59 {if (ei_tracelevel >= 1) ei_trace_printf(NAME,1,FORMAT,ARG1,ARG2);} 60 #define EI_TRACE_ERR3(NAME,FORMAT,ARG1,ARG2,ARG3) \ 61 {if (ei_tracelevel >= 1) ei_trace_printf(NAME,1,FORMAT,ARG1,ARG2,ARG3);} 62 #define EI_TRACE_ERR4(NAME,FORMAT,ARG1,ARG2,ARG3,ARG4) \ 63 {if (ei_tracelevel >= 1) ei_trace_printf(NAME,1,FORMAT,ARG1,ARG2,ARG3,ARG4);} 64 #define EI_TRACE_ERR5(NAME,FORMAT,ARG1,ARG2,ARG3,ARG4,ARG5) \ 65 {if (ei_tracelevel >= 1) ei_trace_printf(NAME,1,FORMAT,ARG1,ARG2,ARG3,ARG4, \ 66 ARG5);} 67 #define EI_TRACE_ERR6(NAME,FORMAT,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6) \ 68 {if (ei_tracelevel >= 1) ei_trace_printf(NAME,1,FORMAT,ARG1,ARG2,ARG3,ARG4, \ 69 ARG5,ARG6);} 70 #define EI_TRACE_ERR7(NAME,FORMAT,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6,ARG7) \ 71 {if (ei_tracelevel >= 1) ei_trace_printf(NAME,1,FORMAT,ARG1,ARG2,ARG3,ARG4, \ 72 ARG5,ARG6,ARG7);} 73 74 #define EI_TRACE_WARN0(NAME,FORMAT) \ 75 {if (ei_tracelevel >= 2) ei_trace_printf(NAME,1,FORMAT);} 76 #define EI_TRACE_WARN1(NAME,FORMAT,ARG1) \ 77 {if (ei_tracelevel >= 2) ei_trace_printf(NAME,1,FORMAT,ARG1);} 78 #define EI_TRACE_WARN2(NAME,FORMAT,ARG1,ARG2) \ 79 {if (ei_tracelevel >= 2) ei_trace_printf(NAME,1,FORMAT,ARG1,ARG2);} 80 #define EI_TRACE_WARN3(NAME,FORMAT,ARG1,ARG2,ARG3) \ 81 {if (ei_tracelevel >= 2) ei_trace_printf(NAME,1,FORMAT,ARG1,ARG2,ARG3);} 82 #define EI_TRACE_WARN4(NAME,FORMAT,ARG1,ARG2,ARG3,ARG4) \ 83 {if (ei_tracelevel >= 2) ei_trace_printf(NAME,1,FORMAT,ARG1,ARG2,ARG3,ARG4);} 84 #define EI_TRACE_WARN5(NAME,FORMAT,ARG1,ARG2,ARG3,ARG4,ARG5) \ 85 {if (ei_tracelevel >= 2) ei_trace_printf(NAME,1,FORMAT,ARG1,ARG2,ARG3,ARG4, \ 86 ARG5);} 87 #define EI_TRACE_WARN6(NAME,FORMAT,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6) \ 88 {if (ei_tracelevel >= 2) ei_trace_printf(NAME,1,FORMAT,ARG1,ARG2,ARG3,ARG4, \ 89 ARG5,ARG6);} 90 #define EI_TRACE_WARN7(NAME,FORMAT,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6,ARG7) \ 91 {if (ei_tracelevel >= 2) ei_trace_printf(NAME,1,FORMAT,ARG1,ARG2,ARG3,ARG4, \ 92 ARG5,ARG6,ARG7);} 93 94 #define EI_TRACE_CONN0(NAME,FORMAT) \ 95 {if (ei_tracelevel >= 3) ei_trace_printf(NAME,1,FORMAT);} 96 #define EI_TRACE_CONN1(NAME,FORMAT,ARG1) \ 97 {if (ei_tracelevel >= 3) ei_trace_printf(NAME,1,FORMAT,ARG1);} 98 #define EI_TRACE_CONN2(NAME,FORMAT,ARG1,ARG2) \ 99 {if (ei_tracelevel >= 3) ei_trace_printf(NAME,1,FORMAT,ARG1,ARG2);} 100 #define EI_TRACE_CONN3(NAME,FORMAT,ARG1,ARG2,ARG3) \ 101 {if (ei_tracelevel >= 3) ei_trace_printf(NAME,1,FORMAT,ARG1,ARG2,ARG3);} 102 #define EI_TRACE_CONN4(NAME,FORMAT,ARG1,ARG2,ARG3,ARG4) \ 103 {if (ei_tracelevel >= 3) ei_trace_printf(NAME,1,FORMAT,ARG1,ARG2,ARG3,ARG4);} 104 #define EI_TRACE_CONN5(NAME,FORMAT,ARG1,ARG2,ARG3,ARG4,ARG5) \ 105 {if (ei_tracelevel >= 3) ei_trace_printf(NAME,1,FORMAT,ARG1,ARG2,ARG3,ARG4, \ 106 ARG5);} 107 #define EI_TRACE_CONN6(NAME,FORMAT,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6) \ 108 {if (ei_tracelevel >= 3) ei_trace_printf(NAME,1,FORMAT,ARG1,ARG2,ARG3,ARG4, \ 109 ARG5,ARG6);} 110 #define EI_TRACE_CONN7(NAME,FORMAT,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6,ARG7) \ 111 {if (ei_tracelevel >= 3) ei_trace_printf(NAME,1,FORMAT,ARG1,ARG2,ARG3,ARG4, \ 112 ARG5,ARG6,ARG7);} 113 114 #define EI_TRACE_COMM0(NAME,FORMAT) \ 115 {if (ei_tracelevel >= 4) ei_trace_printf(NAME,1,FORMAT);} 116 #define EI_TRACE_COMM1(NAME,FORMAT,ARG1) \ 117 {if (ei_tracelevel >= 4) ei_trace_printf(NAME,1,FORMAT,ARG1);} 118 #define EI_TRACE_COMM2(NAME,FORMAT,ARG1,ARG2) \ 119 {if (ei_tracelevel >= 4) ei_trace_printf(NAME,1,FORMAT,ARG1,ARG2);} 120 #define EI_TRACE_COMM3(NAME,FORMAT,ARG1,ARG2,ARG3) \ 121 {if (ei_tracelevel >= 4) ei_trace_printf(NAME,1,FORMAT,ARG1,ARG2,ARG3);} 122 #define EI_TRACE_COMM4(NAME,FORMAT,ARG1,ARG2,ARG3,ARG4) \ 123 {if (ei_tracelevel >= 4) ei_trace_printf(NAME,1,FORMAT,ARG1,ARG2,ARG3,ARG4);} 124 #define EI_TRACE_COMM5(NAME,FORMAT,ARG1,ARG2,ARG3,ARG4,ARG5) \ 125 {if (ei_tracelevel >= 4) ei_trace_printf(NAME,1,FORMAT,ARG1,ARG2,ARG3,ARG4, \ 126 ARG5);} 127 #define EI_TRACE_COMM6(NAME,FORMAT,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6) \ 128 {if (ei_tracelevel >= 4) ei_trace_printf(NAME,1,FORMAT,ARG1,ARG2,ARG3,ARG4, \ 129 ARG5,ARG6);} 130 #define EI_TRACE_COMM7(NAME,FORMAT,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6,ARG7) \ 131 {if (ei_tracelevel >= 4) ei_trace_printf(NAME,1,FORMAT,ARG1,ARG2,ARG3,ARG4, \ 132 ARG5,ARG6,ARG7);} 133 134 #define EI_TRACE0(NAME,FORMAT) \ 135 {if (ei_tracelevel >= 5) ei_trace_printf(NAME,1,FORMAT);} 136 #define EI_TRACE1(NAME,FORMAT,ARG1) \ 137 {if (ei_tracelevel >= 5) ei_trace_printf(NAME,1,FORMAT,ARG1);} 138 #define EI_TRACE2(NAME,FORMAT,ARG1,ARG2) \ 139 {if (ei_tracelevel >= 5) ei_trace_printf(NAME,1,FORMAT,ARG1,ARG2);} 140 #define EI_TRACE3(NAME,FORMAT,ARG1,ARG2,ARG3) \ 141 {if (ei_tracelevel >= 5) ei_trace_printf(NAME,1,FORMAT,ARG1,ARG2,ARG3);} 142 #define EI_TRACE4(NAME,FORMAT,ARG1,ARG2,ARG3,ARG4) \ 143 {if (ei_tracelevel >= 5) ei_trace_printf(NAME,1,FORMAT,ARG1,ARG2,ARG3,ARG4);} 144 #define EI_TRACE5(NAME,FORMAT,ARG1,ARG2,ARG3,ARG4,ARG5) \ 145 {if (ei_tracelevel >= 5) ei_trace_printf(NAME,1,FORMAT,ARG1,ARG2,ARG3,ARG4, \ 146 ARG5);} 147 #define EI_TRACE6(NAME,FORMAT,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6) \ 148 {if (ei_tracelevel >= 5) ei_trace_printf(NAME,1,FORMAT,ARG1,ARG2,ARG3,ARG4, \ 149 ARG5,ARG6);} 150 #define EI_TRACE7(NAME,FORMAT,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6,ARG7) \ 151 {if (ei_tracelevel >= 5) ei_trace_printf(NAME,1,FORMAT,ARG1,ARG2,ARG3,ARG4, \ 152 ARG5,ARG6,ARG7);} 153 154 extern int ei_tracelevel; 155 156 int ei_init_connect(void); 157 158 void ei_trace_printf(const char *name, int level, const char *format, ...); 159 160 int ei_internal_use_21_bitstr_expfun(void); 161 162 int ei_get_cbs_ctx__(ei_socket_callbacks **cbs, void **ctx, int fd); 163 164 #endif /* _EI_INTERNAL_H */ 165