diff --git a/src/sexpots/sexpots.c b/src/sexpots/sexpots.c index 2628d3dc3ff58892623c8deebaac2f41bd08d6cb..c8ca0f27587209c4f92335ad4f0da767eb07761b 100644 --- a/src/sexpots/sexpots.c +++ b/src/sexpots/sexpots.c @@ -56,6 +56,8 @@ char mdm_cid[INI_MAX_VALUE_LEN] = "AT+VCID=1"; char mdm_cleanup[INI_MAX_VALUE_LEN] = "ATS0=0"; char mdm_answer[INI_MAX_VALUE_LEN] = "ATA"; char mdm_ring[INI_MAX_VALUE_LEN] = "RING"; +int mdm_ringcount = 1; +int mdm_ringinterval = 6000; BOOL mdm_null=FALSE; BOOL mdm_manswer=FALSE; /* Manual Answer */ @@ -767,6 +769,9 @@ BOOL wait_for_call(COM_HANDLE com_handle) char str[128]; char* p; time_t start=time(NULL); + msclock_t now; + msclock_t lastring=0; + int ring_count=0; ZERO_VAR(cid_name); ZERO_VAR(cid_number); @@ -833,9 +838,15 @@ BOOL wait_for_call(COM_HANDLE com_handle) ZERO_VAR(cid_number); } else if(mdm_ring[0] && strcmp(p,mdm_ring)==0 && mdm_manswer && mdm_answer[0]) { - if(!modem_send(com_handle, mdm_answer)) { - lprintf(LOG_ERR,"ERROR %u sending modem command (%s) on %s" - ,COM_ERROR_VALUE, mdm_answer, com_dev); + now = msclock(); + if(now < lastring || now - lastring > mdm_ringinterval) + ring_count = 0; + lastring = now; + if(++ring_count >= mdm_ringcount) { + if(!modem_send(com_handle, mdm_answer)) { + lprintf(LOG_ERR,"ERROR %u sending modem command (%s) on %s" + ,COM_ERROR_VALUE, mdm_answer, com_dev); + } } } } @@ -1421,6 +1432,8 @@ void parse_ini_file(const char* ini_fname) mdm_timeout = iniGetInteger(ini, section, "Timeout", mdm_timeout); mdm_reinit = iniGetInteger(ini, section, "ReInit", mdm_reinit); mdm_cmdretry = iniGetInteger(ini, section, "CmdRetry", mdm_cmdretry); + mdm_ringcount = iniGetInteger(ini, section, "RingCount", mdm_ringcount); + mdm_ringinterval= iniGetInteger(ini, section, "RingInterval", mdm_ringinterval); mdm_manswer = iniGetBool(ini,section,"ManualAnswer", mdm_manswer); /* [TCP] Section */