[svn-commits] tilghman: branch tilghman/odbc_tx_support r131241 - in /team/tilghman/odbc_tx...

SVN commits to the Digium repositories svn-commits at lists.digium.com
Wed Jul 16 12:48:49 CDT 2008


Author: tilghman
Date: Wed Jul 16 12:48:48 2008
New Revision: 131241

URL: http://svn.digium.com/view/asterisk?view=rev&rev=131241
Log:
Merged revisions 130230,130232,130234,130237,130293,130296-130297,130320,130374,130444,130479,130515,130574,130576,130578,130635,130697,130732-130733,130744,130794,130854,130890,130951,131013,131015,131044,131072,131129,131166,131207 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/trunk

................
r130230 | tilghman | 2008-07-11 14:40:55 -0500 (Fri, 11 Jul 2008) | 2 lines

Fix trunk breakage

................
r130232 | tilghman | 2008-07-11 14:53:38 -0500 (Fri, 11 Jul 2008) | 2 lines

Add some debug code and add a missing release

................
r130234 | tilghman | 2008-07-11 14:56:34 -0500 (Fri, 11 Jul 2008) | 2 lines

Don't copy on NULL.

................
r130237 | mmichelson | 2008-07-11 15:03:55 -0500 (Fri, 11 Jul 2008) | 11 lines

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

........
r130236 | mmichelson | 2008-07-11 15:03:23 -0500 (Fri, 11 Jul 2008) | 3 lines

Remove redundant logic


........

................
r130293 | mattf | 2008-07-11 16:36:26 -0500 (Fri, 11 Jul 2008) | 1 line

Support new TRANSPORT definitions in libss7
................
r130296 | murf | 2008-07-11 16:50:21 -0500 (Fri, 11 Jul 2008) | 1 line

a small change to make things compile
................
r130297 | murf | 2008-07-11 17:03:19 -0500 (Fri, 11 Jul 2008) | 11 lines

(closes issue #13041)
Reported by: eliel

OK, now the context registrar slot is strdup'd. It is freed
on destruction. I don't see the need to do this with all
the structs' registrar fields, but if some wild case proves
they should also be handled this way, then we can 
put in the extra work at that time.



................
r130320 | kpfleming | 2008-07-11 17:23:55 -0500 (Fri, 11 Jul 2008) | 1 line

not needed here
................
r130374 | mvanbaak | 2008-07-12 05:26:55 -0500 (Sat, 12 Jul 2008) | 13 lines

Blocked revisions 130373 via svnmerge

........
r130373 | mvanbaak | 2008-07-12 12:25:52 +0200 (Sat, 12 Jul 2008) | 6 lines

in 1.4 the functions still have | as argument seperator.
This commit fixes the use of RAND in the ael random function.

(closes issue #13061)
Reported by: danpwi

........

................
r130444 | tilghman | 2008-07-12 21:34:32 -0500 (Sat, 12 Jul 2008) | 2 lines

Unlock list before returning

................
r130479 | mvanbaak | 2008-07-13 09:58:40 -0500 (Sun, 13 Jul 2008) | 3 lines

restore ASTERISKVERSION marker to asterisk.tex.
This got lost in commit 97634

................
r130515 | tilghman | 2008-07-13 12:58:47 -0500 (Sun, 13 Jul 2008) | 12 lines

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

........
r130514 | tilghman | 2008-07-13 12:56:10 -0500 (Sun, 13 Jul 2008) | 4 lines

Reverting 2 changesets, as it breaks incoming IAX2 calls
(Related to issue #12963)
Reported by: mvanbaak

........

................
r130574 | mvanbaak | 2008-07-13 17:50:31 -0500 (Sun, 13 Jul 2008) | 16 lines

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

........
r130573 | mvanbaak | 2008-07-14 00:48:51 +0200 (Mon, 14 Jul 2008) | 8 lines

fix memory leak when originate from manager cannot create a thread

(closes issue #13069)
Reported by: gknispel_proformatique
Patches:
      asterisk_trunk_action_originate.patch uploaded by gknispel (license 261)
	  Tested by: gknispel_proformatique, mvanbaak

........

................
r130576 | mvanbaak | 2008-07-13 17:59:35 -0500 (Sun, 13 Jul 2008) | 9 lines

Convert chan_skinny's open-coded linked lists to the list macros

(closes issue #12956)
Reported by: DEA
Patches:
      chan_skinny-linkedlists-v2.txt uploaded by DEA (license 3)
Tested by: DEA, mvanbaak


................
r130578 | mvanbaak | 2008-07-13 18:14:03 -0500 (Sun, 13 Jul 2008) | 15 lines

Make all sed calls Posix sed compatible.
To make sure nobody commits script-modified files we first make a backup
of asterisk.tex, run the script, generate the pdf and / or html,
and put the original asterisk.tex back.
This will guard us for the stuff that happened before that someone committed 
a locally modified asterisk.tex, with changes done by this script.

(closes issue #13062)
Reported by: mvanbaak
Patches:
      sed_without-i-v3.diff uploaded by mvanbaak (license 7)
Tested by: mvanbaak

Feedback from Corydon. Thanks for taking the time to go through this.

................
r130635 | russell | 2008-07-14 05:39:23 -0500 (Mon, 14 Jul 2008) | 10 lines

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

........
r130634 | russell | 2008-07-14 05:38:14 -0500 (Mon, 14 Jul 2008) | 2 lines

Bump up the debug level for a message.

........

................
r130697 | tilghman | 2008-07-14 10:44:07 -0500 (Mon, 14 Jul 2008) | 7 lines

Swap "static" and "const", so that "static" appears at the beginning of each
declaration (suppresses a warning).
(closes issue #13070)
 Reported by: gknispel_proformatique
 Patches: 
       asterisk_trunk_const_static.patch uploaded by gknispel (license 261)

................
r130732 | rizzo | 2008-07-14 11:50:24 -0500 (Mon, 14 Jul 2008) | 3 lines

use ast_pthread_create_detached_background() instead of redoing
it with separate calls

................
r130733 | rizzo | 2008-07-14 11:50:54 -0500 (Mon, 14 Jul 2008) | 3 lines

free memory used by the x11 grabber when closing it.


................
r130744 | mvanbaak | 2008-07-14 12:21:18 -0500 (Mon, 14 Jul 2008) | 18 lines

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

........
r130735 | mvanbaak | 2008-07-14 19:10:21 +0200 (Mon, 14 Jul 2008) | 10 lines

notify the user that dnsmgr refresh wont work when dnsmgr is not enabled.
Previously this command would automagically appear and disappear.
This was confusing.

(closes issue #12796)
Reported by: chappell
Patches:
      dnsmgr_refresh_3.diff uploaded by chappell (license 8)
Tested by: russell, chappell, mvanbaak

........

................
r130794 | mmichelson | 2008-07-14 12:54:11 -0500 (Mon, 14 Jul 2008) | 16 lines

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

........
r130792 | mmichelson | 2008-07-14 12:50:21 -0500 (Mon, 14 Jul 2008) | 8 lines

Add a check to the CAN_EARLY_BRIDGE macro in app_dial to
be sure there are no audiohooks present on the channels
involved. This fixed a one-way audio situation I had in
my test setup. I couldn't find any open issues that suggested
one-way audio with regards to mixmonitor (or other audiohook)
usage, though.


........

................
r130854 | mmichelson | 2008-07-14 17:22:57 -0500 (Mon, 14 Jul 2008) | 9 lines

Fix a memory leak in the case that /dev/null cannot be
opened when running startup commands from cli.conf

(closes issue #13066)
Reported by: eliel
Patches:
      asterisk.c.patch uploaded by eliel (license 64)


................
r130890 | tilghman | 2008-07-14 18:59:54 -0500 (Mon, 14 Jul 2008) | 16 lines

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

........
r130889 | tilghman | 2008-07-14 18:59:13 -0500 (Mon, 14 Jul 2008) | 8 lines

Override the callerid in all cases when the callerid is set in the user, not
just when a remote callerid is set.  Also, if not set in the user, allow the
remote CallerID to pass through.
(closes issue #12875)
 Reported by: dimas
 Patches: 
       20080714__bug12875.diff.txt uploaded by Corydon76 (license 14)

........

................
r130951 | tilghman | 2008-07-15 11:20:35 -0500 (Tue, 15 Jul 2008) | 5 lines

Additional option for videosupport (always) that disables the optimization to
fail to setup video RTP if the two endpoints will not support it.  This assists
with call files and certain transfers to ensure that if two video phones are
ever connected, they will always share a video feed.

................
r131013 | mvanbaak | 2008-07-15 12:49:48 -0500 (Tue, 15 Jul 2008) | 15 lines

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

........
r131012 | mvanbaak | 2008-07-15 19:47:15 +0200 (Tue, 15 Jul 2008) | 7 lines

remove 4 lines of redundant code.

(closes issue #13080)
Reported by: gknispel_proformatique
Patches:
      trunk_ast_cdr_setapp.patch uploaded by gknispel (license 261)

........

................
r131015 | bbryant | 2008-07-15 13:14:02 -0500 (Tue, 15 Jul 2008) | 8 lines

Fix memory leak in app_queue when a device state is changed but it isn't 
a member of any queue.

(closes issue #13073)
Reported by: eliel
Patches:
      app_queue.c.patch uploaded by eliel (license 64)

................
r131044 | tilghman | 2008-07-15 13:25:34 -0500 (Tue, 15 Jul 2008) | 16 lines

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

........
r130959 | tilghman | 2008-07-15 12:19:13 -0500 (Tue, 15 Jul 2008) | 8 lines

astman_send_error does not need a newline appended -- the API takes care of
that for us.
(closes issue #13068)
 Reported by: gknispel_proformatique
 Patches: 
       asterisk_1_4_astman_send.patch uploaded by gknispel (license 261)
       asterisk_trunk_astman_send.patch uploaded by gknispel (license 261)

........

................
r131072 | russell | 2008-07-15 13:46:40 -0500 (Tue, 15 Jul 2008) | 5 lines

Fix a couple of places in res_agi where the agi_commands lock would not be
released, causing a deadlock.  (Reported by mvanbaak in #asterisk-dev,
discovered by bbryant's change to the lock tracking code to yell at you
if a thread exits with a lock still held)

................
r131129 | murf | 2008-07-15 18:36:19 -0500 (Tue, 15 Jul 2008) | 21 lines


(closes issue #12960)
Reported by: mnicholson

Spent most of the day on this bug, and the
solution was so simple. Just had to find and
understand the problem.

The problem was, that the routine to copy
the existing switches, includes, and ignorepats
from the old context to the new one, wasn't
getting called when the context is already 
existent. (In other words, if AEL is adding
a new context to the mix, they get copied,
but if pbx_config already defined a context,
then the copy wasn't happening. This made
no sense, so I moved the call to copy the 
includes & etc, no matter the case.



................
r131166 | tilghman | 2008-07-15 19:52:48 -0500 (Tue, 15 Jul 2008) | 3 lines

Fix rotate strategy
(Closes issue #13086)

................
r131207 | russell | 2008-07-16 10:08:22 -0500 (Wed, 16 Jul 2008) | 3 lines

Add missing terminator to ast_event_subscribe to fix a crash.
(from rev 131206 in the 1.6.0 branch)

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

Modified:
    team/tilghman/odbc_tx_support/   (props changed)
    team/tilghman/odbc_tx_support/CHANGES
    team/tilghman/odbc_tx_support/apps/app_dial.c
    team/tilghman/odbc_tx_support/apps/app_queue.c
    team/tilghman/odbc_tx_support/apps/app_voicemail.c
    team/tilghman/odbc_tx_support/build_tools/prep_tarball
    team/tilghman/odbc_tx_support/channels/chan_agent.c
    team/tilghman/odbc_tx_support/channels/chan_dahdi.c
    team/tilghman/odbc_tx_support/channels/chan_iax2.c
    team/tilghman/odbc_tx_support/channels/chan_sip.c
    team/tilghman/odbc_tx_support/channels/chan_skinny.c
    team/tilghman/odbc_tx_support/channels/chan_unistim.c
    team/tilghman/odbc_tx_support/channels/console_video.c
    team/tilghman/odbc_tx_support/channels/h323/ast_h323.cxx
    team/tilghman/odbc_tx_support/channels/misdn/isdn_lib.c
    team/tilghman/odbc_tx_support/channels/vgrabbers.c
    team/tilghman/odbc_tx_support/configs/sip.conf.sample
    team/tilghman/odbc_tx_support/doc/tex/Makefile
    team/tilghman/odbc_tx_support/doc/tex/asterisk.tex
    team/tilghman/odbc_tx_support/include/asterisk/module.h
    team/tilghman/odbc_tx_support/include/asterisk/res_odbc.h
    team/tilghman/odbc_tx_support/main/asterisk.c
    team/tilghman/odbc_tx_support/main/audiohook.c
    team/tilghman/odbc_tx_support/main/cdr.c
    team/tilghman/odbc_tx_support/main/dnsmgr.c
    team/tilghman/odbc_tx_support/main/logger.c
    team/tilghman/odbc_tx_support/main/manager.c
    team/tilghman/odbc_tx_support/main/pbx.c
    team/tilghman/odbc_tx_support/res/Makefile
    team/tilghman/odbc_tx_support/res/res_agi.c
    team/tilghman/odbc_tx_support/res/res_odbc.c
    team/tilghman/odbc_tx_support/utils/astman.c

Propchange: team/tilghman/odbc_tx_support/
------------------------------------------------------------------------------
Binary property 'branch-1.4-blocked' - no diff available.

Propchange: team/tilghman/odbc_tx_support/
------------------------------------------------------------------------------
Binary property 'branch-1.4-merged' - no diff available.

Propchange: team/tilghman/odbc_tx_support/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Wed Jul 16 12:48:48 2008
@@ -1,1 +1,1 @@
-/trunk:1-130226
+/trunk:1-131240

Modified: team/tilghman/odbc_tx_support/CHANGES
URL: http://svn.digium.com/view/asterisk/team/tilghman/odbc_tx_support/CHANGES?view=diff&rev=131241&r1=131240&r2=131241
==============================================================================
--- team/tilghman/odbc_tx_support/CHANGES (original)
+++ team/tilghman/odbc_tx_support/CHANGES Wed Jul 16 12:48:48 2008
@@ -127,6 +127,10 @@
  * 'sip show peers' and 'sip show users' display their entries sorted in
     alphabetical order, as opposed to the order they were in, in the config 
     file or database. 
+ * Videosupport now supports an additional option, "always", which always sets
+    up video RTP ports, even on clients that don't support it.  This helps with
+    callfiles and certain transfers to ensure that if two video phones are
+    connected, they will always share video feeds.
 
 IAX Changes
 -----------

Modified: team/tilghman/odbc_tx_support/apps/app_dial.c
URL: http://svn.digium.com/view/asterisk/team/tilghman/odbc_tx_support/apps/app_dial.c?view=diff&rev=131241&r1=131240&r2=131241
==============================================================================
--- team/tilghman/odbc_tx_support/apps/app_dial.c (original)
+++ team/tilghman/odbc_tx_support/apps/app_dial.c Wed Jul 16 12:48:48 2008
@@ -327,9 +327,10 @@
 	AST_APP_OPTION('X', OPT_CALLER_MIXMONITOR),
 END_OPTIONS );
 
-#define CAN_EARLY_BRIDGE(flags) (!ast_test_flag64(flags, OPT_CALLEE_HANGUP | \
+#define CAN_EARLY_BRIDGE(flags,chan,peer) (!ast_test_flag64(flags, OPT_CALLEE_HANGUP | \
 	OPT_CALLER_HANGUP | OPT_CALLEE_TRANSFER | OPT_CALLER_TRANSFER | \
-	OPT_CALLEE_MONITOR | OPT_CALLER_MONITOR | OPT_CALLEE_PARK | OPT_CALLER_PARK))
+	OPT_CALLEE_MONITOR | OPT_CALLER_MONITOR | OPT_CALLEE_PARK | OPT_CALLER_PARK) && \
+	!chan->audiohooks && !peer->audiohooks)
 
 /*
  * The list of active channels
@@ -680,7 +681,7 @@
 							DIAL_NOFORWARDHTML);
 						ast_string_field_set(c, dialcontext, "");
 						ast_copy_string(c->exten, "", sizeof(c->exten));
-						if (CAN_EARLY_BRIDGE(peerflags))
+						if (CAN_EARLY_BRIDGE(peerflags, in, peer))
 							/* Setup early bridge if appropriate */
 							ast_channel_early_bridge(in, peer);
 					}
@@ -707,7 +708,7 @@
 				case AST_CONTROL_RINGING:
 					ast_verb(3, "%s is ringing\n", c->name);
 					/* Setup early media if appropriate */
-					if (single && CAN_EARLY_BRIDGE(peerflags))
+					if (single && CAN_EARLY_BRIDGE(peerflags, in, c))
 						ast_channel_early_bridge(in, c);
 					if (!(pa->sentringing) && !ast_test_flag64(outgoing, OPT_MUSICBACK)) {
 						ast_indicate(in, AST_CONTROL_RINGING);
@@ -717,7 +718,7 @@
 				case AST_CONTROL_PROGRESS:
 					ast_verb(3, "%s is making progress passing it to %s\n", c->name, in->name);
 					/* Setup early media if appropriate */
-					if (single && CAN_EARLY_BRIDGE(peerflags))
+					if (single && CAN_EARLY_BRIDGE(peerflags, in, c))
 						ast_channel_early_bridge(in, c);
 					if (!ast_test_flag64(outgoing, OPT_RINGBACK))
 						ast_indicate(in, AST_CONTROL_PROGRESS);
@@ -732,7 +733,7 @@
 					break;
 				case AST_CONTROL_PROCEEDING:
 					ast_verb(3, "%s is proceeding passing it to %s\n", c->name, in->name);
-					if (single && CAN_EARLY_BRIDGE(peerflags))
+					if (single && CAN_EARLY_BRIDGE(peerflags, in, c))
 						ast_channel_early_bridge(in, c);
 					if (!ast_test_flag64(outgoing, OPT_RINGBACK))
 						ast_indicate(in, AST_CONTROL_PROCEEDING);

Modified: team/tilghman/odbc_tx_support/apps/app_queue.c
URL: http://svn.digium.com/view/asterisk/team/tilghman/odbc_tx_support/apps/app_queue.c?view=diff&rev=131241&r1=131240&r2=131241
==============================================================================
--- team/tilghman/odbc_tx_support/apps/app_queue.c (original)
+++ team/tilghman/odbc_tx_support/apps/app_queue.c Wed Jul 16 12:48:48 2008
@@ -782,6 +782,7 @@
 	if (!curint) {
 		if (option_debug > 2)
 			ast_log(LOG_DEBUG, "Device '%s/%s' changed to state '%d' (%s) but we don't care because they're not a member of any queue.\n", technology, loc, sc->state, devstate2str(sc->state));
+		ast_free(sc);
 		return 0;
 	}
 

Modified: team/tilghman/odbc_tx_support/apps/app_voicemail.c
URL: http://svn.digium.com/view/asterisk/team/tilghman/odbc_tx_support/apps/app_voicemail.c?view=diff&rev=131241&r1=131240&r2=131241
==============================================================================
--- team/tilghman/odbc_tx_support/apps/app_voicemail.c (original)
+++ team/tilghman/odbc_tx_support/apps/app_voicemail.c Wed Jul 16 12:48:48 2008
@@ -9338,7 +9338,7 @@
 		return RESULT_SUCCESS;
 	}
 	
-	astman_send_ack(s, m, "Voicemail user list will follow\r\n");
+	astman_send_ack(s, m, "Voicemail user list will follow");
 	
 	AST_LIST_TRAVERSE(&users, vmu, list) {
 		char dirname[256];

Modified: team/tilghman/odbc_tx_support/build_tools/prep_tarball
URL: http://svn.digium.com/view/asterisk/team/tilghman/odbc_tx_support/build_tools/prep_tarball?view=diff&rev=131241&r1=131240&r2=131241
==============================================================================
--- team/tilghman/odbc_tx_support/build_tools/prep_tarball (original)
+++ team/tilghman/odbc_tx_support/build_tools/prep_tarball Wed Jul 16 12:48:48 2008
@@ -9,5 +9,10 @@
 make AWK=awk GREP=grep menuselect-tree
 
 VERSION=`cat .version`
-sed -i -e "s/ASTERISKVERSION/${VERSION}/" doc/tex/asterisk.tex
+# make backup of asterisk.tex because we are going to alter it
+cp asterisk.tex asterisk.tex.orig
+sed -e "s/ASTERISKVERSION/${VERSION}/" doc/tex/asterisk.tex > doc/tex/asterisk_local.tex
+mv asterisk_local.tex asterisk.tex
 cd doc/tex && rubber --pdf asterisk.tex && latex2html asterisk.tex
+# restore backup of asterisk.tex
+mv asterisk.tex.orig asterisk.tex

Modified: team/tilghman/odbc_tx_support/channels/chan_agent.c
URL: http://svn.digium.com/view/asterisk/team/tilghman/odbc_tx_support/channels/chan_agent.c?view=diff&rev=131241&r1=131240&r2=131241
==============================================================================
--- team/tilghman/odbc_tx_support/channels/chan_agent.c (original)
+++ team/tilghman/odbc_tx_support/channels/chan_agent.c Wed Jul 16 12:48:48 2008
@@ -286,6 +286,7 @@
 	device = ast_event_get_ie_str(event, AST_EVENT_IE_DEVICE);
 
 	if (ast_strlen_zero(device)) {
+		AST_LIST_UNLOCK(&agents);
 		return;
 	}
 
@@ -2487,7 +2488,7 @@
 	/* Dialplan Functions */
 	ast_custom_function_register(&agent_function);
 
-	agent_devicestate_sub = ast_event_subscribe(AST_EVENT_DEVICE_STATE, agent_devicestate_cb, NULL);
+	agent_devicestate_sub = ast_event_subscribe(AST_EVENT_DEVICE_STATE, agent_devicestate_cb, NULL, AST_EVENT_IE_END);
 
 	return AST_MODULE_LOAD_SUCCESS;
 }

Modified: team/tilghman/odbc_tx_support/channels/chan_dahdi.c
URL: http://svn.digium.com/view/asterisk/team/tilghman/odbc_tx_support/channels/chan_dahdi.c?view=diff&rev=131241&r1=131240&r2=131241
==============================================================================
--- team/tilghman/odbc_tx_support/channels/chan_dahdi.c (original)
+++ team/tilghman/odbc_tx_support/channels/chan_dahdi.c Wed Jul 16 12:48:48 2008
@@ -13230,7 +13230,11 @@
 			return -1;
 		}
 
-		ss7_add_link(link->ss7, SS7_TRANSPORT_DAHDI, link->fds[curfd]);
+		if (p.sigtype == DAHDI_SIG_MTP2)
+			ss7_add_link(link->ss7, SS7_TRANSPORT_DAHDIMTP2, link->fds[curfd]);
+		else
+			ss7_add_link(link->ss7, SS7_TRANSPORT_DAHDIDCHAN, link->fds[curfd]);
+
 		link->numsigchans++;
 
 		memset(&si, 0, sizeof(si));
@@ -13701,7 +13705,7 @@
 	unsigned int param_count;
 	unsigned int x;
 
-	if (!(param_count = ast_app_separate_args(parse, ',', params, ARRAY_LEN(params)))
+	if (!(param_count = ast_app_separate_args(parse, ',', params, ARRAY_LEN(params))))
 		return;
 
 	memset(&confp->chan.echocancel, 0, sizeof(confp->chan.echocancel));

Modified: team/tilghman/odbc_tx_support/channels/chan_iax2.c
URL: http://svn.digium.com/view/asterisk/team/tilghman/odbc_tx_support/channels/chan_iax2.c?view=diff&rev=131241&r1=131240&r2=131241
==============================================================================
--- team/tilghman/odbc_tx_support/channels/chan_iax2.c (original)
+++ team/tilghman/odbc_tx_support/channels/chan_iax2.c Wed Jul 16 12:48:48 2008
@@ -1496,13 +1496,13 @@
 #define NEW_ALLOW 	1
 #define NEW_FORCE 	2
 
-static int match(struct sockaddr_in *sin, unsigned short callno, unsigned short dcallno, const struct chan_iax2_pvt *cur)
+static int match(struct sockaddr_in *sin, unsigned short callno, unsigned short dcallno, const struct chan_iax2_pvt *cur, int check_dcallno)
 {
 	if ((cur->addr.sin_addr.s_addr == sin->sin_addr.s_addr) &&
 		(cur->addr.sin_port == sin->sin_port)) {
 		/* This is the main host */
 		if ( (cur->peercallno == 0 || cur->peercallno == callno) &&
-				(dcallno == 0 || cur->callno == dcallno) ) {
+			 (check_dcallno ? dcallno == cur->callno : 1) ) {
 			/* That's us.  Be sure we keep track of the peer call number */
 			return 1;
 		}
@@ -1620,7 +1620,7 @@
 /*
  * \note Calling this function while holding another pvt lock can cause a deadlock.
  */
-static int __find_callno(unsigned short callno, unsigned short dcallno, struct sockaddr_in *sin, int new, int sockfd, int return_locked)
+static int __find_callno(unsigned short callno, unsigned short dcallno, struct sockaddr_in *sin, int new, int sockfd, int return_locked, int check_dcallno)
 {
 	int res = 0;
 	int x;
@@ -1633,6 +1633,8 @@
 			struct chan_iax2_pvt tmp_pvt = {
 				.callno = dcallno,
 				.peercallno = callno,
+				/* hack!! */
+				.frames_received = check_dcallno,
 			};
 
 			memcpy(&tmp_pvt.addr, sin, sizeof(tmp_pvt.addr));
@@ -1650,7 +1652,7 @@
 
 		/* This will occur on the first response to a message that we initiated,
 		 * such as a PING. */
-		if (callno && dcallno && iaxs[dcallno] && !iaxs[dcallno]->peercallno && match(sin, callno, dcallno, iaxs[dcallno])) {
+		if (callno && dcallno && iaxs[dcallno] && !iaxs[dcallno]->peercallno && match(sin, callno, dcallno, iaxs[dcallno], check_dcallno)) {
 			iaxs[dcallno]->peercallno = callno;
 			res = dcallno;
 			store_by_peercallno(iaxs[dcallno]);
@@ -1673,7 +1675,7 @@
 			ast_mutex_lock(&iaxsl[x]);
 			if (iaxs[x]) {
 				/* Look for an exact match */
-				if (match(sin, callno, dcallno, iaxs[x])) {
+				if (match(sin, callno, dcallno, iaxs[x], check_dcallno)) {
 					res = x;
 				}
 			}
@@ -1684,7 +1686,7 @@
 			ast_mutex_lock(&iaxsl[x]);
 			if (iaxs[x]) {
 				/* Look for an exact match */
-				if (match(sin, callno, dcallno, iaxs[x])) {
+				if (match(sin, callno, dcallno, iaxs[x], check_dcallno)) {
 					res = x;
 				}
 			}
@@ -1768,14 +1770,14 @@
 	return res;
 }
 
-static int find_callno(unsigned short callno, unsigned short dcallno, struct sockaddr_in *sin, int new, int sockfd) {
-
-	return __find_callno(callno, dcallno, sin, new, sockfd, 0);
-}
-
-static int find_callno_locked(unsigned short callno, unsigned short dcallno, struct sockaddr_in *sin, int new, int sockfd) {
-
-	return __find_callno(callno, dcallno, sin, new, sockfd, 1);
+static int find_callno(unsigned short callno, unsigned short dcallno, struct sockaddr_in *sin, int new, int sockfd, int full_frame) {
+
+	return __find_callno(callno, dcallno, sin, new, sockfd, 0, full_frame);
+}
+
+static int find_callno_locked(unsigned short callno, unsigned short dcallno, struct sockaddr_in *sin, int new, int sockfd, int full_frame) {
+
+	return __find_callno(callno, dcallno, sin, new, sockfd, 1, full_frame);
 }
 
 /*!
@@ -5936,20 +5938,17 @@
 		/* And the permitted authentication methods */
 		iaxs[callno]->authmethods = user->authmethods;
 		iaxs[callno]->adsi = user->adsi;
-		/* If they have callerid, override the given caller id.  Always store the ANI */
-		if (!ast_strlen_zero(iaxs[callno]->cid_num) || !ast_strlen_zero(iaxs[callno]->cid_name)) {
-			if (ast_test_flag(user, IAX_HASCALLERID)) {
-				iaxs[callno]->calling_tns = 0;
-				iaxs[callno]->calling_ton = 0;
-				ast_string_field_set(iaxs[callno], cid_num, user->cid_num);
-				ast_string_field_set(iaxs[callno], cid_name, user->cid_name);
-				iaxs[callno]->calling_pres = AST_PRES_ALLOWED_USER_NUMBER_PASSED_SCREEN;
-			}
-			if (ast_strlen_zero(iaxs[callno]->ani))
-				ast_string_field_set(iaxs[callno], ani, user->cid_num);
-		} else {
+		/* If the user has callerid, override the remote caller id. */
+		if (ast_test_flag(user, IAX_HASCALLERID)) {
+			iaxs[callno]->calling_tns = 0;
+			iaxs[callno]->calling_ton = 0;
+			ast_string_field_set(iaxs[callno], cid_num, user->cid_num);
+			ast_string_field_set(iaxs[callno], cid_name, user->cid_name);
+			ast_string_field_set(iaxs[callno], ani, user->cid_num);
+			iaxs[callno]->calling_pres = AST_PRES_ALLOWED_USER_NUMBER_PASSED_SCREEN;
+		} else if (ast_strlen_zero(iaxs[callno]->cid_num) && ast_strlen_zero(iaxs[callno]->cid_name)) {
 			iaxs[callno]->calling_pres = AST_PRES_NUMBER_NOT_AVAILABLE;
-		}
+		} /* else user is allowed to set their own CID settings */
 		if (!ast_strlen_zero(user->accountcode))
 			ast_string_field_set(iaxs[callno], accountcode, user->accountcode);
 		if (!ast_strlen_zero(user->mohinterpret))
@@ -7823,7 +7822,7 @@
 		/* Stop if we don't have enough data */
 		if (len > packet_len)
 			break;
-		fr->callno = find_callno_locked(callno & ~IAX_FLAG_FULL, 0, sin, NEW_PREVENT, sockfd);
+		fr->callno = find_callno_locked(callno & ~IAX_FLAG_FULL, 0, sin, NEW_PREVENT, sockfd, 0);
 		if (!fr->callno)
 			continue;
 
@@ -8006,7 +8005,7 @@
 		}
 
 		/* This is a video frame, get call number */
-		fr->callno = find_callno(ntohs(vh->callno) & ~0x8000, dcallno, &sin, new, fd);
+		fr->callno = find_callno(ntohs(vh->callno) & ~0x8000, dcallno, &sin, new, fd, 0);
 		minivid = 1;
 	} else if ((meta->zeros == 0) && !(ntohs(meta->metacmd) & 0x8000))
 		return socket_process_meta(res, meta, &sin, fd, fr);
@@ -8021,46 +8020,14 @@
 			return 1;
 		}
 
+		/* Get the destination call number */
+		dcallno = ntohs(fh->dcallno) & ~IAX_FLAG_RETRANS;
 		/* Retrieve the type and subclass */
 		f.frametype = fh->type;
 		if (f.frametype == AST_FRAME_VIDEO) {
 			f.subclass = uncompress_subclass(fh->csub & ~0x40) | ((fh->csub >> 6) & 0x1);
 		} else {
 			f.subclass = uncompress_subclass(fh->csub);
-		}
-
-		/*
-		 * We enforce accurate destination call numbers for all full frames except
-		 * NEW, LAGRQ, and PING commands. For these, we leave dcallno set to 0 to
-		 * avoid having find_callno() use it when matching against existing calls.
-		 *
-		 * For NEW commands, the destination call is always ignored. See section
-		 * 6.2.2 of the iax2 RFC.
-		 * 
-		 * For LAGRQ and PING commands, this is because older versions of Asterisk
-		 * schedule these commands to get sent very quickly, and they will sometimes
-		 * be sent before they receive the first frame from the other side.  When
-		 * that happens, it doesn't contain the destination call number.  However,
-		 * not checking it for these frames is safe.
-		 *
-		 * Discussed in the following thread:
-		 * http://lists.digium.com/pipermail/asterisk-dev/2008-May/033217.html 
-		 */
-
-		/* Get the destination call number */
-		dcallno = ntohs(fh->dcallno) & ~IAX_FLAG_RETRANS;
-
-		if (f.frametype == AST_FRAME_IAX &&
-				(f.subclass == IAX_COMMAND_NEW ||
-				 f.subclass == IAX_COMMAND_PING ||
-				 f.subclass == IAX_COMMAND_LAGRQ)) {
-			dcallno = 0;
-		} else if (!dcallno) {
-			/* All other full-frames must have a non-zero dcallno,
-			 * We silently drop this frame since it cannot be a
-			 * valid match to an existing call session.
-			 */
-			return 1;
 		}
 		if ((f.frametype == AST_FRAME_IAX) && ((f.subclass == IAX_COMMAND_NEW) || (f.subclass == IAX_COMMAND_REGREQ) ||
 						       (f.subclass == IAX_COMMAND_POKE) || (f.subclass == IAX_COMMAND_FWDOWNL) ||
@@ -8073,7 +8040,25 @@
 	}
 
 	if (!fr->callno) {
-		fr->callno = find_callno(ntohs(mh->callno) & ~IAX_FLAG_FULL, dcallno, &sin, new, fd);
+		int check_dcallno = 0;
+
+		/*
+		 * We enforce accurate destination call numbers for all full frames except
+		 * LAGRQ and PING commands.  This is because older versions of Asterisk
+		 * schedule these commands to get sent very quickly, and they will sometimes
+		 * be sent before they receive the first frame from the other side.  When
+		 * that happens, it doesn't contain the destination call number.  However,
+		 * not checking it for these frames is safe.
+		 * 
+		 * Discussed in the following thread:
+		 *    http://lists.digium.com/pipermail/asterisk-dev/2008-May/033217.html 
+		 */
+
+		if (ntohs(mh->callno) & IAX_FLAG_FULL) {
+			check_dcallno = f.frametype == AST_FRAME_IAX ? (f.subclass != IAX_COMMAND_PING && f.subclass != IAX_COMMAND_LAGRQ) : 1;
+		}
+
+		fr->callno = find_callno(ntohs(mh->callno) & ~IAX_FLAG_FULL, dcallno, &sin, new, fd, check_dcallno);
 	}
 
 	if (fr->callno > 0)
@@ -8160,7 +8145,6 @@
 			if (
 			 ((f.subclass != IAX_COMMAND_ACK) &&
 			  (f.subclass != IAX_COMMAND_INVAL) &&
-			  (f.subclass != IAX_COMMAND_NEW) &&        /* for duplicate/retrans NEW frames */
 			  (f.subclass != IAX_COMMAND_TXCNT) &&
 			  (f.subclass != IAX_COMMAND_TXREADY) &&		/* for attended transfer */
 			  (f.subclass != IAX_COMMAND_TXREL) &&		/* for attended transfer */
@@ -9734,7 +9718,7 @@
 
 	if (!reg->callno) {
 		ast_debug(3, "Allocate call number\n");
-		reg->callno = find_callno_locked(0, 0, &reg->addr, NEW_FORCE, defaultsockfd);
+		reg->callno = find_callno_locked(0, 0, &reg->addr, NEW_FORCE, defaultsockfd, 0);
 		if (reg->callno < 1) {
 			ast_log(LOG_WARNING, "Unable to create call for registration\n");
 			return -1;
@@ -9785,7 +9769,7 @@
 	memset(&ied, 0, sizeof(ied));
 	iax_ie_append_raw(&ied, IAX_IE_PROVISIONING, provdata.buf, provdata.pos);
 
-	callno = find_callno_locked(0, 0, &sin, NEW_FORCE, cai.sockfd);
+	callno = find_callno_locked(0, 0, &sin, NEW_FORCE, cai.sockfd, 0);
 	if (!callno)
 		return -1;
 
@@ -9946,7 +9930,7 @@
 	}
 	if (heldcall)
 		ast_mutex_unlock(&iaxsl[heldcall]);
-	callno = peer->callno = find_callno(0, 0, &peer->addr, NEW_FORCE, peer->sockfd);
+	callno = peer->callno = find_callno(0, 0, &peer->addr, NEW_FORCE, peer->sockfd, 0);
 	if (heldcall)
 		ast_mutex_lock(&iaxsl[heldcall]);
 	if (peer->callno < 1) {
@@ -10029,7 +10013,7 @@
 	if (pds.port)
 		sin.sin_port = htons(atoi(pds.port));
 
-	callno = find_callno_locked(0, 0, &sin, NEW_FORCE, cai.sockfd);
+	callno = find_callno_locked(0, 0, &sin, NEW_FORCE, cai.sockfd, 0);
 	if (callno < 1) {
 		ast_log(LOG_WARNING, "Unable to create call\n");
 		*cause = AST_CAUSE_CONGESTION;
@@ -11393,7 +11377,7 @@
 	ast_debug(1, "peer: %s, username: %s, password: %s, context: %s\n",
 		pds.peer, pds.username, pds.password, pds.context);
 
-	callno = find_callno_locked(0, 0, &sin, NEW_FORCE, cai.sockfd);
+	callno = find_callno_locked(0, 0, &sin, NEW_FORCE, cai.sockfd, 0);
 	if (callno < 1) {
 		ast_log(LOG_WARNING, "Unable to create call\n");
 		return -1;
@@ -12117,7 +12101,11 @@
 {
 	struct chan_iax2_pvt *pvt = obj, *pvt2 = arg;
 
-	return match(&pvt2->addr, pvt2->peercallno, pvt2->callno, pvt) ? CMP_MATCH : 0;
+	/* The frames_received field is used to hold whether we're matching
+	 * against a full frame or not ... */
+
+	return match(&pvt2->addr, pvt2->peercallno, pvt2->callno, pvt, 
+		pvt2->frames_received) ? CMP_MATCH : 0;
 }
 
 /*! \brief Load IAX2 module, load configuraiton ---*/

Modified: team/tilghman/odbc_tx_support/channels/chan_sip.c
URL: http://svn.digium.com/view/asterisk/team/tilghman/odbc_tx_support/channels/chan_sip.c?view=diff&rev=131241&r1=131240&r2=131241
==============================================================================
--- team/tilghman/odbc_tx_support/channels/chan_sip.c (original)
+++ team/tilghman/odbc_tx_support/channels/chan_sip.c Wed Jul 16 12:48:48 2008
@@ -1056,11 +1056,13 @@
 #define SIP_PAGE2_BUGGY_MWI		(1 << 26)	/*!< DP: Buggy CISCO MWI fix */
 #define SIP_PAGE2_REGISTERTRYING        (1 << 29)       /*!< DP: Send 100 Trying on REGISTER attempts */
 #define SIP_PAGE2_UDPTL_DESTINATION     (1 << 30)       /*!< DP: Use source IP of RTP as destination if NAT is enabled */
+#define SIP_PAGE2_VIDEOSUPPORT_ALWAYS	(1 << 31)       /*!< DP: Always set up video, even if endpoints don't support it */
 
 #define SIP_PAGE2_FLAGS_TO_COPY \
 	(SIP_PAGE2_ALLOWSUBSCRIBE | SIP_PAGE2_ALLOWOVERLAP | SIP_PAGE2_VIDEOSUPPORT | \
 	SIP_PAGE2_T38SUPPORT | SIP_PAGE2_RFC2833_COMPENSATE | SIP_PAGE2_BUGGY_MWI | \
-	SIP_PAGE2_TEXTSUPPORT | SIP_PAGE2_UDPTL_DESTINATION)
+	SIP_PAGE2_TEXTSUPPORT | SIP_PAGE2_UDPTL_DESTINATION | \
+	SIP_PAGE2_VIDEOSUPPORT_ALWAYS)
 
 /*@}*/ 
 
@@ -4147,7 +4149,10 @@
 	ast_copy_flags(&dialog->flags[0], &peer->flags[0], SIP_FLAGS_TO_COPY);
 	ast_copy_flags(&dialog->flags[1], &peer->flags[1], SIP_PAGE2_FLAGS_TO_COPY);
 	dialog->capability = peer->capability;
-	if ((!ast_test_flag(&dialog->flags[1], SIP_PAGE2_VIDEOSUPPORT) || !(dialog->capability & AST_FORMAT_VIDEO_MASK)) && dialog->vrtp) {
+	if (!ast_test_flag(&dialog->flags[1], SIP_PAGE2_VIDEOSUPPORT_ALWAYS) &&
+			(!ast_test_flag(&dialog->flags[1], SIP_PAGE2_VIDEOSUPPORT) ||
+				!(dialog->capability & AST_FORMAT_VIDEO_MASK)) &&
+			dialog->vrtp) {
 		ast_rtp_destroy(dialog->vrtp);
 		dialog->vrtp = NULL;
 	}
@@ -5509,7 +5514,9 @@
 	   We also check for vrtp. If it's not there, we are not allowed do any video anyway.
 	 */
 	if (i->vrtp) {
-		if (i->prefcodec)
+		if (ast_test_flag(&i->flags[1], SIP_PAGE2_VIDEOSUPPORT))
+			needvideo = AST_FORMAT_VIDEO_MASK;
+		else if (i->prefcodec)
 			needvideo = i->prefcodec & AST_FORMAT_VIDEO_MASK;	/* Outbound call */
  		else
 			needvideo = i->jointcapability & AST_FORMAT_VIDEO_MASK;	/* Inbound call */
@@ -11793,7 +11800,10 @@
 		if (p->peercapability)
 			p->jointcapability &= p->peercapability;
 		p->maxcallbitrate = peer->maxcallbitrate;
-		if ((!ast_test_flag(&p->flags[1], SIP_PAGE2_VIDEOSUPPORT) || !(p->capability & AST_FORMAT_VIDEO_MASK)) && p->vrtp) {
+		if (!ast_test_flag(&p->flags[1], SIP_PAGE2_VIDEOSUPPORT_ALWAYS) &&
+				(!ast_test_flag(&p->flags[1], SIP_PAGE2_VIDEOSUPPORT) ||
+					!(p->capability & AST_FORMAT_VIDEO_MASK)) &&
+				p->vrtp) {
 			ast_rtp_destroy(p->vrtp);
 			p->vrtp = NULL;
 		}
@@ -12895,7 +12905,7 @@
 
 	peer = astman_get_header(m, "Peer");
 	if (ast_strlen_zero(peer)) {
-		astman_send_error(s, m, "Peer: <name> missing.\n");
+		astman_send_error(s, m, "Peer: <name> missing.");
 		return 0;
 	}
 	a[0] = "sip";
@@ -12941,7 +12951,7 @@
 	} else if (type == 0) {
 		ast_cli(fd, "Peer '%s' not found\n", argv[3]);
 	} else {
-		astman_send_error(s, m, "Peer not found\n");
+		astman_send_error(s, m, "Peer not found");
 	}
 	return CLI_SUCCESS;
 }
@@ -12954,7 +12964,7 @@
 
 	peer = astman_get_header(m, "Peer");
 	if (ast_strlen_zero(peer)) {
-		astman_send_error(s, m, "Peer: <name> missing.\n");
+		astman_send_error(s, m, "Peer: <name> missing.");
 		return 0;
 	}
 	a[0] = "sip";
@@ -13026,7 +13036,7 @@
 			if (!ast_strlen_zero(id))
 				astman_append(s, "ActionID: %s\r\n", id);
 		} else {
-			snprintf (cbuf, sizeof(cbuf), "Peer %s not found.\n", argv[3]);
+			snprintf (cbuf, sizeof(cbuf), "Peer %s not found.", argv[3]);
 			astman_send_error(s, m, cbuf);
 			return CLI_SUCCESS;
 		}
@@ -20008,8 +20018,13 @@
 		ast_set_flag(&mask[0], SIP_PROMISCREDIR);
 		ast_set2_flag(&flags[0], ast_true(v->value), SIP_PROMISCREDIR);
 	} else if (!strcasecmp(v->name, "videosupport")) {
-		ast_set_flag(&mask[1], SIP_PAGE2_VIDEOSUPPORT);
-		ast_set2_flag(&flags[1], ast_true(v->value), SIP_PAGE2_VIDEOSUPPORT);
+		if (!strcasecmp(v->value, "always")) {
+			ast_set_flag(&mask[1], SIP_PAGE2_VIDEOSUPPORT_ALWAYS);
+			ast_set_flag(&flags[1], SIP_PAGE2_VIDEOSUPPORT_ALWAYS);
+		} else {
+			ast_set_flag(&mask[1], SIP_PAGE2_VIDEOSUPPORT);
+			ast_set2_flag(&flags[1], ast_true(v->value), SIP_PAGE2_VIDEOSUPPORT);
+		}
 	} else if (!strcasecmp(v->name, "textsupport")) {
 		ast_set_flag(&mask[1], SIP_PAGE2_TEXTSUPPORT);
 		ast_set2_flag(&flags[1], ast_true(v->value), SIP_PAGE2_TEXTSUPPORT);
@@ -20936,7 +20951,7 @@
 	/* Copy the default jb config over global_jbconf */
 	memcpy(&global_jbconf, &default_jbconf, sizeof(struct ast_jb_conf));
 
-	ast_clear_flag(&global_flags[1], SIP_PAGE2_VIDEOSUPPORT);
+	ast_clear_flag(&global_flags[1], SIP_PAGE2_VIDEOSUPPORT | SIP_PAGE2_VIDEOSUPPORT_ALWAYS);
 	ast_clear_flag(&global_flags[1], SIP_PAGE2_TEXTSUPPORT);
 
 

Modified: team/tilghman/odbc_tx_support/channels/chan_skinny.c
URL: http://svn.digium.com/view/asterisk/team/tilghman/odbc_tx_support/channels/chan_skinny.c?view=diff&rev=131241&r1=131240&r2=131241
==============================================================================
--- team/tilghman/odbc_tx_support/channels/chan_skinny.c (original)
+++ team/tilghman/odbc_tx_support/channels/chan_skinny.c Wed Jul 16 12:48:48 2008
@@ -68,6 +68,7 @@
 #include "asterisk/devicestate.h"
 #include "asterisk/event.h"
 #include "asterisk/indications.h"
+#include "asterisk/linkedlists.h"
 
 /*************************************
  * Skinny/Asterisk Protocol Settings *
@@ -1105,10 +1106,6 @@
 AST_MUTEX_DEFINE_STATIC(monlock);
 /* Protect the network socket */
 AST_MUTEX_DEFINE_STATIC(netlock);
-/* Protect the session list */
-AST_MUTEX_DEFINE_STATIC(sessionlock);
-/* Protect the device list */
-AST_MUTEX_DEFINE_STATIC(devicelock);
 
 /* This is the thread for the monitor which checks for input on the channels
    which are not currently in use. */
@@ -1142,7 +1139,7 @@
 	int xferor;
 
 
-	struct skinny_subchannel *next;
+	AST_LIST_ENTRY(skinny_subchannel) list;
 	struct skinny_subchannel *related;
 	struct skinny_line *parent;
 };
@@ -1199,9 +1196,9 @@
 	int canreinvite;
 
 	struct ast_codec_pref prefs;
-	struct skinny_subchannel *sub;
 	struct skinny_subchannel *activesub;
-	struct skinny_line *next;
+	AST_LIST_HEAD(, skinny_subchannel) sub;
+	AST_LIST_ENTRY(skinny_line) list;
 	struct skinny_device *parent;
 	struct ast_variable *chanvars; /*!< Channel variables to set for inbound call */
 };
@@ -1216,19 +1213,18 @@
 	int laststate;
 	int isHint;
 
-	struct skinny_speeddial *next;
+	AST_LIST_ENTRY(skinny_speeddial) list;
 	struct skinny_device *parent;
 };
 
 struct skinny_addon {
 	ast_mutex_t lock;
 	char type[10];
-
-	struct skinny_addon *next;
+	AST_LIST_ENTRY(skinny_addon) list;
 	struct skinny_device *parent;
 };
 
-static struct skinny_device {
+struct skinny_device {
 	/* A device containing one or more lines */
 	char name[80];
 	char id[16];
@@ -1242,17 +1238,19 @@
 	int earlyrtp;
 	struct sockaddr_in addr;
 	struct in_addr ourip;
-	struct skinny_line *lines;
-	struct skinny_speeddial *speeddials;
-	struct skinny_addon *addons;
+	AST_LIST_HEAD(, skinny_line) lines;
+	AST_LIST_HEAD(, skinny_speeddial) speeddials;
+	AST_LIST_HEAD(, skinny_addon) addons;
 	struct ast_codec_pref prefs;
 	struct ast_ha *ha;
 	struct skinnysession *session;
-	struct skinny_device *next;
 	struct skinny_line *activeline;
-} *devices = NULL;
-
-static struct skinnysession {
+	AST_LIST_ENTRY(skinny_device) list;
+};
+

[... 1901 lines stripped ...]



More information about the svn-commits mailing list