mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-03-05 02:02:01 +00:00
conference update
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@2385 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
parent
271c2f9c98
commit
1569055084
@ -697,8 +697,10 @@ static void conference_loop(conference_member_t *member)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Answer the channel */
|
if (!switch_channel_test_flag(channel, CF_OUTBOUND)) {
|
||||||
switch_channel_answer(channel);
|
/* Answer the channel */
|
||||||
|
switch_channel_answer(channel);
|
||||||
|
}
|
||||||
|
|
||||||
/* Prepare the write frame */
|
/* Prepare the write frame */
|
||||||
write_frame.data = data;
|
write_frame.data = data;
|
||||||
@ -1806,32 +1808,81 @@ static switch_status_t conf_function(char *buf, switch_core_session_t *session,
|
|||||||
conference_member_t *member = NULL;
|
conference_member_t *member = NULL;
|
||||||
uint32_t id = atoi(argv[2]);
|
uint32_t id = atoi(argv[2]);
|
||||||
conference_obj_t *new_conference = NULL;
|
conference_obj_t *new_conference = NULL;
|
||||||
|
switch_channel_t *channel;
|
||||||
|
switch_event_t *event;
|
||||||
|
char *profile_name;
|
||||||
|
switch_xml_t cxml = NULL, cfg = NULL, profile = NULL, profiles = NULL;
|
||||||
|
|
||||||
if ((new_conference = (conference_obj_t *) switch_core_hash_find(globals.conference_hash, argv[3]))) {
|
if (!(member = conference_member_get(conference, id))) {
|
||||||
if ((member = conference_member_get(conference, id))) {
|
stream->write_function(stream, "No Member %u in conference %s.\n", id, conference->name);
|
||||||
switch_channel_t *channel = switch_core_session_get_channel(member->session);
|
goto done;
|
||||||
switch_event_t *event;
|
}
|
||||||
|
|
||||||
conference_del_member(member->last_conference, member);
|
channel = switch_core_session_get_channel(member->session);
|
||||||
conference_add_member(new_conference, member);
|
|
||||||
stream->write_function(stream, "OK Member %u sent to conference %s.\n", id, argv[3]);
|
|
||||||
|
|
||||||
if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
|
if (!(new_conference = (conference_obj_t *) switch_core_hash_find(globals.conference_hash, argv[3]))) {
|
||||||
switch_channel_event_set_data(channel, event);
|
switch_memory_pool_t *pool;
|
||||||
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Member-ID", "%u", member->id);
|
char *conf_name;
|
||||||
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Old-Conference-Name", conference->name);
|
|
||||||
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "New-Conference-Name", argv[3]);
|
/* Setup a memory pool to use. */
|
||||||
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Action", "transfer");
|
if (switch_core_new_memory_pool(&pool) != SWITCH_STATUS_SUCCESS) {
|
||||||
switch_event_fire(&event);
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Pool Failure\n");
|
||||||
}
|
|
||||||
goto done;
|
|
||||||
} else {
|
|
||||||
stream->write_function(stream, "No Member %u in conference %s.\n", id, conference->name);
|
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
stream->write_function(stream, "No Conference called %s found.\n", argv[3]);
|
conf_name = switch_core_strdup(pool, argv[3]);
|
||||||
goto done;
|
|
||||||
|
if ((profile_name = strchr(conf_name, '@'))) {
|
||||||
|
*profile_name++ = '\0';
|
||||||
|
|
||||||
|
/* Open the config from the xml registry */
|
||||||
|
if (!(cxml = switch_xml_open_cfg(global_cf_name, &cfg, NULL))) {
|
||||||
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "open of %s failed\n", global_cf_name);
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((profiles = switch_xml_child(cfg, "profiles"))) {
|
||||||
|
profile = switch_xml_find_child(profiles, "profile", "name", profile_name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Release the config registry handle */
|
||||||
|
if (cxml) {
|
||||||
|
switch_xml_free(cxml);
|
||||||
|
cxml = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Create the conference object. */
|
||||||
|
new_conference = conference_new(conf_name, profile, pool);
|
||||||
|
|
||||||
|
|
||||||
|
if (!new_conference) {
|
||||||
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Memory Error!\n");
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set the minimum number of members (once you go above it you cannot go below it) */
|
||||||
|
new_conference->min = 1;
|
||||||
|
|
||||||
|
/* Indicate the conference is dynamic */
|
||||||
|
switch_set_flag_locked(new_conference, CFLAG_DYNAMIC);
|
||||||
|
|
||||||
|
/* Start the conference thread for this conference */
|
||||||
|
launch_conference_thread(new_conference);
|
||||||
|
}
|
||||||
|
|
||||||
|
conference_del_member(member->last_conference, member);
|
||||||
|
conference_add_member(new_conference, member);
|
||||||
|
stream->write_function(stream, "OK Member %u sent to conference %s.\n", id, argv[3]);
|
||||||
|
|
||||||
|
if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
|
||||||
|
switch_channel_event_set_data(channel, event);
|
||||||
|
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Member-ID", "%u", member->id);
|
||||||
|
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Old-Conference-Name", conference->name);
|
||||||
|
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "New-Conference-Name", argv[3]);
|
||||||
|
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Action", "transfer");
|
||||||
|
switch_event_fire(&event);
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@ -2160,7 +2211,6 @@ static void conference_function(switch_core_session_t *session, char *data)
|
|||||||
conference->min = 2;
|
conference->min = 2;
|
||||||
|
|
||||||
if (dpin) {
|
if (dpin) {
|
||||||
printf("ASS [%s]\n", dpin);
|
|
||||||
conference->pin = switch_core_strdup(conference->pool, dpin);
|
conference->pin = switch_core_strdup(conference->pool, dpin);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user