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