[asterisk-commits] branch oej/test-this-branch r34760 - in
/team/oej/test-this-branch: ./ apps/ ...
asterisk-commits at lists.digium.com
asterisk-commits at lists.digium.com
Mon Jun 19 00:12:28 MST 2006
Author: oej
Date: Mon Jun 19 02:12:28 2006
New Revision: 34760
URL: http://svn.digium.com/view/asterisk?rev=34760&view=rev
Log:
Reset automerge
Added:
team/oej/test-this-branch/build_tools/get_makeopts
- copied unchanged from r34738, trunk/build_tools/get_makeopts
team/oej/test-this-branch/build_tools/get_moduleinfo
- copied unchanged from r34738, trunk/build_tools/get_moduleinfo
team/oej/test-this-branch/pbx/ael/ael-test/ael-test8/
- copied from r34738, trunk/pbx/ael/ael-test/ael-test8/
team/oej/test-this-branch/pbx/ael/ael-test/ael-test8/extensions.ael
- copied unchanged from r34738, trunk/pbx/ael/ael-test/ael-test8/extensions.ael
team/oej/test-this-branch/pbx/ael/ael-test/ref.ael-test8
- copied unchanged from r34738, trunk/pbx/ael/ael-test/ref.ael-test8
Removed:
team/oej/test-this-branch/build_tools/get_moduledeps
Modified:
team/oej/test-this-branch/ (props changed)
team/oej/test-this-branch/Makefile
team/oej/test-this-branch/apps/Makefile
team/oej/test-this-branch/apps/app_voicemail.c
team/oej/test-this-branch/build_tools/cflags.xml
team/oej/test-this-branch/build_tools/menuselect.c
team/oej/test-this-branch/build_tools/menuselect.h
team/oej/test-this-branch/build_tools/prep_moduledeps
team/oej/test-this-branch/cdr/Makefile
team/oej/test-this-branch/channels/Makefile
team/oej/test-this-branch/channels/chan_iax2.c
team/oej/test-this-branch/channels/chan_jingle.c
team/oej/test-this-branch/channels/chan_misdn.c
team/oej/test-this-branch/channels/chan_skinny.c
team/oej/test-this-branch/channels/misdn/isdn_lib.c
team/oej/test-this-branch/channels/misdn/isdn_lib.h
team/oej/test-this-branch/codecs/Makefile
team/oej/test-this-branch/configs/iax.conf.sample
team/oej/test-this-branch/configs/indications.conf.sample
team/oej/test-this-branch/configs/skinny.conf.sample
team/oej/test-this-branch/db1-ast/Makefile
team/oej/test-this-branch/doc/ael.txt
team/oej/test-this-branch/doc/radius.txt
team/oej/test-this-branch/formats/Makefile
team/oej/test-this-branch/funcs/Makefile
team/oej/test-this-branch/include/asterisk/ael_structs.h
team/oej/test-this-branch/pbx/Makefile
team/oej/test-this-branch/pbx/ael/ael-test/ref.ael-test1
team/oej/test-this-branch/pbx/ael/ael-test/ref.ael-test2
team/oej/test-this-branch/pbx/ael/ael-test/ref.ael-test3
team/oej/test-this-branch/pbx/ael/ael-test/ref.ael-test4
team/oej/test-this-branch/pbx/ael/ael-test/ref.ael-test5
team/oej/test-this-branch/pbx/ael/ael-test/ref.ael-test6
team/oej/test-this-branch/pbx/ael/ael-test/ref.ael-test7
team/oej/test-this-branch/pbx/ael/ael.tab.c
team/oej/test-this-branch/pbx/ael/ael.tab.h
team/oej/test-this-branch/pbx/ael/ael.y
team/oej/test-this-branch/pbx/ael/ael_lex.c
team/oej/test-this-branch/pbx/pbx_ael.c
team/oej/test-this-branch/res/Makefile
team/oej/test-this-branch/res/res_jabber.c
team/oej/test-this-branch/res/res_smdi.c
team/oej/test-this-branch/say.c
team/oej/test-this-branch/sounds/Makefile
Propchange: team/oej/test-this-branch/
------------------------------------------------------------------------------
automerge = http://edvina.net/training/
Propchange: team/oej/test-this-branch/
------------------------------------------------------------------------------
Binary property 'branch-1.2-blocked' - no diff available.
Propchange: team/oej/test-this-branch/
------------------------------------------------------------------------------
Binary property 'branch-1.2-merged' - no diff available.
Propchange: team/oej/test-this-branch/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Mon Jun 19 02:12:28 2006
@@ -1,1 +1,1 @@
-/trunk:1-34483
+/trunk:1-34758
Modified: team/oej/test-this-branch/Makefile
URL: http://svn.digium.com/view/asterisk/team/oej/test-this-branch/Makefile?rev=34760&r1=34759&r2=34760&view=diff
==============================================================================
--- team/oej/test-this-branch/Makefile (original)
+++ team/oej/test-this-branch/Makefile Mon Jun 19 02:12:28 2006
@@ -153,13 +153,13 @@
OPTIMIZE+=-O6
else
# Stack backtraces, while useful for debugging, are incompatible with optimizations
- ifeq (${OSARCH},Linux)
+ ifeq ($(OSARCH),Linux)
CFLAGS+=-DSTACK_BACKTRACES
endif
endif
else
# Stack backtraces, while useful for debugging, are incompatible with optimizations
- ifeq (${OSARCH},Linux)
+ ifeq ($(OSARCH),Linux)
CFLAGS+=-DSTACK_BACKTRACES
endif
endif
@@ -286,7 +286,7 @@
ASTCFLAGS+=$(MALLOC_DEBUG)$(BUSYDETECT)$(OPTIONS)
MOD_SUBDIRS=res channels pbx apps codecs formats cdr funcs
-OTHER_SUBDIRS=utils stdtime agi
+OTHER_SUBDIRS=utils agi
SUBDIRS:=$(MOD_SUBDIRS) $(OTHER_SUBDIRS)
OBJS=io.o sched.o logger.o frame.o loader.o config.o channel.o \
@@ -490,17 +490,14 @@
fi
@rm -f $@.tmp
-stdtime/libtime.a:
- CFLAGS="$(MOD_SUBDIR_CFLAGS)$(ASTCFLAGS)" $(MAKE) -C stdtime libtime.a
-
-asterisk: include/asterisk/buildopts.h editline/libedit.a db1-ast/libdb1.a stdtime/libtime.a $(OBJS)
+asterisk: include/asterisk/buildopts.h editline/libedit.a db1-ast/libdb1.a $(OBJS)
build_tools/make_build_h > include/asterisk/build.h.tmp
if cmp -s include/asterisk/build.h.tmp include/asterisk/build.h ; then echo ; else \
mv include/asterisk/build.h.tmp include/asterisk/build.h ; \
fi
rm -f include/asterisk/build.h.tmp
$(CC) -c -o buildinfo.o $(CFLAGS) buildinfo.c
- $(CC) $(DEBUG) $(ASTOBJ) $(ASTLINK) $(OBJS) buildinfo.o $(LIBEDIT) db1-ast/libdb1.a stdtime/libtime.a $(LIBS)
+ $(CC) $(DEBUG) $(ASTOBJ) $(ASTLINK) $(OBJS) buildinfo.o $(LIBEDIT) db1-ast/libdb1.a $(LIBS)
muted: muted.o
$(CC) $(AUDIO_LIBS) -o muted muted.o
@@ -690,7 +687,7 @@
adsi:
mkdir -p $(DESTDIR)$(ASTETCDIR)
for x in configs/*.adsi; do \
- if [ ! -f $(DESTDIR)$(ASTETCDIRX)/$$x ]; then \
+ if [ ! -f $(DESTDIR)$(ASTETCDIR)/$$x ]; then \
$(INSTALL) -m 644 $$x $(DESTDIR)$(ASTETCDIR)/`basename $$x` ; \
fi ; \
done
Modified: team/oej/test-this-branch/apps/Makefile
URL: http://svn.digium.com/view/asterisk/team/oej/test-this-branch/apps/Makefile?rev=34760&r1=34759&r2=34760&view=diff
==============================================================================
--- team/oej/test-this-branch/apps/Makefile (original)
+++ team/oej/test-this-branch/apps/Makefile Mon Jun 19 02:12:28 2006
@@ -11,20 +11,15 @@
# the GNU General Public License
#
-include ../menuselect.makeopts
+ifneq ($(wildcard ../menuselect.makeopts),)
+ include ../menuselect.makeopts
+endif
SELECTED_MODS:=$(filter-out $(MENUSELECT_APPS),$(patsubst %.c,%,$(wildcard app_*.c)))
-# If you have UnixODBC you can use ODBC voicemail
-# storage
-#
-# Uncomment to use ODBC storage
-#CFLAGS+=-DUSE_ODBC_STORAGE
-# Uncomment for extended ODBC voicemail storage
-#CFLAGS+=-DEXTENDED_ODBC_STORAGE
-# See doc/README.odbcstorage for more information
+MODS:=$(patsubst %,%.so,$(SELECTED_MODS))
-MODS:=$(patsubst %,%.so,$(SELECTED_MODS))
+app_voicemail.o: CFLAGS+=$(patsubst %,-D%,$(MENUSELECT_app_voicemail))
all: $(MODS)
Modified: team/oej/test-this-branch/apps/app_voicemail.c
URL: http://svn.digium.com/view/asterisk/team/oej/test-this-branch/apps/app_voicemail.c?rev=34760&r1=34759&r2=34760&view=diff
==============================================================================
--- team/oej/test-this-branch/apps/app_voicemail.c (original)
+++ team/oej/test-this-branch/apps/app_voicemail.c Mon Jun 19 02:12:28 2006
@@ -40,6 +40,19 @@
* 12-04-2006 : Support for Polish added by DIR (www.dir.pl)
* Bartosz Supczinski <Bartosz.Supczinski at dir.pl>
*/
+
+/*** MAKEOPTS
+<category name="MENUSELECT_app_voicemail" displayname="Voicemail Build Options" positive_output="yes" remove_on_change="apps/app_voicemail.o">
+ <member name="ODBC_STORAGE" displayname="Storage of Voicemail using ODBC">
+ <depend>unixodbc</depend>
+ <defaultenabled>no</defaultenabled>
+ </member>
+ <member name="EXTENDED_ODBC_STORAGE" displayname="Storage of Voicemail using ODBC (extended)">
+ <depend>unixodbc</depend>
+ <defaultenabled>no</defaultenabled>
+ </member>
+</category>
+ ***/
#include "asterisk.h"
@@ -77,7 +90,7 @@
#include "asterisk/stringfields.h"
#include "asterisk/smdi.h"
#define SMDI_MWI_WAIT_TIMEOUT 1000 /* 1 second */
-#ifdef USE_ODBC_STORAGE
+#ifdef ODBC_STORAGE
#include "asterisk/res_odbc.h"
#endif
@@ -290,7 +303,7 @@
static void apply_options(struct ast_vm_user *vmu, const char *options);
-#ifdef USE_ODBC_STORAGE
+#ifdef ODBC_STORAGE
static char odbc_database[80];
static char odbc_table[80];
#define RETRIEVE(a,b) retrieve_file(a,b)
@@ -839,7 +852,7 @@
}
-#ifdef USE_ODBC_STORAGE
+#ifdef ODBC_STORAGE
static int retrieve_file(char *dir, int msgnum)
{
int x = 0;
@@ -1291,7 +1304,7 @@
}
fdlen = lseek(fd, 0, SEEK_END);
lseek(fd, 0, SEEK_SET);
- printf("Length is %d\n", fdlen);
+ printf("Length is %zd\n", fdlen);
fdm = mmap(NULL, fdlen, PROT_READ | PROT_WRITE, MAP_SHARED,fd, 0);
if (!fdm) {
ast_log(LOG_WARNING, "Memory map failed!\n");
@@ -2021,7 +2034,7 @@
return (id >= 0 && id < (sizeof(msgs)/sizeof(msgs[0]))) ? msgs[id] : "Unknown";
}
-#ifdef USE_ODBC_STORAGE
+#ifdef ODBC_STORAGE
static int inboxcount(const char *mailbox, int *newmsgs, int *oldmsgs)
{
int x = -1;
@@ -6214,7 +6227,7 @@
astsearch = "no";
ast_set2_flag((&globalflags), ast_true(astsearch), VM_SEARCH);
-#ifdef USE_ODBC_STORAGE
+#ifdef ODBC_STORAGE
strcpy(odbc_database, "asterisk");
if ((thresholdstr = ast_variable_retrieve(cfg, "general", "odbcstorage"))) {
ast_copy_string(odbc_database, thresholdstr, sizeof(odbc_database));
@@ -6658,7 +6671,7 @@
ast_install_vm_functions(has_voicemail, inboxcount, messagecount);
-#if defined(USE_ODBC_STORAGE) && !defined(EXTENDED_ODBC_STORAGE)
+#if defined(ODBC_STORAGE) && !defined(EXTENDED_ODBC_STORAGE)
ast_log(LOG_WARNING, "The current ODBC storage table format will be changed soon."
"Please update your tables as per the README and edit the apps/Makefile "
"and uncomment the line containing EXTENDED_ODBC_STORAGE to enable the "
Modified: team/oej/test-this-branch/build_tools/cflags.xml
URL: http://svn.digium.com/view/asterisk/team/oej/test-this-branch/build_tools/cflags.xml?rev=34760&r1=34759&r2=34760&view=diff
==============================================================================
--- team/oej/test-this-branch/build_tools/cflags.xml (original)
+++ team/oej/test-this-branch/build_tools/cflags.xml Mon Jun 19 02:12:28 2006
@@ -1,4 +1,4 @@
- <category name="MENUSELECT_CFLAGS" displayname="Compiler Flags" positive_output="yes" force_clean_on_change="yes">
+ <category name="MENUSELECT_CFLAGS" displayname="Compiler Flags" positive_output="yes" remove_on_change=".lastclean">
<member name="DEBUG_CHANNEL_LOCKS" displayname="Debug Channel Locking">
</member>
<member name="DEBUG_SCHEDULER" displayname="Enable Scheduler Debugging Output">
Modified: team/oej/test-this-branch/build_tools/menuselect.c
URL: http://svn.digium.com/view/asterisk/team/oej/test-this-branch/build_tools/menuselect.c?rev=34760&r1=34759&r2=34760&view=diff
==============================================================================
--- team/oej/test-this-branch/build_tools/menuselect.c (original)
+++ team/oej/test-this-branch/build_tools/menuselect.c Mon Jun 19 02:12:28 2006
@@ -71,21 +71,6 @@
/*! This is set when the --check-deps argument is provided. */
static int check_deps = 0;
-/*! Force a clean of the source tree */
-static int force_clean = 0;
-
-static int add_category(struct category *cat);
-static int add_member(struct member *mem, struct category *cat);
-static int parse_makeopts_xml(const char *makeopts_xml);
-static int process_deps(void);
-static int build_member_list(void);
-static void mark_as_present(const char *member, const char *category);
-static void process_prev_failed_deps(char *buf);
-static int parse_existing_config(const char *infile);
-static int generate_makeopts_file(void);
-static void free_member_list(void);
-static void free_trees(void);
-
/*! \brief return a pointer to the first non-whitespace character */
static inline char *skip_blanks(char *str)
{
@@ -128,6 +113,19 @@
AST_LIST_INSERT_TAIL(&cat->members, mem, list);
return 0;
+}
+
+/*! \brief Free a member structure and all of its members */
+static void free_member(struct member *mem)
+{
+ struct depend *dep;
+ struct conflict *cnf;
+
+ while ((dep = AST_LIST_REMOVE_HEAD(&mem->deps, list)))
+ free(dep);
+ while ((cnf = AST_LIST_REMOVE_HEAD(&mem->conflicts, list)))
+ free(cnf);
+ free(mem);
}
/*! \brief Parse an input makeopts file */
@@ -175,8 +173,7 @@
cat->displayname = mxmlElementGetAttr(cur, "displayname");
if ((tmp = mxmlElementGetAttr(cur, "positive_output")))
cat->positive_output = !strcasecmp(tmp, "yes");
- if ((tmp = mxmlElementGetAttr(cur, "force_clean_on_change")))
- cat->force_clean_on_change = !strcasecmp(tmp, "yes");
+ cat->remove_on_change = mxmlElementGetAttr(cur, "remove_on_change");
if (add_category(cat)) {
free(cat);
@@ -193,8 +190,10 @@
mem->name = mxmlElementGetAttr(cur2, "name");
mem->displayname = mxmlElementGetAttr(cur2, "displayname");
+ mem->remove_on_change = mxmlElementGetAttr(cur2, "remove_on_change");
+
if (!cat->positive_output)
- mem->enabled = 1;
+ mem->was_enabled = mem->enabled = 1;
cur3 = mxmlFindElement(cur2, cur2, "defaultenabled", NULL, NULL, MXML_DESCEND);
if (cur3 && cur3->child)
@@ -204,8 +203,10 @@
cur3 && cur3->child;
cur3 = mxmlFindElement(cur3, cur2, "depend", NULL, NULL, MXML_DESCEND))
{
- if (!(dep = calloc(1, sizeof(*dep))))
+ if (!(dep = calloc(1, sizeof(*dep)))) {
+ free_member(mem);
return -1;
+ }
if (!strlen_zero(cur3->child->value.opaque)) {
dep->name = cur3->child->value.opaque;
AST_LIST_INSERT_HEAD(&mem->deps, dep, list);
@@ -217,8 +218,10 @@
cur3 && cur3->child;
cur3 = mxmlFindElement(cur3, cur2, "conflict", NULL, NULL, MXML_DESCEND))
{
- if (!(cnf = calloc(1, sizeof(*cnf))))
+ if (!(cnf = calloc(1, sizeof(*cnf)))) {
+ free_member(mem);
return -1;
+ }
if (!strlen_zero(cur3->child->value.opaque)) {
cnf->name = cur3->child->value.opaque;
AST_LIST_INSERT_HEAD(&mem->conflicts, cnf, list);
@@ -227,7 +230,7 @@
}
if (add_member(mem, cat))
- free(mem);
+ free_member(mem);
}
}
@@ -344,7 +347,7 @@
continue;
AST_LIST_TRAVERSE(&cat->members, mem, list) {
if (!strcmp(member, mem->name)) {
- mem->enabled = cat->positive_output;
+ mem->was_enabled = mem->enabled = cat->positive_output;
break;
}
}
@@ -370,8 +373,6 @@
if (mem && !(mem->depsfailed || mem->conflictsfailed)) {
mem->enabled = !mem->enabled;
- if (cat->force_clean_on_change)
- force_clean = 1;
}
}
@@ -503,6 +504,34 @@
fclose(f);
+ /* Traverse all categories and members and remove any files that are supposed
+ to be removed when an item has been changed */
+ AST_LIST_TRAVERSE(&categories, cat, list) {
+ unsigned int had_changes = 0;
+ char *file, *buf;
+
+ AST_LIST_TRAVERSE(&cat->members, mem, list) {
+ if (mem->enabled == mem->was_enabled)
+ continue;
+
+ had_changes = 1;
+
+ if (mem->remove_on_change) {
+ for (buf = strdupa(mem->remove_on_change), file = strsep(&buf, " ");
+ file;
+ file = strsep(&buf, " "))
+ unlink(file);
+ }
+ }
+
+ if (cat->remove_on_change && had_changes) {
+ for (buf = strdupa(cat->remove_on_change), file = strsep(&buf, " ");
+ file;
+ file = strsep(&buf, " "))
+ unlink(file);
+ }
+ }
+
return 0;
}
@@ -518,7 +547,8 @@
AST_LIST_TRAVERSE(&categories, cat, list) {
fprintf(stderr, "Category: '%s'\n", cat->name);
AST_LIST_TRAVERSE(&cat->members, mem, list) {
- fprintf(stderr, " ==>> Member: '%s' (%s)\n", mem->name, mem->enabled ? "Enabled" : "Disabled");
+ fprintf(stderr, " ==>> Member: '%s' (%s)", mem->name, mem->enabled ? "Enabled" : "Disabled");
+ fprintf(stderr, " Was %s\n", mem->was_enabled ? "Enabled" : "Disabled");
AST_LIST_TRAVERSE(&mem->deps, dep, list)
fprintf(stderr, " --> Depends on: '%s'\n", dep->name);
if (!AST_LIST_EMPTY(&mem->deps))
@@ -697,11 +727,5 @@
free_trees();
free_member_list();
- /* In some cases, such as modifying the CFLAGS for the build,
- * a "make clean" needs to be forced. Removing the .lastclean
- * file does this. */
- if (force_clean)
- unlink(".lastclean");
-
exit(res);
}
Modified: team/oej/test-this-branch/build_tools/menuselect.h
URL: http://svn.digium.com/view/asterisk/team/oej/test-this-branch/build_tools/menuselect.h?rev=34760&r1=34759&r2=34760&view=diff
==============================================================================
--- team/oej/test-this-branch/build_tools/menuselect.h (original)
+++ team/oej/test-this-branch/build_tools/menuselect.h Mon Jun 19 02:12:28 2006
@@ -52,8 +52,12 @@
const char *displayname;
/*! Default setting */
const char *defaultenabled;
+ /*! Delete these file(s) if this member changes */
+ const char *remove_on_change;
/*! This module is currently selected */
unsigned int enabled:1;
+ /*! This module was enabled when the config was loaded */
+ unsigned int was_enabled:1;
/*! This module has failed dependencies */
unsigned int depsfailed:1;
/*! This module has failed conflicts */
@@ -71,10 +75,10 @@
const char *name;
/*! the name displayed in the menu */
const char *displayname;
- /*! Display what is selected, as opposed to not selected */
+ /*! Delete these file(s) if anything in this category changes */
+ const char *remove_on_change;
+ /*! Output what is selected, as opposed to not selected */
unsigned int positive_output:1;
- /*! Force a clean of the source tree if anything in this category changes */
- unsigned int force_clean_on_change:1;
/*! the list of possible values to be set in this variable */
AST_LIST_HEAD_NOLOCK(, member) members;
/*! for linking */
Modified: team/oej/test-this-branch/build_tools/prep_moduledeps
URL: http://svn.digium.com/view/asterisk/team/oej/test-this-branch/build_tools/prep_moduledeps?rev=34760&r1=34759&r2=34760&view=diff
==============================================================================
--- team/oej/test-this-branch/build_tools/prep_moduledeps (original)
+++ team/oej/test-this-branch/build_tools/prep_moduledeps Mon Jun 19 02:12:28 2006
@@ -38,16 +38,22 @@
fname=${file##${dir}/}
get_description ${file}
desc=${TDESC}
- echo -e "\t\t<member name=\"${fname%%.c}\" displayname=\"${desc}\">"
- awk -f build_tools/get_moduledeps ${file}
+ echo -e "\t\t<member name=\"${fname%%.c}\" displayname=\"${desc}\" remove_on_change=\"${dir}/${fname%%.c}.o ${dir}/${fname%%.c}.so\">"
+ awk -f build_tools/get_moduleinfo ${file}
echo -e "\t\t</member>"
done
echo -e "\t</category>"
+
+ for file in ${dir}/${prefix}*.c
+ do
+ awk -f build_tools/get_makeopts ${file} >> .makeoptstmp
+ done
}
echo "<?xml version="1.0"?>"
echo
echo "<menu>"
+rm -f .makeoptstmp
process_dir apps app APPS Applications
process_dir cdr cdr CDR "Call Detail Recording"
process_dir channels chan CHANNELS "Channel Drivers"
@@ -58,4 +64,6 @@
process_dir res res RES "Resource Modules"
cat build_tools/cflags.xml
cat sounds/sounds.xml
+cat .makeoptstmp
+rm -f .makeoptstmp
echo "</menu>"
Modified: team/oej/test-this-branch/cdr/Makefile
URL: http://svn.digium.com/view/asterisk/team/oej/test-this-branch/cdr/Makefile?rev=34760&r1=34759&r2=34760&view=diff
==============================================================================
--- team/oej/test-this-branch/cdr/Makefile (original)
+++ team/oej/test-this-branch/cdr/Makefile Mon Jun 19 02:12:28 2006
@@ -11,7 +11,9 @@
# the GNU General Public License
#
-include ../menuselect.makeopts
+ifneq ($(wildcard ../menuselect.makeopts),)
+ include ../menuselect.makeopts
+endif
SELECTED_MODS:=$(filter-out $(MENUSELECT_CDR),$(patsubst %.c,%,$(wildcard cdr_*.c)))
@@ -46,7 +48,7 @@
#endif
-all: depend $(MODS)
+all: $(MODS)
install: all
for x in $(MODS); do $(INSTALL) -m 755 $$x $(DESTDIR)$(MODULES_DIR) ; done
Modified: team/oej/test-this-branch/channels/Makefile
URL: http://svn.digium.com/view/asterisk/team/oej/test-this-branch/channels/Makefile?rev=34760&r1=34759&r2=34760&view=diff
==============================================================================
--- team/oej/test-this-branch/channels/Makefile (original)
+++ team/oej/test-this-branch/channels/Makefile Mon Jun 19 02:12:28 2006
@@ -11,7 +11,9 @@
# the GNU General Public License
#
-include ../menuselect.makeopts
+ifneq ($(wildcard ../menuselect.makeopts),)
+ include ../menuselect.makeopts
+endif
SELECTED_MODS:=$(filter-out $(MENUSELECT_CHANNELS),$(patsubst %.c,%,$(wildcard chan_*.c)))
@@ -66,7 +68,7 @@
MODS:=$(patsubst %,%.so,$(SELECTED_MODS))
-all: depend $(MODS)
+all: $(MODS)
clean-depend:
rm -f .depend
Modified: team/oej/test-this-branch/channels/chan_iax2.c
URL: http://svn.digium.com/view/asterisk/team/oej/test-this-branch/channels/chan_iax2.c?rev=34760&r1=34759&r2=34760&view=diff
==============================================================================
--- team/oej/test-this-branch/channels/chan_iax2.c (original)
+++ team/oej/test-this-branch/channels/chan_iax2.c Mon Jun 19 02:12:28 2006
@@ -8364,11 +8364,7 @@
peer->peercontext[0] = '\0';
while(v) {
if (!strcasecmp(v->name, "secret")) {
- if (!ast_strlen_zero(peer->secret)) {
- strncpy(peer->secret + strlen(peer->secret), ";", sizeof(peer->secret)-strlen(peer->secret) - 1);
- strncpy(peer->secret + strlen(peer->secret), v->value, sizeof(peer->secret)-strlen(peer->secret) - 1);
- } else
- ast_copy_string(peer->secret, v->value, sizeof(peer->secret));
+ ast_copy_string(peer->secret, v->value, sizeof(peer->secret));
} else if (!strcasecmp(v->name, "mailbox")) {
ast_copy_string(peer->mailbox, v->value, sizeof(peer->mailbox));
} else if (!strcasecmp(v->name, "dbsecret")) {
Modified: team/oej/test-this-branch/channels/chan_jingle.c
URL: http://svn.digium.com/view/asterisk/team/oej/test-this-branch/channels/chan_jingle.c?rev=34760&r1=34759&r2=34760&view=diff
==============================================================================
--- team/oej/test-this-branch/channels/chan_jingle.c (original)
+++ team/oej/test-this-branch/channels/chan_jingle.c Mon Jun 19 02:12:28 2006
@@ -479,13 +479,10 @@
struct jingle_pvt *tmp;
ast_log(LOG_DEBUG, "The client is %s\n", client->name);
- tmp = client->p;
/* Make sure our new call doesn't exist yet */
- while (tmp) {
- if (iks_find_with_attrib(pak->x, GOOGLE_NODE, GOOGLE_SID, tmp->sid)) {
+ for (tmp = client->p; tmp; tmp = tmp->next) {
+ if (iks_find_with_attrib(pak->x, GOOGLE_NODE, GOOGLE_SID, tmp->sid))
break;
- }
- tmp = tmp->next;
}
if (tmp) {
@@ -502,13 +499,10 @@
struct jingle_pvt *tmp;
ast_log(LOG_DEBUG, "The client is %s\n", client->name);
- tmp = client->p;
/* Make sure our new call doesn't exist yet */
- while (tmp) {
- if (iks_find_with_attrib(pak->x, GOOGLE_NODE, GOOGLE_SID, tmp->sid)) {
+ for (tmp = client->p; tmp; tmp = tmp->next) {
+ if (iks_find_with_attrib(pak->x, GOOGLE_NODE, GOOGLE_SID, tmp->sid))
break;
- }
- tmp = tmp->next;
}
if (tmp) {
@@ -536,21 +530,20 @@
iq = iks_new("iq");
jingle = iks_new(GOOGLE_NODE);
candidate = iks_new("candidate");
- ours1 = (struct jingle_candidate *) ast_calloc(1, sizeof(struct jingle_candidate));
- ours2 = (struct jingle_candidate *) ast_calloc(1, sizeof(struct jingle_candidate));
- if (!iq || !jingle || !candidate || !ours1 || !ours2) {
- ast_log(LOG_WARNING, "out of memory!\n");
+ if (!iq || !jingle || !candidate) {
+ ast_log(LOG_ERROR, "Memory allocation error\n");
goto safeout;
}
-
+ ours1 = ast_calloc(1, sizeof(*ours1));
+ ours2 = ast_calloc(1, sizeof(*ours2));
+ if (!ours1 || !ours2)
+ goto safeout;
iks_insert_node(iq, jingle);
iks_insert_node(jingle, candidate);
- while (p) {
- if (!strcasecmp(p->sid, sid)) {
+ for (; p; p = p->next) {
+ if (!strcasecmp(p->sid, sid))
break;
- }
- p = p->next;
}
if (!p) {
@@ -596,8 +589,7 @@
dest.sin_port = sin.sin_port;
- tmp = p->ourcandidates;
- while (tmp) { /*send standard candidates */
+ for (tmp = p->ourcandidates; tmp; tmp = tmp->next) {
snprintf(port, sizeof(port), "%d", tmp->port);
snprintf(preference, sizeof(preference), "%.2f", tmp->preference);
iks_insert_attrib(iq, "from", c->jid->full);
@@ -628,7 +620,6 @@
iks_insert_attrib(candidate, "network", "0");
iks_insert_attrib(candidate, "generation", "0");
iks_send(c->p, iq);
- tmp = tmp->next;
}
p->laststun = 0;
@@ -958,23 +949,18 @@
struct aji_client *c = client->connection;
struct jingle_candidate *newcandidate = NULL;
iks *traversenodes = NULL, *receipt = NULL;
- newcandidate =
- (struct jingle_candidate *) ast_calloc(1, sizeof(struct jingle_candidate));
+ newcandidate = ast_calloc(1, sizeof(*newcandidate));
if (!newcandidate)
return 0;
- memset(newcandidate, 0, sizeof(struct jingle_candidate));
- tmp = client->p;
- while (tmp) {
+ for (tmp = client->p; tmp; tmp = tmp->next) {
if (iks_find_with_attrib(pak->x, GOOGLE_NODE, GOOGLE_SID, tmp->sid)) {
p = tmp;
break;
}
- tmp = tmp->next;
- }
-
- if (!p) {
+ }
+
+ if (!p)
return -1;
- }
traversenodes = pak->query;
while(traversenodes) {
@@ -983,11 +969,9 @@
continue;
}
if(!strcasecmp(iks_name(traversenodes), "candidate")) {
- newcandidate =
- (struct jingle_candidate *) ast_calloc(1, sizeof(struct jingle_candidate));
+ newcandidate = ast_calloc(1, sizeof(*newcandidate));
if (!newcandidate)
return 0;
- memset(newcandidate, 0, sizeof(struct jingle_candidate));
ast_copy_string(newcandidate->name, iks_find_attrib(traversenodes, "name"),
sizeof(newcandidate->name));
ast_copy_string(newcandidate->ip, iks_find_attrib(traversenodes, "address"),
Modified: team/oej/test-this-branch/channels/chan_misdn.c
URL: http://svn.digium.com/view/asterisk/team/oej/test-this-branch/channels/chan_misdn.c?rev=34760&r1=34759&r2=34760&view=diff
==============================================================================
--- team/oej/test-this-branch/channels/chan_misdn.c (original)
+++ team/oej/test-this-branch/channels/chan_misdn.c Mon Jun 19 02:12:28 2006
@@ -88,8 +88,6 @@
ast_mutex_t mutexjb;
};
-void export_ies(struct ast_channel *chan, struct misdn_bchannel *bc);
-void import_ies(struct ast_channel *chan, struct misdn_bchannel *bc);
/* allocates the jb-structure and initialise the elements*/
@@ -112,16 +110,6 @@
/* BEGIN: chan_misdn.h */
-
-enum tone_e {
- TONE_NONE=0,
- TONE_DIAL,
- TONE_ALERTING,
- TONE_FAR_ALERTING,
- TONE_BUSY,
- TONE_CUSTOM,
- TONE_FILE
-};
enum misdn_chan_state {
@@ -185,6 +173,8 @@
struct ast_trans_pvt *trans;
struct ast_channel * ast;
+
+ int dummy;
struct misdn_bchannel *bc;
struct misdn_bchannel *holded_bc;
@@ -198,6 +188,8 @@
int dropped_frame_cnt;
int far_alerting;
+ int other_pid;
+ struct chan_list *other_ch;
const struct tone_zone_sound *ts;
@@ -206,6 +198,11 @@
struct chan_list *prev;
struct chan_list *first;
};
+
+
+
+void export_ch(struct ast_channel *chan, struct misdn_bchannel *bc, struct chan_list *ch);
+void import_ch(struct ast_channel *chan, struct misdn_bchannel *bc, struct chan_list *ch);
struct robin_list {
char *group;
@@ -306,6 +303,7 @@
static void cl_queue_chan(struct chan_list **list, struct chan_list *chan);
static void cl_dequeue_chan(struct chan_list **list, struct chan_list *chan);
static struct chan_list *find_chan_by_bc(struct chan_list *list, struct misdn_bchannel *bc);
+static struct chan_list *find_chan_by_pid(struct chan_list *list, int pid);
@@ -1638,7 +1636,7 @@
update_config(ch,ORG_AST);
/* fill in some ies from channel vary*/
- import_ies(ast, newbc);
+ import_ch(ast, newbc, ch);
/* Finally The Options Override Everything */
if (opts)
@@ -1854,7 +1852,12 @@
p->state=MISDN_ALERTING;
chan_misdn_log(1, p->bc->port, " --> * IND :\tringing pid:%d\n",p->bc?p->bc->pid:-1);
misdn_lib_send_event( p->bc, EVENT_ALERTING);
-
+
+ if (p->other_ch && p->other_ch->bc && misdn_inband_avail(p->other_ch->bc)) {
+ chan_misdn_log(1,p->bc->port, " --> other End is mISDN and has inband info available\n");
+ break;
+ }
+
if ( !p->bc->nt && (p->orginator==ORG_MISDN) && !p->incoming_early_audio )
chan_misdn_log(1,p->bc->port, " --> incoming_early_audio off\n");
else
@@ -1902,10 +1905,11 @@
case -1 :
chan_misdn_log(1, p->bc->port, " --> * IND :\t-1! (stop indication) pid:%d\n",p->bc?p->bc->pid:-1);
- if (p->state == MISDN_CONNECTED)
+ tone_indicate(p, TONE_NONE);
+
+ if (p->state == MISDN_CONNECTED)
start_bc_tones(p);
- else
- tone_indicate(p, TONE_NONE);
+
break;
case AST_CONTROL_HOLD:
@@ -1967,7 +1971,7 @@
return 0;
}
- stop_bc_tones(p);
+ /*stop_bc_tones(p);*/
release_unlock;
@@ -1994,10 +1998,13 @@
case MISDN_HOLDED:
case MISDN_DIALING:
start_bc_tones(p);
- tone_indicate(p, TONE_BUSY);
+ tone_indicate(p, TONE_HANGUP);
p->state=MISDN_CLEANING;
-
- misdn_lib_send_event( bc, EVENT_RELEASE_COMPLETE);
+
+ if (bc->nt)
+ misdn_lib_send_event( bc, EVENT_DISCONNECT);
+ else
+ misdn_lib_send_event( bc, EVENT_RELEASE_COMPLETE);
break;
@@ -2007,7 +2014,7 @@
chan_misdn_log(2, bc->port, " --> * State Alerting\n");
if (p->orginator != ORG_AST)
- tone_indicate(p, TONE_BUSY);
+ tone_indicate(p, TONE_HANGUP);
p->state=MISDN_CLEANING;
misdn_lib_send_event( bc, EVENT_DISCONNECT);
@@ -2016,7 +2023,7 @@
/* Alerting or Disconect */
chan_misdn_log(2, bc->port, " --> * State Connected\n");
start_bc_tones(p);
- tone_indicate(p, TONE_BUSY);
+ tone_indicate(p, TONE_HANGUP);
misdn_lib_send_event( bc, EVENT_DISCONNECT);
p->state=MISDN_CLEANING; /* MISDN_HUNGUP_FROM_AST; */
@@ -2112,7 +2119,7 @@
if (!ast) return NULL;
if (! (tmp=MISDN_ASTERISK_TECH_PVT(ast)) ) return NULL;
if (!tmp->bc) return NULL;
-
+
len=read(tmp->pipe[0],tmp->ast_rd_buf,sizeof(tmp->ast_rd_buf));
if (len<=0) {
@@ -2349,6 +2356,9 @@
chan_misdn_log(3,cl->bc->port,"Tone Indicate:\n");
if (!cl->ast) {
+ chan_misdn_log(-1,cl->bc->port,"Ast Ptr Not existing anymore.. we need to generate tones ourselves now (tbd)\n");
+
+ misdn_lib_send_tone(cl->bc,tone);
return 0;
}
@@ -2361,7 +2371,7 @@
case TONE_ALERTING:
chan_misdn_log(3,cl->bc->port," --> Ring\n");
ts=ast_get_indication_tone(ast->zone,"ring");
- misdn_lib_tone_generator_stop(cl->bc);
+ misdn_lib_tone_generator_start(cl->bc);
break;
case TONE_FAR_ALERTING:
/* VERY UGLY HACK, BECAUSE CHAN_SIP DOES NOT GENERATE TONES */
@@ -2373,7 +2383,7 @@
case TONE_BUSY:
chan_misdn_log(3,cl->bc->port," --> Busy\n");
ts=ast_get_indication_tone(ast->zone,"busy");
- misdn_lib_tone_generator_stop(cl->bc);
+ misdn_lib_tone_generator_start(cl->bc);
break;
case TONE_FILE:
break;
@@ -2460,7 +2470,7 @@
chan_misdn_log(2, 0, " --> Group Call group: %s\n",group);
}
else if ((p = strchr(port_str, ':'))) {
- // we have a preselected channel
+ /* we have a preselected channel */
*p = 0;
channel = atoi(++p);
port = atoi(port_str);
@@ -2748,6 +2758,17 @@
return NULL;
}
+static struct chan_list *find_chan_by_pid(struct chan_list *list, int pid)
+{
+ struct chan_list *help=list;
+ for (;help; help=help->next) {
+ if (help->bc->pid == pid) return help;
+ }
+
+ chan_misdn_log(6, 0, "$$$ find_chan: No channel found for pid:%d\n",pid);
+
+ return NULL;
+}
static struct chan_list *find_holded(struct chan_list *list, struct misdn_bchannel *bc)
{
@@ -2839,8 +2860,15 @@
release_unlock;
chan_misdn_log(1, bc->port, "release_chan: bc with l3id: %x\n",bc->l3_id);
-
- //releaseing jitterbuffer
+#if 0
+ if (ch->dummy) {
+ ast_hangup(ast);
+ ch->ast=NULL;
+ ast=NULL;
+ }
+#endif
+
+ /*releaseing jitterbuffer*/
if (ch->jb ) {
misdn_jb_destroy(ch->jb);
ch->jb=NULL;
@@ -3042,46 +3070,30 @@
}
}
-void import_ies(struct ast_channel *chan, struct misdn_bchannel *bc)
-{
- const char *tmp;
-
- tmp=pbx_builtin_getvar_helper(chan,"PRI_MODE");
- if (tmp) bc->mode=atoi(tmp);
-
- tmp=pbx_builtin_getvar_helper(chan,"PRI_URATE");
- if (tmp) bc->urate=atoi(tmp);
-
- tmp=pbx_builtin_getvar_helper(chan,"PRI_RATE");
- if (tmp) bc->rate=atoi(tmp);
-
- tmp=pbx_builtin_getvar_helper(chan,"PRI_USER1");
- if (tmp) bc->user1=atoi(tmp);
-
- tmp=pbx_builtin_getvar_helper(chan,"PRI_PROGRESS_INDICATOR");
- if (tmp) bc->progress_indicator=atoi(tmp);
-}
-
-void export_ies(struct ast_channel *chan, struct misdn_bchannel *bc)
+
+
+
+void import_ch(struct ast_channel *chan, struct misdn_bchannel *bc, struct chan_list *ch)
+{
+ char *tmp;
+ tmp=pbx_builtin_getvar_helper(chan,"MISDN_PID");
+ if (tmp) {
+ ch->other_pid=atoi(tmp);
+ chan_misdn_log(1,bc->port,"IMPORT_PID: importing pid:%s\n",tmp);
+ if (ch->other_pid >0) {
+ ch->other_ch=find_chan_by_pid(cl_te,ch->other_pid);
+ if (ch->other_ch) ch->other_ch->other_ch=ch;
+ }
+ }
+}
+
+void export_ch(struct ast_channel *chan, struct misdn_bchannel *bc, struct chan_list *ch)
{
char tmp[32];
-
- sprintf(tmp,"%d",bc->mode);
- pbx_builtin_setvar_helper(chan,"_PRI_MODE",tmp);
-
- sprintf(tmp,"%d",bc->urate);
- pbx_builtin_setvar_helper(chan,"_PRI_URATE",tmp);
-
- sprintf(tmp,"%d",bc->rate);
- pbx_builtin_setvar_helper(chan,"_PRI_RATE",tmp);
-
- sprintf(tmp,"%d",bc->user1);
- pbx_builtin_setvar_helper(chan,"_PRI_USER1",tmp);
-
- sprintf(tmp,"%d",bc->progress_indicator);
- pbx_builtin_setvar_helper(chan,"_PRI_PROGRESS_INDICATOR",tmp);
-}
-
+ chan_misdn_log(1,bc->port,"EXPORT_PID: pid:%d\n",bc->pid);
+ sprintf(tmp,"%d",bc->pid);
+ pbx_builtin_setvar_helper(chan,"_MISDN_PID",tmp);
+}
int add_in_calls(int port)
{
@@ -3145,9 +3157,12 @@
if (ch ) {
switch (event) {
+ case EVENT_DISCONNECT:
case EVENT_RELEASE:
case EVENT_RELEASE_COMPLETE:
case EVENT_CLEANUP:
+ case EVENT_TIMEOUT:
+ chan_misdn_log(3,bc->port,"ast_hangup already called, so we have no ast ptr anymore in event(%s)\n",manager_isdn_get_info(event));
break;
default:
if ( !ch->ast || !MISDN_ASTERISK_PVT(ch->ast) || !MISDN_ASTERISK_TECH_PVT(ch->ast)) {
@@ -3357,8 +3372,8 @@
read_config(ch, ORG_MISDN);
- export_ies(chan, bc);
-
+ export_ch(chan, bc, ch);
+
ch->ast->rings=1;
ast_setstate(ch->ast, AST_STATE_RINGING);
@@ -3483,10 +3498,18 @@
}
} else {
-
if (bc->sending_complete) {
+ ch->state=MISDN_EXTCANTMATCH;
bc->out_cause=1;
- misdn_lib_send_event(bc, EVENT_RELEASE);
+
+ if (bc->nt) {
+ chan_misdn_log(0,bc->port," --> sending_complete so we never match ..\n");
+ misdn_lib_send_event(bc, EVENT_RELEASE_COMPLETE);
+ } else {
+ chan_misdn_log(0,bc->port," --> sending_complete so we never match ..\n");
+ misdn_lib_send_event(bc, EVENT_RELEASE);
+ }
+
} else {
int ret= misdn_lib_send_event(bc, EVENT_SETUP_ACKNOWLEDGE );
@@ -3633,12 +3656,12 @@
}
break;
case EVENT_DISCONNECT:
+ /*we might not have an ch->ast ptr here anymore*/
{
-
struct chan_list *holded_ch=find_holded(cl_te, bc);
-
- send_cause2ast(ch->ast,bc);
+ if (ch->ast)
+ send_cause2ast(ch->ast,bc);
chan_misdn_log(3,bc->port," --> org:%d nt:%d, inbandavail:%d state:%d\n", ch->orginator, bc->nt, misdn_inband_avail(bc), ch->state);
@@ -3655,7 +3678,7 @@
}
/*Check for holded channel, to implement transfer*/
- if (holded_ch ) {
+ if (holded_ch && ch->ast ) {
if (ch->state == MISDN_CONNECTED ) {
misdn_transfer_bc(ch, holded_ch) ;
misdn_lib_send_event(bc,EVENT_RELEASE_COMPLETE);
@@ -3722,10 +3745,18 @@
chan_misdn_log(9,bc->port,"TONE_GEN: len:%d\n");
if (!ast->generator) break;
-
+
+
+
tmp = ast->generatordata;
ast->generatordata = NULL;
generate = ast->generator->generate;
+
+ if (tone_len <0 || tone_len > 512 ) {
+ ast_log(LOG_WARNING, "TONE_GEN: len was %d, set to 128\n",tone_len);
+ tone_len=128;
+ }
+
res = generate(ast, tmp, tone_len, tone_len);
ast->generatordata = tmp;
@@ -3788,18 +3819,26 @@
}
break;
case EVENT_TIMEOUT:
-
- misdn_lib_send_event(bc,EVENT_RELEASE_COMPLETE);
- break;
{
- switch (ch->state) {
+ switch (ch->state) {
+ case MISDN_WAITING4DIGS:
case MISDN_CALLING:
-
- chan_misdn_log(-1, bc?bc->port:0, "GOT TIMOUT AT CALING pid:%d\n", bc?bc->pid:-1);
- break;
case MISDN_DIALING:
case MISDN_PROGRESS:
- break;
+
+ if (bc->nt) {
+ bc->progress_indicator=8;
+ tone_indicate(ch, TONE_BUSY);
+ }
+
+ bc->out_cause=1;
+ misdn_lib_send_event(bc,EVENT_DISCONNECT);
+ break;
+
+ case MISDN_CLEANING:
+ chan_misdn_log(1,bc->port," --> in state cleaning .. so ingoring, the stack should clean it for us\n");
+ break;
+
default:
misdn_lib_send_event(bc,EVENT_RELEASE_COMPLETE);
}
@@ -3883,7 +3922,7 @@
if (bridged && MISDN_ASTERISK_TECH_PVT(bridged)) {
ch=MISDN_ASTERISK_TECH_PVT(bridged);
- //ch->state=MISDN_FACILITY_DEFLECTED;
+ /*ch->state=MISDN_FACILITY_DEFLECTED;*/
if (ch->bc) {
/* todo */
}
Modified: team/oej/test-this-branch/channels/chan_skinny.c
URL: http://svn.digium.com/view/asterisk/team/oej/test-this-branch/channels/chan_skinny.c?rev=34760&r1=34759&r2=34760&view=diff
==============================================================================
--- team/oej/test-this-branch/channels/chan_skinny.c (original)
+++ team/oej/test-this-branch/channels/chan_skinny.c Mon Jun 19 02:12:28 2006
@@ -4,6 +4,7 @@
* Copyright (C) 1999 - 2005, Digium, Inc.
*
* chan_skinny was developed by Jeremy McNamara & Florian Overkamp
+ * chan_skinny was heavily modified/fixed by North Antara
*
* See http://www.asterisk.org for more information about
* the Asterisk project. Please do not directly contact
@@ -20,7 +21,7 @@
*
* \brief Implementation of the Skinny protocol
*
- * \author Jeremy McNamara & Florian Overkamp
+ * \author Jeremy McNamara & Florian Overkamp & North Antara
* \ingroup channel_drivers
*/
@@ -69,6 +70,7 @@
#include "asterisk/utils.h"
#include "asterisk/dsp.h"
#include "asterisk/stringfields.h"
+#include "asterisk/astobj.h"
#include "asterisk/abstract_jb.h"
/*************************************
@@ -87,11 +89,6 @@
static int keep_alive = 120;
static char date_format[6] = "D-M-Y";
static char version_id[16] = "P002F202";
-
-/* these should be in an include file, but dunno what to include */
-typedef unsigned char UINT8;
-typedef unsigned short UINT16;
-typedef unsigned int UINT32;
#if __BYTE_ORDER == __LITTLE_ENDIAN
#define letohl(x) (x)
@@ -137,127 +134,164 @@
#define REGISTER_MESSAGE 0x0001
typedef struct register_message {
char name[16];
- int userId;
- int instance;
- char ip[4];
- int type;
- int maxStreams;
+ uint32_t userId;
+ uint32_t instance;
+ uint32_t ip;
+ uint32_t type;
+ uint32_t maxStreams;
} register_message;
#define IP_PORT_MESSAGE 0x0002
#define KEYPAD_BUTTON_MESSAGE 0x0003
typedef struct keypad_button_message {
- int button;
+ uint32_t button;
+ uint32_t lineInstance;
+ uint32_t callReference;
} keypad_button_message;
#define STIMULUS_MESSAGE 0x0005
typedef struct stimulus_message {
- int stimulus;
- int stimulusInstance;
+ uint32_t stimulus;
+ uint32_t stimulusInstance;
+ uint32_t unknown1;
} stimulus_message;
#define OFFHOOK_MESSAGE 0x0006
[... 9125 lines stripped ...]
More information about the asterisk-commits
mailing list