Added handler for case where remote switch misses our CONNECT message
Fix for sending wrong address for sng_isdn_retrieve_facility_caller_name Minor fixes
This commit is contained in:
parent
6b77b4ec07
commit
a329bf12b7
|
@ -131,14 +131,12 @@ void sngisdn_process_con_ind (sngisdn_event_data_t *sngisdn_event)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (conEvnt->facilityStr.eh.pres) {
|
if (signal_data->facility == SNGISDN_OPT_TRUE && conEvnt->facilityStr.eh.pres) {
|
||||||
/* Verify whether the Caller Name will come in a subsequent FACILITY message */
|
/* Verify whether the Caller Name will come in a subsequent FACILITY message */
|
||||||
uint16_t ret_val;
|
uint16_t ret_val;
|
||||||
uint8_t facility_str[255];
|
|
||||||
char retrieved_str[255];
|
char retrieved_str[255];
|
||||||
memcpy(facility_str, (uint8_t*)&conEvnt->facilityStr.facilityStr.val, conEvnt->facilityStr.facilityStr.len);
|
|
||||||
|
ret_val = sng_isdn_retrieve_facility_caller_name(conEvnt->facilityStr.facilityStr.val, conEvnt->facilityStr.facilityStr.len, retrieved_str);
|
||||||
ret_val = sng_isdn_retrieve_facility_caller_name(facility_str, conEvnt->facilityStr.facilityStr.len, retrieved_str);
|
|
||||||
/*
|
/*
|
||||||
return values for "sng_isdn_retrieve_facility_information_following":
|
return values for "sng_isdn_retrieve_facility_information_following":
|
||||||
If there will be no information following, or fails to decode IE, returns -1
|
If there will be no information following, or fails to decode IE, returns -1
|
||||||
|
@ -702,14 +700,23 @@ void sngisdn_process_fac_ind (sngisdn_event_data_t *sngisdn_event)
|
||||||
case FTDM_CHANNEL_STATE_GET_CALLERID:
|
case FTDM_CHANNEL_STATE_GET_CALLERID:
|
||||||
/* Update the caller ID Name */
|
/* Update the caller ID Name */
|
||||||
if (facEvnt->facElmt.facStr.pres) {
|
if (facEvnt->facElmt.facStr.pres) {
|
||||||
uint8_t facility_str[255];
|
|
||||||
memcpy(facility_str, (uint8_t*)&facEvnt->facElmt.facStr.val, facEvnt->facElmt.facStr.len);
|
|
||||||
char retrieved_str[255];
|
char retrieved_str[255];
|
||||||
if (sng_isdn_retrieve_facility_caller_name(facility_str, facEvnt->facElmt.facStr.len, retrieved_str) != FTDM_SUCCESS) {
|
|
||||||
|
/* return values for "sng_isdn_retrieve_facility_information_following":
|
||||||
|
If there will be no information following, or fails to decode IE, returns -1
|
||||||
|
If there will be no information following, but current FACILITY IE contains a caller name, returns 0
|
||||||
|
If there will be information following, returns 1
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (sng_isdn_retrieve_facility_caller_name(&facEvnt->facElmt.facStr.val[2], facEvnt->facElmt.facStr.len, retrieved_str) == 0) {
|
||||||
|
strcpy(ftdmchan->caller_data.cid_name, retrieved_str);
|
||||||
|
} else {
|
||||||
ftdm_log_chan_msg(ftdmchan, FTDM_LOG_WARNING, "Failed to retrieve Caller Name from Facility IE\n");
|
ftdm_log_chan_msg(ftdmchan, FTDM_LOG_WARNING, "Failed to retrieve Caller Name from Facility IE\n");
|
||||||
}
|
}
|
||||||
/* Cancel facility timeout */
|
if (signal_data->facility_timeout) {
|
||||||
ftdm_sched_cancel_timer(signal_data->sched, &sngisdn_info->timers[SNGISDN_TIMER_FACILITY]);
|
/* Cancel facility timeout */
|
||||||
|
ftdm_sched_cancel_timer(signal_data->sched, &sngisdn_info->timers[SNGISDN_TIMER_FACILITY]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_RING);
|
ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_RING);
|
||||||
|
@ -884,6 +891,22 @@ void sngisdn_process_sta_cfm (sngisdn_event_data_t *sngisdn_event)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case 9: /* Remote switch is in "Incoming call proceeding" state */
|
||||||
|
switch (ftdmchan->state) {
|
||||||
|
case FTDM_CHANNEL_STATE_PROGRESS:
|
||||||
|
case FTDM_CHANNEL_STATE_PROGRESS_MEDIA:
|
||||||
|
case FTDM_CHANNEL_STATE_GET_CALLERID:
|
||||||
|
/* Do nothing */
|
||||||
|
break;
|
||||||
|
case FTDM_CHANNEL_STATE_UP:
|
||||||
|
/* Remote switch missed our CONNECT message, re-send */
|
||||||
|
ftdm_sched_timer(((sngisdn_span_data_t*)ftdmchan->span->signal_data)->sched, "delayed_connect", 1, sngisdn_delayed_connect, (void*) sngisdn_info, NULL);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ftdm_log_chan(ftdmchan, FTDM_LOG_CRIT, "Don't know how to handle incompatible state. remote call state:%d our state:%s\n", call_state, ftdm_channel_state2str(ftdmchan->state));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case 10: /* Remote switch is in active state */
|
case 10: /* Remote switch is in active state */
|
||||||
switch (ftdmchan->state) {
|
switch (ftdmchan->state) {
|
||||||
case FTDM_CHANNEL_STATE_UP:
|
case FTDM_CHANNEL_STATE_UP:
|
||||||
|
@ -899,17 +922,6 @@ void sngisdn_process_sta_cfm (sngisdn_event_data_t *sngisdn_event)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 9:
|
|
||||||
switch (ftdmchan->state) {
|
|
||||||
case FTDM_CHANNEL_STATE_PROGRESS:
|
|
||||||
case FTDM_CHANNEL_STATE_PROGRESS_MEDIA:
|
|
||||||
/* Do nothing */
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
ftdm_log_chan(ftdmchan, FTDM_LOG_CRIT, "Don't know how to handle incompatible state. remote call state:%d our state:%s\n", call_state, ftdm_channel_state2str(ftdmchan->state));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 22:
|
case 22:
|
||||||
switch (ftdmchan->state) {
|
switch (ftdmchan->state) {
|
||||||
case FTDM_CHANNEL_STATE_UP:
|
case FTDM_CHANNEL_STATE_UP:
|
||||||
|
|
Loading…
Reference in New Issue