FreeCalypso > hg > themwi-system-sw
comparison sip-in/main.c @ 112:6aa63cf4620a
sip-in call clearing: select timeout implemented
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Wed, 28 Sep 2022 18:59:55 -0800 |
| parents | 7a4d4b8d5f04 |
| children |
comparison
equal
deleted
inserted
replaced
| 111:7a4d4b8d5f04 | 112:6aa63cf4620a |
|---|---|
| 31 | 31 |
| 32 main(argc, argv) | 32 main(argc, argv) |
| 33 char **argv; | 33 char **argv; |
| 34 { | 34 { |
| 35 fd_set fds; | 35 fd_set fds; |
| 36 int rc, need_retrans; | 36 int rc, need_retrans, dead_sip_flag; |
| 37 struct timeval timeout; | 37 struct timeval timeout; |
| 38 time_t dead_sip_time; | |
| 38 | 39 |
| 39 openlog("themwi-sip-in", 0, LOG_LOCAL5); | 40 openlog("themwi-sip-in", 0, LOG_LOCAL5); |
| 40 read_config_file(); | 41 read_config_file(); |
| 41 if (read_number_db() < 0) { | 42 if (read_number_db() < 0) { |
| 42 fprintf(stderr, "error reading number database\n"); | 43 fprintf(stderr, "error reading number database\n"); |
| 58 FD_SET(sip_socket, &fds); | 59 FD_SET(sip_socket, &fds); |
| 59 if (gsm_is_connected) | 60 if (gsm_is_connected) |
| 60 FD_SET(gsm_socket, &fds); | 61 FD_SET(gsm_socket, &fds); |
| 61 if (mgw_is_connected) | 62 if (mgw_is_connected) |
| 62 FD_SET(mgw_socket, &fds); | 63 FD_SET(mgw_socket, &fds); |
| 63 need_retrans = 0; | 64 need_retrans = dead_sip_flag = 0; |
| 64 scan_call_list_for_timeouts(&need_retrans); | 65 scan_call_list_for_timeouts(&need_retrans, &dead_sip_flag, |
| 66 &dead_sip_time); | |
| 65 if (need_retrans) { | 67 if (need_retrans) { |
| 66 timeout.tv_sec = cfg_retrans_timeout / 1000; | 68 timeout.tv_sec = cfg_retrans_timeout / 1000; |
| 67 timeout.tv_usec = (cfg_retrans_timeout % 1000) * 1000; | 69 timeout.tv_usec = (cfg_retrans_timeout % 1000) * 1000; |
| 70 rc = select(max_fd+1, &fds, 0, 0, &timeout); | |
| 71 } else if (dead_sip_flag) { | |
| 72 if (cur_event_time.tv_sec >= dead_sip_time) | |
| 73 timeout.tv_sec = 0; | |
| 74 else | |
| 75 timeout.tv_sec = | |
| 76 dead_sip_time - cur_event_time.tv_sec; | |
| 77 timeout.tv_usec = 0; | |
| 68 rc = select(max_fd+1, &fds, 0, 0, &timeout); | 78 rc = select(max_fd+1, &fds, 0, 0, &timeout); |
| 69 } else | 79 } else |
| 70 rc = select(max_fd+1, &fds, 0, 0, 0); | 80 rc = select(max_fd+1, &fds, 0, 0, 0); |
| 71 if (rc < 0) { | 81 if (rc < 0) { |
| 72 if (errno == EINTR) | 82 if (errno == EINTR) |
