[asterisk-commits] branch oej/multiparking r16556 - in
/team/oej/multiparking: ./ apps/ channels...
asterisk-commits at lists.digium.com
asterisk-commits at lists.digium.com
Thu Mar 30 14:22:41 MST 2006
Author: oej
Date: Thu Mar 30 15:22:38 2006
New Revision: 16556
URL: http://svn.digium.com/view/asterisk?rev=16556&view=rev
Log:
Reset, resolve, go
Modified:
team/oej/multiparking/ (props changed)
team/oej/multiparking/Makefile
team/oej/multiparking/apps/app_milliwatt.c
team/oej/multiparking/apps/app_sms.c
team/oej/multiparking/asterisk.8
team/oej/multiparking/asterisk.c
team/oej/multiparking/asterisk.sgml
team/oej/multiparking/channel.c
team/oej/multiparking/channels/chan_sip.c
team/oej/multiparking/doc/asterisk-conf.txt
team/oej/multiparking/include/asterisk/channel.h
team/oej/multiparking/include/asterisk/indications.h
team/oej/multiparking/include/asterisk/lock.h
team/oej/multiparking/include/asterisk/options.h
team/oej/multiparking/indications.c
team/oej/multiparking/res/res_indications.c
team/oej/multiparking/res/res_musiconhold.c
team/oej/multiparking/res/snmp/agent.c
Propchange: team/oej/multiparking/
------------------------------------------------------------------------------
automerge = http://edvina.net/training/
Propchange: team/oej/multiparking/
------------------------------------------------------------------------------
Binary property 'branch-1.2-merged' - no diff available.
Propchange: team/oej/multiparking/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Thu Mar 30 15:22:38 2006
@@ -1,1 +1,1 @@
-/trunk:1-16445
+/trunk:1-16555
Modified: team/oej/multiparking/Makefile
URL: http://svn.digium.com/view/asterisk/team/oej/multiparking/Makefile?rev=16556&r1=16555&r2=16556&view=diff
==============================================================================
--- team/oej/multiparking/Makefile (original)
+++ team/oej/multiparking/Makefile Thu Mar 30 15:22:38 2006
@@ -788,6 +788,8 @@
echo ";astctlowner = root" ; \
echo ";astctlgroup = apache" ; \
echo ";astctl = asterisk.ctl" ; \
+ echo ";[options]" ; \
+ echo ";internal_timing = yes" ; \
) > $(DESTDIR)$(ASTCONFPATH) ; \
else \
echo "Skipping asterisk.conf creation"; \
Modified: team/oej/multiparking/apps/app_milliwatt.c
URL: http://svn.digium.com/view/asterisk/team/oej/multiparking/apps/app_milliwatt.c?rev=16556&r1=16555&r2=16556&view=diff
==============================================================================
--- team/oej/multiparking/apps/app_milliwatt.c (original)
+++ team/oej/multiparking/apps/app_milliwatt.c Thu Mar 30 15:22:38 2006
@@ -71,20 +71,27 @@
{
struct ast_frame wf;
unsigned char buf[AST_FRIENDLY_OFFSET + 640];
- int i,*indexp = (int *) data;
+ const int maxsamples = sizeof (buf) / sizeof (buf[0]);
+ int i, *indexp = (int *) data;
- if (len + AST_FRIENDLY_OFFSET > sizeof(buf))
- {
- ast_log(LOG_WARNING,"Only doing %d bytes (%d bytes requested)\n",(int)(sizeof(buf) - AST_FRIENDLY_OFFSET),len);
- len = sizeof(buf) - AST_FRIENDLY_OFFSET;
+ /* Instead of len, use samples, because channel.c generator_force
+ * generate(chan, tmp, 0, 160) ignores len. In any case, len is
+ * a multiple of samples, given by number of samples times bytes per
+ * sample. In the case of ulaw, len = samples. for signed linear
+ * len = 2 * samples */
+
+ if (samples > maxsamples) {
+ ast_log(LOG_WARNING, "Only doing %d samples (%d requested)\n", maxsamples, samples);
+ samples = maxsamples;
}
+ len = samples * sizeof (buf[0]);
wf.frametype = AST_FRAME_VOICE;
wf.subclass = AST_FORMAT_ULAW;
wf.offset = AST_FRIENDLY_OFFSET;
wf.mallocd = 0;
wf.data = buf + AST_FRIENDLY_OFFSET;
wf.datalen = len;
- wf.samples = wf.datalen;
+ wf.samples = samples;
wf.src = "app_milliwatt";
wf.delivery.tv_sec = 0;
wf.delivery.tv_usec = 0;
Modified: team/oej/multiparking/apps/app_sms.c
URL: http://svn.digium.com/view/asterisk/team/oej/multiparking/apps/app_sms.c?rev=16556&r1=16555&r2=16556&view=diff
==============================================================================
--- team/oej/multiparking/apps/app_sms.c (original)
+++ team/oej/multiparking/apps/app_sms.c Thu Mar 30 15:22:38 2006
@@ -1177,32 +1177,31 @@
{
struct ast_frame f = { 0 };
unsigned char waste[AST_FRIENDLY_OFFSET];
+#define MAXSAMPLES (800)
#ifdef OUTALAW
- unsigned char buf[800];
+ unsigned char buf[MAXSAMPLES];
#else
- signed short buf[800];
+ signed short buf[MAXSAMPLES];
#endif
+#define SAMPLE2LEN (sizeof (buf[0]))
sms_t *h = data;
int i;
- if (len > sizeof (buf)) {
- ast_log (LOG_WARNING, "Only doing %d bytes (%d bytes requested)\n", (int)(sizeof (buf) / sizeof (signed short)), len);
- len = sizeof (buf);
-#ifdef OUTALAW
- samples = len;
-#else
- samples = len / 2;
-#endif
- }
- waste[0] = 0; /* make compiler happy */
+ if (samples > MAXSAMPLES) {
+ ast_log (LOG_WARNING, "Only doing %d samples (%d requested)\n",
+ MAXSAMPLES, samples);
+ samples = MAXSAMPLES;
+ }
+ len = samples * SAMPLE2LEN;
+
+ waste[0] = 0; /* make compiler happy */
f.frametype = AST_FRAME_VOICE;
#ifdef OUTALAW
f.subclass = AST_FORMAT_ALAW;
- f.datalen = samples;
#else
f.subclass = AST_FORMAT_SLINEAR;
- f.datalen = samples * 2;
#endif
+ f.datalen = len;
f.offset = AST_FRIENDLY_OFFSET;
f.mallocd = 0;
f.data = buf;
@@ -1254,6 +1253,8 @@
return -1;
}
return 0;
+#undef SAMPLE2LEN
+#undef MAXSAMPLES
}
static void sms_process (sms_t * h, int samples, signed short *data)
Modified: team/oej/multiparking/asterisk.8
URL: http://svn.digium.com/view/asterisk/team/oej/multiparking/asterisk.8?rev=16556&r1=16555&r2=16556&view=diff
==============================================================================
--- team/oej/multiparking/asterisk.8 (original)
+++ team/oej/multiparking/asterisk.8 Thu Mar 30 15:22:38 2006
@@ -9,7 +9,7 @@
asterisk \- All-purpose telephony server.
.SH SYNOPSIS
-\fBasterisk\fR [ \fB-tThfdvVqpRgcin\fR ] [ \fB-C \fIfile\fB\fR ] [ \fB-U \fIuser\fB\fR ] [ \fB-G \fIgroup\fB\fR ] [ \fB-x \fIcommand\fB\fR ] [ \fB-M \fIvalue\fB\fR ]
+\fBasterisk\fR [ \fB-tThfdvVqpRgciIn\fR ] [ \fB-C \fIfile\fB\fR ] [ \fB-U \fIuser\fB\fR ] [ \fB-G \fIgroup\fB\fR ] [ \fB-x \fIcommand\fB\fR ] [ \fB-M \fIvalue\fB\fR ]
\fBasterisk -r\fR [ \fB-v\fR ] [ \fB-x \fIcommand\fB\fR ]
@@ -114,6 +114,12 @@
for controlling it. Additionally, if connection to the Asterisk
process is lost, attempt to reconnect for as long as 30 seconds.
.TP
+\fB-I\fR
+Enable internal timing if Zaptel timer is available
+The default behaviour is that outbound packets are phase locked
+to inbound packets. Enabling this switch causes them to be
+locked to the internal Zaptel timer instead.
+.TP
\fB-t\fR
When recording files, write them first into a temporary holding directory,
then move them into the final location when done.
Modified: team/oej/multiparking/asterisk.c
URL: http://svn.digium.com/view/asterisk/team/oej/multiparking/asterisk.c?rev=16556&r1=16555&r2=16556&view=diff
==============================================================================
--- team/oej/multiparking/asterisk.c (original)
+++ team/oej/multiparking/asterisk.c Thu Mar 30 15:22:38 2006
@@ -1970,6 +1970,9 @@
/* Transmit SLINEAR silence while a channel is being recorded */
} else if (!strcasecmp(v->name, "transmit_silence_during_record")) {
ast_set2_flag(&ast_options, ast_true(v->value), AST_OPT_FLAG_TRANSMIT_SILENCE);
+ /* Enable internal timing */
+ } else if (!strcasecmp(v->name, "internal_timing")) {
+ ast_set2_flag(&ast_options, ast_true(v->value), AST_OPT_FLAG_INTERNAL_TIMING);
} else if (!strcasecmp(v->name, "maxcalls")) {
if ((sscanf(v->value, "%d", &option_maxcalls) != 1) || (option_maxcalls < 0)) {
option_maxcalls = 0;
@@ -2049,7 +2052,7 @@
}
*/
/* Check for options */
- while((c=getopt(argc, argv, "tThfdvVqprRgcinx:U:G:C:L:M:")) != -1) {
+ while((c=getopt(argc, argv, "tThfdvVqprRgciInx:U:G:C:L:M:")) != -1) {
switch(c) {
case 'd':
option_debug++;
@@ -2088,6 +2091,7 @@
case 'q':
ast_set_flag(&ast_options, AST_OPT_FLAG_QUIET);
break;
+ break;
case 't':
ast_set_flag(&ast_options, AST_OPT_FLAG_CACHE_RECORD_FILES);
break;
@@ -2101,6 +2105,9 @@
case 'C':
ast_copy_string(ast_config_AST_CONFIG_FILE, optarg, sizeof(ast_config_AST_CONFIG_FILE));
ast_set_flag(&ast_options, AST_OPT_FLAG_OVERRIDE_CONFIG);
+ break;
+ case 'I':
+ ast_set_flag(&ast_options, AST_OPT_FLAG_INTERNAL_TIMING);
break;
case 'i':
ast_set_flag(&ast_options, AST_OPT_FLAG_INIT_KEYS);
Modified: team/oej/multiparking/asterisk.sgml
URL: http://svn.digium.com/view/asterisk/team/oej/multiparking/asterisk.sgml?rev=16556&r1=16555&r2=16556&view=diff
==============================================================================
--- team/oej/multiparking/asterisk.sgml (original)
+++ team/oej/multiparking/asterisk.sgml Thu Mar 30 15:22:38 2006
@@ -21,7 +21,7 @@
<refsynopsisdiv>
<cmdsynopsis>
<command>asterisk</command>
-<arg><option>-tThfdvVqpRgcin</option></arg>
+<arg><option>-tThfdvVqpRgciIn</option></arg>
<arg><option>-C </option><replaceable class="parameter">file</replaceable></arg>
<arg><option>-U </option><replaceable class="parameter">user</replaceable></arg>
<arg><option>-G </option><replaceable class="parameter">group</replaceable></arg>
@@ -38,7 +38,7 @@
</refsynopsisdiv>
<refsect1>
<refsect1info>
- <date>2004-07-01</date>
+ <date>2006-03-29</date>
</refsect1info>
<title>DESCRIPTION</title>
<para>
@@ -154,6 +154,17 @@
</listitem>
</varlistentry>
<varlistentry>
+ <term>-I</term>
+ <listitem>
+ <para>
+ Enable internal timing if Zaptel timing is available.
+ The default behaviour is that outbound packets are phase locked
+ to inbound packets. Enabling this switch causes them to be
+ locked to the internal Zaptel timer instead.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
<term>-L <replaceable class="parameter">loadaverage</replaceable></term>
<listitem>
<para>
Modified: team/oej/multiparking/channel.c
URL: http://svn.digium.com/view/asterisk/team/oej/multiparking/channel.c?rev=16556&r1=16555&r2=16556&view=diff
==============================================================================
--- team/oej/multiparking/channel.c (original)
+++ team/oej/multiparking/channel.c Thu Mar 30 15:22:38 2006
@@ -1976,30 +1976,34 @@
f = &ast_null_frame;
}
- /* Run any generator sitting on the channel */
- if (chan->generatordata) {
- /* Mask generator data temporarily and apply. If there is a timing function, it
- will be calling the generator instead */
+ /* Run generator sitting on the line if timing device not available
+ * and synchronous generation of outgoing frames is necessary */
+ if (chan->generatordata && !ast_internal_timing_enabled(chan)) {
void *tmp;
int res;
int (*generate)(struct ast_channel *chan, void *tmp, int datalen, int samples);
-
+
if (chan->timingfunc) {
- ast_log(LOG_DEBUG, "Generator got voice, switching to phase locked mode\n");
+ if (option_debug > 1)
+ ast_log(LOG_DEBUG, "Generator got voice, switching to phase locked mode\n");
ast_settimeout(chan, 0, NULL, NULL);
}
+
tmp = chan->generatordata;
chan->generatordata = NULL;
generate = chan->generator->generate;
res = generate(chan, tmp, f->datalen, f->samples);
chan->generatordata = tmp;
if (res) {
- ast_log(LOG_DEBUG, "Auto-deactivating generator\n");
+ if (option_debug > 1)
+ ast_log(LOG_DEBUG, "Auto-deactivating generator\n");
ast_deactivate_generator(chan);
}
+
} else if (f->frametype == AST_FRAME_CNG) {
if (chan->generator && !chan->timingfunc && (chan->timingfd > -1)) {
- ast_log(LOG_DEBUG, "Generator got CNG, switching to timed mode\n");
+ if (option_debug > 1)
+ ast_log(LOG_DEBUG, "Generator got CNG, switching to timed mode\n");
ast_settimeout(chan, 160, generator_force, chan);
}
}
@@ -2025,6 +2029,14 @@
ast_mutex_unlock(&chan->lock);
return f;
+}
+
+int ast_internal_timing_enabled(struct ast_channel *chan)
+{
+ int ret = ast_opt_internal_timing && chan->timingfd > -1;
+ if (option_debug > 3)
+ ast_log(LOG_DEBUG, "Internal timing is %s (option_internal_timing=%d chan->timingfd=%d)\n", ret? "enabled": "disabled", ast_opt_internal_timing, chan->timingfd);
+ return ret;
}
struct ast_frame *ast_read(struct ast_channel *chan)
Modified: team/oej/multiparking/channels/chan_sip.c
URL: http://svn.digium.com/view/asterisk/team/oej/multiparking/channels/chan_sip.c?rev=16556&r1=16555&r2=16556&view=diff
==============================================================================
--- team/oej/multiparking/channels/chan_sip.c (original)
+++ team/oej/multiparking/channels/chan_sip.c Thu Mar 30 15:22:38 2006
@@ -4708,7 +4708,8 @@
debug);
}
- ast_build_string(&a_audio_next, &a_audio_left, "a=silenceSupp:off - - - -\r\n");
+ if(!ast_internal_timing_enabled(p->owner))
+ ast_build_string(&a_audio_next, &a_audio_left, "a=silenceSupp:off - - - -\r\n");
if ((m_audio_left < 2) || (m_video_left < 2) || (a_audio_left == 0) || (a_video_left == 0))
ast_log(LOG_WARNING, "SIP SDP may be truncated due to undersized buffer!!\n");
@@ -11972,6 +11973,8 @@
static int handle_common_options(struct ast_flags *flags, struct ast_flags *mask, struct ast_variable *v)
{
int res = 0;
+ static int dep_insecure_very = 0;
+ static int dep_insecure_yes = 0;
if (!strcasecmp(v->name, "trustrpid")) {
ast_set_flag(&mask[0], SIP_TRUSTRPID);
@@ -12021,10 +12024,20 @@
} else if (!strcasecmp(v->name, "insecure")) {
ast_set_flag(&mask[0], SIP_INSECURE_PORT | SIP_INSECURE_INVITE);
ast_clear_flag(&flags[0], SIP_INSECURE_PORT | SIP_INSECURE_INVITE);
- if (!strcasecmp(v->value, "very"))
+ if (!strcasecmp(v->value, "very")) {
ast_set_flag(&flags[0], SIP_INSECURE_PORT | SIP_INSECURE_INVITE);
- else if (ast_true(v->value))
+ if (!dep_insecure_very) {
+ ast_log(LOG_WARNING, "insecure=very at line %d is deprecated; use insecure=port,invite instead\n", v->lineno);
+ dep_insecure_very = 1;
+ }
+ }
+ else if (ast_true(v->value)) {
ast_set_flag(&flags[0], SIP_INSECURE_PORT);
+ if (!dep_insecure_yes) {
+ ast_log(LOG_WARNING, "insecure=%s at line %d is deprecated; use insecure=port instead\n", v->value, v->lineno);
+ dep_insecure_yes = 1;
+ }
+ }
else if (!ast_false(v->value)) {
char buf[64];
char *word, *next;
Modified: team/oej/multiparking/doc/asterisk-conf.txt
URL: http://svn.digium.com/view/asterisk/team/oej/multiparking/doc/asterisk-conf.txt?rev=16556&r1=16555&r2=16556&view=diff
==============================================================================
--- team/oej/multiparking/doc/asterisk-conf.txt (original)
+++ team/oej/multiparking/doc/asterisk-conf.txt Thu Mar 30 15:22:38 2006
@@ -52,6 +52,7 @@
runuser = asterisk ; User to run asterisk as (-U) NOTE: will require changes to
; directory and device permisions
rungroup = asterisk ; Group to run asterisk as (-G)
+internal_timing = yes | no ; Enable internal timing support (-I)
;These options have no command line equivalent
cache_record_files = yes | no ; Cache record() files in another directory until completion
Modified: team/oej/multiparking/include/asterisk/channel.h
URL: http://svn.digium.com/view/asterisk/team/oej/multiparking/include/asterisk/channel.h?rev=16556&r1=16555&r2=16556&view=diff
==============================================================================
--- team/oej/multiparking/include/asterisk/channel.h (original)
+++ team/oej/multiparking/include/asterisk/channel.h Thu Mar 30 15:22:38 2006
@@ -1126,6 +1126,16 @@
*/
void ast_channel_stop_silence_generator(struct ast_channel *chan, struct ast_silence_generator *state);
+/*!
+ \brief Check if the channel can run in internal timing mode.
+ \param chan The channel to check
+ \return boolean
+
+ This function will return 1 if internal timing is enabled and the timing
+ device is available.
+ */
+int ast_internal_timing_enabled(struct ast_channel *chan);
+
/* Misc. functions below */
/* if fd is a valid descriptor, set *pfd with the descriptor
Modified: team/oej/multiparking/include/asterisk/indications.h
URL: http://svn.digium.com/view/asterisk/team/oej/multiparking/include/asterisk/indications.h?rev=16556&r1=16555&r2=16556&view=diff
==============================================================================
--- team/oej/multiparking/include/asterisk/indications.h (original)
+++ team/oej/multiparking/include/asterisk/indications.h Thu Mar 30 15:22:38 2006
@@ -59,29 +59,34 @@
};
/* set the default tone country */
-extern int ast_set_indication_country(const char *country);
+int ast_set_indication_country(const char *country);
/* locate tone_zone, given the country. if country == NULL, use the default country */
-extern struct tone_zone *ast_get_indication_zone(const char *country);
+struct tone_zone *ast_get_indication_zone(const char *country);
/* locate a tone_zone_sound, given the tone_zone. if tone_zone == NULL, use the default tone_zone */
-extern struct tone_zone_sound *ast_get_indication_tone(const struct tone_zone *zone, const char *indication);
+struct tone_zone_sound *ast_get_indication_tone(const struct tone_zone *zone, const char *indication);
/* add a new country, if country exists, it will be replaced. */
-extern int ast_register_indication_country(struct tone_zone *country);
+int ast_register_indication_country(struct tone_zone *country);
/* remove an existing country and all its indications, country must exist */
-extern int ast_unregister_indication_country(const char *country);
+int ast_unregister_indication_country(const char *country);
/* add a new indication to a tone_zone. tone_zone must exist. if the indication already
* exists, it will be replaced. */
-extern int ast_register_indication(struct tone_zone *zone, const char *indication, const char *tonelist);
+int ast_register_indication(struct tone_zone *zone, const char *indication, const char *tonelist);
/* remove an existing tone_zone's indication. tone_zone must exist */
-extern int ast_unregister_indication(struct tone_zone *zone, const char *indication);
+int ast_unregister_indication(struct tone_zone *zone, const char *indication);
/* Start a tone-list going */
int ast_playtones_start(struct ast_channel *chan, int vol, const char* tonelist, int interruptible);
/*! Stop the tones from playing */
void ast_playtones_stop(struct ast_channel *chan);
+/* support for walking through a list of indications */
+struct tone_zone *ast_walk_indications(const struct tone_zone *cur);
+
+#if 0
extern struct tone_zone *tone_zones;
extern ast_mutex_t tzlock;
+#endif
#endif /* _ASTERISK_INDICATIONS_H */
Modified: team/oej/multiparking/include/asterisk/lock.h
URL: http://svn.digium.com/view/asterisk/team/oej/multiparking/include/asterisk/lock.h?rev=16556&r1=16555&r2=16556&view=diff
==============================================================================
--- team/oej/multiparking/include/asterisk/lock.h (original)
+++ team/oej/multiparking/include/asterisk/lock.h Thu Mar 30 15:22:38 2006
@@ -18,6 +18,37 @@
/*! \file
* \brief General Asterisk channel locking definitions.
+ *
+ * - See \ref LockDef
+ */
+/* \page LockDef Asterisk thread locking models
+ *
+ * This file provides several different implementation of the functions,
+ * depending on the platform, the use of DEBUG_THREADS, and the way
+ * global mutexes are initialized.
+ * At the moment, we have 3 ways to initialize global mutexes, depending on
+ *
+ * - \b static: the mutex is assigned the value AST_MUTEX_INIT_VALUE
+ * this is done at compile time, and is the way used on Linux.
+ * This method is not applicable to all platforms e.g. when the
+ * initialization needs that some code is run.
+ *
+ * - \b on first use: the mutex is assigned a magic value at compile time,
+ * and ast_mutex_init() is called when this magic value is detected.
+ * This technique is generally applicable, though it has a bit of
+ * overhead on each access to check whether initialization is needed.
+ * On the other hand, the overall cost of a mutex_lock operation
+ * is such that this overhead is often negligible.
+
+ * - \b through constructors: for each mutex, a constructor function is
+ * defined, which then runs when the program (or the module)
+ * starts. The problem with this approach is that there is a
+ * lot of code duplication (a new block of code is created for
+ * each mutex). Also, it does not prevent a user from declaring
+ * a global mutex without going through the wrapper macros,
+ * so sane programming practices are still required.
+ *
+ * Eventually we should converge on a single method for all platforms.
*/
#ifndef _ASTERISK_LOCK_H
@@ -640,7 +671,6 @@
#define pthread_cond_timedwait use_ast_cond_timedwait_instead_of_pthread_cond_timedwait
#define AST_MUTEX_DEFINE_STATIC(mutex) __AST_MUTEX_DEFINE(static,mutex)
-#define AST_MUTEX_DEFINE_EXPORTED(mutex) __AST_MUTEX_DEFINE(/**/,mutex)
#define AST_MUTEX_INITIALIZER __use_AST_MUTEX_DEFINE_STATIC_rather_than_AST_MUTEX_INITIALIZER__
Modified: team/oej/multiparking/include/asterisk/options.h
URL: http://svn.digium.com/view/asterisk/team/oej/multiparking/include/asterisk/options.h?rev=16556&r1=16555&r2=16556&view=diff
==============================================================================
--- team/oej/multiparking/include/asterisk/options.h (original)
+++ team/oej/multiparking/include/asterisk/options.h Thu Mar 30 15:22:38 2006
@@ -71,7 +71,9 @@
/*! Suppress some warnings */
AST_OPT_FLAG_DONT_WARN = (1 << 18),
/*! End CDRs before the 'h' extension */
- AST_OPT_END_CDR_BEFORE_H_EXTEN = (1 << 19)
+ AST_OPT_END_CDR_BEFORE_H_EXTEN = (1 << 19),
+ /*! Use Zaptel Timing for generators if available */
+ AST_OPT_FLAG_INTERNAL_TIMING = (1 << 20)
};
/*! These are the options that set by default when Asterisk starts */
@@ -97,14 +99,14 @@
#define ast_opt_transmit_silence ast_test_flag(&ast_options, AST_OPT_FLAG_TRANSMIT_SILENCE)
#define ast_opt_dont_warn ast_test_flag(&ast_options, AST_OPT_FLAG_DONT_WARN)
#define ast_opt_end_cdr_before_h_exten ast_test_flag(&ast_options, AST_OPT_END_CDR_BEFORE_H_EXTEN)
+#define ast_opt_internal_timing ast_test_flag(&ast_options, AST_OPT_FLAG_INTERNAL_TIMING)
extern struct ast_flags ast_options;
extern int option_verbose;
-extern int option_debug;
-extern int option_maxcalls;
+extern int option_debug; /*!< Debugging */
+extern int option_maxcalls; /*!< Maximum number of simultaneous channels */
extern double option_maxload;
-
extern char defaultlanguage[];
extern time_t ast_startuptime;
Modified: team/oej/multiparking/indications.c
URL: http://svn.digium.com/view/asterisk/team/oej/multiparking/indications.c?rev=16556&r1=16555&r2=16556&view=diff
==============================================================================
--- team/oej/multiparking/indications.c (original)
+++ team/oej/multiparking/indications.c Thu Mar 30 15:22:38 2006
@@ -330,22 +330,28 @@
/*--------------------------------------------*/
-struct tone_zone *tone_zones;
+static struct tone_zone *tone_zones;
static struct tone_zone *current_tonezone;
/* Protect the tone_zones list (highly unlikely that two things would change
* it at the same time, but still! */
-AST_MUTEX_DEFINE_EXPORTED(tzlock);
-/* XXX note - this is the only instance of AST_MUTEX_DEFINE_EXPORTED()
- * in the entire asterisk code base, and should be replaced by a static one.
- * The mutex is declared exported because it is accessed
- * by other files, namely res/snmp/agent.c and res/res_indications.c.
- * However there are also unprotected accesses to the list, because
- * some of the functions below export pointers to the elements, so
- * the entire mechanism is useless.
- * This needs to be fixed by providing functions to navigate in the
- * list, and refcounts to prevent entries from being destroyed.
- */
+AST_MUTEX_DEFINE_STATIC(tzlock);
+
+struct tone_zone *ast_walk_indications(const struct tone_zone *cur)
+{
+ struct tone_zone *tz;
+
+ if (cur == NULL)
+ return tone_zones;
+ ast_mutex_lock(&tzlock);
+ for (tz = tone_zones; tz; tz = tz->next)
+ if (tz == cur)
+ break;
+ if (tz)
+ tz = tz->next;
+ ast_mutex_unlock(&tzlock);
+ return tz;
+}
/* Set global indication country */
int ast_set_indication_country(const char *country)
Modified: team/oej/multiparking/res/res_indications.c
URL: http://svn.digium.com/view/asterisk/team/oej/multiparking/res/res_indications.c?rev=16556&r1=16555&r2=16556&view=diff
==============================================================================
--- team/oej/multiparking/res/res_indications.c (original)
+++ team/oej/multiparking/res/res_indications.c Thu Mar 30 15:22:38 2006
@@ -149,26 +149,20 @@
*/
static int handle_show_indications(int fd, int argc, char *argv[])
{
- struct tone_zone *tz;
+ struct tone_zone *tz = NULL;
char buf[256];
int found_country = 0;
- if (ast_mutex_lock(&tzlock)) {
- ast_log(LOG_WARNING, "Unable to lock tone_zones list\n");
- return 0;
- }
if (argc == 2) {
/* no arguments, show a list of countries */
ast_cli(fd,"Country Alias Description\n"
"===========================\n");
- for (tz=tone_zones; tz; tz=tz->next) {
+ while ( (tz = ast_walk_indications(tz) ) )
ast_cli(fd,"%-7.7s %-7.7s %s\n", tz->country, tz->alias, tz->description);
- }
- ast_mutex_unlock(&tzlock);
return 0;
}
/* there was a request for specific country(ies), lets humor them */
- for (tz=tone_zones; tz; tz=tz->next) {
+ while ( (tz = ast_walk_indications(tz) ) ) {
int i,j;
for (i=2; i<argc; i++) {
if (strcasecmp(tz->country,argv[i])==0 &&
@@ -183,7 +177,8 @@
for (i=0; i<tz->nrringcadence; i++) {
j += snprintf(buf+j,sizeof(buf)-j,"%d,",tz->ringcadence[i]);
}
- if (tz->nrringcadence) j--;
+ if (tz->nrringcadence)
+ j--;
ast_copy_string(buf+j,"\n",sizeof(buf)-j);
ast_cli(fd,buf);
for (ts=tz->tones; ts; ts=ts->next)
@@ -194,7 +189,6 @@
}
if (!found_country)
ast_cli(fd,"No countries matched your criteria.\n");
- ast_mutex_unlock(&tzlock);
return -1;
}
Modified: team/oej/multiparking/res/res_musiconhold.c
URL: http://svn.digium.com/view/asterisk/team/oej/multiparking/res/res_musiconhold.c?rev=16556&r1=16555&r2=16556&view=diff
==============================================================================
--- team/oej/multiparking/res/res_musiconhold.c (original)
+++ team/oej/multiparking/res/res_musiconhold.c Thu Mar 30 15:22:38 2006
@@ -776,6 +776,11 @@
if (i == class->total_files)
strcpy(class->filearray[class->total_files++], filepath);
+
+ /* If the new total files is equal to the maximum allowed, stop adding new ones */
+ if (class->total_files == MAX_MOHFILES)
+ break;
+
}
closedir(files_DIR);
Modified: team/oej/multiparking/res/snmp/agent.c
URL: http://svn.digium.com/view/asterisk/team/oej/multiparking/res/snmp/agent.c?rev=16556&r1=16555&r2=16556&view=diff
==============================================================================
--- team/oej/multiparking/res/snmp/agent.c (original)
+++ team/oej/multiparking/res/snmp/agent.c Thu Mar 30 15:22:38 2006
@@ -631,22 +631,16 @@
int exact, size_t *var_len, WriteMethod **write_method)
{
static unsigned long long_ret;
- struct tone_zone *tz;
+ struct tone_zone *tz = NULL;
if (header_generic(vp, name, length, exact, var_len, write_method))
return NULL;
switch (vp->magic) {
case ASTINDCOUNT:
- if (ast_mutex_lock(&tzlock)) {
- ast_log(LOG_WARNING, "Unable to lock tone_zones list\n");
- snmp_log(LOG_ERR, "Unable to lock tone_zones list in ast_var_indications\n");
- return NULL;
- }
long_ret = 0;
- for (tz = tone_zones; tz; tz = tz->next)
+ while ( (tz = ast_walk_indications(tz)) )
long_ret++;
- ast_mutex_unlock(&tzlock);
return (u_char *)&long_ret;
case ASTINDCURRENT:
@@ -667,21 +661,15 @@
int exact, size_t *var_len, WriteMethod **write_method)
{
static unsigned long long_ret;
- struct tone_zone *tz;
+ struct tone_zone *tz = NULL;
int i;
if (header_simple_table(vp, name, length, exact, var_len, write_method, -1))
return NULL;
- if (ast_mutex_lock(&tzlock)) {
- ast_log(LOG_WARNING, "Unable to lock tone_zones list\n");
- snmp_log(LOG_ERR, "Unable to lock tone_zones list in ast_var_indications_table\n");
- return NULL;
- }
i = name[*length - 1] - 1;
- for (tz = tone_zones; tz && i; tz = tz->next)
- i--;
- ast_mutex_unlock(&tzlock);
+ while ( (tz = ast_walk_indications(tz)) && i )
+ i--;
if (tz == NULL)
return NULL;
More information about the asterisk-commits
mailing list