mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-03-12 20:27:19 +00:00
add some events and more data to core DB
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@1115 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
parent
72820b56f2
commit
628e59a3ae
@ -431,7 +431,9 @@ typedef enum {
|
||||
SWITCH_EVENT_CHANNEL_STATE - A channel has changed state
|
||||
SWITCH_EVENT_CHANNEL_ANSWER - A channel has been answered
|
||||
SWITCH_EVENT_CHANNEL_HANGUP - A channel has been hungup
|
||||
SWITCH_EVENT_CHANNEL_EXEC - A channel has executed a module's application
|
||||
SWITCH_EVENT_CHANNEL_EXECUTE - A channel has executed a module's application
|
||||
SWITCH_EVENT_CHANNEL_BRIDGE - A channel has bridged to another channel
|
||||
SWITCH_EVENT_CHANNEL_UNBRIDGE - A channel has unbridged from another channel
|
||||
SWITCH_EVENT_API - An API call has been executed
|
||||
SWITCH_EVENT_LOG - A LOG event has been triggered
|
||||
SWITCH_EVENT_INBOUND_CHAN - A new inbound channel has been created
|
||||
@ -450,7 +452,9 @@ typedef enum {
|
||||
SWITCH_EVENT_CHANNEL_STATE,
|
||||
SWITCH_EVENT_CHANNEL_ANSWER,
|
||||
SWITCH_EVENT_CHANNEL_HANGUP,
|
||||
SWITCH_EVENT_CHANNEL_EXEC,
|
||||
SWITCH_EVENT_CHANNEL_EXECUTE,
|
||||
SWITCH_EVENT_CHANNEL_BRIDGE,
|
||||
SWITCH_EVENT_CHANNEL_UNBRIDGE,
|
||||
SWITCH_EVENT_API,
|
||||
SWITCH_EVENT_LOG,
|
||||
SWITCH_EVENT_INBOUND_CHAN,
|
||||
|
@ -1086,6 +1086,7 @@ static switch_status exosip_create_call(eXosip_event_t * event)
|
||||
osip_from_t *from;
|
||||
char *displayname, *username;
|
||||
osip_header_t *tedious;
|
||||
char *val;
|
||||
|
||||
switch_core_session_add_stream(session, NULL);
|
||||
if ((tech_pvt = (struct private_object *) switch_core_session_alloc(session, sizeof(struct private_object))) != 0) {
|
||||
@ -1112,10 +1113,21 @@ static switch_status exosip_create_call(eXosip_event_t * event)
|
||||
switch_core_session_destroy(&session);
|
||||
return SWITCH_STATUS_MEMERR;
|
||||
}
|
||||
if (!(displayname = osip_from_get_displayname(from))) {
|
||||
displayname = event->request->from->url->username;
|
||||
if (!displayname) {
|
||||
displayname = "n/a";
|
||||
if (!(val = osip_from_get_displayname(from))) {
|
||||
val = event->request->from->url->username;
|
||||
if (!val) {
|
||||
val = "n/a";
|
||||
}
|
||||
}
|
||||
|
||||
displayname = switch_core_session_strdup(session, val);
|
||||
|
||||
if (*displayname == '"') {
|
||||
char *p;
|
||||
|
||||
displayname++;
|
||||
if ((p = strchr(displayname, '"'))) {
|
||||
*p = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -108,6 +108,14 @@ SWITCH_DECLARE(void) switch_caller_profile_event_set_data(switch_caller_profile
|
||||
snprintf(header_name, sizeof(header_name), "%s-Destination-Number", prefix);
|
||||
switch_event_add_header(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->destination_number);
|
||||
}
|
||||
if (caller_profile->uuid) {
|
||||
snprintf(header_name, sizeof(header_name), "%s-Unique-ID", prefix);
|
||||
switch_event_add_header(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->uuid);
|
||||
}
|
||||
if (caller_profile->chan_name) {
|
||||
snprintf(header_name, sizeof(header_name), "%s-Channel-Name", prefix);
|
||||
switch_event_add_header(event, SWITCH_STACK_BOTTOM, header_name, caller_profile->chan_name);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
@ -1705,7 +1705,7 @@ static void switch_core_standard_on_execute(switch_core_session *session)
|
||||
return;
|
||||
}
|
||||
|
||||
if (switch_event_create(&event, SWITCH_EVENT_CHANNEL_EXEC) == SWITCH_STATUS_SUCCESS) {
|
||||
if (switch_event_create(&event, SWITCH_EVENT_CHANNEL_EXECUTE) == SWITCH_STATUS_SUCCESS) {
|
||||
switch_channel_event_set_data(session->channel, event);
|
||||
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Application", extension->current_application->application_name);
|
||||
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Application-Data", extension->current_application->application_data);
|
||||
@ -2279,7 +2279,7 @@ static void core_event_handler(switch_event *event)
|
||||
|
||||
switch (event->event_id) {
|
||||
case SWITCH_EVENT_CHANNEL_CREATE:
|
||||
snprintf(buf, sizeof(buf), "insert into calls (uuid,created,name,state) values('%s','%s','%s','%s')",
|
||||
snprintf(buf, sizeof(buf), "insert into channels (uuid,created,name,state) values('%s','%s','%s','%s')",
|
||||
switch_event_get_header(event, "unique-id"),
|
||||
switch_event_get_header(event, "event-date-local"),
|
||||
switch_event_get_header(event, "channel-name"),
|
||||
@ -2287,8 +2287,8 @@ static void core_event_handler(switch_event *event)
|
||||
);
|
||||
sql = buf;
|
||||
break;
|
||||
case SWITCH_EVENT_CHANNEL_EXEC:
|
||||
snprintf(buf, sizeof(buf), "update calls set application='%s',application_data='%s' where uuid='%s'",
|
||||
case SWITCH_EVENT_CHANNEL_EXECUTE:
|
||||
snprintf(buf, sizeof(buf), "update channels set application='%s',application_data='%s' where uuid='%s'",
|
||||
switch_event_get_header(event, "application"),
|
||||
switch_event_get_header(event, "application-data"),
|
||||
switch_event_get_header(event, "unique-id")
|
||||
@ -2302,11 +2302,11 @@ static void core_event_handler(switch_event *event)
|
||||
|
||||
switch(state_i) {
|
||||
case CS_HANGUP:
|
||||
snprintf(buf, sizeof(buf), "delete from calls where uuid='%s'", switch_event_get_header(event, "unique-id"));
|
||||
snprintf(buf, sizeof(buf), "delete from channels where uuid='%s'", switch_event_get_header(event, "unique-id"));
|
||||
sql = buf;
|
||||
break;
|
||||
case CS_RING:
|
||||
snprintf(buf, sizeof(buf), "update calls set state='%s',cid_name='%s',cid_num='%s',ip_addr='%s',dest='%s'"
|
||||
snprintf(buf, sizeof(buf), "update channels set state='%s',cid_name='%s',cid_num='%s',ip_addr='%s',dest='%s'"
|
||||
"where uuid='%s'",
|
||||
switch_event_get_header(event, "channel-state"),
|
||||
switch_event_get_header(event, "caller-caller-id-name"),
|
||||
@ -2318,7 +2318,7 @@ static void core_event_handler(switch_event *event)
|
||||
sql = buf;
|
||||
break;
|
||||
default:
|
||||
snprintf(buf, sizeof(buf), "update calls set state='%s' where uuid='%s'",
|
||||
snprintf(buf, sizeof(buf), "update channels set state='%s' where uuid='%s'",
|
||||
switch_event_get_header(event, "channel-state"),
|
||||
switch_event_get_header(event, "unique-id")
|
||||
);
|
||||
@ -2328,8 +2328,28 @@ static void core_event_handler(switch_event *event)
|
||||
|
||||
}
|
||||
break;
|
||||
case SWITCH_EVENT_CHANNEL_BRIDGE:
|
||||
snprintf(buf, sizeof(buf), "insert into calls values ('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')",
|
||||
switch_event_get_header(event, "event-calling-function"),
|
||||
switch_event_get_header(event, "caller-caller-id-name"),
|
||||
switch_event_get_header(event, "caller-caller-id-number"),
|
||||
switch_event_get_header(event, "caller-destination-number"),
|
||||
switch_event_get_header(event, "caller-channel-name"),
|
||||
switch_event_get_header(event, "caller-unique-id"),
|
||||
switch_event_get_header(event, "originatee-caller-id-name"),
|
||||
switch_event_get_header(event, "originatee-caller-id-number"),
|
||||
switch_event_get_header(event, "originatee-destination-number"),
|
||||
switch_event_get_header(event, "originatee-channel-name"),
|
||||
switch_event_get_header(event, "originatee-unique-id")
|
||||
);
|
||||
sql = buf;
|
||||
break;
|
||||
case SWITCH_EVENT_CHANNEL_UNBRIDGE:
|
||||
snprintf(buf, sizeof(buf), "delete from calls where caller_uuid='%s'", switch_event_get_header(event, "caller-unique-id"));
|
||||
sql = buf;
|
||||
break;
|
||||
case SWITCH_EVENT_SHUTDOWN:
|
||||
snprintf(buf, sizeof(buf), "delete from calls");
|
||||
snprintf(buf, sizeof(buf), "delete from channels");
|
||||
sql = buf;
|
||||
break;
|
||||
case SWITCH_EVENT_LOG:
|
||||
@ -2430,8 +2450,8 @@ SWITCH_DECLARE(switch_status) switch_core_init(char *console)
|
||||
if ((runtime.db = switch_core_db_handle()) == 0 ) {
|
||||
switch_console_printf(SWITCH_CHANNEL_CONSOLE, "Error Opening DB!\n");
|
||||
} else {
|
||||
char create_calls_sql[] =
|
||||
"CREATE TABLE calls (\n"
|
||||
char create_channels_sql[] =
|
||||
"CREATE TABLE channels (\n"
|
||||
" uuid VARCHAR(255),\n"
|
||||
" created VARCHAR(255),\n"
|
||||
" name VARCHAR(255),\n"
|
||||
@ -2443,9 +2463,25 @@ SWITCH_DECLARE(switch_status) switch_core_init(char *console)
|
||||
" application VARCHAR(255),\n"
|
||||
" application_data VARCHAR(255)\n"
|
||||
");\n";
|
||||
char create_calls_sql[] =
|
||||
"CREATE TABLE calls (\n"
|
||||
" function VARCHAR(255),\n"
|
||||
" caller_cid_name VARCHAR(255),\n"
|
||||
" caller_cid_num VARCHAR(255),\n"
|
||||
" caller_dest_num VARCHAR(255),\n"
|
||||
" caller_chan_name VARCHAR(255),\n"
|
||||
" caller_uuid VARCHAR(255),\n"
|
||||
" callee_cid_name VARCHAR(255),\n"
|
||||
" callee_cid_num VARCHAR(255),\n"
|
||||
" callee_dest_num VARCHAR(255),\n"
|
||||
" callee_chan_name VARCHAR(255),\n"
|
||||
" callee_uuid VARCHAR(255)\n"
|
||||
");\n";
|
||||
|
||||
switch_console_printf(SWITCH_CHANNEL_CONSOLE, "Opening DB\n");
|
||||
switch_core_db_exec(runtime.db, "drop table channels", NULL, NULL, NULL);
|
||||
switch_core_db_exec(runtime.db, "drop table calls", NULL, NULL, NULL);
|
||||
switch_core_db_exec(runtime.db, create_channels_sql, NULL, NULL, NULL);
|
||||
switch_core_db_exec(runtime.db, create_calls_sql, NULL, NULL, NULL);
|
||||
|
||||
if (switch_event_bind("core_db", SWITCH_EVENT_ALL, SWITCH_EVENT_SUBCLASS_ANY, core_event_handler, NULL) !=
|
||||
|
@ -89,6 +89,8 @@ static char *EVENT_NAMES[] = {
|
||||
"CHANNEL_ANSWER",
|
||||
"CHANNEL_HANGUP",
|
||||
"CHANNEL_EXECUTE",
|
||||
"CHANNEL_BRIDGE",
|
||||
"CHANNEL_UNBRIDGE",
|
||||
"API",
|
||||
"LOG",
|
||||
"INBOUND_CHAN",
|
||||
|
@ -33,8 +33,6 @@
|
||||
#include <switch_ivr.h>
|
||||
|
||||
|
||||
/* TBD (Lots! there are not very many functions in here lol) */
|
||||
|
||||
SWITCH_DECLARE(switch_status) switch_ivr_collect_digits_callback(switch_core_session *session,
|
||||
switch_dtmf_callback_function dtmf_callback,
|
||||
void *buf,
|
||||
@ -927,12 +925,21 @@ SWITCH_DECLARE(switch_status) switch_ivr_multi_threaded_bridge(switch_core_sessi
|
||||
switch_channel_answer(caller_channel);
|
||||
}
|
||||
|
||||
if (switch_channel_test_flag(peer_channel, CF_ANSWERED) ||
|
||||
switch_channel_test_flag(peer_channel, CF_EARLY_MEDIA)) {
|
||||
if (switch_channel_test_flag(peer_channel, CF_ANSWERED) || switch_channel_test_flag(peer_channel, CF_EARLY_MEDIA)) {
|
||||
switch_event *event;
|
||||
|
||||
if (switch_event_create(&event, SWITCH_EVENT_CHANNEL_BRIDGE) == SWITCH_STATUS_SUCCESS) {
|
||||
switch_channel_event_set_data(caller_channel, event);
|
||||
switch_event_fire(&event);
|
||||
}
|
||||
|
||||
switch_core_session_launch_thread(session, audio_bridge_thread, (void *) &other_audio_thread);
|
||||
audio_bridge_thread(NULL, (void *) &this_audio_thread);
|
||||
|
||||
if (switch_event_create(&event, SWITCH_EVENT_CHANNEL_UNBRIDGE) == SWITCH_STATUS_SUCCESS) {
|
||||
switch_channel_event_set_data(caller_channel, event);
|
||||
switch_event_fire(&event);
|
||||
}
|
||||
}
|
||||
return SWITCH_STATUS_SUCCESS;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user