mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-03-14 04:54:49 +00:00
more work on callstate events
This commit is contained in:
parent
bc6334a610
commit
c752e71afe
@ -63,11 +63,14 @@ static const char *EVENT_NAMES[] = {
|
|||||||
"CHANNEL_CREATE",
|
"CHANNEL_CREATE",
|
||||||
"CHANNEL_DESTROY",
|
"CHANNEL_DESTROY",
|
||||||
"CHANNEL_STATE",
|
"CHANNEL_STATE",
|
||||||
|
"CHANNEL_CALLSTATE",
|
||||||
"CHANNEL_ANSWER",
|
"CHANNEL_ANSWER",
|
||||||
"CHANNEL_HANGUP",
|
"CHANNEL_HANGUP",
|
||||||
"CHANNEL_HANGUP_COMPLETE",
|
"CHANNEL_HANGUP_COMPLETE",
|
||||||
"CHANNEL_EXECUTE",
|
"CHANNEL_EXECUTE",
|
||||||
"CHANNEL_EXECUTE_COMPLETE",
|
"CHANNEL_EXECUTE_COMPLETE",
|
||||||
|
"CHANNEL_HOLD",
|
||||||
|
"CHANNEL_UNHOLD",
|
||||||
"CHANNEL_BRIDGE",
|
"CHANNEL_BRIDGE",
|
||||||
"CHANNEL_UNBRIDGE",
|
"CHANNEL_UNBRIDGE",
|
||||||
"CHANNEL_PROGRESS",
|
"CHANNEL_PROGRESS",
|
||||||
@ -76,8 +79,6 @@ static const char *EVENT_NAMES[] = {
|
|||||||
"CHANNEL_PARK",
|
"CHANNEL_PARK",
|
||||||
"CHANNEL_UNPARK",
|
"CHANNEL_UNPARK",
|
||||||
"CHANNEL_APPLICATION",
|
"CHANNEL_APPLICATION",
|
||||||
"CHANNEL_HOLD",
|
|
||||||
"CHANNEL_UNHOLD",
|
|
||||||
"CHANNEL_ORIGINATE",
|
"CHANNEL_ORIGINATE",
|
||||||
"CHANNEL_UUID",
|
"CHANNEL_UUID",
|
||||||
"API",
|
"API",
|
||||||
|
@ -51,11 +51,14 @@ typedef enum {
|
|||||||
ESL_EVENT_CHANNEL_CREATE,
|
ESL_EVENT_CHANNEL_CREATE,
|
||||||
ESL_EVENT_CHANNEL_DESTROY,
|
ESL_EVENT_CHANNEL_DESTROY,
|
||||||
ESL_EVENT_CHANNEL_STATE,
|
ESL_EVENT_CHANNEL_STATE,
|
||||||
|
ESL_EVENT_CHANNEL_CALLSTATE,
|
||||||
ESL_EVENT_CHANNEL_ANSWER,
|
ESL_EVENT_CHANNEL_ANSWER,
|
||||||
ESL_EVENT_CHANNEL_HANGUP,
|
ESL_EVENT_CHANNEL_HANGUP,
|
||||||
ESL_EVENT_CHANNEL_HANGUP_COMPLETE,
|
ESL_EVENT_CHANNEL_HANGUP_COMPLETE,
|
||||||
ESL_EVENT_CHANNEL_EXECUTE,
|
ESL_EVENT_CHANNEL_EXECUTE,
|
||||||
ESL_EVENT_CHANNEL_EXECUTE_COMPLETE,
|
ESL_EVENT_CHANNEL_EXECUTE_COMPLETE,
|
||||||
|
ESL_EVENT_CHANNEL_HOLD,
|
||||||
|
ESL_EVENT_CHANNEL_UNHOLD,
|
||||||
ESL_EVENT_CHANNEL_BRIDGE,
|
ESL_EVENT_CHANNEL_BRIDGE,
|
||||||
ESL_EVENT_CHANNEL_UNBRIDGE,
|
ESL_EVENT_CHANNEL_UNBRIDGE,
|
||||||
ESL_EVENT_CHANNEL_PROGRESS,
|
ESL_EVENT_CHANNEL_PROGRESS,
|
||||||
|
@ -560,7 +560,9 @@ SWITCH_DECLARE(char *) switch_channel_get_flag_string(switch_channel_t *channel)
|
|||||||
SWITCH_DECLARE(char *) switch_channel_get_cap_string(switch_channel_t *channel);
|
SWITCH_DECLARE(char *) switch_channel_get_cap_string(switch_channel_t *channel);
|
||||||
SWITCH_DECLARE(int) switch_channel_state_change_pending(switch_channel_t *channel);
|
SWITCH_DECLARE(int) switch_channel_state_change_pending(switch_channel_t *channel);
|
||||||
|
|
||||||
SWITCH_DECLARE(void) switch_channel_set_callstate(switch_channel_t *channel, switch_channel_callstate_t callstate);
|
SWITCH_DECLARE(void) switch_channel_perform_set_callstate(switch_channel_t *channel, switch_channel_callstate_t callstate,
|
||||||
|
const char *file, const char *func, int line);
|
||||||
|
#define switch_channel_set_callstate(channel, state) switch_channel_perform_set_callstate(channel, state, __FILE__, __SWITCH_FUNC__, __LINE__)
|
||||||
SWITCH_DECLARE(switch_channel_callstate_t) switch_channel_get_callstate(switch_channel_t *channel);
|
SWITCH_DECLARE(switch_channel_callstate_t) switch_channel_get_callstate(switch_channel_t *channel);
|
||||||
SWITCH_DECLARE(const char *) switch_channel_callstate2str(switch_channel_callstate_t callstate);
|
SWITCH_DECLARE(const char *) switch_channel_callstate2str(switch_channel_callstate_t callstate);
|
||||||
SWITCH_DECLARE(switch_call_cause_t) switch_channel_str2callstate(const char *str);
|
SWITCH_DECLARE(switch_call_cause_t) switch_channel_str2callstate(const char *str);
|
||||||
|
@ -1355,6 +1355,7 @@ typedef enum {
|
|||||||
SWITCH_EVENT_CHANNEL_CREATE,
|
SWITCH_EVENT_CHANNEL_CREATE,
|
||||||
SWITCH_EVENT_CHANNEL_DESTROY,
|
SWITCH_EVENT_CHANNEL_DESTROY,
|
||||||
SWITCH_EVENT_CHANNEL_STATE,
|
SWITCH_EVENT_CHANNEL_STATE,
|
||||||
|
SWITCH_EVENT_CHANNEL_CALLSTATE,
|
||||||
SWITCH_EVENT_CHANNEL_ANSWER,
|
SWITCH_EVENT_CHANNEL_ANSWER,
|
||||||
SWITCH_EVENT_CHANNEL_HANGUP,
|
SWITCH_EVENT_CHANNEL_HANGUP,
|
||||||
SWITCH_EVENT_CHANNEL_HANGUP_COMPLETE,
|
SWITCH_EVENT_CHANNEL_HANGUP_COMPLETE,
|
||||||
|
@ -196,9 +196,25 @@ static struct switch_callstate_table STATE_CHART[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
SWITCH_DECLARE(void) switch_channel_set_callstate(switch_channel_t *channel, switch_channel_callstate_t callstate)
|
SWITCH_DECLARE(void) switch_channel_perform_set_callstate(switch_channel_t *channel, switch_channel_callstate_t callstate,
|
||||||
|
const char *file, const char *func, int line)
|
||||||
{
|
{
|
||||||
|
switch_event_t *event;
|
||||||
|
switch_channel_callstate_t o_callstate = channel->callstate;
|
||||||
|
|
||||||
|
if (o_callstate == callstate) return;
|
||||||
|
|
||||||
channel->callstate = callstate;
|
channel->callstate = callstate;
|
||||||
|
|
||||||
|
switch_log_printf(SWITCH_CHANNEL_ID_LOG, file, func, line, switch_channel_get_uuid(channel), SWITCH_LOG_DEBUG,
|
||||||
|
"(%s) Callstate Change %s -> %s\n", channel->name,
|
||||||
|
switch_channel_callstate2str(o_callstate), switch_channel_callstate2str(callstate));
|
||||||
|
|
||||||
|
if (switch_event_create(&event, SWITCH_EVENT_CHANNEL_CALLSTATE) == SWITCH_STATUS_SUCCESS) {
|
||||||
|
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Original-Channel-Call-State", switch_channel_callstate2str(o_callstate));
|
||||||
|
switch_channel_event_set_data(channel, event);
|
||||||
|
switch_event_fire(&event);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SWITCH_DECLARE(switch_channel_callstate_t) switch_channel_get_callstate(switch_channel_t *channel)
|
SWITCH_DECLARE(switch_channel_callstate_t) switch_channel_get_callstate(switch_channel_t *channel)
|
||||||
@ -1449,12 +1465,14 @@ SWITCH_DECLARE(switch_channel_state_t) switch_channel_perform_set_running_state(
|
|||||||
if (state <= CS_DESTROY) {
|
if (state <= CS_DESTROY) {
|
||||||
switch_event_t *event;
|
switch_event_t *event;
|
||||||
|
|
||||||
if (state == CS_ROUTING) {
|
if (state < CS_HANGUP) {
|
||||||
switch_channel_set_callstate(channel, CCS_RINGING);
|
if (state == CS_ROUTING) {
|
||||||
} else if (switch_channel_test_flag(channel, CF_ANSWERED)) {
|
switch_channel_set_callstate(channel, CCS_RINGING);
|
||||||
switch_channel_set_callstate(channel, CCS_ACTIVE);
|
} else if (switch_channel_test_flag(channel, CF_ANSWERED)) {
|
||||||
} else if (switch_channel_test_flag(channel, CF_EARLY_MEDIA)) {
|
switch_channel_set_callstate(channel, CCS_ACTIVE);
|
||||||
switch_channel_set_callstate(channel, CCS_EARLY);
|
} else if (switch_channel_test_flag(channel, CF_EARLY_MEDIA)) {
|
||||||
|
switch_channel_set_callstate(channel, CCS_EARLY);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (switch_event_create(&event, SWITCH_EVENT_CHANNEL_STATE) == SWITCH_STATUS_SUCCESS) {
|
if (switch_event_create(&event, SWITCH_EVENT_CHANNEL_STATE) == SWITCH_STATUS_SUCCESS) {
|
||||||
|
@ -424,6 +424,8 @@ SWITCH_DECLARE(void) switch_core_session_destroy_state(switch_core_session_t *se
|
|||||||
int silly = 0;
|
int silly = 0;
|
||||||
int index = 0;
|
int index = 0;
|
||||||
|
|
||||||
|
switch_channel_set_callstate(session->channel, CCS_DOWN);
|
||||||
|
|
||||||
switch_assert(session != NULL);
|
switch_assert(session != NULL);
|
||||||
switch_channel_set_running_state(session->channel, CS_DESTROY);
|
switch_channel_set_running_state(session->channel, CS_DESTROY);
|
||||||
switch_channel_clear_flag(session->channel, CF_TRANSFER);
|
switch_channel_clear_flag(session->channel, CF_TRANSFER);
|
||||||
|
@ -119,6 +119,7 @@ static char *EVENT_NAMES[] = {
|
|||||||
"CHANNEL_CREATE",
|
"CHANNEL_CREATE",
|
||||||
"CHANNEL_DESTROY",
|
"CHANNEL_DESTROY",
|
||||||
"CHANNEL_STATE",
|
"CHANNEL_STATE",
|
||||||
|
"CHANNEL_CALLSTATE",
|
||||||
"CHANNEL_ANSWER",
|
"CHANNEL_ANSWER",
|
||||||
"CHANNEL_HANGUP",
|
"CHANNEL_HANGUP",
|
||||||
"CHANNEL_HANGUP_COMPLETE",
|
"CHANNEL_HANGUP_COMPLETE",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user