|
|
|
@ -51,7 +51,7 @@ static double level_of(double *samples, int count) |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
static int send_patterns; /* send patterns towards fixed network */ |
|
|
|
|
static int connect_on_setup; /* send patterns towards fixed network */ |
|
|
|
|
static int release_on_disconnect; /* release towards mobile phone, if MNCC call disconnects, don't send disconnect tone */ |
|
|
|
|
|
|
|
|
|
/* stream patterns/announcements */ |
|
|
|
@ -353,7 +353,7 @@ static void process_timeout(struct timer *timer) |
|
|
|
|
|
|
|
|
|
int call_init(int _send_patterns, int _release_on_disconnect) |
|
|
|
|
{ |
|
|
|
|
send_patterns = _send_patterns; |
|
|
|
|
connect_on_setup = _send_patterns; |
|
|
|
|
release_on_disconnect = _release_on_disconnect; |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
@ -439,12 +439,18 @@ void call_up_alerting(int callref) |
|
|
|
|
|
|
|
|
|
PDEBUG(DCALL, DEBUG_INFO, "Call is alerting\n"); |
|
|
|
|
|
|
|
|
|
if (!send_patterns) |
|
|
|
|
if (!connect_on_setup) |
|
|
|
|
_indicate_alerting(callref); |
|
|
|
|
set_pattern_process(callref, PATTERN_RINGBACK); |
|
|
|
|
new_state_process(callref, PROCESS_ALERTING_RT); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* Transceiver indicates early audio */ |
|
|
|
|
void call_up_early(int callref) |
|
|
|
|
{ |
|
|
|
|
set_pattern_process(callref, PATTERN_NONE); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* Transceiver indicates answer. */ |
|
|
|
|
static void _indicate_answer(int callref, const char *connect_id) |
|
|
|
|
{ |
|
|
|
@ -477,7 +483,7 @@ void call_up_answer(int callref, const char *connect_id) |
|
|
|
|
|
|
|
|
|
PDEBUG(DCALL, DEBUG_INFO, "Call has been answered by '%s'\n", connect_id); |
|
|
|
|
|
|
|
|
|
if (!send_patterns) |
|
|
|
|
if (!connect_on_setup) |
|
|
|
|
_indicate_answer(callref, connect_id); |
|
|
|
|
set_pattern_process(callref, PATTERN_NONE); |
|
|
|
|
new_state_process(callref, PROCESS_CONNECT); |
|
|
|
@ -517,7 +523,7 @@ void call_up_release(int callref, int cause) |
|
|
|
|
if (process) { |
|
|
|
|
/* just keep MNCC connection if tones shall be sent.
|
|
|
|
|
* no tones while setting up / alerting the call. */ |
|
|
|
|
if (send_patterns |
|
|
|
|
if (connect_on_setup |
|
|
|
|
&& process->state != PROCESS_SETUP_RO |
|
|
|
|
&& process->state != PROCESS_ALERTING_RO) |
|
|
|
|
disconnect_process(callref, cause); |
|
|
|
@ -721,7 +727,7 @@ void mncc_down(uint8_t *buf, int length) |
|
|
|
|
rc = call_down_setup(callref, caller_id, caller_type, number); |
|
|
|
|
if (rc < 0) { |
|
|
|
|
PDEBUG(DCALL, DEBUG_NOTICE, "Call rejected, cause %d\n", -rc); |
|
|
|
|
if (send_patterns) { |
|
|
|
|
if (connect_on_setup) { |
|
|
|
|
PDEBUG(DCALL, DEBUG_DEBUG, "Early connecting after setup\n"); |
|
|
|
|
_indicate_answer(callref, number); |
|
|
|
|
} else { |
|
|
|
@ -732,7 +738,7 @@ void mncc_down(uint8_t *buf, int length) |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (send_patterns) { |
|
|
|
|
if (connect_on_setup) { |
|
|
|
|
PDEBUG(DCALL, DEBUG_DEBUG, "Early connecting after setup\n"); |
|
|
|
|
_indicate_answer(callref, number); |
|
|
|
|
break; |
|
|
|
|