From ac58d1a47074cf0dd602093e0828d125822f85ad Mon Sep 17 00:00:00 2001 From: Kim Woelders Date: Sun, 12 Feb 2023 19:04:54 +0100 Subject: [PATCH] ttynvt: Move socket function to seperate file --- src/Makefile.am | 4 +++- src/nvt_socket.c | 49 ++++++++++++++++++++++++++++++++++++++++++++++++ src/nvt_socket.h | 9 +++++++++ src/ttynvt.c | 49 ++++-------------------------------------------- 4 files changed, 65 insertions(+), 46 deletions(-) create mode 100644 src/nvt_socket.c create mode 100644 src/nvt_socket.h diff --git a/src/Makefile.am b/src/Makefile.am index d38a059..b152449 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -2,7 +2,9 @@ bin_PROGRAMS = ttynvt ttynvt_SOURCES = \ - ttynvt.c nvt_log.c nvt_log.h \ + ttynvt.c \ + nvt_log.c nvt_log.h \ + nvt_socket.c nvt_socket.h \ telnet_basic.c telnet_rfc2217.c telnet.h telnet_param.h ttynvt_CPPFLAGS = -I$(top_builddir) $(FUSE_CFLAGS) $(CFLAGS_WARN) diff --git a/src/nvt_socket.c b/src/nvt_socket.c new file mode 100644 index 0000000..bace895 --- /dev/null +++ b/src/nvt_socket.c @@ -0,0 +1,49 @@ +/* + * Socket interface API + */ +#include /* getaddrinfo() */ +#include +#include +#include + +#include "nvt_log.h" +#include "nvt_socket.h" + + +int socket_create_client(const char *host, unsigned int port) +{ + struct sockaddr_in serveraddr; + struct hostent *server; + int sockfd, err; + + sockfd = socket(AF_INET, SOCK_STREAM, 0); + if (sockfd < 0) + { + nvt_log(LOG_ERR, "Socket open failed: %m\n"); + return sockfd; + } + + server = gethostbyname(host); + if (server == NULL) + { + nvt_log(LOG_ERR, "Cannot resolve host name: %m\n"); + close(sockfd); + return -1; + } + + bzero((char *)&serveraddr, sizeof(serveraddr)); + serveraddr.sin_family = AF_INET; + bcopy((char *)server->h_addr, (char *)&serveraddr.sin_addr.s_addr, + server->h_length); + serveraddr.sin_port = htons(port); + + err = connect(sockfd, (struct sockaddr *)&serveraddr, sizeof(serveraddr)); + if (err < 0) + { + nvt_log(LOG_ERR, "Failed to connect to: %s:%u: %m\n", host, port); + close(sockfd); + return -1; + } + + return sockfd; +} diff --git a/src/nvt_socket.h b/src/nvt_socket.h new file mode 100644 index 0000000..53ae7a4 --- /dev/null +++ b/src/nvt_socket.h @@ -0,0 +1,9 @@ +/* + * Socket functions + */ +#ifndef NVT_SOCKET_H +#define NVT_SOCKET_H + +int socket_create_client(const char *host, unsigned int port); + +#endif /* NVT_SOCKET_H */ diff --git a/src/ttynvt.c b/src/ttynvt.c index 8da2cd4..52437e2 100644 --- a/src/ttynvt.c +++ b/src/ttynvt.c @@ -7,7 +7,6 @@ #include #include #include -#include #include #include #include @@ -21,13 +20,12 @@ #include #include #include -#include #include #include #include -#include #include "nvt_log.h" +#include "nvt_socket.h" #include "telnet.h" #define NET_BUF_SIZE 1024 @@ -293,44 +291,6 @@ static void *_read_net(void *arg) return 0; } -static int _srv_connect(const char *host, unsigned int port) -{ - struct sockaddr_in serveraddr; - struct hostent *server; - int sockfd, err; - - sockfd = socket(AF_INET, SOCK_STREAM, 0); - if (sockfd < 0) - { - nvt_log(LOG_ERR, "Socket open failed: %m\n"); - return sockfd; - } - - server = gethostbyname(host); - if (server == NULL) - { - nvt_log(LOG_ERR, "Cannot resolve host name: %m\n"); - close(sockfd); - return -1; - } - - bzero((char *)&serveraddr, sizeof(serveraddr)); - serveraddr.sin_family = AF_INET; - bcopy((char *)server->h_addr, (char *)&serveraddr.sin_addr.s_addr, - server->h_length); - serveraddr.sin_port = htons(port); - - err = connect(sockfd, (struct sockaddr *)&serveraddr, sizeof(serveraddr)); - if (err < 0) - { - nvt_log(LOG_ERR, "Failed to connect to: %s:%u: %m\n", host, port); - close(sockfd); - return -1; - } - - return sockfd; -} - static int _srv_write(void *cctx, const void *buf, int len) { ttynvt_t *tty = cctx; @@ -450,7 +410,6 @@ static void ttynvt_open(fuse_req_t req, struct fuse_file_info *info) ttynvt_t *tty; char *slave_name; struct termios ios; - int sockfd; int fd; int res; int n; @@ -467,14 +426,14 @@ static void ttynvt_open(fuse_req_t req, struct fuse_file_info *info) return; } - sockfd = _srv_connect(ttynvt_param.host, ttynvt_param.port); - if (sockfd < 0) + fd = socket_create_client(ttynvt_param.host, ttynvt_param.port); + if (fd < 0) { errno = EHOSTUNREACH; goto open_err; } - tty->fds[FD_NET].fd = sockfd; + tty->fds[FD_NET].fd = fd; tty->fds[FD_NET].events = POLLIN; tty->net_cnt = 0;