[Freeswitch-svn] [commit] r3587 - freeswitch/branches/knhor/trunk/src/mod/applications/mod_conference

Freeswitch SVN knhor at freeswitch.org
Fri Dec 8 20:19:30 EST 2006


Author: knhor
Date: Fri Dec  8 20:19:30 2006
New Revision: 3587

Modified:
   freeswitch/branches/knhor/trunk/src/mod/applications/mod_conference/mod_conference.c

Log:
separate the stream context from the parser context. fix api syntax help typos

Modified: freeswitch/branches/knhor/trunk/src/mod/applications/mod_conference/mod_conference.c
==============================================================================
--- freeswitch/branches/knhor/trunk/src/mod/applications/mod_conference/mod_conference.c	(original)
+++ freeswitch/branches/knhor/trunk/src/mod/applications/mod_conference/mod_conference.c	Fri Dec  8 20:19:30 2006
@@ -223,6 +223,7 @@
 	switch_audio_resampler_t *read_resampler;
 	confernce_file_node_t *fnode;
 	conference_relationship_t *relationships;
+	switch_ivr_digit_stream_t *digit_stream;
 	struct conference_member *next;
 };
 
@@ -507,7 +508,6 @@
 		last = imember;
 	}
 
-
 	member->conference = NULL;
 
 	if (!switch_test_flag(member, MFLAG_NOCHANNEL)) {
@@ -549,9 +549,7 @@
 	switch_mutex_unlock(conference->member_mutex);
 	switch_mutex_unlock(conference->mutex);
 
-
 	switch_thread_rwlock_unlock(conference->rwlock);
-
 }
 
 /* Main monitor thread (1 per distinct conference room) */
@@ -750,8 +748,6 @@
 		switch_mutex_unlock(conference->mutex);
 	} /* Rinse ... Repeat */
 
-
-
 	if (switch_event_create(&event, SWITCH_EVENT_PRESENCE_IN) == SWITCH_STATUS_SUCCESS) {
 		switch_event_add_header(event, SWITCH_STACK_BOTTOM, "proto", CONF_CHAT_PROTO);
 		switch_event_add_header(event, SWITCH_STACK_BOTTOM, "login", "%s", conference->name);
@@ -763,7 +759,6 @@
 		switch_event_fire(&event);
 	}
 
-    
 	switch_core_timer_destroy(&timer);
     
 	if (switch_test_flag(conference, CFLAG_DESTRUCT)) {
@@ -802,9 +797,7 @@
 		switch_core_hash_delete(globals.conference_hash, conference->name);
 		switch_mutex_unlock(globals.hash_mutex);
         
-		// this probably should be done, but doing it causes "shutdown" to hang until you kill it
-		// XXX - i'll chase this down later
-		// switch_ivr_digit_stream_parser_destroy(&conference->dtmf_parser);
+		switch_ivr_digit_stream_parser_destroy(conference->dtmf_parser);
 
 		if (conference->pool) {
 			switch_memory_pool_t *pool = conference->pool;
@@ -1208,6 +1201,11 @@
 	/* Start the input thread */
 	launch_conference_loop_input(member, switch_core_session_get_pool(member->session));
 
+	/* build a digit stream object */
+	if (member->conference->dtmf_parser != NULL && switch_ivr_digit_stream_new(member->conference->dtmf_parser,&member->digit_stream) != SWITCH_STATUS_SUCCESS) {
+		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Warning Will Robinson, there is no digit parser stream object\n");
+	}
+
 	/* Fair WARNING, If you expect the caller to hear anything or for digit handling to be proccessed,		*/
 	/* you better not block this thread loop for more than the duration of member->conference->timer_name!	*/
 	while(switch_test_flag(member, MFLAG_RUNNING) && switch_test_flag(member, MFLAG_ITHREAD) && switch_channel_ready(channel)) {
@@ -1259,12 +1257,12 @@
 			if(member->conference->dtmf_parser != NULL) {
 
 				for (digit = dtmf; *digit && caller_action == NULL; digit++) {
-					caller_action = (caller_control_action_t *)switch_ivr_digit_stream_parser_feed(member->conference->dtmf_parser, *digit);
+					caller_action = (caller_control_action_t *)switch_ivr_digit_stream_parser_feed(member->conference->dtmf_parser, member->digit_stream, *digit);
 				}
 			}
 		/* otherwise, clock the parser so that it can handle digit timeout detection */
 		} else if(member->conference->dtmf_parser != NULL) {
-			caller_action = (caller_control_action_t *)switch_ivr_digit_stream_parser_feed(member->conference->dtmf_parser, '\0');
+			caller_action = (caller_control_action_t *)switch_ivr_digit_stream_parser_feed(member->conference->dtmf_parser, member->digit_stream, '\0');
 		}
 
 		/* if a caller action has been detected, handle it */
@@ -1384,6 +1382,10 @@
 		}
 	} /* Rinse ... Repeat */
 
+	if (member->digit_stream != NULL) {
+		switch_ivr_digit_stream_destroy(member->digit_stream);
+	}
+
 	switch_clear_flag_locked(member, MFLAG_RUNNING);
 	switch_core_timer_destroy(&timer);
 
@@ -2590,13 +2592,13 @@
 	{"volume out",	&conf_api_sub_volume_out,	CONF_API_SUB_MEMBER_TARGET,	"<confname> volume_out <member_id|all|last> [<newval>]"},
 	{"play",	&conf_api_sub_play,		CONF_API_SUB_ARGS_SPLIT,	"<confname> play <file_path> [<member_id>]"},
 	{"say",		&conf_api_sub_say,		CONF_API_SUB_ARGS_AS_ONE,	"<confname> say <text>"},
-	{"saymember",	&conf_api_sub_saymember,	CONF_API_SUB_ARGS_AS_ONE,	"<confname> saymember <member_id><text>"},
+	{"saymember",	&conf_api_sub_saymember,	CONF_API_SUB_ARGS_AS_ONE,	"<confname> saymember <member_id> <text>"},
 	{"stop",	&conf_api_sub_stop,		CONF_API_SUB_MEMBER_TARGET,	"<confname> stop <[current|all|last]> [<member_id>]"},
 	{"kick",	&conf_api_sub_kick,		CONF_API_SUB_MEMBER_TARGET,	"<confname> kick <[member_id|all|last]>"},
 	{"mute",	&conf_api_sub_mute,		CONF_API_SUB_MEMBER_TARGET,	"<confname> mute <[member_id|all]|last>"},
 	{"unmute",	&conf_api_sub_unmute,		CONF_API_SUB_MEMBER_TARGET,	"<confname> unmute <[member_id|all]|last>"},
 	{"deaf",	&conf_api_sub_deaf,		CONF_API_SUB_MEMBER_TARGET,	"<confname> deaf <[member_id|all]|last>"},
-	{"undeaf",	&conf_api_sub_undeaf,		CONF_API_SUB_MEMBER_TARGET,	"<confname> undef <[member_id|all]|last>"},
+	{"undeaf",	&conf_api_sub_undeaf,		CONF_API_SUB_MEMBER_TARGET,	"<confname> undeaf <[member_id|all]|last>"},
 	{"relate",	&conf_api_sub_relate,		CONF_API_SUB_ARGS_SPLIT,	"<confname> relate <member_id> <other_member_id> [nospeak|nohear|clear]"},
 	{"lock",	&conf_api_sub_lock,		CONF_API_SUB_ARGS_SPLIT,	"<confname> lock"},
 	{"unlock",	&conf_api_sub_unlock,		CONF_API_SUB_ARGS_SPLIT,	"<confname> unlock"},
@@ -3514,7 +3516,7 @@
 						switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "unable to build xml menu stack\n");
 
 /*
-					/* instruct ivr menu to use our file play and tts routines */
+					// instruct ivr menu to use our file play and tts routines
 					status = switch_ivr_menu_set_fileplay_callback((*ctx)->menu_stack, &ivr_menu_callback_play_file);
 					if (status != SWITCH_STATUS_SUCCESS)
 						switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "unable to set file play calback\n");
@@ -3852,19 +3854,19 @@
 	}
 	conference->rate = rate;
 	conference->interval = interval;
+	conference->dtmf_parser = NULL;
 
-	/* caller control configuration chores */
-	xml_controls = switch_xml_child(profile, "controls");
-	controls_set = (xml_controls != NULL ? (char *) switch_xml_attr_soft(xml_controls, "set") : NULL);
+	if(0 && switch_ivr_digit_stream_parser_new(conference->pool,&conference->dtmf_parser) == SWITCH_STATUS_SUCCESS) {
 
-	/* if no controls specified in the config, assume all should be specified */
-	if (xml_controls == NULL) {
-		status = conference_new_install_caller_controls_default(conference);
-	} else if (xml_controls != NULL && controls_set != NULL && strcasecmp(controls_set,"none") != 0) {
-	/* try to build caller control if the set has been specified and != "none" */
-		if(switch_ivr_digit_stream_parser_new(conference->pool,&conference->dtmf_parser) == SWITCH_STATUS_SUCCESS) {
-			
-			/* map in the default control handler strings if specified */
+		/* caller control configuration chores */
+		xml_controls = switch_xml_child(profile, "controls");
+		controls_set = (xml_controls != NULL ? (char *) switch_xml_attr_soft(xml_controls, "set") : NULL);
+
+		if (xml_controls == NULL) {
+		/* if no controls specified in the config, assume all should be specified */
+			status = conference_new_install_caller_controls_default(conference);
+		} else if (xml_controls != NULL && controls_set != NULL && strcasecmp(controls_set,"none") != 0) {
+		/* try to build caller control if the set has been specified and != "none" */
 			if (strcasecmp(controls_set,"default") == 0) {
 				status = conference_new_install_caller_controls_default(conference);
 			} else if (strcasecmp(controls_set,"custom") == 0) {
@@ -3873,10 +3875,10 @@
 				switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Unknown caller control set.\n");
 			}
 		} else {
-			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Unable to allocate caller control digit parser.\n");
+			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "no caller controls intalled.\n");
 		}
 	} else {
-		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "no caller controls intalled.\n");
+		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Unable to allocate caller control digit parser.\n");
 	}
 
 	/* Activate the conference mutex for exclusivity */



More information about the Freeswitch-svn mailing list