Compare commits

...

12 Commits

Author SHA1 Message Date
Kevin P. Fleming
f7d5acbeea Convert all release tags to Opsound music-on-hold.
For more details:
http://blogs.digium.com/2009/08/18/asterisk-music-on-hold-changes/



git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/1.2.2-netsec@212958 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-08-18 20:42:51 +00:00
Kevin P. Fleming
914ac7c596 add README note about netsec support
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/1.2.2-netsec@8215 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-18 23:07:24 +00:00
Kevin P. Fleming
c6b845fe98 importing ChangeLog, .version, and .lastclean for 1.2.2-netsec release
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/1.2.2-netsec@8208 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-18 22:55:33 +00:00
Kevin P. Fleming
7c29d1c571 Creating tag for the release of asterisk-1.2.2-netsec
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/1.2.2-netsec@8207 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-18 22:55:16 +00:00
Automerge script
1cc6f6d3bb automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@8202 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-18 22:00:37 +00:00
Automerge script
ca0a371996 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@8176 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-18 03:00:42 +00:00
Automerge script
b0fd9f9b74 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@8172 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-18 02:00:34 +00:00
Kevin P. Fleming
396f6561a4 set up for automerge
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@8159 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-17 23:58:15 +00:00
Kevin P. Fleming
f16619507a updating to current 1.2
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@8046 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-13 03:52:45 +00:00
Kevin P. Fleming
69ac155838 initial import of Asterisk SIP support for network security devices
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@7927 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-10 03:10:34 +00:00
Kevin P. Fleming
a6bae85952 prepare for merging changes from main 1.2 branch
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@7926 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-10 03:05:18 +00:00
Kevin P. Fleming
494b9c486e create branch to hold network security device code
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@7925 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-10 03:03:29 +00:00
36 changed files with 1093 additions and 73 deletions

1
.lastclean Normal file
View File

@@ -0,0 +1 @@
8

1
.version Normal file
View File

@@ -0,0 +1 @@
1.2.2-netsec

View File

@@ -85,7 +85,7 @@ Leif Madsen, Jared Smith and Jim van Meggelen - the Asterisk book
available under a Creative Commons License at http://www.asteriskdocs.org
=== HOLD MUSIC ===
Music provided by www.freeplaymusic.com
Music provided by www.opsound.org
=== OTHER SOURCE CODE IN ASTERISK ===

705
ChangeLog
View File

@@ -1,3 +1,708 @@
2006-01-18 Kevin P. Fleming <kpfleming@digium.com>
* Asterisk 1.2.2-netsec Released with Ranch Networks network security
device support
2006-01-18 00:47 +0000 [r8162] Matt O'Gorman <mogorman@digium.com>
* loader.c: Changed order of autoload so that pbx_ comes before
channels, and in doing so cause bug 6002 to not be an issue
2006-01-17 20:10 +0000 [r8140] Matt O'Gorman <mogorman@digium.com>
* apps/app_festival.c: Stop any generators running on a channel
when festival is called as described in 5996
2006-01-17 18:29 +0000 [r8134] Matt Frederickson <creslin@digium.com>
* res/res_features.c: Backport of fix for #6094
2006-01-17 16:55 +0000 [r8124] Matt O'Gorman <mogorman@digium.com>
* logger.c: Fixed code ordering of logger_init and queue_log_init
bug 6263
2006-01-17 13:11 +0000 [r8122] Kevin P. Fleming <kpfleming@digium.com>
* asterisk.c: update CLI copyright notice
2006-01-16 23:51 +0000 [r8112] Kevin P. Fleming <kpfleming@digium.com>
* asterisk.c: do rlimit check _after_ reading config file, in case
'dumpcore' is specified there
2006-01-14 19:06 +0000 [r8074] Tilghman Lesher <tilghman@mail.jeffandtilghman.com>
* funcs/func_strings.c: Bug 6238 - Fix segfault when delimiter not
specified
2006-01-13 06:07 +0000 [r8047] Russell Bryant <russell@digium.com>
* channels/chan_agent.c: fix spelling errors (issue #6227)
2006-01-12 06:14 +0000 [r7999] Tilghman Lesher <tilghman@mail.jeffandtilghman.com>
* apps/app_voicemail.c, configs/voicemail.conf.sample: Bug 6211 -
Add option deletevoicemail as equivalent to option delete for
Realtime
2006-01-11 19:08 +0000 [r7986] Russell Bryant <russell@digium.com>
* channels/chan_agent.c: move variable to correct scope (issue
#6197)
2006-01-11 07:18 +0000 [r7976] Russell Bryant <russell@digium.com>
* apps/app_voicemail.c: fix temp greetings with ODBC storage (issue
#6078)
2006-01-11 05:46 +0000 [r7972] Russell Bryant <russell@digium.com>
* channels/chan_sip.c: fix mem leak on module unload (issue #6190)
2006-01-11 05:26 +0000 [r7970] Russell Bryant <russell@digium.com>
* app.c: don't override an error condition that occurred when
acting on the primary channel when stopping the autoservice on
the peer channel. (from issue #6087)
2006-01-11 04:53 +0000 [r7965] Russell Bryant <russell@digium.com>
* translate.c: lock list of translators *before* recalculating the
translation matrix
2006-01-11 04:38 +0000 [r7963] Matt O'Gorman <mogorman@digium.com>
* channel.c: Minor typo refrenced in 6191
2006-01-11 04:19 +0000 [r7960] Russell Bryant <russell@digium.com>
* pbx.c: fix locking error - lock instead of unlock
2006-01-11 03:12 +0000 [r7957] Russell Bryant <russell@digium.com>
* apps/app_dial.c: fix a little typo
2006-01-11 01:30 +0000 [r7955] Tilghman Lesher <tilghman@mail.jeffandtilghman.com>
* apps/app_voicemail.c: Bug 6192 - behave correctly when mailbox is
specified as argument
2006-01-10 08:48 +0000 [r7939] Olle Johansson <oej@edvina.net>
* doc/README.cdr: - Adding reference to README.tds - Reformatting
table
2006-01-09 22:48 +0000 [r7917] Kevin P. Fleming <kpfleming@digium.com>
* channels/chan_iax2.c: re-initialize _all_ sequence numbers when
transfer completes
2006-01-09 22:07 +0000 [r7915] Russell Bryant <russell@digium.com>
* file.c: add missing unlock (issue #6112)
2006-01-09 20:08 +0000 [r7908] Tilghman Lesher <tilghman@mail.jeffandtilghman.com>
* pbx/pbx_spool.c: Bug 6157 - Memory leak
2006-01-09 18:37 +0000 [r7904] Tilghman Lesher <tilghman@mail.jeffandtilghman.com>
* doc/README.variables: Update variable documentation to match the
code
2006-01-09 18:11 +0000 [r7898-7900] Kevin P. Fleming <kpfleming@digium.com>
* asterisk.c: commit user/group-related changes from trunk
* db.c: backport fix from revision 7856 of trunk
* apps/app_voicemail.c: fix breakage introduced in revision 7871
2006-01-09 05:11 +0000 [r7871] Russell Bryant <russell@digium.com>
* apps/app_voicemail.c: fix seg fault when using greek syntax in
VoicemMailMain (issue #6142)
2006-01-09 04:52 +0000 [r7870] Russell Bryant <russell@digium.com>
* manager.c: backport fix for unnecessary unlock (issue #6171)
2006-01-07 07:27 +0000 [r7848] Tilghman Lesher <tilghman@mail.jeffandtilghman.com>
* pbx/pbx_spool.c: Bug 6156 - catch all threading errors, not just
simple failure
2006-01-06 00:34 +0000 [r7831] Tilghman Lesher <tilghman@mail.jeffandtilghman.com>
* pbx/pbx_config.c: Dumb error messages - "Context 'context'
already included in 'in' context"
2006-01-06 00:21 +0000 [r7829] Kevin P. Fleming <kpfleming@digium.com>
* channels/chan_agent.c: update agent persistence when an agent
gets logged off by autologoff
2006-01-05 23:53 +0000 [r7827] Tilghman Lesher <tilghman@mail.jeffandtilghman.com>
* include/asterisk/strings.h: Bug 6076 - Fix documentation of
ast_trim_blank return value
2006-01-05 23:49 +0000 [r7825] Kevin P. Fleming <kpfleming@digium.com>
* channel.c: eliminate rounding errors that caused call time limits
to be inaccurate (issue #5913) round 'time left' reported during
call limit warnings up to sound more accurate
2006-01-05 23:07 +0000 [r7823] Tilghman Lesher <tilghman@mail.jeffandtilghman.com>
* res/res_features.c: Bug 6081 - fix for memory leak, formatting
fixes
2006-01-05 20:52 +0000 [r7819] Kevin P. Fleming <kpfleming@digium.com>
* formats/format_pcm.c, formats/format_pcm_alaw.c: ensure that
variable is initialized
2006-01-05 09:13 +0000 [r7812] Olle Johansson <oej@edvina.net>
* res/res_features.c: Fix copyright of changed file
2006-01-05 00:58 +0000 [r7809] Kevin P. Fleming <kpfleming@digium.com>
* channels/chan_agent.c: send device state updates for auto-logoff
of agents as well
2006-01-05 00:18 +0000 [r7807] Kevin P. Fleming <kpfleming@digium.com>
* formats/format_pcm.c, formats/format_pcm_alaw.c: doh... fseek()
has no useful return value
2006-01-04 23:51 +0000 [r7805] Kevin P. Fleming <kpfleming@digium.com>
* formats/format_pcm.c, formats/format_pcm_alaw.c: use proper
fwrite() parameters and return value
2006-01-04 23:45 +0000 [r7803] Kevin P. Fleming <kpfleming@digium.com>
* formats/format_pcm.c, formats/format_pcm_alaw.c: return properly
after extending file
2006-01-04 23:27 +0000 [r7800] Kevin P. Fleming <kpfleming@digium.com>
* formats/format_pcm.c, formats/format_pcm_alaw.c: ensure that
ulaw/alaw sound files are filled with silence when extended (not
zeroes)
2006-01-04 23:02 +0000 [r7799] Kevin P. Fleming <kpfleming@digium.com>
* channel.c: make monitoring more tolerant of peers that deliver
frames in bursts
2006-01-04 21:46 +0000 [r7795] Olle Johansson <oej@edvina.net>
* res/res_features.c: Issue #5980: Removing extra CR+LF in manager
events - needs port to trunk
2006-01-04 21:43 +0000 [r7792] Olle Johansson <oej@edvina.net>
* channels/chan_sip.c: Fixing typo in XML for video updates.
2006-01-04 07:06 +0000 [r7773] Russell Bryant <russell@digium.com>
* funcs/func_moh.c: use a more correct way of determining the size
of the destination buffer
2006-01-04 05:27 +0000 [r7771] BJ Weschke <bweschke@btwtech.com>
* apps/app_privacy.c: Fix the 'if' clause to be true under the
right conditions. Bug #6126
2006-01-03 20:22 +0000 [r7746] Kevin P. Fleming <kpfleming@digium.com>
* ast_expr.y (removed): remove unused 'old' expression parser
2006-01-03 18:15 +0000 [r7743] Tilghman Lesher <tilghman@mail.jeffandtilghman.com>
* apps/app_stack.c: Bug 6121 - typo in application description
2006-01-03 17:24 +0000 [r7740] Kevin P. Fleming <kpfleming@digium.com>
* include/asterisk/chanspy.h, apps/app_chanspy.c,
apps/app_mixmonitor.c, channel.c: revert incorrect fix for bug
#6048 from revision 7709 put in correct (simpler) fix add doxygen
docs for channel spy 'state' values
2006-01-03 17:00 +0000 [r7738] Kevin P. Fleming <kpfleming@digium.com>
* channels/chan_sip.c: backport rport scanning fix from trunk (bug
#6071)
2006-01-03 16:34 +0000 [r7736] Kevin P. Fleming <kpfleming@digium.com>
* ast_expr2f.c, ast_expr2.fl: don't leak memory for (most)
expression evaluations
2006-01-02 07:31 +0000 [r7709] Tilghman Lesher <tilghman@mail.jeffandtilghman.com>
* apps/app_mixmonitor.c: Bug 6084 - MixMonitor after a 'cli stop
monitor' deadlocks
2006-01-02 02:04 +0000 [r7706] BJ Weschke <bweschke@btwtech.com>
* channels/chan_sip.c, channels/chan_iax2.c: Fix compiler warnings.
2005-12-30 14:54 +0000 [r7677] Tilghman Lesher <tilghman@mail.jeffandtilghman.com>
* channel.c: Bug 6091 - Fix race condition around uniqueid
2005-12-28 17:35 +0000 [r7665] Russell Bryant <russell@digium.com>
* channels/chan_sip.c: fix memory leak in build_rpid (issue #6070)
2005-12-27 21:07 +0000 [r7663] Russell Bryant <russell@digium.com>
* apps/app_chanspy.c: backport fix for permissions of created
recordings (issue #6067)
2005-12-27 00:07 +0000 [r7641] Kevin P. Fleming <kpfleming@digium.com>
* channels/chan_zap.c: backport fix to ensure that DSP is never
enabled on pseudo channels
2005-12-26 20:32 +0000 [r7637] Tilghman Lesher <tilghman@mail.jeffandtilghman.com>
* cdr/cdr_tds.c: Remove copy of code in libc, preferring code in
utils.c (public domain code)
2005-12-26 18:19 +0000 [r7634] Russell Bryant <russell@digium.com>
* channels/chan_sip.c, channels/chan_agent.c, apps/app_sms.c,
asterisk.c, config.c, pbx/pbx_dundi.c, apps/app_externalivr.c,
apps/app_queue.c, channels/chan_iax2.c, cli.c,
apps/app_chanspy.c, res/res_monitor.c: cast time_t to an int in
printf/scanf (issue #5635)
2005-12-23 06:38 +0000 [r7608] Tilghman Lesher <tilghman@mail.jeffandtilghman.com>
* apps/app_hasnewvoicemail.c: Bug 6051 - VMCOUNT should work as
documented and count all, not quit after finding 1
2005-12-23 03:01 +0000 [r7606] Kevin P. Fleming <kpfleming@digium.com>
* asterisk.c: add license reference to copyright notice displayed
when CLI session begins add 'show warranty' and 'show license'
CLI commands (still need a complete list of non-GPL components
included in Asterisk)
2005-12-23 00:00 +0000 [r7605] BJ Weschke <bweschke@btwtech.com>
* apps/app_waitforsilence.c: Another app documentation tweak.
2005-12-22 22:04 +0000 [r7601] Tilghman Lesher <tilghman@mail.jeffandtilghman.com>
* apps/app_voicemail.c: Bug 6050 SQL requires the use of single
ticks to delimit values, not quotes
2005-12-22 20:36 +0000 [r7599] Russell Bryant <russell@digium.com>
* channels/chan_sip.c, configs/sip.conf.sample: revert changes to
videosupport to allow per-peer setting, since it isn't quite
complete and there is not an obvious fix at this point
2005-12-22 16:17 +0000 [r7595] Russell Bryant <russell@digium.com>
* channels/chan_sip.c: remove stray unlock (issue #5955)
2005-12-21 22:23 +0000 [r7586] Josh Roberson <josh@asteriasgi.com>
* channels/chan_sip.c: Actually put in the per-peer settings for
sip video, as they didn't make it in at astricon somehow, and
I've been too busy up until now to redo it.
2005-12-21 20:01 +0000 [r7582] Tilghman Lesher <tilghman@mail.jeffandtilghman.com>
* channels/chan_alsa.c: Allow a chan_alsa that failed to open sound
devices to be unloaded.
2005-12-21 19:53 +0000 [r7580] BJ Weschke <bweschke@btwtech.com>
* channels/chan_agent.c: Bug #6040 - Documentation correction
2005-12-21 19:23 +0000 [r7577] Tilghman Lesher <tilghman@mail.jeffandtilghman.com>
* pbx/pbx_ael.c: Bug 5777 - Remove parentheses on Goto in AEL, so
that it parses correctly
2005-12-20 20:21 +0000 [r7557] Russell Bryant <russell@digium.com>
* res/res_agi.c: check array bounds when parsing arguments to AGI
(issue #5868)
2005-12-20 18:05 +0000 [r7552] Russell Bryant <russell@digium.com>
* channels/chan_iax2.c: backport fix for reloading peer context
(issue #6007)
2005-12-20 17:34 +0000 [r7550] Russell Bryant <russell@digium.com>
* apps/app_directed_pickup.c: backport fix for segfault on directed
pickup when no CDR is available (issue #5998)
2005-12-20 12:58 +0000 [r7546] Kevin P. Fleming <kpfleming@digium.com>
* apps/app_meetme.c: backport fix for larger-than-20ms-frames from
trunk (bug #5697)
2005-12-19 23:47 +0000 [r7529] Russell Bryant <russell@digium.com>
* channels/chan_sip.c: I messed up and accidently committed this to
the trunk first ... - add note on required values of sip_methods
struct - remove duplicate function prototype - remove duplicate
ast_mutex_lock (issue #6025)
2005-12-19 19:06 +0000 [r7523] Tilghman Lesher <tilghman@mail.jeffandtilghman.com>
* file.c: Bug 5988 - record append option not working
2005-12-19 05:38 +0000 [r7521] Tilghman Lesher <tilghman@mail.jeffandtilghman.com>
* cdr.c: Bug 6026 - segfault for the sequence NoCDR(),
SetAMAFlags()
2005-12-17 18:55 +0000 [r7519] Tilghman Lesher <tilghman@mail.jeffandtilghman.com>
* doc/README.ael: Document that curley braces must be on the same
line as the keyword.
2005-12-17 17:19 +0000 [r7517] Tilghman Lesher <tilghman@mail.jeffandtilghman.com>
* apps/app_chanspy.c: Bug 6009 - off by one error
2005-12-17 03:59 +0000 [r7515] Kevin P. Fleming <kpfleming@digium.com>
* channels/chan_sip.c: Max-Forwards headers must only be present on
requests, not responses
2005-12-17 03:44 +0000 [r7513] Kevin P. Fleming <kpfleming@digium.com>
* channels/chan_sip.c: forcibly expire previous subscriptions from
a peer when they resubscribe (keeps them from building up and
waiting for expiration, and stops us sending unwanted NOTIFY
messages to devices)
2005-12-17 02:20 +0000 [r7510] Kevin P. Fleming <kpfleming@digium.com>
* build_tools/make_svn_branch_name: fix some buglet when building
team branch version strings
2005-12-17 01:02 +0000 [r7508] Tilghman Lesher <tilghman@mail.jeffandtilghman.com>
* include/asterisk/linkedlists.h: We want to check the previous
value, not the current value (which was just changed).
2005-12-16 00:49 +0000 [r7497] Tilghman Lesher <tilghman@mail.jeffandtilghman.com>
* apps/app_cut.c: First field is truncated
2005-12-15 10:52 +0000 [r7490] Christian Richter <christian.richter@beronet.com>
* doc/README.misdn, channels/misdn/mISDNuser.patch (added),
channels/misdn/isdn_lib_intern.h, channels/misdn/mISDN.patch
(added), channels/misdn/isdn_lib.h, channels/chan_misdn.c,
channels/misdn/Makefile, channels/misdn/chan_misdn_config.h,
channels/misdn/ie.c, channels/chan_misdn_config.c,
channels/misdn/isdn_msg_parser.c, channels/Makefile,
channels/misdn/isdn_lib.c: * Added mISDN/mISDNuser Echo cancel
Patch * Fixed Makefiles so that chan_misdn can be compiled again
* added some hints, that mISDN cannot be compiled against gcc-4,
SMP, Spinlock Debug * fixed some Minor issues in chan_misdn,
regarding Type Of Number and Presentation
2005-12-15 02:51 +0000 [r7482] BJ Weschke <bweschke@btwtech.com>
* channel.c: Bug #6003 - Don't free the channel structure until
after having sent the manager event.
2005-12-13 18:54 +0000 [r7470] Kevin P. Fleming <kpfleming@digium.com>
* doc/README.variables: clarify substring documentation
2005-12-13 16:06 +0000 [r7468] Kevin P. Fleming <kpfleming@digium.com>
* utils.c: correct broken math in tvfix() for timestamp values over
one million
2005-12-13 05:53 +0000 [r7453] Kevin P. Fleming <kpfleming@digium.com>
* apps/app_dial.c: restore ability of caller to hangup calls that
are still ringing (issue #5839)
2005-12-13 05:14 +0000 [r7451] Kevin P. Fleming <kpfleming@digium.com>
* channels/chan_sip.c, pbx.c: ensure that hangups while incoming
calls are in early state are handled properly (issue #5919)
2005-12-13 04:43 +0000 [r7449] Kevin P. Fleming <kpfleming@digium.com>
* channels/chan_agent.c: only report AGENT_IDLE for callback mode
agents when they are actually idle (issue #5902)
2005-12-13 04:25 +0000 [r7448] Kevin P. Fleming <kpfleming@digium.com>
* app.c: use the stream's current point when pausing/unpausing,
instead of elapsed time (which doesn't work when the stream has
been skipped forward or backward) (issue #5897)
2005-12-12 17:30 +0000 [r7435] Kevin P. Fleming <kpfleming@digium.com>
* apps/app_externalivr.c: set all the child file descriptors to
non-blocking so that we don't hang if the child fails to send a
newline-terminated command or error message
2005-12-12 17:19 +0000 [r7433] Tilghman Lesher <tilghman@mail.jeffandtilghman.com>
* include/asterisk/linkedlists.h: Typo
2005-12-11 06:08 +0000 [r7430] Russell Bryant <russell@digium.com>
* utils/astman.c: silence a couple of compiler warnings about
pointer signedness
2005-12-11 01:26 +0000 [r7429] Tilghman Lesher <tilghman@mail.jeffandtilghman.com>
* include/asterisk/linkedlists.h: Bug 5965 - major bug in
AST_LIST_REMOVE
2005-12-11 01:15 +0000 [r7427] Tilghman Lesher <tilghman@mail.jeffandtilghman.com>
* apps/app_voicemail.c: Bug 5967
2005-12-10 18:10 +0000 [r7425] BJ Weschke <bweschke@btwtech.com>
* channels/chan_zap.c: Bug #5877 Make sure the digit string from
E&M wink DNIS collection is properly null terminated as it grows.
2005-12-08 23:45 +0000 [r7406] Tilghman Lesher <tilghman@mail.jeffandtilghman.com>
* apps/app_voicemail.c: Bug 5960
2005-12-08 23:32 +0000 [r7404] Tilghman Lesher <tilghman@mail.jeffandtilghman.com>
* configs/res_odbc.conf.sample: Documenting two keywords that were
previously missing
2005-12-08 01:05 +0000 [r7386] Kevin P. Fleming <kpfleming@digium.com>
* pbx.c: initialize the buffer before using it...
2005-12-07 20:46 +0000 [r7382] Kevin P. Fleming <kpfleming@digium.com>
* pbx.c: ensure that hints are allowed to use global variable
references
2005-12-06 Kevin P. Fleming <kpfleming@digium.com>
* Asterisk 1.2.1 Released
2005-12-06 00:19 +0000 [r7349] Kevin P. Fleming <kpfleming@digium.com>
* contrib/firmware/iax/iaxy.bin: replace with unmodified file
2005-12-06 00:08 +0000 [r7346-7347] Kevin P. Fleming <kpfleming@digium.com>
* contrib/firmware/iax/iaxy.bin: _really_ don't mess with line
endings
* contrib/firmware/iax/iaxy.bin: don't try to expand keywords in
this file
2005-12-06 00:02 +0000 [r7345] Kevin P. Fleming <kpfleming@digium.com>
* contrib/firmware/iax/iaxy.bin: set this file to binary mode, so
it won't be mangled on export/checkout
2005-12-05 06:47 +0000 [r7340] Russell Bryant <russell@digium.com>
* Makefile: remove ASTERISKVERSIONNUM from the version string given
to doxygen
2005-12-05 00:09 +0000 [r7337] Russell Bryant <russell@digium.com>
* apps/app_queue.c: don't delete dynamic queue members when
reloading the static members from a realtime database (issue
#5922)
2005-12-05 00:01 +0000 [r7335] Russell Bryant <russell@digium.com>
* channels/chan_sip.c: fix the order of arguments to an error
message (issue #5927)
2005-12-04 18:03 +0000 [r7329] Kevin P. Fleming <kpfleming@digium.com>
* build_tools/make_svn_branch_name: use a more efficient way to get
the revision number, that will also report if the working copy
contains uncommitted modifications
2005-12-03 19:55 +0000 [r7310] Tilghman Lesher <tilghman@mail.jeffandtilghman.com>
* apps/app_voicemail.c: Bug 5925: check for "Unknown", as that's
what app_voicemail puts into the field for Unknown callerid Also,
remove useless res checks (initialized to 0; never set)
2005-12-03 01:24 +0000 [r7299] Olle Johansson <oej@edvina.net>
* configs/sip.conf.sample: Documenting the default registerattempts
setting as 0, continue hammering the server for ever and ever ;-)
2005-12-02 21:12 +0000 [r7285] Tilghman Lesher <tilghman@mail.jeffandtilghman.com>
* contrib/init.d/rc.debian.asterisk,
contrib/init.d/rc.mandrake.asterisk,
contrib/init.d/rc.redhat.asterisk,
contrib/init.d/rc.gentoo.asterisk,
contrib/init.d/rc.mandrake.zaptel,
contrib/init.d/rc.slackware.asterisk: Turn on executable bits for
startup scripts, and fix bash var interpolation for Mandrake
2005-12-02 00:52 +0000 [r7275] Olle Johansson <oej@edvina.net>
* channels/chan_sip.c: Bug #5907. Improve SIP INFO DTMF debugging
output. (1.2 & Trunk)
2005-12-02 00:51 +0000 [r7274] Kevin P. Fleming <kpfleming@digium.com>
* apps/app_page.c, pbx.c: inherit channel variables into channels
created by Page() application (issue #5888)
2005-12-02 00:42 +0000 [r7273] Kevin P. Fleming <kpfleming@digium.com>
* apps/app_voicemail.c, configs/voicemail.conf.sample, UPGRADE.txt:
allow previous context-searching behavior to be used if desired
(issue #5899)
2005-12-02 00:39 +0000 [r7272] Kevin P. Fleming <kpfleming@digium.com>
* apps/app_voicemail.c: properly handle password changes when
mailbox is last line of config file and not followed by a newline
(issue #5870) reformat password changing code to conform to
coding guidelines (issue #5870)
2005-12-02 00:28 +0000 [r7270-7271] Kevin P. Fleming <kpfleming@digium.com>
* channels/chan_agent.c: protect agent_bridgedchannel() from
segfaulting when there is no bridged channel (issue #5879)
* channels/chan_local.c: allow variables to exist on both 'halves'
of the Local channel (issue #5810)
2005-12-01 23:49 +0000 [r7269] Kevin P. Fleming <kpfleming@digium.com>
* apps/app_festival.c: don't block waiting for the Festival server
forever when it goes away (issue #5882)
2005-12-01 23:34 +0000 [r7268] Kevin P. Fleming <kpfleming@digium.com>
* channel.c: ensure channel's scheduling context is freed (issue
#5788)
2005-12-01 23:18 +0000 [r7266] Kevin P. Fleming <kpfleming@digium.com>
* Makefile, patches (removed): Makefile 'update' target now
supports updating from Subversion repositories (issue #5875)
remove support for 'patches' subdirectory, it's no longer useful
2005-12-01 23:18 +0000 [r7265] Olle Johansson <oej@edvina.net>
* doc/README.misdn: Changing bug report address to the Asterisk
issue tracker
2005-12-01 22:21 +0000 [r7263] Olle Johansson <oej@edvina.net>
* doc/README.jitterbuffer, doc/README.realtime: Removing references
to 1.1dev, replacing with 1.2, in documentation files.
2005-12-01 21:38 +0000 [r7261] Olle Johansson <oej@edvina.net>
* doc/README.misdn: Fixing some spelling errors, as well as
changing "cvs" to "subversion" in misdn documentation.
2005-12-01 19:25 +0000 [r7257] Kevin P. Fleming <kpfleming@digium.com>
* build_tools/make_svn_branch_name: ensure that 'svn info' output
is in the expected language for the script to parse (issue #5880)
2005-12-01 02:33 +0000 [r7251] Russell Bryant <russell@digium.com>
* apps/app_externalivr.c: use ast_app_separate_args to split
arguments (issue #5686)
2005-12-01 01:19 +0000 [r7249] Russell Bryant <russell@digium.com>
* apps/app_queue.c: fix queue weight feature - compare member
interfaces instead of pointers to the members, since each queue
has its own list of members. (issue #5863)
2005-12-01 00:44 +0000 [r7247] Russell Bryant <russell@digium.com>
* build_tools/make_svn_branch_name: use '=' instead of '==' for
string comparisons. /bin/bash is ok with this, but /bin/sh is
not. (issue #5885)
2005-11-30 21:31 +0000 [r7244] Russell Bryant <russell@digium.com>
* redhat/asterisk (removed), Makefile: remove outdated redhat init
script and provide the updated one in 'make rpm' (issue #5786)
2005-11-30 21:24 +0000 [r7242] Russell Bryant <russell@digium.com>
* contrib/init.d/rc.debian.asterisk,
contrib/init.d/rc.redhat.asterisk: Comment out LD_ASSUME_KERNEL
by default. Print error messages if the asterisk executable or
the asterisk configuration directory are not found. (issue #5785,
#5708)
2005-11-30 17:39 +0000 [r7234] Russell Bryant <russell@digium.com>
* apps/app_dial.c: fix DIALEDTIME when call has not been answered
(issue #5862)
2005-11-30 14:27 +0000 [r7233] Russell Bryant <russell@digium.com>
* rtp.c: do not allow an rtp message with zero type (issue #5749)
2005-11-30 07:22 +0000 [r7231] Russell Bryant <russell@digium.com>
* pbx.c: fix hint case sensitivity (issue #5856)
2005-11-30 05:26 +0000 [r7228] Russell Bryant <russell@digium.com>
* configs/sip.conf.sample: add description of the "fromdomain"
option (issue #5874)
2005-11-30 03:52 +0000 [r7227] Josh Roberson <josh@asteriasgi.com>
* apps/app_voicemail.c, UPGRADE.txt, ChangeLog: backport fix from
trunk
2005-11-30 03:37 +0000 [r7226] Kevin P. Fleming <kpfleming@digium.com>
* doc/cdr.txt, doc/CODING-GUIDELINES, include/asterisk.h,
doc/README.mp3: remove remaining CVS references
2005-11-30 03:20 +0000 [r7224] Kevin P. Fleming <kpfleming@digium.com>
* channel.c: port memory leak fix from rev 7223 in trunk
2005-11-28 04:01 +0000 [r7208] Kevin P. Fleming <kpfleming@digium.com>
* Makefile, build_tools/make_svn_branch_name (added): port version
string computation from trunk
2005-11-27 16:04 +0000 [r7199] Kevin P. Fleming <kpfleming@digium.com>
* / (added): branch renames remove unneeded branches
2005-11-29 Josh Roberson <josh@asteriasgi.com>
* apps/app_voicemail.c: Only look in 'default' context when no context defined to VoiceMailMain(). (issue #5887)

View File

@@ -105,6 +105,9 @@ BUSYDETECT+= #-DBUSYDETECT_TONEONLY
# Don't use together with -DBUSYDETECT_TONEONLY
BUSYDETECT+= #-DBUSYDETECT_COMPARE_TONE_AND_SILENCE
# Comment this if you want to disable MIDCOM
MIDCOM = -DMIDCOM
ifneq ($(OSARCH),SunOS)
ASTLIBDIR=$(INSTALL_PREFIX)/usr/lib/asterisk
ASTVARLIBDIR=$(INSTALL_PREFIX)/var/lib/asterisk
@@ -331,6 +334,7 @@ ASTCFLAGS+= $(DEBUG_THREADS)
ASTCFLAGS+= $(TRACE_FRAMES)
ASTCFLAGS+= $(MALLOC_DEBUG)
ASTCFLAGS+= $(BUSYDETECT)
ASTCFLAGS+= $(MIDCOM)
ASTCFLAGS+= $(OPTIONS)
ASTCFLAGS+= -fomit-frame-pointer
SUBDIRS=res channels pbx apps codecs formats agi cdr funcs utils stdtime

8
README
View File

@@ -164,6 +164,14 @@ parameters. For example, the line "channel => 25-47" creates objects for
the channels 25 through 47 of the card, obtaining the settings
from the variables specified above.
* NETWORK SECURITY DEVICES
This release of Asterisk contains support for network security devices
manufactured by Ranch Networks, Inc., using their MIDCOM interface
library. You will need the companion libmidcom-0.1.0.tar.gz file to
build the library. Contact Ranch Networks' support department for assistance
in building and configuring MIDCOM support.
* SPECIAL NOTE ON TIME
Those using SIP phones should be aware that Asterisk is sensitive to

View File

@@ -1,8 +0,0 @@
About Hold Music
================
Digium has licensed the music included with
the Asterisk distribution From FreePlayMusic
for use and distribution with Asterisk. It
is licensed ONLY for use as hold music within
an Asterisk based PBX.

22
README.opsound Normal file
View File

@@ -0,0 +1,22 @@
About Hold Music
================
These files were obtained from http://opsound.org, where the authors placed them
under the Creative Commons Attribution-Share Alike 2.5 license, a copy of which
may be found at http://creativecommons.org.
Credits
================
macroform-cold_day - Paul Shuler (Macroform)
paulshuler@gmail.com - http://macroform.bandcamp.com/
macroform-robot_dity - Paul Shuler (Macroform)
paulshuler@gmail.com - http://macroform.bandcamp.com/
macroform-the_simplicity - Paul Shuler (Macroform)
paulshuler@gmail.com - http://macroform.bandcamp.com/
manolo_camp-morning_coffee - Manolo Camp
beatbastard@gmx.net - http://ccmixter.org/people/ManoloCamp
reno_project-system - Reno Project
renoproject@hotmail.com - http://www.jamendo.com/en/album/23661

8
app.c
View File

@@ -316,8 +316,12 @@ int ast_dtmf_stream(struct ast_channel *chan,struct ast_channel *peer,char *digi
}
}
}
if (peer)
res = ast_autoservice_stop(peer);
if (peer) {
/* Stop autoservice on the peer channel, but don't overwrite any error condition
that has occurred previously while acting on the primary channel */
if (ast_autoservice_stop(peer) && !res)
res = -1;
}
}
return res;
}

View File

@@ -161,7 +161,7 @@ static char *descrip =
" S(x) - Hang up the call after 'x' seconds *after* the called party has\n"
" answered the call.\n"
" t - Allow the called party to transfer the calling party by sending the\n"
" DTMF sequence defiend in features.conf.\n"
" DTMF sequence defined in features.conf.\n"
" T - Allow the calling party to transfer the called party by sending the\n"
" DTMF sequence defined in features.conf.\n"
" w - Allow the called party to enable recording of the call by sending\n"

View File

@@ -175,7 +175,8 @@ static int send_waveform_to_channel(struct ast_channel *chan, char *waveform, in
if (chan->_state != AST_STATE_UP)
ast_answer(chan);
ast_stopstream(chan);
ast_indicate(chan, -1);
owriteformat = chan->writeformat;
res = ast_set_write_format(chan, AST_FORMAT_SLINEAR);
if (res < 0) {

View File

@@ -1630,7 +1630,8 @@ static struct ast_conference *find_conf(struct ast_channel *chan, char *confno,
if (dynamic_pin) {
if (dynamic_pin[0] == 'q') {
/* Query the user to enter a PIN */
ast_app_getdata(chan, "conf-getpin", dynamic_pin, AST_MAX_EXTENSION - 1, 0);
if (ast_app_getdata(chan, "conf-getpin", dynamic_pin, AST_MAX_EXTENSION - 1, 0) < 0)
return NULL;
}
cnf = build_conf(confno, dynamic_pin, "", make, dynamic);
} else {

View File

@@ -445,7 +445,7 @@ static void apply_option(struct ast_vm_user *vmu, const char *var, const char *v
ast_copy_string(vmu->language, value, sizeof(vmu->language));
} else if (!strcasecmp(var, "tz")) {
ast_copy_string(vmu->zonetag, value, sizeof(vmu->zonetag));
} else if (!strcasecmp(var, "delete")) {
} else if (!strcasecmp(var, "delete") || !strcasecmp(var, "deletevoicemail")) {
ast_set2_flag(vmu, ast_true(value), VM_DELETE);
} else if (!strcasecmp(var, "saycid")){
ast_set2_flag(vmu, ast_true(value), VM_SAYCID);
@@ -2613,8 +2613,8 @@ static int leave_voicemail(struct ast_channel *chan, char *ext, struct leave_vm_
}
}
if (ast_fileexists(fn, NULL, NULL)) {
notify_new_message(chan, vmu, msgnum, duration, fmt, chan->cid.cid_num, chan->cid.cid_name);
STORE(dir, vmu->mailbox, vmu->context, msgnum);
notify_new_message(chan, vmu, msgnum, duration, fmt, chan->cid.cid_num, chan->cid.cid_name);
DISPOSE(dir, msgnum);
}
pbx_builtin_setvar_helper(chan, "VMSTATUS", "SUCCESS");
@@ -4764,13 +4764,14 @@ static int vm_tempgreeting(struct ast_channel *chan, struct ast_vm_user *vmu, st
while((cmd >= 0) && (cmd != 't')) {
if (cmd)
retries = 0;
RETRIEVE(prefile, -1);
if (ast_fileexists(prefile, NULL, NULL) > 0) {
switch (cmd) {
case '1':
cmd = play_record_review(chan,"vm-rec-temp",prefile, maxgreet, fmtc, 0, vmu, &duration, NULL, record_gain);
break;
case '2':
ast_filedelete(prefile, NULL);
DELETE(prefile, -1, prefile);
ast_play_and_wait(chan,"vm-tempremoved");
cmd = 't';
break;
@@ -4794,6 +4795,7 @@ static int vm_tempgreeting(struct ast_channel *chan, struct ast_vm_user *vmu, st
play_record_review(chan,"vm-rec-temp",prefile, maxgreet, fmtc, 0, vmu, &duration, NULL, record_gain);
cmd = 't';
}
DISPOSE(prefile, -1);
}
if (cmd == 't')
cmd = 0;
@@ -5645,10 +5647,10 @@ static int vm_box_exists(struct ast_channel *chan, void *data)
static int vmauthenticate(struct ast_channel *chan, void *data)
{
struct localuser *u;
char *s = data, *user=NULL, *context=NULL, mailbox[AST_MAX_EXTENSION];
char *s = data, *user=NULL, *context=NULL, mailbox[AST_MAX_EXTENSION] = "";
struct ast_vm_user vmus;
char *options = NULL;
int silent = 0;
int silent = 0, skipuser = 0;
int res = -1;
LOCAL_USER_ADD(u);
@@ -5665,6 +5667,9 @@ static int vmauthenticate(struct ast_channel *chan, void *data)
s = user;
user = strsep(&s, "@");
context = strsep(&s, "");
if (!ast_strlen_zero(user))
skipuser++;
ast_copy_string(mailbox, user, sizeof(mailbox));
}
}
@@ -5672,9 +5677,10 @@ static int vmauthenticate(struct ast_channel *chan, void *data)
silent = (strchr(options, 's')) != NULL;
}
if (!vm_authenticate(chan, mailbox, sizeof(mailbox), &vmus, context, NULL, 0, 3, silent)) {
if (!vm_authenticate(chan, mailbox, sizeof(mailbox), &vmus, context, NULL, skipuser, 3, silent)) {
pbx_builtin_setvar_helper(chan, "AUTH_MAILBOX", mailbox);
pbx_builtin_setvar_helper(chan, "AUTH_CONTEXT", vmus.context);
ast_play_and_wait(chan, "auth-thankyou");
res = 0;
}

View File

@@ -127,7 +127,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
/*! \brief Welcome message when starting a CLI interface */
#define WELCOME_MESSAGE \
ast_verbose("Asterisk " ASTERISK_VERSION ", Copyright (C) 1999 - 2005 Digium, Inc. and others.\n"); \
ast_verbose("Asterisk " ASTERISK_VERSION ", Copyright (C) 1999 - 2006 Digium, Inc. and others.\n"); \
ast_verbose("Created by Mark Spencer <markster@digium.com>\n"); \
ast_verbose("Asterisk comes with ABSOLUTELY NO WARRANTY; type 'show warranty' for details.\n"); \
ast_verbose("This is free software, with components licensed under the GNU General Public\n"); \
@@ -2138,6 +2138,10 @@ int main(int argc, char *argv[])
}
}
if (option_console && !option_verbose)
ast_verbose("[ Reading Master Configuration ]");
ast_readconfig();
if (option_dumpcore) {
struct rlimit l;
memset(&l, 0, sizeof(l));
@@ -2148,10 +2152,6 @@ int main(int argc, char *argv[])
}
}
if (option_console && !option_verbose)
ast_verbose("[ Reading Master Configuration ]");
ast_readconfig();
if ((!rungroup) && !ast_strlen_zero(ast_config_AST_RUN_GROUP))
rungroup = ast_config_AST_RUN_GROUP;
if ((!runuser) && !ast_strlen_zero(ast_config_AST_RUN_USER))

View File

@@ -576,7 +576,7 @@ struct ast_channel *ast_channel_alloc(int needqueue)
tmp->fds[AST_MAX_FDS-1] = tmp->alertpipe[0];
/* And timing pipe */
tmp->fds[AST_MAX_FDS-2] = tmp->timingfd;
strcpy(tmp->name, "**Unkown**");
strcpy(tmp->name, "**Unknown**");
/* Initial state */
tmp->_state = AST_STATE_DOWN;
tmp->streamid = -1;

View File

@@ -97,6 +97,11 @@ ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/lib/libpri.so.1)$(wildcard $(CROSS
ZAPPRI=-lpri
endif
ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/lib/asterisk/modules/res_netsec.so)$(wildcard $(CROSS_COMPILE_TARGET)/usr/local/lib/asterisk/modules/res_netsec.so),)
CFLAGS+=-DSIP_MIDCOM
# NETSEC=-lnetsec -lssl -lcrypto -lstdc++
endif
ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/lib/libmfcr2.so.1)$(wildcard $(CROSS_COMPILE_TARGET)/usr/local/lib/libmfcr2.so.1),)
CFLAGS+=-DZAPATA_R2
ZAPR2=-lmfcr2
@@ -207,7 +212,7 @@ chan_zap.so: chan_zap.o
$(CC) $(SOLINK) -o $@ $< $(ZAPPRI) $(ZAPR2) -ltonezone
chan_sip.so: chan_sip.o
$(CC) $(SOLINK) -o $@ ${CYGSOLINK} chan_sip.o ${CYGSOLIB}
$(CC) $(SOLINK) -o $@ ${CYGSOLINK} chan_sip.o ${CYGSOLIB} ${NETSEC}
chan_agent.so: chan_agent.o
$(CC) $(SOLINK) -o $@ ${CYGSOLINK} chan_agent.o ${CYGSOLIB} ${CYG_CHAN_AGENT}

View File

@@ -102,7 +102,7 @@ static const char descrip2[] =
static const char descrip3[] =
" AgentMonitorOutgoing([options]):\n"
"Tries to figure out the id of the agent who is placing outgoing call based on\n"
"comparision of the callerid of the current interface and the global variable \n"
"comparison of the callerid of the current interface and the global variable \n"
"placed by the AgentCallbackLogin application. That's why it should be used only\n"
"with the AgentCallbackLogin app. Uses the monitoring functions in chan_agent \n"
"instead of Monitor application. That have to be configured in the agents.conf file.\n"
@@ -144,7 +144,7 @@ static char moh[80] = "default";
/** Persistent Agents astdb family */
static const char pa_family[] = "/Agents";
/** The maximum lengh of each persistent member agent database entry */
/** The maximum length of each persistent member agent database entry */
#define PA_MAX_LEN 2048
/** queues.conf [general] option */
static int persistent_agents = 0;
@@ -1051,7 +1051,7 @@ static int read_agent_config(void)
urlprefix[0] = '\0';
savecallsin[0] = '\0';
/* Read in [general] section for persistance */
/* Read in [general] section for persistence */
if ((general_val = ast_variable_retrieve(cfg, "general", "persistentagents")))
persistent_agents = ast_true(general_val);
@@ -1695,6 +1695,7 @@ static int __login_exec(struct ast_channel *chan, void *data, int callbackmode)
char agent_goodbye[AST_MAX_FILENAME_LEN];
int update_cdr = updatecdr;
char *filename = "agent-loginok";
char tmpchan[AST_MAX_BUF] = "";
LOCAL_USER_ADD(u);
@@ -1790,7 +1791,7 @@ static int __login_exec(struct ast_channel *chan, void *data, int callbackmode)
gettimeofday(&p->lastdisc, NULL);
p->lastdisc.tv_sec++;
/* Set Channel Specific Agent Overides */
/* Set Channel Specific Agent Overrides */
if (pbx_builtin_getvar_helper(chan, "AGENTACKCALL") && strlen(pbx_builtin_getvar_helper(chan, "AGENTACKCALL"))) {
if (!strcasecmp(pbx_builtin_getvar_helper(chan, "AGENTACKCALL"), "always"))
p->ackcall = 2;
@@ -1818,14 +1819,13 @@ static int __login_exec(struct ast_channel *chan, void *data, int callbackmode)
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "Saw variable AGENTWRAPUPTIME=%s, setting wrapuptime to: %d for Agent '%s'.\n",tmpoptions,p->wrapuptime,p->agent);
}
/* End Channel Specific Agent Overides */
/* End Channel Specific Agent Overrides */
if (!p->chan) {
char last_loginchan[80] = "";
long logintime;
snprintf(agent, sizeof(agent), "Agent/%s", p->agent);
if (callbackmode) {
char tmpchan[AST_MAX_BUF] = "";
int pos = 0;
/* Retrieve login chan */
for (;;) {
@@ -2360,7 +2360,7 @@ static void reload_agents(void)
}
ast_mutex_unlock(&agentlock);
if (db_tree) {
ast_log(LOG_NOTICE, "Agents sucessfully reloaded from database.\n");
ast_log(LOG_NOTICE, "Agents successfully reloaded from database.\n");
ast_db_freetree(db_tree);
}
}
@@ -2417,7 +2417,7 @@ static int agent_devicestate(void *data)
/**
* Initialize the Agents module.
* This funcion is being called by Asterisk when loading the module. Among other thing it registers applications, cli commands and reads the cofiguration file.
* This function is being called by Asterisk when loading the module. Among other thing it registers applications, cli commands and reads the cofiguration file.
*
* @returns int Always 0.
*/

View File

@@ -86,6 +86,10 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/astosp.h"
#endif
#ifdef SIP_MIDCOM
#include "asterisk/res_netsec.h"
#endif
#ifndef DEFAULT_USERAGENT
#define DEFAULT_USERAGENT "Asterisk PBX"
#endif
@@ -679,6 +683,10 @@ static struct sip_pvt {
struct ast_dsp *vad; /*!< Voice Activation Detection dsp */
#ifdef SIP_MIDCOM
void *r;
#endif
struct sip_peer *peerpoke; /*!< If this calls is to poke a peer, which one */
struct sip_registry *registry; /*!< If this is a REGISTER call, to which registry */
struct ast_rtp *rtp; /*!< RTP Session */
@@ -922,6 +930,25 @@ static const struct cfsubscription_types *find_subscription_type(enum subscripti
static int transmit_state_notify(struct sip_pvt *p, int state, int full, int substate);
static char *gettag(struct sip_request *req, char *header, char *tagbuf, int tagbufsize);
#ifdef SIP_MIDCOM
static void sip_rtp_get_peer_audio_helper(void *p, struct sockaddr_in *them);
static void sip_rtp_get_peer_video_helper(void *p, struct sockaddr_in *them);
static void sip_rtp_get_us_audio_helper(void *p, struct sockaddr_in *sin);
static void sip_rtp_get_us_video_helper(void *p, struct sockaddr_in *vsin);
static void sip_map_hook_struct(void *p, void *r);
static void *sip_get_hook_struct(void *p);
static int sip_get_flag_novideo(void *p);
static int sip_cmp_sa_addr(void *p, struct sockaddr_in *addr);
static void sip_get_recv_addr(void *p, struct in_addr *addr);
static char *sip_get_username(void *p);
static struct ast_channel *sip_channel_helper(void *p);
static struct ast_channel *sip_bridged_channel_helper(void *p);
static int sip_get_capability_helper(void *p);
static void sip_softhangup_helper(void *p);
extern struct ast_sip_hook_cb *m_cb;
#endif
/*! \brief Definition of this channel for PBX channel registration */
static const struct ast_channel_tech sip_tech = {
.type = channeltype,
@@ -2095,6 +2122,11 @@ static void __sip_destroy(struct sip_pvt *p, int lockowner)
if (sip_debug_test_pvt(p))
ast_verbose("Destroying call '%s'\n", p->callid);
#ifdef SIP_MIDCOM
if (m_cb)
m_cb->__sip_destroy_hook(p);
#endif
if (dumphistory)
sip_dump_history(p);
@@ -2419,6 +2451,12 @@ static int sip_hangup(struct ast_channel *ast)
if (ast->_state != AST_STATE_UP)
needcancel = 1;
#ifdef SIP_MIDCOM
/* For callee to shutdown, send "BYE" instead of "CANCEL"
-- this needs to be verified */
if (m_cb && ast_test_flag(p, SIP_OUTGOING)) needcancel = 0;
#endif
/* Disconnect */
p = ast->tech_pvt;
if (p->vad) {
@@ -4339,8 +4377,22 @@ static int add_sdp(struct sip_request *resp, struct sip_pvt *p)
ast_rtp_get_us(p->vrtp, &vsin);
if (p->redirip.sin_addr.s_addr) {
#ifdef SIP_MIDCOM
if (m_cb && p->r) {
struct sockaddr_in redirip_hook;
char iabuf2[INET_ADDRSTRLEN];
m_cb->ast_get_redirip_audio_hook(p->r, &redirip_hook);
ast_log(LOG_DEBUG, "Replacing %s:%d by %s:%d in SDP before sending to %s\n", ast_inet_ntoa(iabuf, sizeof(iabuf), p->redirip.sin_addr), ntohs(p->redirip.sin_port), ast_inet_ntoa(iabuf2, sizeof(iabuf2), redirip_hook.sin_addr), ntohs(redirip_hook.sin_port), p->username);
dest.sin_port = redirip_hook.sin_port;
dest.sin_addr = redirip_hook.sin_addr;
} else {
dest.sin_port = p->redirip.sin_port;
dest.sin_addr = p->redirip.sin_addr;
}
#else
dest.sin_port = p->redirip.sin_port;
dest.sin_addr = p->redirip.sin_addr;
#endif
if (p->redircodecs)
capability = p->redircodecs;
} else {
@@ -4351,8 +4403,22 @@ static int add_sdp(struct sip_request *resp, struct sip_pvt *p)
/* Determine video destination */
if (p->vrtp) {
if (p->vredirip.sin_addr.s_addr) {
#ifdef SIP_MIDCOM
if (m_cb && p->r) {
struct sockaddr_in vredirip_hook;
char iabuf2[INET_ADDRSTRLEN];
m_cb->ast_get_vredirip_video_hook(p->r, &vredirip_hook);
ast_log(LOG_DEBUG, "Replacing %s:%d by %s:%d in video SDP before sending to %s\n", ast_inet_ntoa(iabuf, sizeof(iabuf), p->vredirip.sin_addr), ntohs(p->vredirip.sin_port), ast_inet_ntoa(iabuf2, sizeof(iabuf2), vredirip_hook.sin_addr), ntohs(vredirip_hook.sin_port), p->username);
vdest.sin_port = vredirip_hook.sin_port;
vdest.sin_addr = vredirip_hook.sin_addr;
} else {
vdest.sin_port = p->vredirip.sin_port;
vdest.sin_addr = p->vredirip.sin_addr;
}
#else
vdest.sin_port = p->vredirip.sin_port;
vdest.sin_addr = p->vredirip.sin_addr;
#endif
} else {
vdest.sin_addr = p->ourip;
vdest.sin_port = vsin.sin_port;
@@ -4509,6 +4575,14 @@ static int transmit_response_with_sdp(struct sip_pvt *p, char *msg, struct sip_r
} else {
ast_log(LOG_ERROR, "Can't add SDP to response, since we have no RTP session allocated. Call-ID %s\n", p->callid);
}
#ifdef SIP_MIDCOM
if (m_cb) {
if (!m_cb->transmit_response_with_sdp_hook(p)) {
ast_log(LOG_NOTICE, "Failed transmit_response_with_sdp_hook()\n");
return -1;
}
}
#endif
return send_response(p, &resp, retrans, seqno);
}
@@ -4570,6 +4644,19 @@ static int determine_firstline_parts( struct sip_request *req )
static int transmit_reinvite_with_sdp(struct sip_pvt *p)
{
struct sip_request req;
#ifdef SIP_MIDCOM
if (m_cb) {
if (!m_cb->transmit_reinvite_with_sdp_hook(p)) {
ast_log(LOG_NOTICE, "Failed transmit_reinvite_with_sdp_hook()\n");
if (p->owner)
ast_queue_hangup(p->owner);
else
ast_set_flag(p, SIP_NEEDDESTROY);
}
}
#endif
if (ast_test_flag(p, SIP_REINVITE_UPDATE))
reqprep(&req, p, SIP_UPDATE, 0, 1);
else
@@ -9467,6 +9554,16 @@ static void handle_response_invite(struct sip_pvt *p, int resp, char *rest, stru
p->authtries = 0;
if (!strcasecmp(get_header(req, "Content-Type"), "application/sdp")) {
process_sdp(p, req);
#ifdef SIP_MIDCOM
if (m_cb) {
if (!m_cb->handle_response_invite_hook(p)) {
if (p->owner)
ast_queue_hangup(p->owner);
else
ast_set_flag(p, SIP_NEEDDESTROY);
}
}
#endif
}
/* Parse contact header for continued conversation */
@@ -10308,6 +10405,19 @@ static int handle_request_invite(struct sip_pvt *p, struct sip_request *req, int
ast_set_flag(p, SIP_NEEDDESTROY);
return -1;
}
#ifdef SIP_MIDCOM
if (m_cb) {
if (!m_cb->handle_request_invite_hook((void *)p)) {
ast_log(LOG_NOTICE, "Failed to NAT for (%s)\n", get_header(req, "From"));
if (ignore)
transmit_response(p, "403 Forbidden", req);
else
transmit_response_reliable(p, "403 Forbidden", req, 1);
ast_set_flag(p, SIP_NEEDDESTROY);
return 0;
}
}
#endif
} else {
p->jointcapability = p->capability;
ast_log(LOG_DEBUG, "Hm.... No sdp for the moment\n");
@@ -12655,8 +12765,13 @@ static struct ast_rtp *sip_get_rtp_peer(struct ast_channel *chan)
if (!p)
return NULL;
ast_mutex_lock(&p->lock);
if (p->rtp && ast_test_flag(p, SIP_CAN_REINVITE))
if (p->rtp && ast_test_flag(p, SIP_CAN_REINVITE)) {
rtp = p->rtp;
#ifdef SIP_MIDCOM
if (m_cb)
m_cb->ast_rtp_nat_us_audio_hook(rtp, p->r); /* change the ip port in rtp */
#endif
}
ast_mutex_unlock(&p->lock);
return rtp;
}
@@ -12671,8 +12786,13 @@ static struct ast_rtp *sip_get_vrtp_peer(struct ast_channel *chan)
return NULL;
ast_mutex_lock(&p->lock);
if (p->vrtp && ast_test_flag(p, SIP_CAN_REINVITE))
if (p->vrtp && ast_test_flag(p, SIP_CAN_REINVITE)) {
rtp = p->vrtp;
#ifdef SIP_MIDCOM
if (m_cb)
m_cb->ast_rtp_nat_us_video_hook(rtp, p->r); /* change the ip port in rtp */
#endif
}
ast_mutex_unlock(&p->lock);
return rtp;
}
@@ -12686,12 +12806,22 @@ static int sip_set_rtp_peer(struct ast_channel *chan, struct ast_rtp *rtp, struc
if (!p)
return -1;
ast_mutex_lock(&p->lock);
if (rtp)
if (rtp) {
ast_rtp_get_peer(rtp, &p->redirip);
#ifdef SIP_MIDCOM
if (m_cb)
m_cb->ast_rtp_get_their_nat_audio_hook(rtp, p->r);
#endif
}
else
memset(&p->redirip, 0, sizeof(p->redirip));
if (vrtp)
if (vrtp) {
ast_rtp_get_peer(vrtp, &p->vredirip);
#ifdef SIP_MIDCOM
if (m_cb)
m_cb->ast_rtp_get_their_nat_video_hook(vrtp, p->r);
#endif
}
else
memset(&p->vredirip, 0, sizeof(p->vredirip));
p->redircodecs = codecs;
@@ -12959,6 +13089,26 @@ static struct ast_rtp_protocol sip_rtp = {
get_codec: sip_get_codec,
};
#ifdef SIP_MIDCOM
/*! \brief sip_helper: Interface structure with callbacks used to connect to midcom module --*/
static struct ast_sip_helper_cb sip_helper = {
ast_rtp_get_peer_audio_helper: sip_rtp_get_peer_audio_helper,
ast_rtp_get_peer_video_helper: sip_rtp_get_peer_video_helper,
ast_rtp_get_us_audio_helper: sip_rtp_get_us_audio_helper,
ast_rtp_get_us_video_helper: sip_rtp_get_us_video_helper,
ast_map_hook_struct: sip_map_hook_struct,
ast_get_hook_struct: sip_get_hook_struct,
ast_get_flag_novideo: sip_get_flag_novideo,
ast_cmp_sa_addr: sip_cmp_sa_addr,
ast_get_recv_addr: sip_get_recv_addr,
ast_get_username: sip_get_username,
ast_channel_helper: sip_channel_helper,
ast_bridged_channel_helper: sip_bridged_channel_helper,
ast_get_capability_helper: sip_get_capability_helper,
ast_softhangup_helper: sip_softhangup_helper,
};
#endif
/*! \brief sip_poke_all_peers: Send a poke to all known peers */
static void sip_poke_all_peers(void)
{
@@ -13094,6 +13244,12 @@ int load_module()
/* Tell the RTP subdriver that we're here */
ast_rtp_proto_register(&sip_rtp);
#ifdef SIP_MIDCOM
/* Register the sip helper functions */
if (m_cb)
m_cb->ast_sip_helper_register(&sip_helper);
#endif
/* Register dialplan applications */
ast_register_application(app_dtmfmode, sip_dtmfmode, synopsis_dtmfmode, descrip_dtmfmode);
@@ -13142,6 +13298,12 @@ int unload_module()
ast_rtp_proto_unregister(&sip_rtp);
#ifdef SIP_MIDCOM
/* Unregister the sip helper functions */
if (m_cb)
m_cb->ast_sip_helper_unregister();
#endif
ast_manager_unregister("SIPpeers");
ast_manager_unregister("SIPshowpeer");
@@ -13153,7 +13315,6 @@ int unload_module()
ast_softhangup(p->owner, AST_SOFTHANGUP_APPUNLOAD);
p = p->next;
}
iflist = NULL;
ast_mutex_unlock(&iflock);
} else {
ast_log(LOG_WARNING, "Unable to lock the interface list\n");
@@ -13226,4 +13387,78 @@ char *description()
return (char *) desc;
}
#ifdef SIP_MIDCOM
static void sip_rtp_get_peer_audio_helper(void *p, struct sockaddr_in *them)
{
ast_rtp_get_peer(((struct sip_pvt*)p)->rtp, them);
}
static void sip_rtp_get_peer_video_helper(void *p, struct sockaddr_in *them)
{
ast_rtp_get_peer(((struct sip_pvt*)p)->vrtp, them);
}
static void sip_rtp_get_us_audio_helper(void *p, struct sockaddr_in *sin)
{
ast_rtp_get_us(((struct sip_pvt*)p)->rtp, sin);
sin->sin_addr = ((struct sip_pvt*)p)->ourip;
}
static void sip_rtp_get_us_video_helper(void *p, struct sockaddr_in *vsin)
{
ast_rtp_get_us(((struct sip_pvt*)p)->vrtp, vsin);
vsin->sin_addr = ((struct sip_pvt*)p)->ourip;
}
static void sip_map_hook_struct(void *p, void *r)
{
((struct sip_pvt*)p)->r = r;
}
static void *sip_get_hook_struct(void *p)
{
return ((struct sip_pvt*)p)->r;
}
static int sip_get_flag_novideo(void *p)
{
return ast_test_flag((struct sip_pvt*)p, SIP_NOVIDEO);
}
static int sip_cmp_sa_addr(void *p, struct sockaddr_in *addr)
{
return (((struct sip_pvt*)p)->sa.sin_addr.s_addr == addr->sin_addr.s_addr);
}
static void sip_get_recv_addr(void *p, struct in_addr *addr)
{
memcpy(addr, &((struct sip_pvt *)p)->recv.sin_addr, sizeof(struct in_addr));
}
static char *sip_get_username(void *p)
{
return ((struct sip_pvt*)p)->username;
}
static struct ast_channel *sip_channel_helper(void *p)
{
return ((struct sip_pvt*)p)->owner;
}
static struct ast_channel *sip_bridged_channel_helper(void *p)
{
return ast_bridged_channel(((struct sip_pvt*)p)->owner);
}
static int sip_get_capability_helper(void *p)
{
return ((struct sip_pvt*)p)->jointcapability;
}
static void sip_softhangup_helper(void *p)
{
if (p && ((struct sip_pvt *)p)->owner)
ast_softhangup(((struct sip_pvt *)p)->owner, AST_SOFTHANGUP_APPUNLOAD);
}
#endif

View File

@@ -172,6 +172,7 @@ sendvoicemail=yes ; Context to Send voicemail from [option 5 from the advanced m
; This does NOT affect option 3,3 from the advanced options menu
; delete=yes ; After notification, the voicemail is deleted from the server. [per-mailbox only]
; This is intended for use with users who wish to receive their voicemail ONLY by email.
; Note: deletevoicemail is provided as an equivalent option for Realtime configuration.
; nextaftercmd=yes ; Skips to the next message after hitting 7 or 9 to delete/save current message.
; [global option only at this time]
; forcename=yes ; Forces a new user to record their name. A new user is

View File

@@ -11,6 +11,8 @@ separated text file.
for an updated list of supported databases, from MySQL to MsSQL
and text files.
* cdr_tds supports FreeTDS databases (Among them MS SQL)
NOTE: Please read README.tds for information on possible
problems with the FreeTDS driver
* cdr_sqlite supports SQlite
* cdr_pgsql supports PostgreSQL
@@ -39,28 +41,28 @@ channel configuration files, like sip.conf, iax.conf etc.
Fields of the CDR in Asterisk
-----------------------------
1. accountcode: What account number to use, (string, 20 characters)
2. src: Caller*ID number (string, 80 characters)
3. dst: Destination extension (string, 80 characters)
4. dcontext: Destination context (string, 80 characters)
5. clid: Caller*ID with text (80 characters)
6. channel: Channel used (80 characters)
7. dstchannel: Destination channel if appropriate (80 characters)
8. lastapp: Last application if appropriate (80 characters)
9. lastdata: Last application data (arguments) (80 characters)
10. start: Start of call (date/time)
11. answer: Answer of call (date/time)
12. end: End of call (date/time)
13. duration: Total time in system, in seconds (integer), from dial to hangup
14. billsec: Total time call is up, in seconds (integer), from answer to hangup
15. disposition: What happened to the call: ANSWERED, NO ANSWER, BUSY
16. amaflags: What flags to use: DOCUMENTATION, BILL, IGNORE etc,
specified on a per channel basis like accountcode.
17. user field: A user-defined field, maximum 255 characters
1. accountcode: What account number to use, (string, 20 characters)
2. src: Caller*ID number (string, 80 characters)
3. dst: Destination extension (string, 80 characters)
4. dcontext: Destination context (string, 80 characters)
5. clid: Caller*ID with text (80 characters)
6. channel: Channel used (80 characters)
7. dstchannel: Destination channel if appropriate (80 characters)
8. lastapp: Last application if appropriate (80 characters)
9. lastdata: Last application data (arguments) (80 characters)
10. start: Start of call (date/time)
11. answer: Answer of call (date/time)
12. end: End of call (date/time)
13. duration: Total time in system, in seconds (integer), from dial to hangup
14. billsec: Total time call is up, in seconds (integer), from answer to hangup
15. disposition: What happened to the call: ANSWERED, NO ANSWER, BUSY
16. amaflags: What flags to use: DOCUMENTATION, BILL, IGNORE etc,
specified on a per channel basis like accountcode.
17. user field: A user-defined field, maximum 255 characters
In some cases, uniqueid is appended:
* uniqueid: Unique Channel Identifier (32 characters)
* uniqueid: Unique Channel Identifier (32 characters)
This needs to be enabled in the source code at compile time

View File

@@ -48,8 +48,12 @@ static char *function_fieldqty(struct ast_channel *chan, char *cmd, char *data,
if (delim) {
varname = strsep(&delim, "|");
pbx_retrieve_variable(chan, varname, &varval, workspace, sizeof(workspace), NULL);
while (strsep(&varval, delim))
fieldcount++;
if (delim) {
while (strsep(&varval, delim))
fieldcount++;
} else if (!ast_strlen_zero(varval)) {
fieldcount = 1;
}
snprintf(buf, len, "%d", fieldcount);
} else {
ast_log(LOG_ERROR, "Out of memory\n");

View File

@@ -100,6 +100,11 @@ void ast_rtp_get_peer(struct ast_rtp *rtp, struct sockaddr_in *them);
void ast_rtp_get_us(struct ast_rtp *rtp, struct sockaddr_in *us);
#ifdef MIDCOM
void ast_rtp_nat_us(struct ast_rtp *rtp, struct sockaddr_in *our_nat);
void ast_rtp_get_their_nat(struct ast_rtp *rtp, struct sockaddr_in *their_nat);
#endif
void ast_rtp_destroy(struct ast_rtp *rtp);
void ast_rtp_reset(struct ast_rtp *rtp);

View File

@@ -457,8 +457,8 @@ static int ast_resource_exists(char *resource)
static const char *loadorder[] =
{
"res_",
"chan_",
"pbx_",
"chan_",
NULL,
};

View File

@@ -461,8 +461,8 @@ int reload_logger(int rotate)
filesize_reload_needed = 0;
queue_log_init();
init_logger_chain();
queue_log_init();
if (logfiles.event_log) {
if (eventlog) {
@@ -589,12 +589,12 @@ int init_logger(void)
ast_cli_register(&rotate_logger_cli);
ast_cli_register(&logger_show_channels_cli);
/* initialize queue logger */
queue_log_init();
/* create log channels */
init_logger_chain();
/* initialize queue logger */
queue_log_init();
/* create the eventlog */
if (logfiles.event_log) {
mkdir((char *)ast_config_AST_LOG_DIR, 0755);

2
pbx.c
View File

@@ -2029,7 +2029,7 @@ int ast_extension_state_del(int id, ast_state_cb_type callback)
cblist = cblist->next;
}
ast_mutex_lock(&hintlock);
ast_mutex_unlock(&hintlock);
return -1;
}

View File

@@ -1280,10 +1280,12 @@ int ast_bridge_call(struct ast_channel *chan,struct ast_channel *peer,struct ast
if (!(monitor_app = pbx_findapp("Monitor")))
monitor_ok=0;
}
if ((monitor_exec = pbx_builtin_getvar_helper(chan, "AUTO_MONITOR")))
pbx_exec(chan, monitor_app, monitor_exec, 1);
else if ((monitor_exec = pbx_builtin_getvar_helper(peer, "AUTO_MONITOR")))
pbx_exec(peer, monitor_app, monitor_exec, 1);
if (monitor_app) {
if ((monitor_exec = pbx_builtin_getvar_helper(chan, "AUTO_MONITOR")))
pbx_exec(chan, monitor_app, monitor_exec, 1);
else if ((monitor_exec = pbx_builtin_getvar_helper(peer, "AUTO_MONITOR")))
pbx_exec(peer, monitor_app, monitor_exec, 1);
}
}
set_config_flags(chan, peer, config);

23
rtp.c
View File

@@ -125,6 +125,10 @@ struct ast_rtp {
int rtp_lookup_code_cache_code;
int rtp_lookup_code_cache_result;
int rtp_offered_from_local;
#ifdef MIDCOM
struct sockaddr_in them_midcom_nat;
#endif
struct ast_rtcp *rtcp;
};
@@ -1041,6 +1045,20 @@ void ast_rtp_get_us(struct ast_rtp *rtp, struct sockaddr_in *us)
memcpy(us, &rtp->us, sizeof(rtp->us));
}
#ifdef MIDCOM /* RANCH */
void ast_rtp_nat_us(struct ast_rtp *rtp, struct sockaddr_in *our_nat)
{
memcpy(&rtp->them_midcom_nat, our_nat, sizeof(rtp->them_midcom_nat));
}
void ast_rtp_get_their_nat(struct ast_rtp *rtp, struct sockaddr_in *their_nat)
{
their_nat->sin_family = AF_INET;
their_nat->sin_port = rtp->them_midcom_nat.sin_port;
their_nat->sin_addr = rtp->them_midcom_nat.sin_addr;
}
#endif
void ast_rtp_stop(struct ast_rtp *rtp)
{
memset(&rtp->them.sin_addr, 0, sizeof(rtp->them.sin_addr));
@@ -1515,7 +1533,6 @@ enum ast_bridge_result ast_rtp_bridge(struct ast_channel *c0, struct ast_channel
struct sockaddr_in t0, t1;
struct sockaddr_in vt0, vt1;
char iabuf[INET_ADDRSTRLEN];
void *pvt0, *pvt1;
int codec0,codec1, oldcodec0, oldcodec1;
@@ -1670,8 +1687,12 @@ enum ast_bridge_result ast_rtp_bridge(struct ast_channel *c0, struct ast_channel
if (option_debug) {
ast_log(LOG_DEBUG, "Oooh, '%s' changed end address to %s:%d (format %d)\n",
c0->name, ast_inet_ntoa(iabuf, sizeof(iabuf), t0.sin_addr), ntohs(t0.sin_port), codec0);
ast_log(LOG_DEBUG, "Oooh, '%s' changed end vaddress to %s:%d (format %d)\n",
c0->name, ast_inet_ntoa(iabuf, sizeof(iabuf), vt0.sin_addr), ntohs(vt0.sin_port), codec0);
ast_log(LOG_DEBUG, "Oooh, '%s' was %s:%d/(format %d)\n",
c0->name, ast_inet_ntoa(iabuf, sizeof(iabuf), ac0.sin_addr), ntohs(ac0.sin_port), oldcodec0);
ast_log(LOG_DEBUG, "Oooh, '%s' wasv %s:%d/(format %d)\n",
c0->name, ast_inet_ntoa(iabuf, sizeof(iabuf), vac0.sin_addr), ntohs(vac0.sin_port), oldcodec0);
}
if (pr1->set_rtp_peer(c1, t0.sin_addr.s_addr ? p0 : NULL, vt0.sin_addr.s_addr ? vp0 : NULL, codec0, ast_test_flag(p0, FLAG_NAT_ACTIVE)))
ast_log(LOG_WARNING, "Channel '%s' failed to update to '%s'\n", c1->name, c0->name);

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -331,6 +331,7 @@ static int show_translation(int fd, int argc, char *argv[])
if (argc > 4)
return RESULT_SHOWUSAGE;
ast_mutex_lock(&list_lock);
if (argv[2] && !strcasecmp(argv[2],"recalc")) {
z = argv[3] ? atoi(argv[3]) : 1;
@@ -349,7 +350,6 @@ static int show_translation(int fd, int argc, char *argv[])
ast_cli(fd, " Translation times between formats (in milliseconds)\n");
ast_cli(fd, " Source Format (Rows) Destination Format(Columns)\n\n");
ast_mutex_lock(&list_lock);
for (x = -1; x < SHOW_TRANS; x++) {
/* next 2 lines run faster than using strcpy() */
line[0] = ' ';