[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

freeze exception for zaptel 1.4.11~dfsg-2



Hi

There were a number of fixes that have acumulated in the package zaptel.
Mostly resolves module build issues with latest kernels (#493397).

Attached the diff, as obtained from:

  svn diff svn://svn.debian.org/pkg-voip/zaptel/tags/1.4.11~dfsg-1 \
    svn://svn.debian.org/pkg-voip/zaptel/trunk

Below are those changes explianed. Please let me know how to move
forward with them. 


 README.Debian                   |   16 -
 backports/etch                  |   11 
 changelog                       |   22 +
 control                         |    4 
 modulestest                     |   16 +
 patches/Makefile_fix_clean      |   17 -
 patches/Makefile_opt_level      |   27 --
 patches/bristuff                |  518 ----------------------------------------
 patches/device_class_2626       |   86 ++++++
 patches/headers_2627            |  108 ++++++++
 patches/series                  |   10 
 patches/sigcap_dacs             |   28 --
 patches/vzaphfc_proc_root_dir   |   26 ++
 patches/wctdm_fix_alarm         |   27 ++
 patches/wcte12xp_flags          |   17 +
 patches/xpp_fxo_cid_always      |   16 +
 patches/xpp_fxs_dtmf_leak       |   64 ++++
 patches/xpp_fxs_power           |   23 +
 rules                           |    7 
 source.lintian-overrides        |   56 ++++
 zaptel-source.lintian-overrides |    1 
 zaptel.dirs                     |    1 
 zaptel.doc-base.astribank       |    2 
 zaptel.doc-base.readme          |    2 
 zaptel.doc-base.zaptel.conf     |    2 
 zaptel.init                     |    3 
 zaptel.lintian                  |    1 
 zaptel.lintian-overrides        |    1 
 28 files changed, 502 insertions(+), 610 deletions(-)

Unused patches dropped
----------------------
The following patches have not been used for  quite some time, and 
keeping them is pointless:
* debian/patches/bristuff (split to subpatches)
* debian/patches/Makefile_fix_clean (adopted by upstream)
* debian/patches/Makefile_opt_level (adopted by upstream)
* debian/patches/sigcap_dacs (never really used)


Build Fixes
-----------
Patches to fix building with kernels 2.6.26 and with the upcoming 2.6.27 .

debian/patches/device_class_2626
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The usage of device_class (/sys/class) has changed in 2.6.26 , with a
smaller change later on in 2.6.27 . This patch adjusts zaptel-base.c
accordingly.


debian/patches/headers_2627
~~~~~~~~~~~~~~~~~~~~~~~~~~~
As of kernel 2.6.26 there is <asm/semaphore.h> and as of 2.6.27 the
original <linux/semaphore.h> no longer exists. This patch adjusts the
sources accordingly.


debian/patches/zaphfc_proc_root_dir
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
proc_root_driver was defined to NULL before 2.6.26 and removed then.
It stands for the "root" of procfs. This patch simply replaces that
symbol with NULL.


Bug Fixes
---------
Included here are small bugfixes directly from the upstream repository.
All of them are included in the recently-released Zaptel 1.4.12 .

debian/patches/wcte12xp_flags
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The driver used int for cpu flags. This has generated compilation
warnings. Not sure why it didn't generate errors (according to 
http://bugs.digium.com/12787 it caused errors on amd64 on SUSE). I 
believe it can have nasty side effects on 64 bits platforms. The rest 
of the Zaptel code uses long for those flags.


debian/patches/xpp_fxs_dtmf_leak
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
This is a larger change but a more subtle one. The xpp driver only
passes PCM (audio) in "active" channels. However in some cases a DTMF
tone dialed in that channel could get the mask of muted channels
incorrectly applied. As a result tones played to one channel would end
up being sent to another. This is a major functionality bug and may also
cause information leak in the wrong circumstances.


debian/patches/xpp_fxs_power
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
A fix for the Astribank FXS module driver:
A case where we didn't switch to low power at the end of a ring.
Thus in some cases the device will not detect when the phone was put
back on-hook (so you can't hang up a call).


debian/patches/xpp_fxo_cid_always
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lately an option was added to the xpp fxo module to always pass the PCM
stream (even when not in a call). Sadly it was mis-implemented. This
small patch fixes it. A minor fix, but a well-understood one.


debian/patches/wctdm_fix_alarm
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Fixes alarm status generation in FXO modules of Digium analog cards.
Without that the card may incorrectly report that it is in alarm
(disconnected from the provider) and thus Asterisk will not try calling
out through it.


Lintian
-------
The package had many warnings from lintian. Most of them were about 
extra source files not under debian/ . Those warnings are correct, but 
sadly will not be fixed. The package zaptel includes a number of 
upstream drivers as sources in order to make their maintinance simpler. 
All of those sources are guarantee not to be part of the upstream 
tarball. Having some 50 lintian warnings about that point only hides 
other messages.

lh_lintian was added and hence:
* lintian file for package zaptel was renamed:
* Build-Depending on a newer version of debhelper
* Hacks in the rules file and in zaptel.dirs to use the old file were 
  removed.


fxotune on zaptel.init
----------------------
fxotune is a utility that needs to be run on configured Zaptel channels.
If you are e.g. upgrading zaptel (just the utility packages) and Asterisk 
is already running, fxotune will fail to open those channels opened by
Asterisk and return an error. But this normally means that those
channels were already tuned before. Hence it is legitimate to fail here.
Otherwise it could potentially fail a package upgrade.


Sections in doc-base
--------------------
The doc-base documents were in the section Comm . This needed to be
adjusted to Network/Communication for Lenny.



Others
------
* debian/backports/<distro-name> is used to automate backports. Used by 
  some of our scripts.
* debian/modulestest is for test-building a zaptel-modules package at
  build time. Here we slightly enhanced here to help testing vs. 2.6.27.
* The README.Debian change documents that.

-- 
               Tzafrir Cohen
icq#16849755              jabber:tzafrir.cohen@xorcom.com
+972-50-7952406           mailto:tzafrir.cohen@xorcom.com
http://www.xorcom.com  iax:guest@local.xorcom.com/tzafrir
Index: debian/zaptel.lintian
===================================================================
--- debian/zaptel.lintian	(.../tags/1.4.11~dfsg-1)	(revision 6176)
+++ debian/zaptel.lintian	(.../trunk)	(revision 6176)
@@ -1 +0,0 @@
-zaptel: mknod-in-maintainer-script postinst:16
Index: debian/control
===================================================================
--- debian/control	(.../tags/1.4.11~dfsg-1)	(revision 6176)
+++ debian/control	(.../trunk)	(revision 6176)
@@ -3,8 +3,8 @@
 Priority: optional
 Maintainer: Debian VoIP Team <pkg-voip-maintainers@lists.alioth.debian.org>
 Uploaders: Kilian Krause <kilian@debian.org>, Mark Purcell <msp@debian.org>, Tzafrir Cohen <tzafrir.cohen@xorcom.com>, Faidon Liambotis <paravoid@debian.org>
-Build-Depends: debhelper, libnewt-dev, quilt, bzip2, libusb-dev, asciidoc (>= 8.2.6-1.1) 
-Standards-Version: 3.7.3
+Build-Depends: debhelper (>= 6.0.7~), libnewt-dev, quilt, bzip2, libusb-dev, asciidoc (>= 8.2.6-1.1) 
+Standards-Version: 3.8.0
 Homepage: http://www.asterisk.org/
 Vcs-Svn: svn://svn.debian.org/pkg-voip/zaptel/trunk/
 Vcs-Browser: http://svn.debian.org/wsvn/pkg-voip/zaptel/?op=log
Index: debian/patches/bristuff
===================================================================
--- debian/patches/bristuff	(.../tags/1.4.11~dfsg-1)	(revision 6176)
+++ debian/patches/bristuff	(.../trunk)	(revision 6176)
@@ -1,518 +0,0 @@
-## bristuff by Faidon Liambotis <paravoid@debian.org>
-##
-## bristuff 0.4.0-test4 zaptel.patch
-## no changes whatsoever; for new versions just insert the patch below @DPATCH@
-
-diff -urN zaptel-1.4.4.orig/zaptel-base.c zaptel-1.4.4/zaptel-base.c
---- zaptel-1.4.4.orig/zaptel-base.c	2007-07-05 20:10:29.000000000 +0200
-+++ zaptel-1.4.4/zaptel-base.c	2007-07-18 14:33:17.880802801 +0200
-@@ -138,6 +138,7 @@
- EXPORT_SYMBOL(zt_qevent_lock);
- EXPORT_SYMBOL(zt_hooksig);
- EXPORT_SYMBOL(zt_alarm_notify);
-+EXPORT_SYMBOL(zt_alarm_notify_no_master_change);
- EXPORT_SYMBOL(zt_set_dynamic_ioctl);
- EXPORT_SYMBOL(zt_ec_chunk);
- EXPORT_SYMBOL(zt_ec_span);
-@@ -595,6 +596,10 @@
- 		len += sprintf(page + len, "\tIRQ misses: %d\n", spans[span]->irqmisses);
- 	len += sprintf(page + len, "\n");
- 
-+	if (spans[span]->proc_read) {
-+		len += spans[span]->proc_read(spans[span], page + len);
-+	}
-+
- 
-         for (x=1;x<ZT_MAX_CHANNELS;x++) {	
- 		if (chans[x]) {
-@@ -2872,6 +2877,30 @@
- 	}
- }
- 
-+void zt_alarm_notify_no_master_change(struct zt_span *span)
-+{
-+	int j;
-+	int x;
-+
-+	span->alarms &= ~ZT_ALARM_LOOPBACK;
-+	/* Determine maint status */
-+	if (span->maintstat || span->mainttimer)
-+		span->alarms |= ZT_ALARM_LOOPBACK;
-+	/* DON'T CHANGE THIS AGAIN. THIS WAS DONE FOR A REASON.
-+ 	   The expression (a != b) does *NOT* do the same thing
-+	   as ((!a) != (!b)) */
-+	/* if change in general state */
-+	if ((!span->alarms) != (!span->lastalarms)) {
-+		if (span->alarms)
-+			j = ZT_EVENT_ALARM;
-+		else
-+			j = ZT_EVENT_NOALARM;
-+		span->lastalarms = span->alarms;
-+		for (x=0;x < span->channels;x++)
-+			zt_qevent_lock(&span->chans[x], j);
-+	}
-+}
-+
- #define VALID_SPAN(j) do { \
- 	if ((j >= ZT_MAX_SPANS) || (j < 1)) \
- 		return -EINVAL; \
-@@ -5226,11 +5255,40 @@
- 					*(txb++) = fasthdlc_tx_run_nocheck(&ms->txhdlc);
- 				}
- 				bytes -= left;
-+#ifdef CONFIG_ZAPATA_BRI_DCHANS
-+			} else if (ms->flags & ZT_FLAG_BRIDCHAN) {
-+			    /*
-+			     * Let's get this right, we want to transmit complete frames only.
-+			     * The card driver will do the dirty HDLC work for us.
-+			     * txb (transmit buffer) is supposed to be big enough to store one frame
-+			     * we will make this as big as the D fifo (1KB or 2KB)
-+			     */
-+
-+			    /* there are 'left' bytes in the user buffer left to transmit */
-+			    left = ms->writen[ms->outwritebuf] - ms->writeidx[ms->outwritebuf] - 2;
-+			    if (left > ms->maxbytes2transmit) {
-+				memcpy(txb, buf + ms->writeidx[ms->outwritebuf], ms->maxbytes2transmit);
-+				ms->writeidx[ms->outwritebuf] += ms->maxbytes2transmit;
-+				txb += ms->maxbytes2transmit;
-+				ms->bytes2transmit = ms->maxbytes2transmit;
-+				ms->eoftx = 0;
-+			    } else {
-+				memcpy(txb, buf + ms->writeidx[ms->outwritebuf], left);
-+				ms->writeidx[ms->outwritebuf] += left + 2;
-+				txb += left + 2;
-+				ms->bytes2transmit = left;
-+				ms->eoftx = 1;
-+			    }
-+			    bytes = 0;
-+#endif
- 			} else {
- 				memcpy(txb, buf + ms->writeidx[ms->outwritebuf], left);
- 				ms->writeidx[ms->outwritebuf]+=left;
- 				txb += left;
- 				bytes -= left;
-+#if defined(CONFIG_ZAPATA_BRI_DCHANS)	
-+				ms->bytes2transmit=ZT_CHUNKSIZE;
-+#endif
- 			}
- 			/* Check buffer status */
- 			if (ms->writeidx[ms->outwritebuf] >= ms->writen[ms->outwritebuf]) {
-@@ -5275,6 +5333,17 @@
- 				/* Transmit a flag if this is an HDLC channel */
- 				if (ms->flags & ZT_FLAG_HDLC)
- 					fasthdlc_tx_frame_nocheck(&ms->txhdlc);
-+#if defined(CONFIG_ZAPATA_BRI_DCHANS)	
-+				if(ms->flags & ZT_FLAG_BRIDCHAN) { 
-+			//	    if (ms->bytes2transmit > 0) {
-+					// txb += 2;
-+					// ms->bytes2transmit -= 2;
-+					bytes=0;
-+					ms->eoftx = 1;
-+//					printk(KERN_CRIT "zaptel EOF(%d) bytes2transmit %d\n",ms->eoftx,ms->bytes2transmit);
-+			//	    }
-+				}
-+#endif
- #ifdef CONFIG_ZAPATA_NET
- 				if (ms->flags & ZT_FLAG_NETDEV)
- 					netif_wake_queue(ztchan_to_dev(ms));
-@@ -5285,7 +5354,7 @@
- 					tasklet_schedule(&ms->ppp_calls);
- 				}
- #endif
--			}
-+			} 
- 		} else if (ms->curtone && !(ms->flags & ZT_FLAG_PSEUDO)) {
- 			left = ms->curtone->tonesamples - ms->tonep;
- 			if (left > bytes)
-@@ -5335,6 +5404,12 @@
- 				memset(txb, 0xFF, bytes);
- 			}
- 			bytes = 0;
-+#if defined(CONFIG_ZAPATA_BRI_DCHANS)	
-+		} else if(ms->flags & ZT_FLAG_BRIDCHAN) { 
-+		    ms->bytes2transmit = 0;
-+		    ms->eoftx = 0;
-+		    bytes = 0;
-+#endif
- 		} else {
- 			memset(txb, ZT_LIN2X(0, ms), bytes);	/* Lastly we use silence on telephony channels */
- 			bytes = 0;
-@@ -6153,6 +6228,14 @@
- 	int res;
- 	int left, x;
- 
-+#if defined(CONFIG_ZAPATA_BRI_DCHANS)	
-+	if (ms->flags & ZT_FLAG_BRIDCHAN) {
-+	    bytes = ms->bytes2receive;
-+	    if (bytes < 1) return;
-+//	    printk(KERN_CRIT "bytes2receive %d\n",ms->bytes2receive);
-+	}
-+#endif
-+
- 	while(bytes) {
- #if defined(CONFIG_ZAPATA_NET)  || defined(CONFIG_ZAPATA_PPP)
- 		skb = NULL;
-@@ -6210,6 +6293,19 @@
- 						}
- 					}
- 				}
-+#ifdef CONFIG_ZAPATA_BRI_DCHANS
-+			} else if (ms->flags & ZT_FLAG_BRIDCHAN) {
-+			    memcpy(buf + ms->readidx[ms->inreadbuf], rxb, left);
-+			    rxb += left;
-+			    ms->readidx[ms->inreadbuf] += left;
-+			    bytes -= left;
-+			    if (ms->eofrx == 1) {
-+				eof=1;
-+			    }
-+//			    printk(KERN_CRIT "receiving %d bytes\n",ms->bytes2receive);
-+			    ms->bytes2receive = 0;
-+			    ms->eofrx = 0;
-+#endif
- 			} else {
- 				/* Not HDLC */
- 				memcpy(buf + ms->readidx[ms->inreadbuf], rxb, left);
-diff -urN zaptel-1.4.4.orig/zaptel.h zaptel-1.4.4/zaptel.h
---- zaptel-1.4.4.orig/zaptel.h	2007-04-24 20:32:49.000000000 +0200
-+++ zaptel-1.4.4/zaptel.h	2007-07-18 14:33:17.884803750 +0200
-@@ -1106,6 +1106,13 @@
- 	int do_ppp_error;
- 	struct sk_buff_head ppp_rq;
- #endif
-+#ifdef CONFIG_ZAPATA_BRI_DCHANS
-+	int bytes2receive;
-+	int maxbytes2transmit; /* size of the tx buffer in the card driver */
-+	int bytes2transmit;
-+	int eofrx;
-+	int eoftx;
-+#endif
- 	spinlock_t lock;
- 	char name[40];		/* Name */
- 	/* Specified by zaptel */
-@@ -1181,7 +1188,7 @@
- 	int		txbufpolicy;			/* Buffer policy */
- 	int		rxbufpolicy;			/* Buffer policy */
- 	int		txdisable;				/* Disable transmitter */
--	int 	rxdisable;				/* Disable receiver */
-+	int 		rxdisable;				/* Disable receiver */
- 	
- 	
- 	/* Tone zone stuff */
-@@ -1346,6 +1353,10 @@
- #define ZT_FLAG_NOSTDTXRX		(1 << 17)	/* Do NOT do standard transmit and receive on every interrupt */
- #define ZT_FLAG_LOOPED			(1 << 18)	/* Loopback the receive data from the channel to the transmit */
- 
-+#if defined(CONFIG_ZAPATA_BRI_DCHANS)	
-+#define ZT_FLAG_BRIDCHAN		(1 << 19)
-+#endif
-+
- struct zt_span {
- 	spinlock_t lock;
- 	void *pvt;			/* Private stuff */
-@@ -1449,6 +1460,10 @@
- 	int watchcounter;
- 	int watchstate;
- #endif	
-+#ifdef CONFIG_PROC_FS
-+	/* Allow subordinate drivers to print out their own stuff */
-+	int (*proc_read)(struct zt_span *span, char *start);
-+#endif
- };
- 
- struct zt_transcoder_channel {
-@@ -1581,6 +1596,9 @@
- /* Notify a change possible change in alarm status */
- void zt_alarm_notify(struct zt_span *span);
- 
-+/* Notify a change possible change in alarm status, DONT change the zaptel master! */
-+extern void zt_alarm_notify_no_master_change(struct zt_span *span);
-+
- /* Initialize a tone state */
- void zt_init_tone_state(struct zt_tone_state *ts, struct zt_tone *zt);
- 
-diff -urN zaptel-1.4.4.orig/zconfig.h zaptel-1.4.4/zconfig.h
---- zaptel-1.4.4.orig/zconfig.h	2007-04-24 20:32:49.000000000 +0200
-+++ zaptel-1.4.4/zconfig.h	2007-07-18 14:33:17.884803750 +0200
-@@ -184,4 +184,10 @@
-  */
- /* #define FXSFLASH */
- 
-+/*
-+ * Uncomment the following for BRI D channels
-+ *
-+ */
-+#define CONFIG_ZAPATA_BRI_DCHANS
-+
- #endif
-diff -urN zaptel-1.4.4.orig/ztcfg.c zaptel-1.4.4/ztcfg.c
---- zaptel-1.4.4.orig/ztcfg.c	2007-02-07 17:51:27.000000000 +0100
-+++ zaptel-1.4.4/ztcfg.c	2007-07-18 14:33:17.884803750 +0200
-@@ -96,6 +96,10 @@
- 
- static int stopmode = 0;
- 
-+static int stopwhich = -1;
-+
-+static int startwhich = -1;
-+
- static int numdynamic = 0;
- 
- static char zonestoload[ZT_TONE_ZONE_MAX][10];
-@@ -1261,7 +1265,8 @@
- 		"  -d [level]        -- Generate debugging output. (Default level is 1.)\n"
- 		"  -f                -- Always reconfigure every channel\n"
- 		"  -h                -- Generate this help statement\n"
--		"  -s                -- Shutdown spans only\n"
-+		"  -s[span]          -- Deactivate/shutdown span [span]. Deactivates all spans if no [span] is given.\n"
-+		"  -a[span]          -- Activate/start span [span]. Activates all spans if no [span] is given.\n"
- 		"  -t                -- Test mode only, do not apply\n"
- 		"  -v                -- Verbose (more -v's means more verbose)\n"
- 	,c);
-@@ -1274,7 +1279,7 @@
- 	char *buf;
- 	char *key, *value;
- 	int x,found;
--	while((c = getopt(argc, argv, "fthc:vsd::")) != -1) {
-+	while((c = getopt(argc, argv, "fthc:vs::a::d::")) != -1) {
- 		switch(c) {
- 		case 'c':
- 			filename=optarg;
-@@ -1295,8 +1300,20 @@
- 			fo_real = 0;
- 			break;
- 		case 's':
-+			if (optarg) {
-+			    stopwhich = atoi(optarg);
-+			} else {
-+			    stopwhich = -1;
-+			}
- 			stopmode = 1;
- 			break;
-+		case 'a':
-+			if (optarg) {
-+			    startwhich = atoi(optarg);
-+			} else {
-+			    startwhich = -1;
-+			}
-+			break;
- 		case 'd':
- 			if (optarg)
- 				debug = atoi(optarg);
-@@ -1358,29 +1375,42 @@
- 				ioctl(fd, ZT_DYNAMIC_DESTROY, &zds[x]);
- 			}
- 			if (stopmode) {
--				for (x=0;x<spans;x++) {
-+				if (stopwhich > 0){
-+				    if ((stopwhich > spans) || (ioctl(fd, ZT_SHUTDOWN, &lc[stopwhich - 1].span))) {
-+					fprintf(stderr, "Zaptel shutdown failed: %s\n", strerror(errno));
-+					close(fd);
-+					exit(1);						
-+				    } else {
-+					if (verbose) {
-+					    printf("Deactivated span %d\n", stopwhich);
-+					}
-+				    }					    
-+				} else {
-+				    for (x=0;x<spans;x++) {
- 					if (ioctl(fd, ZT_SHUTDOWN, &lc[x].span)) {
- 						fprintf(stderr, "Zaptel shutdown failed: %s\n", strerror(errno));
- 						close(fd);
- 						exit(1);
- 					}
-+				    }
- 				}
- 			} else {
--				for (x=0;x<spans;x++) {
-+ 				if (startwhich == -1) {
-+				    for (x=0;x<spans;x++) {
- 					if (ioctl(fd, ZT_SPANCONFIG, lc + x)) {
- 						fprintf(stderr, "ZT_SPANCONFIG failed on span %d: %s (%d)\n", lc[x].span, strerror(errno), errno);
- 						close(fd);
- 						exit(1);
- 					}
--				}
--				for (x=0;x<numdynamic;x++) {
-+				    }
-+				    for (x=0;x<numdynamic;x++) {
- 					if (ioctl(fd, ZT_DYNAMIC_CREATE, &zds[x])) {
- 						fprintf(stderr, "Zaptel dynamic span creation failed: %s\n", strerror(errno));
- 						close(fd);
- 						exit(1);
- 					}
--				}
--				for (x=1;x<ZT_MAX_CHANNELS;x++) {
-+				    }
-+				    for (x=1;x<ZT_MAX_CHANNELS;x++) {
- 					struct zt_params current_state;
- 					int master;
- 					int needupdate = force;
-@@ -1454,32 +1484,45 @@
- 						close(fd);
- 						exit(1);
- 					}
--				}
--				for (x=0;x<numzones;x++) {
-+				    }
-+				    for (x=0;x<numzones;x++) {
- 					if (debug & DEBUG_APPLY) {
- 						printf("Loading tone zone for %s\n", zonestoload[x]);
- 						fflush(stdout);
- 					}
- 					if (tone_zone_register(fd, zonestoload[x]))
- 						error("Unable to register tone zone '%s'\n", zonestoload[x]);
--				}
--				if (debug & DEBUG_APPLY) {
-+				    }
-+				    if (debug & DEBUG_APPLY) {
- 					printf("Doing startup\n");
- 					fflush(stdout);
--				}
--				if (deftonezone > -1) {
-+				    }
-+				    if (deftonezone > -1) {
- 					if (ioctl(fd, ZT_DEFAULTZONE, &deftonezone)) {
- 						fprintf(stderr, "ZT_DEFAULTZONE failed: %s (%d)\n", strerror(errno), errno);
- 						close(fd);
- 						exit(1);
- 					}
-+				    }
- 				}
--				for (x=0;x<spans;x++) {
-+				if (startwhich > 0) {
-+					if ((startwhich > spans) || (ioctl(fd, ZT_STARTUP, &lc[startwhich - 1].span))) {
-+					    fprintf(stderr, "Zaptel startup failed: %s\n", strerror(errno));
-+					    close(fd);
-+					    exit(1);
-+					} else {
-+					    if (verbose) {
-+					        printf("Activated span %d\n", startwhich);
-+					    }
-+					}
-+				} else {
-+				    for (x=0;x<spans;x++) {
- 					if (ioctl(fd, ZT_STARTUP, &lc[x].span)) {
- 						fprintf(stderr, "Zaptel startup failed: %s\n", strerror(errno));
- 						close(fd);
- 						exit(1);
- 					}
-+				    }
- 				}
- 			}
- 		}
-diff -urN zaptel-1.4.4.orig/ztpty.c zaptel-1.4.4/ztpty.c
---- zaptel-1.4.4.orig/ztpty.c	1970-01-01 01:00:00.000000000 +0100
-+++ zaptel-1.4.4/ztpty.c	2007-07-18 14:33:17.884803750 +0200
-@@ -0,0 +1,112 @@
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <unistd.h>
-+#include <errno.h>
-+#include <string.h>
-+#include <fcntl.h>
-+#include <sys/time.h>
-+#include <sys/signal.h>
-+#include <sys/select.h>
-+#include <math.h>
-+#include "zaptel.h"
-+
-+#define SIZE 8000
-+
-+
-+
-+void doit(int fd, int stdinfd) {
-+    fd_set fds;
-+    char inbuffer[4096];
-+    char outbuffer[4096];
-+    int res = 0;
-+    int i = 0;
-+
-+//    fprintf(stderr, "fd %d stdin fd %d\n", fd, stdinfd);
-+
-+    for (;;) {
-+	FD_ZERO(&fds);
-+        FD_SET(fd, &fds);
-+	FD_SET(stdinfd, &fds);
-+        /* Wait for *some* sort of I/O */
-+        res = select(stdinfd + 1, &fds, NULL, NULL, NULL);
-+        if (res < 0) {
-+                fprintf(stderr, "Error in select: %s\n", strerror(errno));
-+                return;
-+        }
-+        if (FD_ISSET(stdinfd, &fds)) {
-+            res = read(stdinfd, inbuffer, sizeof(inbuffer));
-+	    if (res > 0) {
-+//		fprintf(stderr, "read %d bytes from stdin\n", res);
-+		if (res > 0) {
-+		    for (i=0; i < res ; i++) {
-+			if (inbuffer[i] == '\n') {
-+			    if ((i > 0) && (inbuffer[i-1] == ' ')) {
-+				inbuffer[i-1] = 0x1a;
-+			    }
-+			    inbuffer[i] = 0xd;
-+			}
-+		    }
-+		res = write(fd, inbuffer, res+2);
-+//		res = write(STDOUT_FILENO, inbuffer, res);
-+//		fprintf(stderr, "wrote %d bytes to stdout\n", res);
-+		}
-+	    }
-+        }
-+        if (FD_ISSET(fd, &fds)) {
-+            res = read(fd, outbuffer, sizeof(outbuffer));
-+//	    fprintf(stderr, "read %d bytes from fd\n", res);
-+	    if (res > 0) {
-+		res = write(STDOUT_FILENO, outbuffer, res);
-+//		fprintf(stderr, "wrote %d bytes to stdout\n", res);
-+	    }
-+        }
-+    }
-+
-+
-+}
-+
-+int main(int argc, char *argv[])
-+{
-+	int fd;
-+	int stdinfd;
-+	struct zt_params p;
-+	struct zt_bufferinfo bi;
-+	int blocksize=0;
-+	fd = open(argv[1], O_RDWR | O_NONBLOCK);
-+	if (fd < 0) {
-+		fprintf(stderr, "Unable to open zap interface: %s\n", strerror(errno));
-+		exit(1);
-+	}
-+	if (ioctl(fd, ZT_GET_PARAMS, &p)) {
-+		fprintf(stderr, "Unable to get parameters on '%s': %s\n", argv[1], strerror(errno));
-+		exit(1);
-+	}
-+	if ((p.sigtype != ZT_SIG_HDLCRAW) && (p.sigtype != ZT_SIG_HDLCFCS)) {
-+		fprintf(stderr, "%s is in %d signalling, not FCS HDLC or RAW HDLC mode\n", argv[1], p.sigtype);
-+		exit(1);
-+	}
-+
-+	if (ioctl(fd, ZT_GET_BLOCKSIZE, &blocksize)) {
-+		fprintf(stderr, "Unable to get blocksize on '%s': %s\n", argv[1], strerror(errno));
-+		exit(1);
-+	} else {
-+//		fprintf(stderr, "blocksize %d\n", blocksize);
-+	}
-+	
-+	bi.txbufpolicy = ZT_POLICY_IMMEDIATE;
-+        bi.rxbufpolicy = ZT_POLICY_IMMEDIATE;
-+	bi.numbufs = 16;
-+	bi.bufsize = 1024;
-+	if (ioctl(fd, ZT_SET_BUFINFO, &bi)) {
-+		fprintf(stderr, "Unable to set buffer info on '%s': %s\n", argv[1], strerror(errno));
-+		exit(1);
-+	}
-+
-+	stdinfd = open("/dev/stdin", O_RDONLY | O_NONBLOCK);
-+
-+	
-+	doit(fd, stdinfd);
-+	close(stdinfd);
-+	close(fd);
-+	return 0;
-+}
Index: debian/patches/Makefile_fix_clean
===================================================================
--- debian/patches/Makefile_fix_clean	(.../tags/1.4.11~dfsg-1)	(revision 6176)
+++ debian/patches/Makefile_fix_clean	(.../trunk)	(revision 6176)
@@ -1,17 +0,0 @@
-## Makefile_fix_clean by Kilian Krause <kilian@debian.org>
-##
-## Don't try to run clean on empty dir
-
-diff -urNad zaptel-1.4.5.1~dfsg~/Makefile zaptel-1.4.5.1~dfsg/Makefile
---- zaptel-1.4.5.1~dfsg~/Makefile	2007-08-21 20:11:37.000000000 +0200
-+++ zaptel-1.4.5.1~dfsg/Makefile	2007-08-26 11:56:49.000000000 +0200
-@@ -601,7 +601,9 @@
- 	rm -f *.o ztcfg tzdriver sethdlc sethdlc-new
- 	rm -f $(LTZ_SO) $(LTZ_A) *.lo
- ifeq ($(BUILDVER),linux26)
-+ifdef KSRC
- 	$(MAKE) -C $(KSRC) SUBDIRS=$(PWD) clean
-+endif
- 	$(MAKE) -C xpp/utils clean
- else
- 	$(MAKE) -C wct4xxp clean
Index: debian/patches/Makefile_opt_level
===================================================================
--- debian/patches/Makefile_opt_level	(.../tags/1.4.11~dfsg-1)	(revision 6176)
+++ debian/patches/Makefile_opt_level	(.../trunk)	(revision 6176)
@@ -1,27 +0,0 @@
-## Makefile_opt_level.dpatch by Kilian Krause <kilian@debian.org>
-##
-## All lines beginning with `## DP:' are a description of the patch.
-## DP: Use -O2 in accordance with Debian Policy
-
-@DPATCH@
-diff -urNad zaptel-1.4.5.1~dfsg~/Makefile zaptel-1.4.5.1~dfsg/Makefile
---- zaptel-1.4.5.1~dfsg~/Makefile	2007-08-21 20:11:37.000000000 +0200
-+++ zaptel-1.4.5.1~dfsg/Makefile	2007-08-26 12:06:19.000000000 +0200
-@@ -138,7 +138,7 @@
-   ALL_MODULES+=$(patsubst %,xpp/%.ko,xpp_usb xpd_fxo xpd_fxs xpp)
- endif
- 
--CFLAGS+=-I. -O4 -g -Wall -DBUILDING_TONEZONE #-DTONEZONE_DRIVER
-+CFLAGS+=-I. -O2 -g -Wall -DBUILDING_TONEZONE #-DTONEZONE_DRIVER
- ifneq (,$(findstring ppc,$(UNAME_M)))
- CFLAGS_PPC:=-fsigned-char
- endif
-@@ -147,7 +147,7 @@
- endif
- CFLAGS+=$(CFLAGS_PPC) $(CFLAGS_x86_64)
- LCFLAGS=-fPIC $(CFLAGS) -DBUILDING_TONEZONE
--KFLAGS=-I$(KINCLUDES) -O6
-+KFLAGS=-I$(KINCLUDES) -O2
- KFLAGS+=-DMODULE -D__KERNEL__ -DEXPORT_SYMTAB -I$(KSRC)/drivers/net \
- 	-Wall -I. -Wstrict-prototypes -fomit-frame-pointer -I$(KSRC)/drivers/net/wan -I$(KINCLUDES)/net
- ifneq (,$(wildcard $(KINCLUDES)/linux/modversions.h))
Index: debian/patches/sigcap_dacs
===================================================================
--- debian/patches/sigcap_dacs	(.../tags/1.4.11~dfsg-1)	(revision 6176)
+++ debian/patches/sigcap_dacs	(.../trunk)	(revision 6176)
@@ -1,28 +0,0 @@
-The asterisk-gui uses ztscan to detect if a span is digital: if its
-first B channel supports (as in its sigcap) ZT_SIG_DACS. This patch adds
-the ZT_SIG_DACS capability for a number of channel drivers. It seems 
-that those channels would support it anyway (although it rarely gets
-tested).
-
---- zaptel-1.4.10.1~dfsg.orig/kernel/vzaphfc/vzaphfc_main.c
-+++ zaptel-1.4.10.1~dfsg/kernel/vzaphfc/vzaphfc_main.c
-@@ -1005,7 +1005,7 @@ static int hfc_zap_initialize(struct hfc
- 			ZT_SIG_FXSLS | ZT_SIG_FXSGS |
- 			ZT_SIG_FXSKS | ZT_SIG_FXOLS |
- 			ZT_SIG_FXOGS | ZT_SIG_FXOKS |
--			ZT_SIG_CAS | ZT_SIG_SF;
-+			ZT_SIG_CAS | ZT_SIG_SF | ZT_SIG_DACS;
- 
- 		card->zt_chans[i].chanpos = i + 1; 
- 	}
---- zaptel-1.4.10.1~dfsg.orig/kernel/zaphfc/zaphfc.c
-+++ zaptel-1.4.10.1~dfsg/kernel/zaphfc/zaphfc.c
-@@ -721,7 +721,7 @@ static int zthfc_initialize(struct zt_hf
- 	memset(&(zthfc->chans[i]), 0x0, sizeof(struct zt_chan));
- 	sprintf(zthfc->chans[i].name, "ZTHFC%d/%d/%d", hfc_dev_count + 1,0,i + 1);
- 	zthfc->chans[i].pvt = zthfc;
--	zthfc->chans[i].sigcap =  ZT_SIG_EM | ZT_SIG_CLEAR | ZT_SIG_FXSLS | ZT_SIG_FXSGS | ZT_SIG_FXSKS | ZT_SIG_FXOLS | ZT_SIG_FXOGS | ZT_SIG_FXOKS | ZT_SIG_CAS | ZT_SIG_SF;
-+	zthfc->chans[i].sigcap =  ZT_SIG_EM | ZT_SIG_CLEAR | ZT_SIG_FXSLS | ZT_SIG_FXSGS | ZT_SIG_FXSKS | ZT_SIG_FXOLS | ZT_SIG_FXOGS | ZT_SIG_FXOKS | ZT_SIG_CAS | ZT_SIG_SF | ZT_SIG_DACS;
- 	zthfc->chans[i].chanpos = i + 1; 
-     }
- 
Index: debian/patches/xpp_fxo_cid_always
===================================================================
--- debian/patches/xpp_fxo_cid_always	(.../tags/1.4.11~dfsg-1)	(revision 0)
+++ debian/patches/xpp_fxo_cid_always	(.../trunk)	(revision 6176)
@@ -0,0 +1,16 @@
+xpp: fxo: fix caller-id CID_STYLE_PASS_ALWAYS.
+do always pass PCM if that's what the user asked.
+
+Source: svn diff -c 4472 http://svn.digium.com/svn/zaptel/branches/1.4
+
+--- a/kernel/xpp/card_fxo.c
++++ b/kernel/xpp/card_fxo.c
+@@ -466,6 +466,8 @@ static int FXO_card_init(xbus_t *xbus, x
+ 		priv->polarity[i] = POL_UNKNOWN;	/* will be updated on next battery sample */
+ 		priv->battery[i] = BATTERY_UNKNOWN;	/* will be updated on next battery sample */
+ 		priv->power[i] = POWER_UNKNOWN;	/* will be updated on next battery sample */
++		if(caller_id_style == CID_STYLE_PASS_ALWAYS)
++			BIT_SET(xpd->cid_on, i);
+ 	}
+ 	XPD_DBG(GENERAL, xpd, "done\n");
+ 	for_each_line(xpd, i) {
Index: debian/patches/vzaphfc_proc_root_dir
===================================================================
--- debian/patches/vzaphfc_proc_root_dir	(.../tags/1.4.11~dfsg-1)	(revision 0)
+++ debian/patches/vzaphfc_proc_root_dir	(.../trunk)	(revision 6176)
@@ -0,0 +1,26 @@
+proc_root_driver was defined to NULL before 2.6.26 and removed then.
+It stands for the "root" of procfs. This patch simply replaces that 
+symbol with NULL.
+
+Fixes building on 2.6.26.
+
+--- a/kernel/vzaphfc/vzaphfc_main.c
++++ b/kernel/vzaphfc/vzaphfc_main.c
+@@ -1967,7 +1967,7 @@ static int __init hfc_init_module(void)
+ 	printk(KERN_INFO hfc_DRIVER_PREFIX
+ 		hfc_DRIVER_STRING " loading\n");
+ 
+-	hfc_proc_zaphfc_dir = proc_mkdir(hfc_DRIVER_NAME, proc_root_driver);
++	hfc_proc_zaphfc_dir = proc_mkdir(hfc_DRIVER_NAME, NULL);
+ 
+ 	ret = zap_pci_module(&hfc_driver);
+ 	return ret;
+@@ -1979,7 +1979,7 @@ static void __exit hfc_module_exit(void)
+ {
+ 	pci_unregister_driver(&hfc_driver);
+ 
+-	remove_proc_entry(hfc_DRIVER_NAME, proc_root_driver);
++	remove_proc_entry(hfc_DRIVER_NAME, NULL);
+ 
+ 	printk(KERN_INFO hfc_DRIVER_PREFIX
+ 		hfc_DRIVER_STRING " unloaded\n");
Index: debian/patches/wcte12xp_flags
===================================================================
--- debian/patches/wcte12xp_flags	(.../tags/1.4.11~dfsg-1)	(revision 0)
+++ debian/patches/wcte12xp_flags	(.../trunk)	(revision 6176)
@@ -0,0 +1,17 @@
+Fixed type of flags parameter to spin_lock_irqsave functions.  Fixes
+compilation issues on platforms where int and long do not have the same size.
+
+Source: svn diff -c 4345 http://svn.digium.com/svn/zaptel/branches/1.4
+Upstream issue: http://bugs.digium.com/12787
+
+--- a/kernel/wcte12xp/base.c
++++ b/kernel/wcte12xp/base.c
+@@ -1061,7 +1061,7 @@ static int t1xxp_echocan_with_params(str
+ 	struct adt_lec_params params;
+ 	struct t1 *wc = chan->pvt;
+ 	struct vpm150m *vpm150m = wc->vpm150m;
+-	unsigned int flags;
++	unsigned long flags;
+ 	struct vpm150m_workentry *work;
+ 	unsigned int ret;
+ 
Index: debian/patches/series
===================================================================
--- debian/patches/series	(.../tags/1.4.11~dfsg-1)	(revision 6176)
+++ debian/patches/series	(.../trunk)	(revision 6176)
@@ -1,11 +1,17 @@
 oslec_zaptel
-#bristuff
 bri_dchan
 proc_read
 zt_alarm_notify_no_master_change
 ztcfg-start_stop
 zaphfc-florz
 zaptel_perl
-#sigcap_dacs
 chan_release_check
 florz-vmalloc
+xpp_fxs_power
+xpp_fxs_dtmf_leak
+wctdm_fix_alarm
+device_class_2626
+xpp_fxo_cid_always
+headers_2627 
+vzaphfc_proc_root_dir
+wcte12xp_flags 
Index: debian/patches/headers_2627
===================================================================
--- debian/patches/headers_2627	(.../tags/1.4.11~dfsg-1)	(revision 0)
+++ debian/patches/headers_2627	(.../trunk)	(revision 6176)
@@ -0,0 +1,108 @@
+Fix location of headers for kernel 2.6.27.
+
+Source:  svn diff -c 4496 http://svn.digium.com/svn/zaptel/branches/1.4
+Upstream Issue: http://bugs.digium.com/13277
+
+--- a/kernel/xpp/xpd.h
++++ b/kernel/xpp/xpd.h
+@@ -29,8 +29,13 @@
+ #ifdef	__KERNEL__
+ #include <linux/kernel.h>
+ #include <linux/device.h>
++#include <linux/version.h>
+ #include <asm/atomic.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)
++#include <linux/semaphore.h>
++#else
+ #include <asm/semaphore.h>
++#endif
+ #include <linux/moduleparam.h>
+ #ifdef	XPP_DEBUGFS
+ #ifndef	CONFIG_DEBUG_FS
+--- a/kernel/wctdm24xxp/GpakCust.c
++++ b/kernel/wctdm24xxp/GpakCust.c
+@@ -37,7 +37,11 @@
+ 
+ #include <linux/version.h>
+ #include <linux/delay.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)
++#include <linux/semaphore.h>
++#else
+ #include <asm/semaphore.h>
++#endif
+ 
+ #include "zaptel.h"
+ #include "wctdm24xxp.h"
+--- a/kernel/wctdm24xxp/wctdm24xxp.h
++++ b/kernel/wctdm24xxp/wctdm24xxp.h
+@@ -29,7 +29,12 @@
+ 
+ #include "../zaptel.h"
+ #include "../voicebus.h"
++#include <linux/version.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)
++#include <linux/semaphore.h>
++#else
+ #include <asm/semaphore.h>
++#endif
+ 
+ #define NUM_FXO_REGS 60
+ 
+--- a/kernel/wctdm24xxp/base.c
++++ b/kernel/wctdm24xxp/base.c
+@@ -44,7 +44,11 @@ Tx Gain - W/Pre-Emphasis: -23.99 to 0.00
+ #include <linux/interrupt.h>
+ #include <linux/workqueue.h>
+ #include <linux/delay.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)
++#include <linux/semaphore.h>
++#else
+ #include <asm/semaphore.h>
++#endif
+ 
+ #ifdef LINUX26
+ #include <linux/moduleparam.h>
+--- a/kernel/wctdm24xxp/GpakApi.c
++++ b/kernel/wctdm24xxp/GpakApi.c
+@@ -34,7 +34,11 @@
+  */
+ 
+ #include <linux/version.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)
++#include <linux/semaphore.h>
++#else
+ #include <asm/semaphore.h>
++#endif
+ 
+ #include "zaptel.h"
+ 
+--- a/kernel/wcte12xp/vpmadt032.c
++++ b/kernel/wcte12xp/vpmadt032.c
+@@ -29,7 +29,12 @@
+  */
+ 
+ #include <linux/delay.h>
++#include <linux/version.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)
++#include <linux/semaphore.h>
++#else
+ #include <asm/semaphore.h>
++#endif
+ #include <linux/pci.h> 
+ #include <linux/firmware.h> 
+ #include <linux/list.h> 
+--- a/kernel/wctc4xxp/base.c
++++ b/kernel/wctc4xxp/base.c
+@@ -38,7 +38,12 @@
+ #include <linux/mman.h>
+ #include <linux/delay.h>
+ #include <asm/io.h>
++#include <linux/version.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)
++#include <linux/semaphore.h>
++#else
+ #include <asm/semaphore.h>
++#endif
+ #include <linux/jiffies.h>
+ #include <linux/workqueue.h>
+ #include <linux/moduleparam.h>
Index: debian/patches/xpp_fxs_dtmf_leak
===================================================================
--- debian/patches/xpp_fxs_dtmf_leak	(.../tags/1.4.11~dfsg-1)	(revision 0)
+++ debian/patches/xpp_fxs_dtmf_leak	(.../trunk)	(revision 6176)
@@ -0,0 +1,64 @@
+Fixes: Muted DTMF PCM (from FXS modules) could "leak" to the next channel.
+(From xpp r5796).
+
+Sources: 
+svn diff -c 4353 http://svn.digium.com/svn/zaptel/branches/1.4
+svn diff -c 4408 http://svn.digium.com/svn/zaptel/branches/1.4
+
+--- a/kernel/xpp/xbus-pcm.c
++++ b/kernel/xpp/xbus-pcm.c
+@@ -858,34 +858,43 @@ void generic_card_pcm_tospan(xbus_t *xbu
+ {
+ 	byte		*pcm;
+ 	xpp_line_t	pcm_mask;
++	xpp_line_t	pcm_mute;
+ 	unsigned long	flags;
+ 	int		i;
+ 
+ 	pcm = RPACKET_FIELD(pack, GLOBAL, PCM_READ, pcm);
+ 	pcm_mask = RPACKET_FIELD(pack, GLOBAL, PCM_READ, lines);
+ 	spin_lock_irqsave(&xpd->lock, flags);
++	/*
++	 * Calculate the channels we want to mute
++	 */
++	pcm_mute = ~xpd->wanted_pcm_mask;
++	pcm_mute |= xpd->mute_dtmf | xpd->silence_pcm;
+ 	if(!SPAN_REGISTERED(xpd))
+ 		goto out;
+ 	for (i = 0; i < xpd->channels; i++) {
+ 		volatile u_char	*r = xpd->span.chans[i].readchunk;
++		bool		got_data = IS_SET(pcm_mask, i);
+ 
+-		if(!IS_SET(xpd->wanted_pcm_mask, i)) {
++		if(got_data && !IS_SET(pcm_mute, i)) {
++			/* We have and want real data */
++			// memset((u_char *)r, 0x5A, ZT_CHUNKSIZE);	// DEBUG
++			// fill_beep((u_char *)r, 1, 1);	// DEBUG: BEEP
++			memcpy((u_char *)r, pcm, ZT_CHUNKSIZE);
++		} else if(IS_SET(xpd->wanted_pcm_mask | xpd->silence_pcm, i)) {
++			/* Inject SILENCE */
++			memset((u_char *)r, 0x7F, ZT_CHUNKSIZE);
+ 			if(IS_SET(xpd->silence_pcm, i)) {
+-				memset((u_char *)r, 0x7F, ZT_CHUNKSIZE);	// SILENCE
++				/*
++				 * This will clear the EC buffers until next tick
++				 * So we don't have noise residues from the past.
++				 */
+ 				memset(xpd->ec_chunk2[i], 0x7F, ZT_CHUNKSIZE);
+ 				memset(xpd->ec_chunk1[i], 0x7F, ZT_CHUNKSIZE);
+ 			}
+-			continue;
+ 		}
+-		pcm_mask &= ~xpd->mute_dtmf;
+-		if(IS_SET(pcm_mask, i)) {
+-			// memset((u_char *)r, 0x5A, ZT_CHUNKSIZE);	// DEBUG
+-			// fill_beep((u_char *)r, 1, 1);	// DEBUG: BEEP
+-			memcpy((u_char *)r, pcm, ZT_CHUNKSIZE);
++		if(got_data)
+ 			pcm += ZT_CHUNKSIZE;
+-		} else {
+-			memset((u_char *)r, 0x7F, ZT_CHUNKSIZE);	// SILENCE
+-		}
+ 	}
+ out:
+ 	XPD_COUNTER(xpd, PCM_READ)++;
Index: debian/patches/wctdm_fix_alarm
===================================================================
--- debian/patches/wctdm_fix_alarm	(.../tags/1.4.11~dfsg-1)	(revision 0)
+++ debian/patches/wctdm_fix_alarm	(.../trunk)	(revision 6176)
@@ -0,0 +1,27 @@
+make battery loss to red alarm translation actually work for wctdm and 
+wctdm24xxp.
+
+Source: svn diff -c 4429 http://svn.digium.com/svn/zaptel/branches/1.4
+
+--- a/kernel/wctdm.c
++++ b/kernel/wctdm.c
+@@ -928,7 +928,7 @@ static inline void wctdm_voicedaa_check_
+ 		if (--fxo->battalarm == 0) {
+ 			/* the alarm timer has expired, so update the battery alarm state
+ 			   for this channel */
+-			zt_alarm_channel(&wc->chans[card], fxo->battery ? ZT_ALARM_NONE : ZT_ALARM_RED);
++			zt_alarm_channel(&wc->chans[card], fxo->battery == BATTERY_LOST ? ZT_ALARM_RED : ZT_ALARM_NONE);
+ 		}
+ 	}
+ 
+--- a/kernel/wctdm24xxp/base.c
++++ b/kernel/wctdm24xxp/base.c
+@@ -1306,7 +1306,7 @@ static inline void wctdm_voicedaa_check_
+ 		if (--fxo->battalarm == 0) {
+ 			/* the alarm timer has expired, so update the battery alarm state
+ 			   for this channel */
+-			zt_alarm_channel(&wc->chans[card], fxo->battery ? ZT_ALARM_NONE : ZT_ALARM_RED);
++			zt_alarm_channel(&wc->chans[card], fxo->battery == BATTERY_LOST ? ZT_ALARM_RED : ZT_ALARM_NONE);
+ 		}
+ 	}
+ 
Index: debian/patches/xpp_fxs_power
===================================================================
--- debian/patches/xpp_fxs_power	(.../tags/1.4.11~dfsg-1)	(revision 0)
+++ debian/patches/xpp_fxs_power	(.../trunk)	(revision 6176)
@@ -0,0 +1,23 @@
+A fix for the Astribank FXS module driver:
+A case where we didn't switch to low power at the end of a ring.
+Issue may prevents ONHOOK detection.
+
+MErged upstreeam. Will be included in zaptel 1.4.12,. Original command:
+svn diff -c 4395 http://svn.digium.com/svn/zaptel/branches/1.4/
+
+Index: card_fxs.c
+===================================================================
+--- a/kernel/xpp/card_fxs.c	(revision 4394)
++++ b/kernel/xpp/card_fxs.c	(revision 4395)
+@@ -1126,6 +1126,11 @@
+ 				MARK_OFF(priv, i, LED_GREEN);
+ 				update_line_status(xpd, i, 0);
+ 			}
++			/*
++			 * Must witch to low power. In high power, an ONHOOK
++			 * won't be detected.
++			 */
++			do_chan_power(xbus, xpd, i, 0);
+ 		}
+ 	}
+ 	__pcm_recompute(xpd, 0);	/* in a spinlock */
Index: debian/patches/device_class_2626
===================================================================
--- debian/patches/device_class_2626	(.../tags/1.4.11~dfsg-1)	(revision 0)
+++ debian/patches/device_class_2626	(.../trunk)	(revision 6176)
@@ -0,0 +1,86 @@
+Fix usage of device_class with kernels >= 2.6.26.
+
+Source: svn diff -c 4426 http://svn.digium.com/svn/zaptel/branches/1.4
+* Later fix from rev. 4449
+* Later fixed for kernel 2.6.27 in rev. 4496 from zap-dev.patch in 
+  http://bugs.digium.com/13277
+
+--- a/kernel/zaptel-base.c
++++ b/kernel/zaptel-base.c
+@@ -164,12 +164,32 @@ static devfs_handle_t timer;
+ /* udev necessary data structures.  Yeah! */
+ #ifdef CONFIG_ZAP_UDEV
+ 
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,15)
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)
++#define CLASS_DEV_CREATE(class, devt, device, name) \
++	device_create(class, device, devt, NULL, "%s", name)
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)
++#define CLASS_DEV_CREATE(class, devt, device, name) \
++	device_create(class, device, devt, name)
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,15)
+ #define CLASS_DEV_CREATE(class, devt, device, name) \
+         class_device_create(class, NULL, devt, device, name)
+-#else
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,13)
+ #define CLASS_DEV_CREATE(class, devt, device, name) \
+         class_device_create(class, devt, device, name)
++#else
++#define CLASS_DEV_CREATE(class, devt, device, name) \
++        class_simple_device_add(class, devt, device, name)
++#endif
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)
++#define CLASS_DEV_DESTROY(class, devt) \
++	device_destroy(class, devt)
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,13)
++#define CLASS_DEV_DESTROY(class, devt) \
++	class_device_destroy(class, devt)
++#else
++#define CLASS_DEV_DESTROY(class, devt) \
++	class_simple_device_remove(devt)
+ #endif
+ 
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,13)
+@@ -178,8 +198,6 @@ static struct class *zap_class = NULL;
+ static struct class_simple *zap_class = NULL;
+ #define class_create class_simple_create
+ #define class_destroy class_simple_destroy
+-#define class_device_create class_simple_device_add
+-#define class_device_destroy(a, b) class_simple_device_remove(b)
+ #endif
+ 
+ #endif /* CONFIG_ZAP_UDEV */
+@@ -5337,7 +5355,7 @@ int zt_unregister(struct zt_span *span)
+ #ifdef CONFIG_ZAP_UDEV
+ 	for (x = 0; x < span->channels; x++) {
+ 		if (span->chans[x].channo < 250)
+-			class_device_destroy(zap_class, MKDEV(ZT_MAJOR, span->chans[x].channo));
++			CLASS_DEV_DESTROY(zap_class, MKDEV(ZT_MAJOR, span->chans[x].channo));
+ 	}
+ #endif /* CONFIG_ZAP_UDEV */
+ 
+@@ -7825,7 +7843,7 @@ int zt_register_chardev(struct zt_charde
+ int zt_unregister_chardev(struct zt_chardev *dev)
+ {
+ #ifdef CONFIG_ZAP_UDEV
+-	class_device_destroy(zap_class, MKDEV(ZT_MAJOR, dev->minor));
++	CLASS_DEV_DESTROY(zap_class, MKDEV(ZT_MAJOR, dev->minor));
+ #endif /* CONFIG_ZAP_UDEV */
+ 
+ #ifdef CONFIG_DEVFS_FS
+@@ -7904,10 +7922,10 @@ static void __exit zt_cleanup(void) {
+ 	devfs_unregister_chrdev(ZT_MAJOR, "zaptel");
+ #else
+ #ifdef CONFIG_ZAP_UDEV
+-	class_device_destroy(zap_class, MKDEV(ZT_MAJOR, 253)); /* timer */
+-	class_device_destroy(zap_class, MKDEV(ZT_MAJOR, 254)); /* channel */
+-	class_device_destroy(zap_class, MKDEV(ZT_MAJOR, 255)); /* pseudo */
+-	class_device_destroy(zap_class, MKDEV(ZT_MAJOR, 0)); /* ctl */
++	CLASS_DEV_DESTROY(zap_class, MKDEV(ZT_MAJOR, 253)); /* timer */
++	CLASS_DEV_DESTROY(zap_class, MKDEV(ZT_MAJOR, 254)); /* channel */
++	CLASS_DEV_DESTROY(zap_class, MKDEV(ZT_MAJOR, 255)); /* pseudo */
++	CLASS_DEV_DESTROY(zap_class, MKDEV(ZT_MAJOR, 0)); /* ctl */
+ 	class_destroy(zap_class);
+ #endif /* CONFIG_ZAP_UDEV */
+ 	unregister_chrdev(ZT_MAJOR, "zaptel");
Index: debian/zaptel-source.lintian-overrides
===================================================================
--- debian/zaptel-source.lintian-overrides	(.../tags/1.4.11~dfsg-1)	(revision 0)
+++ debian/zaptel-source.lintian-overrides	(.../trunk)	(revision 6176)
@@ -0,0 +1 @@
+zaptel-source: description-contains-duplicated-word a a
Index: debian/zaptel.dirs
===================================================================
--- debian/zaptel.dirs	(.../tags/1.4.11~dfsg-1)	(revision 6176)
+++ debian/zaptel.dirs	(.../trunk)	(revision 6176)
@@ -1,3 +1,2 @@
 etc/modprobe.d
 etc/udev/rules.d
-usr/share/lintian/overrides
Index: debian/zaptel.init
===================================================================
--- debian/zaptel.init	(.../tags/1.4.11~dfsg-1)	(revision 6176)
+++ debian/zaptel.init	(.../trunk)	(revision 6176)
@@ -119,7 +119,8 @@
 		fi
 
                 if [ -r /etc/fxotune.conf ] && [ -x $FXOTUNE ]; then
-                	$FXOTUNE -s
+			# fxotune will fail if e.g. Asterisk is already running.
+                	$FXOTUNE -s || :
                 fi
 		;;
 	stop)
Index: debian/changelog
===================================================================
--- debian/changelog	(.../tags/1.4.11~dfsg-1)	(revision 6176)
+++ debian/changelog	(.../trunk)	(revision 6176)
@@ -1,3 +1,25 @@
+zaptel (1:1.4.11~dfsg-2) UNRELEASED; urgency=low
+
+  * Patch xpp_fxs_power: Fixed an issue with hook detection of the Astribank
+    FXS module.
+  * Don't fail init.d script if fxotune fails. This may happen if running it
+    when Asterisk is already running.
+  * Bump standards version to 3.8.0.0 .
+  * Ignore false lintian warning ("m-a a-i" has "a a").
+  * Patch xpp_fxo_cid_always: do always pass PCM if that's what the user
+    asked.
+  * Patch vzaphfc_proc_root_dir: fix vzaphfc on 2.6.26.
+  * Patch wcte12xp_flags: Proper time for irq save flags.
+  * Patch headers_2627: Fix location of semaphore.h for 2.6.27 .
+  * Patch xpp_fxs_dtmf_leak: Don't play DTMFs to the wrong channel.
+  * Patch wctdm_fix_alarm: Fix sending channel alarms.
+  * Patch device_class_2626: Fix building 2.6.26 (Closes: #493397).
+  * Using dh_lintian for lintian overrides, hence requiring debhelper 6.0.7.
+  * Lintian: we know we have direct changes. Too bad we're half-upstream :-(
+  * Fix doc-base section names. 
+
+ -- Tzafrir Cohen <tzafrir.cohen@xorcom.com>  Thu, 28 Aug 2008 22:58:23 +0300
+
 zaptel (1:1.4.11~dfsg-1) unstable; urgency=medium
 
   [ Faidon Liambotis ]
Index: debian/zaptel.doc-base.astribank
===================================================================
--- debian/zaptel.doc-base.astribank	(.../tags/1.4.11~dfsg-1)	(revision 6176)
+++ debian/zaptel.doc-base.astribank	(.../trunk)	(revision 6176)
@@ -2,7 +2,7 @@
 Title: Xorcom Astribank Documentation
 Author: Tzafrir Cohen
 Abstract: Technical Documentation ofd the Xorcom Astribank
-Section: Comm
+Section: Network/Communication
 
 Format: HTML
 Index: /usr/share/doc/zaptel/README.Astribank.html
Index: debian/backports/etch
===================================================================
--- debian/backports/etch	(.../tags/1.4.11~dfsg-1)	(revision 0)
+++ debian/backports/etch	(.../trunk)	(revision 6176)
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# depend on plain asciidoc. No need to work around one specific 
+# transitional Lenny version.
+# Also no need to depend on newer debhelper for dh_lintian.
+sed -i \
+	-e 's/\(asciidoc\) *([^)]*)/\1/' \
+	-e 's/\(debhelper\) *([^)]*)/\1/' \
+	debian/control
+
+sed -i -e '/dh_lintian/d' debian/rules

Property changes on: debian/backports/etch
___________________________________________________________________
Name: svn:executable
   + *

Index: debian/rules
===================================================================
--- debian/rules	(.../tags/1.4.11~dfsg-1)	(revision 6176)
+++ debian/rules	(.../trunk)	(revision 6176)
@@ -166,10 +166,8 @@
 	install -D -m 644 tonezone.h $(CURDIR)/debian/tmp/usr/include/zaptel/tonezone.h
 
 	dh_install -a --sourcedir=$(CURDIR)/debian/tmp 
+	dh_lintian -a
 
-	cp debian/$(PREFIX).lintian \
-	  $(CURDIR)/debian/$(PREFIX)/usr/share/lintian/overrides/$(PREFIX)
-
 TARPARDIR=$(CURDIR)/debian/tmp
 TARDIR=$(TARPARDIR)/modules/$(PREFIX)
 install-indep: build-stamp
@@ -187,7 +185,8 @@
 	cp -a $(GENERATED_SOURCES) $(TARDIR)/debian/generated/
 	dh_install -i kernel/zaptel.h usr/include/zaptel/
 	dh_install -pzaptel-firmware kernel/xpp/firmwares/*.hex usr/share/zaptel/
-	
+	dh_lintian -i
+
 	# Packaging infrastructure
 	cp -r debian/rules debian/changelog debian/copyright\
 	  debian/control debian/compat \
Index: debian/zaptel.lintian-overrides
===================================================================
--- debian/zaptel.lintian-overrides	(.../tags/1.4.11~dfsg-1)	(revision 0)
+++ debian/zaptel.lintian-overrides	(.../trunk)	(revision 6176)
@@ -0,0 +1 @@
+zaptel: mknod-in-maintainer-script postinst:16

Property changes on: debian/zaptel.lintian-overrides
___________________________________________________________________
Name: svn:mergeinfo
   + 

Index: debian/zaptel.doc-base.zaptel.conf
===================================================================
--- debian/zaptel.doc-base.zaptel.conf	(.../tags/1.4.11~dfsg-1)	(revision 6176)
+++ debian/zaptel.doc-base.zaptel.conf	(.../trunk)	(revision 6176)
@@ -3,7 +3,7 @@
 Author: Zapata Telephony Project
 Abstract: A sample annotated zaptel.conf . This is the closest
  thing to a reference for zaptel.conf (used by ztcfg(1) ).
-Section: Comm
+Section: Network/Communication
 
 Format: text
 Files: /usr/share/doc/zaptel/examples/zaptel.conf.sample.gz
Index: debian/source.lintian-overrides
===================================================================
--- debian/source.lintian-overrides	(.../tags/1.4.11~dfsg-1)	(revision 0)
+++ debian/source.lintian-overrides	(.../trunk)	(revision 6176)
@@ -0,0 +1,56 @@
+zaptel source: patch-system-but-direct-changes-in-diff kernel/cwain/Makefile
+zaptel source: patch-system-but-direct-changes-in-diff kernel/cwain/TODO
+zaptel source: patch-system-but-direct-changes-in-diff kernel/cwain/cwain.c
+zaptel source: patch-system-but-direct-changes-in-diff kernel/cwain/cwain.h
+zaptel source: patch-system-but-direct-changes-in-diff kernel/cwain/zapata.conf
+zaptel source: patch-system-but-direct-changes-in-diff kernel/cwain/zapata.conf.doubleE1
+zaptel source: patch-system-but-direct-changes-in-diff kernel/cwain/zaptel.conf
+zaptel source: patch-system-but-direct-changes-in-diff kernel/cwain/zaptel.conf.doubleE1
+zaptel source: patch-system-but-direct-changes-in-diff kernel/cwain/zaptel.conf.hdlcnet
+zaptel source: patch-system-but-direct-changes-in-diff kernel/cwain/zaptel.conf.hdlcnet.doubleE1
+zaptel source: patch-system-but-direct-changes-in-diff kernel/ds1x1f.c
+zaptel source: patch-system-but-direct-changes-in-diff kernel/opvxa1200.c
+zaptel source: patch-system-but-direct-changes-in-diff kernel/oslec/Kbuild
+zaptel source: patch-system-but-direct-changes-in-diff kernel/oslec/echo.c
+zaptel source: patch-system-but-direct-changes-in-diff kernel/oslec/oslec-ctrl-panel.sh
+zaptel source: patch-system-but-direct-changes-in-diff kernel/oslec/oslec.h
+zaptel source: patch-system-but-direct-changes-in-diff kernel/oslec/oslec_wrap.c
+zaptel source: patch-system-but-direct-changes-in-diff kernel/oslec/spandsp/bit_operations.h
+zaptel source: patch-system-but-direct-changes-in-diff kernel/oslec/spandsp/echo.h
+zaptel source: patch-system-but-direct-changes-in-diff kernel/oslec/spandsp/fir.h
+zaptel source: patch-system-but-direct-changes-in-diff kernel/oslec/spandsp/mmx.h
+zaptel source: patch-system-but-direct-changes-in-diff kernel/qozap/Makefile
+zaptel source: patch-system-but-direct-changes-in-diff kernel/qozap/TODO
+zaptel source: patch-system-but-direct-changes-in-diff kernel/qozap/qozap.c
+zaptel source: patch-system-but-direct-changes-in-diff kernel/qozap/qozap.h
+zaptel source: patch-system-but-direct-changes-in-diff kernel/qozap/zapata.conf
+zaptel source: patch-system-but-direct-changes-in-diff kernel/qozap/zapata.conf.duoBRI
+zaptel source: patch-system-but-direct-changes-in-diff kernel/qozap/zapata.conf.octoBRI
+zaptel source: patch-system-but-direct-changes-in-diff kernel/qozap/zaptel.conf
+zaptel source: patch-system-but-direct-changes-in-diff kernel/qozap/zaptel.conf.duoBRI
+zaptel source: patch-system-but-direct-changes-in-diff kernel/qozap/zaptel.conf.octoBRI
+zaptel source: patch-system-but-direct-changes-in-diff kernel/vzaphfc/ChangeLog
+zaptel source: patch-system-but-direct-changes-in-diff kernel/vzaphfc/Makefile
+zaptel source: patch-system-but-direct-changes-in-diff kernel/vzaphfc/README
+zaptel source: patch-system-but-direct-changes-in-diff kernel/vzaphfc/fifo.c
+zaptel source: patch-system-but-direct-changes-in-diff kernel/vzaphfc/fifo.h
+zaptel source: patch-system-but-direct-changes-in-diff kernel/vzaphfc/lapd.c
+zaptel source: patch-system-but-direct-changes-in-diff kernel/vzaphfc/lapd.h
+zaptel source: patch-system-but-direct-changes-in-diff kernel/vzaphfc/vzaphfc.h
+zaptel source: patch-system-but-direct-changes-in-diff kernel/vzaphfc/vzaphfc_main.c
+zaptel source: patch-system-but-direct-changes-in-diff kernel/wcopenpci.c
+zaptel source: patch-system-but-direct-changes-in-diff kernel/zaphfc/Makefile
+zaptel source: patch-system-but-direct-changes-in-diff kernel/zaphfc/zapata.conf
+zaptel source: patch-system-but-direct-changes-in-diff kernel/zaphfc/zaphfc.c
+zaptel source: patch-system-but-direct-changes-in-diff kernel/zaphfc/zaphfc.h
+zaptel source: patch-system-but-direct-changes-in-diff kernel/zaphfc/zaptel.conf
+zaptel source: patch-system-but-direct-changes-in-diff kernel/ztgsm/Makefile
+zaptel source: patch-system-but-direct-changes-in-diff kernel/ztgsm/zapata.conf.duoGSM
+zaptel source: patch-system-but-direct-changes-in-diff kernel/ztgsm/zapata.conf.quadGSM
+zaptel source: patch-system-but-direct-changes-in-diff kernel/ztgsm/zapata.conf.unoGSM
+zaptel source: patch-system-but-direct-changes-in-diff kernel/ztgsm/zaptel.conf.duoGSM
+zaptel source: patch-system-but-direct-changes-in-diff kernel/ztgsm/zaptel.conf.quadGSM
+zaptel source: patch-system-but-direct-changes-in-diff kernel/ztgsm/zaptel.conf.unoGSM
+zaptel source: patch-system-but-direct-changes-in-diff kernel/ztgsm/ztgsm.c
+zaptel source: patch-system-but-direct-changes-in-diff kernel/ztgsm/ztgsm.h
+zaptel source: patch-system-but-direct-changes-in-diff ztpty.c
Index: debian/zaptel.doc-base.readme
===================================================================
--- debian/zaptel.doc-base.readme	(.../tags/1.4.11~dfsg-1)	(revision 6176)
+++ debian/zaptel.doc-base.readme	(.../trunk)	(revision 6176)
@@ -2,7 +2,7 @@
 Title: Zapata Telephony Interface Driver
 Author: Tzafrir Cohen
 Abstract: Basic documentation of the Zaptel telephony interface
-Section: Comm
+Section: Network/Communication
 
 Format: HTML
 Index: /usr/share/doc/zaptel/README.html
Index: debian/modulestest
===================================================================
--- debian/modulestest	(.../tags/1.4.11~dfsg-1)	(revision 6176)
+++ debian/modulestest	(.../trunk)	(revision 6176)
@@ -17,6 +17,10 @@
 #KERNEL_SOURCES=$HOME/Proj/Debs/Kernel/SwSusp/linux-2.6.15-rc5
 KERNEL_HEADERS=
 KERNEL_SOURCES=
+
+# Assume that the kernel directory is a git kernel repository.
+# Set it to tag <version> and configure it before building.
+GIT_KERNEL_VER=
 # run module-asustant with environment params that will generate
 # .changes files even without signing
 MODASS="env SIGNCHANGES=1 DEBSIGNCOMMAND=not_an_executable m-a"
@@ -27,13 +31,14 @@
   set -- $MODULESTEST_ARGS
 fi
 
-while getopts ah:rs:t arg
+while getopts ag:h:rs:t arg
 do
   case "$arg" in
     a) # All of the kernel-headers packages installed:
         KERNEL_HEADERS=`COLUMNS=160 dpkg -l 'kernel-headers-2.[46].*-*-*' | awk '/^.i/{print $2}' | sed -e 's/^kernel-headers-//'| xargs| tr ' ' ,`
       ;;
     h) KERNEL_HEADERS=$OPTARG;;
+    g) GIT_KERNEL_VER=$OPTARG;;
     s) KERNEL_SOURCES=$OPTARG;;
     r) KERNEL_HEADERS=`uname -r`;;
     t) # TODO: make this test per-distro or something 
@@ -60,6 +65,15 @@
 rm -f $LOG_FILE
 dpkg -x $DEB $MODS_DIR
 
+if [ "$GIT_KERNEL_VER" != '' ] && [ -d "$KERNEL_SOURCES/.git" ]; then
+	(
+		cd "$KERNEL_SOURCES"
+		git checkout "$GIT_KERNEL_VER"
+		make distclean
+		make defconfig modules_prepare
+	)
+fi
+
 if [ "$hdrs_sw" != '' ]; then
   TARBALL=$TAR_BALL $MODASS -u $TOP_DIR -t -i -f $hdrs_sw build $PACKAGE >>$LOG_FILE
 fi
Index: debian/README.Debian
===================================================================
--- debian/README.Debian	(.../tags/1.4.11~dfsg-1)	(revision 6176)
+++ debian/README.Debian	(.../trunk)	(revision 6176)
@@ -150,12 +150,18 @@
 chack that all packages were indeed built and that their size looks sane
 (no driver was left unbuilt).
 
+To test-build the package with a custom kernel from a git repository:
 
-If you get the "error":
-  
-  zconfig.h:91:41: error: missing binary operator before token "(" 
+  svn-buildpackage --svn-ignore-new -uc -us \
+   --svn-postbuild='debian/modulestest -g v2.6.25-rc4 -s /path/to/linux-2.6'
 
-It is probably harmless. See http://bugs.digium.com/12426 .
+This uses 'm-a -k /path/to/linux-2.6' (as supported before) to build
+the package with a custom kernel directory at /home/tzafrir/linux-2.6 .
+However before doing so, it checkouts the tag 'v2.6.25-rc4' from there
+and prepares that directory for building modules. 
 
+Note that the next time you'll use '-s /path/to/linux-2.6' it should 
+already be set to tag v2.6.25-rc4, and you won't need to use the switch 
+-g again.
 
--- Debian VoIP Team <pkg-voip-maintainers@lists.alioth.debian.org>  16 June 2007
+-- Debian VoIP Team <pkg-voip-maintainers@lists.alioth.debian.org>  Thu, 28 Aug 2008 17:03:16 +0300

Reply to: