diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_boost/ftmod_sangoma_boost.c b/libs/freetdm/src/ftmod/ftmod_sangoma_boost/ftmod_sangoma_boost.c index d5a07210ae..b102a74142 100644 --- a/libs/freetdm/src/ftmod/ftmod_sangoma_boost/ftmod_sangoma_boost.c +++ b/libs/freetdm/src/ftmod/ftmod_sangoma_boost/ftmod_sangoma_boost.c @@ -1400,8 +1400,14 @@ static __inline__ void state_advance(ftdm_channel_t *ftdmchan) BOOST_CHAN(ftdmchan), 0, SIGBOOST_EVENT_CALL_START_ACK, - 0, SIGBOOST_PROGRESS_MEDIA); + 0, 0); } + sangomabc_exec_command(mcon, + BOOST_SPAN(ftdmchan), + BOOST_CHAN(ftdmchan), + 0, + SIGBOOST_EVENT_CALL_PROGRESS, + 0, SIGBOOST_PROGRESS_MEDIA); } } break; @@ -1420,7 +1426,7 @@ static __inline__ void state_advance(ftdm_channel_t *ftdmchan) BOOST_CHAN(ftdmchan), 0, SIGBOOST_EVENT_CALL_START_ACK, - 0, SIGBOOST_PROGRESS_RING); + 0, 0); } } } diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_boost/sangoma_boost_client.c b/libs/freetdm/src/ftmod/ftmod_sangoma_boost/sangoma_boost_client.c index 3a6bd48fd4..d33415c809 100644 --- a/libs/freetdm/src/ftmod/ftmod_sangoma_boost/sangoma_boost_client.c +++ b/libs/freetdm/src/ftmod/ftmod_sangoma_boost/sangoma_boost_client.c @@ -223,12 +223,20 @@ int sangomabc_connection_open(sangomabc_connection_t *mcon, char *local_ip, int int sangomabc_exec_command(sangomabc_connection_t *mcon, int span, int chan, int id, int cmd, int cause, int flags) { - sangomabc_short_event_t oevent; - int retry = 5; + sangomabc_event_t *oevent; + sangomabc_short_event_t sevent; + sangomabc_event_t fevent; + int retry = 5; - sangomabc_event_init(&oevent, cmd, chan, span); - oevent.release_cause = (uint8_t)cause; - oevent.flags = flags; + if (boost_full_event(cmd)) { + sangomabc_event_init((void *)&fevent, cmd, chan, span); + oevent = &fevent; + } else { + sangomabc_event_init(&sevent, cmd, chan, span); + sevent.release_cause = (uint8_t)cause; + oevent = (sangomabc_event_t *)&sevent; + } + oevent->flags = flags; if (cmd == SIGBOOST_EVENT_SYSTEM_RESTART || cmd == SIGBOOST_EVENT_SYSTEM_RESTART_ACK) { mcon->rxseq_reset = 1; @@ -237,21 +245,21 @@ int sangomabc_exec_command(sangomabc_connection_t *mcon, int span, int chan, int mcon->txwindow = 0; } - if (id >= 0) { - oevent.call_setup_id = (uint16_t)id; - } + if (id >= 0) { + oevent->call_setup_id = (uint16_t)id; + } - while (sangomabc_connection_write(mcon, (sangomabc_event_t*)&oevent) <= 0) { - if (--retry <= 0) { - ftdm_log(FTDM_LOG_CRIT, "Failed to tx on boost socket: %s\n", strerror(errno)); - return -1; - } else { - ftdm_log(FTDM_LOG_WARNING, "Failed to tx on boost socket: %s :retry %i\n", strerror(errno), retry); - ftdm_sleep(1); - } - } + while (sangomabc_connection_write(mcon, (sangomabc_event_t*)oevent) <= 0) { + if (--retry <= 0) { + ftdm_log(FTDM_LOG_CRIT, "Failed to tx on boost socket: %s\n", strerror(errno)); + return -1; + } else { + ftdm_log(FTDM_LOG_WARNING, "Failed to tx on boost socket: %s :retry %i\n", strerror(errno), retry); + ftdm_sleep(1); + } + } - return 0; + return 0; } @@ -540,7 +548,11 @@ void sangomabc_call_init(sangomabc_event_t *event, const char *calling, const ch void sangomabc_event_init(sangomabc_short_event_t *event, sangomabc_event_id_t event_id, int chan, int span) { - memset(event, 0, sizeof(sangomabc_short_event_t)); + if (boost_full_event(event_id)) { + memset(event, 0, sizeof(sangomabc_event_t)); + } else { + memset(event, 0, sizeof(sangomabc_short_event_t)); + } event->event_id = event_id; event->chan = (uint8_t)chan; event->span = (uint8_t)span;