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 | + | ... | ... |