#include #include #include #include #include #include "configfile.h" #include "connection.h" #include "event.h" #include "logging.h" #include "tcpsocket.h" #include "sockaddr.h" static int listen_init(const char *value, void *privdata) { struct sockaddr_in addr; if (parse_sockaddr(value, &addr) == -1) { log_print(LOG_WARN, "invalid listen addr: '%s'", value); return -1; } int sock = tcp_listen(&addr); if (sock < 0) return -1; event_add_readfd(NULL, sock, listen_handler, privdata); log_print(LOG_INFO, "listen on %s", get_sockaddr_buf(&addr)); return 0; } int main(int argc, char *argv[]) { if (config_parse("telnetproxy.conf") == -1) return -1; int cnt = config_get_strings("global", "listen", listen_init, client_handler); if (cnt <= 0) { log_print(LOG_ERROR, "no listen sockets defined!"); return -1; } cnt = config_get_strings("global", "admin_listen", listen_init, admin_handler); if (cnt <= 0) { log_print(LOG_ERROR, "no admin_listen sockets defined!"); return -1; } event_loop(); return 0; }