mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-04-17 01:02:12 +00:00
Skinny: Milestone 3: Calls management: handle DTMF
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@16780 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
parent
847c3a49bb
commit
a68fef28be
@ -1404,6 +1404,8 @@ static switch_status_t channel_send_dtmf(switch_core_session_t *session, const s
|
|||||||
private_t *tech_pvt = switch_core_session_get_private(session);
|
private_t *tech_pvt = switch_core_session_get_private(session);
|
||||||
switch_assert(tech_pvt != NULL);
|
switch_assert(tech_pvt != NULL);
|
||||||
|
|
||||||
|
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "DTMF ON CALL %d [%c]\n", tech_pvt->call_id, dtmf->digit);
|
||||||
|
|
||||||
return SWITCH_STATUS_SUCCESS;
|
return SWITCH_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2925,6 +2927,42 @@ end:
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static switch_status_t skinny_handle_keypad_button_message(listener_t *listener, skinny_message_t *request)
|
||||||
|
{
|
||||||
|
skinny_check_data_length(request, sizeof(request->data.keypad_button));
|
||||||
|
|
||||||
|
if(listener->outgoing_session) {
|
||||||
|
switch_channel_t *channel = NULL;
|
||||||
|
private_t *tech_pvt = NULL;
|
||||||
|
switch_dtmf_t dtmf = { 0, switch_core_default_dtmf_duration(0)};
|
||||||
|
|
||||||
|
channel = switch_core_session_get_channel(listener->outgoing_session);
|
||||||
|
assert(channel != NULL);
|
||||||
|
|
||||||
|
tech_pvt = switch_core_session_get_private(listener->outgoing_session);
|
||||||
|
assert(tech_pvt != NULL);
|
||||||
|
|
||||||
|
/* TODO check call_id and line */
|
||||||
|
|
||||||
|
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(listener->outgoing_session), SWITCH_LOG_DEBUG, "SEND DTMF ON CALL %d [%d]\n", tech_pvt->call_id, request->data.keypad_button.button);
|
||||||
|
|
||||||
|
if (request->data.keypad_button.button == 14) {
|
||||||
|
dtmf.digit = '*';
|
||||||
|
switch_channel_queue_dtmf(channel, &dtmf);
|
||||||
|
} else if (request->data.keypad_button.button == 15) {
|
||||||
|
dtmf.digit = '#';
|
||||||
|
switch_channel_queue_dtmf(channel, &dtmf);
|
||||||
|
} else if (request->data.keypad_button.button >= 0 && request->data.keypad_button.button <= 9) {
|
||||||
|
dtmf.digit = '0' + request->data.keypad_button.button;
|
||||||
|
switch_channel_queue_dtmf(channel, &dtmf);
|
||||||
|
} else {
|
||||||
|
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(listener->outgoing_session), SWITCH_LOG_WARN, "UNKNOW DTMF RECEIVED ON CALL %d [%d]\n", tech_pvt->call_id, request->data.keypad_button.button);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return SWITCH_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
static switch_status_t skinny_handle_on_hook_message(listener_t *listener, skinny_message_t *request)
|
static switch_status_t skinny_handle_on_hook_message(listener_t *listener, skinny_message_t *request)
|
||||||
{
|
{
|
||||||
switch_status_t status = SWITCH_STATUS_SUCCESS;
|
switch_status_t status = SWITCH_STATUS_SUCCESS;
|
||||||
@ -3007,6 +3045,8 @@ static switch_status_t skinny_handle_request(listener_t *listener, skinny_messag
|
|||||||
return skinny_handle_off_hook_message(listener, request);
|
return skinny_handle_off_hook_message(listener, request);
|
||||||
case OPEN_RECEIVE_CHANNEL_ACK_MESSAGE:
|
case OPEN_RECEIVE_CHANNEL_ACK_MESSAGE:
|
||||||
return skinny_handle_open_receive_channel_ack_message(listener, request);
|
return skinny_handle_open_receive_channel_ack_message(listener, request);
|
||||||
|
case KEYPAD_BUTTON_MESSAGE:
|
||||||
|
return skinny_handle_keypad_button_message(listener, request);
|
||||||
case ON_HOOK_MESSAGE:
|
case ON_HOOK_MESSAGE:
|
||||||
return skinny_handle_on_hook_message(listener, request);
|
return skinny_handle_on_hook_message(listener, request);
|
||||||
/* end phase */
|
/* end phase */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user