From 1d0858f08e4540a1ada361b762e484e752a1ada4 Mon Sep 17 00:00:00 2001
From: Mark Spencer <markster@digium.com>
Date: Sun, 3 Aug 2003 18:22:12 +0000
Subject: [PATCH] Honor context in agent callback login

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@1254 65c4cc65-6c06-0410-ace0-fbb531ad65f3
---
 channels/chan_agent.c | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/channels/chan_agent.c b/channels/chan_agent.c
index 0d96e8fc03..45bbe05c00 100755
--- a/channels/chan_agent.c
+++ b/channels/chan_agent.c
@@ -836,6 +836,7 @@ static int __login_exec(struct ast_channel *chan, void *data, int callbackmode)
 	char info[512];
 	char *opt_user = NULL;
 	char *options = NULL;
+	char *context = NULL;
 	int play_announcement;
 	char *filename = "agent-loginok";
 	
@@ -849,6 +850,13 @@ static int __login_exec(struct ast_channel *chan, void *data, int callbackmode)
 		if (options) {
 			*options = '\0';
 			options++;
+			if (callbackmode) {
+				context = strchr(options, '@');
+				if (context) {
+					*context = '\0';
+					context++;
+				}
+			}
 		}
 	}
 
@@ -895,7 +903,10 @@ static int __login_exec(struct ast_channel *chan, void *data, int callbackmode)
 							/* Retrieve login chan */
 							res = ast_app_getdata(chan, "agent-newlocation", tmpchan, sizeof(tmpchan) - 1, 0);
 							if (!res) {
-								strncpy(p->loginchan, tmpchan, sizeof(p->loginchan) - 1);
+								if (context && strlen(context))
+									snprintf(p->loginchan, sizeof(p->loginchan), "%s@%s", tmpchan, context);
+								else
+									strncpy(p->loginchan, tmpchan, sizeof(p->loginchan) - 1);
 								if (!strlen(p->loginchan))
 									filename = "agent-loggedoff";
 								p->acknowledged = 0;
-- 
GitLab