All pastes #929625 Raw Edit

Anonymous

public c v1 · immutable
·published 2008-03-05 22:11 UTC
rendered paste body
Index: main/manager.c===================================================================--- main/manager.c	(revision 106098)+++ main/manager.c	(working copy)@@ -73,6 +73,7 @@ #include "asterisk/version.h" #include "asterisk/term.h" #include "asterisk/astobj2.h"+#include "asterisk/features.h"  enum error_type { 	UNKNOWN_ACTION = 1,@@ -1941,6 +1942,73 @@ 	return 0; } +static char mandescr_atxfer[] =+"Description: Attended transfer.\n"+"Variables: (Names marked with * are required)\n"+"	*Channel: Transferer's channel\n"+"	*Exten: Extension to transfer to\n"+"	*Context: Context to transfer to\n"+"	*Priority: Priority to transfer to\n"+"	ActionID: Optional Action id for message matching.\n";++static int action_atxfer(struct mansession *s, const struct message *m)+{+	const char *name = astman_get_header(m, "Channel");+	const char *exten = astman_get_header(m, "Exten");+	const char *context = astman_get_header(m, "Context");+	const char *priority = astman_get_header(m, "Priority");+	struct ast_channel *chan = NULL;+	struct ast_call_feature *atxfer_feature = NULL;+	char *feature_code = NULL;+	int priority_int = 0;++	if (ast_strlen_zero(name)) { +		astman_send_error(s, m, "No channel specified\n");+		return 0;+	}+	if (ast_strlen_zero(exten)) {+		astman_send_error(s, m, "No extension specified\n");+		return 0;+	}+	if (ast_strlen_zero(context)) {+		astman_send_error(s, m, "No context specified\n");+		return 0;+	}+	if (ast_strlen_zero(priority)) {+		astman_send_error(s, m, "No priority specified\n");+		return 0;+	}++	if (sscanf(priority, "%d", &priority_int) != 1 && (priority_int = ast_findlabel_extension(NULL, context, exten, priority, NULL)) < 1) {+		astman_send_error(s, m, "Invalid Priority\n");+		return 0;+	}++	if (!(atxfer_feature = ast_find_call_feature("atxfer"))) {+		astman_send_error(s, m, "No attended transfer feature found\n");+		return 0;+	}++	if (!(chan = ast_get_channel_by_name_locked(name))) {+		astman_send_error(s, m, "Channel specified does not exist\n");+		return 0;+	}++	for (feature_code = atxfer_feature->exten; feature_code && *feature_code; ++feature_code) {+		struct ast_frame f = {AST_FRAME_DTMF, *feature_code};+		ast_queue_frame(chan, &f);+	}++	for (feature_code = (char *)exten; feature_code && *feature_code; ++feature_code) {+		struct ast_frame f = {AST_FRAME_DTMF, *feature_code};+		ast_queue_frame(chan, &f);+	}++	ast_channel_unlock(chan);++	return 0;+}+ static char mandescr_command[] = "Description: Run a CLI command.\n" "Variables: (Names marked with * are required)\n"@@ -3662,6 +3730,7 @@ 		ast_manager_register2("CreateConfig", EVENT_FLAG_CONFIG, action_createconfig, "Creates an empty file in the configuration directory", mandescr_createconfig); 		ast_manager_register2("ListCategories", EVENT_FLAG_CONFIG, action_listcategories, "List categories in configuration file", mandescr_listcategories); 		ast_manager_register2("Redirect", EVENT_FLAG_CALL, action_redirect, "Redirect (transfer) a call", mandescr_redirect );+		ast_manager_register2("Atxfer", EVENT_FLAG_CALL, action_atxfer, "Attended transfer", mandescr_atxfer); 		ast_manager_register2("Originate", EVENT_FLAG_ORIGINATE, action_originate, "Originate Call", mandescr_originate); 		ast_manager_register2("Command", EVENT_FLAG_COMMAND, action_command, "Execute Asterisk CLI Command", mandescr_command ); 		ast_manager_register2("ExtensionState", EVENT_FLAG_CALL | EVENT_FLAG_REPORTING, action_extensionstate, "Check Extension Status", mandescr_extensionstate );