FreeCalypso > hg > themwi-system-sw
diff sip-in/main.c @ 47:62f39c7cee15
themwi-sip-in skeleton started
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Tue, 06 Sep 2022 20:33:56 -0800 |
parents | |
children | 7005d5c535e8 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sip-in/main.c Tue Sep 06 20:33:56 2022 -0800 @@ -0,0 +1,72 @@ +/* + * Main module for themwi-sip-in. + */ + +#include <sys/types.h> +#include <sys/time.h> +#include <sys/errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <strings.h> +#include <signal.h> +#include <syslog.h> +#include <unistd.h> + +extern int mgw_socket, sip_socket; + +static int max_fd; + +struct timeval cur_event_time; + +update_max_fd(newfd) +{ + if (newfd > max_fd) + max_fd = newfd; +} + +main(argc, argv) + char **argv; +{ + fd_set fds; + int rc; + + openlog("themwi-sip-in", 0, LOG_LOCAL5); + read_config_file(); + if (read_number_db() < 0) { + fprintf(stderr, "error reading number database\n"); + exit(1); + } + if (open_tmgw_socket() < 0) { + fprintf(stderr, "error connecting to themwi-mgw socket\n"); + exit(1); + } + if (open_sip_udp_socket() < 0) { + fprintf(stderr, "error opening SIP UDP socket\n"); + exit(1); + } + if (argv[1]) { + rc = open_sip_log_file(argv[1]); + if (rc < 0) + exit(1); /* error msg already printed */ + } + signal(SIGPIPE, SIG_IGN); + /* main select loop */ + for (;;) { + FD_ZERO(&fds); + FD_SET(mgw_socket, &fds); + FD_SET(sip_socket, &fds); + rc = select(max_fd+1, &fds, 0, 0, 0); + if (rc < 0) { + if (errno == EINTR) + continue; + syslog(LOG_CRIT, "select: %m"); + exit(1); + } + gettimeofday(&cur_event_time, 0); + if (FD_ISSET(mgw_socket, &fds)) + mgw_socket_select(); + if (FD_ISSET(sip_socket, &fds)) + sip_socket_select(); + } +}