rpms/asterisk/F-8 asterisk-1.4.18-alternate-extensions.patch, NONE, 1.1 asterisk-1.4.18-alternate-voicemail.patch, NONE, 1.1 asterisk-1.4.18-appconference.patch, NONE, 1.1 asterisk-1.4.18-autoconf.patch, NONE, 1.1 asterisk-1.4.18-chanmobile.patch, NONE, 1.1 asterisk-1.4.18-initscripts.patch, NONE, 1.1 asterisk-1.4.18-optimization.patch, NONE, 1.1 asterisk-1.4.18-spandspfax.patch, NONE, 1.1 asterisk-1.4.18-system-imap.patch, NONE, 1.1 .cvsignore, 1.6, 1.7 asterisk-logrotate, 1.1, 1.2 asterisk.spec, 1.7, 1.8 menuselect.makeopts, 1.1, 1.2 sources, 1.6, 1.7 asterisk-1.4.16.2-alternate-extensions.patch, 1.1, NONE asterisk-1.4.16.2-alternate-voicemail.patch, 1.1, NONE asterisk-1.4.16.2-appconference.patch, 1.1, NONE asterisk-1.4.16.2-autoconf.patch, 1.1, NONE asterisk-1.4.16.2-chanmobile.patch, 1.1, NONE asterisk-1.4.16.2-initscripts.patch, 1.1, NONE asterisk-1.4.16.2-libcap.patch, 1.1, NONE asterisk-1.4.16.2-optimization.patch, 1.1, NONE asterisk-1.4.16.2-spandspfax.patch, 1.1, NONE asterisk-1.4.16.2-system-imap.patch, 1.1, NONE

Jeffrey C. Ollie (jcollie) fedora-extras-commits at redhat.com
Tue Feb 19 12:49:35 UTC 2008


Author: jcollie

Update of /cvs/pkgs/rpms/asterisk/F-8
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv23765

Modified Files:
	.cvsignore asterisk-logrotate asterisk.spec 
	menuselect.makeopts sources 
Added Files:
	asterisk-1.4.18-alternate-extensions.patch 
	asterisk-1.4.18-alternate-voicemail.patch 
	asterisk-1.4.18-appconference.patch 
	asterisk-1.4.18-autoconf.patch 
	asterisk-1.4.18-chanmobile.patch 
	asterisk-1.4.18-initscripts.patch 
	asterisk-1.4.18-optimization.patch 
	asterisk-1.4.18-spandspfax.patch 
	asterisk-1.4.18-system-imap.patch 
Removed Files:
	asterisk-1.4.16.2-alternate-extensions.patch 
	asterisk-1.4.16.2-alternate-voicemail.patch 
	asterisk-1.4.16.2-appconference.patch 
	asterisk-1.4.16.2-autoconf.patch 
	asterisk-1.4.16.2-chanmobile.patch 
	asterisk-1.4.16.2-initscripts.patch 
	asterisk-1.4.16.2-libcap.patch 
	asterisk-1.4.16.2-optimization.patch 
	asterisk-1.4.16.2-spandspfax.patch 
	asterisk-1.4.16.2-system-imap.patch 
Log Message:
Update to 1.4.18 and many other improvements

asterisk-1.4.18-alternate-extensions.patch:

--- NEW FILE asterisk-1.4.18-alternate-extensions.patch ---
>From 7036577cdc4ef88c6e6ef5c45d1b925b55c8c609 Mon Sep 17 00:00:00 2001
From: Jeffrey C. Ollie <jcollie at pc21224.campus.dmacc.edu>
Date: Thu, 8 Nov 2007 16:32:56 -0600
Subject: [PATCH] Allow alternate extensions to be specified in users.conf

---
 pbx/pbx_config.c |   14 ++++++++++++++
 1 files changed, 14 insertions(+), 0 deletions(-)

diff --git a/pbx/pbx_config.c b/pbx/pbx_config.c
index 565d7d8..06253d5 100644
--- a/pbx/pbx_config.c
+++ b/pbx/pbx_config.c
@@ -2357,11 +2357,14 @@ static void pbx_load_users(void)
 {
 	struct ast_config *cfg;
 	char *cat, *chan;
+	char *ext;
 	const char *zapchan;
 	const char *hasexten;
+	const char *altexts;
 	char tmp[256];
 	char iface[256];
 	char zapcopy[256];
+	char altcopy[256];
 	char *c;
 	int len;
 	int hasvoicemail;
@@ -2441,6 +2444,17 @@ static void pbx_load_users(void)
 			} else {
 				ast_add_extension2(con, 0, cat, 1, NULL, NULL, "Dial", strdup("${HINT}"), ast_free, registrar);
 			}
+			altexts = ast_variable_retrieve(cfg, cat, "alternateexts");
+			if (!ast_strlen_zero(altexts)) {
+				snprintf(tmp, sizeof(tmp), "%s|1", cat);
+				ast_copy_string(altcopy, altexts, sizeof(altcopy));
+				c = altcopy;
+				ext = strsep(&c, ",");
+				while (ext) {
+					ast_add_extension2(con, 0, ext, 1, NULL, NULL, "Goto", strdup(tmp), ast_free, registrar);
+					ext = strsep(&c, ",");
+				}
+			}
 		}
 	}
 	ast_config_destroy(cfg);
-- 
1.5.4.1


asterisk-1.4.18-alternate-voicemail.patch:

--- NEW FILE asterisk-1.4.18-alternate-voicemail.patch ---
>From fca22baf837f885be443c220330a9c4d6a605897 Mon Sep 17 00:00:00 2001
From: Jeffrey C. Ollie <jcollie at pc21224.campus.dmacc.edu>
Date: Thu, 8 Nov 2007 15:52:36 -0600
Subject: [PATCH] Modify modules.conf so that different voicemail modules can be loaded.

---
 configs/modules.conf.sample |   27 +++++++++++++++++++++++++++
 1 files changed, 27 insertions(+), 0 deletions(-)

diff --git a/configs/modules.conf.sample b/configs/modules.conf.sample
index 9302e87..b2ef961 100644
--- a/configs/modules.conf.sample
+++ b/configs/modules.conf.sample
@@ -33,3 +33,30 @@ load => res_musiconhold.so
 ;
 noload => chan_alsa.so
 ;noload => chan_oss.so
+
+;
+; Voicemail storage selection
+;
+; Comment out the "noload" lines for the voicemail
+; storage system that you want.  Leave the ones that
+; you don't want uncommented.
+;
+
+;
+; Voicemail with IMAP storage
+;
+noload => app_directory_imap.so
+noload => app_voicemail_imap.so
+
+;
+; Voicemail with ODBC storage
+;
+noload => app_directory_odbc.so
+noload => app_voicemail_odbc.so
+
+;
+; Voicemail with filesystem storage
+;
+;noload => app_directory_plain.so
+;noload => app_voicemail_plain.so
+
-- 
1.5.4.1


asterisk-1.4.18-appconference.patch:

--- NEW FILE asterisk-1.4.18-appconference.patch ---
>From b5c3052fe56ef2dccde4b3aeb11ee1dfc237d2b1 Mon Sep 17 00:00:00 2001
From: Jeffrey C. Ollie <jeff at ocjtech.us>
Date: Mon, 18 Feb 2008 08:58:05 -0600
Subject: [PATCH] Latest updates for app_conference.

---
 apps/Makefile                      |   14 +
 apps/app_conference.c              |  113 ++
 apps/conference/CLI.txt            |   95 +
 apps/conference/Flags.txt          |   34 +
 apps/conference/LICENSE            |  341 ++++
 apps/conference/README             |  125 ++
 apps/conference/README.videoswitch |   85 +
 apps/conference/TODO               |    4 +
 apps/conference/app_conference.h   |  246 +++
 apps/conference/cli.c              | 1265 ++++++++++++++
 apps/conference/cli.h              |   99 ++
 apps/conference/common.h           |   63 +
 apps/conference/conf_frame.h       |   73 +
 apps/conference/conference.c       | 3021 ++++++++++++++++++++++++++++++++
 apps/conference/conference.h       |  190 ++
 apps/conference/frame.c            |  666 +++++++
 apps/conference/frame.h            |   75 +
 apps/conference/member.c           | 3375 ++++++++++++++++++++++++++++++++++++
 apps/conference/member.h           |  336 ++++
 19 files changed, 10220 insertions(+), 0 deletions(-)
 create mode 100644 apps/app_conference.c
 create mode 100644 apps/conference/CLI.txt
 create mode 100644 apps/conference/Flags.txt
 create mode 100644 apps/conference/LICENSE
 create mode 100644 apps/conference/README
 create mode 100644 apps/conference/README.videoswitch
 create mode 100644 apps/conference/TODO
 create mode 100644 apps/conference/app_conference.h
 create mode 100644 apps/conference/cli.c
 create mode 100644 apps/conference/cli.h
 create mode 100644 apps/conference/common.h
 create mode 100644 apps/conference/conf_frame.h
 create mode 100644 apps/conference/conference.c
 create mode 100644 apps/conference/conference.h
 create mode 100644 apps/conference/frame.c
 create mode 100644 apps/conference/frame.h
 create mode 100644 apps/conference/member.c
 create mode 100644 apps/conference/member.h

diff --git a/apps/Makefile b/apps/Makefile
index 4006c9a..cf33505 100644
--- a/apps/Makefile
+++ b/apps/Makefile
@@ -44,4 +44,18 @@ endif
 
 all: _all
 
+app_conference.o: ASTCFLAGS+=-DSILDET=2 -Iconference
+
+conference/conference.o: ASTCFLAGS+=-DSILDET=2 -Iconference
+
+conference/member.o: ASTCFLAGS+=-DSILDET=2 -Iconference
+
+conference/frame.o: ASTCFLAGS+=-DSILDET=2 -Iconference
+
+conference/cli.o: ASTCFLAGS+=-DSILDET=2 -Iconference
+
+app_conference.so: app_conference.o conference/conference.o conference/member.o conference/frame.o conference/cli.o
+	$(ECHO_PREFIX) echo "   [LD] $^ -> $@"
+	$(CMD_PREFIX) $(CXX) $(PTHREAD_CFLAGS) $(ASTLDFLAGS) $(SOLINK) -o $@ $^ -lspeex
+
 include $(ASTTOPDIR)/Makefile.moddir_rules
diff --git a/apps/app_conference.c b/apps/app_conference.c
new file mode 100644
index 0000000..824d5dd
--- /dev/null
+++ b/apps/app_conference.c
@@ -0,0 +1,113 @@
+/*
+ * app_conference
+ *
+ * A channel independent conference application for Asterisk
+ *
+ * Copyright (C) 2002, 2003 Junghanns.NET GmbH
+ * Copyright (C) 2003, 2004 HorizonLive.com, Inc.
+ * Copyright (C) 2005, 2006 HorizonWimba, Inc.
+ * Copyright (C) 2007 Wimba, Inc.
+ *
+ * Klaus-Peter Junghanns <kapejod at ns1.jnetdns.de>
+ *
+ * Video Conferencing support added by
+ * Neil Stratford <neils at vipadia.com>
+ * Copyright (C) 2005, 2005 Vipadia Limited
+ *
+ * VAD driven video conferencing, text message support
+ * and miscellaneous enhancements added by
+ * Mihai Balea <mihai at hates dot ms>
+ *
+ * This program may be modified and distributed under the
+ * terms of the GNU General Public License. You should have received
+ * a copy of the GNU General Public License along with this
+ * program; if not, write to the Free Software Foundation, Inc.
+ * 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#include "asterisk.h"
+
+// SVN revision number, provided by make
+#ifndef REVISION
+#define REVISION "unknown"
+#endif
+
+static char *revision = REVISION;
+
+ASTERISK_FILE_VERSION(__FILE__, REVISION)
+
+#include "app_conference.h"
+#include "common.h"
+
+/*
+ * a conference has n + 1 threads, where n is the number of
+ * members and 1 is a conference thread which sends audio
+ * back to the members.
+ *
+ * each member thread reads frames from the channel and
+ * add's them to the member's frame queue.
+ *
+ * the conference thread reads frames from each speaking members
+ * queue, mixes them, and then re-queues them for the member thread
+ * to send back to the user.
+ */
+
+static char *app = "Conference";
+static char *synopsis = "Channel Independent Conference";
+static char *descrip = "Channel Independent Conference Application";
+
+static int app_conference_main(struct ast_channel* chan, void* data)
+{
+	int res ;
+	struct ast_module_user *u ;
+
+	u = ast_module_user_add(chan);
+
+	// call member thread function
+	res = member_exec( chan, data ) ;
+
+	ast_module_user_remove(u);
+
+	return res ;
+}
+
+static int unload_module( void )
+{
+	ast_log( LOG_NOTICE, "unloading app_conference module\n" ) ;
+
+	ast_module_user_hangup_all();
+
+	unregister_conference_cli() ;
+
+	return ast_unregister_application( app ) ;
+}
+
+static int load_module( void )
+{
+	ast_log( LOG_NOTICE, "Loading app_conference module, revision=%s\n", revision) ;
+
+	init_conference() ;
+
+	register_conference_cli() ;
+
+	return ast_register_application( app, app_conference_main, synopsis, descrip ) ;
+}
+
+// increment a timeval by ms milliseconds
+void add_milliseconds(struct timeval* tv, long ms)
+{
+	// add the microseconds to the microseconds field
+	tv->tv_usec += ( ms * 1000 ) ;
+
+	// calculate the number of seconds to increment
+	long s = ( tv->tv_usec / 1000000 ) ;
+
+	// adjust the microsends field
+	if ( s > 0 ) tv->tv_usec -= ( s * 1000000 ) ;
+
+	// increment the seconds field
+	tv->tv_sec += s ;
+}
+
+AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY,
+		"Channel Independent Conference Application");
diff --git a/apps/conference/CLI.txt b/apps/conference/CLI.txt
new file mode 100644
index 0000000..d54f9d1
--- /dev/null
+++ b/apps/conference/CLI.txt
@@ -0,0 +1,95 @@
+Current command line used by app_conference
+Please note that app_conference is still work in progress, so this document might be outdated. As always, the source code is the definitive reference (cli.[ch] and conference.[ch]).  You can also obtain help/usage information by using Asterisk CLI help system ("help conference")
+
+A member in a conference can be referred to by its id or by its channel.  Id is a positive number assigned automatically when the member joins the conference.  Channel is Asterisk channel identifier. To obtain a list of member ids and channels in a conference, do:
+
+*CLI> conference list <conference name>
[...9986 lines suppressed...]
+	conf_frame* outVideoFramesTail ;
+	unsigned int outVideoFramesCount ;
+	conf_frame* outDTMFFrames ;
+	conf_frame* outDTMFFramesTail ;
+	unsigned int outDTMFFramesCount ;
+	conf_frame* outTextFrames ;
+	conf_frame* outTextFramesTail ;
+	unsigned int outTextFramesCount ;
+
+	// LL video switched flag
+	short conference;
+
+	// switch video by VAD?
+	short vad_switch;
+	// do a VAD switch even if video is not enabled?
+	short force_vad_switch;
+	// if member is current speaker, video will stay on it when it becomes silent
+	short vad_linger;
+	// switch by dtmf?
+	short dtmf_switch;
+	// relay dtmf to manager?
+	short dtmf_relay;
+	// initial nat delay flag
+	short first_frame_received;
+	// does text messages?
+	short does_text;
+	// conference does chat mode (1 on 1 video when two members in conference)
+	short does_chat_mode;
+
+
+	// time we last dropped a frame
+	struct timeval last_in_dropped ;
+	struct timeval last_out_dropped ;
+
+	// ( not currently used )
+	// int samplesperframe ;
+
+	// used for determining need to mix frames
+	// and for management interface notification
+	// and for VAD based video switching
+	short speaking_state_notify ;
+	short speaking_state ; // This flag will be true if this member or any of its drivers is speaking
+	short local_speaking_state; // This flag will be true only if this member is speaking
+	struct timeval last_state_change;
+	int speaker_count; // Number of drivers (including this member) that are speaking
+
+	// Stuff used to determine video broadcast state
+	// This member's video is sent out to at least one member of the conference
+	short video_broadcast_active;
+	// Time when we last sent out a video frame from this member
+	struct timeval last_video_frame_time;
+
+	// Is the member supposed to be transmitting video?
+	short video_started;
+
+	// pointer to next member in single-linked list
+	struct ast_conf_member* next ;
+
+	// accounting values
+	unsigned long frames_in ;
+	unsigned long frames_in_dropped ;
+	unsigned long frames_out ;
+	unsigned long frames_out_dropped ;
+
+	unsigned long video_frames_in ;
+	unsigned long video_frames_in_dropped ;
+	unsigned long video_frames_out ;
+	unsigned long video_frames_out_dropped ;
+
+	unsigned long dtmf_frames_in ;
+	unsigned long dtmf_frames_in_dropped ;
+	unsigned long dtmf_frames_out ;
+	unsigned long dtmf_frames_out_dropped ;
+
+	unsigned long text_frames_in ;
+	unsigned long text_frames_in_dropped ;
+	unsigned long text_frames_out ;
+	unsigned long text_frames_out_dropped ;
+
+	// for counting sequentially dropped frames
+	unsigned int sequential_drops ;
+	unsigned long since_dropped ;
+
+	// start time
+	struct timeval time_entered ;
+	struct timeval lastsent_timeval ;
+
+	// flag indicating we should remove this member
+	short remove_flag ;
+	short kick_flag ;
+
+#if ( SILDET == 2 )
+	// pointer to speex preprocessor dsp
+	SpeexPreprocessState *dsp ;
+        // number of frames to ignore speex_preprocess()
+	int ignore_speex_count;
+#else
+	// placeholder when preprocessing is not enabled
+	void* dsp ;
+#endif
+
+	// audio format this member is using
+	int write_format ;
+	int read_format ;
+
+	int write_format_index ;
+	int read_format_index ;
+
+	// member frame translators
+	struct ast_trans_pvt* to_slinear ;
+	struct ast_trans_pvt* from_slinear ;
+
+	// For playing sounds
+	struct ast_conf_soundq *soundq;
+	struct ast_conf_soundq *videoq;
+
+	// Enter/leave sounds
+	char * enter_snd;
+	char * leave_snd;
+
+	// Pointer to another member that will be driven from this member's audio
+	struct ast_conf_member *driven_member;
+} ;
+
+struct conf_member
+{
+	struct ast_conf_member* realmember ;
+	struct conf_member* next ;
+} ;
+
+//
+// function declarations
+//
+
+int member_exec( struct ast_channel* chan, void* data ) ;
+
+struct ast_conf_member* check_active_video( int id, struct ast_conference *conf );
+
+struct ast_conf_member* create_member( struct ast_channel* chan, const char* data ) ;
+struct ast_conf_member* delete_member( struct ast_conf_member* member ) ;
+
+// incoming queue
+int queue_incoming_frame( struct ast_conf_member* member, struct ast_frame* fr ) ;
+int queue_incoming_video_frame( struct ast_conf_member* member, const struct ast_frame* fr ) ;
+int queue_incoming_dtmf_frame( struct ast_conf_member* member, const struct ast_frame* fr ) ;
+conf_frame* get_incoming_frame( struct ast_conf_member* member ) ;
+conf_frame* get_incoming_video_frame( struct ast_conf_member* member ) ;
+conf_frame* get_incoming_dtmf_frame( struct ast_conf_member* member ) ;
+
+// outgoing queue
+int queue_outgoing_frame( struct ast_conf_member* member, const struct ast_frame* fr, struct timeval delivery ) ;
+int __queue_outgoing_frame( struct ast_conf_member* member, const struct ast_frame* fr, struct timeval delivery ) ;
+conf_frame* get_outgoing_frame( struct ast_conf_member* member ) ;
+
+int queue_outgoing_video_frame( struct ast_conf_member* member, const struct ast_frame* fr, struct timeval delivery ) ;
+conf_frame* get_outgoing_video_frame( struct ast_conf_member* member ) ;
+int queue_outgoing_dtmf_frame( struct ast_conf_member* member, const struct ast_frame* fr ) ;
+int queue_outgoing_text_frame( struct ast_conf_member* member, const struct ast_frame* fr ) ;
+conf_frame* get_outgoing_dtmf_frame( struct ast_conf_member* member ) ;
+conf_frame* get_outgoing_text_frame( struct ast_conf_member* member ) ;
+
+void send_state_change_notifications( struct ast_conf_member* member ) ;
+
+int increment_speaker_count(struct ast_conf_member *member, int lock);
+int decrement_speaker_count(struct ast_conf_member *member, int lock);
+
+void member_process_spoken_frames(struct ast_conference* conf,
+				  struct ast_conf_member *member,
+				  struct conf_frame **spoken_frames,
+				  long time_diff,
+				 int *listener_count,
+				 int *speaker_count);
+
+void member_process_outgoing_frames(struct ast_conference* conf,
+				    struct ast_conf_member *member,
+				    struct conf_frame *send_frames);
+
+int is_video_eligible(struct ast_conf_member *member);
+
+// Member start and stop video methods
+void start_video(struct ast_conf_member *member);
+void stop_video(struct ast_conf_member *member);
+
+//
+// packer functions
+//
+
+struct ast_packer;
+
+extern struct ast_packer *ast_packer_new(int bytes);
+extern void ast_packer_set_flags(struct ast_packer *packer, int flags);
+extern int ast_packer_get_flags(struct ast_packer *packer);
+extern void ast_packer_free(struct ast_packer *s);
+extern void ast_packer_reset(struct ast_packer *s, int bytes);
+extern int ast_packer_feed(struct ast_packer *s, const struct ast_frame *f);
+extern struct ast_frame *ast_packer_read(struct ast_packer *s);
+#endif
-- 
1.5.4.1


asterisk-1.4.18-autoconf.patch:

--- NEW FILE asterisk-1.4.18-autoconf.patch ---
>From b5917767c12e2f856a59a2752dc2e577096a4d5d Mon Sep 17 00:00:00 2001
From: Jeffrey C. Ollie <jeff at ocjtech.us>
Date: Mon, 18 Feb 2008 09:09:19 -0600
Subject: [PATCH] Update autoconf.

---
 configure                        |  932 +++++++++++++++++++++++++++++++++++++-
 include/asterisk/autoconfig.h.in |    6 +
 2 files changed, 916 insertions(+), 22 deletions(-)

diff --git a/configure b/configure
index 12ac79b..07244aa 100755
--- a/configure
+++ b/configure
@@ -1,5 +1,5 @@
 #! /bin/sh
-# From configure.ac Revision: 98265 .
+# From configure.ac Revision.
 # Guess values for system-dependent variables and create Makefiles.
 # Generated by GNU Autoconf 2.61 for asterisk 1.4.
 #
@@ -722,6 +722,10 @@ ALSA_LIB
 ALSA_INCLUDE
 ALSA_DIR
 PBX_ALSA
+BLUETOOTH_LIB
+BLUETOOTH_INCLUDE
+BLUETOOTH_DIR
+PBX_BLUETOOTH
 CURL_LIB
 CURL_INCLUDE
 CURL_DIR
@@ -822,6 +826,10 @@ RADIUS_LIB
 RADIUS_INCLUDE
 RADIUS_DIR
 PBX_RADIUS
+SPANDSP_LIB
+SPANDSP_INCLUDE
+SPANDSP_DIR
+PBX_SPANDSP
 SPEEX_LIB
 SPEEX_INCLUDE
 SPEEX_DIR
@@ -1510,6 +1518,7 @@ Optional Packages:
   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
   --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
   --with-asound=PATH      use Advanced Linux Sound Architecture files in PATH
+  --with-bluetooth=PATH   use Bluetooth Support files in PATH
   --with-curl=PATH        use cURL files in PATH
   --with-cap=PATH         use POSIX 1.e capabilities files in PATH
   --with-curses=PATH      use curses files in PATH
@@ -1536,6 +1545,7 @@ Optional Packages:
   --with-pwlib=PATH       use PWlib files in PATH
   --with-h323=PATH        use OpenH323 files in PATH
   --with-radius=PATH      use Radius Client files in PATH
+  --with-spandsp=PATH     use spandsp Library files in PATH
   --with-speex=PATH       use Speex files in PATH
   --with-speexdsp=PATH    use Speexdsp files in PATH
   --with-sqlite=PATH      use SQLite files in PATH
@@ -7774,6 +7784,34 @@ PBX_ALSA=0
 
 
 
+BLUETOOTH_DESCRIP="Bluetooth Support"
+BLUETOOTH_OPTION="bluetooth"
+
+# Check whether --with-bluetooth was given.
+if test "${with_bluetooth+set}" = set; then
+  withval=$with_bluetooth;
+case ${withval} in
+     n|no)
+     USE_BLUETOOTH=no
+     ;;
+     y|ye|yes)
+     BLUETOOTH_MANDATORY="yes"
+     ;;
+     *)
+     BLUETOOTH_DIR="${withval}"
+     BLUETOOTH_MANDATORY="yes"
+     ;;
+esac
+
+fi
+
+PBX_BLUETOOTH=0
+
+
+
+
+
+
 CURL_DESCRIP="cURL"
 CURL_OPTION="curl"
 
@@ -8474,6 +8512,34 @@ PBX_RADIUS=0
 
 
 
+SPANDSP_DESCRIP="spandsp Library"
+SPANDSP_OPTION="spandsp"
+
+# Check whether --with-spandsp was given.
+if test "${with_spandsp+set}" = set; then
+  withval=$with_spandsp;
+case ${withval} in
+     n|no)
+     USE_SPANDSP=no
+     ;;
+     y|ye|yes)
+     SPANDSP_MANDATORY="yes"
+     ;;
+     *)
+     SPANDSP_DIR="${withval}"
+     SPANDSP_MANDATORY="yes"
+     ;;
+esac
+
+fi
+
+PBX_SPANDSP=0
+
+
+
+
+
+
 SPEEX_DESCRIP="Speex"
 SPEEX_OPTION="speex"
 
@@ -12092,13 +12158,11 @@ _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
-#include <sys/types.h> /* for off_t */
-     #include <stdio.h>
+#include <stdio.h>
 int
 main ()
 {
-int (*fp) (FILE *, off_t, int) = fseeko;
-     return fseeko (stdin, 0, 0) && fp (stdin, 0, 0);
+return fseeko (stdin, 0, 0) && (fseeko) (stdin, 0, 0);
   ;
   return 0;
 }
@@ -12138,13 +12202,11 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #define _LARGEFILE_SOURCE 1
-#include <sys/types.h> /* for off_t */
-     #include <stdio.h>
+#include <stdio.h>
 int
 main ()
 {
-int (*fp) (FILE *, off_t, int) = fseeko;
-     return fseeko (stdin, 0, 0) && fp (stdin, 0, 0);
+return fseeko (stdin, 0, 0) && (fseeko) (stdin, 0, 0);
   ;
   return 0;
 }
@@ -16861,6 +16923,415 @@ fi
 
 
 
+if test "${USE_BLUETOOTH}" != "no"; then
+   pbxlibdir=""
+   if test "x${BLUETOOTH_DIR}" != "x"; then
+      if test -d ${BLUETOOTH_DIR}/lib; then
+      	 pbxlibdir="-L${BLUETOOTH_DIR}/lib"
+      else
+      	 pbxlibdir="-L${BLUETOOTH_DIR}"
+      fi
+   fi
+   { echo "$as_me:$LINENO: checking for ba2str in -lbluetooth" >&5
+echo $ECHO_N "checking for ba2str in -lbluetooth... $ECHO_C" >&6; }
+if test "${ac_cv_lib_bluetooth_ba2str+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lbluetooth ${pbxlibdir}  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char ba2str ();
+int
+main ()
+{
+return ba2str ();
+  ;
+  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
+  ac_cv_lib_bluetooth_ba2str=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_bluetooth_ba2str=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_bluetooth_ba2str" >&5
+echo "${ECHO_T}$ac_cv_lib_bluetooth_ba2str" >&6; }
+if test $ac_cv_lib_bluetooth_ba2str = yes; then
+  AST_BLUETOOTH_FOUND=yes
+else
+  AST_BLUETOOTH_FOUND=no
+fi
+
+
+   if test "${AST_BLUETOOTH_FOUND}" = "yes"; then
+      BLUETOOTH_LIB="-lbluetooth "
+      BLUETOOTH_HEADER_FOUND="1"
+      if test "x${BLUETOOTH_DIR}" != "x"; then
+         BLUETOOTH_LIB="${pbxlibdir} ${BLUETOOTH_LIB}"
+	 BLUETOOTH_INCLUDE="-I${BLUETOOTH_DIR}/include"
+	 saved_cppflags="${CPPFLAGS}"
+	 CPPFLAGS="${CPPFLAGS} -I${BLUETOOTH_DIR}/include"
+	 if test "xbluetooth/bluetooth.h" != "x" ; then
+	    as_ac_Header=`echo "ac_cv_header_${BLUETOOTH_DIR}/include/bluetooth/bluetooth.h" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { echo "$as_me:$LINENO: checking for ${BLUETOOTH_DIR}/include/bluetooth/bluetooth.h" >&5
+echo $ECHO_N "checking for ${BLUETOOTH_DIR}/include/bluetooth/bluetooth.h... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking ${BLUETOOTH_DIR}/include/bluetooth/bluetooth.h usability" >&5
+echo $ECHO_N "checking ${BLUETOOTH_DIR}/include/bluetooth/bluetooth.h usability... $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.  */
+$ac_includes_default
+#include <${BLUETOOTH_DIR}/include/bluetooth/bluetooth.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+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_compile") 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_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking ${BLUETOOTH_DIR}/include/bluetooth/bluetooth.h presence" >&5
+echo $ECHO_N "checking ${BLUETOOTH_DIR}/include/bluetooth/bluetooth.h presence... $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 <${BLUETOOTH_DIR}/include/bluetooth/bluetooth.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+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_cpp conftest.$ac_ext") 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); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: ${BLUETOOTH_DIR}/include/bluetooth/bluetooth.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: ${BLUETOOTH_DIR}/include/bluetooth/bluetooth.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: ${BLUETOOTH_DIR}/include/bluetooth/bluetooth.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: ${BLUETOOTH_DIR}/include/bluetooth/bluetooth.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: ${BLUETOOTH_DIR}/include/bluetooth/bluetooth.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: ${BLUETOOTH_DIR}/include/bluetooth/bluetooth.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: ${BLUETOOTH_DIR}/include/bluetooth/bluetooth.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: ${BLUETOOTH_DIR}/include/bluetooth/bluetooth.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: ${BLUETOOTH_DIR}/include/bluetooth/bluetooth.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: ${BLUETOOTH_DIR}/include/bluetooth/bluetooth.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: ${BLUETOOTH_DIR}/include/bluetooth/bluetooth.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: ${BLUETOOTH_DIR}/include/bluetooth/bluetooth.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: ${BLUETOOTH_DIR}/include/bluetooth/bluetooth.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: ${BLUETOOTH_DIR}/include/bluetooth/bluetooth.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: ${BLUETOOTH_DIR}/include/bluetooth/bluetooth.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: ${BLUETOOTH_DIR}/include/bluetooth/bluetooth.h: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## ------------------------------- ##
+## Report this to www.asterisk.org ##
+## ------------------------------- ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for ${BLUETOOTH_DIR}/include/bluetooth/bluetooth.h" >&5
+echo $ECHO_N "checking for ${BLUETOOTH_DIR}/include/bluetooth/bluetooth.h... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  BLUETOOTH_HEADER_FOUND=1
+else
+  BLUETOOTH_HEADER_FOUND=0
+fi
+
+
+	 fi
+	 CPPFLAGS="${saved_cppflags}"
+      else
+	 if test "xbluetooth/bluetooth.h" != "x" ; then
+            if test "${ac_cv_header_bluetooth_bluetooth_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for bluetooth/bluetooth.h" >&5
+echo $ECHO_N "checking for bluetooth/bluetooth.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_bluetooth_bluetooth_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_bluetooth_bluetooth_h" >&5
+echo "${ECHO_T}$ac_cv_header_bluetooth_bluetooth_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking bluetooth/bluetooth.h usability" >&5
+echo $ECHO_N "checking bluetooth/bluetooth.h usability... $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.  */
+$ac_includes_default
+#include <bluetooth/bluetooth.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+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_compile") 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_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking bluetooth/bluetooth.h presence" >&5
+echo $ECHO_N "checking bluetooth/bluetooth.h presence... $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 <bluetooth/bluetooth.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+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_cpp conftest.$ac_ext") 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); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: bluetooth/bluetooth.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: bluetooth/bluetooth.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: bluetooth/bluetooth.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: bluetooth/bluetooth.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: bluetooth/bluetooth.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: bluetooth/bluetooth.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: bluetooth/bluetooth.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: bluetooth/bluetooth.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: bluetooth/bluetooth.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: bluetooth/bluetooth.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: bluetooth/bluetooth.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: bluetooth/bluetooth.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: bluetooth/bluetooth.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: bluetooth/bluetooth.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: bluetooth/bluetooth.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: bluetooth/bluetooth.h: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## ------------------------------- ##
+## Report this to www.asterisk.org ##
+## ------------------------------- ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for bluetooth/bluetooth.h" >&5
+echo $ECHO_N "checking for bluetooth/bluetooth.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_bluetooth_bluetooth_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_bluetooth_bluetooth_h=$ac_header_preproc
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_bluetooth_bluetooth_h" >&5
+echo "${ECHO_T}$ac_cv_header_bluetooth_bluetooth_h" >&6; }
+
+fi
+if test $ac_cv_header_bluetooth_bluetooth_h = yes; then
+  BLUETOOTH_HEADER_FOUND=1
+else
+  BLUETOOTH_HEADER_FOUND=0
+fi
+
+
+	 fi
+      fi
+      if test "x${BLUETOOTH_HEADER_FOUND}" = "x0" ; then
+         if test -n "${BLUETOOTH_MANDATORY}" ;
+         then
+            { echo "$as_me:$LINENO: ***" >&5
+echo "$as_me: ***" >&6;}
+            { echo "$as_me:$LINENO: *** It appears that you do not have the bluetooth development package installed." >&5
+echo "$as_me: *** It appears that you do not have the bluetooth development package installed." >&6;}
+            { echo "$as_me:$LINENO: *** Please install it to include ${BLUETOOTH_DESCRIP} support, or re-run configure" >&5
+echo "$as_me: *** Please install it to include ${BLUETOOTH_DESCRIP} support, or re-run configure" >&6;}
+            { echo "$as_me:$LINENO: *** without explicitly specifying --with-${BLUETOOTH_OPTION}" >&5
+echo "$as_me: *** without explicitly specifying --with-${BLUETOOTH_OPTION}" >&6;}
+            exit 1
+         fi
+         BLUETOOTH_LIB=""
+         BLUETOOTH_INCLUDE=""
+         PBX_BLUETOOTH=0
+      else
+         PBX_BLUETOOTH=1
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_BLUETOOTH 1
+_ACEOF
+
+      fi
+   elif test -n "${BLUETOOTH_MANDATORY}";
+   then
+      { echo "$as_me:$LINENO: ***" >&5
+echo "$as_me: ***" >&6;}
+      { echo "$as_me:$LINENO: *** The ${BLUETOOTH_DESCRIP} installation on this system appears to be broken." >&5
+echo "$as_me: *** The ${BLUETOOTH_DESCRIP} installation on this system appears to be broken." >&6;}
+      { echo "$as_me:$LINENO: *** Either correct the installation, or run configure" >&5
+echo "$as_me: *** Either correct the installation, or run configure" >&6;}
+      { echo "$as_me:$LINENO: *** without explicitly specifying --with-${BLUETOOTH_OPTION}" >&5
+echo "$as_me: *** without explicitly specifying --with-${BLUETOOTH_OPTION}" >&6;}
+      exit 1
+   fi
+fi
+
+
+
 if test "${USE_CURSES}" != "no"; then
    pbxlibdir=""
    if test "x${CURSES_DIR}" != "x"; then
@@ -28165,6 +28636,415 @@ fi
 
 
 
+if test "${USE_SPANDSP}" != "no"; then
+   pbxlibdir=""
+   if test "x${SPANDSP_DIR}" != "x"; then
+      if test -d ${SPANDSP_DIR}/lib; then
+      	 pbxlibdir="-L${SPANDSP_DIR}/lib"
+      else
+      	 pbxlibdir="-L${SPANDSP_DIR}"
+      fi
+   fi
+   { echo "$as_me:$LINENO: checking for fax_init in -lspandsp" >&5
+echo $ECHO_N "checking for fax_init in -lspandsp... $ECHO_C" >&6; }
+if test "${ac_cv_lib_spandsp_fax_init+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lspandsp ${pbxlibdir} -ltiff $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char fax_init ();
+int
+main ()
+{
+return fax_init ();
+  ;
+  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
+  ac_cv_lib_spandsp_fax_init=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_spandsp_fax_init=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_spandsp_fax_init" >&5
+echo "${ECHO_T}$ac_cv_lib_spandsp_fax_init" >&6; }
+if test $ac_cv_lib_spandsp_fax_init = yes; then
+  AST_SPANDSP_FOUND=yes
+else
+  AST_SPANDSP_FOUND=no
+fi
+
+
+   if test "${AST_SPANDSP_FOUND}" = "yes"; then
+      SPANDSP_LIB="-lspandsp -ltiff"
+      SPANDSP_HEADER_FOUND="1"
+      if test "x${SPANDSP_DIR}" != "x"; then
+         SPANDSP_LIB="${pbxlibdir} ${SPANDSP_LIB}"
+	 SPANDSP_INCLUDE="-I${SPANDSP_DIR}/include"
+	 saved_cppflags="${CPPFLAGS}"
+	 CPPFLAGS="${CPPFLAGS} -I${SPANDSP_DIR}/include"
+	 if test "xspandsp.h" != "x" ; then
+	    as_ac_Header=`echo "ac_cv_header_${SPANDSP_DIR}/include/spandsp.h" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { echo "$as_me:$LINENO: checking for ${SPANDSP_DIR}/include/spandsp.h" >&5
+echo $ECHO_N "checking for ${SPANDSP_DIR}/include/spandsp.h... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking ${SPANDSP_DIR}/include/spandsp.h usability" >&5
+echo $ECHO_N "checking ${SPANDSP_DIR}/include/spandsp.h usability... $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.  */
+$ac_includes_default
+#include <${SPANDSP_DIR}/include/spandsp.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+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_compile") 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_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking ${SPANDSP_DIR}/include/spandsp.h presence" >&5
+echo $ECHO_N "checking ${SPANDSP_DIR}/include/spandsp.h presence... $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 <${SPANDSP_DIR}/include/spandsp.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+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_cpp conftest.$ac_ext") 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); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: ${SPANDSP_DIR}/include/spandsp.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: ${SPANDSP_DIR}/include/spandsp.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: ${SPANDSP_DIR}/include/spandsp.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: ${SPANDSP_DIR}/include/spandsp.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: ${SPANDSP_DIR}/include/spandsp.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: ${SPANDSP_DIR}/include/spandsp.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: ${SPANDSP_DIR}/include/spandsp.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: ${SPANDSP_DIR}/include/spandsp.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: ${SPANDSP_DIR}/include/spandsp.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: ${SPANDSP_DIR}/include/spandsp.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: ${SPANDSP_DIR}/include/spandsp.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: ${SPANDSP_DIR}/include/spandsp.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: ${SPANDSP_DIR}/include/spandsp.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: ${SPANDSP_DIR}/include/spandsp.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: ${SPANDSP_DIR}/include/spandsp.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: ${SPANDSP_DIR}/include/spandsp.h: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## ------------------------------- ##
+## Report this to www.asterisk.org ##
+## ------------------------------- ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for ${SPANDSP_DIR}/include/spandsp.h" >&5
+echo $ECHO_N "checking for ${SPANDSP_DIR}/include/spandsp.h... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  SPANDSP_HEADER_FOUND=1
+else
+  SPANDSP_HEADER_FOUND=0
+fi
+
+
+	 fi
+	 CPPFLAGS="${saved_cppflags}"
+      else
+	 if test "xspandsp.h" != "x" ; then
+            if test "${ac_cv_header_spandsp_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for spandsp.h" >&5
+echo $ECHO_N "checking for spandsp.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_spandsp_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_spandsp_h" >&5
+echo "${ECHO_T}$ac_cv_header_spandsp_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking spandsp.h usability" >&5
+echo $ECHO_N "checking spandsp.h usability... $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.  */
+$ac_includes_default
+#include <spandsp.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+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_compile") 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_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking spandsp.h presence" >&5
+echo $ECHO_N "checking spandsp.h presence... $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 <spandsp.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+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_cpp conftest.$ac_ext") 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); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: spandsp.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: spandsp.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: spandsp.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: spandsp.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: spandsp.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: spandsp.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: spandsp.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: spandsp.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: spandsp.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: spandsp.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: spandsp.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: spandsp.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: spandsp.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: spandsp.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: spandsp.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: spandsp.h: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## ------------------------------- ##
+## Report this to www.asterisk.org ##
+## ------------------------------- ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for spandsp.h" >&5
+echo $ECHO_N "checking for spandsp.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_spandsp_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_spandsp_h=$ac_header_preproc
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_spandsp_h" >&5
+echo "${ECHO_T}$ac_cv_header_spandsp_h" >&6; }
+
+fi
+if test $ac_cv_header_spandsp_h = yes; then
+  SPANDSP_HEADER_FOUND=1
+else
+  SPANDSP_HEADER_FOUND=0
+fi
+
+
+	 fi
+      fi
+      if test "x${SPANDSP_HEADER_FOUND}" = "x0" ; then
+         if test -n "${SPANDSP_MANDATORY}" ;
+         then
+            { echo "$as_me:$LINENO: ***" >&5
+echo "$as_me: ***" >&6;}
+            { echo "$as_me:$LINENO: *** It appears that you do not have the spandsp development package installed." >&5
+echo "$as_me: *** It appears that you do not have the spandsp development package installed." >&6;}
+            { echo "$as_me:$LINENO: *** Please install it to include ${SPANDSP_DESCRIP} support, or re-run configure" >&5
+echo "$as_me: *** Please install it to include ${SPANDSP_DESCRIP} support, or re-run configure" >&6;}
+            { echo "$as_me:$LINENO: *** without explicitly specifying --with-${SPANDSP_OPTION}" >&5
+echo "$as_me: *** without explicitly specifying --with-${SPANDSP_OPTION}" >&6;}
+            exit 1
+         fi
+         SPANDSP_LIB=""
+         SPANDSP_INCLUDE=""
+         PBX_SPANDSP=0
+      else
+         PBX_SPANDSP=1
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_SPANDSP 1
+_ACEOF
+
+      fi
+   elif test -n "${SPANDSP_MANDATORY}";
+   then
+      { echo "$as_me:$LINENO: ***" >&5
+echo "$as_me: ***" >&6;}
+      { echo "$as_me:$LINENO: *** The ${SPANDSP_DESCRIP} installation on this system appears to be broken." >&5
+echo "$as_me: *** The ${SPANDSP_DESCRIP} installation on this system appears to be broken." >&6;}
+      { echo "$as_me:$LINENO: *** Either correct the installation, or run configure" >&5
+echo "$as_me: *** Either correct the installation, or run configure" >&6;}
+      { echo "$as_me:$LINENO: *** without explicitly specifying --with-${SPANDSP_OPTION}" >&5
+echo "$as_me: *** without explicitly specifying --with-${SPANDSP_OPTION}" >&6;}
+      exit 1
+   fi
+fi
+
+
+
 if test "${USE_SPEEX}" != "no"; then
    pbxlibdir=""
    if test "x${SPEEX_DIR}" != "x"; then
@@ -34925,6 +35805,10 @@ ALSA_LIB!$ALSA_LIB$ac_delim
 ALSA_INCLUDE!$ALSA_INCLUDE$ac_delim
 ALSA_DIR!$ALSA_DIR$ac_delim
 PBX_ALSA!$PBX_ALSA$ac_delim
+BLUETOOTH_LIB!$BLUETOOTH_LIB$ac_delim
+BLUETOOTH_INCLUDE!$BLUETOOTH_INCLUDE$ac_delim
+BLUETOOTH_DIR!$BLUETOOTH_DIR$ac_delim
+PBX_BLUETOOTH!$PBX_BLUETOOTH$ac_delim
 CURL_LIB!$CURL_LIB$ac_delim
 CURL_INCLUDE!$CURL_INCLUDE$ac_delim
 CURL_DIR!$CURL_DIR$ac_delim
@@ -35013,10 +35897,6 @@ PRI_LIB!$PRI_LIB$ac_delim
 PRI_INCLUDE!$PRI_INCLUDE$ac_delim
 PRI_DIR!$PRI_DIR$ac_delim
 PBX_PRI!$PBX_PRI$ac_delim
-PWLIB_LIB!$PWLIB_LIB$ac_delim
-PWLIB_INCLUDE!$PWLIB_INCLUDE$ac_delim
-PWLIB_DIR!$PWLIB_DIR$ac_delim
-PBX_PWLIB!$PBX_PWLIB$ac_delim
 _ACEOF
 
   if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then
@@ -35058,6 +35938,10 @@ _ACEOF
 ac_delim='%!_!# '
 for ac_last_try in false false false false false :; do
   cat >conf$$subs.sed <<_ACEOF
+PWLIB_LIB!$PWLIB_LIB$ac_delim
+PWLIB_INCLUDE!$PWLIB_INCLUDE$ac_delim
+PWLIB_DIR!$PWLIB_DIR$ac_delim
+PBX_PWLIB!$PBX_PWLIB$ac_delim
 OPENH323_LIB!$OPENH323_LIB$ac_delim
 OPENH323_INCLUDE!$OPENH323_INCLUDE$ac_delim
 OPENH323_DIR!$OPENH323_DIR$ac_delim
@@ -35066,6 +35950,10 @@ RADIUS_LIB!$RADIUS_LIB$ac_delim
 RADIUS_INCLUDE!$RADIUS_INCLUDE$ac_delim
 RADIUS_DIR!$RADIUS_DIR$ac_delim
 PBX_RADIUS!$PBX_RADIUS$ac_delim
+SPANDSP_LIB!$SPANDSP_LIB$ac_delim
+SPANDSP_INCLUDE!$SPANDSP_INCLUDE$ac_delim
+SPANDSP_DIR!$SPANDSP_DIR$ac_delim
+PBX_SPANDSP!$PBX_SPANDSP$ac_delim
 SPEEX_LIB!$SPEEX_LIB$ac_delim
 SPEEX_INCLUDE!$SPEEX_INCLUDE$ac_delim
 SPEEX_DIR!$SPEEX_DIR$ac_delim
@@ -35147,14 +36035,6 @@ PBX_ZAPTEL_VLDTMF!$PBX_ZAPTEL_VLDTMF$ac_delim
 PBX_ZAPTEL_TRANSCODE!$PBX_ZAPTEL_TRANSCODE$ac_delim
 EDITLINE_LIB!$EDITLINE_LIB$ac_delim
 PBX_H323!$PBX_H323$ac_delim
-PBX_IXJUSER!$PBX_IXJUSER$ac_delim
-GTKCONFIG!$GTKCONFIG$ac_delim
-PBX_GTK!$PBX_GTK$ac_delim
-GTK_INCLUDE!$GTK_INCLUDE$ac_delim
-GTK_LIB!$GTK_LIB$ac_delim
-PKGCONFIG!$PKGCONFIG$ac_delim
-PBX_GTK2!$PBX_GTK2$ac_delim
-GTK2_INCLUDE!$GTK2_INCLUDE$ac_delim
 _ACEOF
 
   if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then
@@ -35196,12 +36076,20 @@ _ACEOF
 ac_delim='%!_!# '
 for ac_last_try in false false false false false :; do
   cat >conf$$subs.sed <<_ACEOF
+PBX_IXJUSER!$PBX_IXJUSER$ac_delim
+GTKCONFIG!$GTKCONFIG$ac_delim
+PBX_GTK!$PBX_GTK$ac_delim
+GTK_INCLUDE!$GTK_INCLUDE$ac_delim
+GTK_LIB!$GTK_LIB$ac_delim
+PKGCONFIG!$PKGCONFIG$ac_delim
+PBX_GTK2!$PBX_GTK2$ac_delim
+GTK2_INCLUDE!$GTK2_INCLUDE$ac_delim
 GTK2_LIB!$GTK2_LIB$ac_delim
 CURL_CONFIG!$CURL_CONFIG$ac_delim
 LTLIBOBJS!$LTLIBOBJS$ac_delim
 _ACEOF
 
-  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 3; then
+  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 11; then
     break
   elif $ac_last_try; then
     { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
diff --git a/include/asterisk/autoconfig.h.in b/include/asterisk/autoconfig.h.in
index bc56690..866ceb7 100644
--- a/include/asterisk/autoconfig.h.in
+++ b/include/asterisk/autoconfig.h.in
@@ -59,6 +59,9 @@
 /* Define to 1 if your GCC C compiler supports the 'unused' attribute. */
 #undef HAVE_ATTRIBUTE_unused
 
+/* Define to indicate the ${BLUETOOTH_DESCRIP} library */
+#undef HAVE_BLUETOOTH
+
 /* Define to 1 if you have the `bzero' function. */
 #undef HAVE_BZERO
 
@@ -326,6 +329,9 @@
 /* Define to 1 if your system has soxmix application. */
 #undef HAVE_SOXMIX
 
+/* Define to indicate the ${SPANDSP_DESCRIP} library */
+#undef HAVE_SPANDSP
+
 /* Define to indicate the ${SPEEX_DESCRIP} library */
 #undef HAVE_SPEEX
 
-- 
1.5.4.1


asterisk-1.4.18-chanmobile.patch:

--- NEW FILE asterisk-1.4.18-chanmobile.patch ---
>From 2fa124a4329da73868c62f73cb39250572947e44 Mon Sep 17 00:00:00 2001
From: Jeffrey C. Ollie <jeff at ocjtech.us>
Date: Sun, 18 Nov 2007 22:25:43 -0600
Subject: [PATCH] Add chan_mobile (backported from asterisk-addons trunk).

---
 build_tools/menuselect-deps.in |    1 +
 channels/Makefile              |    2 +
 channels/chan_mobile.c         | 2126 ++++++++++++++++++++++++++++++++++++++++
 configs/mobile.conf.sample     |   60 ++
 configure.ac                   |    3 +
 doc/chan_mobile.txt            |  240 +++++
 makeopts.in                    |    3 +
 7 files changed, 2435 insertions(+), 0 deletions(-)
 create mode 100644 channels/chan_mobile.c
 create mode 100644 configs/mobile.conf.sample
 create mode 100644 doc/chan_mobile.txt

diff --git a/build_tools/menuselect-deps.in b/build_tools/menuselect-deps.in
index 6bf5131..6a6e3a2 100644
--- a/build_tools/menuselect-deps.in
+++ b/build_tools/menuselect-deps.in
@@ -1,4 +1,5 @@
 ASOUND=@PBX_ALSA@
+BLUETOOTH=@PBX_BLUETOOTH@
 CURL=@PBX_CURL@
 FREETDS=@PBX_FREETDS@
 GSM=@PBX_GSM@
diff --git a/channels/Makefile b/channels/Makefile
index f5e96c7..9844128 100644
--- a/channels/Makefile
+++ b/channels/Makefile
@@ -124,4 +124,6 @@ misdn/isdn_lib.o: ASTCFLAGS+=-Wno-strict-aliasing
 
 $(if $(filter chan_misdn,$(EMBEDDED_MODS)),modules.link,chan_misdn.so): chan_misdn.o misdn_config.o misdn/isdn_lib.o misdn/isdn_msg_parser.o
 
+chan_mobile.so: LIBS+=$(BLUETOOTH_LIB)
+
 chan_vpb.oo: ASTCFLAGS:=$(filter-out -Wdeclaration-after-statement,$(ASTCFLAGS))
diff --git a/channels/chan_mobile.c b/channels/chan_mobile.c
new file mode 100644
index 0000000..e3f5ec3
--- /dev/null
+++ b/channels/chan_mobile.c
@@ -0,0 +1,2126 @@
+/*
+ * Asterisk -- An open source telephony toolkit.
+ *
+ * Copyright (C) 1999 - 2006, Digium, Inc.
+ *
+ * Mark Spencer <markster at digium.com>
+ *
+ * See http://www.asterisk.org for more information about
+ * the Asterisk project. Please do not directly contact
+ * any of the maintainers of this project for assistance;
+ * the project provides a web site, mailing lists and IRC
+ * channels for your use.
+ *
+ * This program is free software, distributed under the terms of
+ * the GNU General Public License Version 2. See the LICENSE file
+ * at the top of the source tree.
+ */
+
+/*! \file
+ *
+ * \brief Bluetooth Mobile Device channel driver
+ *
+ * \author Dave Bowerman <david.bowerman at gmail.com>
+ *
+ * \ingroup channel_drivers
+ */
+
+/*** MODULEINFO
+	<depend>bluetooth</depend>
+ ***/
+
+#include <asterisk.h>
+
+ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
+
+#include <stdio.h>
+#include <string.h>
+#include <sys/socket.h>
+#include <sys/time.h>
+#include <errno.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <arpa/inet.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include <signal.h>
+
+#include <bluetooth/bluetooth.h>
+#include <bluetooth/hci.h>
+#include <bluetooth/hci_lib.h>
+#include <bluetooth/sdp.h>
+#include <bluetooth/sdp_lib.h>
+#include <bluetooth/rfcomm.h>
+#include <bluetooth/sco.h>
+#include <bluetooth/l2cap.h>
+
+#include <asterisk/lock.h>
+#include <asterisk/channel.h>
+#include <asterisk/config.h>
+#include <asterisk/logger.h>
+#include <asterisk/module.h>
+#include <asterisk/pbx.h>
+#include <asterisk/options.h>
+#include <asterisk/utils.h>
+#include <asterisk/linkedlists.h>
+#include <asterisk/cli.h>
+#include <asterisk/devicestate.h>
+#include <asterisk/causes.h>
+#include <asterisk/dsp.h>
+#include <asterisk/app.h>
+#include <asterisk/manager.h>
+
+#define AST_MODULE "chan_mobile"
+
+#define MBL_CONFIG "mobile.conf"
+
+#define DEVICE_FRAME_SIZE 48
+#define DEVICE_FRAME_FORMAT AST_FORMAT_SLINEAR
+#define CHANNEL_FRAME_SIZE 320
+
+static int prefformat = DEVICE_FRAME_FORMAT;
+
+static int discovery_interval = 60;			/* The device discovery interval, default 60 seconds. */
+static pthread_t discovery_thread = AST_PTHREADT_NULL;	/* The discovery thread */
+static sdp_session_t *sdp_session;
+
+enum mbl_type {
+	MBL_TYPE_PHONE,
+	MBL_TYPE_HEADSET
+};
+
+enum mbl_state {
+	MBL_STATE_INIT = 0,
+	MBL_STATE_INIT1,
+	MBL_STATE_INIT2,
+	MBL_STATE_INIT3,
+	MBL_STATE_INIT4,
+	MBL_STATE_INIT5,
+	MBL_STATE_INIT6,
+	MBL_STATE_PREIDLE,
+	MBL_STATE_IDLE,
+	MBL_STATE_DIAL,
+	MBL_STATE_DIAL1,
+	MBL_STATE_OUTGOING,
+	MBL_STATE_RING,
+	MBL_STATE_RING2,
+	MBL_STATE_RING3,
+	MBL_STATE_INCOMING,
+	MBL_STATE_HANGUP,
+	MBL_STATE_INSMS,
+	MBL_STATE_OUTSMS,
+	MBL_STATE_OUTSMS1,
+	MBL_STATE_OUTSMS2
+};
+
+struct adapter_pvt {
+	int dev_id;					/* device id */
+	int hci_socket;					/* device descriptor */
+	char id[31];					/* the 'name' from mobile.conf */
+	bdaddr_t addr;					/* adddress of adapter */
+	unsigned int inuse:1;				/* are we in use ? */
+	unsigned int alignment_detection:1;		/* do alignment detection on this adpater? */
+	int sco_socket;
+	AST_LIST_ENTRY(adapter_pvt) entry;
+};
+
+static AST_LIST_HEAD_STATIC(adapters, adapter_pvt);
+
+struct mbl_pvt {
+	struct ast_channel *owner;			/* Channel we belong to, possibly NULL */
+	struct ast_frame fr;				/* "null" frame */
+	enum mbl_type type;				/* Phone or Headset */
+	char id[31];					/* The id from mobile.conf */
+	int group;					/* group number for group dialling */
+	bdaddr_t addr;					/* address of device */
+	struct adapter_pvt *adapter;			/* the adapter we use */
+	char context[AST_MAX_CONTEXT];			/* the context for incoming calls */
+	char connected;					/* is it connected? */
+	int rfcomm_port;				/* rfcomm port number */
+	int rfcomm_socket;				/* rfcomm socket descriptor */
+	char rfcomm_buf[256];
+	char io_buf[CHANNEL_FRAME_SIZE + AST_FRIENDLY_OFFSET];
+	char io_save_buf[DEVICE_FRAME_SIZE];
+	int io_save_len;
+	int io_pipe[2];
+	int sco_socket;					/* sco socket descriptor */
+	pthread_t sco_listener_thread;			/* inbound sco listener for this device */
+	enum mbl_state state;				/* monitor thread current state */
+	pthread_t monitor_thread;			/* monitor thread handle */
+	char dial_number[AST_MAX_EXTENSION];		/* number for the monitor thread to dial */
+	int dial_timeout;
+	char ciev_call_0[4];				/* dynamically built reponse strings */
+	char ciev_call_1[4];
+	char ciev_callsetup_0[4];
[...2122 lines suppressed...]
+
+See configs/mobile.conf.sample for an example and an explanation of the configuration.
+
+
+Using chan_mobile :-
+
+chan_mobile.so must be loaded either by loading it using the Asterisk CLI, or by adding it to /etc/asterisk/modules.conf
+
+Search for your bluetooth devices using the CLI command 'mobile search'. Be patient with this command as
+it will take 8 - 10 seconds to do the discovery. This requires a free adapter.
+
+Headsets will generally have to be put into 'pairing' mode before they will show up here.
+
+This will return something like the following :-
+
+*CLI> mobile search
+Address           Name                           Usable Type    Port
+00:12:56:90:6E:00 LG TU500                       Yes    Phone   4
+00:80:C8:35:52:78 Toaster                        No     Headset 0
+00:0B:9E:11:74:A5 Hello II Plus                  Yes    Headset 1
+00:0F:86:0E:AE:42 Daves Blackberry               Yes    Phone   7
+
+This is a list of all bluetooth devices seen and whether or not they are usable with chan_mobile.
+The Address field contains the 'bd address' of the device. This is like an ethernet mac address.
+The Name field is whatever is configured into the device as its name.
+The Usable field tells you whether or not the device supports the Bluetooth Handsfree Profile or Headset profile.
+The Type field tells you whether the device is usable as a Phone line (FXO) or a headset (FXS)
+The Port field is the number to put in the configuration file.
+
+Choose which device(s) you want to use and edit /etc/asterisk/mobile.conf. There is a sample included
+with the Asterisk-addons source under configs/mobile.conf.sample.
+
+Be sure to configure the right bd address and port number from the search. If you want inbound
+calls on a device to go to a specific context, add a context= line, otherwise the default will
+be used. The 'id' of the device [bitinbrackets] can be anything you like, just make it unique.
+
+If you are configuring a Headset be sure to include the type=headset line, if left out it defaults
+to phone.
+
+The CLI command 'mobile show devices' can be used at any time to show the status of configured devices,
+and whether or not the device is capable of sending / receiving SMS via bluetooth.
+
+*CLI> mobile show devices
+ID              Address           Group Adapter         Connected State SMS
+headset         00:0B:9E:11:AE:C6 0     blue            No        Init  No
+LGTU550         00:E0:91:7F:46:44 1     dlink           No        Init  No
+*CLI>
+
+As each phone is connected you will see a message on the Asterisk console :-
+
+ Loaded chan_mobile.so => (Bluetooth Mobile Device Channel Driver)
+    -- Bluetooth Device blackberry has connected.
+    -- Bluetooth Device dave has connected.
+
+To make outbound calls, add something to you Dialplan like the following :- (modify to suit)
+
+; Calls via LGTU5500
+exten => _9X.,1,Dial(Mobile/LGTU550/${EXTEN:1},45)
+exten => _9X.,n,Hangup
+
+To use channel groups, add an entry to each phones definition in mobile.conf like group=n
+where n is a number.
+
+Then if you do something like Dial(Mobile/g1/123456) Asterisk will dial 123456 on the first
+connected free phone in group 1.
+
+Phones which do not have a specific 'group=n' will be in group 0.
+
+
+To dial out on a headset, you need to use some other mechanism, because the headset is not likely
+to have all the needed buttons on it. res_clioriginate is good for this :-
+
+*CLI> originate Mobile/headset extension NNNNN at context
+
+This will call your headset, once you answer, Asterisk will call NNNNN at context context
+
+Dialplan hints :-
+
+chan_mobile supports 'device status' so you can do somthing like
+
+exten => 1234,hint,SIP/30&Mobile/dave&Mobile/blackberry
+
+
+MobileStatus Application :-
+
+chan_mobile also registers an application named MobileStatus. You can use this in your Dialplan
+to determine the 'state' of a device.
+
+For example, suppose you wanted to call dave's extension, but only if he was in the office. You could
+test to see if his mobile phone was attached to Asterisk, if it is dial his extension, otherwise dial his
+mobile phone.
+
+exten => 40,1,MobileStatus(dave,DAVECELL)
+exten => 40,2,GotoIf($["${DAVECELL}" = "1"]?3:5)
+exten => 40,3,Dial(ZAP/g1/0427466412,45,tT)
+exten => 40,4,Hangup
+exten => 40,5,Dial(SIP/40,45,tT)
+exten => 40,6,Hangup
+
+MobileStatus sets the value of the given variable to :-
+
+1 = Disconnected. i.e. Device not in range of Asterisk, or turned off etc etc
+2 = Connected and Not on a call. i.e. Free
+3 = Connected and on a call. i.e. Busy
+
+
+SMS Sending / Receiving
+
+If Asterisk has detected your mobile phone is capable of SMS via bluetooth, you will be able to send and
+receive SMS.
+
+Incoming SMS's cause Asterisk to create an inbound call to the context you defined in mobile.conf or the default
+context if you did not define one. The call will start at extension 'sms'. Two channel variables will be available,
+SMSSRC = the number of the originator of the SMS and SMSTXT which is the text of the SMS.
+This is not a voice call, so grab the values of the variables and hang the call up.
+
+So, to handle incoming SMS's, do something like the following in your dialplan
+
+[incoming-mobile]
+exten => sms,1,Verbose(Incoming SMS from ${SMSSRC} ${SMSTXT})
+exten => sms,n,Hangup()
+
+The above will just print the message on the console.
+
+If you use res_jabber, you could do something like this :-
+
+[incoming-mobile]
+exten => sms,1,JabberSend(transport,user at jabber.somewhere.com,SMS from ${SMSRC} ${SMSTXT})
+exten => sms,2,Hangup()
+
+To send an SMS, use the application MobileSendSMS like the following :-
+
+exten => 99,1,MobileSendSMS(dave,0427123456,Hello World)
+
+This will send 'Hello World' via device 'dave' to '0427123456'
+
+
+DTMF Debouncing :-
+
+DTMF detection varies from phone to phone. There is a configuration variable that allows you to tune
+this to your needs. e.g. in mobile.conf
+
+[LGTU550]
+address=00:12:56:90:6E:00
+port=4
+context=incoming-mobile
+dtmfskip=50
+
+change dtmfskip to suit your phone. The default is 200. The larger the number, the more chance of missed DTMF.
+The smaller the number the more chance of multiple digits being detected.
+
+
+Debugging :-
+
+Different phone manufacturers have different interpretations of the Bluetooth Handsfree Profile Spec.
+This means that not all phones work the same way, particularly in the connection setup / initialisation
+sequence. I've tried to make chan_mobile as general as possible, but it may need modification to
+support some phone i've never tested.
+
+Some phones, most notably Sony Ericsson 'T' series, dont quite conform to the Bluetooth HFP spec.
+chan_mobile will detect these and adapt accordingly. The T-610 and T-630 have been tested and
+work fine.
+
+If your phone doesnt behave has expected, turn on Asterisk debugging with 'core set debug 1'.
+
+This will log a bunch of debug messages indicating what the phone is doing, importantly the rfcomm
+conversation between Asterisk and the phone. This can be used to sort out what your phone is doing
+and make chan_mobile support it.
+
+Be aware also, that just about all mobile phones behave differently. For example my LG TU500 wont dial unless
+the phone is a the 'idle' screen. i.e. if the phone is showing a 'menu' on the display, when you dial via
+Asterisk, the call will not work. chan_mobile handles this, but there may be other phones that do
+other things too...
+
+Important: Watch what your mobile phone is doing the first few times. Asterisk wont make random calls but
+if chan_mobile fails to hangup for some reason and you get a huge bill from your telco, dont blame me ;)
+
+
+Feedback, Support, Please can you make Mobile Phone X work... etc :-
+
+as always, bugs should be reported at http://bugs.digium.com
+
+email me at   david.bowerman at gmail.com   or dseeb_ on #asterisk & #asterisk-dev irc.
diff --git a/makeopts.in b/makeopts.in
index 983c7a9..6ac8df7 100644
--- a/makeopts.in
+++ b/makeopts.in
@@ -66,6 +66,9 @@ AST_DECLARATION_AFTER_STATEMENT=@AST_DECLARATION_AFTER_STATEMENT@
 ASOUND_INCLUDE=@ALSA_INCLUDE@
 ASOUND_LIB=@ALSA_LIB@
 
+BLUETOOTH_LIB=@BLUETOOTH_LIB@
+BLUETOOTH_INCLUDE=@BLUETOOTH_INCLUDE@
+
 CURL_INCLUDE=@CURL_INCLUDE@
 CURL_LIB=@CURL_LIB@
 
-- 
1.5.4.1


asterisk-1.4.18-initscripts.patch:

--- NEW FILE asterisk-1.4.18-initscripts.patch ---
>From a95147ebb2d00cd9b6071a21250a8723fbe3c2fb Mon Sep 17 00:00:00 2001
From: Jeffrey C. Ollie <jeff at ocjtech.us>
Date: Sun, 18 Nov 2007 21:47:59 -0600
Subject: [PATCH] Modify init scripts for better Fedora compatibility.

---
 contrib/init.d/rc.redhat.asterisk |   59 +++++++++++++++++-------------------
 contrib/sysconfig/asterisk        |   16 ++++++++++
 2 files changed, 44 insertions(+), 31 deletions(-)
 create mode 100644 contrib/sysconfig/asterisk

diff --git a/contrib/init.d/rc.redhat.asterisk b/contrib/init.d/rc.redhat.asterisk
index 27d633e..6756002 100755
--- a/contrib/init.d/rc.redhat.asterisk
+++ b/contrib/init.d/rc.redhat.asterisk
@@ -3,7 +3,7 @@
 #
 # asterisk    Starts, Stops and Reloads Asterisk.
 #
-# chkconfig: 2345 90 60
+# chkconfig: - 90 60
 # description: Asterisk PBX and telephony daemon.
 # processname: asterisk
 # pidfile: /var/run/asterisk.pid
@@ -20,59 +20,56 @@
 # - Added support for -U and -G command line options
 # - Modified "reload" to call asterisk -rx 'reload' 
 
-# Use this option to specify a different configuration directory
-#AST_CONFIG=/etc/asterisk
+# Do not modify this script to change any of the settings, instead
+# edit /etc/sysconfig/asterisk
+
+# Specify the configuration file
+AST_CONFIG=/etc/asterisk/asterisk.conf
 
 # Installation directory
 AST_SBIN=/usr/sbin
 
-# Uncomment the following and set them to the user/groups that you
-# want to run Asterisk as. NOTE: this requires substantial work to
-# be sure that Asterisk's environment has permission to write the
-# files required  for  its  operation, including logs, its comm
-# socket, the asterisk database, etc.
-#AST_USER="asterisk"
+# The user that Asterisk will run as.
+AST_USER="asterisk"
+
+# If a user is specified above, Asterisk will change the group it runs
+# as to the primary group of the user, as well as initialize the
+# supplementary groups.  If you want to run Asterisk as a different
+# group, set AST_GROUP to the group that Asterisk should run as.  Note
+# that this may break Zaptel devices as supplementary groups will not
+# be initialized.
 #AST_GROUP="asterisk"
 
-# Source function library.
-. /etc/rc.d/init.d/functions
+# Allow configuration overrides in /etc/sysconfig/asterisk
+CONFIG0=`readlink $0`
+if [ "$CONFIG0" = "" ]; then
+	CONFIGFILE=/etc/sysconfig/`basename $0`
+else
+	CONFIGFILE=/etc/sysconfig/`basename $CONFIG0`
+fi
+[ -f $CONFIGFILE ] && . $CONFIGFILE
 
 if ! [ -x $AST_SBIN/asterisk ] ; then
 	echo "ERROR: $AST_SBIN/asterisk not found"
 	exit 0
 fi
 
-if ! [ -d $AST_CONFIG ] ; then
-	echo "ERROR: $AST_CONFIG directory not found"
+if ! [ -f $AST_CONFIG ] ; then
+	echo "ERROR: $AST_CONFIG not found"
 	exit 0
 fi
 
-# Uncomment this ONLY if you know what you are doing.
-# export LD_ASSUME_KERNEL=2.4.1
+# Source function library.
+. /etc/rc.d/init.d/functions
 
 # Full path to asterisk binary
 DAEMON=$AST_SBIN/asterisk
 
-# Full path to safe_asterisk script
-SAFE_ASTERISK=$AST_SBIN/safe_asterisk
-
-# Allow configuration overrides in /etc/sysconfig/asterisk
-CONFIG0=`readlink $0`
-if [ "$CONFIG0" = "" ]; then
-	CONFIGFILE=/etc/sysconfig/`basename $0`
-else
-	CONFIGFILE=/etc/sysconfig/`basename $CONFIG0`
-fi
-[ -x $CONFIGFILE ] && . $CONFIGFILE
-
 RETVAL=0
 
 start() {
 	# Start daemons.
 	echo -n $"Starting asterisk: "
-        if [ -f $SAFE_ASTERISK ] ; then
-		DAEMON=$SAFE_ASTERISK
-	fi
 	if [ $AST_USER ] ; then
 		ASTARGS="-U $AST_USER"
 	fi
@@ -91,7 +88,7 @@ start() {
 
 stop() {
 	# Stop daemons.
-	echo -n $"Shutting down asterisk: "
+	echo -n $"Stopping asterisk: "
 	killproc asterisk
 	RETVAL=$?
 	[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/asterisk
diff --git a/contrib/sysconfig/asterisk b/contrib/sysconfig/asterisk
new file mode 100644
index 0000000..2d3598a
--- /dev/null
+++ b/contrib/sysconfig/asterisk
@@ -0,0 +1,16 @@
+# Specify the configuration file
+AST_CONFIG=/etc/asterisk/asterisk.conf
+
+# Installation directory
+AST_SBIN=/usr/sbin
+
+# The user that Asterisk will run as.
+AST_USER="asterisk"
+
+# If a user is specified above, Asterisk will change the group it runs
+# as to the primary group of the user, as well as initialize the
+# supplementary groups.  If you want to run Asterisk as a different
+# group, set AST_GROUP to the group that Asterisk should run as.  Note
+# that this may break Zaptel devices as supplementary groups will not
+# be initialized.
+#AST_GROUP="asterisk"
-- 
1.5.4.1


asterisk-1.4.18-optimization.patch:

--- NEW FILE asterisk-1.4.18-optimization.patch ---
>From f3359ab4608ea90ac03dd90f5e7249256c107dcc Mon Sep 17 00:00:00 2001
From: Jeffrey C. Ollie <jcollie at pc21224.campus.dmacc.edu>
Date: Thu, 8 Nov 2007 16:42:14 -0600
Subject: [PATCH] Pick proper optimization flags for Fedora.

---
 Makefile |   16 ++++++++++++----
 1 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/Makefile b/Makefile
index 5343672..e932f90 100644
--- a/Makefile
+++ b/Makefile
@@ -198,10 +198,16 @@ ifeq ($(OSARCH),linux-gnu)
 endif
 
 ifeq ($(findstring -save-temps,$(ASTCFLAGS)),)
-ASTCFLAGS+=-pipe
+  ifeq ($(findstring -pipe,$(ASTCFLAGS)),)
+    ASTCFLAGS+=-pipe
+  endif
+endif
+
+ifeq ($(findstring -Wall,$(ASTCFLAGS)),)
+  ASTCFLAGS+=-Wall
 endif
 
-ASTCFLAGS+=-Wall -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations $(DEBUG)
+ASTCFLAGS+=-Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations $(DEBUG)
 
 ASTCFLAGS+=-include $(ASTTOPDIR)/include/asterisk/autoconfig.h
 
@@ -214,8 +220,10 @@ ifneq ($(findstring BSD,$(OSARCH)),)
   ASTLDFLAGS+=-L/usr/local/lib
 endif
 
-ifneq ($(PROC),ultrasparc)
-  ASTCFLAGS+=$(shell if $(CC) -march=$(PROC) -S -o /dev/null -xc /dev/null >/dev/null 2>&1; then echo "-march=$(PROC)"; fi)
+ifeq ($(findstring -march,$(ASTCFLAGS)),)
+  ifneq ($(PROC),ultrasparc)
+    ASTCFLAGS+=$(shell if $(CC) -march=$(PROC) -S -o /dev/null -xc /dev/null >/dev/null 2>&1; then echo "-march=$(PROC)"; fi)
+  endif
 endif
 
 ifeq ($(PROC),ppc)
-- 
1.5.4.1


asterisk-1.4.18-spandspfax.patch:

--- NEW FILE asterisk-1.4.18-spandspfax.patch ---
>From ffc11985802a32f48138695cb9e33a33f379d844 Mon Sep 17 00:00:00 2001
From: Jeffrey C. Ollie <jeff at ocjtech.us>
Date: Mon, 12 Nov 2007 15:51:12 -0600
Subject: [PATCH] Add FAX apps.

---
 apps/app_rxfax.c               |  380 ++++++++++++++++++++++++++++++++++++++++
 apps/app_txfax.c               |  306 ++++++++++++++++++++++++++++++++
 build_tools/menuselect-deps.in |    1 +
 configure.ac                   |    3 +
 makeopts.in                    |    3 +
 5 files changed, 693 insertions(+), 0 deletions(-)
 create mode 100644 apps/app_rxfax.c
 create mode 100644 apps/app_txfax.c

diff --git a/apps/app_rxfax.c b/apps/app_rxfax.c
new file mode 100644
index 0000000..bd81ea1
--- /dev/null
+++ b/apps/app_rxfax.c
@@ -0,0 +1,380 @@
+/*
+ * Asterisk -- A telephony toolkit for Linux.
+ *
+ * Trivial application to receive a TIFF FAX file
+ *
+ * Copyright (C) 2003, Steve Underwood
+ *
+ * Steve Underwood <steveu at coppice.org>
+ *
+ * This program is free software, distributed under the terms of
+ * the GNU General Public License
+ */
+
+/*** MODULEINFO
+         <depend>spandsp</depend>
+***/
+
+#include "asterisk.h"
+
+ASTERISK_FILE_VERSION(__FILE__, "$Revision:$")
+
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <inttypes.h>
+#include <pthread.h>
+#include <errno.h>
+#include <tiffio.h>
+
+#include <spandsp.h>
+
+#include "asterisk/lock.h"
+#include "asterisk/file.h"
+#include "asterisk/logger.h"
+#include "asterisk/channel.h"
+#include "asterisk/pbx.h"
+#include "asterisk/module.h"
+#include "asterisk/manager.h"
+
+#ifndef AST_MODULE
+#define AST_MODULE "app_rxfax"
+#endif
+
+static char *app = "RxFAX";
+
+static char *synopsis = "Receive a FAX to a file";
+
+static char *descrip =
+"  RxFAX(filename[|caller][|debug]): Receives a FAX from the channel into the\n"
+"given filename. If the file exists it will be overwritten. The file\n"
+"should be in TIFF/F format.\n"
+"The \"caller\" option makes the application behave as a calling machine,\n"
+"rather than the answering machine. The default behaviour is to behave as\n"
+"an answering machine.\n"
+"Uses LOCALSTATIONID to identify itself to the remote end.\n"
+"     LOCALHEADERINFO to generate a header line on each page.\n"
+"Sets REMOTESTATIONID to the sender CSID.\n"
+"     FAXPAGES to the number of pages received.\n"
+"     FAXBITRATE to the transmition rate.\n"
+"     FAXRESOLUTION to the resolution.\n"
+"Returns -1 when the user hangs up.\n"
+"Returns 0 otherwise.\n";
+
+#define MAX_BLOCK_SIZE 240
+
+static void span_message(int level, const char *msg)
+{
+    int ast_level;
+
+    if (level == SPAN_LOG_WARNING)
+        ast_level = __LOG_WARNING;
+    else if (level == SPAN_LOG_WARNING)
+        ast_level = __LOG_WARNING;
+    else
+        ast_level = __LOG_DEBUG;
+    ast_log(ast_level, __FILE__, __LINE__, __PRETTY_FUNCTION__, msg);
+}
+/*- End of function --------------------------------------------------------*/
+
+#if 0
+static void t30_flush(t30_state_t *s, int which)
+{
+    /* TODO: */
+}
+/*- End of function --------------------------------------------------------*/
+#endif
+
+static void phase_e_handler(t30_state_t *s, void *user_data, int result)
+{
+    struct ast_channel *chan;
+    t30_stats_t t;
+    char local_ident[21];
+    char far_ident[21];
+    char buf[11];
+
+    chan = (struct ast_channel *) user_data;
+    if (result == T30_ERR_OK)
+    {
+        t30_get_transfer_statistics(s, &t);
+        t30_get_far_ident(s, far_ident);
+        t30_get_local_ident(s, local_ident);
+        ast_log(LOG_DEBUG, "==============================================================================\n");
+        ast_log(LOG_DEBUG, "Fax successfully received.\n");
+        ast_log(LOG_DEBUG, "Remote station id: %s\n", far_ident);
+        ast_log(LOG_DEBUG, "Local station id:  %s\n", local_ident);
+        ast_log(LOG_DEBUG, "Pages transferred: %i\n", t.pages_transferred);
+        ast_log(LOG_DEBUG, "Image resolution:  %i x %i\n", t.x_resolution, t.y_resolution);
+        ast_log(LOG_DEBUG, "Transfer Rate:     %i\n", t.bit_rate);
+        ast_log(LOG_DEBUG, "==============================================================================\n");
+        manager_event(EVENT_FLAG_CALL,
+                      "FaxReceived", "Channel: %s\nExten: %s\nCallerID: %s\nRemoteStationID: %s\nLocalStationID: %s\nPagesTransferred: %i\nResolution: %i\nTransferRate: %i\nFileName: %s\n",
+                      chan->name,
+                      chan->exten,
+                      (chan->cid.cid_num)  ?  chan->cid.cid_num  :  "",
+                      far_ident,
+                      local_ident,
+                      t.pages_transferred,
+                      t.y_resolution,
+                      t.bit_rate,
+                      s->rx_file);
+        pbx_builtin_setvar_helper(chan, "REMOTESTATIONID", far_ident);
+        snprintf(buf, sizeof(buf), "%i", t.pages_transferred);
+        pbx_builtin_setvar_helper(chan, "FAXPAGES", buf);
+        snprintf(buf, sizeof(buf), "%i", t.y_resolution);
+        pbx_builtin_setvar_helper(chan, "FAXRESOLUTION", buf);
+        snprintf(buf, sizeof(buf), "%i", t.bit_rate);
+        pbx_builtin_setvar_helper(chan, "FAXBITRATE", buf);
+    }
+    else
+    {
+        ast_log(LOG_DEBUG, "==============================================================================\n");
+        ast_log(LOG_DEBUG, "Fax receive not successful - result (%d) %s.\n", result, t30_completion_code_to_str(result));
+        ast_log(LOG_DEBUG, "==============================================================================\n");
+    }
+}
+/*- End of function --------------------------------------------------------*/
+
+static void phase_d_handler(t30_state_t *s, void *user_data, int result)
+{
+    struct ast_channel *chan;
+    t30_stats_t t;
+
+    chan = (struct ast_channel *) user_data;
+    if (result)
+    {
+        t30_get_transfer_statistics(s, &t);
+        ast_log(LOG_DEBUG, "==============================================================================\n");
+        ast_log(LOG_DEBUG, "Pages transferred:  %i\n", t.pages_transferred);
+        ast_log(LOG_DEBUG, "Image size:         %i x %i\n", t.width, t.length);
+        ast_log(LOG_DEBUG, "Image resolution    %i x %i\n", t.x_resolution, t.y_resolution);
+        ast_log(LOG_DEBUG, "Transfer Rate:      %i\n", t.bit_rate);
+        ast_log(LOG_DEBUG, "Bad rows            %i\n", t.bad_rows);
+        ast_log(LOG_DEBUG, "Longest bad row run %i\n", t.longest_bad_row_run);
+        ast_log(LOG_DEBUG, "Compression type    %i\n", t.encoding);
+        ast_log(LOG_DEBUG, "Image size (bytes)  %i\n", t.image_size);
+        ast_log(LOG_DEBUG, "==============================================================================\n");
+    }
+}
+/*- End of function --------------------------------------------------------*/
+
+static int rxfax_exec(struct ast_channel *chan, void *data)
+{
+    int res = 0;
+    char template_file[256];
+    char target_file[256];
+    char *s;
+    char *t;
+    char *v;
+    const char *x;
+    int option;
+    int len;
+    int i;
+    fax_state_t fax;
+    int calling_party;
+    int verbose;
+    int samples;
+
+    struct ast_module_user *u;
+    struct ast_frame *inf = NULL;
+    struct ast_frame outf;
+
+    int original_read_fmt;
+    int original_write_fmt;
+
+    uint8_t __buf[sizeof(uint16_t)*MAX_BLOCK_SIZE + 2*AST_FRIENDLY_OFFSET];
+    uint8_t *buf = __buf + AST_FRIENDLY_OFFSET;
+
+    if (chan == NULL)
+    {
+        ast_log(LOG_WARNING, "Fax receive channel is NULL. Giving up.\n");
+        return -1;
+    }
+
+    span_set_message_handler(span_message);
+
+    /* The next few lines of code parse out the filename and header from the input string */
+    if (data == NULL)
+    {
+        /* No data implies no filename or anything is present */
+        ast_log(LOG_WARNING, "Rxfax requires an argument (filename)\n");
+        return -1;
+    }
+
+    calling_party = FALSE;
+    verbose = FALSE;
+    target_file[0] = '\0';
+
+    for (option = 0, v = s = data;  v;  option++, s++)
+    {
+        t = s;
+        v = strchr(s, '|');
+        s = (v)  ?  v  :  s + strlen(s);
+        strncpy((char *) buf, t, s - t);
+        buf[s - t] = '\0';
+        if (option == 0)
+        {
+            /* The first option is always the file name */
+            len = s - t;
+            if (len > 255)
+                len = 255;
+            strncpy(target_file, t, len);
+            target_file[len] = '\0';
+            /* Allow the use of %d in the file name for a wild card of sorts, to
+               create a new file with the specified name scheme */
+            if ((x = strchr(target_file, '%'))  &&  x[1] == 'd')
+            {
+                strcpy(template_file, target_file);
+                i = 0;
+                do
+                {
+                    snprintf(target_file, 256, template_file, 1);
+                    i++;
+                }
+                while (ast_fileexists(target_file, "", chan->language) != -1);
+            }
+        }
+        else if (strncmp("caller", t, s - t) == 0)
+        {
+            calling_party = TRUE;
+        }
+        else if (strncmp("debug", t, s - t) == 0)
+        {
+            verbose = TRUE;
+        }
+    }
+
+    /* Done parsing */
+
+    u = ast_module_user_add(chan);
+
+    if (chan->_state != AST_STATE_UP)
+    {
+        /* Shouldn't need this, but checking to see if channel is already answered
+         * Theoretically asterisk should already have answered before running the app */
+        res = ast_answer(chan);
+    }
+
+    if (!res)
+    {
+        original_read_fmt = chan->readformat;
+        if (original_read_fmt != AST_FORMAT_SLINEAR)
+        {
+            res = ast_set_read_format(chan, AST_FORMAT_SLINEAR);
+            if (res < 0)
+            {
+                ast_log(LOG_WARNING, "Unable to set to linear read mode, giving up\n");
+                return -1;
+            }
+        }
+        original_write_fmt = chan->writeformat;
+        if (original_write_fmt != AST_FORMAT_SLINEAR)
+        {
+            res = ast_set_write_format(chan, AST_FORMAT_SLINEAR);
+            if (res < 0)
+            {
+                ast_log(LOG_WARNING, "Unable to set to linear write mode, giving up\n");
+                res = ast_set_read_format(chan, original_read_fmt);
+                if (res)
+                    ast_log(LOG_WARNING, "Unable to restore read format on '%s'\n", chan->name);
+                return -1;
+            }
+        }
+        fax_init(&fax, calling_party);
+        if (verbose)
+            fax.logging.level = SPAN_LOG_SHOW_SEVERITY | SPAN_LOG_SHOW_PROTOCOL | SPAN_LOG_FLOW;
+        x = pbx_builtin_getvar_helper(chan, "LOCALSTATIONID");
+        if (x  &&  x[0])
+            t30_set_local_ident(&fax.t30_state, x);
+        x = pbx_builtin_getvar_helper(chan, "LOCALHEADERINFO");
+        if (x  &&  x[0])
+            t30_set_header_info(&fax.t30_state, x);
+        t30_set_rx_file(&fax.t30_state, target_file, -1);
+        //t30_set_phase_b_handler(&fax.t30_state, phase_b_handler, chan);
+        t30_set_phase_d_handler(&fax.t30_state, phase_d_handler, chan);
+        t30_set_phase_e_handler(&fax.t30_state, phase_e_handler, chan);
+        t30_set_ecm_capability(&fax.t30_state, TRUE);
+        t30_set_supported_compressions(&fax.t30_state, T30_SUPPORT_T4_1D_COMPRESSION | T30_SUPPORT_T4_2D_COMPRESSION | T30_SUPPORT_T6_COMPRESSION);
+        while (ast_waitfor(chan, -1) > -1)
+        {
+            inf = ast_read(chan);
+            if (inf == NULL)
+            {
+                res = -1;
+                break;
+            }
+            if (inf->frametype == AST_FRAME_VOICE)
+            {
+                if (fax_rx(&fax, inf->data, inf->samples))
+                    break;
+                samples = (inf->samples <= MAX_BLOCK_SIZE)  ?  inf->samples  :  MAX_BLOCK_SIZE;
+                len = fax_tx(&fax, (int16_t *) &buf[AST_FRIENDLY_OFFSET], samples);
+                if (len)
+                {
+                    memset(&outf, 0, sizeof(outf));
+                    outf.frametype = AST_FRAME_VOICE;
+                    outf.subclass = AST_FORMAT_SLINEAR;
+                    outf.datalen = len*sizeof(int16_t);
+                    outf.samples = len;
+                    outf.data = &buf[AST_FRIENDLY_OFFSET];
+                    outf.offset = AST_FRIENDLY_OFFSET;
+                    outf.src = "RxFAX";
+                    if (ast_write(chan, &outf) < 0)
+                    {
+                        ast_log(LOG_WARNING, "Unable to write frame to channel; %s\n", strerror(errno));
+                        break;
+                    }
+                }
+            }
+            ast_frfree(inf);
+        }
+        if (inf == NULL)
+        {
+            ast_log(LOG_DEBUG, "Got hangup\n");
+            res = -1;
+        }
+        if (original_read_fmt != AST_FORMAT_SLINEAR)
+        {
+            res = ast_set_read_format(chan, original_read_fmt);
+            if (res)
+                ast_log(LOG_WARNING, "Unable to restore read format on '%s'\n", chan->name);
+        }
+        if (original_write_fmt != AST_FORMAT_SLINEAR)
+        {
+            res = ast_set_write_format(chan, original_write_fmt);
+            if (res)
+                ast_log(LOG_WARNING, "Unable to restore write format on '%s'\n", chan->name);
+        }
+        t30_terminate(&fax.t30_state);
+    }
+    else
+    {
+        ast_log(LOG_WARNING, "Could not answer channel '%s'\n", chan->name);
+    }
+    ast_module_user_remove(u);
+    return res;
+}
+/*- End of function --------------------------------------------------------*/
+
+static int unload_module(void)
+{
+	int res;
+
+	ast_module_user_hangup_all();
+
+	res = ast_unregister_application(app);
+
+
+	return res;
+}
+/*- End of function --------------------------------------------------------*/
+
+static int load_module(void)
+{
+	return ast_register_application(app, rxfax_exec, synopsis, descrip);
+}
+/*- End of function --------------------------------------------------------*/
+
+AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Trivial FAX Receive Application");
+
+/*- End of file ------------------------------------------------------------*/
diff --git a/apps/app_txfax.c b/apps/app_txfax.c
new file mode 100644
index 0000000..713ecf1
--- /dev/null
+++ b/apps/app_txfax.c
@@ -0,0 +1,306 @@
+/*
+ * Asterisk -- A telephony toolkit for Linux.
+ *
+ * Trivial application to send a TIFF file as a FAX
+ *
+ * Copyright (C) 2003, Steve Underwood
+ *
+ * Steve Underwood <steveu at coppice.org>
+ *
+ * This program is free software, distributed under the terms of
+ * the GNU General Public License
+ */
+
+/*** MODULEINFO
+         <depend>spandsp</depend>
+***/
+
+#include "asterisk.h"
+
+ASTERISK_FILE_VERSION(__FILE__, "$Revision:$")
+
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <inttypes.h>
+#include <pthread.h>
+#include <errno.h>
+#include <tiffio.h>
+
+#include <spandsp.h>
+
+#include "asterisk/lock.h"
+#include "asterisk/file.h"
+#include "asterisk/logger.h"
+#include "asterisk/channel.h"
+#include "asterisk/pbx.h"
+#include "asterisk/module.h"
+
+#ifndef AST_MODULE
+#define AST_MODULE "app_txfax"
+#endif
+
+static char *app = "TxFAX";
+
+static char *synopsis = "Send a FAX file";
+
+static char *descrip =
+"  TxFAX(filename[|caller][|debug]):  Send a given TIFF file to the channel as a FAX.\n"
+"The \"caller\" option makes the application behave as a calling machine,\n"
+"rather than the answering machine. The default behaviour is to behave as\n"
+"an answering machine.\n"
+"Uses LOCALSTATIONID to identify itself to the remote end.\n"
+"     LOCALHEADERINFO to generate a header line on each page.\n"
+"Sets REMOTESTATIONID to the receiver CSID.\n"
+"Returns -1 when the user hangs up, or if the file does not exist.\n"
+"Returns 0 otherwise.\n";
+
+#define MAX_BLOCK_SIZE 240
+
+static void span_message(int level, const char *msg)
+{
+    int ast_level;
+
+    if (level == SPAN_LOG_WARNING)
+        ast_level = __LOG_WARNING;
+    else if (level == SPAN_LOG_WARNING)
+        ast_level = __LOG_WARNING;
+    else
+        ast_level = __LOG_DEBUG;
+    ast_log(ast_level, __FILE__, __LINE__, __PRETTY_FUNCTION__, msg);
+}
+/*- End of function --------------------------------------------------------*/
+
+#if 0
+static void t30_flush(t30_state_t *s, int which)
+{
+    /* TODO: */
+}
+/*- End of function --------------------------------------------------------*/
+#endif
+
+static void phase_e_handler(t30_state_t *s, void *user_data, int result)
+{
+    struct ast_channel *chan;
+    char far_ident[21];
+
+    chan = (struct ast_channel *) user_data;
+    if (result == T30_ERR_OK)
+    {
+        t30_get_far_ident(s, far_ident);
+        pbx_builtin_setvar_helper(chan, "REMOTESTATIONID", far_ident);
+    }
+    else
+    {
+        ast_log(LOG_DEBUG, "==============================================================================\n");
+        ast_log(LOG_DEBUG, "Fax send not successful - result (%d) %s.\n", result, t30_completion_code_to_str(result));
+        ast_log(LOG_DEBUG, "==============================================================================\n");
+    }
+}
+/*- End of function --------------------------------------------------------*/
+
+static int txfax_exec(struct ast_channel *chan, void *data)
+{
+    int res = 0;
+    char source_file[256];
+    char *s;
+    char *t;
+    char *v;
+    const char *x;
+    int option;
+    int len;
+    fax_state_t fax;
+    int calling_party;
+    int verbose;
+    int samples;
+
+    struct ast_module_user *u;
+    struct ast_frame *inf = NULL;
+    struct ast_frame outf;
+
+    int original_read_fmt;
+    int original_write_fmt;
+
+    uint8_t __buf[sizeof(uint16_t)*MAX_BLOCK_SIZE + 2*AST_FRIENDLY_OFFSET];
+    uint8_t *buf = __buf + AST_FRIENDLY_OFFSET;
+
+    if (chan == NULL)
+    {
+        ast_log(LOG_WARNING, "Fax transmit channel is NULL. Giving up.\n");
+        return -1;
+    }
+
+    span_set_message_handler(span_message);
+
+    /* The next few lines of code parse out the filename and header from the input string */
+    if (data == NULL)
+    {
+        /* No data implies no filename or anything is present */
+        ast_log(LOG_WARNING, "Txfax requires an argument (filename)\n");
+        return -1;
+    }
+
+    calling_party = FALSE;
+    verbose = FALSE;
+    source_file[0] = '\0';
+
+    for (option = 0, v = s = data;  v;  option++, s++)
+    {
+        t = s;
+        v = strchr(s, '|');
+        s = (v)  ?  v  :  s + strlen(s);
+        strncpy((char *) buf, t, s - t);
+        buf[s - t] = '\0';
+        if (option == 0)
+        {
+            /* The first option is always the file name */
+            len = s - t;
+            if (len > 255)
+                len = 255;
+            strncpy(source_file, t, len);
+            source_file[len] = '\0';
+        }
+        else if (strncmp("caller", t, s - t) == 0)
+        {
+            calling_party = TRUE;
+        }
+        else if (strncmp("debug", t, s - t) == 0)
+        {
+            verbose = TRUE;
+        }
+    }
+
+    /* Done parsing */
+
+    u = ast_module_user_add(chan);
+
+    if (chan->_state != AST_STATE_UP)
+    {
+        /* Shouldn't need this, but checking to see if channel is already answered
+         * Theoretically asterisk should already have answered before running the app */
+        res = ast_answer(chan);
+    }
+
+    if (!res)
+    {
+        original_read_fmt = chan->readformat;
+        if (original_read_fmt != AST_FORMAT_SLINEAR)
+        {
+            res = ast_set_read_format(chan, AST_FORMAT_SLINEAR);
+            if (res < 0)
+            {
+                ast_log(LOG_WARNING, "Unable to set to linear read mode, giving up\n");
+                return -1;
+            }
+        }
+        original_write_fmt = chan->writeformat;
+        if (original_write_fmt != AST_FORMAT_SLINEAR)
+        {
+            res = ast_set_write_format(chan, AST_FORMAT_SLINEAR);
+            if (res < 0)
+            {
+                ast_log(LOG_WARNING, "Unable to set to linear write mode, giving up\n");
+                res = ast_set_read_format(chan, original_read_fmt);
+                if (res)
+                    ast_log(LOG_WARNING, "Unable to restore read format on '%s'\n", chan->name);
+                return -1;
+            }
+        }
+        fax_init(&fax, calling_party);
+        if (verbose)
+	    fax.logging.level = SPAN_LOG_SHOW_SEVERITY | SPAN_LOG_SHOW_PROTOCOL | SPAN_LOG_FLOW;
+
+        x = pbx_builtin_getvar_helper(chan, "LOCALSTATIONID");
+        if (x  &&  x[0])
+            t30_set_local_ident(&fax.t30_state, x);
+        x = pbx_builtin_getvar_helper(chan, "LOCALHEADERINFO");
+        if (x  &&  x[0])
+            t30_set_header_info(&fax.t30_state, x);
+        t30_set_tx_file(&fax.t30_state, source_file, -1, -1);
+        //t30_set_phase_b_handler(&fax.t30_state, phase_b_handler, chan);
+        //t30_set_phase_d_handler(&fax.t30_state, phase_d_handler, chan);
+        t30_set_phase_e_handler(&fax.t30_state, phase_e_handler, chan);
+        t30_set_ecm_capability(&fax.t30_state, TRUE);
+        t30_set_supported_compressions(&fax.t30_state, T30_SUPPORT_T4_1D_COMPRESSION | T30_SUPPORT_T4_2D_COMPRESSION | T30_SUPPORT_T6_COMPRESSION);
+        while (ast_waitfor(chan, -1) > -1)
+        {
+            inf = ast_read(chan);
+            if (inf == NULL)
+            {
+                res = -1;
+                break;
+            }
+            if (inf->frametype == AST_FRAME_VOICE)
+            {
+                if (fax_rx(&fax, inf->data, inf->samples))
+                    break;
+                samples = (inf->samples <= MAX_BLOCK_SIZE)  ?  inf->samples  :  MAX_BLOCK_SIZE;
+                len = fax_tx(&fax, (int16_t *) &buf[AST_FRIENDLY_OFFSET], samples);
+                if (len)
+                {
+                    memset(&outf, 0, sizeof(outf));
+                    outf.frametype = AST_FRAME_VOICE;
+                    outf.subclass = AST_FORMAT_SLINEAR;
+                    outf.datalen = len*sizeof(int16_t);
+                    outf.samples = len;
+                    outf.data = &buf[AST_FRIENDLY_OFFSET];
+                    outf.offset = AST_FRIENDLY_OFFSET;
+                    if (ast_write(chan, &outf) < 0)
+                    {
+                        ast_log(LOG_WARNING, "Unable to write frame to channel; %s\n", strerror(errno));
+                        break;
+                    }
+                }
+            }
+            ast_frfree(inf);
+        }
+        if (inf == NULL)
+        {
+            ast_log(LOG_DEBUG, "Got hangup\n");
+            res = -1;
+        }
+        if (original_read_fmt != AST_FORMAT_SLINEAR)
+        {
+            res = ast_set_read_format(chan, original_read_fmt);
+            if (res)
+                ast_log(LOG_WARNING, "Unable to restore read format on '%s'\n", chan->name);
+        }
+        if (original_write_fmt != AST_FORMAT_SLINEAR)
+        {
+            res = ast_set_write_format(chan, original_write_fmt);
+            if (res)
+                ast_log(LOG_WARNING, "Unable to restore write format on '%s'\n", chan->name);
+        }
+        t30_terminate(&fax.t30_state);
+    }
+    else
+    {
+        ast_log(LOG_WARNING, "Could not answer channel '%s'\n", chan->name);
+    }
+    ast_module_user_remove(u);
+    return res;
+}
+/*- End of function --------------------------------------------------------*/
+
+static int unload_module(void)
+{
+	int res;
+
+	ast_module_user_hangup_all();
+
+	res = ast_unregister_application(app);
+
+
+	return res;
+}
+/*- End of function --------------------------------------------------------*/
+
+static int load_module(void)
+{
+    return ast_register_application(app, txfax_exec, synopsis, descrip);
+}
+/*- End of function --------------------------------------------------------*/
+
+AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Trivial FAX Transmit Application");
+
+/*- End of file ------------------------------------------------------------*/
diff --git a/build_tools/menuselect-deps.in b/build_tools/menuselect-deps.in
index e9eac56..6bf5131 100644
--- a/build_tools/menuselect-deps.in
+++ b/build_tools/menuselect-deps.in
@@ -21,6 +21,7 @@ PGSQL=@PBX_PGSQL@
 POPT=@PBX_POPT@
 PRI=@PBX_PRI@
 RADIUS=@PBX_RADIUS@
+SPANDSP=@PBX_SPANDSP@
 SPEEX=@PBX_SPEEX@
 SPEEXDSP=@PBX_SPEEXDSP@
 SQLITE=@PBX_SQLITE@
diff --git a/configure.ac b/configure.ac
index f52184d..765c3c0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -198,6 +198,7 @@ AST_EXT_LIB_SETUP([PRI], [ISDN PRI], [pri])
 AST_EXT_LIB_SETUP([PWLIB], [PWlib], [pwlib])
 AST_EXT_LIB_SETUP([OPENH323], [OpenH323], [h323])
 AST_EXT_LIB_SETUP([RADIUS], [Radius Client], [radius])
+AST_EXT_LIB_SETUP([SPANDSP], [spandsp Library], [spandsp])
 AST_EXT_LIB_SETUP([SPEEX], [Speex], [speex])
 AST_EXT_LIB_SETUP([SPEEXDSP], [Speexdsp], [speexdsp])
 AST_EXT_LIB_SETUP([SQLITE], [SQLite], [sqlite])
@@ -896,6 +897,8 @@ fi
 
 AST_EXT_LIB_CHECK([RADIUS], [radiusclient-ng], [rc_read_config], [radiusclient-ng.h])
 
+AST_EXT_LIB_CHECK([SPANDSP], [spandsp], [fax_init], [spandsp.h], [-ltiff])
+
 AST_EXT_LIB_CHECK([SPEEX], [speex], [speex_encode], [speex/speex.h], [-lm])
 
 AST_EXT_LIB_CHECK([SPEEXDSP], [speexdsp], [speex_preprocess_ctl], [speex/speex.h], [-lm])
diff --git a/makeopts.in b/makeopts.in
index 88a414f..983c7a9 100644
--- a/makeopts.in
+++ b/makeopts.in
@@ -137,6 +137,9 @@ PWLIB_LIB=@PWLIB_LIB@
 RADIUS_INCLUDE=@RADIUS_INCLUDE@
 RADIUS_LIB=@RADIUS_LIB@
 
+SPANDSP_INCLUDE=@SPANDSP_INCLUDE@
+SPANDSP_LIB=@SPANDSP_LIB@
+
 SPEEX_INCLUDE=@SPEEX_INCLUDE@
 SPEEX_LIB=@SPEEX_LIB@
 
-- 
1.5.4.1


asterisk-1.4.18-system-imap.patch:

--- NEW FILE asterisk-1.4.18-system-imap.patch ---
>From 4f735d32933e0d751c281c9a851a69329eea3410 Mon Sep 17 00:00:00 2001
From: Jeffrey C. Ollie <jcollie at pc21224.campus.dmacc.edu>
Date: Thu, 8 Nov 2007 15:47:38 -0600
Subject: [PATCH] Patch so that system IMAP library can be used.

---
 apps/app_voicemail.c |   10 ++++++++++
 configure            |   37 ++++++++++++++++++++++++++++---------
 configure.ac         |   36 +++++++++++++++++++++++++++---------
 doc/imapstorage.txt  |   34 ++++++++++++++++------------------
 4 files changed, 81 insertions(+), 36 deletions(-)

diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c
index aaaa2cb..af5509e 100644
--- a/apps/app_voicemail.c
+++ b/apps/app_voicemail.c
@@ -70,10 +70,16 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 #include <ctype.h>
 #include <signal.h>
 #include <pwd.h>
+#ifdef USE_SYSTEM_IMAP
+#include <imap/c-client.h>
+#include <imap/imap4r1.h>
+#include <imap/linkage.h>
+#else
 #include "c-client.h"
 #include "imap4r1.h"
 #include "linkage.h"
 #endif
+#endif
 #include "asterisk/lock.h"
 #include "asterisk/file.h"
 #include "asterisk/logger.h"
@@ -4725,7 +4731,11 @@ static int init_mailstream(struct vm_state *vms, int box)
 
 	if (delimiter == '\0') {		/* did not probe the server yet */
 		char *cp;
+#if USE_SYSTEM_IMAP
+#include <imap/linkage.c>
+#else
 #include "linkage.c"
+#endif
 		/* Connect to INBOX first to get folders delimiter */
 		imap_mailbox_name(tmp, sizeof(tmp), vms, 0, 1);
 		stream = mail_open (stream, tmp, debug ? OP_DEBUG : NIL);
diff --git a/configure b/configure
index 9b27e11..12ac79b 100755
--- a/configure
+++ b/configure
@@ -19200,7 +19200,10 @@ fi
 fi
 
 if test "${USE_IMAP_TK}" != "no"; then
-   if test "${IMAP_TK_DIR}" = ""; then
+   if test "${IMAP_TK_DIR}" = "system" ; then
+      { echo "$as_me:$LINENO: Checking for system c-client library..." >&5
+echo "$as_me: Checking for system c-client library..." >&6;}
+   elif test "${IMAP_TK_DIR}" = ""; then
       IMAP_TK_DIR=`pwd`"/../imap-2004g"
       if test  -n "${IMAP_TK_MANDATORY}"; then
 	 { echo "$as_me:$LINENO: The --with-imap option does not search your system for installed" >&5
@@ -19213,22 +19216,34 @@ echo "$as_me: the configure script will assume you have placed built the c-clien
 echo "$as_me: files at ${IMAP_TK_DIR}, as outlined in the doc/imapstorage.txt file." >&6;}
       fi
    fi
-   { echo "$as_me:$LINENO: checking for UW IMAP Toolkit c-client library" >&5
+   if test "${IMAP_TK_DIR}" != "system" ; then
+      { echo "$as_me:$LINENO: checking for UW IMAP Toolkit c-client library" >&5
 echo $ECHO_N "checking for UW IMAP Toolkit c-client library... $ECHO_C" >&6; }
+   fi
    saved_cppflags="${CPPFLAGS}"
    saved_libs="${LIBS}"
-   if test -f ${IMAP_TK_DIR}/c-client/LDFLAGS ; then
+   if test "${IMAP_TK_DIR}" = "system" ; then
+      imap_ldflags=""
+      imap_libs="-lc-client"
+      imap_include="-DUSE_SYSTEM_IMAP"
+   elif test -f ${IMAP_TK_DIR}/c-client/LDFLAGS ; then
       imap_ldflags=`cat ${IMAP_TK_DIR}/c-client/LDFLAGS`
+      imap_libs="${IMAP_TK_DIR}/c-client/c-client.a"
+      imap_include="-I${IMAP_TK_DIR}/c-client"
    fi
-   CPPFLAGS="${CPPFLAGS} -I${IMAP_TK_DIR}/c-client"
-   LIBS="${LIBS} ${IMAP_TK_DIR}/c-client/c-client.a "`echo ${imap_ldflags}`
+   CPPFLAGS="${CPPFLAGS} ${imap_include}"
+   LIBS="${LIBS} ${imap_libs} "`echo ${imap_ldflags}`
    cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
-#include "c-client.h"
+#ifdef USE_SYSTEM_IMAP
+		#include <imap/c-client.h>
+		#else
+		#include "c-client.h"
+		#endif
 		void mm_searched (MAILSTREAM *stream,unsigned long number)
 		{
 		}
@@ -19321,7 +19336,11 @@ _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
-#include "c-client.h"
+#ifdef USE_SYSTEM_IMAP
+	 #include <imap/c-client.h>
+	 #else
+	 #include "c-client.h"
+	 #endif
          void mm_searched (MAILSTREAM *stream,unsigned long number)
          {
          }
@@ -19413,8 +19432,8 @@ rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
    if test "${ac_cv_imap_tk}" = "yes"; then
       { echo "$as_me:$LINENO: result: yes" >&5
 echo "${ECHO_T}yes" >&6; }
-      IMAP_TK_LIB="${IMAP_TK_DIR}/c-client/c-client.a "`echo ${imap_ldflags}`
-      IMAP_TK_INCLUDE="-I${IMAP_TK_DIR}/c-client"
+      IMAP_TK_LIB="${imap_libs}"`echo ${imap_ldflags}`
+      IMAP_TK_INCLUDE="${imap_include}"
       PBX_IMAP_TK=1
 
 cat >>confdefs.h <<\_ACEOF
diff --git a/configure.ac b/configure.ac
index e209c8a..f52184d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -477,7 +477,9 @@ if test "${PBX_IKSEMEL}" = 1; then
 fi
 
 if test "${USE_IMAP_TK}" != "no"; then
-   if test "${IMAP_TK_DIR}" = ""; then
+   if test "${IMAP_TK_DIR}" = "system" ; then
+      AC_MSG_NOTICE([Checking for system c-client library...])
+   elif test "${IMAP_TK_DIR}" = ""; then
       IMAP_TK_DIR=`pwd`"/../imap-2004g"
       if test  -n "${IMAP_TK_MANDATORY}"; then
 	 AC_MSG_NOTICE([The --with-imap option does not search your system for installed])
@@ -486,17 +488,29 @@ if test "${USE_IMAP_TK}" != "no"; then
 	 AC_MSG_NOTICE([files at ${IMAP_TK_DIR}, as outlined in the doc/imapstorage.txt file.])
       fi
    fi
-   AC_MSG_CHECKING(for UW IMAP Toolkit c-client library)
+   if test "${IMAP_TK_DIR}" != "system" ; then
+      AC_MSG_CHECKING(for UW IMAP Toolkit c-client library)
+   fi
    saved_cppflags="${CPPFLAGS}"
    saved_libs="${LIBS}"
-   if test -f ${IMAP_TK_DIR}/c-client/LDFLAGS ; then
+   if test "${IMAP_TK_DIR}" = "system" ; then
+      imap_ldflags=""
+      imap_libs="-lc-client"
+      imap_include="-DUSE_SYSTEM_IMAP"
+   elif test -f ${IMAP_TK_DIR}/c-client/LDFLAGS ; then
       imap_ldflags=`cat ${IMAP_TK_DIR}/c-client/LDFLAGS`
+      imap_libs="${IMAP_TK_DIR}/c-client/c-client.a"
+      imap_include="-I${IMAP_TK_DIR}/c-client"
    fi
-   CPPFLAGS="${CPPFLAGS} -I${IMAP_TK_DIR}/c-client"
-   LIBS="${LIBS} ${IMAP_TK_DIR}/c-client/c-client.a "`echo ${imap_ldflags}`
+   CPPFLAGS="${CPPFLAGS} ${imap_include}"
+   LIBS="${LIBS} ${imap_libs} "`echo ${imap_ldflags}`
    AC_LINK_IFELSE(
 	AC_LANG_PROGRAM(
-		[#include "c-client.h"
+		[#ifdef USE_SYSTEM_IMAP
+		#include <imap/c-client.h>
+		#else
+		#include "c-client.h"
+		#endif
 		void mm_searched (MAILSTREAM *stream,unsigned long number)
 		{
 		}
@@ -552,7 +566,11 @@ if test "${USE_IMAP_TK}" != "no"; then
    if test "${ac_cv_imap_tk}" = "yes"; then
    AC_LINK_IFELSE(
       AC_LANG_PROGRAM(
-         [#include "c-client.h"
+         [#ifdef USE_SYSTEM_IMAP
+	 #include <imap/c-client.h>
+	 #else
+	 #include "c-client.h"
+	 #endif
          void mm_searched (MAILSTREAM *stream,unsigned long number)
          {
          }
@@ -610,8 +628,8 @@ if test "${USE_IMAP_TK}" != "no"; then
    LIBS="${saved_libs}"
    if test "${ac_cv_imap_tk}" = "yes"; then
       AC_MSG_RESULT(yes) 
-      IMAP_TK_LIB="${IMAP_TK_DIR}/c-client/c-client.a "`echo ${imap_ldflags}`
-      IMAP_TK_INCLUDE="-I${IMAP_TK_DIR}/c-client"
+      IMAP_TK_LIB="${imap_libs}"`echo ${imap_ldflags}`
+      IMAP_TK_INCLUDE="${imap_include}"
       PBX_IMAP_TK=1
       AC_DEFINE([HAVE_IMAP_TK], 1, [Define if your system has the UW IMAP Toolkit c-client library.])
       if test "${ac_cv_imap_tk2006}" = "yes"; then
diff --git a/doc/imapstorage.txt b/doc/imapstorage.txt
index 1e5484b..d292b5d 100644
--- a/doc/imapstorage.txt
+++ b/doc/imapstorage.txt
@@ -38,10 +38,11 @@ Installation Notes
 --------------------------------------
 University of Washington IMAP C-Client
 --------------------------------------
-You will need a source distribution of University of Washington's IMAP
-c-client (http://www.washington.edu/imap/).  Asterisk supports both the
-2004 and 2006 versions of c-client, however mail_expunge_full is enabled
-in the 2006 version.
+If you do not have the University of Washington's IMAP c-client
+installed on your system, you will need to download the c-client
+source distribution (http://www.washington.edu/imap/) and compile it.
+Asterisk supports both the 2004 and 2006 versions of c-client, however
+mail_expunge_full is enabled in the 2006 version.
 
 Note that Asterisk only uses the 'client' portion of the UW IMAP toolkit,
 but building it also builds an IMAP server and various other utilities.
@@ -68,20 +69,17 @@ need to run 'make install'.
 ------------------
 Compiling Asterisk 
 ------------------
-
-Configure with ./configure --with-imap=/usr/src/imap
-or where ever you built thfe UWashington IMAP Toolkit. When you run
-'make menuselect', choose 'Voicemail Build Options' and the
-IMAP_STORAGE option should be available for selection.
-
-Note that the --with-imap option will NOT search your system for an
-installed copy of the IMAP Toolkit c-client library; the Asterisk
-Makefiles and configure script are designed to build against an
-unpacked and compiled source tree of the IMAP Toolkit, not a binary
-distribution.
-
-After selecting it, use the 'x' key to exit menuselect and save
-your changes, and the build/install Asterisk normally.
+To use the system c-client library, configure Asterisk with
+./configure --with-imap=system. If you downloaded the c-client source
+and compiled it according to the above instructions, configure
+Asterisk with with ./configure --with-imap=/usr/src/imap or where ever
+you built the UWashington IMAP Toolkit. When you run 'make
+menuselect', choose 'Voicemail Build Options' and the IMAP_STORAGE
+option should be available for selection.
+
+After selecting the IMAP_STORAGE option, use the 'x' key to exit
+menuselect and save your changes, and the build/install Asterisk
+normally.
 
 ---------------------
 Modify voicemail.conf
-- 
1.5.4.1



Index: .cvsignore
===================================================================
RCS file: /cvs/pkgs/rpms/asterisk/F-8/.cvsignore,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- .cvsignore	3 Jan 2008 03:13:42 -0000	1.6
+++ .cvsignore	19 Feb 2008 12:49:01 -0000	1.7
@@ -1 +1 @@
-asterisk-1.4.17-stripped.tar.gz
+asterisk-1.4.18-stripped.tar.gz


Index: asterisk-logrotate
===================================================================
RCS file: /cvs/pkgs/rpms/asterisk/F-8/asterisk-logrotate,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- asterisk-logrotate	12 Dec 2007 05:38:36 -0000	1.1
+++ asterisk-logrotate	19 Feb 2008 12:49:01 -0000	1.2
@@ -1,9 +1,9 @@
 /var/log/asterisk/messages /var/log/asterisk/event_log /var/log/asterisk/queue_log {
     missingok
     notifempty
-    create 0640 root root
+    create 0640 asterisk asterisk
     sharedscripts
     postrotate
-	/usr/sbin/asterisk -rx 'logger rotate' >/dev/null 2>/dev/null || true
+	/usr/sbin/asterisk -rx 'logger reload' >/dev/null 2>/dev/null || true
     endscript
 }


Index: asterisk.spec
===================================================================
RCS file: /cvs/pkgs/rpms/asterisk/F-8/asterisk.spec,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- asterisk.spec	3 Jan 2008 03:13:42 -0000	1.7
+++ asterisk.spec	19 Feb 2008 12:49:01 -0000	1.8
@@ -2,7 +2,7 @@
 
 Summary: The Open Source PBX
 Name: asterisk
-Version: 1.4.17
+Version: 1.4.18
 Release: 1%{?dist}
 License: GPLv2
 Group: Applications/Internet
@@ -20,13 +20,13 @@
 #
 # MD5 Sums
 # ========
-# ff25f56d775858c4de619f2f59a55099  asterisk-1.4.17.tar.gz
-# 5097de6f6650a40251f0ebb5aa12c056  asterisk-1.4.17-stripped.tar.gz
+# 3d8b2b2ef4f202901771663b40f19c3d  asterisk-1.4.18.tar.gz
+# b5027a1a87592db138e10ddbd0cece8a  asterisk-1.4.18-stripped.tar.gz
 #
 # SHA1 Sums
 # =========
-# bc909e34a5d3c79009b90dac45be8c3c051e573c  asterisk-1.4.17.tar.gz
-# 07193d1f82473b20f5e140dd1ebbac077ea2ec7e  asterisk-1.4.17-stripped.tar.gz
+# 3a027488395510b6ebe4a0a0c372db33b2044b0a  asterisk-1.4.18.tar.gz
+# 6f66bf67e87d17f9ccce5fc07643abb759862289  asterisk-1.4.18-stripped.tar.gz
 
 Source0: asterisk-%{version}-stripped.tar.gz
 Source1: asterisk-logrotate
@@ -34,19 +34,21 @@
 Source3: menuselect.makeopts
 Source4: asterisk-strip.sh
 
-Patch1:  asterisk-1.4.16.2-initscripts.patch
-Patch2:  asterisk-1.4.16.2-system-imap.patch
-Patch3:  asterisk-1.4.16.2-alternate-voicemail.patch
-Patch4:  asterisk-1.4.16.2-spandspfax.patch
-Patch5:  asterisk-1.4.16.2-appconference.patch
-Patch6:  asterisk-1.4.16.2-alternate-extensions.patch
-Patch7:  asterisk-1.4.16.2-optimization.patch
-Patch8:  asterisk-1.4.16.2-libcap.patch
-Patch9:  asterisk-1.4.16.2-chanmobile.patch
-Patch10: asterisk-1.4.16.2-autoconf.patch
+Patch1:  asterisk-1.4.18-initscripts.patch
+Patch2:  asterisk-1.4.18-system-imap.patch
+Patch3:  asterisk-1.4.18-alternate-voicemail.patch
+Patch4:  asterisk-1.4.18-spandspfax.patch
+Patch5:  asterisk-1.4.18-appconference.patch
+Patch6:  asterisk-1.4.18-alternate-extensions.patch
+Patch7:  asterisk-1.4.18-optimization.patch
+Patch8:  asterisk-1.4.18-chanmobile.patch
+Patch9:  asterisk-1.4.18-autoconf.patch
 
 BuildRoot: %{_tmppath}/%{name}-%{version}-root-%(%{__id_u} -n)
 
+#BuildRequires: autoconf
+#BuildRequires: automake
+
 # core build requirements
 BuildRequires: openssl-devel
 BuildRequires: newt-devel
@@ -160,6 +162,17 @@
 %description firmware
 Firmware for the Digium S101I (IAXy).
 
+%package ices
+Summary: Stream audio from Asterisk to an IceCast server
+Group: Applications/Internet
+Requires: asterisk = %{version}-%{release}
+Requires: ices
+Obsoletes: asterisk < 1.4.18-1
+Conflicts: asterisk < 1.4.18-1
+
+%description ices
+Stream audio from Asterisk to an IceCast server.
+
 %package jabber
 Summary: Jabber/XMPP resources for Asterisk
 Group: Applications/Internet
@@ -320,7 +333,6 @@
 %patch7 -p1
 %patch8 -p1
 %patch9 -p1
-%patch10 -p1
 
 cp %{SOURCE2} menuselect.makedeps
 cp %{SOURCE3} menuselect.makeopts
@@ -333,9 +345,19 @@
 mv main/fskmodem.c main/fskmodem.c.old
 iconv -f iso-8859-1 -t utf-8 -o main/fskmodem.c main/fskmodem.c.old
 touch -r main/fskmodem.c.old main/fskmodem.c
+rm main/fskmodem.c.old
 
 %build
 
+# if we are building for i386 promote the CPU arch to i486 for atomic operations support
+%ifarch i386
+%define optflags %{__global_cflags} -m32 -march=i486 -mtune=generic -fasynchronous-unwind-tables
+%endif
+
+#aclocal
+#autoconf
+#autoheader
+
 pushd menuselect/mxml
 %configure
 popd
@@ -473,7 +495,6 @@
 %doc doc/h323.txt
 %doc doc/hardware.txt
 %doc doc/iax.txt
-%doc doc/ices.txt
 %doc doc/ip-tos.txt
 %doc doc/jitterbuffer.txt
 %doc doc/localchannel.txt
@@ -522,7 +543,6 @@
 %{_libdir}/asterisk/modules/app_followme.so
 %{_libdir}/asterisk/modules/app_forkcdr.so
 %{_libdir}/asterisk/modules/app_getcpeid.so
-%{_libdir}/asterisk/modules/app_ices.so
 %{_libdir}/asterisk/modules/app_image.so
 %{_libdir}/asterisk/modules/app_lookupblacklist.so
 %{_libdir}/asterisk/modules/app_lookupcidname.so
@@ -779,6 +799,11 @@
 %{_libdir}/asterisk/modules/chan_gtalk.so
 %{_libdir}/asterisk/modules/res_jabber.so
 
+%files ices
+%defattr(-,root,root,-)
+%doc doc/ices.txt contrib/asterisk-ices.xml
+%{_libdir}/asterisk/modules/app_ices.so
+
 %files misdn
 %defattr(-,root,root,-)
 %doc doc/misdn.txt
@@ -876,6 +901,21 @@
 %{_libdir}/asterisk/modules/codec_zap.so
 
 %changelog
+* Wed Feb 13 2008 Jeffrey C. Ollie <jeff at ocjtech.us> - 1.4.18-1
+- Update to 1.4.18.
+- Use -march=i486 on i386 builds for atomic operations (GCC 4.3
+  compatibility).
+- Use "logger reload" instead of "logger rotate" in logrotate file
+  (#432197).
+- Don't explicitly specify a group in in the init script to prevent
+  Zaptel breakage (#426629).
+- Split app_ices out to a separate package so that the ices package
+  can be required.
+- pbx_kdeconsole has been dropped, don't specifically exclude it from
+  the build anymore.
+- Update app_conference patch.
+- Drop upstreamed libcap patch.
+
 * Wed Jan  2 2008 Jeffrey C. Ollie <jeff at ocjtech.us> - 1.4.17-1
 - Update to 1.4.17 to fix AST-2008-001.
 


Index: menuselect.makeopts
===================================================================
RCS file: /cvs/pkgs/rpms/asterisk/F-8/menuselect.makeopts,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- menuselect.makeopts	12 Dec 2007 05:38:36 -0000	1.1
+++ menuselect.makeopts	19 Feb 2008 12:49:01 -0000	1.2
@@ -4,7 +4,7 @@
 MENUSELECT_CODECS=
 MENUSELECT_FORMATS=
 MENUSELECT_FUNCS=
-MENUSELECT_PBX=pbx_gtkconsole pbx_kdeconsole 
+MENUSELECT_PBX=pbx_gtkconsole
 MENUSELECT_RES=
 MENUSELECT_OPTS_app_voicemail=
 MENUSELECT_CFLAGS=LOADABLE_MODULES 


Index: sources
===================================================================
RCS file: /cvs/pkgs/rpms/asterisk/F-8/sources,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- sources	3 Jan 2008 03:13:42 -0000	1.6
+++ sources	19 Feb 2008 12:49:01 -0000	1.7
@@ -1 +1 @@
-5097de6f6650a40251f0ebb5aa12c056  asterisk-1.4.17-stripped.tar.gz
+b5027a1a87592db138e10ddbd0cece8a  asterisk-1.4.18-stripped.tar.gz


--- asterisk-1.4.16.2-alternate-extensions.patch DELETED ---


--- asterisk-1.4.16.2-alternate-voicemail.patch DELETED ---


--- asterisk-1.4.16.2-appconference.patch DELETED ---


--- asterisk-1.4.16.2-autoconf.patch DELETED ---


--- asterisk-1.4.16.2-chanmobile.patch DELETED ---


--- asterisk-1.4.16.2-initscripts.patch DELETED ---


--- asterisk-1.4.16.2-libcap.patch DELETED ---


--- asterisk-1.4.16.2-optimization.patch DELETED ---


--- asterisk-1.4.16.2-spandspfax.patch DELETED ---


--- asterisk-1.4.16.2-system-imap.patch DELETED ---




More information about the fedora-extras-commits mailing list