Commit 406d745d69a69d550d5ec8478f06a7ed2cebdc20
1 parent
f1526cdc
Exists in
master
and in
2 other branches
Enabling get peer and name methods required for custom audit plugin.
Showing
4 changed files
with
32 additions
and
1 deletions
Show diff stats
src/include/networking.h
... | ... | @@ -142,7 +142,7 @@ |
142 | 142 | /// @retval 0 The session is offline. |
143 | 143 | int (*is_connected)(const H3270 *hSession); |
144 | 144 | |
145 | - /// @brief get socket name. | |
145 | + /// @brief Get socket name. | |
146 | 146 | /// |
147 | 147 | /// @return On success, zero is returned. On error, -1 is returned, and errno is set appropriately. |
148 | 148 | /// |
... | ... | @@ -150,6 +150,14 @@ |
150 | 150 | /// @retval -1 Error (errno is set). |
151 | 151 | int (*getsockname)(const H3270 *hSession, struct sockaddr *addr, socklen_t *addrlen); |
152 | 152 | |
153 | + /// @brief Get name of connected peer socket. | |
154 | + /// | |
155 | + /// @return On success, zero is returned. On error, -1 is returned, and errno is set appropriately. | |
156 | + /// | |
157 | + /// @retval 0 Success. | |
158 | + /// @retval -1 Error (errno is set). | |
159 | + int (*getpeername)(const H3270 *hSession, struct sockaddr *addr, socklen_t *addrlen); | |
160 | + | |
153 | 161 | /// @brief Set socket options. |
154 | 162 | int (*setsockopt)(H3270 *hSession, int level, int optname, const void *optval, size_t optlen); |
155 | 163 | ... | ... |
src/network_modules/default/main.c
... | ... | @@ -92,6 +92,10 @@ static int unsecure_network_getsockname(const H3270 *hSession, struct sockaddr * |
92 | 92 | return getsockname(hSession->network.context->sock, addr, addrlen); |
93 | 93 | } |
94 | 94 | |
95 | +static int unsecure_network_getpeername(const H3270 *hSession, struct sockaddr *addr, socklen_t *addrlen) { | |
96 | + return getpeername(hSession->network.context->sock, addr, addrlen); | |
97 | +} | |
98 | + | |
95 | 99 | static void * unsecure_network_add_poll(H3270 *hSession, LIB3270_IO_FLAG flag, void(*call)(H3270 *, int, LIB3270_IO_FLAG, void *), void *userdata) { |
96 | 100 | return lib3270_add_poll_fd(hSession,hSession->network.context->sock,flag,call,userdata); |
97 | 101 | } |
... | ... | @@ -166,6 +170,7 @@ void lib3270_set_default_network_module(H3270 *hSession) { |
166 | 170 | .non_blocking = unsecure_network_non_blocking, |
167 | 171 | .is_connected = unsecure_network_is_connected, |
168 | 172 | .getsockname = unsecure_network_getsockname, |
173 | + .getpeername = unsecure_network_getpeername, | |
169 | 174 | .setsockopt = unsecure_network_setsockopt, |
170 | 175 | .getsockopt = unsecure_network_getsockopt, |
171 | 176 | .reset = unsecure_network_reset | ... | ... |
src/network_modules/openssl/main.c
... | ... | @@ -186,6 +186,10 @@ static int openssl_network_getsockname(const H3270 *hSession, struct sockaddr *a |
186 | 186 | return getsockname(hSession->network.context->sock, addr, addrlen); |
187 | 187 | } |
188 | 188 | |
189 | +static int openssl_network_getpeername(const H3270 *hSession, struct sockaddr *addr, socklen_t *addrlen) { | |
190 | + return getpeername(hSession->network.context->sock, addr, addrlen); | |
191 | +} | |
192 | + | |
189 | 193 | static void * openssl_network_add_poll(H3270 *hSession, LIB3270_IO_FLAG flag, void(*call)(H3270 *, int, LIB3270_IO_FLAG, void *), void *userdata) { |
190 | 194 | return lib3270_add_poll_fd(hSession,hSession->network.context->sock,flag,call,userdata); |
191 | 195 | } |
... | ... | @@ -346,6 +350,7 @@ void lib3270_set_libssl_network_module(H3270 *hSession) { |
346 | 350 | .non_blocking = openssl_network_non_blocking, |
347 | 351 | .is_connected = openssl_network_is_connected, |
348 | 352 | .getsockname = openssl_network_getsockname, |
353 | + .getpeername = openssl_network_getpeername, | |
349 | 354 | .setsockopt = openssl_network_setsockopt, |
350 | 355 | .getsockopt = openssl_network_getsockopt, |
351 | 356 | .getcert = openssl_network_getcert, | ... | ... |
src/network_modules/tools.c
... | ... | @@ -263,3 +263,16 @@ int lib3270_socket_set_non_blocking(H3270 *hSession, int sock, const unsigned ch |
263 | 263 | |
264 | 264 | return EINVAL; |
265 | 265 | } |
266 | + | |
267 | + LIB3270_EXPORT int lib3270_getpeername(H3270 *hSession, struct sockaddr *addr, socklen_t *addrlen) | |
268 | + { | |
269 | + FAIL_IF_NOT_ONLINE(hSession); | |
270 | + return hSession->network.module->getpeername(hSession, addr, addrlen); | |
271 | + } | |
272 | + | |
273 | + LIB3270_EXPORT int lib3270_getsockname(H3270 *hSession, struct sockaddr *addr, socklen_t *addrlen) | |
274 | + { | |
275 | + FAIL_IF_NOT_ONLINE(hSession); | |
276 | + return hSession->network.module->getsockname(hSession, addr, addrlen); | |
277 | + } | |
278 | + | ... | ... |