[svn-commits] file: branch file/bridging r78700 - in /team/file/bridging: ./ apps/ channels...

SVN commits to the Digium repositories svn-commits at lists.digium.com
Wed Aug 8 21:46:00 CDT 2007


Author: file
Date: Wed Aug  8 21:45:57 2007
New Revision: 78700

URL: http://svn.digium.com/view/asterisk?view=rev&rev=78700
Log:
Merged revisions 78648-78649,78679,78683,78685-78686 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/trunk

................
r78648 | qwell | 2007-08-08 16:30:33 -0300 (Wed, 08 Aug 2007) | 10 lines

Merged revisions 78646 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r78646 | qwell | 2007-08-08 14:29:42 -0500 (Wed, 08 Aug 2007) | 2 lines

Fix mogs email address.

........

................
r78649 | file | 2007-08-08 16:30:52 -0300 (Wed, 08 Aug 2007) | 2 lines

Merge audiohooks branch into trunk. This is a new API for developers to listen and manipulate the audio going through a channel.

................
r78679 | file | 2007-08-08 17:49:07 -0300 (Wed, 08 Aug 2007) | 2 lines

HAVEL_SS7 should be HAVE_SS7. Reported by kwallace.

................
r78683 | file | 2007-08-08 18:44:58 -0300 (Wed, 08 Aug 2007) | 2 lines

Add support for using epoll instead of poll. This should increase scalability and is done in such a way that we should be able to add support for other poll() replacements.

................
r78685 | file | 2007-08-08 18:58:12 -0300 (Wed, 08 Aug 2007) | 2 lines

Minor fix for building under dev mode when byteswapping macro header files are not available.

................
r78686 | file | 2007-08-08 19:05:45 -0300 (Wed, 08 Aug 2007) | 2 lines

Regenerate configure script. This actually just updated the revision number... since my last merge changed it to an older number, while it was in fact generated from a much newer revision.

................

Added:
    team/file/bridging/funcs/func_volume.c
      - copied unchanged from r78686, trunk/funcs/func_volume.c
    team/file/bridging/include/asterisk/audiohook.h
      - copied unchanged from r78686, trunk/include/asterisk/audiohook.h
    team/file/bridging/main/audiohook.c
      - copied unchanged from r78686, trunk/main/audiohook.c
Removed:
    team/file/bridging/include/asterisk/chanspy.h
Modified:
    team/file/bridging/   (props changed)
    team/file/bridging/apps/app_chanspy.c
    team/file/bridging/apps/app_dial.c
    team/file/bridging/apps/app_mixmonitor.c
    team/file/bridging/channels/chan_agent.c
    team/file/bridging/channels/chan_alsa.c
    team/file/bridging/channels/chan_features.c
    team/file/bridging/channels/chan_gtalk.c
    team/file/bridging/channels/chan_h323.c
    team/file/bridging/channels/chan_jingle.c
    team/file/bridging/channels/chan_mgcp.c
    team/file/bridging/channels/chan_misdn.c
    team/file/bridging/channels/chan_nbs.c
    team/file/bridging/channels/chan_oss.c
    team/file/bridging/channels/chan_phone.c
    team/file/bridging/channels/chan_sip.c
    team/file/bridging/channels/chan_skinny.c
    team/file/bridging/channels/chan_zap.c
    team/file/bridging/configure
    team/file/bridging/configure.ac
    team/file/bridging/doc/jabber.txt
    team/file/bridging/include/asterisk/autoconfig.h.in
    team/file/bridging/include/asterisk/channel.h
    team/file/bridging/include/asterisk/slinfactory.h
    team/file/bridging/main/Makefile
    team/file/bridging/main/channel.c
    team/file/bridging/main/rtp.c
    team/file/bridging/main/slinfactory.c

Propchange: team/file/bridging/
------------------------------------------------------------------------------
Binary property 'branch-1.4-merged' - no diff available.

Propchange: team/file/bridging/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Wed Aug  8 21:45:57 2007
@@ -1,1 +1,1 @@
-/trunk:1-78640
+/trunk:1-78699

Modified: team/file/bridging/apps/app_chanspy.c
URL: http://svn.digium.com/view/asterisk/team/file/bridging/apps/app_chanspy.c?view=diff&rev=78700&r1=78699&r2=78700
==============================================================================
--- team/file/bridging/apps/app_chanspy.c (original)
+++ team/file/bridging/apps/app_chanspy.c Wed Aug  8 21:45:57 2007
@@ -40,7 +40,7 @@
 #include "asterisk/file.h"
 #include "asterisk/logger.h"
 #include "asterisk/channel.h"
-#include "asterisk/chanspy.h"
+#include "asterisk/audiohook.h"
 #include "asterisk/features.h"
 #include "asterisk/options.h"
 #include "asterisk/app.h"
@@ -166,7 +166,8 @@
 
 struct chanspy_translation_helper {
 	/* spy data */
-	struct ast_channel_spy spy;
+	struct ast_audiohook spy_audiohook;
+	struct ast_audiohook whisper_audiohook;
 	int fd;
 	int volfactor;
 };
@@ -185,15 +186,18 @@
 static int spy_generate(struct ast_channel *chan, void *data, int len, int samples) 
 {
 	struct chanspy_translation_helper *csth = data;
-	struct ast_frame *f;
+	struct ast_frame *f = NULL;
 		
-	if (csth->spy.status != CHANSPY_RUNNING)
+	ast_audiohook_lock(&csth->spy_audiohook);
+	if (csth->spy_audiohook.status != AST_AUDIOHOOK_STATUS_RUNNING) {
 		/* Channel is already gone more than likely */
+		ast_audiohook_unlock(&csth->spy_audiohook);
 		return -1;
-
-	ast_mutex_lock(&csth->spy.lock);
-	f = ast_channel_spy_read_frame(&csth->spy, samples);
-	ast_mutex_unlock(&csth->spy.lock);
+	}
+
+	f = ast_audiohook_read_frame(&csth->spy_audiohook, samples, AST_AUDIOHOOK_DIRECTION_BOTH, AST_FORMAT_SLINEAR);
+
+	ast_audiohook_unlock(&csth->spy_audiohook);
 		
 	if (!f)
 		return 0;
@@ -217,50 +221,19 @@
 	.generate = spy_generate, 
 };
 
-static int start_spying(struct ast_channel *chan, struct ast_channel *spychan, struct ast_channel_spy *spy) 
-{
-	int res;
-	struct ast_channel *peer;
+static int start_spying(struct ast_channel *chan, struct ast_channel *spychan, struct ast_audiohook *audiohook) 
+{
+	int res = 0;
+	struct ast_channel *peer = NULL;
 
 	ast_log(LOG_NOTICE, "Attaching %s to %s\n", spychan->name, chan->name);
 
-	ast_channel_lock(chan);
-	res = ast_channel_spy_add(chan, spy);
-	ast_channel_unlock(chan);
+	res = ast_audiohook_attach(chan, audiohook);
 
 	if (!res && ast_test_flag(chan, AST_FLAG_NBRIDGE) && (peer = ast_bridged_channel(chan)))
 		ast_softhangup(peer, AST_SOFTHANGUP_UNBRIDGE);	
 
 	return res;
-}
-
-/* Map 'volume' levels from -4 through +4 into
-   decibel (dB) settings for channel drivers
-*/
-static signed char volfactor_map[] = {
-	-24,
-	-18,
-	-12,
-	-6,
-	0,
-	6,
-	12,
-	18,
-	24,
-};
-
-/* attempt to set the desired gain adjustment via the channel driver;
-   if successful, clear it out of the csth structure so the
-   generator will not attempt to do the adjustment itself
-*/
-static void set_volume(struct ast_channel *chan, struct chanspy_translation_helper *csth)
-{
-	signed char volume_adjust = volfactor_map[csth->volfactor + 4];
-
-	if (!ast_channel_setoption(chan, AST_OPTION_TXGAIN, &volume_adjust, sizeof(volume_adjust), 0))
-		csth->volfactor = 0;
-	csth->spy.read_vol_adjustment = csth->volfactor;
-	csth->spy.write_vol_adjustment = csth->volfactor;
 }
 
 static int channel_spy(struct ast_channel *chan, struct ast_channel *spyee, int *volfactor, int fd,
@@ -280,49 +253,17 @@
 	ast_verb(2, "Spying on channel %s\n", name);
 
 	memset(&csth, 0, sizeof(csth));
-	ast_set_flag(&csth.spy, CHANSPY_FORMAT_AUDIO);
-	ast_set_flag(&csth.spy, CHANSPY_TRIGGER_NONE);
-	if (!ast_test_flag(flags, OPTION_READONLY))
-		ast_set_flag(&csth.spy, CHANSPY_MIXAUDIO);
-	csth.spy.type = "ChanSpy";
-	csth.spy.status = CHANSPY_RUNNING;
-	csth.spy.read_queue.format = AST_FORMAT_SLINEAR;
-	csth.spy.write_queue.format = AST_FORMAT_SLINEAR;
-	ast_mutex_init(&csth.spy.lock);
-	csth.volfactor = *volfactor;
-	set_volume(chan, &csth);
-	if (csth.volfactor) {
-		ast_set_flag(&csth.spy, CHANSPY_READ_VOLADJUST);
-		csth.spy.read_vol_adjustment = csth.volfactor;
-		ast_set_flag(&csth.spy, CHANSPY_WRITE_VOLADJUST);
-		csth.spy.write_vol_adjustment = csth.volfactor;
-	}
-	csth.fd = fd;
+
+	ast_audiohook_init(&csth.spy_audiohook, AST_AUDIOHOOK_TYPE_SPY, "ChanSpy");
 	
-	if (start_spying(spyee, chan, &csth.spy)) {
-		ast_mutex_destroy(&csth.spy.lock);
+	if (start_spying(spyee, chan, &csth.spy_audiohook)) {
+		ast_audiohook_destroy(&csth.spy_audiohook);
 		return 0;
 	}
 
 	if (ast_test_flag(flags, OPTION_WHISPER)) {
-		struct ast_filestream *beepstream;
-		int old_write_format = 0;
-
-		ast_channel_whisper_start(csth.spy.chan);
-		old_write_format = chan->writeformat;
-		if ((beepstream = ast_openstream_full(chan, "beep", chan->language, 1))) {
-			struct ast_frame *f;
-
-			while ((f = ast_readframe(beepstream))) {
-				ast_channel_whisper_feed(csth.spy.chan, f);
-				ast_frfree(f);
-			}
-
-			ast_closestream(beepstream);
-			chan->stream = NULL;
-		}
-		if (old_write_format)
-			ast_set_write_format(chan, old_write_format);
+		ast_audiohook_init(&csth.whisper_audiohook, AST_AUDIOHOOK_TYPE_WHISPER, "ChanSpy");
+		start_spying(spyee, chan, &csth.whisper_audiohook);
 	}
 
 	if (ast_test_flag(flags, OPTION_PRIVATE))
@@ -344,21 +285,20 @@
 	   has arrived, since the spied-on channel could have gone away while
 	   we were waiting
 	*/
-	while ((res = ast_waitfor(chan, -1) > -1) &&
-	       csth.spy.status == CHANSPY_RUNNING &&
-	       csth.spy.chan) {
+	while ((res = ast_waitfor(chan, -1) > -1) && csth.spy_audiohook.status == AST_AUDIOHOOK_STATUS_RUNNING) {
 		if (!(f = ast_read(chan)) || ast_check_hangup(chan)) {
 			running = -1;
 			break;
 		}
 
-		if (ast_test_flag(flags, OPTION_WHISPER) &&
-		    (f->frametype == AST_FRAME_VOICE)) {
-			ast_channel_whisper_feed(csth.spy.chan, f);
+		if (ast_test_flag(flags, OPTION_WHISPER) && f->frametype == AST_FRAME_VOICE) {
+			ast_audiohook_lock(&csth.whisper_audiohook);
+			ast_audiohook_write_frame(&csth.whisper_audiohook, AST_AUDIOHOOK_DIRECTION_WRITE, f);
+			ast_audiohook_unlock(&csth.whisper_audiohook);
 			ast_frfree(f);
 			continue;
 		}
-
+		
 		res = (f->frametype == AST_FRAME_DTMF) ? f->subclass : 0;
 		ast_frfree(f);
 		if (!res)
@@ -401,37 +341,25 @@
 			if (*volfactor > 4)
 				*volfactor = -4;
 			ast_verb(3, "Setting spy volume on %s to %d\n", chan->name, *volfactor);
-			csth.volfactor = *volfactor;
-			set_volume(chan, &csth);
-			if (csth.volfactor) {
-				ast_set_flag(&csth.spy, CHANSPY_READ_VOLADJUST);
-				csth.spy.read_vol_adjustment = csth.volfactor;
-				ast_set_flag(&csth.spy, CHANSPY_WRITE_VOLADJUST);
-				csth.spy.write_vol_adjustment = csth.volfactor;
-			} else {
-				ast_clear_flag(&csth.spy, CHANSPY_READ_VOLADJUST);
-				ast_clear_flag(&csth.spy, CHANSPY_WRITE_VOLADJUST);
-			}
-		}
-	}
-
-	if (ast_test_flag(flags, OPTION_WHISPER) && csth.spy.chan)
-		ast_channel_whisper_stop(csth.spy.chan);
+		}
+	}
 
 	if (ast_test_flag(flags, OPTION_PRIVATE))
 		ast_channel_stop_silence_generator(chan, silgen);
 	else
 		ast_deactivate_generator(chan);
 
-	csth.spy.status = CHANSPY_DONE;
-
-	/* If a channel still exists on our spy structure then we need to remove ourselves */
-	if (csth.spy.chan) {
-		ast_channel_lock(csth.spy.chan);
-		ast_channel_spy_remove(csth.spy.chan, &csth.spy);
-		ast_channel_unlock(csth.spy.chan);
-	}
-	ast_channel_spy_free(&csth.spy);
+	if (ast_test_flag(flags, OPTION_WHISPER)) {
+		ast_audiohook_lock(&csth.whisper_audiohook);
+		ast_audiohook_detach(&csth.whisper_audiohook);
+		ast_audiohook_unlock(&csth.whisper_audiohook);
+		ast_audiohook_destroy(&csth.whisper_audiohook);
+	}
+
+	ast_audiohook_lock(&csth.spy_audiohook);
+	ast_audiohook_detach(&csth.spy_audiohook);
+	ast_audiohook_unlock(&csth.spy_audiohook);
+	ast_audiohook_destroy(&csth.spy_audiohook);
 	
 	if (option_verbose >= 2)
 		ast_verbose(VERBOSE_PREFIX_2 "Done Spying on channel %s\n", name);

Modified: team/file/bridging/apps/app_dial.c
URL: http://svn.digium.com/view/asterisk/team/file/bridging/apps/app_dial.c?view=diff&rev=78700&r1=78699&r2=78700
==============================================================================
--- team/file/bridging/apps/app_dial.c (original)
+++ team/file/bridging/apps/app_dial.c Wed Aug  8 21:45:57 2007
@@ -560,6 +560,9 @@
 	struct ast_channel *peer = NULL;
 	/* single is set if only one destination is enabled */
 	int single = outgoing && !outgoing->next && !ast_test_flag64(outgoing, OPT_MUSICBACK | OPT_RINGBACK);
+#ifdef HAVE_EPOLL
+	struct chanlist *epollo;
+#endif
 	
 	if (single) {
 		/* Turn off hold music, etc */
@@ -567,7 +570,11 @@
 		/* If we are calling a single channel, make them compatible for in-band tone purpose */
 		ast_channel_make_compatible(outgoing->chan, in);
 	}
-	
+
+#ifdef HAVE_EPOLL
+	for (epollo = outgoing; epollo; epollo = epollo->next)
+		ast_poll_channel_add(in, epollo->chan);
+#endif	
 	
 	while (*to && !peer) {
 		struct chanlist *o;
@@ -814,6 +821,11 @@
 		
 	}
 
+#ifdef HAVE_EPOLL
+	for (epollo = outgoing; epollo; epollo = epollo->next)
+		ast_poll_channel_del(in, epollo->chan);
+#endif
+
 	return peer;
 }
 

Modified: team/file/bridging/apps/app_mixmonitor.c
URL: http://svn.digium.com/view/asterisk/team/file/bridging/apps/app_mixmonitor.c?view=diff&rev=78700&r1=78699&r2=78700
==============================================================================
--- team/file/bridging/apps/app_mixmonitor.c (original)
+++ team/file/bridging/apps/app_mixmonitor.c Wed Aug  8 21:45:57 2007
@@ -45,7 +45,7 @@
 #include "asterisk/file.h"
 #include "asterisk/logger.h"
 #include "asterisk/channel.h"
-#include "asterisk/chanspy.h"
+#include "asterisk/audiohook.h"
 #include "asterisk/pbx.h"
 #include "asterisk/module.h"
 #include "asterisk/lock.h"
@@ -93,7 +93,7 @@
 static const char *mixmonitor_spy_type = "MixMonitor";
 
 struct mixmonitor {
-	struct ast_channel_spy spy;
+	struct ast_audiohook audiohook;
 	char *filename;
 	char *post_process;
 	char *name;
@@ -123,17 +123,15 @@
 	AST_APP_OPTION_ARG('W', MUXFLAG_VOLUME, OPT_ARG_VOLUME),
 });
 
-static int startmon(struct ast_channel *chan, struct ast_channel_spy *spy) 
-{
-	struct ast_channel *peer;
-	int res;
+static int startmon(struct ast_channel *chan, struct ast_audiohook *audiohook) 
+{
+	struct ast_channel *peer = NULL;
+	int res = 0;
 
 	if (!chan)
 		return -1;
 
-	ast_channel_lock(chan);
-	res = ast_channel_spy_add(chan, spy);
-	ast_channel_unlock(chan);
+	ast_audiohook_attach(chan, audiohook);
 
 	if (!res && ast_test_flag(chan, AST_FLAG_NBRIDGE) && (peer = ast_bridged_channel(chan)))
 		ast_softhangup(peer, AST_SOFTHANGUP_UNBRIDGE);	
@@ -146,7 +144,6 @@
 static void *mixmonitor_thread(void *obj) 
 {
 	struct mixmonitor *mixmonitor = obj;
-	struct ast_frame *f = NULL;
 	struct ast_filestream *fs = NULL;
 	unsigned int oflags;
 	char *ext;
@@ -155,59 +152,48 @@
 	if (option_verbose > 1)
 		ast_verbose(VERBOSE_PREFIX_2 "Begin MixMonitor Recording %s\n", mixmonitor->name);
 	
-	ast_mutex_lock(&mixmonitor->spy.lock);
-
-	while (mixmonitor->spy.chan) {
-		struct ast_frame *next;
-		int write;
-
-		ast_channel_spy_trigger_wait(&mixmonitor->spy);
-		
-		if (!mixmonitor->spy.chan || mixmonitor->spy.status != CHANSPY_RUNNING)
+	ast_audiohook_lock(&mixmonitor->audiohook);
+
+	while (mixmonitor->audiohook.status == AST_AUDIOHOOK_STATUS_RUNNING) {
+		struct ast_frame *fr = NULL;
+
+		ast_audiohook_trigger_wait(&mixmonitor->audiohook);
+
+		if (mixmonitor->audiohook.status != AST_AUDIOHOOK_STATUS_RUNNING)
 			break;
-		
-		while (1) {
-			if (!(f = ast_channel_spy_read_frame(&mixmonitor->spy, SAMPLES_PER_FRAME)))
-				break;
-
-			write = (!ast_test_flag(mixmonitor, MUXFLAG_BRIDGED) ||
-				 ast_bridged_channel(mixmonitor->spy.chan));
-
-			/* it is possible for ast_channel_spy_read_frame() to return a chain
-			   of frames if a queue flush was necessary, so process them
-			*/
-			for (; f; f = next) {
-				next = AST_LIST_NEXT(f, frame_list);
-				if (write && errflag == 0) {
-					if (!fs) {
-						/* Determine creation flags and filename plus extension for filestream */
-						oflags = O_CREAT | O_WRONLY;
-						oflags |= ast_test_flag(mixmonitor, MUXFLAG_APPEND) ? O_APPEND : O_TRUNC;
-
-						if ((ext = strrchr(mixmonitor->filename, '.')))
-							*(ext++) = '\0';
-						else
-							ext = "raw";
-
-						/* Move onto actually creating the filestream */
-						if (!(fs = ast_writefile(mixmonitor->filename, ext, NULL, oflags, 0, 0644))) {
-							ast_log(LOG_ERROR, "Cannot open %s.%s\n", mixmonitor->filename, ext);
-							errflag = 1;
-						}
-
-					}
-					if (fs)
-						ast_writestream(fs, f);
-				}
-				ast_frame_free(f, 0);
+
+		if (!(fr = ast_audiohook_read_frame(&mixmonitor->audiohook, SAMPLES_PER_FRAME, AST_AUDIOHOOK_DIRECTION_BOTH, AST_FORMAT_SLINEAR)))
+			continue;
+
+		/* Initialize the file if not already done so */
+		if (!fs && !errflag) {
+			oflags = O_CREAT | O_WRONLY;
+			oflags |= ast_test_flag(mixmonitor, MUXFLAG_APPEND) ? O_APPEND : O_TRUNC;
+
+			if ((ext = strrchr(mixmonitor->filename, '.')))
+				*(ext++) = '\0';
+			else
+				ext = "raw";
+
+			if (!(fs = ast_writefile(mixmonitor->filename, ext, NULL, oflags, 0, 0644))) {
+				ast_log(LOG_ERROR, "Cannot open %s.%s\n", mixmonitor->filename, ext);
+				errflag = 1;
 			}
 		}
-	}
-
-	ast_mutex_unlock(&mixmonitor->spy.lock);
-
-	ast_channel_spy_free(&mixmonitor->spy);
-	
+
+		/* Write out frame */
+		if (fs)
+			ast_writestream(fs, fr);
+
+		/* All done! free it. */
+		ast_frame_free(fr, 0);
+
+	}
+
+	ast_audiohook_detach(&mixmonitor->audiohook);
+	ast_audiohook_unlock(&mixmonitor->audiohook);
+	ast_audiohook_destroy(&mixmonitor->audiohook);
+
 	if (option_verbose > 1)
 		ast_verbose(VERBOSE_PREFIX_2 "End MixMonitor Recording %s\n", mixmonitor->name);
 
@@ -270,27 +256,17 @@
 	strcpy(mixmonitor->filename, filename);
 
 	/* Setup the actual spy before creating our thread */
-	ast_set_flag(&mixmonitor->spy, CHANSPY_FORMAT_AUDIO);
-	ast_set_flag(&mixmonitor->spy, CHANSPY_MIXAUDIO);
-	mixmonitor->spy.type = mixmonitor_spy_type;
-	mixmonitor->spy.status = CHANSPY_RUNNING;
-	mixmonitor->spy.read_queue.format = AST_FORMAT_SLINEAR;
-	mixmonitor->spy.write_queue.format = AST_FORMAT_SLINEAR;
-	if (readvol) {
-		ast_set_flag(&mixmonitor->spy, CHANSPY_READ_VOLADJUST);
-		mixmonitor->spy.read_vol_adjustment = readvol;
-	}
-	if (writevol) {
-		ast_set_flag(&mixmonitor->spy, CHANSPY_WRITE_VOLADJUST);
-		mixmonitor->spy.write_vol_adjustment = writevol;
-	}
-	ast_mutex_init(&mixmonitor->spy.lock);
-
-	if (startmon(chan, &mixmonitor->spy)) {
+	if (ast_audiohook_init(&mixmonitor->audiohook, AST_AUDIOHOOK_TYPE_SPY, mixmonitor_spy_type)) {
+		free(mixmonitor);
+		return;
+	}
+
+	ast_set_flag(&mixmonitor->audiohook, AST_AUDIOHOOK_TRIGGER_WRITE);
+
+	if (startmon(chan, &mixmonitor->audiohook)) {
 		ast_log(LOG_WARNING, "Unable to add '%s' spy to channel '%s'\n",
-			mixmonitor->spy.type, chan->name);
-		/* Since we couldn't add ourselves - bail out! */
-		ast_mutex_destroy(&mixmonitor->spy.lock);
+			mixmonitor_spy_type, chan->name);
+		ast_audiohook_destroy(&mixmonitor->audiohook);
 		ast_free(mixmonitor);
 		return;
 	}
@@ -382,9 +358,7 @@
 
 static int stop_mixmonitor_exec(struct ast_channel *chan, void *data)
 {
-	ast_channel_lock(chan);
-	ast_channel_spy_stop_by_type(chan, mixmonitor_spy_type);
-	ast_channel_unlock(chan);
+	ast_audiohook_detach_source(chan, mixmonitor_spy_type);
 	return 0;
 }
 
@@ -400,12 +374,13 @@
 		return RESULT_SUCCESS;
 	}
 
-	if (!strcasecmp(argv[1], "start"))
+	if (!strcasecmp(argv[1], "start")) {
 		mixmonitor_exec(chan, argv[3]);
-	else if (!strcasecmp(argv[1], "stop"))
-		ast_channel_spy_stop_by_type(chan, mixmonitor_spy_type);
-
-	ast_channel_unlock(chan);
+		ast_channel_unlock(chan);
+	} else {
+		ast_channel_unlock(chan);
+		ast_audiohook_detach_source(chan, mixmonitor_spy_type);
+	}
 
 	return RESULT_SUCCESS;
 }

Modified: team/file/bridging/channels/chan_agent.c
URL: http://svn.digium.com/view/asterisk/team/file/bridging/channels/chan_agent.c?view=diff&rev=78700&r1=78699&r2=78700
==============================================================================
--- team/file/bridging/channels/chan_agent.c (original)
+++ team/file/bridging/channels/chan_agent.c Wed Aug  8 21:45:57 2007
@@ -207,9 +207,9 @@
 	if (p->chan) { \
 		for (x=0;x<AST_MAX_FDS;x++) {\
 			if (x != AST_TIMING_FD) \
-				ast->fds[x] = p->chan->fds[x]; \
+				ast_channel_set_fd(ast, x, p->chan->fds[x]); \
 		} \
-		ast->fds[AST_AGENT_FD] = p->chan->fds[AST_TIMING_FD]; \
+		ast_channel_set_fd(ast, AST_AGENT_FD, p->chan->fds[AST_TIMING_FD]); \
 	} \
 } while(0)
 

Modified: team/file/bridging/channels/chan_alsa.c
URL: http://svn.digium.com/view/asterisk/team/file/bridging/channels/chan_alsa.c?view=diff&rev=78700&r1=78699&r2=78700
==============================================================================
--- team/file/bridging/channels/chan_alsa.c (original)
+++ team/file/bridging/channels/chan_alsa.c Wed Aug  8 21:45:57 2007
@@ -789,7 +789,7 @@
 		return NULL;
 
 	tmp->tech = &alsa_tech;
-	tmp->fds[0] = readdev;
+	ast_channel_set_fd(tmp, 0, readdev);
 	tmp->nativeformats = AST_FORMAT_SLINEAR;
 	tmp->readformat = AST_FORMAT_SLINEAR;
 	tmp->writeformat = AST_FORMAT_SLINEAR;

Modified: team/file/bridging/channels/chan_features.c
URL: http://svn.digium.com/view/asterisk/team/file/bridging/channels/chan_features.c?view=diff&rev=78700&r1=78699&r2=78700
==============================================================================
--- team/file/bridging/channels/chan_features.c (original)
+++ team/file/bridging/channels/chan_features.c Wed Aug  8 21:45:57 2007
@@ -171,8 +171,8 @@
 	p->subs[index].owner->timingfd = p->subs[index].timingfdbackup;
 	p->subs[index].owner->alertpipe[0] = p->subs[index].alertpipebackup[0];
 	p->subs[index].owner->alertpipe[1] = p->subs[index].alertpipebackup[1];
-	p->subs[index].owner->fds[AST_ALERT_FD] = p->subs[index].alertpipebackup[0];
-	p->subs[index].owner->fds[AST_TIMING_FD] = p->subs[index].timingfdbackup;
+	ast_channel_set_fd(p->subs[index].owner, AST_ALERT_FD, p->subs[index].alertpipebackup[0]);
+	ast_channel_set_fd(p->subs[index].owner, AST_TIMING_FD, p->subs[index].timingfdbackup);
 }
 
 static void update_features(struct feature_pvt *p, int index)
@@ -181,9 +181,9 @@
 	if (p->subs[index].owner) {
 		for (x=0; x<AST_MAX_FDS; x++) {
 			if (index) 
-				p->subs[index].owner->fds[x] = -1;
+				ast_channel_set_fd(p->subs[index].owner, x, -1);
 			else
-				p->subs[index].owner->fds[x] = p->subchan->fds[x];
+				ast_channel_set_fd(p->subs[index].owner, x, p->subchan->fds[x]);
 		}
 		if (!index) {
 			/* Copy timings from master channel */

Modified: team/file/bridging/channels/chan_gtalk.c
URL: http://svn.digium.com/view/asterisk/team/file/bridging/channels/chan_gtalk.c?view=diff&rev=78700&r1=78699&r2=78700
==============================================================================
--- team/file/bridging/channels/chan_gtalk.c (original)
+++ team/file/bridging/channels/chan_gtalk.c Wed Aug  8 21:45:57 2007
@@ -934,13 +934,13 @@
 
 	if (i->rtp) {
 		ast_rtp_setstun(i->rtp, 1);
-		tmp->fds[0] = ast_rtp_fd(i->rtp);
-		tmp->fds[1] = ast_rtcp_fd(i->rtp);
+		ast_channel_set_fd(tmp, 0, ast_rtp_fd(i->rtp));
+		ast_channel_set_fd(tmp, 1, ast_rtcp_fd(i->rtp));
 	}
 	if (i->vrtp) {
 		ast_rtp_setstun(i->rtp, 1);
-		tmp->fds[2] = ast_rtp_fd(i->vrtp);
-		tmp->fds[3] = ast_rtcp_fd(i->vrtp);
+		ast_channel_set_fd(tmp, 2, ast_rtp_fd(i->vrtp));
+		ast_channel_set_fd(tmp, 3, ast_rtcp_fd(i->vrtp));
 	}
 	if (state == AST_STATE_RING)
 		tmp->rings = 1;

Modified: team/file/bridging/channels/chan_h323.c
URL: http://svn.digium.com/view/asterisk/team/file/bridging/channels/chan_h323.c?view=diff&rev=78700&r1=78699&r2=78700
==============================================================================
--- team/file/bridging/channels/chan_h323.c (original)
+++ team/file/bridging/channels/chan_h323.c Wed Aug  8 21:45:57 2007
@@ -396,8 +396,8 @@
 	if (pvt->update_rtp_info > 0) {
 		if (pvt->rtp) {
 			ast_jb_configure(c, &global_jbconf);
-			c->fds[0] = ast_rtp_fd(pvt->rtp);
-			c->fds[1] = ast_rtcp_fd(pvt->rtp);
+			ast_channel_set_fd(c, 0, ast_rtp_fd(pvt->rtp));
+			ast_channel_set_fd(c, 1, ast_rtcp_fd(pvt->rtp));
 			ast_queue_frame(pvt->owner, &ast_null_frame);	/* Tell Asterisk to apply changes */
 		}
 		pvt->update_rtp_info = -1;
@@ -995,8 +995,8 @@
 
 	if (pvt->owner && !ast_channel_trylock(pvt->owner)) {
 		ast_jb_configure(pvt->owner, &global_jbconf);
-		pvt->owner->fds[0] = ast_rtp_fd(pvt->rtp);
-		pvt->owner->fds[1] = ast_rtcp_fd(pvt->rtp);
+		ast_channel_set_fd(pvt->owner, 0, ast_rtp_fd(pvt->rtp));
+		ast_channel_set_fd(pvt->owner, 1, ast_rtcp_fd(pvt->rtp));
 		ast_queue_frame(pvt->owner, &ast_null_frame);	/* Tell Asterisk to apply changes */
 		ast_channel_unlock(pvt->owner);
 	} else
@@ -1040,18 +1040,18 @@
 		ch->readformat = fmt;
 		ch->rawreadformat = fmt;
 #if 0
-		ch->fds[0] = ast_rtp_fd(pvt->rtp);
-		ch->fds[1] = ast_rtcp_fd(pvt->rtp);
+		ast_channel_set_fd(ch, 0, ast_rtp_fd(pvt->rtp));
+		ast_channel_set_fd(ch, 1, ast_rtcp_fd(pvt->rtp));
 #endif
 #ifdef VIDEO_SUPPORT
 		if (pvt->vrtp) {
-			ch->fds[2] = ast_rtp_fd(pvt->vrtp);
-			ch->fds[3] = ast_rtcp_fd(pvt->vrtp);
+			ast_channel_set_fd(ch, 2, ast_rtp_fd(pvt->vrtp));
+			ast_channel_set_fd(ch, 3, ast_rtcp_fd(pvt->vrtp));
 		}
 #endif
 #ifdef T38_SUPPORT
 		if (pvt->udptl) {
-			ch->fds[4] = ast_udptl_fd(pvt->udptl);
+			ast_channel_set_fd(ch, 4, ast_udptl_fd(pvt->udptl));
 		}
 #endif
 		if (state == AST_STATE_RING) {

Modified: team/file/bridging/channels/chan_jingle.c
URL: http://svn.digium.com/view/asterisk/team/file/bridging/channels/chan_jingle.c?view=diff&rev=78700&r1=78699&r2=78700
==============================================================================
--- team/file/bridging/channels/chan_jingle.c (original)
+++ team/file/bridging/channels/chan_jingle.c Wed Aug  8 21:45:57 2007
@@ -795,12 +795,12 @@
 	fmt = ast_best_codec(tmp->nativeformats);
 
 	if (i->rtp) {
-		tmp->fds[0] = ast_rtp_fd(i->rtp);
-		tmp->fds[1] = ast_rtcp_fd(i->rtp);
+		ast_channel_set_fd(tmp, 0, ast_rtp_fd(i->rtp));
+		ast_channel_set_fd(tmp, 1, ast_rtcp_fd(i->rtp));
 	}
 	if (i->vrtp) {
-		tmp->fds[2] = ast_rtp_fd(i->vrtp);
-		tmp->fds[3] = ast_rtcp_fd(i->vrtp);
+		ast_channel_set_fd(tmp, 2, ast_rtp_fd(i->vrtp));
+		ast_channel_set_fd(tmp, 3, ast_rtcp_fd(i->vrtp));
 	}
 	if (state == AST_STATE_RING)
 		tmp->rings = 1;

Modified: team/file/bridging/channels/chan_mgcp.c
URL: http://svn.digium.com/view/asterisk/team/file/bridging/channels/chan_mgcp.c?view=diff&rev=78700&r1=78699&r2=78700
==============================================================================
--- team/file/bridging/channels/chan_mgcp.c (original)
+++ team/file/bridging/channels/chan_mgcp.c Wed Aug  8 21:45:57 2007
@@ -1456,7 +1456,7 @@
 		fmt = ast_best_codec(tmp->nativeformats);
 		ast_string_field_build(tmp, name, "MGCP/%s@%s-%d", i->name, i->parent->name, sub->id);
 		if (sub->rtp)
-			tmp->fds[0] = ast_rtp_fd(sub->rtp);
+			ast_channel_set_fd(tmp, 0, ast_rtp_fd(sub->rtp));
 		if (i->dtmfmode & (MGCP_DTMF_INBAND | MGCP_DTMF_HYBRID)) {
 			i->dsp = ast_dsp_new();
 			ast_dsp_set_features(i->dsp,DSP_FEATURE_DTMF_DETECT);
@@ -2588,7 +2588,7 @@
 	/* Allocate the RTP now */
 	sub->rtp = ast_rtp_new_with_bindaddr(sched, io, 1, 0, bindaddr.sin_addr);
 	if (sub->rtp && sub->owner)
-		sub->owner->fds[0] = ast_rtp_fd(sub->rtp);
+		ast_channel_set_fd(sub->owner, 0, ast_rtp_fd(sub->rtp));
 	if (sub->rtp)
 		ast_rtp_setnat(sub->rtp, sub->nat);
 #if 0

Modified: team/file/bridging/channels/chan_misdn.c
URL: http://svn.digium.com/view/asterisk/team/file/bridging/channels/chan_misdn.c?view=diff&rev=78700&r1=78699&r2=78700
==============================================================================
--- team/file/bridging/channels/chan_misdn.c (original)
+++ team/file/bridging/channels/chan_misdn.c Wed Aug  8 21:45:57 2007
@@ -3220,7 +3220,7 @@
 		if (pipe(chlist->pipe) < 0)
 			ast_log(LOG_ERROR, "Pipe failed\n");
 
-		tmp->fds[0] = chlist->pipe[0];
+		ast_channel_set_fd(tmp, 0, chlist->pipe[0]);
 
 		if (state == AST_STATE_RING)
 			tmp->rings = 1;

Modified: team/file/bridging/channels/chan_nbs.c
URL: http://svn.digium.com/view/asterisk/team/file/bridging/channels/chan_nbs.c?view=diff&rev=78700&r1=78699&r2=78700
==============================================================================
--- team/file/bridging/channels/chan_nbs.c (original)
+++ team/file/bridging/channels/chan_nbs.c Wed Aug  8 21:45:57 2007
@@ -232,7 +232,7 @@
 	tmp = ast_channel_alloc(1, state, 0, 0, "", "s", context, 0, "NBS/%s", i->stream);
 	if (tmp) {
 		tmp->tech = &nbs_tech;
-		tmp->fds[0] = nbs_fd(i->nbs);
+		ast_channel_set_fd(tmp, 0, nbs_fd(i->nbs));
 		tmp->nativeformats = prefformat;
 		tmp->rawreadformat = prefformat;
 		tmp->rawwriteformat = prefformat;

Modified: team/file/bridging/channels/chan_oss.c
URL: http://svn.digium.com/view/asterisk/team/file/bridging/channels/chan_oss.c?view=diff&rev=78700&r1=78699&r2=78700
==============================================================================
--- team/file/bridging/channels/chan_oss.c (original)
+++ team/file/bridging/channels/chan_oss.c Wed Aug  8 21:45:57 2007
@@ -692,7 +692,7 @@
 		return -1;
 	}
 	if (o->owner)
-		o->owner->fds[0] = fd;
+		ast_channel_set_fd(o->owner, 0, fd);
 
 #if __BYTE_ORDER == __LITTLE_ENDIAN
 	fmt = AFMT_S16_LE;
@@ -1026,7 +1026,7 @@
 	c->tech = &oss_tech;
 	if (o->sounddev < 0)
 		setformat(o, O_RDWR);
-	c->fds[0] = o->sounddev;	/* -1 if device closed, override later */
+	ast_channel_set_fd(c, 0, o->sounddev); /* -1 if device closed, override later */
 	c->nativeformats = AST_FORMAT_SLINEAR;
 	c->readformat = AST_FORMAT_SLINEAR;
 	c->writeformat = AST_FORMAT_SLINEAR;

Modified: team/file/bridging/channels/chan_phone.c
URL: http://svn.digium.com/view/asterisk/team/file/bridging/channels/chan_phone.c?view=diff&rev=78700&r1=78699&r2=78700
==============================================================================
--- team/file/bridging/channels/chan_phone.c (original)
+++ team/file/bridging/channels/chan_phone.c Wed Aug  8 21:45:57 2007
@@ -855,7 +855,7 @@
 	tmp = ast_channel_alloc(1, state, i->cid_num, i->cid_name, "", i->ext, i->context, 0, "Phone/%s", i->dev + 5);
 	if (tmp) {
 		tmp->tech = cur_tech;
-		tmp->fds[0] = i->fd;
+		ast_channel_set_fd(tmp, 0, i->fd);
 		/* XXX Switching formats silently causes kernel panics XXX */
 		if (i->mode == MODE_FXS &&
 		    ioctl(i->fd, PHONE_QUERY_CODEC, &codec) == 0) {

Modified: team/file/bridging/channels/chan_sip.c
URL: http://svn.digium.com/view/asterisk/team/file/bridging/channels/chan_sip.c?view=diff&rev=78700&r1=78699&r2=78700
==============================================================================
--- team/file/bridging/channels/chan_sip.c (original)
+++ team/file/bridging/channels/chan_sip.c Wed Aug  8 21:45:57 2007
@@ -4553,18 +4553,18 @@
 			ast_dsp_digitmode(i->vad, DSP_DIGITMODE_DTMF | DSP_DIGITMODE_RELAXDTMF);
 	}
 	if (i->rtp) {
-		tmp->fds[0] = ast_rtp_fd(i->rtp);
-		tmp->fds[1] = ast_rtcp_fd(i->rtp);
+		ast_channel_set_fd(tmp, 0, ast_rtp_fd(i->rtp));
+		ast_channel_set_fd(tmp, 1, ast_rtcp_fd(i->rtp));
 	}
 	if (needvideo && i->vrtp) {
-		tmp->fds[2] = ast_rtp_fd(i->vrtp);
-		tmp->fds[3] = ast_rtcp_fd(i->vrtp);
+		ast_channel_set_fd(tmp, 2, ast_rtp_fd(i->vrtp));
+		ast_channel_set_fd(tmp, 3, ast_rtcp_fd(i->vrtp));
 	}
 	if (needtext && i->trtp) {
-		tmp->fds[4] = ast_rtp_fd(i->trtp);
+		ast_channel_set_fd(tmp, 4, ast_rtp_fd(i->trtp));
 	}
 	if (i->udptl) {
-		tmp->fds[5] = ast_udptl_fd(i->udptl);
+		ast_channel_set_fd(tmp, 5, ast_udptl_fd(i->udptl));
 	}
 	if (state == AST_STATE_RING)
 		tmp->rings = 1;

Modified: team/file/bridging/channels/chan_skinny.c
URL: http://svn.digium.com/view/asterisk/team/file/bridging/channels/chan_skinny.c?view=diff&rev=78700&r1=78699&r2=78700
==============================================================================
--- team/file/bridging/channels/chan_skinny.c (original)
+++ team/file/bridging/channels/chan_skinny.c Wed Aug  8 21:45:57 2007
@@ -110,19 +110,19 @@
 #define htolel(x) (x)
 #define htoles(x) (x)
 #else
-#ifdef HAVE_BYTESWAP_H
+#if defined(HAVE_BYTESWAP_H)
 #include <byteswap.h>
 #define letohl(x) bswap_32(x)
 #define letohs(x) bswap_16(x)
 #define htolel(x) bswap_32(x)
 #define htoles(x) bswap_16(x)
-#elif HAVE_SYS_ENDIAN_SWAP16
+#elif defined(HAVE_SYS_ENDIAN_SWAP16)
 #include <sys/endian.h>
 #define letohl(x) __swap32(x)
 #define letohs(x) __swap16(x)
 #define htolel(x) __swap32(x)
 #define htoles(x) __swap16(x)
-#elif HAVE_SYS_ENDIAN_BSWAP16
+#elif defined(HAVE_SYS_ENDIAN_BSWAP16)
 #include <sys/endian.h>
 #define letohl(x) bswap32(x)
 #define letohs(x) bswap16(x)
@@ -2515,12 +2515,12 @@
 		sub->vrtp = ast_rtp_new_with_bindaddr(sched, io, 1, 0, bindaddr.sin_addr);
 	
 	if (sub->rtp && sub->owner) {
-		sub->owner->fds[0] = ast_rtp_fd(sub->rtp);
-		sub->owner->fds[1] = ast_rtcp_fd(sub->rtp);
+		ast_channel_set_fd(sub->owner, 0, ast_rtp_fd(sub->rtp));
+		ast_channel_set_fd(sub->owner, 1, ast_rtcp_fd(sub->rtp));
 	}
 	if (hasvideo && sub->vrtp && sub->owner) {
-		sub->owner->fds[2] = ast_rtp_fd(sub->vrtp);
-		sub->owner->fds[3] = ast_rtcp_fd(sub->vrtp);
+		ast_channel_set_fd(sub->owner, 2, ast_rtp_fd(sub->vrtp));
+		ast_channel_set_fd(sub->owner, 3, ast_rtcp_fd(sub->vrtp));
 	}
 	if (sub->rtp) {
 		ast_rtp_setnat(sub->rtp, l->nat);
@@ -3070,7 +3070,7 @@
 		if (skinnydebug)
 			ast_verbose("skinny_new: tmp->nativeformats=%d fmt=%d\n", tmp->nativeformats, fmt);
 		if (sub->rtp) {
-			tmp->fds[0] = ast_rtp_fd(sub->rtp);
+			ast_channel_set_fd(tmp, 0, ast_rtp_fd(sub->rtp));
 		}
 		if (state == AST_STATE_RING) {
 			tmp->rings = 1;

Modified: team/file/bridging/channels/chan_zap.c
URL: http://svn.digium.com/view/asterisk/team/file/bridging/channels/chan_zap.c?view=diff&rev=78700&r1=78699&r2=78700
==============================================================================
--- team/file/bridging/channels/chan_zap.c (original)
+++ team/file/bridging/channels/chan_zap.c Wed Aug  8 21:45:57 2007
@@ -166,8 +166,8 @@
 #ifdef HAVE_PRI
                " w/PRI"
 #endif
-#ifdef HAVEL_SS7
-	       "w/SS7"
+#ifdef HAVE_SS7
+	       " w/SS7"
 #endif
 ;
 
@@ -1013,9 +1013,9 @@
 	p->subs[b].inthreeway = tinthreeway;
 
 	if (p->subs[a].owner) 
-		p->subs[a].owner->fds[0] = p->subs[a].zfd;
+		ast_channel_set_fd(p->subs[a].owner, 0, p->subs[a].zfd);
 	if (p->subs[b].owner) 
-		p->subs[b].owner->fds[0] = p->subs[b].zfd;
+		ast_channel_set_fd(p->subs[b].owner, 0, p->subs[b].zfd);
 	wakeup_sub(p, a, NULL);
 	wakeup_sub(p, b, NULL);
 }
@@ -2595,7 +2595,7 @@
 	bearer->realcall = crv;
 	crv->subs[SUB_REAL].zfd = bearer->subs[SUB_REAL].zfd;
 	if (crv->subs[SUB_REAL].owner)
-		crv->subs[SUB_REAL].owner->fds[0] = crv->subs[SUB_REAL].zfd;
+		ast_channel_set_fd(crv->subs[SUB_REAL].owner, 0, crv->subs[SUB_REAL].zfd);
 	crv->bearer = bearer;
 	crv->call = bearer->call;
 	crv->pri = pri;
@@ -5515,7 +5515,7 @@
 		else
 			deflaw = AST_FORMAT_ULAW;
 	}
-	tmp->fds[0] = i->subs[index].zfd;
+	ast_channel_set_fd(tmp, 0, i->subs[index].zfd);
 	tmp->nativeformats = AST_FORMAT_SLINEAR | deflaw;
 	/* Start out assuming ulaw since it's smaller :) */
 	tmp->rawreadformat = deflaw;
@@ -8977,7 +8977,7 @@
 							       "Zap/%d:%d-%d", pri->trunkgroup,
 							       pri->pvts[principle]->channel, 1);
 					pri->pvts[principle]->owner->tech_pvt = pri->pvts[principle];
-					pri->pvts[principle]->owner->fds[0] = pri->pvts[principle]->subs[SUB_REAL].zfd;
+					ast_channel_set_fd(pri->pvts[principle]->owner, 0, pri->pvts[principle]->subs[SUB_REAL].zfd);
 					pri->pvts[principle]->subs[SUB_REAL].owner = pri->pvts[x]->subs[SUB_REAL].owner;
 				} else
 					ast_log(LOG_WARNING, "Whoa, there's no  owner, and we're having to fix up channel %d to channel %d\n", pri->pvts[x]->channel, pri->pvts[principle]->channel);

Modified: team/file/bridging/configure
URL: http://svn.digium.com/view/asterisk/team/file/bridging/configure?view=diff&rev=78700&r1=78699&r2=78700
==============================================================================
--- team/file/bridging/configure (original)
+++ team/file/bridging/configure Wed Aug  8 21:45:57 2007
@@ -1,5 +1,5 @@
 #! /bin/sh
-# From configure.ac Revision: 77878 .
+# From configure.ac Revision: 78683 .
 # Guess values for system-dependent variables and create Makefiles.
 # Generated by GNU Autoconf 2.61.
 #
@@ -15624,6 +15624,60 @@
     fi
 
 
+{ echo "$as_me:$LINENO: checking for working epoll support" >&5
+echo $ECHO_N "checking for working epoll support... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/epoll.h>
+int
+main ()
+{
+epoll_create(10);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_EPOLL 1
+_ACEOF
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	{ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+
 { echo "$as_me:$LINENO: checking for compiler atomic operations" >&5
 echo $ECHO_N "checking for compiler atomic operations... $ECHO_C" >&6; }
 cat >conftest.$ac_ext <<_ACEOF

Modified: team/file/bridging/configure.ac
URL: http://svn.digium.com/view/asterisk/team/file/bridging/configure.ac?view=diff&rev=78700&r1=78699&r2=78700
==============================================================================
--- team/file/bridging/configure.ac (original)
+++ team/file/bridging/configure.ac Wed Aug  8 21:45:57 2007
@@ -331,6 +331,14 @@
 
 AST_C_DEFINE_CHECK([PTHREAD_RWLOCK_INITIALIZER], [PTHREAD_RWLOCK_INITIALIZER], [pthread.h])
 AST_C_DEFINE_CHECK([PTHREAD_RWLOCK_PREFER_WRITER_NP], [PTHREAD_RWLOCK_PREFER_WRITER_NP], [pthread.h])
+
+AC_MSG_CHECKING(for working epoll support)
+AC_LINK_IFELSE(
+AC_LANG_PROGRAM([#include <sys/epoll.h>], [epoll_create(10);]),
+AC_MSG_RESULT(yes)
+AC_DEFINE([HAVE_EPOLL], 1, [Define to 1 if your system has working epoll support.]),
+AC_MSG_RESULT(no)
+)
 
 AC_MSG_CHECKING(for compiler atomic operations)
 AC_LINK_IFELSE(

Modified: team/file/bridging/doc/jabber.txt
URL: http://svn.digium.com/view/asterisk/team/file/bridging/doc/jabber.txt?view=diff&rev=78700&r1=78699&r2=78700
==============================================================================
--- team/file/bridging/doc/jabber.txt (original)
+++ team/file/bridging/doc/jabber.txt Wed Aug  8 21:45:57 2007
@@ -11,5 +11,5 @@
 the dial plan, jabberstatus, jabbersend, and soon jabberrecv.  res_jabber is also used
 to provide the connection interface for chan_jingle.
 
-The maintainer of res_jabber is Matthew O'Gorman <mogorman at digum.com> or
+The maintainer of res_jabber is Matthew O'Gorman <mogorman at digium.com> or
 mog_work on irc or (preferred) mogorman at astjab.org over jabber.

Modified: team/file/bridging/include/asterisk/autoconfig.h.in
URL: http://svn.digium.com/view/asterisk/team/file/bridging/include/asterisk/autoconfig.h.in?view=diff&rev=78700&r1=78699&r2=78700
==============================================================================
--- team/file/bridging/include/asterisk/autoconfig.h.in (original)
+++ team/file/bridging/include/asterisk/autoconfig.h.in Wed Aug  8 21:45:57 2007
@@ -113,6 +113,9 @@
 
 /* Define to 1 if you have the `endpwent' function. */
 #undef HAVE_ENDPWENT
+
+/* Define to 1 if your system has working epoll support. */
+#undef HAVE_EPOLL
 
 /* Define this to indicate the ${EXP10_DESCRIP} library */
 #undef HAVE_EXP10

Modified: team/file/bridging/include/asterisk/channel.h

[... 1384 lines stripped ...]



More information about the svn-commits mailing list