mirror of
https://github.com/signalwire/freeswitch.git
synced 2026-11-13 13:07:06 +00:00
Skinny: Send hangup cause to device (busy, unknown number)
This commit is contained in:
1 parent
800918ab14
commit
51f1ad5072
3 files changed
+19
-3
No files matched your search
@@ -33,6 +33,7 @@
|
|||||||
#include "mod_skinny.h"
|
#include "mod_skinny.h"
|
||||||
#include "skinny_protocol.h"
|
#include "skinny_protocol.h"
|
||||||
#include "skinny_tables.h"
|
#include "skinny_tables.h"
|
||||||
|
#include "skinny_labels.h"
|
||||||
#include "skinny_api.h"
|
#include "skinny_api.h"
|
||||||
|
|
||||||
SWITCH_MODULE_LOAD_FUNCTION(mod_skinny_load);
|
SWITCH_MODULE_LOAD_FUNCTION(mod_skinny_load);
|
||||||
@@ -615,6 +616,7 @@ switch_status_t channel_on_destroy(switch_core_session_t *session)
|
|||||||
|
|
||||||
struct channel_on_hangup_helper {
|
struct channel_on_hangup_helper {
|
||||||
private_t *tech_pvt;
|
private_t *tech_pvt;
|
||||||
|
switch_call_cause_t cause;
|
||||||
};
|
};
|
||||||
|
|
||||||
int channel_on_hangup_callback(void *pArg, int argc, char **argv, char **columnNames)
|
int channel_on_hangup_callback(void *pArg, int argc, char **argv, char **columnNames)
|
||||||
@@ -646,7 +648,19 @@ int channel_on_hangup_callback(void *pArg, int argc, char **argv, char **columnN
|
|||||||
send_stop_tone(listener, line_instance, call_id);
|
send_stop_tone(listener, line_instance, call_id);
|
||||||
}
|
}
|
||||||
send_set_lamp(listener, SKINNY_BUTTON_LINE, line_instance, SKINNY_LAMP_OFF);
|
send_set_lamp(listener, SKINNY_BUTTON_LINE, line_instance, SKINNY_LAMP_OFF);
|
||||||
send_clear_prompt_status(listener, line_instance, call_id);
|
switch (helper->cause) {
|
||||||
|
case SWITCH_CAUSE_UNALLOCATED_NUMBER:
|
||||||
|
send_display_prompt_status(listener, 0, SKINNY_DISP_UNKNOWN_NUMBER, line_instance, call_id);
|
||||||
|
break;
|
||||||
|
case SWITCH_CAUSE_USER_BUSY:
|
||||||
|
send_display_prompt_status(listener, 0, SKINNY_DISP_BUSY, line_instance, call_id);
|
||||||
|
break;
|
||||||
|
case SWITCH_CAUSE_NORMAL_CLEARING:
|
||||||
|
send_clear_prompt_status(listener, line_instance, call_id);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
send_display_prompt_status(listener, 0, switch_channel_cause2str(helper->cause), line_instance, call_id);
|
||||||
|
}
|
||||||
if(call_state == SKINNY_CONNECTED) { /* calling parties */
|
if(call_state == SKINNY_CONNECTED) { /* calling parties */
|
||||||
skinny_session_stop_media(helper->tech_pvt->session, listener, line_instance);
|
skinny_session_stop_media(helper->tech_pvt->session, listener, line_instance);
|
||||||
}
|
}
|
||||||
@@ -664,6 +678,7 @@ switch_status_t channel_on_hangup(switch_core_session_t *session)
|
|||||||
{
|
{
|
||||||
struct channel_on_hangup_helper helper = {0};
|
struct channel_on_hangup_helper helper = {0};
|
||||||
switch_channel_t *channel = switch_core_session_get_channel(session);
|
switch_channel_t *channel = switch_core_session_get_channel(session);
|
||||||
|
switch_call_cause_t cause = switch_channel_get_cause(channel);
|
||||||
private_t *tech_pvt = switch_core_session_get_private(session);
|
private_t *tech_pvt = switch_core_session_get_private(session);
|
||||||
char *sql;
|
char *sql;
|
||||||
|
|
||||||
@@ -673,6 +688,7 @@ switch_status_t channel_on_hangup(switch_core_session_t *session)
|
|||||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "%s CHANNEL HANGUP\n", switch_channel_get_name(channel));
|
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "%s CHANNEL HANGUP\n", switch_channel_get_name(channel));
|
||||||
|
|
||||||
helper.tech_pvt= tech_pvt;
|
helper.tech_pvt= tech_pvt;
|
||||||
|
helper.cause= cause;
|
||||||
|
|
||||||
skinny_session_walk_lines(tech_pvt->profile, switch_core_session_get_uuid(session), channel_on_hangup_callback, &helper);
|
skinny_session_walk_lines(tech_pvt->profile, switch_core_session_get_uuid(session), channel_on_hangup_callback, &helper);
|
||||||
if ((sql = switch_mprintf(
|
if ((sql = switch_mprintf(
|
||||||
|
|||||||
@@ -1595,7 +1595,7 @@ switch_status_t send_call_state(listener_t *listener,
|
|||||||
|
|
||||||
switch_status_t send_display_prompt_status(listener_t *listener,
|
switch_status_t send_display_prompt_status(listener_t *listener,
|
||||||
uint32_t timeout,
|
uint32_t timeout,
|
||||||
char display[32],
|
const char *display,
|
||||||
uint32_t line_instance,
|
uint32_t line_instance,
|
||||||
uint32_t call_id)
|
uint32_t call_id)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -763,7 +763,7 @@ switch_status_t send_call_state(listener_t *listener,
|
|||||||
uint32_t call_id);
|
uint32_t call_id);
|
||||||
switch_status_t send_display_prompt_status(listener_t *listener,
|
switch_status_t send_display_prompt_status(listener_t *listener,
|
||||||
uint32_t timeout,
|
uint32_t timeout,
|
||||||
char display[32],
|
const char *display,
|
||||||
uint32_t line_instance,
|
uint32_t line_instance,
|
||||||
uint32_t call_id);
|
uint32_t call_id);
|
||||||
switch_status_t send_clear_prompt_status(listener_t *listener,
|
switch_status_t send_clear_prompt_status(listener_t *listener,
|
||||||
|
|||||||
Reference in new issue
Block a user