#include "log.h" #include "log_colored.h" #include "server.h" #include "server_ssh.h" #ifdef HAVE_CONFIG_H #include "config.h" #endif int main(int argc, char *argv[]) { const size_t srv_siz = 3; const char *ssh_ports[srv_siz]; server_ctx srv[srv_siz]; struct addrinfo *netifs = NULL; int epoll_fd; (void)argc; (void)argv; LOG_SET_FUNCS_VA(LOG_COLORED_FUNCS); N("%s (C) 2018 Toni Uhlig (%s)", PACKAGE_STRING, PACKAGE_BUGREPORT); memset(&srv[0], 0, sizeof(srv)); ssh_ports[0] = "2222"; ssh_ports[1] = "2223"; ssh_ports[2] = "22050"; for (size_t i = 0; i < srv_siz; ++i) { D("Initialising redirector service on port %s", ssh_ports[i]); ABORT_ON_FATAL( server_init_ctx(&srv[i], ssh_init_cb), "Server initialisation" ); server_validate_ctx(&srv[i]); GAI_ABORT_ON_FATAL( socket_init_in(NULL, ssh_ports[i], &netifs), "Socket initialisation" ); ABORT_ON_FATAL( socket_bind_in(&srv[i].sock, netifs), "Socket bind" ); ABORT_ON_FATAL( socket_listen_in(&srv[i].sock), "Socket listen" ); ABORT_ON_FATAL( srv[i].server_cbs.on_listen(&srv[i].server_dat), "Socket on listen callback" ); } D2("%s", "Server epoll setup"); epoll_fd = server_setup_epoll( &srv[0], srv_siz ); D2("epoll_fd: %d", epoll_fd); ABORT_ON_FATAL( epoll_fd < 0, "Server epoll setup" ); N("%s", "Server epoll mainloop"); ABORT_ON_FATAL( server_mainloop_epoll( epoll_fd, &srv[0], srv_siz ), "Server epoll mainloop" ); return 0; }