FreeCalypso > hg > themwi-system-sw
comparison sip-in/main.c @ 107:372209628038
sip-in: handle themwi-mgw shutdown without terminating
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Tue, 27 Sep 2022 23:45:40 -0800 |
| parents | 709b78a4ebf0 |
| children | 7a4d4b8d5f04 |
comparison
equal
deleted
inserted
replaced
| 106:245dc4837b56 | 107:372209628038 |
|---|---|
| 13 #include <syslog.h> | 13 #include <syslog.h> |
| 14 #include <unistd.h> | 14 #include <unistd.h> |
| 15 | 15 |
| 16 extern unsigned cfg_retrans_timeout; | 16 extern unsigned cfg_retrans_timeout; |
| 17 | 17 |
| 18 extern int mgw_socket, sip_socket; | |
| 19 extern int gsm_socket, gsm_is_connected; | 18 extern int gsm_socket, gsm_is_connected; |
| 19 extern int mgw_socket, mgw_is_connected; | |
| 20 extern int sip_socket; | |
| 20 | 21 |
| 21 static int max_fd; | 22 static int max_fd; |
| 22 | 23 |
| 23 struct timeval cur_event_time; | 24 struct timeval cur_event_time; |
| 24 | 25 |
| 39 read_config_file(); | 40 read_config_file(); |
| 40 if (read_number_db() < 0) { | 41 if (read_number_db() < 0) { |
| 41 fprintf(stderr, "error reading number database\n"); | 42 fprintf(stderr, "error reading number database\n"); |
| 42 exit(1); | 43 exit(1); |
| 43 } | 44 } |
| 44 if (open_tmgw_socket() < 0) { | |
| 45 fprintf(stderr, "error connecting to themwi-mgw socket\n"); | |
| 46 exit(1); | |
| 47 } | |
| 48 if (open_sip_udp_socket() < 0) { | 45 if (open_sip_udp_socket() < 0) { |
| 49 fprintf(stderr, "error opening SIP UDP socket\n"); | 46 fprintf(stderr, "error opening SIP UDP socket\n"); |
| 50 exit(1); | 47 exit(1); |
| 51 } | 48 } |
| 52 if (argv[1]) { | 49 if (argv[1]) { |
| 56 } | 53 } |
| 57 signal(SIGPIPE, SIG_IGN); | 54 signal(SIGPIPE, SIG_IGN); |
| 58 /* main select loop */ | 55 /* main select loop */ |
| 59 for (;;) { | 56 for (;;) { |
| 60 FD_ZERO(&fds); | 57 FD_ZERO(&fds); |
| 61 FD_SET(mgw_socket, &fds); | |
| 62 FD_SET(sip_socket, &fds); | 58 FD_SET(sip_socket, &fds); |
| 63 if (gsm_is_connected) | 59 if (gsm_is_connected) |
| 64 FD_SET(gsm_socket, &fds); | 60 FD_SET(gsm_socket, &fds); |
| 61 if (mgw_is_connected) | |
| 62 FD_SET(mgw_socket, &fds); | |
| 65 need_retrans = 0; | 63 need_retrans = 0; |
| 66 scan_call_list_for_timeouts(&need_retrans); | 64 scan_call_list_for_timeouts(&need_retrans); |
| 67 if (need_retrans) { | 65 if (need_retrans) { |
| 68 timeout.tv_sec = cfg_retrans_timeout / 1000; | 66 timeout.tv_sec = cfg_retrans_timeout / 1000; |
| 69 timeout.tv_usec = (cfg_retrans_timeout % 1000) * 1000; | 67 timeout.tv_usec = (cfg_retrans_timeout % 1000) * 1000; |
| 81 run_periodic_retrans(); | 79 run_periodic_retrans(); |
| 82 continue; | 80 continue; |
| 83 } | 81 } |
| 84 if (gsm_is_connected && FD_ISSET(gsm_socket, &fds)) | 82 if (gsm_is_connected && FD_ISSET(gsm_socket, &fds)) |
| 85 gsm_socket_select(); | 83 gsm_socket_select(); |
| 84 if (mgw_is_connected && FD_ISSET(mgw_socket, &fds)) | |
| 85 mgw_socket_select(); | |
| 86 if (FD_ISSET(sip_socket, &fds)) | 86 if (FD_ISSET(sip_socket, &fds)) |
| 87 sip_socket_select(); | 87 sip_socket_select(); |
| 88 if (FD_ISSET(mgw_socket, &fds)) | |
| 89 mgw_socket_select(); | |
| 90 } | 88 } |
| 91 } | 89 } |
