FreeCalypso > hg > themwi-system-sw
diff 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 |
line wrap: on
line diff
--- a/sip-in/main.c Wed Sep 28 18:45:16 2022 -0800 +++ b/sip-in/main.c Wed Sep 28 18:59:55 2022 -0800 @@ -33,8 +33,9 @@ char **argv; { fd_set fds; - int rc, need_retrans; + int rc, need_retrans, dead_sip_flag; struct timeval timeout; + time_t dead_sip_time; openlog("themwi-sip-in", 0, LOG_LOCAL5); read_config_file(); @@ -60,12 +61,21 @@ FD_SET(gsm_socket, &fds); if (mgw_is_connected) FD_SET(mgw_socket, &fds); - need_retrans = 0; - scan_call_list_for_timeouts(&need_retrans); + need_retrans = dead_sip_flag = 0; + scan_call_list_for_timeouts(&need_retrans, &dead_sip_flag, + &dead_sip_time); if (need_retrans) { timeout.tv_sec = cfg_retrans_timeout / 1000; timeout.tv_usec = (cfg_retrans_timeout % 1000) * 1000; rc = select(max_fd+1, &fds, 0, 0, &timeout); + } else if (dead_sip_flag) { + if (cur_event_time.tv_sec >= dead_sip_time) + timeout.tv_sec = 0; + else + timeout.tv_sec = + dead_sip_time - cur_event_time.tv_sec; + timeout.tv_usec = 0; + rc = select(max_fd+1, &fds, 0, 0, &timeout); } else rc = select(max_fd+1, &fds, 0, 0, 0); if (rc < 0) {