From ff5851c685fb6bf5d7e41eccb7aed1d9267e6f00 Mon Sep 17 00:00:00 2001
From: Mark Spencer <markster@digium.com>
Date: Wed, 19 May 2004 03:16:59 +0000
Subject: [PATCH] Make muted handle transfers

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@3009 65c4cc65-6c06-0410-ace0-fbb531ad65f3
---
 muted.c | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/muted.c b/muted.c
index 135a4164bb..73eb649a61 100755
--- a/muted.c
+++ b/muted.c
@@ -428,6 +428,8 @@ static void append_sub(struct channel *chan, char *name)
 static void hangup_chan(char *channel)
 {
 	struct channel *chan;
+	if (debug)
+		printf("Hangup '%s'\n", channel);
 	chan = find_channel(channel);
 	if (chan)
 		delete_sub(chan, channel);
@@ -437,6 +439,8 @@ static void hangup_chan(char *channel)
 static void offhook_chan(char *channel)
 {
 	struct channel *chan;
+	if (debug)
+		printf("Offhook '%s'\n", channel);
 	chan = find_channel(channel);
 	if (chan)
 		append_sub(chan, channel);
@@ -446,8 +450,10 @@ static void offhook_chan(char *channel)
 static int wait_event(void)
 {
 	char *resp;
-	char event[80]="";
-	char channel[80]="";
+	char event[120]="";
+	char channel[120]="";
+	char oldname[120]="";
+	char newname[120]="";
 	resp = get_line();
 	if (!resp) {
 		fprintf(stderr, "disconnected (6)\n");
@@ -459,6 +465,10 @@ static int wait_event(void)
 		while((resp = get_line()) && strlen(resp)) {
 			if (!strncasecmp(resp, "Channel: ", strlen("Channel: ")))
 				strncpy(channel, resp + strlen("Channel: "), sizeof(channel));
+			if (!strncasecmp(resp, "Newname: ", strlen("Newname: ")))
+				strncpy(newname, resp + strlen("Newname: "), sizeof(newname));
+			if (!strncasecmp(resp, "Oldname: ", strlen("Oldname: ")))
+				strncpy(oldname, resp + strlen("Oldname: "), sizeof(oldname));
 		}
 		if (strlen(channel)) {
 			if (!strcasecmp(event, "Hangup")) 
@@ -466,6 +476,12 @@ static int wait_event(void)
 			else
 				offhook_chan(channel);
 		}
+		if (strlen(newname) && strlen(oldname)) {
+			if (!strcasecmp(event, "Rename")) {
+				hangup_chan(oldname);
+				offhook_chan(newname);
+			}
+		}
 	} else {
 		/* Consume the rest of the non-event */
 		while((resp = get_line()) && strlen(resp));
-- 
GitLab