From a435f135b58a3dddc47e60c1fb8db675dd8c1956 Mon Sep 17 00:00:00 2001
From: Mark Spencer <markster@digium.com>
Date: Tue, 1 Jun 2004 22:53:52 +0000
Subject: [PATCH] Use pseudo channel (but real channel) instead of just
 directly opening /dev/zap/pseudo to enable future meetme enhancements (bug
 #1766)

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@3125 65c4cc65-6c06-0410-ace0-fbb531ad65f3
---
 apps/app_meetme.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/apps/app_meetme.c b/apps/app_meetme.c
index 6d8d8cb339..9eb7d2ee9d 100755
--- a/apps/app_meetme.c
+++ b/apps/app_meetme.c
@@ -92,7 +92,7 @@ LOCAL_USER_DECL;
 
 static struct ast_conference {
 	char confno[AST_MAX_EXTENSION];		/* Conference */
-	int fd;				/* Announcements fd */
+	struct ast_channel *chan;		/* Announcements channel */
 	int zapconf;			/* Zaptel Conf # */
 	int users;			/* Number of active users */
 	int markedusers;		  /* Number of marked users */
@@ -181,7 +181,7 @@ static void conf_play(struct ast_conference *conf, int sound)
 		len = 0;
 	}
 	if (data) 
-		careful_write(conf->fd, data, len);
+		careful_write(conf->chan->fds[0], data, len);
 	ast_mutex_unlock(&conflock);
 }
 
@@ -203,8 +203,8 @@ static struct ast_conference *build_conf(char *confno, char *pin, int make, int
 			memset(cnf, 0, sizeof(struct ast_conference));
 			strncpy(cnf->confno, confno, sizeof(cnf->confno) - 1);
 			strncpy(cnf->pin, pin, sizeof(cnf->pin) - 1);
-			cnf->fd = open("/dev/zap/pseudo", O_RDWR);
-			if (cnf->fd < 0) {
+			cnf->chan = ast_request("zap", AST_FORMAT_ULAW, "pseudo");
+			if (!cnf->chan) {
 				ast_log(LOG_WARNING, "Unable to open pseudo channel\n");
 				free(cnf);
 				cnf = NULL;
@@ -214,10 +214,10 @@ static struct ast_conference *build_conf(char *confno, char *pin, int make, int
 			/* Setup a new zap conference */
 			ztc.chan = 0;
 			ztc.confno = -1;
-			ztc.confmode = ZT_CONF_CONF | ZT_CONF_TALKER | ZT_CONF_LISTENER;
-			if (ioctl(cnf->fd, ZT_SETCONF, &ztc)) {
+			ztc.confmode = ZT_CONF_CONFANN;
+			if (ioctl(cnf->chan->fds[0], ZT_SETCONF, &ztc)) {
 				ast_log(LOG_WARNING, "Error setting conference\n");
-				close(cnf->fd);
+				ast_hangup(cnf->chan);
 				free(cnf);
 				cnf = NULL;
 				goto cnfout;
@@ -927,7 +927,7 @@ outrun:
 		}
 		if (!cur) 
 			ast_log(LOG_WARNING, "Conference not found\n");
-		close(conf->fd);
+		ast_hangup(conf->chan);
 		free(conf);
 		} else {
 			/* Remove the user struct */ 
-- 
GitLab