Compare commits

..

1264 Commits

Author SHA1 Message Date
Leif Madsen
5c2151c9fd Importing release summary for 1.2.40 release.
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/1.2.40@247515 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2010-02-18 17:02:19 +00:00
Leif Madsen
1ed83f02b4 Importing files for 1.2.40 release.
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/1.2.40@247514 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2010-02-18 17:02:13 +00:00
Leif Madsen
7b5998d403 Creating tag for the release of asterisk-1.2.40
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/1.2.40@247513 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2010-02-18 17:01:22 +00:00
Leif Madsen
7a8cc66e30 Add additional link to best practices document per jsmith.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@247507 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2010-02-18 16:53:01 +00:00
Leif Madsen
3e6b299656 Add best practices documentation.
(closes issue #16808)
Reported by: lmadsen

(closes issue #16810)
Reported by: Nick_Lewis
Tested by: lmadsen

Review: https://reviewboard.asterisk.org/r/507/

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@247501 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2010-02-18 16:35:30 +00:00
Tilghman Lesher
5fc112b07e AST-2010-002: Backport FILTER() function to 1.2, as it needed for the suggested solution.
Review: http://reviewboard.digium.internal/r/31/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@247081 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2010-02-17 00:09:21 +00:00
David Vossel
3489410e0d fixes regression caused by randomized call numbers.
(closes issue 0015997)
    Reported by: exarv
    Patches:
          iax_fix.diff uploaded by dvossel (license 671)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@245874 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2010-02-09 23:35:55 +00:00
David Vossel
d45abc9ef4 fixes crash caused by RTP comfort noise payload greater than 24 bytes
AST-2009-010

(closes issue #16242)
Reported by: amorsen
Patches:
      issue16242.diff uploaded by oej (license 306)
Tested by: amorsen, oej, dvossel


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@231518 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-11-30 17:35:48 +00:00
David Vossel
e1a27ddc08 don't crash on log message in solaris
AST-2009-006

(closes issue 0016206)
Reported by: bklang
Tested by: bklang


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@229235 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-11-10 18:01:41 +00:00
Joshua Colp
fe80ce7e5d Fix a security issue where sending a REGISTER with a differing username in the From
URI and Authorization header would reveal whether it was valid or not.

(AST-2009-008)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@227698 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-11-04 19:16:33 +00:00
Tilghman Lesher
78130b6b77 Days are days of month, not days of week.
Fixes regression due to AST-2009-005.
(closes issue #15765)
 Reported by: hooi
 Patches: 
       20090825__issue15765.diff.txt uploaded by tilghman (license 14)
 Tested by: nic_bellamy


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@221754 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-10-01 21:20:17 +00:00
David Vossel
6cab7dba9d IAX2 encryption regression
The IAX2 Call Token security patch inadvertently broke the use of
encryption due to the reorganization of code in the socket_process()
function.  When encryption is used, an incoming full frame must first
be decrypted before the information elements can be parsed.  The
security release mistakenly moved IE parsing before decryption in
order to process the new Call Token IE.  To resolve this, decryption
of full frames is once again done before looking into the frame.  This
involves searching for an existing callno, checking the pvt to see if
encryption is turned on, and decrypting the packet before the internal
fields of the full frame are accessed.

associated with AST-2009-006

(closes issue #15834)
Reported by: karesmakro
Patches:
      iax2_encryption_fix_1.4.diff uploaded by dvossel (license 671)
Tested by: dvossel, karesmakro

Review: https://reviewboard.asterisk.org/r/355/



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@217887 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-09-10 22:20:57 +00:00
Russell Bryant
42555c22d3 Add a plain text version of the IAX2 security document.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@216262 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-09-04 10:47:37 +00:00
Russell Bryant
a84fc48984 Fix a typo.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@216087 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-09-03 19:37:05 +00:00
Russell Bryant
0a5c91de26 Add a note about IAX2 to UPGRADE.txt.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@216080 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-09-03 19:35:23 +00:00
Russell Bryant
3fa8ad9c7d Add IAX2 security document related to AST-2009-006.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@216005 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-09-03 18:42:24 +00:00
David Vossel
6732590f86 Merge code associated with AST-2009-006
(closes issue #12912)
Reported by: rathaus
Tested by: tilghman, russell, dvossel, dbrooks



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@215958 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-09-03 16:57:35 +00:00
Kevin P. Fleming
cc0350b8ce Convert this branch 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/branches/1.2@212907 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-08-18 20:24:28 +00:00
Kevin P. Fleming
542ca7ab3a remove extraneous property
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@212903 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-08-18 20:23:22 +00:00
Tilghman Lesher
4f69043680 Oops, removing properties
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@211527 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-08-10 19:13:19 +00:00
Tilghman Lesher
2581eeb8e8 AST-2009-005
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@211526 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-08-10 19:12:35 +00:00
Russell Bryant
5f4befcba9 Ensure apathetic replies are sent out on the proper socket.
chan_iax2 supports multiple address bindings.  The send_apathetic_reply()
function did not attempt to send its response on the same socket that the
incoming message came in on.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@206384 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-07-14 14:45:47 +00:00
David Vossel
c59f154763 Additional updates to AST-2009-001
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@199137 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-06-04 18:57:54 +00:00
David Vossel
a989a2432a IAX2 REGAUTH loop
IAX was not sending REGREJ to terminate invalid registrations.  Instead it sent another REGAUTH if the authentication challenge failed.  This caused a loop of REGREQ and REGAUTH frames.  This patch also fixes some compile errors that occured using gcc v4.3.2.

(Related to Security fix AST-2009-001)

(closes issue #14386)
Reported by: sabbathbh



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@194878 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-05-15 22:59:16 +00:00
Tilghman Lesher
be05c4a246 Fix for AST-2009-003
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@186056 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-04-02 17:02:18 +00:00
Tilghman Lesher
6e820514a9 Updates to AST-2009-001
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@170580 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-01-23 19:19:06 +00:00
Tilghman Lesher
a37491c125 1.2 regression on security fix AST-2009-001
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@168632 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-01-15 01:15:49 +00:00
Kevin P. Fleming
27af3cf46a add license for Allison Smith prompts (AST-162)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@168197 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-01-09 22:10:23 +00:00
Tilghman Lesher
4ed56df62c Security fix AST-2009-001.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@167259 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-01-06 20:44:03 +00:00
Tilghman Lesher
f42ada7a25 Fix for AST-2008-012
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@162868 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-12-10 21:06:44 +00:00
Sean Bright
84c5074ec3 Fix build errors on FreeBSD (uint -> unsigned int).
(closes issue #14006)
Reported by: alphaque
Patches:
      astobj2.h-patch uploaded by alphaque (license 259)
      (Slightly modified by seanbright)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@161421 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-12-05 20:50:23 +00:00
Tilghman Lesher
932f5ca647 Regression fix for last security fix. Set the iseqno correctly.
(closes issue #13918)
 Reported by: ffloimair
 Patches: 
       20081119__bug13918.diff.txt uploaded by Corydon76 (license 14)
 Tested by: ffloimair


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@159245 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-11-25 21:37:06 +00:00
Tilghman Lesher
71fdd7d526 Regression fixes for Solaris
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@136945 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-08-09 15:24:36 +00:00
Russell Bryant
643879cabc Fix the IAX2 URI for calling Digium
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@133577 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-07-25 15:00:13 +00:00
Tilghman Lesher
703220f1f4 This part was not correctly patched for AST-2008-010.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@133360 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-07-24 03:46:01 +00:00
Tilghman Lesher
27290e8976 Fixes for AST-2008-010 and AST-2008-011
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@132711 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-07-22 21:14:10 +00:00
Joshua Colp
ec11516f11 Copy the From header into a variable so that pedantic SIP handling does not try to mess with a NULL pointer. (AST-2008-008)
(closes issue #12607)
Reported by: hooi


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@120109 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-06-03 19:30:02 +00:00
Russell Bryant
43ea28d8f6 - Instead of only enforcing destination call number checking on an ACK, check
all full frames except for PING and LAGRQ, which may be sent by older versions
  too quickly to contain the destination call number.
  (As suggested by Tim Panton on the asterisk-dev list)
- Merge changes from team/russell/iax2-frame-race, which prevents PING and LAGRQ
  from being sent before the destination call number is known.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@119237 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-05-30 12:49:39 +00:00
Russell Bryant
ef549fe985 Merge changes from team/russell/iax2-another-fix-to-the-fix
As described in the following post to the asterisk-dev mailing list, only
enforce destination call numbers when processing an ACK.

http://lists.digium.com/pipermail/asterisk-dev/2008-May/033217.html


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@119008 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-05-29 18:45:21 +00:00
Russell Bryant
40520cc2a4 Fix a race condition that bbryant just found while doing some IAX2 testing.
He was running Asterisk trunk running IAX2 calls through a few Asterisk boxes,
however, the audio was extremely choppy.  We looked at a packet trace and saw
a storm of INVAL and VNAK frames being sent from one box to another.

It turned out that what had happened was that one box tried to send a CONTROL
frame before the 3 way handshake had completed.  So, that frame did not include
the destination call number, because it didn't have it yet.  Part of our recent
work for security issues included an additional check to ensure that frames that
are supposed to include the destination call number have the correct one.  This
caused the frame to be rejected with an INVAL.  The frame would get retransmitted
for forever, rejected every time ...

This race condition exists in all versions that got the security changes,
in theory.  However, it is really only likely that this would cause a problem in
Asterisk trunk.  There was a control frame being sent (SRCUPDATE) at the _very_
beginning of the call, which does not exist in 1.2 or 1.4.  However, I am fixing
all versions that could potentially be affected by the introduced race condition.

These changes are what bbryant and I came up with to fix the issue.  Instead of
simply dropping control frames that get sent before the handshake is complete,
the code attempts to wait a little while, since in most cases, the handshake
will complete very quickly.  If it doesn't complete after yielding for a little
while, then the frame gets dropped.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@115564 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-05-08 19:14:04 +00:00
Russell Bryant
c5c3cb32f1 Remove remnants of dlinkedlists. I didn't actually use them in the final version
of my IAX2 improvements.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@115511 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-05-07 16:22:49 +00:00
Jason Parker
3ce33b090c read requires an argument on some non-bash shells
(closes issue #12593)
Reported by: bkruse
Patches:
      getilbc.sh_12593_v1.diff uploaded by bkruse (license 132)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@115421 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-05-06 19:54:57 +00:00
Russell Bryant
f8d551bd2b Merge changes from team/russell/iax2_find_callno_1.2
These changes address a critical performance issue introduced in the latest
release.  The fix for the latest security issue included a change that made
Asterisk randomly choose call numbers to make them more difficult to guess by
attackers.  However, due to some inefficient (this is by far, an understatement)
code, when Asterisk chose high call numbers, chan_iax2 became unusable after
just a small number of calls.  On a small embedded platform, it would not be
able to handle a single call.  On my Intel Core 2 Duo @ 2.33 GHz, I couldn't
run more than about 16 IAX2 channels.  Ouch.

These changes address some performance issues of the find_callno() function
that have bothered me for a very long time.  On every incoming media frame,
it iterated through every possible call number trying to find a matching
active call.  This involved a mutex lock and unlock for each call number
checked.  So, if the random call number chosen was 20000, then every media
frame would cause 20000 locks and unlocks.  Previously, this problem was
not as obvious since Asterisk always chose the lowest call number it could.

A second container for IAX2 pvt structs has been added.  It is an astobj2
hash table.  When we know the remote side's call number, the pvt goes into
the hash table with a hash value of the remote side's call number.  Then,
lookups for incoming media frames are a very fast hash lookup instead of an
absolutely insane array traversal.

In a quick test, I was able to get more than 3600% more IAX2 channels
on my machine with these changes.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@115296 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-05-05 17:53:26 +00:00
Kevin P. Fleming
a698166af0 stop script from appending source code if run multiple times
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@114822 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-04-29 12:52:32 +00:00
Russell Bryant
38419fb811 When we receive a full frame that is supposed to contain our call number,
ensure that it has the correct one.
(closes issue #10078)
(AST-2008-006)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@114561 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-04-22 22:20:35 +00:00
Kevin P. Fleming
8f7422b931 update UPGRADE notes to document usage of the script
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@111125 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-03-26 19:49:30 +00:00
Kevin P. Fleming
1501383484 add a script to make getting the iLBC source code simple for end users
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@111019 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-03-26 18:58:37 +00:00
Kevin P. Fleming
3c780866b3 due to licensing restrictions, we cannot distribute the source code for iLBC encoding and decoding... so remove it, and add instructions on how the user can obtain it themselves
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@110869 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-03-26 15:53:46 +00:00
Russell Bryant
62766834c8 Fix some very broken code that was introduced in 1.2.26 as a part of the security
fix.  The dnsmgr is not appropriate here.  The dnsmgr takes a pointer to an address
structure that a background thread continuously updates.  However, in these cases,
a stack variable was passed.  That means that the dnsmgr thread would be continuously
writing to bogus memory.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@110335 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-03-20 21:53:27 +00:00
Terry Wilson
53ca368854 Fix character string being treated as format string
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@109488 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-03-18 16:27:04 +00:00
Jason Parker
866bf7984a Do not return with a successful authentication if the From header ends up empty.
(AST-2008-003)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@109391 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-03-18 15:08:41 +00:00
Russell Bryant
dd7fd5e641 Change misery.digium.com to pbx.digium.com
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@96931 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-01-07 20:46:22 +00:00
Tilghman Lesher
47b472894b Fix for fix for security fix (third time's the charm?)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@94661 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-12-23 01:30:42 +00:00
Russell Bryant
4208af2204 Fix another potential seg fault ...
(closes issue #11606)
Reported by: dimas


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@94255 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-12-20 20:21:41 +00:00
Russell Bryant
04e4f3d345 Fix a couple of places where it's possible to dereference a NULL pointer.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@94214 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-12-20 17:29:11 +00:00
Tilghman Lesher
0f7afb14e4 Oops, missed this one case
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@93675 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-12-18 18:44:41 +00:00
Tilghman Lesher
1e6902b29d Fixing AST-2007-027 (Closes issue #11119)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@93667 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-12-18 18:23:06 +00:00
Tilghman Lesher
1897d857f0 Properly escape src and dst fields (Fixes AST-2007-026)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@90170 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-11-29 21:10:45 +00:00
Kevin P. Fleming
c58235bed4 clarify the OpenSSL and OpenH323 license exceptions
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@82334 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-09-13 18:10:12 +00:00
Russell Bryant
0edee75c07 Revert patch committed for issue #9660. It broke E&M trunks.
(closes issue #10360)
(closes issue #10364)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@78370 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-08-07 17:44:04 +00:00
Steve Murphy
726fa701da This patch hopefully solves 10141; The user is running with it, and it doesn't appear to harm asterisk's operation, and may prevent a crash. I'll store it in 1.2, as we have shut down support on 1.2, but since I developed the patch before support finished, and it might affect 1.4 and trunk, I'm going ahead with it.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@77942 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-08-02 17:56:37 +00:00
Steve Murphy
330090142f This probably isn't super-general, but it's a first stab at using kill -11 to generate a core file instead of gcore.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@77842 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-31 19:19:35 +00:00
Tilghman Lesher
2cdedcbe94 Revert change in revision 71656, even though it fixed a bug, because many people were depending upon the (broken) behavior.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@77782 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-30 18:40:54 +00:00
Joshua Colp
ea98dd3dfc (closes issue #10334)
Reported by: ramonpeek
Pass through the return value from macro_exec through the MacroIf application.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@77767 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-30 14:50:02 +00:00
Steve Murphy
32ade7d7fc this fixes bug 10293, where the error message because defaultzone or loadzone was not defined was confusing
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@76978 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-25 00:07:24 +00:00
Tilghman Lesher
325bfeeda5 Oops, res contains the error code, not errno. I was wondering why a mutex was reporting "No such file or directory"...
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@76934 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-24 22:11:33 +00:00
Jason Parker
f95db061fd Don't create the Asterisk channel until we are starting the PBX on it.
(ASA-2007-018)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@76802 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-24 16:32:04 +00:00
Joshua Colp
a62bba55d8 (closes issue #5866)
Reported by: tyler
Do not force channel format changes when a generator is present. The generator may have changed the formats itself and changing them back would cause issues.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@76653 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-23 18:28:13 +00:00
Joshua Colp
2405536de9 (closes issue #10236)
Reported by: homesick
Patches:
      rpid_1.4_75840.patch uploaded by homesick (license 91)
Accept Remote Party ID on guest calls.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@76560 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-23 14:32:07 +00:00
Tilghman Lesher
44b5abf39f We should not use C++ reserved words in API headers (closes issue #10266)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@76409 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-22 21:39:55 +00:00
Russell Bryant
831ebbebb7 Backport a fix for a memory leak that was fixed in trunk in reivision 76221
by rizzo.  The memory used for the localaddr list was not freed during a
configuration reload.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@76226 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-21 02:01:46 +00:00
Joshua Colp
a7047b7ed5 (closes issue #10247)
Reported by: fkasumovic
Patches:
      chan_sip.patch uploaded by fkasumovic (license #101)
Drop any peer realm authentication entries when reloading so multiple entries do not get added to the peer.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@76080 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-20 17:16:48 +00:00
Russell Bryant
9df29ba46f When processing full frames, take sequence number wraparound into account when
deciding whether or not we need to request retransmissions by sending a VNAK.
This code could cause VNAKs to be sent erroneously in some cases, and to not
be sent in other cases when it should have been.
(closes issue #10237, reported and patched by mihai)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@75927 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-19 15:49:42 +00:00
Russell Bryant
6b5a7a6f64 When traversing the queue of frames for possible retransmission after
receiving a VNAK, handle sequence number wraparound so that all frames that 
should be retransmitted actually do get retransmitted.
(issue #10227, reported and patched by mihai)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@75757 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-18 21:09:13 +00:00
Tilghman Lesher
dc4a74f57f Store prior to copy (closes issue #10193)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@75748 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-18 20:31:36 +00:00
Dwayne M. Hubbard
dd77af3fe3 removed the word 'pissed' from ast_log(...) function call for BE-90
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@75657 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-18 17:48:33 +00:00
Russell Bryant
d359de6edb Properly check for the length in the skinny packet to prevent an invalid memcpy.
(ASA-2007-016)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@75449 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-17 20:57:09 +00:00
Russell Bryant
d0b4144eb4 Ensure that when encoding the contents of an ast_frame into an iax_frame, that
the size of the destination buffer is known in the iax_frame so that code
won't write past the end of the allocated buffer when sending outgoing frames.
(ASA-2007-014)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@75444 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-17 20:45:27 +00:00
Russell Bryant
d2cb9b0d3b After parsing information elements in IAX frames, set the data length to zero,
so that code later on does not think it has data to copy.
(ASA-2007-015)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@75440 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-17 20:41:41 +00:00
Kevin P. Fleming
6fc518335e provide proper copyright/license attribution for this structure that was copied from a BSD-licensed header file long, long ago...
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@75304 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-16 20:46:58 +00:00
Kevin P. Fleming
ffae2ad2fa install the LICENSE file along with the music files
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@75257 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-16 18:33:02 +00:00
Kevin P. Fleming
e38a7d523c move FreePlayMusic files into a subdirectory, and include a license statement for them
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@75251 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-16 18:10:40 +00:00
Russell Bryant
8e7cb1aa7a Fix a couple potential minor memory leaks. load_moh_classes() could return
without destroying the loaded configuration.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@75107 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-13 20:35:22 +00:00
Mark Michelson
a8d3745147 Fixed an issue where chanspy flags were uninitialized if no options were passed.
What triggered this investigation was an IRC chat where some people's quiet flags were
set while others' weren't even though none of them had specified the q option.



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@75066 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-13 20:10:39 +00:00
Russell Bryant
ab2a84f410 Ensure that adding a user to the list of users of a specific music on hold
class is not done at the same time as any of the other operations on this list
to prevent list corruption.  Using the global moh_data lock for this is not
ideal, but it is what is used to protect these lists everywhere else in the
module, and I am only changing what is necessary to fix the bug.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@75059 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-13 20:07:21 +00:00
Russell Bryant
460df0480b (closes issue #9660)
Reported by: mmacvicar
Patches submitted by: bbryant, russell
Tested by: mmacvicar, marco, arcivanov, jmhunter, explidous

When using a TDM400P (and probably other analog cards) there was a chance that
you could hang up and pick the phone back up where it has been long enough to
be not considered a flash hook, but too soon such that the device reports that
it is busy and the person on the phone will only hear silence.  This patch
makes chan_zap more tolerant of this and gives the device a couple of seconds 
to succeed so the person on the phone happily gets their dialtone.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@75052 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-13 19:10:00 +00:00
Joshua Colp
577c0ebedd Only print out a warning for situations where it is actually helpful. (issue #10187 reported by denke)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@74814 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-12 15:51:24 +00:00
Russell Bryant
2c757b4ab7 The function make_trunk() can fail and return -1 instead of a valid new call
number.  Fix the uses of this function to handle this instead of treating it
as the new call number.  This would cause a deadlock and memory corruption.
(possible cause of issue #9614 and others, patch by me)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@74766 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-11 22:53:26 +00:00
Mark Michelson
140c936792 The cli command "agent logoff Agent/x soft" did not work...at all. Now it does.
(closes issue #10178, reported and patched by makoto, with slight modification for 1.4 and trunk by me)



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@74719 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-11 21:12:30 +00:00
Russell Bryant
4307bca95c Make sure that the ESCAPE immediately follows the condition that uses LIKE.
This fixes realtime extensions with ODBC.
(closes issue #10175, reported by stuarth, patch by me)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@74656 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-11 18:33:23 +00:00
Joshua Colp
7055d9fe45 Use some Makefile magic to determine if linux/compiler.h is present. (issue #10174 reported by francesco_r)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@74587 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-11 17:15:11 +00:00
Jason Parker
01412290a2 Fix an issue where it was possible to have a service level of over 100%
Between the time recalc_holdtime and update_queue was called, it was possible that the call could have been hungup.
Move both additions to the same place, so this won't happen.

Issue 10158, initial patch by makoto, modified by me.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@74427 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-10 19:57:20 +00:00
Jason Parker
5dd56e420c Fix an issue with wrapuptime not working when using AgentLogin.
Issue 10169, patch by makoto, with a minor mod by me to not re-break issue 9618


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@74376 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-10 19:03:45 +00:00
Jason Parker
71fa9ce0c4 Use res_ndestroy on systems that have it. Otherwise, use res_nclose.
This prevents a memleak on NetBSD - and possibly others.

Issue 10133, patch by me, reported and tested by scw


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@74373 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-10 18:37:23 +00:00
Jason Parker
c908fb91d1 Fix a small typo in description in of Voicemail() application.
Issue 10170, patch by casper.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@74316 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-10 15:37:54 +00:00
Russell Bryant
abf682606c Only use ESCAPE when LIKE is used.
(issue #10075, this part reported by jmls on IRC, patch by me)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@74313 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-10 15:30:20 +00:00
Joshua Colp
abcb24bd12 Ensure the group information category exists before trying to do a string comparison with it. (issue #10171 reported by mlegas)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@74264 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-10 14:48:00 +00:00
Russell Bryant
319b105e17 When the specified class isn't found, properly fall back to the channel's music
class or the default.
(issue #10123, reported by blitzrage, patches from juggie, qwell, and me)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@74165 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-09 21:00:17 +00:00
Jason Parker
29da454042 Several chan_zap options were not working on reload because they were arbitrarily
disallowed when reloading some/most PRI options (such as signalling) was disallowed.

Options such as polarityonanswerdelay and answeronpolarityswitch can safely be changed on a reload.
This corrects that behavior.

Issue 9186, patch by tzafrir.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@74158 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-09 20:18:15 +00:00
Russell Bryant
0a22a51525 If a sip_pvt struct has already registered an extension state callback,
remove the old one before adding a new one.  If this isn't done, Asterisk
will crash.  (issue #10120)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@73768 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-06 23:01:22 +00:00
Russell Bryant
5e8172892e (closes issue #10075)
Reported by: apsaras
Patches submitted by: Corydon76
Tested by: apsaras

Fix a problem with MSSQL 2005 by explicitly stating that '\' is being used as
an escape character.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@73684 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-06 16:06:27 +00:00
Russell Bryant
ed261253d5 (closes issue #10125)
Reported by: makoto
Patches submitted by: makoto

This fixes a crash in chan_sip that happens when the bindaddr setting is not
valid on Asterisk startup, gets fixed, and then a reload gets issued.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@73678 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-06 15:55:41 +00:00
Mark Michelson
3735871ed4 Fixed a bug wherein agents get stuck busy. (issue 9618, reported by jiddings, patched by moi)
closes issue #9618



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@73674 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-06 15:26:40 +00:00
Kevin P. Fleming
585de1223e we shouldn't allow G.723.1 endpoints to use VAD, just like we don't support it for G.729
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@73547 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-05 22:11:51 +00:00
Joshua Colp
0b2c98ac3e Copy language information to the dialog structure when calling a peer for situations where a PBX may be started on the dialed channel. (issue #10121 reported by clegall_proformatique)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@73466 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-05 19:15:18 +00:00
Joshua Colp
e32e830419 Tweak spy locking. (issue #9951 reported by welles)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@73349 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-05 14:19:14 +00:00
Joshua Colp
1dc2b9c0f7 Actually check to make sure a PBX was started on one of the Local channels instead of blindly assuming it was. (issue #10112 reported by makoto)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@73318 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-05 13:26:02 +00:00
Joshua Colp
bf7b174b08 Reset ServicelevelPerf variable back to 0 if we are unable to calculate it each time... otherwise we will get previous values. (issue #10117 reported by noriyuki)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@73315 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-05 13:19:17 +00:00
Christian Richter
ce99e9d955 bchannel configurations like echocancel and volume control, need to be setuped on inbound calls too.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@73252 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-04 14:50:58 +00:00
Christian Richter
479d7e4738 bad bug in overlapdial case, we called start_pbx multiple times, because the state wasn't changed..
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@73207 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-04 08:20:54 +00:00
Tilghman Lesher
ff1c0bfa20 RetryDial should accept a 0 argument, but it does not, because atoi does not distinguish between 0 and error (closes issue #10106)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@73052 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-03 12:34:14 +00:00
Christian Richter
2676d6c595 fixed issue, that misdn_l2l1_check could only be called from mISDN Source channels.. #9449
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@73004 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-03 08:04:35 +00:00
Jason Parker
d60de2804e Fix an issue with playing "oclock" multiple times in French with 24 hour time format.
Issue 10101


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@72924 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-02 17:58:25 +00:00
Russell Bryant
4dfa0b47a7 When appending lines to call files to keep track of retries, write a leading
newline just in case the original call file did not have a newline at the end.
This fix is in response to a problem I saw reported on the asterisk-users
mailing list.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@72805 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-01 23:51:34 +00:00
Russell Bryant
defd4eb3e2 Backport changes that make chan_iax2 not start the PBX on an incoming channel
until the three-way call setup is completed.  These changes are already in 1.4
and trunk.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@72629 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-29 16:30:56 +00:00
Christian Richter
fc4111b44f check if the bchannel stack id is already used, if so don't use it a second time. Also added a release_chan lock, so that the same chan_list object cannot be freed twice. chan_misdn does not crash anymore on heavy load with these changes.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@72585 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-29 13:08:26 +00:00
Joshua Colp
aac9dd609c Update documentation to clarify variable usage with MixMonitor. (issue #9494 reported by netoguy)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@72378 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-27 23:24:01 +00:00
Brett Bryant
dcdfb4aa89 Reinstating patch. This actually fixes the problem, however I was running a development branch without it and mistakenly thought it wasn't fixed.
Fixes issue #10010, and #9654: 100% CPU usage caused by an asterisk console losing it's controlling terminal.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@72373 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-27 23:22:13 +00:00
Brett Bryant
7b9318fedd Reverted changes for earlier revisions 72259 to 72261. Issue #9654, #10010
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@72333 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-27 22:58:53 +00:00
Joshua Colp
5c8b322f8d Fix issue where queue log events might be missing. (issue #7765 reported by mtryfoss)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@72327 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-27 22:43:11 +00:00
Russell Bryant
eeafa5951e Fix a minor issue with parsing the priority number. You could have as much
whitespace as you want around a numeric priority, but you couldn't have any
whitespace around a special priority like "n" or "hint".
(issue #10039, reported by mitheloc, fixed by me)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@72267 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-27 21:06:45 +00:00
Brett Bryant
89cc2e4b70 Fixes 100% load when controlling terminal disappears.
Issue #9654, #10010


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@72259 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-27 20:43:53 +00:00
Joshua Colp
2303602f15 I may possibly get shot for doing this... but... defer CDR processing until after the channel has been dealt with. This should eliminate all of the issues with channels going funky (SIP/PRI) when you are posting CDRs to a database that is either slow or unavailable and do not want to enable batching.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@72256 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-27 20:23:24 +00:00
Jason Parker
4ce4fe74ae Fix another problem in voicemail with missing symbols.
Issue 10074, patch by kryptolus, extended to include #if 0'd blocks (just in case)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@72184 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-27 18:40:15 +00:00
Christian Richter
3637816f4c simplified generation for dummy bchannels, also we mark them as dummies, so they are not used later as real-bchannels, optimized the RESTART mechanisms, we block a channel now on cause:44, and send out a RESTART automatically, then on reception of RESTART_ACKNOWLEDGE we unblock the channel again.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@72099 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-27 13:22:37 +00:00
Christian Richter
5f272436b9 simplified channel finding and locking a lot. removed unnecessary #ifdefed areas.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@72087 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-27 09:26:53 +00:00
Christian Richter
085065ac35 isdn_lib.c didn't compile
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@72041 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-27 07:54:30 +00:00
Christian Richter
16ecedee04 for inbound TE calls, we setup the bchannel when we get the CONNECT_ACKNOWLEDGE, to make sure mISDN has everything ready. removed some #if 0 areas which weren't used anymore.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@72040 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-27 07:49:27 +00:00
Jason Parker
c2cfb7ba64 Don't try to install an init script that doesn't exist.
Reported to me on #asterisk on Freenode IRC.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@71847 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-26 17:49:14 +00:00
Tilghman Lesher
8f2a415995 Issue 10062 - Trying to move a message without selecting one first results in memory corruption
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@71750 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-26 12:25:58 +00:00
Tilghman Lesher
5be40827e5 Issue 10035 - handle_exec returns a result inconsistent with all of the other AGI commands
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@71656 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-25 18:12:37 +00:00
Joshua Colp
76b4eb5daa Ignore other URIs after the first in a 300 Multiple Choice response. (issue #10041 reported by homesick)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@71414 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-25 01:02:49 +00:00
Russell Bryant
fb50a2da95 Revert the patch from issue 9654 due to an unexpected side effect
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@71358 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-24 20:04:21 +00:00
Tilghman Lesher
f7a787c757 Issue 10043 - There is a legitimate need to be able to set variables to the empty string.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@71288 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-24 17:32:21 +00:00
Joshua Colp
7e22d574a7 Send an unhold indication when going off hold. (issue #10036 reported by speedy)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@71124 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-22 16:02:40 +00:00
Jason Parker
01f5e6d56b Fix a few silly usages of ast_playstream() - it only ever returns 0...
Issue 10035


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@71065 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-22 14:52:18 +00:00
Brett Bryant
b9000f54b2 Fixed infinite loop when controlling terminal was lost
and return value of input function wasn't checked for
errors. This would cause 100% cpu to be taken up.

(closes issue #9654, issue #10010)
Reported by: mnicholson, and eserra

Idea for the patch from mnicholson, patched by me



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@71064 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-22 14:39:34 +00:00
Steve Murphy
c25932a107 This little fix is in response to bug 10016, but may not cure it. The code is wrong, clearly. In a situation where you set the CDR's amaflags, and then ForkCDR, and then set the new CDR's amaflags to some other value, you will see that all CDRs have had their amaflags changed. This is not good. So I fixed it.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@70948 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-21 22:29:50 +00:00
Joshua Colp
e179ccaff2 Don't explode if the gain option is specified without a value. (issue #9274 reported by mfarver)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@70898 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-21 21:37:55 +00:00
Steve Murphy
7a7b6536c7 it was pointed out that the cdr_custom config load could get a lock, and under certain circumstances, would never release it. I also noted that the situation where more than one mapping spec was warned about, but did not ignore further mappings as it had promised. I think I have fixed both situations.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@70804 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-21 19:13:17 +00:00
Christian Richter
d8d4454ae5 we activate the bchannels in TE mode on incoming calls only when we want to connect the call.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@70672 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-21 13:11:29 +00:00
Joshua Colp
6357ad5659 Don't overwrite the configured username setting upon a REGISTER. (issue #8565 reported by jsmith)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@70551 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-20 22:20:16 +00:00
Tilghman Lesher
a1cc9b4966 Issue 9997 - Timelimit times out the wrong channel
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@70444 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-20 19:25:54 +00:00
Russell Bryant
cfaead2b9c Fix a problem where an established call would not be properly disconnected
when a PRI disconnect is received depending on which cause code was received.
(issue #9588, original patch by softins, updated patch from jtexter3, and some
 additional feedback from mhardeman)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@70396 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-20 18:45:38 +00:00
Christian Richter
f5f018a209 forgot one place ..
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@70342 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-20 15:42:39 +00:00
Christian Richter
7fc236e53b fixed a bug that was introduced by copy and paste in the last commit ..bchannels weren't cleaned properly.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@70341 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-20 15:29:09 +00:00
Christian Richter
ede913f976 on receiption of cause:44 we mark the channel as in use and inform the user about the situation, we need to test the RESTART stuff then. Also shuffled the empty_chan_in_stack function after the bchannel cleaning functions, to avoid race conditions.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@70311 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-20 14:47:59 +00:00
Steve Murphy
8da289e13c This fixes 9246, where channel variables are not available in the 'h' exten, on a 'ZOMBIE' channel. The fix is to consolidate the channel variables during a masquerade, and then copy the merged variables back onto the clone, so the zombie has the same vars that the 'original' has.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@70053 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-19 18:07:59 +00:00
Joshua Colp
3d1a5f71c5 Handle the CC field in the RTP header. (issue #9384 reported by DoodleHu)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@69992 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-19 17:00:58 +00:00
Russell Bryant
6e0248318b Backport fix for crashes related to subscriptions from 1.4 ...
Fix a crash that could occur when handing device state changes.
When the state of a device changes, the device state thread tells the extension
state handling code that it changed.  Then, the extension state code calls the
callback in chan_sip so that it can update subscriptions to that extension.
A pointer to a sip_pvt structure is passed to this function as the call which
needs a NOTIFY sent.  However, there was no locking done to ensure that the pvt
struct didn't disappear during this process.
(issue #9946, reported by tdonahue, patch by me, patch updated to trunk to use
 the sip_pvt lock wrappers by eliel)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@69990 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-19 16:45:37 +00:00
Joshua Colp
07b9fc569f Update BRIDGEPEER variable if set to the new channel name when a masquerade happens. (issue #9699 reported by dimas)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@69986 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-19 16:21:29 +00:00
Joshua Colp
e21d079484 Perform an extra hangup check just in case. (issue #9589 reported by bcnit)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@69894 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-19 13:54:03 +00:00
Christian Richter
3322095dea when we send out a SETUP, but get no response, we should cleanup everything after reception of a hangup.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@69887 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-19 13:23:04 +00:00
Joshua Colp
234b7d22fe Add parked call extension AFTER the parking slot has been announced, otherwise two threads will try to handle the same channel and it will go kaboom. (issue #9191 reported by japple)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@69846 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-19 12:57:55 +00:00
Joshua Colp
dc41ce9857 Set the peer name on the dialog to the one configured in sip.conf and NOT the username to be used for authentication attempts. (issue #9967 reported by achauvin)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@69765 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-18 18:13:03 +00:00
Tilghman Lesher
ff8bb42cbc Issue 9998 - Remove SIG prefix, since it's not supported by ksh
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@69743 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-18 17:45:15 +00:00
Jason Parker
9aa74f204a Fix an issue where the line number in an unterminated comment block error message would show the wrong line number.
"Reported" to me on #asterisk (somebody posted an error message, and I happened to catch it)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@69469 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-14 23:21:45 +00:00
Russell Bryant
dc41cf2347 Backport rev 69010 from the 1.4 branch ...
In ast_channel_make_compatible(), just return if the channels' read and write
formats already match up.  There are code paths that call this function on a
pair of channels multiple times.  This made calls fail that were using g729
in some cases.  The reason is that codec_g729a will unregister itself from the
list of available translators will all licenses are in use.  So, the first
time the function got called, the right translation path was allocated.
However, the second time it got called, the code would not find a translation
path to/from g729 and make the call fail, even if the channel actually already
had a g729 translation path allocated.

(SPD-32)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@69347 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-14 20:56:19 +00:00
Jason Parker
fab1ba87cd Change a quite broken while loop to a for loop, so "continue;" works as expected instead of eating 99% CPU...
Issue 9966, patch by me.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@69258 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-14 15:15:53 +00:00
Joshua Colp
0156942fe0 Return group counting to previous behavior where you could only have one group per category. (issue #9711 reported by irroot)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@69127 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-13 18:12:48 +00:00
Christian Richter
ba372aa9a4 restart indicator 0x80 is correct, at least that's what libpri does.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@69053 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-13 09:55:54 +00:00
Joshua Colp
28464199ee Bring RTP back to Asterisk at the end of a native bridge no matter what.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@68921 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-12 14:18:57 +00:00
Christian Richter
37ded96cfa if the bridged partner is mISDN too we should not send dtmf tones, they are transmitted inband always
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@68887 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-12 08:35:22 +00:00
Christian Richter
7bb272f942 if we have already some digits, we just stop the tones.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@68874 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-12 07:48:52 +00:00
Christian Richter
9809905c76 added check for NULL Pointer when calling misdn_new. Asterisk does not allow us to create channels anymore when stop gracefully is used :). also modified the restart_indicator to 0
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@68732 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-11 16:49:00 +00:00
Joshua Colp
41421be994 Improve deadlock handling of the channel list. (issue #8376 reported by one47)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@68682 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-11 14:29:58 +00:00
Christian Richter
5cc2b1078e fixed problem that the dummybc chanels had no lock, checking for the lock now. Also fixed the channel restart stuff, we can now specify and restart particular channels too.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@68631 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-11 09:18:01 +00:00
Russell Bryant
086aba207e Don't automatically hang up after running Dictate so that callers can exit
cleanly using '#'
(closes issue #9577, patch from Thomas Andrews)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@68526 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-08 22:22:36 +00:00
Joshua Colp
d8fb68b9cb Don't call ast_waitstream_full when the control file descriptor and audio file descriptor are not set, simply call ast_waitstream! (issue #8530 reported by rickead2000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@68397 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-08 00:15:33 +00:00
Joshua Colp
49ffa786ff Do a DNS lookup immediately upon calling the dnsmgr function, don't wait until a refresh happens. (issue #9097 reported by plack)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@68368 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-07 23:59:04 +00:00
Russell Bryant
c00062ff31 Fix a problem where saying a character wouldn't properly break out when the caller pressed '#'
(issue #8113, reported by patbaker82, patch from jamesgolovich (hey, long time no see!) and patbaker82)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@68351 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-07 23:13:33 +00:00
Jason Parker
a3961d646a Don't try to save voicemail greetings unless the user presses '1' to accept/save.
Issue 9904, patch by me.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@68204 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-07 20:02:50 +00:00
Joshua Colp
9c0627eab0 Allow the 'g' option to work if used with the 'S' option. (issue #9888 reported by gasparz)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@68070 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-07 14:19:40 +00:00
Joshua Colp
084ede4507 Only notify the devicestate system of a peer state change when the peer is built from the config file. (issue #9900 reported by arkadia)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@67938 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-07 00:09:13 +00:00
Russell Bryant
3a2e0e1ed9 We have some bug reports showing crashes due to a double free of a channel.
Add a sanity check to ast_channel_free() to make sure we don't go on trying
to free a channel that wasn't found in the channel list.
(issue #8850, and others...)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@67715 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-06 16:40:51 +00:00
Joshua Colp
76fdb9418b Reinvite the RTP back to the Asterisk machine when the timeout happens. (issue #9888 reported by gasparz)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@67649 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-06 13:28:34 +00:00
Joshua Colp
a05ab92728 Revert channel name splitting fix for Zap. The moral of the story is don't use - in your user/peer names. (issue #9668 reported by stevedavies)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@67593 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-06 12:18:36 +00:00
Christian Richter
f002ad09a3 briding is a bool, fixed copy and paste issue.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@67307 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-05 15:42:03 +00:00
Christian Richter
e7590d0aec simplified the EVENT_SETUP handling in the cb_events function a lot. Commented the different possibilities a bit and made functions of shared code. When the dialed extension does not exist in the extensions.conf we'll jump into the 'i' extension if this does exist, else we disconnect the call with the cause:1 = No Route to Destination.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@67306 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-05 15:39:43 +00:00
Nadi Sarrar
e0f4f4969c Backport of the overlap_dial functionality from asterisk-1.4's chan_misdn.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@67239 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-05 11:18:45 +00:00
Christian Richter
3cd1c84e8d added possibility to deactivate bridging per port
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@67209 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-05 10:05:45 +00:00
Tilghman Lesher
dd412388a1 According to MATH, 0+1181000386 = 1181000448. Oops.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@67161 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-04 23:41:49 +00:00
Tilghman Lesher
c78acd2896 Add revision Id tags (by request of tzafrir)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@67060 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-04 17:10:30 +00:00
Joshua Colp
22fe1b73cc It is now possible for this path of execution to have the frame pointer be NULL, therefore we need to check for it before trying to access it. (issue #9836 reported by barthpbx)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@66764 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-31 16:12:39 +00:00
Tilghman Lesher
c0ce087e43 Issue 9818 - Fix for issue 8329 breaks pbx_realtime. Issue 8329 will remain unfixed for pbx_realtime, but only because we lack core API to do it.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@66744 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-31 15:58:45 +00:00
Tilghman Lesher
fc6d28a932 If the value of a variable passed to FIELDQTY is blank, then FIELDQTY should return 0, not 1.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@66537 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-29 21:49:35 +00:00
Olle Johansson
c4e7d9fef5 Issue #9802 - Change inuse counter on CANCEL
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@66349 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-29 07:53:14 +00:00
Tilghman Lesher
2cb2558eb1 Issue 9791 - Fix pronunciation of seconds in Dutch
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@66127 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-25 13:46:35 +00:00
Joshua Colp
ad2f350d39 Allow RFC2833 to be negotiated when an INVITE comes in without SDP and is not matched to a user or peer. (issue #9546 reported by mcrawford)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@65837 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-24 14:40:38 +00:00
Christian Richter
17175c7d54 we should only activate the generator in chan_misdn, when asterisk hask not yet taken the call (WAITING4DIGS state). Alerting audio will be generated fomr asterisk for example.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@65767 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-24 09:19:58 +00:00
Kevin P. Fleming
cba8e2f704 ensure that variables are set on a newly created channel before we start a PBX on it
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@65682 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-23 20:46:22 +00:00
Kevin P. Fleming
9edd1e094c if we are going to set variables on a newly created channel, it should be done *before* we start the PBX on it
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@65676 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-23 20:06:13 +00:00
Russell Bryant
2f0f1f5e00 Revert revision 62417 as someone reported problems with it to Mark. This was
related to issue #9588.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@65588 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-23 13:06:17 +00:00
Russell Bryant
03ad135134 Fix a memory leak that I just noticed in the device state handling in app_queue.
On most device state changes, it would leak roughly 8 to 64 bytes (the length of
the name of the device).


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@65389 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-22 13:07:03 +00:00
Christian Richter
0b6da8d56e we stop the tones only when we're in the pre-call phase, otherwise e.g. when in CONNECTED state we should not stop tones when we receive an Information Message
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@65328 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-22 07:46:39 +00:00
Steve Murphy
fd1fc0a9c1 This update will fix the situation that occurs as described by 9717, where when several targets are specified for a dial, if any one them reports FAIL, the whole call gets FAIL, even though others were ringing OK. I rearranged the priorities, so that a new disposition, NULL, is at the lowest level, and the disposition get init'd to NULL. Then, next up is FAIL, and next up is BUSY, then NOANSWER, then ANSWERED. All the related set routines will only do so if the disposition value to be set to is greater than what's already there. This gives the intended effect. So, if all the targets are busy, you'd get BUSY for the call disposition. If all get BUSY, but one, and that one rings is not answered, you get NOANSWER. If by some freak of nature, the NULL value doesn't get overridden, then the disp2str routine will report NOANSWER as before.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@65172 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-18 20:56:20 +00:00
Olle Johansson
86882515a8 Not getting an ACK to a 200 OK in the initial invite is critical to the call.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@65122 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-18 18:10:46 +00:00
Olle Johansson
21ea4dc3f1 Issue 9235 - part of the problem, maybe not all. Please retry with this patch (and no
other patch) if you have problems with hanging SIP channels. Thank you.

A special Thank You to WeBRainstorm that gave me access to his system.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@65075 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-18 15:12:09 +00:00
Christian Richter
58bcd919d5 fixed a warning regarding Keypad encoding. encode the IE sending_complete at the right position.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@65007 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-18 11:23:11 +00:00
Christian Richter
06b2955d26 we *need* to send a PROCEEDING when sending_complete is set, even if need_more_infos is requested.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@64902 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-18 08:24:08 +00:00
Tilghman Lesher
b2f84c347f How is it that we never caught that this is returning the opposite of our documentation, until now?
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@64819 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-17 21:14:36 +00:00
Jason Parker
dfd24c33d2 If we have a negative current message, we shouldn't go back even further...
Issue 9727.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@64758 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-17 16:52:38 +00:00
Olle Johansson
9ebfde54a1 Fixing possible bug in auth of BYE
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@64603 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-16 10:55:16 +00:00
Olle Johansson
80e4abca3d Support SIP uri's starting with SIP: and sip: (reported by Tony Mountfield on the mailing list. Thanks!)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@64535 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-16 09:08:22 +00:00
Olle Johansson
aa9ff74af5 Issue #9726 - rlister - Better logging for ACL denials
While at it, also added better logging and handling of peers that are not supposed to register.

My patch, stole the issue report from Russell. My apologies, Russell :-)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@64514 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-16 08:25:56 +00:00
Christian Richter
b60fd4bc20 in the case immediate=yes, we directly jump into the dialplan, where people can use PlayTones to indicate a Dialtone, so we don't need to to that by ourself. also we should not do a dialtone_indicate for incoming calls on a TE port in overlapdialmode.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@64513 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-16 08:23:42 +00:00
Joshua Colp
3b1ad79633 Only perform stripping of - strings from the channel name for Zap channels. Anywhere else we might remove a legitimate part of a device name. (issue #9668 reported by stevedavies)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@64275 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-14 18:34:06 +00:00
Tilghman Lesher
29aa7c809b Issue 9121 - fixups for safe_asterisk script
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@63903 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-11 16:31:03 +00:00
Jason Parker
074cc21291 Fix an issue with trying to kill a thread before it gets created.
Issue 9709, patch by nic_bellamy.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@63828 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-10 23:14:55 +00:00
Olle Johansson
07ba0e379b Do not allocate SIP pvt's for PEERs we can not reach.
This was seen as a lot of dialogs being created then immediately destroyed at reload/restart of the SIP channel.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@63748 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-10 20:38:54 +00:00
Matthew Fredrickson
818c25352e Make sure we only create a DSP if it's requested on SUB_REAL
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@63653 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-09 17:20:20 +00:00
Joshua Colp
7dc491d090 Properly handle hints that point to multiple devices in chan_sip. Why chan_sip is even doing this I have no idea but I would rather not go into a rant. (issue #9536 reported by rlister)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@63610 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-09 16:51:03 +00:00
Tilghman Lesher
47047d5004 Replicate fix from 51158 (app_voicemail) to app_directory (Issue 9224)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@63565 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-09 14:48:06 +00:00
Christian Richter
fcad34fd9f release_chan frees ch, so we should never touch ch after release_chan, this may cause segfaults.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@63519 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-09 11:26:16 +00:00
Tilghman Lesher
25930c842f Issue 9602 - segfault in app_macro
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@63477 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-08 22:19:15 +00:00
Christian Richter
048000f9d6 added application misdn_check_l2l1 which tries to pull up the L1/L2 on all ports that have the layers down in a group. It waits then for a timeout. This helps for scenarios where multiple PMP BRIs are grouped together, or where a provider has a faulty PTP Implementation, that looses the L2 after a while.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@63402 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-08 15:07:37 +00:00
Tilghman Lesher
616e3502e7 Issue 9527 - upon entering a folder, no message is selected (curmsg == -1), so deleting causes memory corruption (beyond bounds)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@63359 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-08 06:20:16 +00:00
Joshua Colp
71befa9884 Properly handle what happens during a masquerade in relation to group counting. (issue #9657 reported by ramonpeek)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@63285 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-07 21:39:52 +00:00
Olle Johansson
999633ab4f Releasing the whole in-memory configuration while you're adding to it is not a good thing.
Please review this change. Caused by additions (+) to non-existing contexts.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@63195 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-07 14:06:50 +00:00
Joshua Colp
3a218f3a09 When a peer is seeded or built tell the devicestate core to update it's status. This is easier then having chan_sip load before pbx_config. (issue #9658 reported by dlynes)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@62987 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-03 16:42:19 +00:00
Christian Richter
2102128500 when we're in state WAITING4DIGS, we use the asterisk tone-generator which prods us, so we can't just return -1 in misdn_write in this case. Added a MISDN_KEYPAD channel variable, and fixed the sending of keypad. this enables us to modify the call forward parameters in the switch.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@62945 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-03 15:39:21 +00:00
Christian Richter
70e95c4846 fixed the problem that misdn_write did not return -1 when called with 0 samples in a frame this resultet in a deadlock in some circumstances, when the call ended because of a busy extension. added encoding of keypad.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@62885 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-03 13:59:00 +00:00
Kevin P. Fleming
de32406990 doh... initializing the pointer variable will work just a bit better
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@62841 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-03 00:23:00 +00:00
Kevin P. Fleming
0b78d1542c increase reliability and efficiency of static Realtime config loading via ODBC:
don't request fields we aren't going to use
	don't request sorting on fields that are pointless to sort on
	explicitly request the fields we want, because we can't expect the database to always return them in the order they were created
	
(reported by blitzrage in person (!), patch by me)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@62796 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-02 23:53:46 +00:00
Steve Murphy
26cab38b64 Some tweaks to satisfy CDR bug 8796, where being in 'h' extension louses up the dst field
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@62737 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-02 20:10:32 +00:00
Tilghman Lesher
9b71a5799b Issue 9638 - if a text frame is sent with no terminating NULL through a bridged
IAX connection, the remote end will receive garbage characters tacked onto the
end.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@62691 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-02 17:38:16 +00:00
Russell Bryant
c8a90488d6 Remove an unnecessary check that makes it so if you hang up after doing an
attended transfer before the target extension answers the channel, the transfer
is not successful.  (issue #9338, patch by svanlund)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@62547 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-01 21:55:19 +00:00
Russell Bryant
8da91a20e3 Add indications.conf information for the Philippines.
(issue #9525, reported and patched by loloski)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@62496 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-01 16:26:23 +00:00
Russell Bryant
274afdc345 This patch fixes an issue where depending on the cause code, when the network
sends a PRI disconnect, the call may not be properly hung up.
(issue #9588, reported and patched by softins)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@62417 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-30 15:57:26 +00:00
Joshua Colp
80d88816df Update copyright notice. It's now the year 2007!
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@62368 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-30 14:34:07 +00:00
Jason Parker
d97b6e3d34 This transcoder message needn't be a NOTICE.
I've seen it cause confusion more than a few times.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@62173 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-27 16:16:16 +00:00
Olle Johansson
3bafdca29f Issue #7351 - SIP Cancel fails due to the wrong contact uri. Reported by PPYY, failed to fix by OEJ
final fix by wojtekka - THANKS!!!! THis was a hard one to catch.



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@62126 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-27 13:57:45 +00:00
Joshua Colp
babe9cbbef Revert previous fix for when the IAX2 channel goes funky (that's the technical term). This is causing legit calls to be prematurely hung up. (issue #9600 reported by justdave)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@62037 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-26 16:30:57 +00:00
Joshua Colp
897b4c0ca3 Don't count failed include attempts against the configuration include level. (issue #9593 reported by mostyn)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@61958 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-26 01:25:03 +00:00
Kevin P. Fleming
cd3ef82ba4 handle a very bizarre race condition with channels being redirected before a simple switch can be started on them (issue #9286)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@61913 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-25 22:24:59 +00:00
Russell Bryant
bc604c9e9a If the callerid= option is specified, but empty, clear any previous data.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@61866 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-25 21:55:23 +00:00
Russell Bryant
85cff883ee Ensure that callerid settings are reset on a reload.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@61862 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-25 21:06:22 +00:00
Joshua Colp
6ab97a0292 Merge rewritten group counting support. No more storing data on the variable list of the channels. That was bad, mmmk? (issue #7497 reported by sabbathbh)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@61804 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-25 18:52:50 +00:00
Russell Bryant
eab557da86 Fix a typo where cid_num got copied instead of cid_ani.
(issue #9587, reported and patched by xrg)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@61798 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-25 16:20:38 +00:00
Russell Bryant
c5a87ff71d Don't crash if a manager connection provides a username that exists in
manager.conf but does not have a password, and also requests MD5 
authentication. (ASA-2007-012)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@61786 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-24 21:33:59 +00:00
Dwayne M. Hubbard
1cde24d633 removed #if 0 block from chan_phone, chan_zap, and chan_modem restart_monitor()
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@61777 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-24 18:20:31 +00:00
Dwayne M. Hubbard
654c04bfc9 removed pthread_join in restart_monitor() to make it like chan_zap and other channel drivers
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@61776 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-24 17:42:12 +00:00
Joshua Colp
a31a2ef862 Allow RFC2833 to be sent in the response SDP when an INVITE comes in without SDP. (issue #9546 reported by mcrawford)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@61771 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-24 16:05:06 +00:00
Christian Richter
f1edea1129 added lock for sending messages to avoid double sending. shuffled some empty_chans after the cb_event calls, this avoids that a release_complete from a quite different call releases a fresh created setup by accident.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@61770 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-24 13:50:05 +00:00
Jason Parker
3682e51ba7 Fix an issue that I noticed while looking over issue 9571.
The reload timestamp was getting set after reloading the built-in stuff, and before the modules.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@61704 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-20 21:14:27 +00:00
Jason Parker
c28413ff94 If the '* to hangup' option is not enabled, we don't need to disable * as a valid exit key.
If it was enabled, this statement would've never been checked in the first place.

Issue #9552


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@61692 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-20 19:49:54 +00:00
Olle Johansson
57185823d1 Send NOTIFY to Contact: in SUBSCRIBE
- as reported by Intertex and Citel. Fixed during SIPit 20 in Antwerp.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@61685 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-19 07:56:21 +00:00
Tilghman Lesher
e4467b3837 Bug 9557 - Specifying the GetVar AMI action without a Channel parameter can
cause Asterisk to crash.  The reason this needs to be fixed in the functions
instead of in AMI is because Channel can legitimately be NULL, such as when
retrieving global variables.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@61680 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-19 02:30:18 +00:00
Olle Johansson
062368a175 Don't stop RTP on errors on INFO messages.
Disclaimer: This patch was needed for Edvina AstHoloApp and was
meant to be included in 1.2, but never made it in time so I felt
I could add it now.

No, just joking, patching error found while testing T.140 with Omnitor earlier
this spring.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@61663 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-16 14:08:33 +00:00
Joshua Colp
4b17148846 Add OUTBOUND_GROUP_ONCE variable to app_dial. This behaves the same as OUTBOUND_GROUP except it will get unset after use so it won't get accidentally inherited. (issue #BE-140)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@61655 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-13 19:15:12 +00:00
Russell Bryant
2128909ad4 If someone sets the "useragent" option in sip.conf to be empty, then don't add
the User-Agent header at all.  It is an optional header, anyway.  Also, the bug
report says that some of Japan's SIP providers don't allow it for some weird
reason.  (issue #9488, reported by makoto, fixed by me)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@61476 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-11 16:01:25 +00:00
Russell Bryant
a36f57e7fc Fix a bug with switching between host=dynamic and using specific hosts for
peers.  The code would only reset the peer's address when it is dynamic if
it was a new peer structure.  Now, it will also reset the address if it was
already in the peer list, but before the reload, it was not dynamic.
(issue #9515, reported by caio1982, fixed by me)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@61426 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-11 15:05:36 +00:00
Russell Bryant
1159b7761a Remove the attempt at reporting configuration errors in sip.conf. This can
cause a bunch of improper messages when using realtime.  I give up.  As oej
tried to convince me when I put this in, there is just no easy way to do it.
(inspired by a message on the -dev list)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@61376 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-11 14:02:54 +00:00
Christian Richter
104b12df79 some fixes for PMP Hold/Retrieve, it should work now, when briding=no
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@61357 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-11 12:05:57 +00:00
Nadi Sarrar
1330496973 msns config parameter defaults to '*'
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@61170 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-10 12:31:45 +00:00
Olle Johansson
1a92fec845 - Don't send ActionID before Response: header.
- Don't use a blank in an AMI header


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@61038 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-09 19:38:59 +00:00
Jason Parker
62de701abb Allow matching on names shorter than 3 chars.
This also fixes the case where somebody wants to match on less then 3 chars.

Issue 9071


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@60935 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-09 17:22:15 +00:00
Tilghman Lesher
2eaae45f81 Don't check for error when lowering priority (according to the manpage, it should never happen anyway). It might could happen, though, if another thread messed with the priority, so safeguard against that (reported via -dev list).
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@60849 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-09 02:49:06 +00:00
Tilghman Lesher
b9ec441aa9 Bug 9505 - If the return value for local_queue_frame is set, then p->lock is no longer valid.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@60846 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-09 02:37:18 +00:00
Joshua Colp
f2680a35d4 When calling a device that then forwards us elsewhere... we have to make our channels compatible if it is the only channel being dialed. (issue #9445 reported by marcelbarbulescu)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@60797 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-09 00:59:29 +00:00
Tilghman Lesher
2e1fe209de Gosub called within a Macro resets the arguments improperly and causes general weirdness. (Issue 8329)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@60711 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-08 14:00:22 +00:00
Tilghman Lesher
abe55bf16f Bug 9486 - memory leak when opening a filestream
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@60660 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-08 01:39:25 +00:00
Matthew Fredrickson
d971b4ba93 There should only be one code path for doing DTMF conditionals on channels. This fixes it.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@60456 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-06 17:03:15 +00:00
Kevin P. Fleming
5cbe22e0f7 remove undocumented 'cardsmode' parameter and stop searching for transcoders during reload()
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@60398 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-06 14:41:37 +00:00
Jason Parker
6374772250 Just because we can't find the voicemail configuration file, doesn't
mean that the module failed to load.  The user could be using realtime.

Issue #9473


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@60267 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-05 16:09:41 +00:00
Joshua Colp
dd108f60f3 Only unlock our pvt and net locks if we are actually going to try to lock the owner again. (issue #9472 reported by zoa)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@60213 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-05 12:52:50 +00:00
Russell Bryant
2bed78a613 It is valid to redirect channels via the manager interface that are not in the
UP state.  Instead of checking for that to prevent to ensure a dead channel
doesn't get redirected, just use the ast_check_hangup() API call.
(issue #9457, reported by Callmewind, patch by me)
(related to issue #8977)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@60134 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-04 17:38:47 +00:00
Russell Bryant
3f71ad082e Fix the return value of handle_common_options() so that it always properly
indicates whether it handled the option or not.  
(issue #9455, reported by Netview, fixed by me)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@60083 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-04 16:37:04 +00:00
Russell Bryant
d0991f6e1f Add a missing "\r\n" in the body of the NOTIFY that is sent to indicate the
status of a transfer.  (issue #9388, reported by rarritt)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@60016 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-03 23:23:23 +00:00
Russell Bryant
7a18c89ba8 Use the more generic check for "sed -r" support that was already present in 1.4.
(related to issue #9399)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@60014 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-03 23:00:10 +00:00
Russell Bryant
683a345699 On Darwin, the -r argument to sed is not valid. It has to be -E.
(issue #9399, reported by jcovert)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@60012 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-03 22:54:49 +00:00
Russell Bryant
e237711157 Don't attempt to report configuration errors in build_user(). oej pointed out
that for a "friend" entry, this won't work, because all user options are valid
for peers, but not the other way around.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@59938 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-03 19:15:04 +00:00
Russell Bryant
a19d352438 Make chan_sip report when it encounters an unknown option.
(issue #9440, reported by nightcrawler)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@59916 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-03 18:43:54 +00:00
Russell Bryant
f96aef8d79 When doing a built-in blind or attended transfer, restore the ability to use '#'
to terminate the number and immediately do the transfer instead of having to
dial the number and just wait for the feature digit timeout.
(issue #8366, xueliangliang)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@59886 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-03 17:58:19 +00:00
Nadi Sarrar
5ded94acbe ptp is the 5th bit, not the 4th.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@59803 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-03 10:40:58 +00:00
Nadi Sarrar
b18a9b92c8 Use the new sysfs way of mISDN 1.2 to check if a port is NT or not.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@59788 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-03 09:37:00 +00:00
Joshua Colp
5e01069962 Increase the maximum size for a string of mailboxes to 1024. (issue #9270 reported by rtucker)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@59723 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-02 18:55:25 +00:00
Christian Richter
30fd84d952 added option which allows us to accept incoming SETUP Messages without automatically sending Proceeding or Setup Acknowledge, this is useful with some broken switches and if you want to Release incoming calls without previously having acknowledged them. The new option is noautorespond_on_setup=yes|no default is no, so we don't break the existing behaviour
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@59639 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-02 12:08:12 +00:00
Christian Richter
e299df7a75 don't be verbose if no need
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@59624 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-02 07:25:54 +00:00
Christian Richter
51366b90d0 we can now make 30 channels on a PRI (before we forgot chan 31..)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@59623 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-02 07:12:24 +00:00
Russell Bryant
8a416b420d Add the SO_REUSEADDR flag to sockets handled by netsock. This is needed by
the patch that went in for issue 7874.  chan_iax2 needs to be able to create
socket that is lisetning on INADDR_ANY, but also be able to bind sockets to
specific addresses.  (Thanks to Stevenson on the asterisk-dev mailing list
for explaining why this flag was needed.)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@59608 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-01 22:35:25 +00:00
Joshua Colp
ec7458a460 Keep a global array of variables indicating whether certain conference rooms are in use. This ensures that two people going into a new dynamic conference when the 'e' option is set don't go into the same conference room. (issue #8835 reported by eliel)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@59360 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-29 17:33:58 +00:00
Russell Bryant
9956c33fec If an error occurs when reading from an RTP socket, and the error code does not
indicate that we should try again, then return NULL instead of a "null frame".
This will prevent Asterisk from trying over and over again, and eventually
causing the system to crash.  (issue #8285, john)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@59357 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-29 17:14:33 +00:00
Russell Bryant
b87695d824 Backport the change to chan_iax2 to return NULL instead of a "null frame"
from its read callback.  See revision 59341 to the 1.4 branch for more info.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@59355 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-29 17:10:28 +00:00
Tilghman Lesher
b254610b88 Issue 9415 - No point to getting a diagnostic field if we aren't doing anything with the information.
(Plus, it tends to crash the Postgres ODBC driver.)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@59301 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-29 16:04:46 +00:00
Tilghman Lesher
08c29fea9f Change ENV section to use setenv, instead of putenv (Alexandru Pirvulescu <sigxcpu@gmail.com>, reported via -dev list)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@59299 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-29 15:33:10 +00:00
Tilghman Lesher
7ca5863965 Oops
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@59283 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-27 23:36:49 +00:00
Tilghman Lesher
43ac3f119b Fix a few remaining bad mmap(2) return values
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@59280 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-27 23:31:20 +00:00
Russell Bryant
653b6f22c5 Fix the check of the return value from mmap(). Thanks to Corydon for catching
this one.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@59277 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-27 23:19:41 +00:00
Russell Bryant
ec9fb9a970 Fix the use of the "sourceaddress" option when "bindaddr" is set to 0.0.0.0
instead of having each interface explicitly listed.
(issue #7874, patch by stevens)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@59258 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-27 18:04:02 +00:00
Christian Richter
4a5d66f867 fixed #9355
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@59252 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-27 13:56:15 +00:00
Nadi Sarrar
681c63cd92 mISDN >= 1.2 provides a dsp pipeline for i.e. echo cancellation modules, make chan_misdn use it.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@59199 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-26 10:21:56 +00:00
Joshua Colp
9593ae4269 Only try to handle a response if it has a response code. (ASA-2007-011)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@59194 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-24 01:35:49 +00:00
Steve Murphy
714e570302 Ugh. that was dumb. Fixed an error.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@59187 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-23 16:07:45 +00:00
Steve Murphy
fe9bbc5dfc Added a few words in the Macro doc strings about the behavior of macros with hangups (et al.), as per 9337
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@59186 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-23 15:57:26 +00:00
Joshua Colp
0b4eeda153 Indicate the filename changed when it is changed. (issue #9311 reported by jsmith)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@59086 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-21 18:03:20 +00:00
Christian Richter
74b331c4d0 modified a loglevel
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@59063 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-20 09:23:22 +00:00
Christian Richter
79c08e3a46 avoid sending a disconnect when we already received one.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@59062 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-20 09:18:06 +00:00
Russell Bryant
ae319d34d5 Add a note to the security file that the Asterisk CLI and log files may contain
sensitive information, and that people should keep this in mind.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@58896 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-14 16:38:48 +00:00
Christian Richter
0939887739 fixed the crypt_keys stuff
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@58850 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-13 12:58:32 +00:00
Christian Richter
3b2e8feab4 added method standard_dec for dialing out on groups, to avoid conflicts, which caused issues with some ISDN providers
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@58849 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-13 11:58:16 +00:00
Olle Johansson
7158b80498 Issue #9229 - No port in request URI on register to non default SIP ports (neelakantan)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@58847 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-13 11:45:52 +00:00
Joshua Colp
6af97b5d59 We can't use the assembler version of fetchadd_int under Intel Macs. (issue #9254 reported by darrell budic)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@58832 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-12 16:49:49 +00:00
Joshua Colp
5941cc916c If we are unable to lookup the host in a c line we have to abort, otherwise the previous data is gone and we will (potentially) have no data when all is said and done.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@58579 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-09 20:46:43 +00:00
Christian Richter
c0cf86d6c8 we can free channel 31 as well, since we can occupy it
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@58558 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-09 14:43:58 +00:00
Joshua Colp
130b54f4b7 Only print out debug message if the definition that makes the variables shows up was actually defined. (issue #9233 reported by serginuez)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@58388 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-08 16:04:58 +00:00
Russell Bryant
c072213569 Fix a problem where the Asterisk channel name could be that of the wrong IAX2
user for a call.  This is because the first step of choosing this name is to
look for an IAX2 peer that happens to have the same IP/port number that this
call is coming from and assuming that is it.  However, this is not always
correct.  So, I have made it change this name after authentication happens
since at that point, we have an exact match.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@58242 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-07 18:17:07 +00:00
Russell Bryant
6f098541d0 Fix a misplaced block of code in the 1.2 version of the patch to fix issue #8977
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@58167 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-07 00:27:04 +00:00
Russell Bryant
7c9bc7fd0d If the channels acquired using the manager Redirect action are not up, then
don't attempt to do anything with them.  It could lead to weird behavior,
including crashes.  (issue #8977)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@58164 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-07 00:20:13 +00:00
Steve Murphy
c7c8b06817 Fix for 9220: Eyebeam cannot renew subscriptions for presence info. Reason: re-SUBSCRIBE requests don't include Accept headers, which the rfc says are optional (to put it tersely), (it uses MAY), and luckily, the sip_pvt struct has the format info stored, so we simply leave it if the format is set, and the accept header null.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@58115 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-06 22:52:52 +00:00
Olle Johansson
7d74199c6f Change error message to proper message
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@58052 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-06 20:33:21 +00:00
BJ Weschke
75ce9f86b8 Cleanup the Makefile so that we only attempt to include a file when we're building and not 'clean'ing so 'make clean' completes successfully. chan_h323 maintainer: please check to make sure I haven't broken your build target. From: jsmith in #asterisk-dev
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@58008 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-06 15:17:16 +00:00
Christian Richter
58818031b1 subdirs like misdn and h323 should be cleaned by the clean target from channels/Makefile as well
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@57962 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-05 23:18:49 +00:00
Joshua Colp
c17a4c7f53 Make create_dirpath use our standard for return values. -1 is failure, 0 is success. (issue #9205 reported by ballares)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@57869 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-05 17:49:18 +00:00
Steve Murphy
7bcc4569bb Fixed a typo introduced via 9156
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@57825 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-05 14:53:57 +00:00
Christian Richter
dfcff16e09 fixed another place where the out_cause was hardcoded to 16
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@57753 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-04 10:39:50 +00:00
Tilghman Lesher
12a38f8e56 Memory leak of a list, if call recording was abandoned
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@57648 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-03 06:36:55 +00:00
Christian Richter
a9252f4549 fixed typo
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@57523 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-02 18:32:51 +00:00
Joshua Colp
6bf891f353 If a SIP message comes in and goes to a method handler that requires additional values that may not be present then send back an error.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@57475 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-02 17:02:46 +00:00
Steve Murphy
6752748d87 further refinement in wording of goto documentation, as per 9156, goto not proceeding to next instruction
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@57458 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-02 16:39:33 +00:00
Joshua Colp
4d5bf84ce1 Don't even attempt to optimize things when a proxy channel is involved. It will just explode in weird and unexplaineable ways. (issue #9175 reported by clegall_proformatique)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@57317 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-01 22:19:32 +00:00
Steve Murphy
84ab66498f a small documentation update, to reflect reality in the goto doc strings, as per 9156, Goto does not proceed to next prio if jump fails
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@57118 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-28 19:12:41 +00:00
Joshua Colp
c8a883fd2f Fix a few more issues with the agent logoff CLI command. (issue #9123 reported by arbrandes)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@57092 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-28 18:55:45 +00:00
Christian Richter
93c0385bc0 fixed bugs.digium.com bugs: #9157 and bugs.beronet.com bugs: #302, #303, #304
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@57034 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-28 16:09:27 +00:00
Joshua Colp
7312a2eb3d Obey the clearglobalvars option in extensions reload (or dialplan reload depending on your version). (issue #9146 reported by ramonpeek)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@56850 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-26 20:05:02 +00:00
Russell Bryant
2e64cf06e5 Ensure that lock.h is included in utils.c with AST_API_MODULE defined so that
the implementations will be properly included when the AST_INLINE_API functions
are not going to be inlined.  (issue #9124, festr)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@56729 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-26 00:34:31 +00:00
Tilghman Lesher
87c0a12a03 Issue 9130 - If prev is the last item on the channel list, then evaluating
additional conditions (e.g. name prefix) will cause a NULL dereference.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@56684 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-25 14:38:03 +00:00
Russell Bryant
1c26e1c717 Fix up a couple more signal handlers to not do bad things that could cause
various undesirable results.  The other day, I made Asterisk deadlock by
hitting Control-C because of a bad signal handler.  Now, signal handlers
just set a flag and write to an alert pipe for the flag to be handled.  Then,
there is another thread that is monitoring for these flags.  If being run in
console mode, it is just the main thread.  If Asterisk is in the background,
a thread is created to do it.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@56504 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-23 23:20:55 +00:00
Russell Bryant
4fb7eb1b7b Don't destroy mutexes before unregistering all of the entry points from the core.
Also, fix a potential memory leak from not destroying the locks for all of the
possible call numbers (about 32k of them).


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@56406 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-23 20:17:56 +00:00
Joshua Colp
ca7fbd749e Always defer Agent logoff if any channels are up until they hang up. (issue #9123 reported by arbrandes)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@56279 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-22 23:19:25 +00:00
Joshua Colp
c966ea6e2d Only change the original or clone channel if it's the channel behind the proxy channel, not if it's just a regular bridged channel.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@56230 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-22 18:44:24 +00:00
Russell Bryant
c9d26b5a89 If we receive a frame that is not in any of the negotiated formats, then drop
it.  (potentially issue #8781 and SPD-12)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@56010 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-22 00:53:25 +00:00
Joshua Colp
aa54a5f91b Change naughty warning message to provide useful information. If a write now fails on a channel in meetme it will tell you the channel name instead of spitting out the wrong error message.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@55956 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-21 20:32:16 +00:00
Kevin P. Fleming
50feace3ca use new tag version script
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@55868 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-21 14:03:11 +00:00
Russell Bryant
602c5bb8c3 Fix random crashes when using the MeetMe application. This patch converts list
handling to use the linked list macros and most importantly, implements
reference counting on the ast_conference objects.  The reference counting was
first backported from 1.4.  However, that code has some problems that caused
the reference count to never hit zero.  Those problems are fixed in this patch
and will be resolved in 1.4 and trunk next, with a different patch.

(issues #7647, #9073, #9106, BE-115). 


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@55750 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-21 00:19:14 +00:00
Joshua Colp
960d22deb4 Defer clearing callback information if channels are up until they are hung up. This ensures the hangup process goes smoothly and no channels get hung in limbo. (issue #8088 reported by kebl0155)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@55669 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-20 22:39:14 +00:00
Russell Bryant
82bc576ea4 Convert a tab to spaces so that the documentation is printed out properly
aligned.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@55588 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-20 19:49:50 +00:00
Tilghman Lesher
fababa3b74 forcename and forcegreetings options should check to see if the recording already exists
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@55434 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-19 18:09:09 +00:00
Olle Johansson
179c829291 Documentation update (#9053, jsmith)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@55277 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-18 12:32:13 +00:00
Olle Johansson
9736c57aab Issue #9020 - SIP message retransmission time too short.
Backporting fix implemented in 1.4, where we have a minimum level
for the T1 timer. 


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@55249 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-18 10:36:11 +00:00
Joshua Colp
975f117300 Answer the channel before recording privacy information. (issue #8926 reported by lmamane)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@55153 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-17 03:53:45 +00:00
Joshua Colp
ff04058bff Allow chan_sip to handle attended transfers from a SIP phone that is sitting behind chan_agent. Yes folks, all it took was one line of code. (issue #8784 reported by pzieba)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@55073 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-17 01:09:50 +00:00
Russell Bryant
c9c943e8e2 Revert the change I did in revisions 54955, 54969, and 54970, in 1.2, 1.4,
and trunk.  I decided that once a conference is created from meetme.conf,
it is acceptable behavior that the pin can not be changed until the
conference goes away.  I also added a note in meetme.conf to describe this
behavior.

We still have another issue in 1.4 and trunk where some conferences with no
users don't go away.  That is the real bug that needs to be addressed here.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@55005 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-16 22:48:22 +00:00
Joshua Colp
28c428929e Do not send indications through ast_indicate in chan_agent but instead go directly to the technology. This way when indications are emulated they happen on the Agent channel and do not screw up formats on the channels. (issue #8439 reported by punkgode)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@54999 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-16 22:13:45 +00:00
Russell Bryant
2802ea3eeb For conferences that are configured in meetme.conf, check the configuration
file every time someone joins the conference instead of only when the
conference is first created.  This is to ensure that changes to the pin
numbers in the config file are always honored.  (issue #9073)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@54955 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-16 20:56:58 +00:00
Olle Johansson
d44c7d9c54 Issue #9069 - If we open with TH we should not close with /TD. (seanbright)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@54771 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-16 11:38:03 +00:00
Joshua Colp
041061ca36 Use a separate variable to indicate execution should continue instead of the return value. (issue #8842 reported by pluto70)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@54622 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-15 16:14:40 +00:00
Olle Johansson
a17395f9f3 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@54438 65c4cc65-6c06-0410-ace0-fbb531ad65f3 2007-02-14 18:40:44 +00:00
Matthew Fredrickson
3b38b3f632 When handling glare on a PRI, move the requested channel rather than hang up the old one. Fix for 8957 and 9011.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@54373 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-14 16:25:49 +00:00
Olle Johansson
5f3b33f0f5 Make sure that outbound calls are applied to the peer.
This fixes some issues with "hints not working", but only in 1.2.



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@54179 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-13 18:35:43 +00:00
Kevin P. Fleming
27a1f39f78 ensure channelcount is cleared before we enumerate transcoders, so 'reload' doesn't double the channel count
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@53658 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-08 22:17:49 +00:00
Tilghman Lesher
f49ce518ba Issue 9003 - If fullname is empty, quote() passes back "\""
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@53529 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-08 13:36:10 +00:00
Joshua Colp
d2261a98af Fix a few potential memory leaks with realtime users and peers. (issue #8999 reported by bsmithurst)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@53357 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-07 15:38:48 +00:00
Tilghman Lesher
7d1af2b829 Issue 7440 - Macro called from Macro from the h extension exits prematurely
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@53354 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-07 15:30:02 +00:00
Tilghman Lesher
4fa9370412 Issue 8987 - Status could return two responses (mnicholson)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@53245 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-06 06:58:28 +00:00
Jason Parker
99ba264f63 Add a proper newline at the end of this sample config file.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@53224 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-06 00:08:34 +00:00
Russell Bryant
fed5b6a9b4 Revert some changes that accidentally got committed as a part of another fix.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@53134 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-03 20:39:45 +00:00
Russell Bryant
8c161f55e4 set the DIALSTATUS variable to contain "INVALIDARGS" when the dial application
exits early because of invalid arguments instead of just leaving it empty.
(issue #8975)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@53133 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-03 20:38:13 +00:00
Joshua Colp
15538c732c Pass the glob expanded filename to process_text_line so that error messages contain the actual filename, not the original include one. (issue #8959 reported by tzafrir)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@53117 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-02 16:58:09 +00:00
Jason Parker
8ab0b28aba Fix a small typo. Synopsis lines shouldn't have a newline
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@53107 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-01 23:14:09 +00:00
Joshua Colp
ade14f36ea Copy noncodeccapability over to the joint variable so that telephone-event will get transmitted in the sent INVITE.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@53103 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-01 22:21:56 +00:00
Joshua Colp
d7dd6ed0a7 Don't negotiate RFC2833 when not configured to do so. (issue #8799 reported by mdu113)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@53095 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-01 21:47:11 +00:00
Olle Johansson
8754f03658 - Make sure we release call from call counter before we destroy call (maybe #7744 and more)
- Backported by accident from 1.4


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@53090 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-01 21:12:52 +00:00
Joshua Colp
8ea5a33c9e Return previous behavior of having MOH pick up where it was left off. (issue #8672 reported by sinistermidget)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@53084 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-01 21:03:10 +00:00
Tilghman Lesher
f8bed34be9 Bug 8965 - Allow FIELDQTY to work with both variables and dialplan functions
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@53074 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-01 20:07:35 +00:00
Tilghman Lesher
bc926d7f33 No wonder FIELDQTY doesn't work with functions... the documentation in pbx.c was wrong
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@53069 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-01 19:13:53 +00:00
Russell Bryant
f9db7779f0 Fix a bunch of places where pthread_attr_init() was called, but
pthread_attr_destroy() was not.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@53045 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-31 21:25:11 +00:00
Kevin P. Fleming
6564129ee7 update to match modified transcoder API
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@53044 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-31 18:58:47 +00:00
Russell Bryant
ccce21be4f Use the proper format string to print unsigned values in the rtp debug output.
(issue #8954, wmis)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@53039 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-31 17:41:51 +00:00
Kevin P. Fleming
fe394f23d4 allow codec_zap to build again, now that transcoder support is in zaptel 1.2
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@53034 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-31 17:28:15 +00:00
Russell Bryant
ccd780463d Don't print a message indicating that we don't know what to do with a proceeding
control frame in ast_request_and_dial().  We just need to ignore it.
(reported by JerJer on #asterisk-dev)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@52954 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-30 19:41:52 +00:00
Russell Bryant
65a8360531 The SIGHUP handler was implemented to allow admins to send SIGHUP to a running
Asterisk process to reload the configuration.  However, doing the actual reload
in the signal handler itself is a very bad thing to do, because the reload
process includes calling non-reentrant functions such as malloc/calloc/etc.
If Asterisk is running in the background, then the reload will happen
immediately.  However, if running in console mode, the reload doesn't work
until something is typed at the console.  That sort of defeats the purpose,
but I don't see an easy way to get around it at this point.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@52903 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-30 17:12:04 +00:00
Russell Bryant
29d168987c Comment out the parts in the Makefile that make codec_zap get built. It will
not yet build against zaptel 1.2, so I am disabling it to prevent further bug
reports until it gets merged.
(issue #8940)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@52857 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-30 15:35:23 +00:00
Christian Richter
ec4c828386 fixed some possible segfaults. also fixed an very important bug which occurs on high load (when calls are very fast generated)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@52843 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-30 14:38:08 +00:00
Russell Bryant
3d12e45f06 Fix the extraction of the timestamp from video frames. It was using the
mapping for a mini-frame instead of a video-frame, which caused it to
get invalid data.
(issue #8795, mihai)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@52762 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-30 00:15:06 +00:00
Joshua Colp
8ba938b508 Now that filename is part of the structure and since it comes before postprocess... we have to add it to our postprocess line. (reported on asterisk-dev by Boris Bakchiev)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@52716 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-29 23:39:39 +00:00
Jason Parker
4659a0ac41 Use the correct zaptel header file location.
Currently, this will not build - transcoder support will be added to zaptel later today.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@52503 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-29 16:48:26 +00:00
Joshua Colp
e06d0f644b Make COMPLETECALLER and COMPLETEAGENT output to queue_log follow documentation. (issue #7677 reported by amilcar)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@52415 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-27 02:09:10 +00:00
Joshua Colp
5e9fdf2aa7 Make the last context entry read in the dominant one. (issue #8918 reported by pj)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@52360 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-27 00:03:23 +00:00
Joshua Colp
1cb1bbbe8d Allow dequeueing of frames with negative timestamp by moving jitterbuffer frames check to jb_next. (issue #8546 reported by harmen)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@52264 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-25 19:15:29 +00:00
Joshua Colp
245cdf50ba Add another note about audio files being played back to each bridged party. (issue #8718 reported by ppyy)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@52162 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-25 01:48:52 +00:00
Russell Bryant
5823b29f58 Fix a seg fault when running this application with no arguments from AGI.
(issue #8905, junky)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@52137 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-25 00:39:50 +00:00
Steve Murphy
75d7a0309a updated check_expr via 8322 (refactoring of expression checking impl); elfring contributed a nice code reorg, I contributed some time to get it working again, better messages
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@52002 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-24 17:43:50 +00:00
Christian Richter
34b5cd1de5 fixed the busy problem (dialstatus was not busy when we called a busy extension)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@51966 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-24 10:48:09 +00:00
Russell Bryant
9eaff06d26 Fix an issue related to synchronization of recordings when using Monitor().
The bug is a miscalculation of the amount to seek the stream for writing to
disk when the number of samples coming in and out of a channel do not match up.
(issue #8298, #8887, report and patch by guillecabeza, patch files created and
 testing done by whoiswes)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@51843 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-24 00:57:28 +00:00
Russell Bryant
bd06c9494b Don't set a new value for the END_ variable on the channel before using the
old value.  If you do, it will lead to accessing a memory address that has
been free()'d.  (issue #8895, arkadia)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@51828 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-24 00:17:50 +00:00
Joshua Colp
e1dc278941 Yield before reading from zaptel timing source under Solaris so that other threads get a chance to do things. (issue #7875 reported by bob)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@51512 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-23 01:41:35 +00:00
Russell Bryant
14eece85c9 Merge codec_zap support for the transcoder card. This is a standalone codec
module so it will not affect anything else.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@51410 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-22 19:39:30 +00:00
Joshua Colp
edca3010a4 Move filestream creation to Mixmonitor loop. This will prevent a blank file from being created if no frames ever pass through to be recorded. (issue #7589 reported by steve_mcneil)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@51406 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-22 19:08:52 +00:00
Joshua Colp
d46636d6fa Explicitly declare what codecs are supported by default globally since using a bitmask for all may include ones we don't need. (issue #8357 reported by gknispel_proformatique)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@51359 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-22 16:23:03 +00:00
Russell Bryant
0a73ba87b1 Fix a memory leak on command line tab completion. The container for the
matches was freed, but the individual matches themselves were not.
(issue #8851, arkadia)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@51300 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-19 16:44:09 +00:00
Dwayne M. Hubbard
91d1c70906 issue 7877: chan_zap module reload does not use default/initialized values on subsequent loads. Reset configuration variables to default values prior to parsing configuration file.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@51271 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-18 23:47:10 +00:00
Kevin P. Fleming
6926dd0fbe support echo cancellers that can handle 64ms or 128ms of echo cancellation
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@51269 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-18 23:35:35 +00:00
Tilghman Lesher
3f07bd5034 If a timezone is not specified, assume localtime (instead of gmtime) (Issue #7748)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@51255 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-18 21:11:34 +00:00
Tilghman Lesher
6f1d7511d1 Document all the fields, including the indication that "uniqueid" should not be renamed.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@51235 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-18 17:42:17 +00:00
Russell Bryant
cbfeb816e1 Move the check for a failure of ast_channel_alloc() to before locking the
pvt structure again.  Otherwise, on a failure, this will cause a deadlock.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@51197 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-17 21:17:21 +00:00
Tilghman Lesher
0fad242a19 When ast_strip_quoted was called with a zero-length string, it would treat a
NULL as if it were the quoting character (and would thus return the string
in memory immediately following the passed-in string).


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@51194 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-17 20:52:21 +00:00
Tilghman Lesher
7015408cf8 Add documentation walkthrough on getting Postgres to work with voicemail (from Issue 8513)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@51161 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-16 21:50:04 +00:00
Tilghman Lesher
c69d99c830 Postgres driver doesn't like a NULL pointer when retrieving the length (Bug 8513)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@51158 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-16 21:26:06 +00:00
Joshua Colp
84a751aecd Return previous behavior. ParkedCalls will be able to do DTMF based transfers again. trunk however will get an option to allow this to be set on/off. (issue #8804 reported by nortex)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@51145 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-16 17:36:50 +00:00
Joshua Colp
ed7bdda7b0 Add none as a valid callgroup/pickupgroup option. I consider it a bug that it would inherit it all the way down and not have any way to reset it to nothing - so that's why it is in 1.2. (issue #8296 reported by gkloepfer)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@51085 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-16 05:53:31 +00:00
Tilghman Lesher
e9b6a2c807 Check return value before dereferencing (Bug 8822)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@50987 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-15 23:09:02 +00:00
Matt O'Gorman
741131aaa2 Solves issue with forwarding voicemails from folders other than inbox.
patch by anthonyl.



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@50946 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-15 20:44:53 +00:00
Tilghman Lesher
321c032c5e Bug 8814 - db should look for its header using a relative path, instead of the system path (Fixes FreeWRT)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@50781 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-14 05:01:16 +00:00
Kevin P. Fleming
808bcff9d0 minor documentation clarification
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@50561 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-12 14:34:15 +00:00
Olle Johansson
2e738d5a7c Issue #8793 bad response for Unsupported Extension (different fix).
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@50517 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-11 18:11:09 +00:00
Christian Richter
5704d29ffa when we get L2 UP, the L1 is UP definitely too, so we set the L1 state up as well.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@50506 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-11 14:45:38 +00:00
Christian Richter
ec695243af * more additions to make the RESTART message work
* added fix for misdn_call to allow SETUPs with empty 
  extensions, replaced the strtok_r functions with strsep for that 
  (inspired by Sandro Cappellazzo, thanks)



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@50495 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-11 13:27:52 +00:00
Christian Richter
f5507d2431 more fixes regarding warnings for gcc-4 and first additions for the restart Information element, in the first step we initiate a restart with a CLI command
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@50335 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-10 09:51:00 +00:00
Joshua Colp
ef53c893c3 Add another return value to dial_exec_full that indicates execution is going to continuing at a new extension/context/priority and to just let it slide. (issue #8598 reported by jon)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@50295 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-10 04:51:06 +00:00
Russell Bryant
4e779b5b43 Make the number that represents the major version number a single digit instead
of 2.  Using two digits makes it an octal number when put into version.h, which
breaks the compilation of any out of tree module that checks the version for
any version after 1.2.7 (reported by Matteo Brancaleoni on the asterisk-dev
mailing list, who gave credit to vihai for pointing it out)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@50227 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-10 02:16:45 +00:00
Tilghman Lesher
a0afc6c927 The advent of realtime has enabled people to use commas in the fullname field.
This could cause an issue with sending voicemails, when the field is unquoted.
(Issue 8595)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@50150 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-09 13:30:04 +00:00
Christian Richter
9713819c85 make gcc 4 happy, remove some warnings
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@49922 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-08 08:37:08 +00:00
Joshua Colp
8ca9fedc42 Ensure we use the default refresh value of 60 if the remote server does not send one. (issue #8746 reported by maethor)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@49889 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-08 05:10:07 +00:00
Tilghman Lesher
be0be1b4f1 If openstream fails, then we crash (Issue 8564)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@49833 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-07 21:43:10 +00:00
Kevin P. Fleming
2194a0b079 ensure that threads which are supposed to be detached (because we aren't going to wait on them) are created properly
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@49635 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-05 16:56:40 +00:00
Matt O'Gorman
99815228f2 converted a lot of 256 to PATH_MAX and some white space fixes.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@49447 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-04 17:45:16 +00:00
Matt O'Gorman
82016c83d2 good catch russell sorry i missed that.
fix magic number with proper sizeof


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@49412 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-04 16:48:43 +00:00
Matt O'Gorman
58f6fb69fb When using ODBC_STORAGE VoicemailMain doesn't create the
subdirectories for a mailbox such as the INBOX directory.

this patch solves that problem, was written by anthony
be-125


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@49354 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-03 23:22:47 +00:00
Christian Richter
9c8bcc3c1c * Added check for bridging in misdn_call to avoid setting echocancellation
when 2 mISDN channels are involved and when bridging is set. That lead
  to a kernel panic before under different situations, because we switched 
  about 2 times between hardware bridging and echocancelation
* readded MISDN_URATE variable which got lost before, this should make app_v110
  work again
* fixed typo



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@49303 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-03 08:24:00 +00:00
Christian Richter
6e6fa1c71f added check for channel ranges in the set/empty channel functions. set pmp_l1_check default to no. added misdn restart pid cli command. added cleaning of channel when we send a RELEASE_COMPLETE.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@49135 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-02 10:07:22 +00:00
Kevin P. Fleming
6e7786ab99 location of the bug posting guidelines has changed
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@49045 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-12-29 00:32:32 +00:00
Olle Johansson
59ae6dac08 Issue 8596: Set CAN_BYE flag for 100 trying too
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@48974 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-12-27 15:43:52 +00:00
Russell Bryant
c355d9667b Fix an error introduced by copying and pasting the handling of the >= operator
for the MATH function.  If a single equal sign was used as an operator, the
function would treat it is as if it were the >= operator.  Now, it properly
handles it as an invalid operator.
(issue #8665, patch by tempest1)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@48955 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-12-25 05:19:48 +00:00
Russell Bryant
847ddc1e2c Check for the proper return value on an error in a call to mmap().
This was reported by Andy Wang on the asterisk-dev list.  Thanks!


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@48943 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-12-24 07:23:07 +00:00
Russell Bryant
798116918e Remove a couple of misplaced dots in log messages. This was reported by
Andrea Spadaccini on the asterisk-dev mailing list.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@48939 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-12-24 06:47:29 +00:00
Joshua Colp
c54cc039e8 Add new silence sound files to the spec for Redhat. (issue #8652 reported by alvaro_palma_aste)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@48782 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-12-21 20:25:01 +00:00
Joshua Colp
f28947f7ef Free localuser structure when we fail to dial (issue #8612 reported by rizzo)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@48584 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-12-19 21:10:26 +00:00
Christian Richter
526b32f5e6 when we reject a channel, because it's in use already, we shouldn't process the setup anymore. made the channel allocation a bit easier and more understandable, removed a few unused lines
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@48576 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-12-19 13:08:51 +00:00
Christian Richter
7716c778e4 when our PTP Partner sends us a SETUP with a preselected channel we just accept it, even when we're NT. added some checks for segfaults.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@48552 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-12-18 10:19:39 +00:00
Olle Johansson
c3b8d9f510 Issue #8592 - handle 504 as 503 - congestion
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@48484 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-12-15 10:51:53 +00:00
Christian Richter
b9bddd3063 removed FIXUP state. added check for channel allocation conflict when we create a setup while the other site creates a setup on the same channel, besides the check we resolve this conflict.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@48467 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-12-14 13:03:49 +00:00
Steve Murphy
9cc5b12741 This small patch fixes bug 8541, where the L option to the Dial app wasn't working right. A similar bug (8386) was filed and fixed earlier, but an intervening bug fix to a DTMF problem broke the L() code in a different way. Hopefully, everything is happy now.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@48434 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-12-13 04:23:17 +00:00
Kevin P. Fleming
72c5d5a16b add silence files
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@48403 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-12-12 05:11:13 +00:00
Matt O'Gorman
ffdbc25cb9 the english language can be a tricky beast
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@48398 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-12-11 23:00:04 +00:00
Matt O'Gorman
2cbdcb35b1 app_externalivr needs a real silence file, and additional
changes to add silence files into core instead of extra
patch provided by bug 8177 with minor additions.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@48394 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-12-11 21:55:43 +00:00
Tilghman Lesher
983d09bc21 When doing a fork() and exec(), two problems existed (Issue 8086):
1) Ignored signals stayed ignored after the exec().
2) Signals could possibly fire between the fork() and exec(), causing Asterisk
signal handlers within the child to execute, which caused nasty race conditions.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@48374 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-12-11 00:33:59 +00:00
Steve Murphy
611a9778bb This version applies the patch suggested by stevens in bug 7836 (make inbound channel RINGING state consistent with other channels).
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@48371 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-12-10 02:14:13 +00:00
Russell Bryant
f2df4138cb Use locking when accessing the registrations list. This list is not actually
used very often, so the likelihood of there being a problem is pretty small,
but still possible.  For example, if the CLI command to list the registrations
was called at the same time that a reload was occurring and the registrations
list was getting destroyed and rebuilt, a crash could occur.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@48361 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-12-09 15:45:37 +00:00
Russell Bryant
d79533bd94 Ensure that the file position is not incremented beyond the total number of
files available for playback.  (issue #8539, ulogic)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@48356 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-12-07 18:14:13 +00:00
Russell Bryant
26676beff5 Fix the name of the rtignoreregexpire option in the sample configuration file.
(issue #8526, arkadia)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@48322 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-12-06 16:05:54 +00:00
Christian Richter
6d3c784a84 added the export and import of the MISDN_ADDRESS_COMPLETE Variable to inidcate wether the extension is already completely dialed or if there might come additional digits by information elements. also added some docs for that.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@48321 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-12-06 15:48:45 +00:00
Olle Johansson
d37fee2b0f Issue #8528 - make sure we don't delete the dialog too quickly after receiving
a 487. Move 487 handling into handle_response_invite where it really
belongs and don't add an ALREADYGONE flag to the dialog.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@48320 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-12-06 15:42:41 +00:00
Christian Richter
95a18631a4 changed a few debugs to higher debug levels
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@48319 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-12-06 14:35:25 +00:00
Olle Johansson
8eb9c059e5 Don't add Contact header on BYE, CANCEL, MESSAGE requests
(Bye, Cancel backported from 1.4, MESSAGE bug reported to me by Gunnar at Omnitor)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@48315 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-12-06 12:14:40 +00:00
Olle Johansson
c70018c590 Only set the ALREADYGONE flag once in handle_response()
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@48272 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-12-05 17:59:15 +00:00
Tilghman Lesher
31759faca8 If the recording in the database is too large, it will fail to retrieve with
an mmap error.  Not too sure why this doesn't happen when we put it in the
database, also, but since that doesn't seem to be broken, I'm not going to fix
it (at least until someone reports it).  Solution is to ask for the file in
smaller chunks.  (Bug 8385)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@48251 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-12-05 01:26:08 +00:00
Jason Parker
9ce01ec196 Revert change from 8016 - this breaks other stuff... Needs further review.
Tip: When you've reported a bug about something and somebody has put up a
patch for it..  It's not a good idea to open a completely new bug and say that
something is broken because of the patch in the other bug - PLEASE mention
something in the bug where the patch was actually created.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@48246 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-12-04 21:20:34 +00:00
Jason Parker
8c413a42eb Fix an issue where a message isn't saved correctly when using ODBC storage and reviewing a message.
Issue 8016 - patch by sokhapkin.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@48236 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-12-04 19:06:26 +00:00
Joshua Colp
6502bf97af If the generic bridge tells us not to retry, and we have a frame to spit out then break the bridge. Props to markit in #asterisk-bugs for bringing this up.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@48233 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-12-04 18:14:46 +00:00
Kevin P. Fleming
37d6a18db1 if Dial() is going to send music-on-hold to the calling party, it has to send PROGRESS first to ensure that the reverse audio path has been setup first (BE-106)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@48192 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-12-01 23:30:59 +00:00
Jason Parker
49135c3ee5 Fix a small typo - issue 8848, reported by pabelanger
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@48183 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-12-01 20:19:10 +00:00
Olle Johansson
e76ee063e6 Issue 8319 - noriyuki - nonce-count updated *after* use
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@48165 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-30 20:47:53 +00:00
Joshua Colp
37db91a3b8 Don't write AST_FRAME_NULL or AST_FRAME_IAX frames out to the channel driver. (issue #8390 reported by hselasky)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@48161 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-30 20:27:29 +00:00
Joshua Colp
1b287f7406 Only print out debug message if bridged channel is not NULL. (issue #8412 reported by jubilex)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@48157 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-30 20:06:43 +00:00
Joshua Colp
efe92601c5 Do not listen for DTMF on the bridge that comes into existence when ParkedCall is executed. This means native bridging can now occur for this. (issue #8406 reported by kebl0155)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@48154 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-30 19:04:11 +00:00
Joshua Colp
274f9027f3 Print certain CDR messages out at the NOTICE level versus WARNING since they can occur when used with the CDR applications and are perfectly fine. (issue #8367 reported by dartvader)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@48151 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-30 18:42:45 +00:00
Joshua Colp
6180390206 Remember the pointer to the allocated block of memory so that we can free it and not cause a memory leak. (issue #8449 reported by arkadia)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@48146 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-30 18:17:54 +00:00
Joshua Colp
3781699230 Document 'port' for SIP peers, came up because of the current mailing list thread. (issue #8450 reported by blitzrage)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@48142 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-30 17:55:23 +00:00
Olle Johansson
faee7ae5f1 Do proper test and don't leave dialogs hanging...
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@48127 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-30 09:05:07 +00:00
Joshua Colp
d707910edb If the frame was duplicated before writing out then we need to free it. (issue #8429 reported by edguy3)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@48106 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-29 16:47:10 +00:00
Joshua Colp
b6c058c6c4 According to the research I have done we never needed to include compiler.h in the first place so let's not! (issue #8430 reported by edguy3)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@48087 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-28 16:56:01 +00:00
Joshua Colp
0c18e0a5e1 Use the proper function to get the new message count instead of always using the filesystem. (issue #8421 reported by slimey)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@48053 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-27 18:03:57 +00:00
Tilghman Lesher
9bb51868ca Random MOH wasn't really random (bug 8381)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@48045 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-27 17:15:54 +00:00
Joshua Colp
54fc8c75d1 Do not reference the freed outgoing structure in the debug message. (issue #8425 reported by arkadia)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@48037 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-27 15:30:37 +00:00
Olle Johansson
96a36252b6 Change some logging levels. Not having hints is not an ERROR, but still should be reported.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@47987 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-24 14:33:27 +00:00
Christian Richter
f4137d1609 fixed a litle bug regarding HOLD/RETRIEVE. beatufied some logs, changed some loglevels. changed the default value of block_on_alarm
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@47968 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-23 16:10:23 +00:00
Olle Johansson
279ebd00c5 Remove unused variable (rizzo)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@47958 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-23 10:54:40 +00:00
Steve Murphy
e189ffe5b5 This is the fix for bug 8386, wherein the time-limit args to dial didn't work correctly
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@47910 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-22 02:19:09 +00:00
Tilghman Lesher
0e783db690 Failing to trap -1 error from mmap causes segfault (Issue 8385)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@47862 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-20 19:59:07 +00:00
Joshua Colp
426bdb3b17 Don't forget to byte swap if we are exiting the smoother feed early. (issue #8287 reported by arturs)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@47859 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-20 19:50:21 +00:00
Joshua Colp
fea6c62d61 Free history items at the end of use of the temporary SIP pvt structure. (issue #8383 reported by benh)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@47855 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-20 16:16:22 +00:00
Olle Johansson
0b9a8ee148 Just to be safe, disable all the scheduled items after deleting a scheduler entry (rizzo)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@47842 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-20 10:17:36 +00:00
Kevin P. Fleming
ad0f8df528 backport proper channel_find_locked behavior from 1.4 branch (noted by Steve Davies on asterisk-dev list)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@47802 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-17 19:02:09 +00:00
Jason Parker
b5d03cfa96 Fix a couple of typos in applications.. Initially spotted by mrobinson.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@47780 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-16 23:16:35 +00:00
Kevin P. Fleming
91464b50ab update clearly wrong documentation regarding cdr_custom
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@47776 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-16 22:57:31 +00:00
Joshua Colp
0127860f60 Look for the header file specifically in all cases, not just the existence of the directory. (issue #8358 reported by mrness)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@47761 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-16 20:29:28 +00:00
Joshua Colp
e51a0e25f2 Because of the way chan_local is written we should be extra careful and make sure our callback functions have a tech_pvt. (issue #8275 reported by mflorell)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@47750 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-16 18:26:50 +00:00
Olle Johansson
08570a5080 Don't fixup if we haven't got PVT. Suggestion from Martin Vit on -dev mailing list inspired
by file's commit to chan_local.

"This shouldn't happen" ;-)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@47743 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-16 16:44:56 +00:00
Joshua Colp
e3de4d3653 Make sure that the pvt structure exists before trying to do fixup on Local channels. (issue #7937 reported by mada123, fix by alamantia with mods by me)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@47711 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-15 22:29:30 +00:00
Olle Johansson
f41333b1c4 CANCEL requests are never authenticated (according to RFC 3261)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@47705 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-15 21:18:47 +00:00
Kevin P. Fleming
c446ef9782 correct argument name typo that caused global variable to be used instead of the one for the specified voicemail user
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@47696 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-15 20:30:29 +00:00
Kevin P. Fleming
3b2f1f1773 when re-writing the config file, don't repeat the path if it hasn't changed
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@47689 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-15 19:58:46 +00:00
Kevin P. Fleming
2d94af17a7 when appending a list of variable to a category, ensure the tail pointer points to the last variable in the list
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@47688 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-15 19:47:43 +00:00
Kevin P. Fleming
9c3789a5fd clear the category's variable tail pointer as well when variables are detached from it
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@47686 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-15 19:42:05 +00:00
Kevin P. Fleming
f72827b78c ouch... don't use printf, use ast_log/ast_verbose
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@47682 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-15 18:39:47 +00:00
Kevin P. Fleming
bedd43d2f9 ensure that message duration is included in email notifications for forwarded messages (BE-96, fix by me after corydon used his clue-bat on me)
ensure that duration in the message metadata is updated if prepending is done during forwarding (related to BE-96)
remove prototype for API call that does not exist


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@47677 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-15 17:56:42 +00:00
Kevin P. Fleming
f1d6ccc16f ignore this generated file
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@47666 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-15 17:07:53 +00:00
Olle Johansson
618dd887f1 Send error message if we fail to allocate sip socket, possibly caused by too few
file handles (wasn't possible before, but with the new way of sending temp messages, it is).

Found this bug under heavy load testing with SIPP.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@47655 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-15 15:17:10 +00:00
Olle Johansson
e49736b059 Sending 200 OK and not getting ACK is considered critical for the call.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@47648 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-15 13:08:34 +00:00
Joshua Colp
5cea7867b3 Update copyright information in the ADSI logo blob.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@47631 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-14 22:15:10 +00:00
Olle Johansson
62cb689e89 Avoid collissions between the peerpoke system and the retransmits. Issue #8272.
In some cases, changed timers caused the retransmit system to destroy the dialog before peerpoke_expire
got a chance.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@47596 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-14 11:06:31 +00:00
Joshua Colp
b640d51d40 Initialize global pointers for connection and result to NULL. (issue #8356 reported by james)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@47583 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-13 21:26:36 +00:00
Tilghman Lesher
442781850b Having more than 255 old messages caused corruption in the new/old count
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@47580 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-13 20:18:30 +00:00
Olle Johansson
ff0ce011a0 Don't send 487 if we've already sent 200 OK on invite at time of receiving a BYE in the same transaction.
(SIPP testing)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@47571 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-13 19:04:39 +00:00
Joshua Colp
0d9602565f When sending an SMS with a user data header properly set the UDH flag in the first byte. (issue #8347 reported by hoffmeis)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@47549 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-13 17:05:32 +00:00
Tilghman Lesher
a99b6a1c97 If the execute fails a second time, make sure that we don't pass back a stale handle
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@47525 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-13 05:45:11 +00:00
Tilghman Lesher
ec623148c0 Don't play dialtone if the seizing the channel fails (Bug 7754)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@47522 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-13 00:34:44 +00:00
Russell Bryant
18f4324baf Only do the check to determine whether the channel calling this function is an
IAX2 channel when getting the IP address using the special argument, 
CURRENTCHANNEL.  (issue #8341, jcovert)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@47496 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-12 06:09:03 +00:00
Olle Johansson
474abf4656 Clear dialog on loop (backport from 1.4 by mistake)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@47470 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-10 20:46:25 +00:00
Olle Johansson
55867f295a - Don't check for ignore in blocks that isn't reached if ignore is on...
- return properly after sending reply in handle_request_invite


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@47458 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-10 19:37:41 +00:00
Olle Johansson
a7e9e0893b Fix multipart/mixed SDP support (issue 8010, alphaque)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@47452 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-10 18:50:08 +00:00
Joshua Colp
06f51cc52f Don't include compiler.h on kernels 2.6.18 and higher as, well, it's apparently going to be removed. This should make all you FC6 fans happy as your Asterisk will now build without any mods.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@47379 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-09 16:48:05 +00:00
Christian Richter
a173aeca9d Fixed segfault when no misdn.conf exists, reported by Igor Neves, thanks.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@47359 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-09 13:09:10 +00:00
Olle Johansson
e37d7b6682 Destroy the proper dialog...
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@47308 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-08 07:40:38 +00:00
Olle Johansson
735b4cf688 Remove dialog properly at unload of module (rizzo)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@47307 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-08 07:31:34 +00:00
Steve Murphy
e301bc352f This mod for bug_7506, to make the manager code output the proper event
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@47274 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-07 18:22:01 +00:00
Olle Johansson
b4392d33ed Don't ever reply to an ACK. (Issue 8265)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@47248 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-07 13:02:30 +00:00
Russell Bryant
7c651a64a7 If random order is enabled for files mode music on hold, set a random initial
position, instead of always starting at the first file, and doing the random
operation only when switching to the next file.
(bug reported by John Lange on the asterisk-dev mailing list)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@47238 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-07 01:22:58 +00:00
Russell Bryant
f18766c30a ignore files in a music on hold directory that begin with '.'
(issue #8249, cboie)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@46964 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-02 17:47:56 +00:00
Matt O'Gorman
769113c53f read then commit.... better fix for bug 8083 as
suggested by my peers


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@46962 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-02 17:12:56 +00:00
Joshua Colp
1961bac13d Repeat after me oej: I will at least make sure my code compiles before I commit it.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@46920 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-02 16:02:27 +00:00
Olle Johansson
7908be0c2f Don't overwrite flags in the packet
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@46899 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-02 15:15:06 +00:00
Russell Bryant
e6465e0e69 Add a missing call to free before returning in an error condition
(issue #8268, mrness)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@46876 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-02 13:55:39 +00:00
Matt O'Gorman
3ac718e5f4 fix for bug #8083 crash caused by double free on m->msg
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@46838 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-01 21:20:35 +00:00
Steve Murphy
d4b36ffde5 a fix for bug 8251; the var_val needs to accept longer strings or mass confusion and a lot of lost time is the result
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@46803 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-01 19:52:43 +00:00
Russell Bryant
78ccdbc123 soxmix and Asterisk expect different file extensions for certain formats. This
was already handled for the wav49 format.  However, it was not handled for
ulaw and alaw.  I fixed this in such a way that using the alternate extensions
for ulaw and alaw will only happen if we know we're calling soxmix, and not a
custom script defined using the MONITOR_EXEC variable.  The wav49 processing
was left alone so that external scripts will see no behavior change.
(issue #7550, reported by mnicholson, proposed patch by junky, committed fix
is a bit different)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@46776 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-01 18:24:17 +00:00
Tilghman Lesher
38ba4c204e Move thread-unsafe initializer to the module loading code; add the
corresponding function to the module unload to fix a memory leak.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@46662 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-31 15:46:04 +00:00
Olle Johansson
6a662fe33e Another try to fix ;rport NAT traversal support (issue #7473)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@46610 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-31 09:49:46 +00:00
Olle Johansson
e807fbcec5 If peer fails ACL check, fail the REGISTER attempt
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@46604 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-31 09:13:34 +00:00
Olle Johansson
2405e775b1 On the other hand, we already copy the NAT flags... Reverting.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@46598 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-31 09:03:37 +00:00
Olle Johansson
093d6d9554 Issue 7473 - support ;rport on REGISTER requests too.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@46585 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-31 08:52:35 +00:00
Russell Bryant
f8da54e092 When handling the case where the hostname is just an IPV4 numeric address,
be sure to set the address type.  (issue #8247, alexr)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@46560 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-31 06:18:36 +00:00
Russell Bryant
234408e7c1 fix some copy/paste bugs in the checking of arguments for the
"control stream file" AGI command (issue #8255, mnicholson)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@46557 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-31 06:13:09 +00:00
Olle Johansson
0449e24db1 Bind rtcp to proper IP address
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@46430 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-30 16:00:57 +00:00
Olle Johansson
154c4e9504 Issue #7869 - Stop sending 302 redirect when not getting an answer...
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@46406 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-29 19:28:18 +00:00
Olle Johansson
2bec3b7627 issue #7608: Notifications with wrong content-type. Reported by jsiddall.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@46402 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-29 19:00:27 +00:00
Russell Bryant
bf20deeba1 We should always be using _exit() after a fork() or vfork() instead of exit().
This is because exit() does some extra cleanup which in some implementations
of vfork(), for example, can actually modify the state of the parent process,
causing very weird bugs or crashes.  (issue #7971, Nick Gavrikov)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@46361 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-27 17:36:07 +00:00
Christian Richter
dc0cb27752 fixed a bug which caused chan_misdn to try to allocate 2 times the same channel on high load, which then caused instability of mISDN. removed a useless function from isdn_lib.c
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@46350 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-27 09:24:01 +00:00
Olle Johansson
7a5dd9d78b Issue #7240, by mistake only committed to trunk (now 1.4), reported by
edgreenberg in Issue #7966. Thanks Ed!


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@46344 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-26 20:06:55 +00:00
Jason Parker
3ecf516f8f oops - somebody forgot to change this - long ago, probably.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@46337 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-26 17:47:52 +00:00
Jason Parker
34934b48fe Remove a useless ast_mutex_unlock.
Issue #8186, patch by anthonyl (fix suggested by benh).


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@46332 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-26 17:08:40 +00:00
Olle Johansson
67f0e37177 Working to resolve #7608 - adding debug output
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@46258 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-25 19:28:48 +00:00
Olle Johansson
4dc847a0f4 Fix the attack shield for 1.2 too. REFER and NOTIFY can create dialogs
in the world of Asterisk.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@46213 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-25 15:49:29 +00:00
Christian Richter
78d7b2641a added nttimeout option to configure wether we disconnect calls on NT timeouts or not during an overlapdial session
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@46176 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-25 08:41:59 +00:00
Joshua Colp
8b75024fdf Don't leak memory mmmk?
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@45927 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-23 00:25:28 +00:00
Christian Richter
f7ccb0e458 fixed issue, that if chan_misdn is loaded and couldn't be initialized it would cause a segfault after 'reload'. Reported by Drew/Matt thx.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@45808 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-21 12:35:13 +00:00
Joshua Colp
0d26753de2 Respect language selection when seeing if the file exists (issue #8178 reported by mnicholson)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@45691 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-19 17:16:37 +00:00
Joshua Colp
e0cbd7f2d9 Don't create a "real" pvt structure for requests that shouldn't be able to create one. Instead use a temporary pvt and fill it with enough information so we can send a reply.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@45380 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-17 20:37:17 +00:00
Jason Parker
c1666e921d Fix an integer signedness problem.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@45332 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-17 17:50:36 +00:00
Kevin P. Fleming
16ce7edf1f provide licensing language for IAXy firmware file
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@45326 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-17 17:22:01 +00:00
Olle Johansson
2b0634ab95 After some research, we realized that the default behaviour since a long
time was doing the right thing, even though the change optimized a bit
and removed a lot of potential risks. 

Conclusion: No need for a configuration option at all.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@45306 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-17 15:50:32 +00:00
Joshua Colp
01a7955445 Use responses rather then replies even though they mean the same thing.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@45265 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-16 19:59:54 +00:00
Joshua Colp
e64fa8614d Add 'ignoreoodreplies' option which will not create a pvt structure on a SIP response but instead basically drop it.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@45260 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-16 19:28:18 +00:00
Steve Murphy
5e3d5c55b4 Made a small update to solve bug 8128; The switch-case fallthru goto to a pattern extension needed to resolved the wildcards to an appropriate digit for extension matching to work
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@45134 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-14 00:16:58 +00:00
Kevin P. Fleming
ce069b0c77 don't drop the entire permit/deny list when an attempt is made to add an invalid entry (BE-92)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@45119 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-13 22:57:42 +00:00
Christian Richter
1775cae084 avoiding warning, fixing potential bug (backported from 1.2)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@45090 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-13 19:27:22 +00:00
Joshua Colp
d0649af76d Turn on volume adjustment if it needs to be on (issue #8136 reported by mnicholson)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@45060 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-13 17:01:22 +00:00
Kevin P. Fleming
170abc16b0 when sending a call to a peer, use the proper socket if we have multiple bindings (reported on asterisk-dev)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@45048 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-13 16:18:08 +00:00
Joshua Colp
58477e2410 Pass the right value to usleep for sleeping, and always add the background refresh item back into the scheduler if enabled since it is deleted during reload. (issue #8142 reported by p_lindheimer)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@45030 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-13 15:49:53 +00:00
Christian Richter
0bd76b00b2 fixed some echocandisable issues when bridged. this caused a kernel panic sometimes..also some minor formatting fixes
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@45020 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-13 13:11:13 +00:00
Christian Richter
4981d1c5dd fixed issue, that the hangupcause got a wrong isdn cause at RELEASE_COMPLETE
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@44993 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-13 07:40:07 +00:00
Kevin P. Fleming
ffb75188e1 ensure that IAX2 and SIP sockets allow UDP fragmentation when running on Linux (thanks to Brian Candler on the asterisk-dev list for the tip)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@44955 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-12 18:31:26 +00:00
Christian Richter
722d56e081 (re)added support of dynamical enabling hdlc on bchannels
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@44785 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-10 13:34:33 +00:00
Olle Johansson
cd79e99638 Issue #8101 - wrong parameter for screening in remote-party-id
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@44757 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-09 14:36:24 +00:00
Joshua Colp
bfbbc4de78 Even more frames to treat as though the remote side disappeared (issue #8097 reported by eldadran)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@44580 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-06 16:52:14 +00:00
Joshua Colp
4e717c8ea6 Treat busy control frames as hangup in the file streaming core (issue #8097 reported by eldadran)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@44501 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-05 19:55:41 +00:00
Christian Richter
8684599f6c fixed segfault which happens during hold/transfer action
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@44460 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-05 10:02:38 +00:00
Kevin P. Fleming
a8c86fb9b2 fix Polycom presence notification again
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@44432 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-05 01:27:57 +00:00
Kevin P. Fleming
87706f538e remove workaround for old Polycom firmware SUBSCRIBE requests
add workaround for new Polycom firmware SUBSCRIBE requests (bug is known to exist in 2.0.1 firmware)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@44392 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-04 21:15:29 +00:00
Steve Murphy
4f0d22fde1 For bug 7776, I have inserted a warning about Macro nesting vs. stack limitations
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@44343 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-04 16:02:22 +00:00
Christian Richter
eae488f164 if INFORMATION Message come with keypad instead of called party number, we just use the keypad as called party number.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@44335 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-04 15:26:59 +00:00
Christian Richter
0b4f47c3c3 added the option 'reject_cause' to make it possible to set the RELEASE_COMPLETE - cause on the 3. incoming PMP channel, which is automatically rejected because chan_misdn does not support that kind of callwaiting. Therefore chan_misdn supports now 3 incoming channels on a PMP BRI Port. misdn_lib_get_free_bc now gets the info if the requested channel is incoming or outgoing to make the 3. channel possible
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@44334 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-04 15:13:58 +00:00
Kevin P. Fleming
9c405de30d fix a logic error in my previous fix to the queue reload code
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@44296 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-03 20:14:13 +00:00
Joshua Colp
e0408416d3 Change the fd on the I/O context in case it changed during the reload, which is indeed possible. (issue #7943 reported by eclubb)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@44213 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-02 20:07:59 +00:00
Joshua Colp
7e7a5bfc73 We should be using $AST_SBIN instead of hardcoding the path for the error message (issue #7942 reported by eclubb)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@44198 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-02 19:39:59 +00:00
Joshua Colp
d1f421a9f6 Shrink when current_ioc is unused. It is set to -1 when unused, not 0. (issue #7941 reported by eclubb)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@44168 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-02 17:22:27 +00:00
Christian Richter
77a645d0c6 fixed the hold/retrieve/transfer issues, removed a useless bc field, added setting of frame.delivery fields, some minor code cleanups
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@44149 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-02 13:28:14 +00:00
Russell Bryant
73138db44a Fix the name of the "eventmemberstatus" option in the sample queues.conf
(issue #8065, adamg)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@44110 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-01 15:19:23 +00:00
Kevin P. Fleming
02ae73bd6a proper fix for ast_group_t change
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@43977 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-29 13:44:12 +00:00
Joshua Colp
87803a8ac6 Put in missing \ns on the end of ast_logs (issue #7936 reported by wojtekka)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@43924 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-28 18:00:30 +00:00
Kevin P. Fleming
7620e04612 fix buggy (and overly complex) loop used during reload of app_queue for static member list updating
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@43916 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-28 17:31:57 +00:00
BJ Weschke
fb599cc53e app_queue is comparing the device names incorrectly while checking their statuses. It's internal list of interfaces includes the dial string, while the argument passed to this function does not have the dial string (/n for a local channel). This causes it to ignore the device state changes because it thinks it belongs to none of its members. (#8040 reported and patch by tim_ringenbach)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@43897 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-28 16:37:15 +00:00
Kevin P. Fleming
dc268f1e6e eliminate compiler warning introduced by recent changes
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@43895 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-28 16:32:44 +00:00
Joshua Colp
34adb7efe6 Stop the stream after waitstream returns so that our formats get restored. (issue #7370 reported by kryptolus)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@43891 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-28 16:13:55 +00:00
BJ Weschke
f6ddf4e7d4 Fix race condion crash with get_member_status (#7864 - tim_ringenbach reported and patched)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@43871 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-28 15:18:05 +00:00
Tilghman Lesher
a2d98d6c7c Avoid inability to lock directory log message by creating the directory ahead of time. (Issue 7631)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@43815 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-27 20:20:35 +00:00
Jason Parker
e247b8ab33 Playback() wasn't setting PLAYBACKSTATUS under several circumstances.
Playback() returns -1 on missing args - so should Background()


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@43800 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-27 19:35:09 +00:00
Russell Bryant
0d9ea31f3a Fix a problem that occurred if a user entered a digit that matched a bridge
feature that was configured using multiple digits, and the digit that was
pressed timed out in the feature digit timeout period.  For example, if blind
transfer is configured as '##', and a user presses just '#'.  In this situation,
the call would lock up and no longer pass any frames.
(issue #7977 reported by festr, and issue #7982 reported by michaels and
 valuable input provided by mneuhauser and kuj.  Fixed by me, with testing help
 and peer review from Joshua Colp).

There are a couple of issues involved in this fix:

1) When ast_generic_bridge determines that there has been a timeout, it returned
   AST_BRIDGE_RETRY.  Then, when ast_channel_bridge gets this result, it calls
   ast_generic_bridge over again with the same timestamp for the next event.
   This results in an endless loop of nothing until the call is terminated.
   This is resolved by simply changing ast_generic_bridge to return 
   AST_BRIDGE_COMPLETE when it sees a timeout.

2) I also changed ast_channel_bridge such that if in the process of calculating
   the time until the next event, it knows a timeout has already occured, to
   immediately return AST_BRIDGE_COMPLETE instead of attempting to bridge the
   channels anyway.

3) In the process of testing the previous two changes, I ran into a problem in
   res_features where ast_channel_bridge would return because it determined
   that there was a timeout.  However, ast_bridge_call in res_features would
   then determine by its own calculation that there was still 1 ms before the
   timeout really occurs.  It would then proceed, and since the bridge broke
   out and did *not* return a frame, it interpreted this as the call was over
   and hung up the channels.

   The reason for this was because ast_bridge_call in res_features and
   ast_channel_bridge in channel.c were using different times for their
   calculations.  channel.c uses the start_time on the bridge config, which
   is the time that the feature digit was recieved.  However, res_features
   had another time, 'start', which was set right before calling 
   ast_channel_bridge.  'start' will always be slightly after start_time in the
   bridge config, and sometimes enough to round up to one ms.

   This is fixed by making ast_bridge_call use the same time as 
   ast_channel_bridge for the timeout calculation.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@43778 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-27 16:54:30 +00:00
Christian Richter
630930dd7f fixed a bug which led to chan_list zombies, when the call could not be properly established in misdn_call. also removed the ACK_HDLC stuff which is not really needed.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@43764 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-27 12:51:03 +00:00
Russell Bryant
8c2fee974a Back in revision 4798, this message was changed from using ast_cli() to directly
calling write().  During this change, checking if this was a remote console was
removed.  This caused this message about using "exit" or "quit" to exit an
Asterisk console to come up in times where it did not make sense.  This change
restores the check to see if this is a remote console before printing the
message.  (fixes BE-4)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@43708 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-26 20:49:21 +00:00
Joshua Colp
ff41b0ae36 I changed the channel structure... let's be sure this gets updated!
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@43706 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-26 20:38:42 +00:00
Joshua Colp
12afd66083 Use proper type to represent the group variable (issue #8025 reported by makoto)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@43705 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-26 20:38:06 +00:00
Russell Bryant
a0da756f2a When parsing the sections of voicemail.conf that contain mailbox definitions,
don't introduce a length limit on the definition by using a 256 byte temporary
storage buffer.  Instead, make the temporary buffer just as big as it needs
to be to hold the entire mailbox definition.
(fixes BE-68)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@43699 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-26 20:23:15 +00:00
Tilghman Lesher
83b377451c Two bugs when forwarding voicemail (Issue 7824):
1) delete=yes was ignored
2) maxmessages was ignored


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@43634 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-25 21:14:41 +00:00
Russell Bryant
00ca92aeee Check to see if the channel that is activating the IAXPEER function is actually
an IAX2 channel before proceeding to process it to avoid crashing.
(issue #8017, reported by admott, fixed by myself)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@43552 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-24 13:50:30 +00:00
Joshua Colp
c6e25717b4 Yay another 'round of spy fixes! This fixes a small logic flaw with the cleanup function and a memory allocation issue. (issue #7960 reported by jojo & issue #7999 reported by aster1) Special thanks to csum77 for letting me into a box where this issue was happening.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@43509 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-22 21:53:51 +00:00
Tilghman Lesher
e095711654 Whitespace change... really just an excuse to test repotools
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@43420 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-21 17:01:48 +00:00
Tilghman Lesher
a6751ecf3a TDS 0.64 updates
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@43409 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-21 16:18:19 +00:00
Kevin P. Fleming
377dac8495 make some more functions static
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@43314 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-20 05:08:05 +00:00
Matt O'Gorman
942768c022 fixes some verbose vs debug issues. patch from bug 2617
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@43269 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-19 16:21:08 +00:00
Tilghman Lesher
6728ebb72c cid is passed to a destructive function; thus a copy is needed (issue 7961)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@43248 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-19 12:28:55 +00:00
Olle Johansson
eb4bd38c92 Issue #7682 - don't add contacts to 4xx responses.
(Ugly fix, not proud at all)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@43220 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-18 20:08:22 +00:00
Joshua Colp
b1708137da Add deprecation notice about app_math (issue #7957 reported by k-egg)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@43163 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-18 15:30:26 +00:00
Steve Murphy
c8821eb38a Clarified what "callwaiting" does in zapata.conf.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@43160 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-18 15:05:56 +00:00
Joshua Colp
e42bf94e06 Add number unobtainable tone for New Zealand (issue #7969 reported by nic_bellamy)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@43159 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-18 15:05:39 +00:00
Tilghman Lesher
88ccb83574 Directory used the wrong context for delivery of 0- and *- keypresses
(according to Directory's own documentation) - Issue 7965


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@43072 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-17 13:54:34 +00:00
Tilghman Lesher
a729fb97e4 When a realtime peer expires, reset the ipaddress in the realtime database back to 0 (Issue 6656)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@43019 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-16 07:57:04 +00:00
Tilghman Lesher
b2122691de When the marked user enters the conference, we should no longer timeout
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@43003 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-16 04:44:02 +00:00
Tilghman Lesher
1df9da9fef Error message references wrong argument (Issue 7951)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@42946 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-14 22:16:31 +00:00
Tilghman Lesher
ca79503d56 Backport bugfix patch from 7918 to 1.2 - msg_cfg destroyed before used
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@42892 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-13 19:51:24 +00:00
Tilghman Lesher
9c8d9ce377 When paging, only wait 5 seconds for the marked user to enter the conference.
After that, assume the paging already completed by the time the channel entered
the conference and drop back out.  (Issue 7275)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@42783 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-11 21:47:23 +00:00
Tilghman Lesher
438f99e100 Spelling/grammar fixes (Issue 7929)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@42716 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-11 16:39:06 +00:00
Tilghman Lesher
fd0496f3f6 Two grammar issues (bug 7927)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@42697 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-11 14:40:13 +00:00
Joshua Colp
cc0f191aab Only truly consider the channel in the same format if the format matches the raw format OR if a translation path already exists to translate between them. (issue #7887 reported by softins & issue #7803 reported by alvaro_palma_aste). Thanks goes to stubert for giving me access to a box and showing me a scenario where this occured.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@42600 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-09 20:24:19 +00:00
Olle Johansson
ed09034360 - Reset proper flag
- Don't delete SIP dialog prematurely
Strangely enough imported from svn trunk... It's confusing here in Greenland.

(Committing from 36.000 feet above Greenland, on the way to asterisk@von
http://www.pulver.com/asterisk )


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@42535 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-09 12:14:03 +00:00
Joshua Colp
25c493ffdc Swap spies during masquerading
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@42452 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-08 18:50:43 +00:00
Tilghman Lesher
ec7535bba2 Jump logic was backwards: goto returns 0 if it succeeds, and we should jump if authentication fails. (Bug #7907)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@42421 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-08 16:06:17 +00:00
Joshua Colp
a4e28347fe Use ast_best_codec to set the read/write format
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@42402 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-08 04:37:07 +00:00
Tilghman Lesher
0cfb462845 Format vulnerability fix - allowing the user to specify a format is not a good idea (Bug 7811)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@42355 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-07 23:12:29 +00:00
Joshua Colp
0367363edb Let's use the same thing we use in other places to calculate our time for ast_cond_timedwait (issue #7697 reported by bn999)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@42260 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-07 16:30:44 +00:00
Steve Murphy
d3d62f3678 This should fix the problem reported in 7564: logger config file errors getting lost because logging isn't configured yet. The problem was that the code that exists to handle this case was not getting reached, because other tests were causing an early return from ast_log().
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@42200 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-07 02:14:14 +00:00
Steve Murphy
283039a071 added hours,minutes,seconds .gsm files to the install portion of the makefile, as per bug 7545
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@42150 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-06 20:09:10 +00:00
Joshua Colp
754cb0114f Don't close the second file descriptor if it's the same as the first one, as it will have already been closed elsewhere and could cause massive panic. (issue #7699 reported by bn999)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@42148 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-06 20:02:59 +00:00
BJ Weschke
ff9fce4bb8 Look ma! No more deadlocks! <sic>
As posted from #7458 and others similar to it in Mantis:
 p->app_lock was a mutex really designed for use with agents not in callback mode. That being the case, I've tried to code it so that when callback mode is used, the app_lock mutex will not be locked/unlocked at all. Please let me know how you make out - and if you continue to deadlock now, please reproduce the deadlock logging information and post to Mantis. 



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@42133 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-06 18:16:41 +00:00
Christian Richter
8be5b66038 fixed pipe consuming bug when using chanIsAvail (#7878), also moved a debug log to the very begining of misdn_hangup.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@42110 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-06 17:10:41 +00:00
Joshua Colp
e627ecb8a7 Make realtime regseconds work as people expected (0 on registration expiration or release, and actual on normal state) (issue #7684 reported by kshumard)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@42086 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-06 15:55:20 +00:00
Joshua Colp
68de3c0b29 Merge in last round of spy fixes. This should hopefully eliminate all the issues people have been seeing by distinctly separating what each component (core/spy) is responsible for. Core is responsible for adding a spy to a channel, feeding frames to the spy, removing the spy from a channel, and telling the spy to stop. Spy is responsible for reading frames in, and cleaning up after itself.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@42054 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-05 20:02:48 +00:00
Jason Parker
cc82df15ff Small typo in zapata.conf.sample
Reported by ppyy in 7881


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@42014 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-05 16:27:46 +00:00
Olle Johansson
9eb92ed083 Don't kill the pvt before we have sent ACK on CANCEL (needs more testing before making a release)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@41989 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-04 15:46:07 +00:00
BJ Weschke
a05a361fc3 Make sure the forwarded channel inherits variables appropriately when we receive a call forward in the queue. (#7867 - raarts reported and patched)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@41882 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-03 17:38:22 +00:00
BJ Weschke
aaf0ad7b77 Don't keep trying the same member in certain strategies when members of the queue are unavailable (#7278 - diLLec reported and patched) - This should have been patched here first and then merged into /trunk. My bad!
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@41880 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-03 17:13:38 +00:00
BJ Weschke
919cb0b1a8 Let's NOT spy on Zap/psuedo channels, mmmmmmmmk?
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@41830 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-03 14:50:59 +00:00
BJ Weschke
c3b61adc5b Setting a retry of 0 is generally not a good idea and shouldn't be allowed. (#7574 - reported by regin)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@41827 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-03 14:16:08 +00:00
Joshua Colp
1e21d7a537 Only wipe the redirected audio & video IP/port if it's specified, and trigger a reinvite.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@41768 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-01 22:49:07 +00:00
Kevin P. Fleming
abb4e3a3a4 put in proper fix for issue #7294 instead of the broken partial fix that was committed, and thereby also fix issue #7438
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@41716 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-01 17:35:06 +00:00
Joshua Colp
c42a8d9b99 Finish up the last commit (was worse then originally reported)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@41691 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-01 16:33:00 +00:00
Joshua Colp
a5641b46de Don't treat an unexpected control subclass as voice (issue #7858 reported by PCadach)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@41690 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-01 16:28:08 +00:00
Olle Johansson
abfcb8d31e Issue #7572 - Hangup when receiving a buggy 487 response to an INVITE
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@41423 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-30 19:01:55 +00:00
Russell Bryant
e174a3c762 Restore original functionality of 1.2 in places where ANI was not set, but was
changed to be set.  The original change was done to ensure that the behavior of
the "callerid" option in each channel driver was consistent, but it caused an
unexpected behavior change of CDR records for users, so this change is being
reverted in 1.2.  (issue #7695)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@41411 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-30 18:59:44 +00:00
Joshua Colp
6b466228c4 Properly handle an ETIMEDOUT result from pthread_cond_timedwait (issue #7318 reported by arkadia)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@41390 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-30 17:58:31 +00:00
Olle Johansson
955aa04edc Issue 7822 - don't use SRV lookups if it's disabled.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@41334 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-30 14:31:47 +00:00
Russell Bryant
41fad4887e clean up last commit ... most notably, there is no reason to do heap
allocations here, and it also included a potential memory leak


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@41269 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-29 13:33:34 +00:00
Steve Murphy
c6d94b0d89 Fixes for bug 7813, via patch submitted by stevens.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@41262 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-29 05:49:12 +00:00
Steve Murphy
c4f13b4c28 Removed from the docs the mention of the ! and =~ operators, as these
were knocked out of ast_expr2 because they were new features. Let's hope 
I can keep them from getting knocked out of the trunk, too!



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@41240 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-28 20:51:08 +00:00
Steve Murphy
6daea8e8fb According to a note added to 7731 by mneuhauser, this
will repair a break caused by the last fix (7731).



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@41239 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-28 19:06:55 +00:00
Matthew Fredrickson
640f0361b9 There, much better.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@41069 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-25 15:21:18 +00:00
Matthew Fredrickson
3bfeacea91 Don't send proceeding twice (#7800)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@41066 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-25 15:13:43 +00:00
Tilghman Lesher
e83bbab1ec Text only - clarify the reason for entry into authentication mode when the skipuser option is ignored
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@41065 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-25 15:07:16 +00:00
Russell Bryant
034a919e1f Fix a few issues related to the handling of channel variables
- in pbx_builtin_serialize_variables(), the variable list traversal would stop
   on a variables with empty name/values, which is not appropriate
 - When removing the GROUP variables, use AST_LIST_REMOVE_CURRENT instead of
   AST_LIST_REMOVE
 - During masquerading, when copying the variables list from one channel to the
   other, using AST_LIST_INSERT_TAIL is not valid for appending a whole list.
   It leaves the tail pointer of the list invalid.  Introduce a new macro,
   AST_LIST_APPEND_LIST that appends a list properly.
(issue #7802, softins)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@40994 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-24 19:41:26 +00:00
Joshua Colp
761d98663f I can type english. Honest. Thanks Kenny.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@40979 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-24 17:13:04 +00:00
Joshua Colp
fac91f48ef Minor documentation fix to add the 'dynamic' dialplan option from angler
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@40971 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-24 16:44:41 +00:00
Tilghman Lesher
39e622f7cf Revert last change - breaks retrieval of builtin variables
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@40901 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-23 16:05:26 +00:00
Tilghman Lesher
dad6bc4d32 Bug 7779 - Using initstate(3) means that we cannot unload this module once loaded.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@40821 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-22 02:59:37 +00:00
Matt O'Gorman
4514a22df3 Move the load_modules call so that if a module needs
realtime support it will work, none do currently but a good
move none the less.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@40798 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-21 22:34:26 +00:00
Tilghman Lesher
c7a845c978 Reformat to match the contribution style of other contributors
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@40692 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-20 22:09:57 +00:00
Joshua Colp
379785c401 Turn media level c= parsing on by default (issue #7725 reported by psm)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@40601 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-20 04:49:48 +00:00
Jason Parker
d98055d875 Fix a bug with app_voicemail when trying to use app_directory to leave messages
to another user (options 3, 5, 2).

If the context/extension didn't exist in the dialplan (and why should it have to?),
it would fail, saying that it's an "invalid extension".

Fix was different in svn trunk.

(issue BE-71)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@40446 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-19 01:03:22 +00:00
Kevin P. Fleming
86b0330dc5 make a feeble attempt to avoid the 'how do I enable my hardware echo canceler' questions
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@40392 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-18 19:10:51 +00:00
Kevin P. Fleming
2650ee2f9a rename file per crichter's request
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@40310 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-17 22:00:37 +00:00
Christian Richter
71b348be1c This rather small ;-) commit merges the changes from my team branch 0.3.0 into t
he 1.2 branch. 

These changes include the new mISDN mqueue interface which makes it possible to 
compile chan_misdn against the current cvs version of mISDN/mISDNuser.

These changes also contain various additions and numerous bugfixes to chan_misdn
.

Each change is documented in the commit logs in the team/crichter/0.3.0 branch.




git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@40306 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-17 21:57:19 +00:00
Russell Bryant
2f5c21ded7 revert bogus change to attempt to fix bug 7506 which actually causes half of
the channels not to get "Newchannel" events at all (issue #7745)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@40227 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-17 16:36:21 +00:00
Joshua Colp
3d759745f9 Use the last CDR entry instead of the first CDR entry for variable retrieving variables using the CDR dialplan function. (issue #7689 reported by voipgate)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@40225 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-17 16:22:58 +00:00
Joshua Colp
afedbd97af Make app_macro compile again
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@40223 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-17 16:18:08 +00:00
Steve Murphy
4098ad798d In app_macro, changed the previously changed upper recursion depth limit to a variable, default of the original val of 7. MACRO_RECURSION is a channel variable that will override the limit, but until I can understand and fix why this limit is neccessary, I am not advertising this variable in the docs. This fix mirrors the changes made in r40200 in trunk.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@40220 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-17 16:07:21 +00:00
Kevin P. Fleming
c3a46b712e don't allow AUEP responses to overflow the stack during a string copy (reported by Mu Security)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@40057 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-16 18:57:44 +00:00
Russell Bryant
465207a28d use pbx_builtin_getvar_helper() so that GET VARIABLE can retrieve global
variables (issue #7609)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@39935 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-15 22:49:41 +00:00
Steve Murphy
f4e47e9b51 This revision fixes bug 7731, the inability for macros to be called more than one level deep in the 'h' extension.
It also pushes up the limit of recursion depth from 7 to 20.




git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@39931 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-15 22:13:47 +00:00
Kevin P. Fleming
7b46b7133d add explicit listing of anthm's contributions (issue #7683)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@39379 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-08 18:39:16 +00:00
Russell Bryant
b740b45902 Increase the buffer size for the callid (issue #7675, reported by pssatcs)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@39350 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-08 17:04:10 +00:00
Russell Bryant
fdfc694ca3 Fix a crash reported to me by hads on IRC. This crash would occur with the use
of the "distinctiveringaftercid" option.  Also, on this user's system, the crash
would only occur when built without optimizations.  This is because the bug is
that the code would write past the end of an array that was allocated on the
stack, and the structure of the stack is different with or without optimizations
enabled.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@39081 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-07 01:28:29 +00:00
Joshua Colp
1204f825d7 Reset our stream and vstream pointers back to NULL so that any generator that uses them (file based MOH) will not try to close them again. (issue #7668 reported by jmls)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@39056 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-07 00:15:51 +00:00
Russell Bryant
f4c24d5d62 Always generate a Newstate event in ast_setstate() instead of making it a
Newchannel event if the state was AST_STATE_DOWN.  The Newchannel event will
always be generated in ast_request(), so this just causes a duplicated
Newchannel event in some cases.  
(issue #7506, repoted by capouch, fixed by me)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@38982 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-05 09:01:37 +00:00
Russell Bryant
e81646d2dd remove duplicate queue log entry when the caller exits on a timeout
(issue #7616, ppyy)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@38972 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-05 08:08:48 +00:00
Russell Bryant
54b8d83e4f don't advertise that this function can set a SIP header when it can only
do reads


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@38950 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-05 07:21:12 +00:00
Russell Bryant
183541b44d make sure the priv-callerintros directory exists before trying to create a file
there (issue #7659, patch by hads, with some modifications by me)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@38928 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-05 06:37:59 +00:00
Russell Bryant
66b15a3461 Fix an issue that would cause a NewCallerID manager event to be generated
before the channel's NewChannel event.  This was due to a somewhat recent
change that included using ast_set_callerid() where it wasn't before.  This
function should not be used in the channel driver "new" functions.
(issue #7654, fixed by me)

Also, fix a couple minor bugs in usecount handling.  chan_iax2 could have
increased the usecount but then returned an error.  The place where chan_sip
increased the usecount did not call ast_update_usecount()


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@38904 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-05 05:08:50 +00:00
Russell Bryant
5e3b7eec7d suppress a compiler warning about the usage of a potentially uninitialized variable
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@38903 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-05 05:07:39 +00:00
Joshua Colp
a56f08e345 Treat the file as invalid if we have no valid formats for it (issue #7643 reported by KNK)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@38825 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-03 19:54:02 +00:00
Tilghman Lesher
84ad1fe0f3 Bug 7648 - Checking wrong count for plurality on new messages for Dutch language
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@38761 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-03 05:22:19 +00:00
Kevin P. Fleming
8ddb00adaa fix brain-damage I introduced when trying to fix the CANCEL/BYE sending mechanism for pending INVITES
accept unknown 1xx responses as 183 responses (as RFC3261 mandates we should do)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@38731 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-02 19:29:56 +00:00
Kevin P. Fleming
4f3b40fe79 ensure that the 'feature digit timeout' value is taken into account when deciding how long the bridge should run (this fixes a problem report where a digit press that did not invoke a feature is never passed across the bridge)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@38686 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-01 23:07:06 +00:00
Joshua Colp
83f9228c1d Close the stream when file based MOH stop. This won't get rid of their position in the file but it will cause the translation path to be setup again. (issue #7634 reported by asimpson)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@38654 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-01 19:20:05 +00:00
Kevin P. Fleming
532ff6487b don't reissue hangup requests for SIP channels that have expired their RTP timeouts (one time is enough)
don't rescan the SIP private structure list too fast, it can cause channels to not be able to hang up (issue #7495, and probably others)
use ast_softhangup_nolock() since we already hold the channel's lock


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@38611 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-31 21:14:11 +00:00
Joshua Colp
f41b9baed4 Add missing code to bring transferee channel out of MOH/autoservice under certain circumstance (issue #7611 reported by guillecabeza with minor mods by myself)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@38585 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-31 17:09:10 +00:00
Russell Bryant
af0052ee94 one more small tweak for thread-safety of TRACE_FRAMES
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@38547 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-31 04:06:16 +00:00
Russell Bryant
70d6a82a9f Make the frame counting done with TRACE_FRAMES defined thread-safe
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@38546 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-31 04:04:02 +00:00
Joshua Colp
1020b9d11a How many attempts does it take to make a SIP URI parser that works well? I'm up to 5 personally. On to the good stuff - parse the domain first, user second, and get rid of port & options/params last. (issue #7616 reported by andrew)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@38501 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-29 23:18:00 +00:00
Joshua Colp
2e7e645c77 Make a copy of the request URI in check_user_full instead of modifying the one on the structure, and also strip params properly from the user portion of the SIP URI so as to preserve the domain (issue #7552 reported by dan42)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@38420 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-28 18:49:00 +00:00
Kevin P. Fleming
7b9abdf138 use the enum that defines the option arguments, so that the likelihood of mismatched option indexes is reduced (which in this case was a bug, the volume argument was not checked properly)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@38370 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-27 22:23:38 +00:00
Kevin P. Fleming
6afc9c6c8f do a better job avoiding translation path teardown/setup when not needed
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@38347 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-27 15:40:03 +00:00
Russell Bryant
228c35198c Fix crash when using the "regexten" option with MALLOC_DEBUG enabled. This was
not reported in the bug tracker but the same bug has been demonstrated in other
places in the code.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@38328 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-27 04:25:41 +00:00
Kevin P. Fleming
0b6aa9cd29 don't do useless translation destroy/build when the channel is already in the correct format
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@38310 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-27 02:43:49 +00:00
Russell Bryant
425c51cfd5 fix a crash when MALLOC_DEBUG is enabled and the regexten is enabled. The crash
would occur when the extension got removed. (fixes issue #7484)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@38288 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-27 01:58:41 +00:00
Joshua Colp
46012df0b6 Put default callerid into contact when the one specified is either NULL or has a zero string length. (issue #7590 reported by key2)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@38234 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-26 15:26:06 +00:00
Russell Bryant
96048caf41 This resolves a deadlock that a tech support customer was getting frequently
when his users would answer call waiting. If another thread is currently
holding the zt_pvt lock for the first channel, unlock both channels and let
asterisk retry the native bridge, just like what is done for the second channel
directly below these changes.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@38200 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-25 19:43:38 +00:00
Steve Murphy
f46ab63b6c This fixes a compile problem for s390 as reported in bug 7253.
Tested on both an s390 and non-s390 machine.



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@38167 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-24 17:05:56 +00:00
Kevin P. Fleming
1cd1b27779 ensure that global 'maxauthreq' is reset to zero during 'reload'
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@37949 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-19 17:10:10 +00:00
Russell Bryant
b97c12b80b don't crash if the frame has no data, but has a src
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@37856 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-18 00:41:47 +00:00
Russell Bryant
09a334573e if asked to duplicate a frame that has no data, don't set the frame's data
pointer past the end of the allocatted buffer for the new frame


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@37828 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-17 23:25:33 +00:00
Tilghman Lesher
dfe118c2fd Backport buffer increase to 1.2
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@37808 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-17 22:36:56 +00:00
Tilghman Lesher
f23368365a Overflow bad
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@37765 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-17 15:52:15 +00:00
Tilghman Lesher
c5623e2acd Bug 7513 - ensure that each time we do a query, the results are returned in the
same logical order, so that when we iterate over the list, we get all results,
not some results repeated, due to insufficient sorting.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@37691 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-15 23:29:28 +00:00
Tilghman Lesher
ce37a590e5 Bug 7526 - previous commit broke app_sms
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@37612 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-14 13:31:11 +00:00
Kevin P. Fleming
6ea65400a0 don't fail/abort if the message category sound file cannot be played, just generate a warning message and continue message playback
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@37571 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-13 21:22:11 +00:00
Russell Bryant
1d8f732f3f yeah, ummm... This frame pointer should not be static. This situation only
exists in 1.2 (pointed out by Constantine Filin on the asterisk-dev mailing list)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@37546 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-13 18:44:17 +00:00
Kevin P. Fleming
88ccb628f9 report address of peer trying to subscribe to unknown hint
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@37531 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-13 16:44:23 +00:00
Tilghman Lesher
fcf0d79afa Bug 7532 - Typo in enum example
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@37516 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-13 15:45:33 +00:00
Tilghman Lesher
39882ad2f7 Merge fixup for asterisk startup script to zaptel startup script
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@37458 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-12 18:29:01 +00:00
Kevin P. Fleming
ff3890a952 fix a weird case where a lock file could be left (but would happen almost never)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@37442 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-12 15:53:53 +00:00
Kevin P. Fleming
0c754a13a8 fix a case where ast_lock_path() could leave a randomly-named lock file hanging around
make ast_unlock_path actually report when unlocking fails


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@37441 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-12 15:46:56 +00:00
Joshua Colp
ff29ba6296 Add support to have maxauthreq as a global option
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@37439 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-12 15:23:59 +00:00
Kevin P. Fleming
648bc1828d remove some more bad examples of using printf
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@37419 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-12 13:54:10 +00:00
Kevin P. Fleming
fe1708f190 get rid of some more printf's (although most of these were ifdef-ed out)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@37417 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-12 13:18:21 +00:00
Matt O'Gorman
f009c13db7 GRRR no fprintf!
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@37402 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-12 03:55:36 +00:00
Joshua Colp
3d8ef8de96 Add configuration option for IAX2 users that will limit the amount of outstanding AUTHREQs we are waiting for replies on.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@37378 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-11 19:00:50 +00:00
Kevin P. Fleming
152df40d57 do masquerade-behind-proxy checking with better control over locks
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@37361 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-10 21:01:35 +00:00
Joshua Colp
f1b2416353 Change message regarding marker bit forcing when SSRC changes to be shown only during debug so it doesn't overload high capacity systems
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@37307 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-07 23:57:53 +00:00
Matt O'Gorman
84881a0662 patch resolves issue with when to decide if its right time
to native bridge, feature redirect was not being checked.
patch from bug #7296


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@37224 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-06 21:41:23 +00:00
BJ Weschke
b617860594 Don't do wierd things on a callback agent that has attempted logoff while still on the phone.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@37212 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-06 20:38:45 +00:00
Joshua Colp
5a86fcf1f8 Instead of giving the scheduled item ID on a peer expiration, give the time until they expire (issue #7455 reported by slavon)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@37173 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-06 15:48:07 +00:00
Tilghman Lesher
1a1ae6b104 Fix spelling/grammar (issue 7493)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@37143 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-06 13:47:23 +00:00
Joshua Colp
f452a64598 Spell extension correctly in documentation for chan_oss dial (issue #7487 reported by flefoll)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@36998 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-05 15:31:01 +00:00
Olle Johansson
2211a552d3 Tell clients based on old SIP standard that we only support MD5 digest authentication...
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@36911 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-04 14:45:44 +00:00
Olle Johansson
b8e4f60589 issue #7470 - Need larger buffer for record-route headers...
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@36838 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-03 15:00:50 +00:00
Russell Bryant
1cf6171b0c fix a race condition that caused asterisk to log a *ton* of warnings on mac
osx about poll returning an error because the polled file descriptor was bad.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@36751 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-03 05:12:03 +00:00
Russell Bryant
99b3637d6a use ast_set_callerid to be more consistent and to make sure that the
"callerid" option in the conf files is always handled the same way and sets ANI
(issue #7285, gkloepfer)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@36725 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-03 04:19:09 +00:00
Russell Bryant
d89517f348 fix the build with BUSYDETECT_TONEONLY defined (issue #7414)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@36697 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-03 03:23:36 +00:00
Tilghman Lesher
4bee2f3210 Bug 7349 - Directory did not work correctly when USE_ODBC_STORAGE was defined.
Note: Russell agreed that this should have worked, which is why this is
classified as a bugfix.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@36377 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-30 14:05:53 +00:00
Tilghman Lesher
2f0b62b8d3 Bug 7388 - compatibility changes for Solaris
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@36290 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-29 19:23:18 +00:00
Kevin P. Fleming
55247bea10 clarify documentation for 'persistentmembers' setting
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@36254 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-29 07:19:54 +00:00
Kevin P. Fleming
ab4bdf1e3f add documentation for peer-specific 'outboundproxy' setting
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@36253 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-29 07:19:27 +00:00
Olle Johansson
27aa56e14e Don't delete scheduled item twice in sip_destroy (already fixed in svn trunk)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@36187 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-28 14:12:43 +00:00
Kevin P. Fleming
3d09ddb98e ensure that two SIP channels that exist at the same moment will not have the same channel names (issue #7245, different fix)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@36078 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-26 17:10:12 +00:00
Olle Johansson
bbcb713b68 Issue 6997 maybe, but anyway - don't retransmit responses to NON-invite requests.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@36043 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-26 15:27:58 +00:00
Tilghman Lesher
f6b683b302 Bug 7425 - Size of buffer is passed in by len
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@35915 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-25 15:10:06 +00:00
BJ Weschke
64def5d791 We should lock the queue before we go making changes to member interface statuses.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@35669 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-23 11:30:17 +00:00
Joshua Colp
4564907b41 Add Venezuelan indications (issue #7402 reported by palillo)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@35334 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-21 19:25:34 +00:00
Tilghman Lesher
6d2cff5290 Bug 7398 - Solaris puts its zoneinfo files in a nonstandard place
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@35121 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-20 15:05:23 +00:00
Olle Johansson
e5505d1baf Issue #6820 - Possible fix (already implemented in trunk)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@35058 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-20 10:27:44 +00:00
Joshua Colp
43ad959914 Call reset_user_pw upon changing the password using externpass (issue #7395 reported by Ryan Cumming)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@34911 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-19 20:27:44 +00:00
Tilghman Lesher
4c688bb3b3 Issue 7357 - txt file left behind when going to operator. Also, fix a possible file descriptor leak.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@34875 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-19 18:07:26 +00:00
Russell Bryant
1eb2822b3b don't set state to BUSY if the channel is already in the UP state
(issue #7376, backported from trunk)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@34655 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-18 21:03:58 +00:00
Russell Bryant
4893f1917f don't store multiple secrets delimited with semicolons for peers because this
is only valid for users. Instead, only keep the last specified secret for a
peer entry. Also, document how multiple secrets are handled in the sample
config. (Reported by PCadach on #asterisk-bugs)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@34627 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-18 20:15:15 +00:00
Joshua Colp
7807373222 Zero out a declared structure so as to not crash if it contains invalid data (reported by Qwell on #asterisk-dev)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@34400 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-16 03:37:05 +00:00
Olle Johansson
3cf57b8066 Issue 7294 - patch by phsultan - Asterisk sends Invite instead of BYE in some cases.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@34306 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-15 14:11:22 +00:00
Kevin P. Fleming
d00c50cd14 don't use prefixed structure names for internal structures
don't use a plural structure name for a singular object


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@34274 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-15 13:30:22 +00:00
Tilghman Lesher
2159afd1ae VoicemailMain exits on any key, when the language is set to Italian, instead of
properly handling the key (issue 7353).


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@34242 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-15 12:40:10 +00:00
Kevin P. Fleming
55ba8ef5c4 coding style cleanups on queue interface handling code that was committed for the last release
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@34160 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-14 22:22:21 +00:00
Kevin P. Fleming
b9e587a361 use existing dial string parser for strings supplied to iax2_devicestate, because they can be complete dial strings, not just device names
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@34159 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-14 22:17:37 +00:00
Kevin P. Fleming
724b3d0004 clarify file headers that mention disclaimer usage
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@34087 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-14 14:07:53 +00:00
Kevin P. Fleming
2d7e3395a6 don't output 'no format found' when we _did_ find the format but couldn't open the desired file for some other reason
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@33993 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-14 02:20:22 +00:00
Kevin P. Fleming
5ae03d8ff8 memory allocation optimizations
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@33841 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-13 13:30:06 +00:00
Russell Bryant
4fb3d5bf31 remove duplicate mutex_unlock
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@33813 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-13 12:40:40 +00:00
Russell Bryant
ec39ee2c34 fix various places where the code returns without unlocking vmlock or
destroying loaded configuration


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@33783 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-13 04:31:19 +00:00
Russell Bryant
ecbc33eb78 add a missing close of an open fd, destroy of open config, and removal of the
calling channel from the localusers list


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@33781 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-13 04:20:10 +00:00
Russell Bryant
2a72316550 revert a change that caused more problems than it fixed and fix the real
problem in this code.  fds was declared as an array of zero size which caused
some weird problems, some of which would only be seen when compiling without
optimizations.  (fixes issues #7071, #7326, and #7305)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@33753 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-13 03:55:11 +00:00
Joshua Colp
d1afe5c64f Greatly simply the mixmonitor thread, and move channel reference directly to spy structure so that the core can modify it.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@33724 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-12 21:34:38 +00:00
Russell Bryant
9807f83d64 fix a place where a frame would be free'd twice
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@33693 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-12 20:40:11 +00:00
Kevin P. Fleming
cb1dc40802 only allow chan_local to masquerade the outbound channel onto its owner, instead of the other way around (this will ensure that group variables on the outbound channel as preserved)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@33638 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-12 16:03:29 +00:00
Tilghman Lesher
070d4d3976 Move set priority up, because at this point in the code, stdout is no longer
the console.  If we're unable to set priority, the error goes to Asterisk as
if it were an AGI command (issue 7335).


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@33615 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-12 15:27:18 +00:00
Russell Bryant
0cce2fe2e9 fix another place where a frame does not get free'd
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@33548 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-11 21:21:23 +00:00
Russell Bryant
dcebecb76e fix up five little places where frames would not be free'd and remove an
unnecessary mutex_unlock where there is no way for it to be locked at
that time


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@33545 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-11 21:08:04 +00:00
Russell Bryant
332880b8bc fix a place that would leak a frame (all of these fixes are in applications
that call ast_read() on a channel but have code paths in them that would not 
free the frame)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@33515 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-11 20:48:41 +00:00
Russell Bryant
59224d0f9f fix a couple places that would leak a frame
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@33513 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-11 20:45:06 +00:00
Russell Bryant
33661e9258 fix two places that would cause a frame to be leaked
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@33510 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-11 20:38:39 +00:00
Russell Bryant
4003aff342 fix a case where an HTML frame would be leaked
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@33480 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-11 15:08:12 +00:00
Russell Bryant
de0d5de853 Free frames read from the channel when measuring noise. This resulted in about
9 or 10 seconds of leaked frames in both the TestClient and TestServer
applications


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@33466 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-11 15:02:40 +00:00
Russell Bryant
9c99053126 backport a couple of frame leak fixes from the trunk (revisions 33446, 33447)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@33449 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-11 14:56:55 +00:00
Joshua Colp
9d9a6da961 Allow the format outputted by meetme list to be used for meetme commands (like kick) (issue #7322 reported by darkskiez)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@33300 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-09 18:52:51 +00:00
Joshua Colp
c38c7a1f46 Remove an unneeded double lock (issue #7310 reported by arkadia)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@33297 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-09 18:26:42 +00:00
Joshua Colp
5ccc5a9e53 Handle hangup during recording of screened name (issue #7304 reported by kulldominique)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@33294 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-09 18:08:00 +00:00
Joshua Colp
43f10147fe Add missing newlines (issue #7323 reported by darkskiez)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@33264 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-09 16:31:29 +00:00
Olle Johansson
4de28aa7cc Do not require a context on a domain= setting
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@33235 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-09 15:53:28 +00:00
Kevin P. Fleming
a19de52a1e handle out-of-memory conditions properly in ast_frisolate() (reported by Slav Kenov on asterisk-dev mailing list)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@33036 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-08 16:57:23 +00:00
Russell Bryant
8daadb91c1 fix some broken code with BRIDGE_OPTIMIZATION defined (issue #7292)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@32818 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-07 17:53:21 +00:00
Tilghman Lesher
95cd30dc01 Bug 7287 - A too short voicemail with ODBC_STORAGE will cause the first voicemail to be deleted erroneously
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@32605 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-06 16:55:23 +00:00
Tilghman Lesher
43fa2d54ef Bug 7268 - Callerid leaks memory on error
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@32582 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-06 16:02:43 +00:00
Kevin P. Fleming
f0d3be1740 clean up yesterday's security fix to not cause breakage when video mini frames are received
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@32566 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-06 15:48:00 +00:00
Kevin P. Fleming
c515ef705c ensure that the received number of bytes is included in all IAX2 incoming frame analysis checks (fixes a known vulnerability)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@32373 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-05 19:53:16 +00:00
Kevin P. Fleming
5684ba5966 return bridge exit logic to what it was before i broke it :-(
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@31921 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-04 03:43:35 +00:00
Russell Bryant
9c5890a138 when using moh files mode, don't look for a file past the number of files
that have been loaded, or worse, past the size of the files array


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@31775 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-03 17:02:49 +00:00
BJ Weschke
efee6cdadf Fix doxygen comment about AST_LIST_HEAD_INIT_NOLOCK
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@31738 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-03 14:48:13 +00:00
Kevin P. Fleming
3feead3415 remove pointless forcing of the channel into SLINEAR mode; the write format will be set later based on the file that is chosen to be played to the channel
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@31555 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-01 21:46:50 +00:00
Kevin P. Fleming
84c0989323 handle Zap transfers behind chan_agent properly so the agent doesn't get stuck waiting for the call to hang up
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@31520 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-01 20:27:50 +00:00
Kevin P. Fleming
f963ebd1ab remove a sample entry that never should have been added (code to support it was not merged)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@31321 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-01 12:41:47 +00:00
Russell Bryant
71d9095626 if the connection to a FastAGI server fails because of a timeout, log a more
informative log message


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@31194 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-31 23:50:00 +00:00
Kevin P. Fleming
dbfbe2c679 silence a warning message that is not a warning
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@31161 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-31 22:26:38 +00:00
Russell Bryant
eeb613ea3d fix misplaced manager event (issue #6866, flefoll)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@31127 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-31 20:26:17 +00:00
Kevin P. Fleming
f43b8a655d check the proper variable...
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@30874 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-30 19:18:30 +00:00
Kevin P. Fleming
c882c82377 another S/390 build fix
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@30802 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-30 16:07:16 +00:00
BJ Weschke
a6a17f1789 Fix infinite loop scenario and add some sanity checking to prevent segfault on a NULL parameter coming in (which probably shouldn't happen, but just to be safe...)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@30770 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-30 14:55:16 +00:00
BJ Weschke
a94248e7dc A new way to try and deal with deadlocks that occur in app_queue at present. Using this approach, we only manipulate the main queue mutexes when we get a dev state change on a device that is actually a member of a queue. Backported from /trunk for the "bug fix".
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@30546 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-26 17:09:51 +00:00
BJ Weschke
f1744d3e31 Oops.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@30424 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-25 21:22:16 +00:00
Joshua Colp
9ef31203c9 Don't play the enter sound twice when a person joins a conference after the leader has joined it. (issue #6138 reported by shanermn)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@30373 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-25 20:03:11 +00:00
Russell Bryant
5e266283e9 add a missing endif from the recent Makefile change and use indentation
to hopefully prevent us from breaking this Makefile once again
(This nesting is no longer used in the trunk version of this Makefile)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@30329 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-25 18:40:42 +00:00
Kevin P. Fleming
ce4e323638 don't try to use -march=s390 when building on S/390 systems (reported via asterisk-users mailing list)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@30296 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-25 17:39:33 +00:00
Kevin P. Fleming
547a070805 allow SIPCHANINFO(peername) to work for calls from users as well (issue #7215)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@30293 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-25 17:18:01 +00:00
Joshua Colp
b2e084ae6d Get rid of an incorrect SIP dial string in the sample extensions.conf - I even tried variations... no go (issue #7222 reported by arkadia)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@30239 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-25 15:27:44 +00:00
Kevin P. Fleming
6b101367b8 oops... make sure to stop processing a request once we have sent an authentication challenge (issue #7220)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@30098 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-24 21:24:45 +00:00
Kevin P. Fleming
5ecca96df5 don't send CANCEL on a pending INVITE if we haven't received a provisional response yet... mark it pending until the first response is received (issue #7079)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@30069 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-24 20:09:24 +00:00
Matt O'Gorman
3e830d9a85 app_meemte used the ast_max_exten instead of path_max
solves bug 6822


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@30037 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-24 19:55:21 +00:00
Joshua Colp
42e50f7eae Merge branch for bug 6264 (Privacy option 2 returns dial-status ANSWER / option_priority_jumping not respected) (reported by jkoopmann and branch by murf
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@30035 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-24 19:44:26 +00:00
Joshua Colp
63ffcdfda2 Fix deadlock caused by a race condition in the logger when reloading (issue #7195 reported and fixed by softins)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@30033 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-24 19:14:01 +00:00
Kevin P. Fleming
e9d164d468 support video recording via AGI 'RECORD FILE' command (issue #7068)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@29973 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-24 16:59:20 +00:00
Kevin P. Fleming
f5765a22fc fix various bugs related to exiting from queue via keypress and moh handling (issue #6776, different fix)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@29971 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-24 16:52:08 +00:00
Kevin P. Fleming
84790a577b respect 'usecallingpres' in zapata.conf even if CLID has not been set for the channel (issue #7123)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@29969 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-24 16:17:26 +00:00
Kevin P. Fleming
76066c2b74 fix for non-OSP builds (issue #7217)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@29959 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-24 12:31:45 +00:00
Kevin P. Fleming
9739139287 add an option to allow the admin to 'hide' SIP user/peer names from systems trying to 'fish' names
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@29904 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-24 03:32:02 +00:00
Russell Bryant
6d3d5e1649 fix the sourceaddress option (issue #7213, alphaque)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@29849 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-23 21:44:52 +00:00
Kevin P. Fleming
d6873875cc simplify/fix lock retry, and fix comment
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@29764 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-23 18:16:40 +00:00
BJ Weschke
f84891dfbb Sanity check code for an extended failure in trying to obtain a channel lock that may have been obtained elsewhere. Prevents the monitor thread of the SIP module from going into an infinite loop, effectively, breaking SIP until you restart Asterisk or the mutex is unlocked, whichever comes first.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@29733 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-23 17:17:02 +00:00
Kevin P. Fleming
75ca02dbaa backport some mutex initialization and linked list handling fixes from trunk
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@29732 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-23 17:15:23 +00:00
BJ Weschke
f1c97e7df8 Fix a potential leak and correct (hopefully) a segfault under certain conditions. #6784 (vovan and perry testing)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@29696 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-23 15:58:24 +00:00
Joshua Colp
919e8741b4 Increase the silence threshold to 128 to "fix" it, so I'm told. (issue #6595 reported by davetroy fixed by casper)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@29555 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-22 21:27:12 +00:00
Joshua Colp
7018a80e91 Use the correct language when playing the transfer sound (issue #7109 reported by casper)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@29512 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-22 20:15:04 +00:00
Joshua Colp
f0e022bbad Preserve presentation bit when going through chan_local (issue #7002 reported by acunningham)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@29464 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-22 16:33:03 +00:00
Tilghman Lesher
6691ebf59f Bug 7194 - spelling fix
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@29398 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-22 14:59:59 +00:00
Tilghman Lesher
d5a7d2e170 Bug 7196 - month range did not work
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@29394 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-22 14:34:34 +00:00
BJ Weschke
1795ff12cd When an application that is executed via applicationmap and exits non-zero, make sure that we pass through the correct return value from the application to make sure a segfault doesn't occur by a bridge trying to continue when it should not. Also, when executing applications via applicationmap, make sure that the application is executed against the channel whose DTMF caused it to be fired off in the first place. (part 1/2 of #7090 - this is the only fix that will be applied to both 1.2 and /trunk) acunningham and blitzrage on testing...
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@29196 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-21 15:16:59 +00:00
Russell Bryant
ee808b6187 fix the possibility of writing one byte past the end of a buffer.
(issue #7189, Mithraen)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@29052 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-20 19:50:41 +00:00
Kevin P. Fleming
e0989958cc don't allow queue member devices to ring longer than the total queue timeout (issue #6423, reported and patched by bcnit)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@28968 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-20 02:35:53 +00:00
Russell Bryant
9123735599 fix a case where code made assumptions about how memory for variables is
allocatted on the stack - this patch is slightly different than the one
that went in for the trunk


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@28966 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-20 02:31:30 +00:00
Kevin P. Fleming
4eef3ef785 don't try to predict where the compiler will place things on the stack... put them in the right place explicitly (issues #7029 and #7100, maybe others)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@28896 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-20 00:55:31 +00:00
Kevin P. Fleming
0c4cc3b0ce use the specified 'subscribecontext' for a peer rather than the context found via the target domain (domain contexts are for calls, not for subscriptions) (issue #7122, reported by raarts)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@28794 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-19 19:39:55 +00:00
Russell Bryant
a0c5fed6e8 fix the build of smsq with -Werror. I learned something new about format
strings from this patch!  (issue #7141, Mithraen)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@28790 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-19 19:18:41 +00:00
Russell Bryant
8506e078c5 This explicit poll is only needed on mac. In fact, it breaks some systems
such as some versions of Fedora, causing 'asterisk -rx' to never exit.  This
has been tested on systems showing the asterisk -rx problem, as well as other
unaffected versions of linux, mac osx 10.4, and FreeBSD 6.
(issue #7071)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@28754 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-19 19:01:17 +00:00
Joshua Colp
dda49ce86b Make the minidle option actually exist as documented (issue #7159 reported by imran)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@28698 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-19 17:04:02 +00:00
Joshua Colp
63c91a899e When forwarding messages use the context that the active voicemail user was found in. (issue #7010)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@28651 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-19 16:03:33 +00:00
Joshua Colp
892d98aca0 Backport of fix for issue #6654 that was fixed in trunk but not here
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@28630 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-19 15:52:09 +00:00
Joshua Colp
14285e5b2b Treat paused queue members as unreachable (issue #7127 reported by peterh)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@28627 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-19 15:38:59 +00:00
Kevin P. Fleming
89da276678 fix up a few more places to find the SDP properly (fallout from fix for #7124)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@28384 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-18 20:43:42 +00:00
Kevin P. Fleming
53a0b36973 handle incoming multipart/mixed message bodies in SIP and find the SDP, if presnet (issue #7124 reported and patched by eborgstrom, but very different fix)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@28380 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-18 20:24:07 +00:00
Kevin P. Fleming
bfbf66aec6 use unsigned counters for handling answer/IE lengths while processing DNS results (issue #7174)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@28337 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-18 19:35:55 +00:00
Kevin P. Fleming
2ef43a770b support 'inactive' tag for SDP media streams (simple fix, proper fix will appear in 1.4 release) (issue #7130)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@28335 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-18 19:16:40 +00:00
Tilghman Lesher
25d2c99737 Bug 7167 - HasNewVoicemail and VMCOUNT() didn't work when USE_ODBC_STORAGE was defined
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@28257 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-18 17:27:59 +00:00
Joshua Colp
3c8d8caca1 Return -1 on error in ODBC messagecount and 0 on success (issue #7133 reported by cfieldmtm)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@28212 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-18 16:31:16 +00:00
Joshua Colp
a6d8b31956 Fix endless looping message by checking value of res before doing retries stuff. (issue #7140 reported by tanischen)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@28169 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-18 14:27:21 +00:00
Olle Johansson
9911943d3d Video in meetme? Hmmm. Removed until we do have some code for it.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@28125 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-18 12:13:46 +00:00
Joshua Colp
3361be7b6e Fix codec priority stuff during authentication (issue #6194 reported by jkoopmann)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@27973 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-17 22:34:08 +00:00
Olle Johansson
8b96daf53e Issue #7176 - Crash in expire_register
(We need to find out what's causing peer to be undefined, so this
 is just a bandaid, not a real fix)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@27927 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-17 19:27:15 +00:00
Joshua Colp
968d069242 Priority jumping not working on VoiceMail app with new syntax (issue #7164 reported and fixed by alvaro_palma_aste)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@27847 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-17 17:07:52 +00:00
Joshua Colp
bc3570ac0f OSPNext does not handle success/failure correctly (issue #7147 reported and fixed by eborgstrom)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@27767 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-17 15:17:04 +00:00
Olle Johansson
d5d56f98c3 chan_sip did not use the TRANSFER_CONTEXT for transfers, like res_features. Now fixed.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@27723 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-17 09:21:45 +00:00
Tilghman Lesher
728e1d9a31 Bug 7125 - Fix race condition between resequencing and leaving a message
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@27636 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-17 02:19:50 +00:00
Joshua Colp
961bcfe98c Inherit channel variables during call forwards when going through chan_local (issue #7095 reported by raarts)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@27594 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-16 23:31:56 +00:00
Kevin P. Fleming
e6254eeb34 don't leak frames when deferring DTMF or dropping duplicate ANSWER frames (issue #7041, slightly different fix, reported/patched by clausf)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@27468 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-16 20:05:17 +00:00
Tilghman Lesher
ee46d2d92e Bug 7134 - File descriptor leak with ODBC storage of voicemail
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@27093 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-13 04:08:29 +00:00
Tilghman Lesher
dd260ec707 Bug 7086 - pbx_checkcondition substitution, so that arbitrary strings are true (for regex)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@27051 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-11 23:02:57 +00:00
Kevin P. Fleming
bb0812be95 backport fix from trunk for bug #6934, ensuring that RTP mark bit is changed when SSRC changes
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@26773 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-11 09:05:22 +00:00
Kevin P. Fleming
78986fe938 ensure that we send a response to REGISTER requests that are successfully authenticated but contain invalid Contact URIs
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@26760 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-11 08:52:46 +00:00
BJ Weschke
adbfc9d3c7 Add the appropriate jumping behavior that is the standard for 1.2.X to SIPGetHeader that is now deprecated in /trunk. #7111 (blitzrage!!!)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@26090 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-09 14:18:45 +00:00
BJ Weschke
b2e48e3c22 Correct memory leak in find_user_realtime #7118 (fnordian)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@26050 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-09 13:28:39 +00:00
Olle Johansson
6b93396fb9 Issue 7103 - mikma
- The header is named "Require"
- Don't reply to ACK
	(Not using patch against trunk)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@25608 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-08 15:09:55 +00:00
BJ Weschke
6af35712ef Don't show agents as available when they are in wrap-up time. #6726 (ZX81)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@25563 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-08 14:12:20 +00:00
BJ Weschke
249760b951 Make QueueStatusComplete event thread safe by wrapping it inside the queue lock clause already there. #7013 (bziherl reporting)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@25522 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-08 13:35:17 +00:00
BJ Weschke
d46fa7e825 Oops. :(
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@25520 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-08 13:15:30 +00:00
BJ Weschke
41210a37d6 Don't recheck valid_exit() after getting the result from say_position (which already checks it). Should prevent another loop if the caller hits digits during the position announcement. #6776 (tgj reporting)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@25518 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-08 13:11:32 +00:00
Joshua Colp
72fe69919c Incorrect log statement when playing transfer sounds (issue #7008 reported and fixed by nathan)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@25442 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-08 11:16:10 +00:00
BJ Weschke
b3d0a54a6b Fix playback behavior to exit correctly when we receive a hangup during playback of the invalid pin message. #7091 (AntD reporting)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@25322 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-07 13:38:11 +00:00
BJ Weschke
053f005508 Reset the value of ast_mainpid if we fork so future remote unix connections display the correct PID. #7098 (tzafrir reporting)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@25288 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-07 12:48:09 +00:00
Russell Bryant
a7987a4d36 re-add a couple of lines that I shouldn't have removed in the previous commit.
I think I should be going to bed now ...


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@25165 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-06 02:32:23 +00:00
Russell Bryant
960ad9e350 fix a problem where the frame's data pointer is overwritten by the newly
allocated data buffer before the data can be copied from it.  This is in
the ast_frisolate() function which is rarely used.  (issue #6732, stefankroon)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@25160 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-06 02:25:48 +00:00
Russell Bryant
eb19888db5 ensure that the appropriate manager events are sent in all of the places where
alarms are detected or cleared (issue #6866, flefoll)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@25123 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-06 00:05:27 +00:00
Russell Bryant
0f643c18be update chan_h323 to reflect the new prototype for rtp_set_peer (issue #6560, casper)
This was fixed a couple months ago in the trunk, but never in 1.2.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@25015 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-05 20:49:53 +00:00
BJ Weschke
3bc1111ea8 Voicemail fixes along with an API change approved by russellb to fix the bug(s). (jcollie and supczinskib) #7064
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@25014 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-05 20:44:53 +00:00
Russell Bryant
d27c901fa2 use the correct function name ...
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@24911 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-05 17:39:03 +00:00
Russell Bryant
9d0eead218 use pbx_checkcondition() instead of ast_true() to evaluate the condition
for MacroIf and WhileIf (issue #7086)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@24837 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-05 14:44:50 +00:00
Tilghman Lesher
c7ee76b69f Bug 7023 - reload should not unpause members
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@24706 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-04 16:27:20 +00:00
BJ Weschke
092055c3a5 Make sure that only the "|" is a recognized delimiter for Verbose(), as the app documentation already specifies. #7080 (alessiof reporting)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@24669 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-04 11:17:13 +00:00
BJ Weschke
1b107baf37 Correct application documentation to make users aware that certain options cannot be used in conjunction with others. #6666 (chotaire)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@24567 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-03 20:58:10 +00:00
Russell Bryant
83dc76b389 fix up "make rpm"
- don't reference the gzipped man page, because we don't store them
  compressed anymore
- add some files that currently were not listed
(issue #6837)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@24496 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-03 18:31:20 +00:00
Olle Johansson
87d78ee383 Issue #7074 - Problem with long contact lines
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@24381 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-03 12:39:55 +00:00
BJ Weschke
316e536e5c Make certain ast_stopstream() sets the channel's stream members to NULL after closing them. #7067 (jcomellas)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@24295 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-02 19:39:50 +00:00
Tilghman Lesher
49aa847408 Prompt does not request '#' to end input, so the application should not require it
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@24097 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-02 02:12:52 +00:00
Tilghman Lesher
00c0af845d Bug 6864 - drop realtime priority on ALL external processes
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@24019 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-01 20:44:24 +00:00
BJ Weschke
822ea9615a Correct a condition from the prior patch that could happen in rare circumstances and cause a core dump. Thanks Qwell!
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@23988 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-01 19:34:29 +00:00
BJ Weschke
b7f8ee4a6d Make sure that when someone 0's out while recording a msg and then chooses to DELETE the recorded file, the .txt file isn't left around by itself to cause problems later. #7061 (dimitripietro reporting, blitzrage confirmed)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@23985 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-01 19:26:43 +00:00
Russell Bryant
d3d73f3499 add missing locking of the dialplan functions list in the "show functions"
CLI command


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@23951 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-01 15:12:32 +00:00
Kevin P. Fleming
9426da88b7 fix this to actually compile so people can learn from it
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@23899 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-01 10:45:42 +00:00
Kevin P. Fleming
3e1ca33f4e eliminate compiler warning
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@23898 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-01 10:45:24 +00:00
Kevin P. Fleming
37e9f9a15c remove a pointless comparison, since the buffer is smaller than the length being checked for
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@23705 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-30 15:46:22 +00:00
Kevin P. Fleming
a7961494bd allow top-level OPTIMIZE setting to affect builds in these subdirectories too
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@23673 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-30 14:27:56 +00:00
Kevin P. Fleming
5d04193649 let the compiler determine whether hardware or software floating point should be used (like we do in the editline subdirectory)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@23638 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-30 13:55:59 +00:00
Kevin P. Fleming
4397e6dd42 remove extraneous -m64 flag that is not needed
remove old 'look' target which is no longer needed
(these are coming from Debian patches <G>)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@23636 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-30 13:38:22 +00:00
Kevin P. Fleming
e5c7e5df97 ensure that the script output is correctly generated when the system's character set does not use the English lowercase/uppercase character groups
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@23580 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-30 11:19:04 +00:00
Kevin P. Fleming
8ecd579aec do installation in subdirs as a separate target (so external modules can use the Makefile more easily)
generate final messages -after- running any post-install script that may be present


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@23305 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-29 11:40:04 +00:00
Russell Bryant
d762abaf3b note that group assignments must be from 0 to 63 (issue #7048)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@23176 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-28 16:40:32 +00:00
Joshua Colp
d0aef28b0e Queue(somequeue,,,,) -> interpreted as Queue(somequeue,,,,0) (issue #7044 reported nathan fixed by jsmith - sort of)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@22954 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-27 19:11:47 +00:00
Matthew Fredrickson
cecda9a947 Fix buglet in channel reassignment on SETUP_ACK
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@22866 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-27 16:12:46 +00:00
Matt O'Gorman
d9b9996a59 do not allow for users to forward voicemail to
themselves, patch from 7001


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@22596 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-26 19:18:55 +00:00
Tilghman Lesher
891c6d599e Rolling back change until kpfleming is comfy
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@22113 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-21 22:39:10 +00:00
Tilghman Lesher
f2dc4f491d Bug 7004 - release all threads waiting on a condition prior to freeing it
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@22112 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-21 22:12:26 +00:00
Kevin P. Fleming
089900af32 support system-specific scripts in safe_asterisk, before starting Asterisk proper
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@21638 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-19 21:10:41 +00:00
Tilghman Lesher
95bdc91eaf Bug 6553 - plug memory leaks when ODBC connection is down
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@21597 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-19 18:43:17 +00:00
Kevin P. Fleming
9d5f3974d3 properly handle brace-wrapped strings in variable/function references in the dialplan
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@21237 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-18 23:31:10 +00:00
Tilghman Lesher
e6b64adab2 Bug 6984 - off by one error in Random()
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@21037 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-18 06:26:04 +00:00
Tilghman Lesher
6abf8e5e92 Bug 6544 - when we remove a music class, the thread servicing it should die
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@20966 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-17 17:00:16 +00:00
Kevin P. Fleming
0c108cb1ec uncomment files that actually do exist (oops)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@20037 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-14 17:21:09 +00:00
Kevin P. Fleming
2939ab99bd update text to match actual prompts being distributed (thanks to Kinsey in the support department for reviewing all the prompts!)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@20034 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-14 17:00:32 +00:00
Tilghman Lesher
4bea5adcbf Bug 6947 - Allow vm broadcasts to more than 256 characters worth of mailboxes
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@19891 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-13 20:37:50 +00:00
Kevin P. Fleming
bd9026f975 oops... let's not set a variable and then immediately overwrite it while assuming its old value will magically return
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@19812 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-13 17:40:21 +00:00
Tilghman Lesher
9a13dc9d99 Bug 6957 - variable names beginning with CALLERID weren't substituted correctly
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@19768 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-13 15:56:35 +00:00
Tilghman Lesher
829bf52765 Bug 6490 - telco intercept should report NOANSWER instead of CHANUNAVAIL
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@19397 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-11 22:39:59 +00:00
Tilghman Lesher
b224ed93ca Bug 6061 - Fix ODBC storage of VM on PGSQL and MSSQL
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@19394 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-11 22:24:46 +00:00
Kevin P. Fleming
c3d195a2b3 don't create a 'voicemail' symlink in the sounds directory; app_voicemail has not needed it since January of 2005 (issue #6613)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@19353 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-11 21:58:47 +00:00
Tilghman Lesher
aea2d73afa Bug 6097 - possible descriptor leak
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@19351 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-11 21:55:51 +00:00
Kevin P. Fleming
5bc6b3b6fd don't call the originating device as part of the Page() operation (issue #6932)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@19348 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-11 21:50:18 +00:00
Kevin P. Fleming
58c3bdc8f1 simplify spy queue flushing logic, and always force a flush when one side gets full, even if the other side is not empty (issue #6457)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@19347 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-11 21:35:52 +00:00
Kevin P. Fleming
6f7efa99d5 don't destroy the entire dialplan during 'reload', just atomically replace it like 'extensions reload' does (issue #6047)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@19345 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-11 21:14:42 +00:00
Joshua Colp
fb912bc629 Minor linked lists bug fix. When you're dealing with swapping entries around a lot it can cause a seg fault.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@19303 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-11 20:46:38 +00:00
Kevin P. Fleming
95dc3bba01 handle call time limit properly when warning is requested _after_ call would hae already ended (issue #6356)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@19301 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-11 20:11:01 +00:00
BJ Weschke
83b525e2cb When using the silence detector in ast_play_and_record() and ast_play_and_prepend(), the truncation code never gets called to remove the detected silence, because the value of res is zero when control gets to that point. #6903 w/some mods (softins)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@19008 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-11 01:05:01 +00:00
BJ Weschke
4a40420978 Don't say that we can pass an 'exten' argument in the documentation of Park() when we really cannot. #6902 (opsys)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@18866 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-10 17:29:51 +00:00
Tilghman Lesher
08cc142495 Bug 6914 - .txt file fails to rename on operator out
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@18494 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-08 19:20:45 +00:00
Tilghman Lesher
48d13f84a5 Bug 6913 - fix for possible buffer overflow
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@18436 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-07 22:07:38 +00:00
Olle Johansson
7b12d67e50 - Fix cause codes
- Add cause code for incompatible formats


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@18260 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-07 14:16:41 +00:00
Olle Johansson
d98317c7ad - Fix possible minor memory leak in chan_sip
- Return proper cause code on memory allocation error



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@18250 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-07 13:47:32 +00:00
Kevin P. Fleming
ce8275960e fix typo
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@18089 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-06 22:15:20 +00:00
Kevin P. Fleming
a6e5c98723 small fix... don't try to check conference details if it couldn't be created or found
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@18088 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-06 22:09:54 +00:00
Kevin P. Fleming
60df6b45d2 don't try to support 'i' or 'r' options if chan_zap is not loaded, and warn the user when they attempt to use them (issue #6675)
update application help text to more clearly define when Zaptel and chan_zap are required


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@18087 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-06 22:04:58 +00:00
Russell Bryant
235212182e move continue out of block that checks verbose level (issue #6880)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@17945 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-06 17:24:25 +00:00
Joshua Colp
831a96aac1 Update email address to my Digium one
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@17905 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-06 17:00:10 +00:00
Joshua Colp
bdea273046 Unlock channel on failure so that ast_mutex_destroy doesn't throw a fit (issue #6647 reported by casper)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@17702 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-05 20:01:19 +00:00
Olle Johansson
f08096e951 Issue #6654: Enum crash on ADDRESS record, possibly bad record, but still a crash
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@17489 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-05 06:50:35 +00:00
Olle Johansson
d5a3b59ccf Issue #6878 - Unhide DNDstate manager events (thanks casper)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@17367 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-04 18:28:14 +00:00
Olle Johansson
457bdd22bb Issue #6882 - move "res=-1" out of verbosity block, minor code cleanups (casper)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@17335 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-04 17:59:18 +00:00
Matt O'Gorman
43fde6acce Adds documentation to show what the w flag.
Patch from Ian Kinner at Digium.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@17283 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-04 15:24:50 +00:00
Olle Johansson
adf51ade80 Issue 6870 - document that parking lots need to be numeric
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@17150 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-03 20:38:11 +00:00
Olle Johansson
65f95fee51 Issue #6848 take two - Use the tag provided by the SUBSCRIBE request when sending NOTIFY
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@17147 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-03 20:22:21 +00:00
Olle Johansson
bca4868578 Ugly patch to avoid hangup causes in non-final responses
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@17074 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-03 17:49:17 +00:00
Russell Bryant
9a729f7aff move a NULL check to before the first time the pointer is dereferenced (issue #6832)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@16771 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-31 19:11:26 +00:00
Russell Bryant
d125a1a278 fix the situation where bindport is specified but bindaddr is not (issue #6616)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@16744 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-31 18:42:09 +00:00
Kevin P. Fleming
6c0ac0721e ensure that hint watchers (subscribers) cannot be added or removed while the dialplan is being modified
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@16742 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-31 18:24:22 +00:00
Tilghman Lesher
65acfca5af Bug 6853 - Manager fixes: 1) extra ActionID, 2) missing colon
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@16581 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-30 22:56:35 +00:00
Tilghman Lesher
3585625b40 Bug 6849 - trivial typo fix
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@16579 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-30 22:46:06 +00:00
Joshua Colp
c43f01c211 Add another check for 64-bit goodness (issue #6850 reported by evilbunny)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@16559 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-30 21:44:03 +00:00
Joshua Colp
52aa07e2b2 Do not exceed the array size for maximum allowed moh files. (issue #6842)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@16534 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-30 17:55:28 +00:00
Olle Johansson
b97c1529fc Set initial value on adsipark
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@16346 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-30 01:34:53 +00:00
Olle Johansson
0a48c19845 Typo fix.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@16344 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-30 01:28:41 +00:00
Olle Johansson
8aa27f2c5c Typo (Issue 6839, casper)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@16303 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-30 00:28:59 +00:00
Tilghman Lesher
0bb7b71572 Bug 6830 - Let GosubIf work with the same conditions as a GotoIf (change in API approved by Russell)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@16192 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-29 19:11:18 +00:00
Tilghman Lesher
ac1e4d72dd Bug 6835 - Updates to GotoIf help text
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@16082 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-29 14:10:23 +00:00
Russell Bryant
ecf158b51e tell unsetenv for solaris to return the result of the setenv call
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@16008 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-29 04:15:11 +00:00
Olle Johansson
8d417967ce Issue #6823
- Portability issue with the registration port number patch from yesterday.
  Be compatible with more systems than OS/X :-)
  Thanks Rizzo for the advice.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@15898 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-29 00:58:49 +00:00
Kevin P. Fleming
8d1c316519 ensure that list traversal loops which skip entries properly update the 'previous entry' pointer so when entries _are_ removed the list does not get damaged
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@15896 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-29 00:32:10 +00:00
Russell Bryant
70bd3bebc5 backport astmm + sparch fixes from the trunk
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@15743 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-28 20:22:05 +00:00
Russell Bryant
8c63eaec22 fix Bus Error on sparc (issue #6354)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@15703 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-28 19:47:03 +00:00
Olle Johansson
35ea822831 Fix breakage of NAT support for peers with qualify=yes.
Thanks Damin for access to your system, sorry folks.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@15699 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-28 19:07:34 +00:00
Russell Bryant
420f3d12aa fix the order in which for loops are expanded (issue #6810)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@15658 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-28 18:09:05 +00:00
Tilghman Lesher
469e6d539a Bug 6815 - Adding quotes to make bash happy
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@15615 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-28 17:48:18 +00:00
Olle Johansson
09bf0c3032 Issue #6736 - Use flags for OPTION messages. Thanks Casper!
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@15381 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-27 23:45:31 +00:00
Olle Johansson
3db3883d3d Issue #6597 - sip show registry shows incorrect port
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@15376 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-27 23:29:55 +00:00
Olle Johansson
b85f9ea8fb Issue #6409 - Use "s" extension when there's no username in the URI
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@15366 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-27 22:50:41 +00:00
Tilghman Lesher
84b4d40f79 Bug 6601 - More configuration abilities for the RH init script
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@14868 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-25 05:07:52 +00:00
Tilghman Lesher
ea4baa91d0 Fix incorrect size of zeroing (left over from when maxmsg was hardcoded at 100)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@14830 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-25 05:01:16 +00:00
Tilghman Lesher
eb76fca6a3 Bug 6783 - When context is specified, voicemail should look for mailboxes in that context
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@14821 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-25 04:09:04 +00:00
Russell Bryant
677ed9a31a use the correct variable in an error message (issue #6791)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@14704 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-24 14:48:11 +00:00
BJ Weschke
dea7edda6b Fix a typo in the app description
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@14659 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-24 04:53:42 +00:00
BJ Weschke
da3df5ec26 Doxygen comment typo corrections
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@14610 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-24 00:48:03 +00:00
Joshua Colp
0a0470ad00 Issue #6764 - Return BUSY signal when other party is busy at Attended Transfer (Reported by mnachev)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@14523 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-23 21:51:50 +00:00
Matthew Fredrickson
b89b296584 Fix SETUP_ACK handling so that we change channels if so requested
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@14522 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-23 21:44:36 +00:00
BJ Weschke
41feb1c7ff Bug #5884 - fix a possible race state in app_meetme when a channel has gone away and we are reading continuously for more frames. (mneuhauser)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@14467 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-23 20:43:05 +00:00
Russell Bryant
9884c9637a don't crash when asked to read from a file that doesn't exist (issue #6786)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@14462 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-23 20:13:48 +00:00
Joshua Colp
b0f4874196 Fix a minor code issue
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@14276 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-22 22:18:32 +00:00
Joshua Colp
3667b25224 Issue #6781 - Verbose levels not enforced in app_voicemail (Reported by flobi)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@14275 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-22 22:13:30 +00:00
Joshua Colp
dcccda229d Issue #5918 - Disposition showing FAILED even though call is answered successfully (Reported by tracinet)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@14234 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-22 21:38:32 +00:00
Joshua Colp
d31a0d9e7b Issue #6780 - ast_pbx_outgoing_cdr_failed description fix. (Reported and fixed by casper)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@14191 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-22 20:59:21 +00:00
Olle Johansson
674425a343 Issue #6766 - fix ;user=phone functionality. (Reported by alein, fix by russell - thanks!)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@14140 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-22 09:10:13 +00:00
Russell Bryant
efd60d1d1f add a note explaining how to set the DYNAMIC_FEATURES variable to allow the use
of custom features (issue #6747)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@13964 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-21 18:59:29 +00:00
Russell Bryant
0cfcb22bbc fix crash when using the ParkAndAnnounce application. When using this application,
there will be no peer channel to play the parking announcement to. (issue #6756)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@13961 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-21 18:21:47 +00:00
Russell Bryant
9925080ca6 fix REGEX on strings that contain quotes (issue #6678)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@13925 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-21 17:45:56 +00:00
Russell Bryant
e34983cde0 fix spelling of whiskey
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@13888 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-21 16:22:16 +00:00
Russell Bryant
17187101f6 don't add conference participant if the user hangs up while recording their name (issue #6661)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@13851 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-21 15:53:27 +00:00
Russell Bryant
747495fc0e re-add the Account parameter to the sample call file since it's not really
deprecated since the CDR function is no longer built in


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@13814 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-21 14:20:28 +00:00
Tilghman Lesher
d564b81083 Bug 6714 - Workaround to avoid retrieving incomplete voicemail message
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@13748 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-21 06:24:56 +00:00
Tilghman Lesher
50249c732b Do away with some warnings and fix some indentation
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@13707 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-21 05:27:33 +00:00
Olle Johansson
108275cf6c Do not overwrite ANI if it's set by IE (sendany=yes in the peer)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@13634 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-20 17:36:45 +00:00
Russell Bryant
13b57f8255 revert the change made in revision 12927 in favor of keeping the original
behavior of the option.  The documentation has now been updated to reflect
the actual behavior.  (issue #6523)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@13550 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-19 09:59:55 +00:00
Olle Johansson
6b8f2a96f1 Reset global_rtautoclear at sip reload
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@13547 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-19 09:25:09 +00:00
Tilghman Lesher
b21dc2c0c2 Bug 6737 - Fix compile warning on OS X
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@13279 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-16 20:05:00 +00:00
Olle Johansson
f096152b20 Issue #6690 - clarify progressinband default setting
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@13239 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-16 17:58:54 +00:00
Russell Bryant
3b776cdfdc always use the callerid signalling method set in the zt_pvt strucutre as
opposed to the last one read from the config file (issue #6734, with mods)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@13237 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-16 17:42:46 +00:00
Olle Johansson
9593aa0aa1 To quote giant developers: "Oops". Thanks, Tony!
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@13197 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-16 06:56:20 +00:00
Russell Bryant
4edd97a713 - remove some calculations that will always result in 0
- if a CDR was never started, don't try to calculate a duration and consider it failed


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@13161 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-15 22:16:15 +00:00
Tilghman Lesher
eb1b6f313e Reverting patch from bug 6667
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@13095 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-15 18:07:06 +00:00
Olle Johansson
38ca23948d Issue #6728: Remove parameters to Event: header on SUBSCRIBE requests
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@13026 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-15 13:01:23 +00:00
Russell Bryant
e6ae8990bc when using the G() option to Dial, fix sending the called channel to 1 priority
beyond what was specified (issue #6523)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@12927 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-14 18:41:05 +00:00
Russell Bryant
14e8c4c5a3 fix a problem with not loading realtime queue members by always reloading a
realtime queue from the database even if it is found in the list (issue #6680)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@12925 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-14 18:28:39 +00:00
Tilghman Lesher
b2bd6c27db Bug 6667 - Fix for RFC2833 issues
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@12792 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-13 15:28:35 +00:00
Russell Bryant
d3080cc1ae add locking to protect the list of global dialplan variables
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@12646 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-12 19:26:27 +00:00
Olle Johansson
023a312f65 Set properties on two files that lacked properties for eol etc
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@12613 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-12 18:54:31 +00:00
Russell Bryant
89995395d9 fix build on parisc (issue #6704)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@12577 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-12 17:57:37 +00:00
Olle Johansson
fbe6931218 Issue #5937 - Make sure SIP CANCEL's are re-transmitted
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@12495 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-10 12:13:51 +00:00
Olle Johansson
8545a6d4c0 Issue #6576 - SIP_CODEC not used for early media (reported by gpapadop73)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@12477 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-09 17:00:36 +00:00
Olle Johansson
3388661f38 Issue #6657 - Ignore 183 session progress without SDP
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@12458 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-08 10:51:47 +00:00
Tilghman Lesher
1d58eff4a7 Bug 6020 - Race condition where packet could be lost if first packet on list is acked
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@12195 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-07 00:05:27 +00:00
Tilghman Lesher
cc4595f85e Bug 6664 - More fixes for Solaris
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@12161 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-06 23:03:54 +00:00
Olle Johansson
ac9f562712 Revert earlier change
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@12072 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-06 14:23:14 +00:00
Olle Johansson
b3af62dc4f Fix for astmm compilation
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@12036 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-06 11:03:46 +00:00
Russell Bryant
a70900ccd0 fix a typo in the description of the ringtimeout option
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@11946 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-06 02:32:35 +00:00
Olle Johansson
782eb432ab Clear page2 flags at reload too
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@11849 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-05 12:40:10 +00:00
BJ Weschke
4e3b9d6389 Substitute variables in the post_process string (if it exists) before those variables could possibly disappear (channel hangup) #6462
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@11778 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-04 11:45:37 +00:00
Tilghman Lesher
dbc0f5d2e2 Bug 6638 - Solaris is starting to remind me of RedHat...
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@11715 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-03 17:13:37 +00:00
Olle Johansson
ea27f3c186 Change of URL
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@11659 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-03 08:12:33 +00:00
Tilghman Lesher
2dc23188a2 Bug 6638 - Use POSIX command for Solaris
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@11635 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-03 00:38:14 +00:00
Tilghman Lesher
a4725e9c73 Bug 6638 - Change from a historic BSD command to a POSIX command for determining username
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@11634 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-03 00:34:52 +00:00
Tilghman Lesher
575c2bccd5 Bug 6637 - Fixes for Solaris
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@11609 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-02 22:26:30 +00:00
Tilghman Lesher
2d5cc8be5c If debugging, the frame pointer is helpful
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@11607 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-02 22:19:52 +00:00
Russell Bryant
10191fe126 fix inaccurate ack message to ChangeMonitor action (issue #6630)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@11561 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-02 19:05:40 +00:00
Russell Bryant
4a391da1bd make the terminology used in the synopsis match the option description
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@11530 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-02 06:16:26 +00:00
Russell Bryant
86406e8ba0 add the -L option to the synopsis on the man page
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@11528 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-02 06:11:53 +00:00
Tilghman Lesher
536dcc2058 Bug 6615 - Fix 64bit conversion errors by using a long int
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@11503 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-01 17:41:52 +00:00
Tilghman Lesher
c4c44af8e3 Bug 6618 - Solaris compatibility fix
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@11479 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-01 06:39:10 +00:00
Russell Bryant
b26f150b75 fix the output that indicates whether qualify smoothing is on or not (issue #6608)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@11410 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-28 19:46:04 +00:00
Russell Bryant
271ccecaf2 adjust the keys directory when astvarlibdir is specified in asterisk.conf (issue #6602)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@11408 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-28 19:31:10 +00:00
Russell Bryant
0742e08800 add a missing newline in the agi app description (thanks wunderkin!)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@11382 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-28 18:31:04 +00:00
Russell Bryant
34a135da3b don't try to print the help text for a CLI command when RESULT_SHOWUSAGE is
returned if there is no help text available (issue #6604)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@11281 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-27 15:20:48 +00:00
Russell Bryant
39139b2802 fix finding realtime peers that are not dynamic by ip address (issue #6093)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@11279 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-27 15:14:53 +00:00
Russell Bryant
799247b4d5 don't hang up the channel if its state is set to UP before we return from ast_call (issue #6569)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@11250 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-27 02:50:09 +00:00
Tilghman Lesher
677a22c209 Bug 5950 - reenable queue log rotation; also, eliminate redundant code
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@11165 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-26 16:26:39 +00:00
Matthew Fredrickson
973a1dec88 Backport of fix to translation optimizations. Thanks again file!
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@11120 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-25 19:54:40 +00:00
Kevin P. Fleming
dfc0e65f4b factor the number of translation steps required into translation path decisions, so that equal cost paths that require fewer translations are preferred
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@11089 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-25 05:08:46 +00:00
Kevin P. Fleming
1e94621214 reformat code to fit guidelines
remember which translation paths are multi-step paths


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@11062 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-25 04:59:50 +00:00
Kevin P. Fleming
5fbe407b98 ensure that spy frame queueing is able to deal with translation failing for any reason (issue #6546)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@11058 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-25 04:23:48 +00:00
Tilghman Lesher
a3ce65e5cd Oops, this was broken in 1.2, too.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@10952 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-23 23:06:42 +00:00
Kevin P. Fleming
fcf8040825 backport list handling fix from trunk (solves memory leak problem in cdr variables and device state watchers)
remove unusued variable to silence compiler warning


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@10863 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-23 14:57:53 +00:00
Kevin P. Fleming
842e9246a6 add comment warning people about trying to use hostnames/IPs in the sample config
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@10736 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-22 17:32:15 +00:00
Tilghman Lesher
6b682d34ff Would be nice to tell people to look in the right file to increase a constant
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@10577 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-20 23:01:12 +00:00
Mark Spencer
1ef0003131 Handle ACKing properly (remove gratuitous -1)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@10535 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-20 06:17:26 +00:00
Mark Spencer
4e884dbd28 Fix numerous places in jitter buffer where freed memory is referenced
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@10511 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-20 05:54:10 +00:00
Tilghman Lesher
0a1d8918d8 Okay, fseek doesn't return an offset
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@10487 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-19 18:29:16 +00:00
Tilghman Lesher
3da520e492 Fix possible lack of initialization of useadsi
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@10464 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-19 17:26:31 +00:00
Tilghman Lesher
0a0cf51877 Bug 6539 - Division by two negates error flag
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@10462 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-19 17:11:02 +00:00
Tilghman Lesher
cab988b595 Bug 6529 - memory leak in ast_play_and_prepend
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@10409 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-18 00:17:09 +00:00
Russell Bryant
507c47ffa4 fix incorrent index calculation for jitterbuffer history (issue #6517)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@10368 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-17 01:55:10 +00:00
Russell Bryant
7c92ffe150 when executing the Directory application from voicemail and a context is not
specified, use the "default" context, not the channel's current context (issue #6507)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@10301 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-16 18:07:52 +00:00
Kevin P. Fleming
f522e07cbd ensure that agents logged in via the manager interface are stored in the persistence database (related to issue #6301)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@10137 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-15 01:21:33 +00:00
Kevin P. Fleming
df18b234b1 handle longer ENUM lookup results (issue #6476)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@10110 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-15 00:46:18 +00:00
Kevin P. Fleming
7652fdda20 ensure that FastAGI launcher can handle system call interruption (issue #6449)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@10108 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-15 00:36:57 +00:00
Matt O'Gorman
bab77bbab1 bug fix from 6485 with musiconhold not being turned
off by app_meetme


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@10021 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-14 20:56:41 +00:00
Kevin P. Fleming
ce008d40a1 don't double-increment abandon counter for calls that are hung up while dialing members (issue #6289)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@10018 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-14 20:20:15 +00:00
Mark Spencer
710445b5b1 Fix stopstream in menus (bug #6137)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@9990 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-14 19:11:25 +00:00
BJ Weschke
ba001a7d15 #ifdef the include too.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@9964 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-14 18:50:42 +00:00
BJ Weschke
4f144aa5e3 #ifdef'd the prctl fix to only try and compile on linux systems. Thanks rizzo for pointing this out.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@9961 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-14 18:45:34 +00:00
Kevin P. Fleming
8d66f50877 when answering INVITE, don't send codecs the peer didn't offer (issue #6052)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@9958 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-14 18:30:10 +00:00
Kevin P. Fleming
e0db36550e revert yesterday's temporary fix for issue #6052
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@9953 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-14 18:23:13 +00:00
BJ Weschke
13f4e66b14 Fixed my silly backport error from r9861
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@9870 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-14 04:45:14 +00:00
BJ Weschke
ae8fe3738b Merged changes from r9844 from /trunk. Make sure that PR_SET_DUMPABLE is set to make certain that we still dump core if Asterisk has setuid'd to run as non-root.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@9861 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-14 03:08:17 +00:00
Kevin P. Fleming
b5111fb985 don't try to use peer's dynamic codec numbers, it leads to duplication (issue #6052)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@9818 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-14 00:46:00 +00:00
Josh Roberson
671cde62de Don't set the formats before we stop indications. (issue #6380)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@9756 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-13 17:37:53 +00:00
Russell Bryant
0ea76a52a9 fix memory leak from not destroying the scheduler context on module unload
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@9609 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-11 19:23:20 +00:00
Russell Bryant
db467378b4 fix due to CDR changes
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@9607 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-11 19:16:23 +00:00
Russell Bryant
e27d844918 now that CDR is a loadable module, don't depend on it elsewhere (issue #6460)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@9581 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-11 18:15:00 +00:00
Kevin P. Fleming
3b0edd5cfe clean up my mess from thread-starting change
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@9528 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-11 15:22:55 +00:00
BJ Weschke
74eef60486 kpfleming's fix from r9472 backported to 1.2
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@9493 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-11 06:29:34 +00:00
Kevin P. Fleming
b3a8fbf495 don't create monitor threads in detached mode, when we need to be able to pthread_join() them later if the module is unloaded (solve crash-on-unload problem for these channel modules)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@9404 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-10 20:38:59 +00:00
Tilghman Lesher
bae6e7b617 Revert behavior change from previous commit (fixes only)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@9326 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-09 21:10:10 +00:00
Tilghman Lesher
cf015dbefc Backport 5929 to 1.2
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@9323 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-09 21:02:05 +00:00
Russell Bryant
32cc1bedc1 add another location for postgresql headers (issue #6419)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@9262 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-09 02:31:21 +00:00
Russell Bryant
a96ecb64a6 reload peercontext on iax2 reload (issue #6442)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@9246 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-09 01:24:55 +00:00
Tilghman Lesher
d1757b3b49 Leave it to RH/CentOS to put the freetds headers in a completely nonstandard location.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@9233 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-08 22:34:38 +00:00
Matt O'Gorman
917259bcd3 Make logger report error,warning,notice if logger.conf
not found, also updated chan_oss to give correct
error message if its config file is not found.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@9232 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-08 22:12:34 +00:00
Tilghman Lesher
eb177856db Bug 6176 - Fix race condition
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@9156 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-05 17:10:19 +00:00
Kevin P. Fleming
9849ad993d don't override ASTERISKVERSIONNUM to 000000 for non-svn builds
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@9086 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-02 18:37:04 +00:00
Matthew Fredrickson
bb886dd488 Fix for (#6309), potential (highly unlikely) memory leak in res_odbc
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@9073 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-02 16:12:13 +00:00
Kevin P. Fleming
48fb967c05 disable buggy PRI user-user code until it can be fixed
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@8905 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-30 17:08:28 +00:00
Olle Johansson
e74a7116e5 Issue 6182 - Don't remove scheduled event until it's really done.
(reported by malverian) 


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@8808 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-28 13:52:15 +00:00
Olle Johansson
fd25b81993 Issue 6362 - Register without Contact: and Expires: fails (reporter: op)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@8785 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-27 08:02:16 +00:00
Tilghman Lesher
dcd9d8d58f Bug 6072 - Revisions to the source bison and flex files don't auto-regenerate these files
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@8758 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-27 00:52:12 +00:00
Russell Bryant
1d9b2a9df1 fix problem with dtmf on e&m (issue #6364)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@8729 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-26 19:42:35 +00:00
Olle Johansson
659da47b95 Issue 5898: Registrations does not get deleted if there's an active SIP dialog
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@8710 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-26 14:39:36 +00:00
Russell Bryant
e83bfee678 don't call ast_update_realtime with uninitialized variables if we get a
registration with an expirey of 0 seconds (issue #6173)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@8677 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-25 19:14:43 +00:00
Russell Bryant
ab209c7d92 fix memory leak (inspired by issue #6351)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@8666 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-25 18:39:44 +00:00
Olle Johansson
dc08bd8501 Issue #6439 - the "timebomb" bug. Patch by Markster over GPRS
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@8632 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-25 09:46:43 +00:00
Russell Bryant
aca3c1f79d don't leak almost 200 bytes for each new channel (issue #6330)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@8619 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-25 05:38:36 +00:00
Kevin P. Fleming
e07c977f18 ensure hangup cause code is handled properly when channel does not return a frame (issue #6346)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@8608 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-25 01:50:52 +00:00
Russell Bryant
2ae21cc5c3 completely arbitrary whitespace change for testing something with svnmerge ...
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@8600 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-24 22:55:32 +00:00
Kevin P. Fleming
05fed23d06 ensure that channel cannot become zombie after we check but before we try to start indications
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@8588 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-24 22:32:09 +00:00
Matthew Fredrickson
2f43722570 Backport fix for #6229, hangup on polarity reversal
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@8573 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-24 20:37:30 +00:00
Olle Johansson
7ea315539c Issue 6114: Don't hangup on BYE/ALSO with no channel.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@8562 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-24 19:21:15 +00:00
Olle Johansson
10d527906a Issue #6308 - never send response to ACK. (Reported by whiskerp)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@8537 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-24 13:15:13 +00:00
Russell Bryant
2f1d118537 fix memory leak from not freeing the queue member list when freeing an old queue
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@8445 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-22 19:03:53 +00:00
Russell Bryant
696922defe fix MixMonitor crash (issue #6321, probably others)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@8437 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-22 17:47:13 +00:00
BJ Weschke
cea50c9247 Bug fix: Correct some scenarios where CALL_LIMIT could not be getting adjusted properly allowing chan_sip to send calls when it really shouldn't. Bug #6111
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@8433 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-22 15:13:41 +00:00
Tilghman Lesher
636f956bf0 Bug 6281 - Cannot set more than a single header with SIPAddHeader
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@8429 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-22 08:52:49 +00:00
Russell Bryant
64b1d91701 add a modified fix to prevent writing outside of the provided workspace when
calculating a substring (issue #6271)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@8418 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-22 02:05:41 +00:00
Russell Bryant
ff83f7c6ed temporarily revert substring fix pending the result of the discussion in issue #6271
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@8414 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-21 23:43:14 +00:00
Russell Bryant
87c0cd2667 prevent the possibility of writing outside of the available workspace (issue #6271)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@8412 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-21 23:17:06 +00:00
Tilghman Lesher
366c8a99ef Bug 5936 - AddQueueMember fails on realtime queue, if queue not yet loaded
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@8394 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-21 18:29:39 +00:00
Russell Bryant
30f2aff526 fix invalid value of prev_q (issue #6302)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@8347 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-20 18:34:42 +00:00
Matt O'Gorman
962cffffc7 solved problem with delayreject and iax trunking
bug 4291


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@8320 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-20 01:00:46 +00:00
Olle Johansson
f196484187 Enable "musicclass" setting for sip peers as per the config sample.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@8281 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-19 19:40:28 +00:00
Tilghman Lesher
c40fe2f71a Bug 6072 - Memory leaks in the expression parser
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@8276 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-19 19:14:37 +00:00
Russell Bryant
74c149e891 fix Message-Account header to use the ip address if the fromdomain
isn't set (issue #6278)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@8242 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-19 04:56:48 +00:00
Russell Bryant
57c82eb66f fix a seg fault due to assuming that space gets allocatted on the stack in the
same order that we declare the variables (issue #6290)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@8232 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-19 04:17:45 +00:00
Matt O'Gorman
5460606cff Solves issue with the login proccess in meetme
patch from 6136


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@8194 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-18 21:02:06 +00:00
Russell Bryant
1a509417a4 remove ChangeLog from the 1.2 branch. It will only be present in the tags.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@8173 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-18 02:49:21 +00:00
Matt O'Gorman
898cd20ceb Changed order of autoload so that pbx_ comes before
channels, and in doing so cause bug 6002 to not
be an issue


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@8162 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-18 00:47:04 +00:00
Matt O'Gorman
792b78b317 Stop any generators running on a channel when
festival is called as described in 5996


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@8140 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-17 20:10:29 +00:00
Matthew Fredrickson
4efe647169 Backport of fix for #6094
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@8134 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-17 18:29:57 +00:00
Matt O'Gorman
4fbba55f14 Fixed code ordering of logger_init and queue_log_init
bug 6263


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@8124 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-17 16:55:30 +00:00
Kevin P. Fleming
2efc5a9e83 update CLI copyright notice
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@8122 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-17 13:11:55 +00:00
Kevin P. Fleming
57144d5102 do rlimit check _after_ reading config file, in case 'dumpcore' is specified there
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@8112 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-16 23:51:37 +00:00
Tilghman Lesher
555bbffec3 Bug 6238 - Fix segfault when delimiter not specified
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@8074 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-14 19:06:44 +00:00
Russell Bryant
e22510658b fix spelling errors (issue #6227)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@8047 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-13 06:07:39 +00:00
Tilghman Lesher
cb08e49303 Bug 6211 - Add option deletevoicemail as equivalent to option delete for Realtime
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7999 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-12 06:14:22 +00:00
Russell Bryant
dee03d2b80 move variable to correct scope (issue #6197)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7986 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-11 19:08:53 +00:00
Russell Bryant
b5ec3e47fa fix temp greetings with ODBC storage (issue #6078)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7976 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-11 07:18:16 +00:00
Russell Bryant
ffb11fb950 fix mem leak on module unload (issue #6190)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7972 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-11 05:46:39 +00:00
Russell Bryant
fbee1f0ed7 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)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7970 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-11 05:26:21 +00:00
Russell Bryant
131ada1116 lock list of translators *before* recalculating the translation matrix
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7965 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-11 04:53:24 +00:00
Matt O'Gorman
b0609b29aa Minor typo refrenced in 6191
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7963 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-11 04:38:07 +00:00
Russell Bryant
bbb59b8c5e fix locking error - lock instead of unlock
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7960 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-11 04:19:21 +00:00
Russell Bryant
72deed0c37 fix a little typo
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7957 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-11 03:12:44 +00:00
Tilghman Lesher
b9f8c60fa7 Bug 6192 - behave correctly when mailbox is specified as argument
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7955 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-11 01:30:10 +00:00
Olle Johansson
87b36e1ff1 - Adding reference to README.tds
- Reformatting table


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7939 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-10 08:48:14 +00:00
Kevin P. Fleming
d8c5d338cb re-initialize _all_ sequence numbers when transfer completes
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7917 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-09 22:48:48 +00:00
Russell Bryant
417438fea0 add missing unlock (issue #6112)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7915 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-09 22:07:26 +00:00
Tilghman Lesher
5488ffb6d4 Bug 6157 - Memory leak
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7908 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-09 20:08:24 +00:00
Tilghman Lesher
e8725ce940 Update variable documentation to match the code
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7904 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-09 18:37:50 +00:00
Kevin P. Fleming
0e734920e8 commit user/group-related changes from trunk
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7900 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-09 18:11:23 +00:00
Kevin P. Fleming
ad598a2060 backport fix from revision 7856 of trunk
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7899 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-09 18:09:53 +00:00
Kevin P. Fleming
bb47f95262 fix breakage introduced in revision 7871
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7898 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-09 18:08:07 +00:00
Russell Bryant
a7a2115b9c fix seg fault when using greek syntax in VoicemMailMain (issue #6142)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7871 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-09 05:11:44 +00:00
Russell Bryant
18429f2a69 backport fix for unnecessary unlock (issue #6171)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7870 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-09 04:52:16 +00:00
Tilghman Lesher
7e6430787c Bug 6156 - catch all threading errors, not just simple failure
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7848 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-07 07:27:18 +00:00
Tilghman Lesher
dc3ba8c223 Dumb error messages - "Context 'context' already included in 'in' context"
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7831 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-06 00:34:40 +00:00
Kevin P. Fleming
2fd6520a7e update agent persistence when an agent gets logged off by autologoff
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7829 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-06 00:21:00 +00:00
Tilghman Lesher
7a61b36104 Bug 6076 - Fix documentation of ast_trim_blank return value
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7827 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-05 23:53:07 +00:00
Kevin P. Fleming
2f4783a770 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


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7825 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-05 23:49:50 +00:00
Tilghman Lesher
6056391a78 Bug 6081 - fix for memory leak, formatting fixes
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7823 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-05 23:07:08 +00:00
Kevin P. Fleming
213b3575ce ensure that variable is initialized
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7819 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-05 20:52:38 +00:00
Olle Johansson
3821e18d08 Fix copyright of changed file
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7812 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-05 09:13:21 +00:00
Kevin P. Fleming
224c6e3f7c send device state updates for auto-logoff of agents as well
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7809 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-05 00:58:29 +00:00
Kevin P. Fleming
18ab6f429c doh... fseek() has no useful return value
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7807 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-05 00:18:46 +00:00
Kevin P. Fleming
07f8542ce7 use proper fwrite() parameters and return value
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7805 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-04 23:51:03 +00:00
Kevin P. Fleming
cf293c224d return properly after extending file
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7803 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-04 23:45:34 +00:00
Kevin P. Fleming
e234ad0011 ensure that ulaw/alaw sound files are filled with silence when extended (not zeroes)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7800 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-04 23:27:57 +00:00
Kevin P. Fleming
229b778b0b make monitoring more tolerant of peers that deliver frames in bursts
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7799 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-04 23:02:38 +00:00
Olle Johansson
66f484defe Issue #5980: Removing extra CR+LF in manager events - needs port to trunk
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7795 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-04 21:46:40 +00:00
Olle Johansson
ed523e248a Fixing typo in XML for video updates.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7792 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-04 21:43:14 +00:00
Russell Bryant
3c49f27bf4 use a more correct way of determining the size of the destination buffer
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7773 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-04 07:06:50 +00:00
BJ Weschke
226d146b25 Fix the 'if' clause to be true under the right conditions. Bug #6126
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7771 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-04 05:27:38 +00:00
Kevin P. Fleming
1892289329 remove unused 'old' expression parser
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7746 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-03 20:22:18 +00:00
Tilghman Lesher
5529fc0355 Bug 6121 - typo in application description
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7743 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-03 18:15:12 +00:00
Kevin P. Fleming
73ef559240 revert incorrect fix for bug #6048 from revision 7709
put in correct (simpler) fix
add doxygen docs for channel spy 'state' values


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7740 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-03 17:24:56 +00:00
Kevin P. Fleming
b59a63c8cd backport rport scanning fix from trunk (bug #6071)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7738 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-03 17:00:01 +00:00
Kevin P. Fleming
c36927137f don't leak memory for (most) expression evaluations
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7736 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-03 16:34:12 +00:00
Tilghman Lesher
649aaad100 Bug 6084 - MixMonitor after a 'cli stop monitor' deadlocks
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7709 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-02 07:31:54 +00:00
BJ Weschke
ea4c262482 Fix compiler warnings.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7706 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-02 02:04:14 +00:00
Tilghman Lesher
89de6c9df6 Bug 6091 - Fix race condition around uniqueid
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7677 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-30 14:54:19 +00:00
Russell Bryant
4578bc3b0c fix memory leak in build_rpid (issue #6070)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7665 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-28 17:35:56 +00:00
Russell Bryant
8df1e4866a backport fix for permissions of created recordings (issue #6067)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7663 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-27 21:07:08 +00:00
Kevin P. Fleming
9f92220a9c backport fix to ensure that DSP is never enabled on pseudo channels
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7641 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-27 00:07:45 +00:00
Tilghman Lesher
09a9e7bcb7 Remove copy of code in libc, preferring code in utils.c (public domain code)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7637 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-26 20:32:50 +00:00
Russell Bryant
a434f8877a cast time_t to an int in printf/scanf (issue #5635)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7634 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-26 18:19:12 +00:00
Tilghman Lesher
ef891dc0a7 Bug 6051 - VMCOUNT should work as documented and count all, not quit after finding 1
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7608 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-23 06:38:08 +00:00
Kevin P. Fleming
3ebe29c983 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)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7606 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-23 03:01:24 +00:00
BJ Weschke
1028e43464 Another app documentation tweak.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7605 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-23 00:00:11 +00:00
Tilghman Lesher
4979f66f28 Bug 6050 SQL requires the use of single ticks to delimit values, not quotes
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7601 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-22 22:04:13 +00:00
Russell Bryant
a5e9fe97c8 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


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7599 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-22 20:36:47 +00:00
Russell Bryant
2293cfaf84 remove stray unlock (issue #5955)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7595 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-22 16:17:43 +00:00
Josh Roberson
d252dde933 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.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7586 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-21 22:23:39 +00:00
Tilghman Lesher
37a49a5992 Allow a chan_alsa that failed to open sound devices to be unloaded.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7582 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-21 20:01:16 +00:00
BJ Weschke
2783801610 Bug #6040 - Documentation correction
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7580 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-21 19:53:49 +00:00
Tilghman Lesher
82f19c9a91 Bug 5777 - Remove parentheses on Goto in AEL, so that it parses correctly
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7577 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-21 19:23:12 +00:00
Russell Bryant
71d9531e45 check array bounds when parsing arguments to AGI (issue #5868)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7557 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-20 20:21:26 +00:00
Russell Bryant
3bbeaefa57 backport fix for reloading peer context (issue #6007)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7552 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-20 18:05:45 +00:00
Russell Bryant
4611be805a backport fix for segfault on directed pickup when no CDR is available (issue #5998)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7550 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-20 17:34:00 +00:00
Kevin P. Fleming
587493fdfc backport fix for larger-than-20ms-frames from trunk (bug #5697)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7546 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-20 12:58:37 +00:00
Russell Bryant
50079144e3 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)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7529 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-19 23:47:23 +00:00
Tilghman Lesher
2ca80e76a0 Bug 5988 - record append option not working
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7523 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-19 19:06:46 +00:00
Tilghman Lesher
68e6502484 Bug 6026 - segfault for the sequence NoCDR(), SetAMAFlags()
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7521 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-19 05:38:44 +00:00
Tilghman Lesher
1e91dfa5df Document that curley braces must be on the same line as the keyword.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7519 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-17 18:55:38 +00:00
Tilghman Lesher
e4e5f7c65b Bug 6009 - off by one error
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7517 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-17 17:19:32 +00:00
Kevin P. Fleming
8ef66261f1 Max-Forwards headers must only be present on requests, not responses
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7515 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-17 03:59:05 +00:00
Kevin P. Fleming
90812b536c 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)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7513 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-17 03:44:30 +00:00
Kevin P. Fleming
2b880d3ef8 fix some buglet when building team branch version strings
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7510 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-17 02:20:04 +00:00
Tilghman Lesher
6ab729aeb3 We want to check the previous value, not the current value (which was just changed).
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7508 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-17 01:02:29 +00:00
Tilghman Lesher
c9f97f49c5 First field is truncated
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7497 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-16 00:49:39 +00:00
Christian Richter
8b352fcb94 * 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






git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7490 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-15 10:52:30 +00:00
BJ Weschke
5a06af4d57 Bug #6003 - Don't free the channel structure until after having sent the manager event.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7482 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-15 02:51:54 +00:00
Kevin P. Fleming
2ede900bfd clarify substring documentation
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7470 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-13 18:54:22 +00:00
Kevin P. Fleming
fb0ffc7784 correct broken math in tvfix() for timestamp values over one million
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7468 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-13 16:06:27 +00:00
Kevin P. Fleming
e69171dc06 restore ability of caller to hangup calls that are still ringing (issue #5839)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7453 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-13 05:53:00 +00:00
Kevin P. Fleming
8452f6b494 ensure that hangups while incoming calls are in early state are handled properly (issue #5919)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7451 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-13 05:14:27 +00:00
Kevin P. Fleming
f9bc6f8afc only report AGENT_IDLE for callback mode agents when they are actually idle (issue #5902)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7449 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-13 04:43:38 +00:00
Kevin P. Fleming
f9f44d7d9b 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)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7448 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-13 04:25:14 +00:00
Kevin P. Fleming
86bb1472cc 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
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7435 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-12 17:30:59 +00:00
Tilghman Lesher
ef09c506c8 Typo
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7433 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-12 17:19:29 +00:00
Russell Bryant
af7b3b420e silence a couple of compiler warnings about pointer signedness
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7430 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-11 06:08:56 +00:00
Tilghman Lesher
3b80a35a66 Bug 5965 - major bug in AST_LIST_REMOVE
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7429 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-11 01:26:51 +00:00
Tilghman Lesher
f59b27258c Bug 5967
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7427 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-11 01:15:15 +00:00
BJ Weschke
d38fff38f9 Bug #5877
Make sure the digit string from E&M wink DNIS collection is properly null terminated as it grows.



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7425 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-10 18:10:50 +00:00
Tilghman Lesher
91c5b12f25 Bug 5960
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7406 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-08 23:45:36 +00:00
Tilghman Lesher
894bdd5cda Documenting two keywords that were previously missing
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7404 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-08 23:32:08 +00:00
Kevin P. Fleming
d8c58ca6c8 initialize the buffer before using it...
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7386 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-08 01:05:43 +00:00
Kevin P. Fleming
43f7956422 ensure that hints are allowed to use global variable references
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7382 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-07 20:46:55 +00:00
Kevin P. Fleming
96fcc02900 ensure that sound/music files are handled as binary
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7351 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-06 00:23:05 +00:00
Kevin P. Fleming
2e8b6e7f20 replace with unmodified file
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7349 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-06 00:19:17 +00:00
Kevin P. Fleming
3ed93398e9 _really_ don't mess with line endings
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7347 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-06 00:08:19 +00:00
Kevin P. Fleming
d84e0caea8 don't try to expand keywords in this file
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7346 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-06 00:07:48 +00:00
Kevin P. Fleming
5c1da58b90 set this file to binary mode, so it won't be mangled on export/checkout
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7345 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-06 00:02:08 +00:00
Russell Bryant
018c617199 remove ASTERISKVERSIONNUM from the version string given to doxygen
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7340 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-05 06:47:51 +00:00
Russell Bryant
a49f954f6a don't delete dynamic queue members when reloading the static members from a realtime database (issue #5922)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7337 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-05 00:09:12 +00:00
Russell Bryant
03a8791440 fix the order of arguments to an error message (issue #5927)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7335 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-05 00:01:17 +00:00
Kevin P. Fleming
78ad17381e use a more efficient way to get the revision number, that will also report if the working copy contains uncommitted modifications
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7329 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-04 18:03:07 +00:00
Tilghman Lesher
5b03803e2f 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)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7310 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-03 19:55:05 +00:00
Olle Johansson
ee1e461a57 Documenting the default registerattempts setting as 0, continue hammering the server for ever and ever ;-)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7299 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-03 01:24:40 +00:00
Tilghman Lesher
a543725311 Turn on executable bits for startup scripts, and fix bash var interpolation for Mandrake
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7285 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-02 21:12:05 +00:00
Olle Johansson
8c701a0861 Bug #5907. Improve SIP INFO DTMF debugging output. (1.2 & Trunk)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7275 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-02 00:52:13 +00:00
Kevin P. Fleming
5fbe566524 inherit channel variables into channels created by Page() application (issue #5888)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7274 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-02 00:51:15 +00:00
Kevin P. Fleming
e14cf31bc9 allow previous context-searching behavior to be used if desired (issue #5899)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7273 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-02 00:42:40 +00:00
Kevin P. Fleming
0042c03c7e 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)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7272 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-02 00:39:00 +00:00
Kevin P. Fleming
41023ecb9c protect agent_bridgedchannel() from segfaulting when there is no bridged channel (issue #5879)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7271 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-02 00:28:48 +00:00
Kevin P. Fleming
fb8d0a544d allow variables to exist on both 'halves' of the Local channel (issue #5810)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7270 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-02 00:26:12 +00:00
Kevin P. Fleming
acaf8c9cc9 don't block waiting for the Festival server forever when it goes away (issue #5882)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7269 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-01 23:49:44 +00:00
Kevin P. Fleming
0d3fc8d103 ensure channel's scheduling context is freed (issue #5788)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7268 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-01 23:34:58 +00:00
Kevin P. Fleming
9bbfbacacc Makefile 'update' target now supports updating from Subversion repositories (issue #5875)
remove support for 'patches' subdirectory, it's no longer useful


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7266 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-01 23:18:29 +00:00
Olle Johansson
8e301c629f Changing bug report address to the Asterisk issue tracker
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7265 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-01 23:18:14 +00:00
Olle Johansson
9576d8a081 Removing references to 1.1dev, replacing with 1.2, in documentation files.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7263 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-01 22:21:13 +00:00
Olle Johansson
7db96672bf Fixing some spelling errors, as well as changing "cvs" to "subversion" in misdn documentation.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7261 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-01 21:38:38 +00:00
Kevin P. Fleming
0d8f099ca2 ensure that 'svn info' output is in the expected language for the script to parse (issue #5880)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7257 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-01 19:25:06 +00:00
Russell Bryant
0a4d7e5068 use ast_app_separate_args to split arguments (issue #5686)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7251 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-01 02:33:58 +00:00
Russell Bryant
a32f75b800 fix queue weight feature - compare member interfaces instead of pointers to
the members, since each queue has its own list of members. (issue #5863)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7249 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-01 01:19:04 +00:00
Russell Bryant
78f37c51ef use '=' instead of '==' for string comparisons. /bin/bash is ok with this, but
/bin/sh is not.  (issue #5885)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7247 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-12-01 00:44:34 +00:00
Russell Bryant
d6e5eb75ee remove outdated redhat init script and provide the updated one in 'make rpm' (issue #5786)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7244 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-30 21:31:18 +00:00
Russell Bryant
6f433a7e7b 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)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7242 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-30 21:24:52 +00:00
Russell Bryant
ce2ecb5582 fix DIALEDTIME when call has not been answered (issue #5862)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7234 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-30 17:39:36 +00:00
Russell Bryant
45c15e8561 do not allow an rtp message with zero type (issue #5749)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7233 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-30 14:27:59 +00:00
Russell Bryant
5e3f4186da fix hint case sensitivity (issue #5856)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7231 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-30 07:22:42 +00:00
Russell Bryant
d03694df19 add description of the "fromdomain" option (issue #5874)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7228 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-30 05:26:26 +00:00
Josh Roberson
d52e8fa7d2 backport fix from trunk
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7227 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-30 03:52:18 +00:00
Kevin P. Fleming
77c6cd0bff remove remaining CVS references
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7226 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-30 03:37:37 +00:00
Kevin P. Fleming
463ebe8b4b port memory leak fix from rev 7223 in trunk
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7224 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-30 03:20:42 +00:00
Kevin P. Fleming
a563eab49a remove extraneous svn:executable properties
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7221 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-29 18:24:39 +00:00
Kevin P. Fleming
bf9d4b103d do the multiple-lock check for cond_wait properly...
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7219 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-29 14:26:22 +00:00
Russell Bryant
7dc2449f3a print an error message if invalid arguments are specified
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7218 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-29 06:12:29 +00:00
Russell Bryant
27cc20db11 fix a couple of typos and a buglet
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7216 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-29 05:11:05 +00:00
Kevin P. Fleming
4e04f5f731 if the lock protected a pthread_cond is held recursively, warn before waiting onthe condition
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7213 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-29 01:25:28 +00:00
Kevin P. Fleming
5ec3844077 remove CVS ignore lists, set SVN ignore lists
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7212 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-29 00:46:54 +00:00
Kevin P. Fleming
f641c7cd0d port version string computation from trunk
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7208 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-28 04:01:06 +00:00
Kevin P. Fleming
49aa54cafc branch renames
remove unneeded branches


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@7199 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-27 16:04:52 +00:00
Russell Bryant
e3b81e66a1 issue #5850
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/v1-2@7196 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-25 14:17:38 +00:00
Russell Bryant
7bb6b928b5 fix typo - thanks twisted :)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/v1-2@7194 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-23 06:02:32 +00:00
Russell Bryant
ad4dc7c4a9 fix the date
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/v1-2@7193 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-23 05:59:05 +00:00
Russell Bryant
feb9764721 issue #5828
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/v1-2@7191 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-23 05:57:10 +00:00
Russell Bryant
8c74501001 issue #5826
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/v1-2@7190 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-23 05:49:35 +00:00
Russell Bryant
5861d3fd64 issue #5829
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/v1-2@7189 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-23 05:43:27 +00:00
Kevin P. Fleming
08acdc6a86 backport fix from HEAD branch
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/v1-2@7186 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-21 19:34:09 +00:00
Kevin P. Fleming
3b50570c9b backport fix from HEAD branch
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/v1-2@7184 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-21 19:31:26 +00:00
Kevin P. Fleming
00d7e962a7 backport fix from HEAD branch
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/v1-2@7183 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-21 19:29:51 +00:00
Russell Bryant
192f7413c2 revert previous change for Darwin
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/v1-2@7174 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-21 15:57:51 +00:00
Russell Bryant
5bdb8074aa issue #5789
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/v1-2@7170 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-21 13:40:34 +00:00
Russell Bryant
6abe5e1b23 don't hardcode poll.o for Darwin
fix incorrect portion of yesterday's Solaris fixes


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/v1-2@7169 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-21 13:23:53 +00:00
Russell Bryant
4612b4ccca issue #5815
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/v1-2@7167 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-21 13:17:32 +00:00
Russell Bryant
3245bf61a1 issue #5775
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/v1-2@7165 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-21 02:44:06 +00:00
Russell Bryant
9ee13167bb issue #5787
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/v1-2@7163 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-21 02:03:23 +00:00
Russell Bryant
ca9633ca9b issue #5794
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/v1-2@7157 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-21 01:00:51 +00:00
Russell Bryant
e04884545c issue #5806
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/v1-2@7155 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-21 00:03:40 +00:00
Russell Bryant
aa2239a050 issue #5773
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/v1-2@7154 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-20 23:56:49 +00:00
Russell Bryant
40a1b60cbd issue #5774
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/v1-2@7153 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-20 23:51:58 +00:00
Russell Bryant
cccb11916f fix logic for n+101 jumps
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/v1-2@7152 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-20 23:42:43 +00:00
Russell Bryant
49641825eb issue #5795
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/v1-2@7151 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-20 23:36:45 +00:00
Russell Bryant
c14c078405 issue #5792
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/v1-2@7150 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-20 23:33:03 +00:00
Russell Bryant
f2af073588 issue #5799
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/v1-2@7149 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-20 23:27:28 +00:00
Russell Bryant
b9a5eddb6d fix issue number for previous commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/v1-2@7148 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-20 23:22:10 +00:00
Russell Bryant
bffc815375 issue #5791
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/v1-2@7147 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-20 23:21:40 +00:00
Russell Bryant
5c3f322364 Shorten the module description (issue #5791)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/v1-2@7146 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-20 23:18:01 +00:00
Russell Bryant
3a6fae817c fix the output of Makefile generated variables to doxygen
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/v1-2@7133 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-18 04:13:39 +00:00
Russell Bryant
d8f74ecb94 Add missing carriage return and line feed to the SDP line indicating that we don't support VAD (issue #5780)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/v1-2@7131 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-17 20:26:27 +00:00
Kevin P. Fleming
f7f2b1b033 fix remaining breakage related to chan_modem modules
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/v1-2@7127 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-17 04:26:07 +00:00
Admin Commit
601ab7ff82 This commit was manufactured by cvs2svn to create branch 'v1-2'.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/v1-2@7126 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2005-11-16 22:40:43 +00:00
1228 changed files with 86827 additions and 206738 deletions

View File

@@ -1 +1 @@
28
9

View File

@@ -1 +1 @@
28
9

View File

@@ -1 +1 @@
1.4.9
1.2.40

2
BUGS
View File

@@ -7,7 +7,7 @@ the official Asterisk Bug Tracker at:
http://bugs.digium.com
For more information on using the bug tracker, or to
learn how you can contribute by acting as a bug marshal
learn how you can contribute by acting as a bug marshall
please see:
http://www.asterisk.org/developers/bug-guidelines

466
CHANGES
View File

@@ -1,341 +1,127 @@
Changes since Asterisk 1.2:
Changes since Asterisk 1.2.0-beta2:
* over 4,000 commits since 1.2
* queue member naming
* CLI commands rework
o Change the way CLI commands are structured.
o Most commands are now <module> <verb> <args>
* chan_h323 update
* RTP packetization
* SLA (Shared Line Appearance) support
* T.38 Passthrough Support for faxing in SIP
* Generic channel jitterbuffer (spawned from RTP)
* Variable Length DTMF for better DTMF compatibility
* Improved chan_iax2 scalability by using multithreading
* AEL2 has replaced the original implementation of AEL. The "2" is removed. For more details,
read: http://www.voip-info.org/wiki/view/Asterisk+AEL2
AEL is no longer considered experimental.
* New sounds; English, Spanish, and French prompts, as well as music on hold files, in
multiple Asterisk native formats.
* IMAP storage of voicemail
* Jabber/GoogleTalk integration
* New speech recognition API for interfacing to different Voice Recognition software packages
* much more customizable and portable build system
o also for asterisk-addons
* Radius CDR logging
* SNMP support
* SMDI (Simplified Message Desk Interface) support
* Redesign of MusicOnHold configuration settings
* Manager over HTTP
* Significant chan_skinny updates
* Significant chan_misdn updates
* Improved SIP transfers
* SIP MWI subscription support
* Much improved support for SIP video
* Control over SIP transfers and subscriptions (enable/disable per device)
* ChanSpy whisper mode (Whisper Paging)
* Configurable language support for saying dates and times
* Significant architecture improvements for memory usage and performance
* Media-only IAX2 transfers
* Updates to the Radio Repeater app code
* Deprecation of AgentCallbackLogin in favor of a dialplan-based solution
* uClibc builds supported
* Work done for freeBSD portability
* Work done for Solaris portability
* FreeTDS-based database can be used with Realtime
* New internal data structure, stringfields, is implemented in IAX and SIP, reducing memory consumption by about 50%.
* Use of thread local storage for reduced memory allocation/freeing and lower stack consumption
* Reorganized files into docs/ main/ configs/, including name changes in some cases
* Much effort was expended in arranging documentation in source files in doxygen format
* Improved IP TOS support for IAX and SIP
* Builtin mini HTTP server
* Added support for Sigma Designs cards.
* Frame header caching to reduce memory allocation/freeing
* Passthrough and record/playback support for G.722 wideband audio
* using mpg123 to play MP3 files for music-on-hold will be deprecated in 1.4 (start using the "native support")
* New Apps:
1. AMD() ;; Answering Machine Detection
2. ChannelRedirect() ;; asynch goto, redirect chan to context/exten/priority
3. ContinueWhile() ;; Addition to the While() suite. Acts like "continue".
4. ExitWhile() ;; Addition to the While() suite. Acts like "break".
5. ExtenSpy() ;; A close cousin to ChanSpy().
6. FollowMe() ;; findme/followme call redirect app
7. Log() ;; Send a message to the log, based on severity level.
8. MacroExclusive() ;; No more than one invocation of this macro allowed at any one time.
9. MorseCode() ;; turns strings into dits and dahs. A playground for ham radio licensees!
10. OSPAuth() ;; OSP authentication
11. QueueLog() ;; allows you to write your own events into the queue log
12. SLAStation() ;; Shared Line Appearance
13. SLATrunk() ;; Shared Line Appearance
14. SpeechCreate() ;; Voice Recognition Engine interface...
15. SpeechActivateGrammar()
16. SpeechStart()
17. SpeechBackground
18. SpeechDeactivateGrammar()
19. SpeechProcessingSound()
20. SpeechDestroy()
21. SpeechLoadGrammar()
22. SpeechUnloadGrammar()
23. StopMixMonitor() ;; to stop the MixMonitor App.
24. TryExec() ;; execute dialplan app without fatal consequences
* Apps removed:
1. CheckGroup -- do a comparison to ${GROUP()}
2. Curl -- use the function CURL() instead
3. Cut -- use the function CUT() instead
4. DateTime -- use sayunixtime() app instead.
5. DBget -- deprecated in 1.2, now removed.
6. DBput -- deprecated in 1.2, now removed.
7. Enumlookup -- use the function ENUMLOOKUP() instead
8. Eval -- use the function EVAL() instead
9. GetGroupCount -- use the function GROUP_COUNT() instead
10. GetGroupMatchCount -- use the function GROUP_MATCH_COUNT() instead
11. Intercom -- use the chan_oss module instead
12. Math -- use the function MATH() instead
13. MD5 -- use the function MD5() instead
14. SetCIDname -- use the function CALLERID(name) instead
15. SetCIDnum -- use the function CALLERID(number) instead
16. SetGroup -- use Set(GROUP=group) instead
17. SetRDNIS -- use the function CALLERID(rdnis) instead
18. Sql_postgres -- was deprecated in 1.2, now removed
19. Txtcidname -- use the function TXTCIDNAME instead
* New Dialplan Functions:
1. ARRAY()
2. BASE_64_DECODE()
3. BASE_64_ENCODE()
4. CHANNEL()
5. CURL()
6. CUT()
7. DB_DELETE()
8. FILTER()
9. GLOBAL()
10. IFTIME()
11. KEYPADHASH()
12. ODBC()
13. QUOTE()
14. RAND()
15. REALTIME()
16. SHA1()
17. SORT()
18. SPRINTF()
19. SQL_ESC()
20. STAT()
21. STRPTIME()
* Apps that have changes to their interface:
1. Authenticate() -- optional maxdigits argument added.
2. ChanSpy() -- new options:
o w -- Enable 'whisper' mode, so the spying channel can talk to...
o W -- Enable 'private whisper' mode, so the spying channel can...
3. DBdel() -- now marked as DEPRECATED in favor of the DB_DELETE func
4. Dial()
o New Option: O([x]) for Zaptel operator mode
o New Option: K/k parking via dtmf tones
5. Dictate() -- optional filename argument added.
6. Directory() -- new option: e - In addition to the name, also read the extension number...
7. Meetme() -- new options:
o 'I' -- announce user join/leave without review
o 'l' -- set listen only mode (Listen only, no talking)
o 'o' -- set talker optimization - treats talkers who aren't speaking as...
o '1' -- do not play message when first person enters
8. MeetmeAdmin() -- new options:
o 'r' -- Reset one user's volume settings
o 'R' -- Reset all users volume settings
o 's' -- Lower entire conference speaking volume
o 'S' -- Raise entire conference speaking volume
o 't' -- Lower one user's talk volume
o 'T' -- Lower all users talk volume
o 'u' -- Lower one user's listen volume
o 'U' -- Lower all users listen volume
o 'v' -- Lower entire conference listening volume
o 'V' -- Raise entire conference listening volume
9. OSPFinish() : now also can return ERROR result.
10. OSPLookup() : Sets more variables, also now returns ERROR result.
11. Page() -- New option: r - record the page into a file (see 'r' for app_meetme)
12. Pickup() -- multiple extensions, PICKUPMARK; read the description!
13. Queue()
o New Argument: AGI
o New option: i
14. Random() -- is now deprecated in 1.4
15. Read() -- replace 'skip' and 'noanswer' options with 's', 'n', add 'i' option.
16. Record() -- New option: 'x' : ignore all terminator keys (DTMF) and keep recording until hangup
17. UserEvent() -- slight change in behavior. Read the description.
18. VoiceMailMain() -- new a(#) option, goes to folder # directly.
19. WaitForSilence() -- new optional 3rd arg, time delay before returning.
* Functions that have changes to their interfaces:
1. CDR -- new option: u
2. LANGUAGE -- Deprecated. Use CHANNEL(language) instead.
3. MUSICCLASS -- Deprecated. Use CHANNEL(musicclass) instead.
* Configuration File Changes:
1. NEW config files:
1. amd.conf -- Answering Machine Detection parameters
2. followme.conf -- parameters for the findme/followme call forwarding
3. func_odbc.conf -- define sql access functions here
4. gtalk.conf -- how to handle gtalk protocol calls
5. h323.conf -- h323 configuration
6. http.conf -- config for the builtin mini-http server in asterisk
7. jabber.conf -- jabber interface
8. jingle.conf -- jingle protocol interface config
10. res_snmp.conf -- to enable snmp in asterisk, and define full/sub agent status
11. say.conf -- define per-language rules for numbers, dates, etc.
12. skinny.conf -- for those special skinny phones you want to use...
13. sla.conf -- Shared Line Appearance config
14. smdi.conf -- SMDI messaging config
15. udptl.conf -- T38's udptl transport config
16. users.conf -- user config
2. Changes to Existing Config files:
1. In General:
o Jitterbuffer support added to several channels. Usually adds these variables to a config file:
1. jbenable
2. jbmaxsize
3. jbresyncthreshold
4. jbimpl
5. jblog
o MusicOnHold upgrade introduces two new variables:
1. mohinterpret
2. mohsuggest
2. agents.conf
o maxlogintries variable added
o autologoffunavail variable added
o endcall variable added
o agentgoodbye variable added
o createlink variable REMOVED
3. alsa.conf
o mohinterpret variable added
o Jitterbuffer variables added
4. cdr.conf
o endbeforehexten variable added
o sections for csv and radius added, with variables usegmtime, loguniqueid,
loguserfield, and radiuscfg variables.
5. cdr_tds.conf
o table variable added
6. extensions.ael
o Many upgrades. See the info at http://www.voip-info.org/wiki/view/Asterisk+AEL2
7. extensions.conf
o autofallthru now set to "yes" by default
o userscontext variable added
o added info/examples on paging and hints.
8. features.conf
o parkedplay variable added (who to beep at)
o parkedmusicclass
o atxfernoanswertimeout variable added
o parkcall variable added (one step parking)
o improved documentation for dynamic feature declarations!
9. iax.conf
o adsi variable added
o mohinterpret variable added
o mohsuggest variable added
o jitterbuffer updates
o iaxthreadcount variable added
o iaxmaxthreadcount variable added
o the way to specify TOS has changed.
o mailboxdetail variable has been REMOVED.
10. indications.conf
o [bg] entry added (Bulgaria).
o [il] entry added (Israel)
o [in] entry added (India)
o [jp] entry added (Japan)
o [my] entry added (Malaysia)
o [th] entry added (Thailand)
11. manager.conf
o webenabled variable added
o httptimeout variable added
o timestampevents variable added
12. mgcp.conf
o Jitterbuffer support added
13. misdn.conf
o l1watcher_timeout variable added
o pp_l2_check variable added
o echocancelwhenbridged variable added
o echotraining variable added
o max_incoming variable added
o max_outgoing variable added
14. modules.conf
o a comment for preloading res_speech.so is added
o mention of global symbols is removed
o obsolesced entries for chan_modem_* and app_intercom have been removed
15. musiconhold.conf
o the default is now to do native moh from /var/lib/asterisk/moh
16. osp.conf
o authpolicy variable added
17. oss.conf
o debug variable added
o device variable added
o mixer variable added
o boost variable added
o callerid variable added
o autohangup variable added
o queuesize variable added
o frags variable added
o JitterBuffer support
o sections to define alternate sound cards
18. queues.conf
o autofill variable added
o monitor-type variable added
o musiconhold is now musicclass, with a difference in interpretation
o autofill variable added
o autopause variable added
o setinterfacevar variable added
o ringinuse variable added
19. res_odbc.conf
o pooling variable added
20. rpt.conf
o duplex variable added
o tailmessagetime variable added
o tailsquashedtime variable added
o tailmessages variable added
21. rtp.conf
o rtcpinterval varaible added
22. sip.conf
o allowoverlap variable added
o allowtransfer variable added
o tos variable REMOVED
o tos_sip variable added
o tos_audio variable added
o tos_video variable added
o minexpiry variable added
o t1min variable added
o musicclass variable REMOVED
o mohinterpret variable added
o maxcallbitratesuggest variable added
o allowsubscribe variable added
o videosupport variable added
o maxcallbitrate variable added
o g726nonstandard variable added
o dumphistory variable added
o allowsubscribe variable added
o t38pt_udptl variable added
o canreinvite variable can also now be set to 'nonat'
o rtsavesysname variable added
o JitterBuffer support added
23. skinny.conf
o port variable renamed to bindport
o JitterBuffer support added
o model variable REMOVED
o mohinterpret variable added
o mohsuggest variable added
o speeddial variable added
o addon variable added
24. voicemail.conf
o userscontext variable added
o smdiport variable added
o attachfmt variable added
o volgain variable added
o tempgreetwarn variable added
25. zapata.conf
o pritimer variable has improved documentation
o New signalling method: fgccama
o New signalling method: fgccamamf
o outsignalling variable added
o distinctiveringaftercid variable added
o cidsignalling now also accepts v23_jp, and smdi
o usesmdi variable added
o smdiport variable added
o mohinterpret variable added
o mohsuggest variable added
o JitterBuffer support added
* Removed Codecs/Channels:
1. codec_g723 was removed because the actual codec implementation it was designed to use is not distributable
2. chan_modem_* and related modules are gone because the kernel support for those interfaces is old, buggy and unsupported
* New Utils:
1. aelparse -- compile .ael files outside of asterisk
* New manager events:
1. OriginateResponse event comes to replace OriginateSuccess and OriginateFailure
* Cygwin build system portability
* Optional generation of outbound silence during channel recording
Changes since Asterisk 1.2.0-beta1:
* Many, many bug fixes
* Documentation and sample configuration updates
* Vastly improved presence/subscription support in the SIP channel driver
* A new (experimental) mISDN channel driver
* A new monitoring application (MixMonitor)
* More portability fixes for non-Linux platforms
* New dialplan functions replacing old applications
* Significant deadlock and performance upgrades for the Manager interface
* An upgrade to the 'new' dialplan expression parser for all users
* New Zaptel echo cancellers with improved performance
* Support for the latest OSP toolkit from TransNexus
* Support user-controlled volume adjustment in MeetMe application
* More dialplan applications now return status variables instead of priority jumping
* Much more powerful ENUM support in the dialplan
* SIP domain support for authentication and virtual hosting
* Many PRI protocol updates and fixes, including more complete Q.SIG support
* New applications: Pickup() and Page()
Changes since Asterisk 1.0:
This list currently only containts changes made from the end of November until
March 26, 2005.
* Add new applications:
-- AgentMonitorOutgoing
-- Curl
-- ExecIf
-- ExecIfTime
-- IAX2Provision
-- MacroExit
-- MacroIf
-- PauseQueueMember
-- ReadFile
-- SetRDNIS
-- SIPAddHeader
-- SIPGetHeader
-- StartMusicOnHold
-- StopMusicOnHold
-- UnpauseQueueMember
-- WaitForSilence
-- While / EndWhile
* app Answer
-- added delay option
* app ChanIsAvail
-- added 's' option
* app Dial
-- add option to specify the class for musiconhold with m option
* app EnumLookup
-- added "reload enum" for configuration
* app Goto
-- added relative priorities
* app GotoIf
-- added relative priorities
* app MeetMe
-- added 'i' option
-- added 'r' option
-- added 'T' option
-- added 'P' option
-- added 'c' option
-- added adminpin to meetme.conf
-- added reload command
* app PrivacyManager
-- add config file privacy.conf
* app queue
-- queues.conf
-- added persistentmembers option to queues.conf
-- changed music option to musiconhold
-- added weight option
-- added note about why agent groups probably shouldn't be used
-- added timeoutrestart option
* app Read
-- added attempts parameter
-- added timeout parameter
* app Record
-- added 'q' option
* app SendDTMF
-- add timeout option
* app SMS
-- document alternative syntax for queueing messages
* app Voicemail
-- add info about VM_CATEGORY
-- voicemail.conf
-- added usedirectory option
-- added VM_CIDNUM and VM_CIDNAME in message config
* chan IAX2
-- new jitterbuffer
-- added setvar option
-- added regex to iax2 show peers/users
-- allow multiple bindaddr lines in iax.conf
-- added reload command
-- added forcejitterbuffer option
-- added note about specifying bindport before bindaddr
-- added trunktimestamps option
* chan Agent
-- added agent logoff CLI command
* chan OSS
-- added Flash CLI command
* chan SIP
-- added setvar option
-- added compactheaders option
-- added usereqphone option
-- added registertimeout option
-- added externhost option
-- added sip notify CLI command
-- added sip_notify.conf
-- added allowguest option
* chan Zap
-- added hanguponplarityswitch option
-- added sendcalleridafter option
-- added priresetinterval option
-- added TON/NPI config options (the ones right above the resetinterval option)
-- added answeronpolarityswitch option
-- added "never" for resetinterval
* extensions
-- allow '*' when including files (#include "sip-*.conf")
-- added eswitch
* General
-- added #exec syntax for including output from a command
-- added show features CLI command
-- added configuration templates for category inheritance

92
CREDITS
View File

@@ -27,149 +27,77 @@ Wasim - Hangup detect
* Thanks to QuickNet Technologies for their donation of an Internet
PhoneJack and Linejack card to the project. (http://www.quicknet.net)
* Thanks to VoipSupply for their donation of Sipura ATAs to the project for
T.38 testing. (http://www.voipsupply.com)
* Thanks to Grandstream for their donation of ATAs to the project for
T.38 testing. (http://www.grandstream.com)
=== MISCELLANEOUS PATCHES ===
Jim Dixon - Zapata Telephony and app_rpt
http://www.zapatatelephony.org/app_rpt.html
Russell Bryant - Asterisk 1.0 maintainer and misc. enhancements
russelb@clemson.edu
Anthony Minessale II - Countless big and small fixes, and relentless forward push
ChanSpy, ForkCDR, ControlPlayback, While/EndWhile, DumpChan, Dictate,
MacroIf, ExecIf, ExecIfTime, RetryDial, MixMonitor applications; many realtime
concepts and implementation pieces, including res_config_odbc; format_slin;
cdr_custom; several features in Dial including L(), G() and enhancements to
M() and D(); several CDR enhancements including CDR variables; attended
transfer; one touch record; native MOH; manager eventmask; command line '-t'
flag to allow recording/voicemail on nfs shares; #exec command and multiline
comments in config files; setvar in iax and sip configs.
MacroIf, ExecIf, ExecIfTime, RetryDial, MixMonitor applications; res_odbc;
many realtime concepts and implementation pieces, including res_config_odbc;
format_slin; cdr_custom; several features in Dial including L(), G() and
enhancements to M() and D(); several CDR enhancements including CDR variables;
attended transfer; one touch record; native MOH; manager eventmask; command
line '-t' flag to allow recording/voicemail on nfs shares; #exec command and
multiline comments in config files; setvar in iax and sip configs.
anthmct@yahoo.com http://www.asterlink.com
James Golovich - Innumerable contributions
You can find him and asterisk-perl at http://asterisk.gnuinter.net
Andre Bierwirth - Extension hints and status
Oliver Daudey - ISDN4Linux fixes
Pauline Middelink - ISDN4Linux patches and some general patches.
She can be found at http://www.polyware.nl/~middelink/En/
Jean-Denis Girard - Various contributions from the South Pacific Islands
jd-girard@esoft.pf http://www.esoft.pf
William Jordan / Vonage - MySQL enhancements to Voicemail
wjordan@vonage.com
Jac Kersing - Various fixes
Steven Critchfield - Seek and Trunc functions for playback and recording
critch@basesys.com
Jefferson Noxon - app_lookupcidname, app_db, and various other contributions
Klaus-Peter Junghanns - in-band DTMF on SIP and MGCP
Ross Finlayson - Dynamic RTP payload support
Mahmut Fettahlioglu - Audio recording, music-on-hold changes, alaw file
format, and various fixes. Can be contacted at mahmut@oa.com.au
James Dennis - Cisco SIP compatibility patches to work with SIP service
providers. Can be contacted at asterisk@jdennis.net
Tilghman Lesher - ast_localtime(); ast_say_date_with_format();
GotoIfTime, Random, SayUnixTime, HasNewVoicemail applications;
CUT, SORT, EVAL, CURL, FIELDQTY, STRFTIME, QUEUEAGENT* functions;
and other innumerable bug fixes. http://asterisk.drunkcoder.com/
Jayson Vantuyl - Manager protocol changes, various other bugs.
jvantuyl@computingedge.net
Thorsten Lockert - OpenBSD, FreeBSD ports, making MacOS X port run on 10.3,
dialplan include verification, route lookup on OpenBSD, SNMP agent
support (res_snmp), various other bugs. tholo@sigmasoft.com
dialplan include verification, route lookup on OpenBSD, various other
bugs. tholo@sigmasoft.com
Brian West - ODBC support and Bug Marshaling
Josh Roberson - chan_zap reload support, Advanced Voicemail Features, other misc. patches,
and Bug Marshalling. - josh@asteriasgi.com, http://www.asteriasgi.com
William Waites - syslog support, SIP NAT traversal for SIP-UA. ww@styx.org
Rich Murphey - Porting to FreeBSD, NetBSD, OpenBSD, and Darwin.
rich@whiteoaklabs.com http://whiteoaklabs.com
Simon Lockhart - Porting to Solaris (based on work of Logan ???)
simon@slimey.org
Olle E. Johansson - SIP RFC compliance, documentation and testing, testing, testing
oej@edvina.net, http://edvina.net
Steve Kann - new jitter buffer for IAX2
stevek@stevek.com
Constantine Filin - major contributions to the Asterisk Realtime Architecture
Steve Murphy - privacy support, $[ ] parser upgrade, AEL2 parser upgrade
Steve Murphy - privacy support
Claude Patry - bug fixes, feature enhancements, and bug marshalling
cpatry@gmail.com
Miroslav Nachev, miro@space-comm.com COSMOS Software Enterprises, Ltd.
- for Variable for No Answer Timeout for Attended Transfer
Slav Klenov & Vanheuverzwijn Joachim - development of the generic jitterbuffer
Securax Ltd. info@securax.be
Roy Sigurd Karlsbakk - providing funding for generic jitterbuffer development
roy@karlsbakk.net, Briiz Telecom AS
Voop A/S, Nuvio Inc, Inotel S.A and Foniris Telecom A/S - funding for rewrite of SIP transfers
Philippe Sultan - RADIUS CDR module
INRIA, http://www.inria.fr/
John Martin, Aupix - Improved video support in the SIP channel
Steve Underwood - Provided T.38 pass through support.
George Konstantoulakis - Support for Greek in voicemail added by InAccess Networks (work funded by HOL, www.hol.gr) gkon@inaccessnetworks.com
Daniel Nylander - Support for Swedish and Norwegian languages in voicemail. http://www.danielnylander.se/
Stojan Sljivic - An option for maximum number of messsages per mailbox in voicemail. Also an issue with voicemail synchronization has been fixed. GDS Partners www.gdspartners.com . stojan.sljivic@gdspartners.com
Bartosz Supczinski - Support for Polish added by DIR (www.dir.pl) Bartosz.Supczinski@dir.pl
James Rothenberger - Support for IMAP storage integration added by OneBizTone LLC Work funded by University of Pennsylvania jar@onebiztone.com
Paul Cadach - Bringing chan_h323 up to date, bug fixes, and more!
=== OTHER CONTRIBUTIONS ===
John Todd - Monkey sounds and associated teletorture prompt
Michael Jerris - bug marshaling
Leif Madsen, Jared Smith and Jim van Meggelen - the Asterisk book
available under a Creative Commons License at http://www.asteriskdocs.org
Brian M. Clapper - poll.c emulation
This product includes software developed by Brian M. Clapper <bmc@clapper.org>
=== HOLD MUSIC ===
Music provided by www.opsound.org
=== OTHER SOURCE CODE IN ASTERISK ===
Asterisk uses libedit, the lightweight readline replacement from NetBSD.
The cdr_radius module uses libradiusclient-ng, which is also from NetBSD.
They are BSD-licensed and require the following statement:
This product includes software developed by the NetBSD
Foundation, Inc. and its contributors.
Digium did not implement the codecs in Asterisk. Here is the copyright on the
GSM source:

14588
ChangeLog

File diff suppressed because it is too large Load Diff

View File

@@ -11,7 +11,10 @@ Zaptel compatible hardware
==========================
-- Digium (Primary author of Asterisk)
http://www.digium.com, http://store.digium.com
http://www.digium.com, http://store.yahoo.com/asteriskpbx
* Wildcard X100P - Single FXO interface connects to Loopstart phone
line
* Wildcard T400P (obsolete) - Quad T1 interface connects to four T1/PRI
interfaces. Supports RBS and PRI voice and PPP, FR, and HDLC data.
@@ -25,6 +28,9 @@ Zaptel compatible hardware
* Wildcard E100P - Single E1 interface connects to a single E1/PRI (or PRA)
interface. Supports PRA/PRI, EuroISDN voice and PPP, FR, HDLC data.
* Wildcard S100U - Single FXS interface connects to a standard analog
telephone.
* Wildcard TDM400P - Quad Modular FXS interface connects to standard
analog telephones.
@@ -43,26 +49,16 @@ Non-zaptel compatible hardware
* Internet LineJack - Single FXS or FXO interface. Supports Linux
telephony interface.
mISDN compatible hardware
=========================
mISDN homepage: http://www.isdn4linux.de/mISDN/
Any adapter with an mISDN driver should be compatible with
chan_misdn. See misdn.txt for information.
-- beroNet
http://www.beronet.com
* BN4S0 - 4 Port BRI card (TE/NT)
* BN8S0 - 8 Port BRI card (TE/NT)
* Billion Card - Single Port BRI card (TE (/NT with crossed cable) )
Miscellaneous other interfaces
==============================
-- ISDN4Linux
http://www.isdn4linux.de/
* Any ISDN terminal adapter supported by isdn4linux should provide
connectivity.
-- ALSA
http://www.alsa-project.org

View File

@@ -32,7 +32,7 @@ GPL'd products (although if you've written a module for Asterisk we
would strongly encourage you to make the same exception that we do).
Specific permission is also granted to link Asterisk with OpenSSL and
OpenH323.
OpenH323 and distribute the resulting binary files.
In addition, Asterisk implements two management/control protocols: the
Asterisk Manager Interface (AMI) and the Asterisk Gateway Interface
@@ -50,8 +50,7 @@ and use of them is subject to our trademark licensing policies. If you
wish to use these trademarks for purposes other than simple
redistribution of Asterisk source code obtained from Digium, you
should contact our licensing department to determine the necessary
steps you must take. For more information on this policy, please read
http://www.digium.com/en/company/profile/trademarkpolicy.php
steps you must take.
If you have any questions regarding our licensing policy, please
contact us:
@@ -59,7 +58,7 @@ contact us:
+1.877.546.8963 (via telephone in the USA)
+1.256.428.6000 (via telephone outside the USA)
+1.256.864.0464 (via FAX inside or outside the USA)
IAX2/misery.digium.com/6000 (via IAX2)
IAX2/pbx.digium.com (via IAX2)
licensing@digium.com (via email)
Digium, Inc.

941
Makefile

File diff suppressed because it is too large Load Diff

View File

@@ -1,84 +0,0 @@
#
# Asterisk -- A telephony toolkit for Linux.
#
# Makefile rules for subdirectories containing modules
#
# Copyright (C) 2006, Digium, Inc.
#
# Kevin P. Fleming <kpfleming@digium.com>
#
# This program is free software, distributed under the terms of
# the GNU General Public License
#
ifneq ($(findstring MALLOC_DEBUG,$(MENUSELECT_CFLAGS)),)
ifeq ($(findstring astmm.h,$(ASTCFLAGS)),)
ASTCFLAGS+=-include $(ASTTOPDIR)/include/asterisk/astmm.h
endif
endif
ifeq ($(findstring LOADABLE_MODULES,$(MENUSELECT_CFLAGS)),)
ASTCFLAGS+=${GC_CFLAGS}
endif
ifneq ($(findstring STATIC_BUILD,$(MENUSELECT_CFLAGS)),)
STATIC_BUILD=-static
endif
include $(ASTTOPDIR)/Makefile.rules
comma:=,
$(addsuffix .o,$(C_MODS)): ASTCFLAGS+=-DAST_MODULE=\"$*\" $(MENUSELECT_OPTS_$*:%=-D%) $(foreach dep,$(MENUSELECT_DEPENDS_$*),$(value $(dep)_INCLUDE))
$(addsuffix .oo,$(CC_MODS)): ASTCFLAGS+=-DAST_MODULE=\"$*\" $(MENUSELECT_OPTS_$*:%=-D%) $(foreach dep,$(MENUSELECT_DEPENDS_$*),$(value $(dep)_INCLUDE))
$(LOADABLE_MODS:%=%.so): ASTCFLAGS+=-fPIC
$(LOADABLE_MODS:%=%.so): LIBS+=$(foreach dep,$(MENUSELECT_DEPENDS_$*),$(value $(dep)_LIB))
$(LOADABLE_MODS:%=%.so): ASTLDFLAGS+=$(foreach dep,$(MENUSELECT_DEPENDS_$*),$(value $(dep)_LDFLAGS))
$(addsuffix .so,$(filter $(LOADABLE_MODS),$(C_MODS))): %.so: %.o
$(addsuffix .so,$(filter $(LOADABLE_MODS),$(CC_MODS))): %.so: %.oo
modules.link: $(addsuffix .o,$(filter $(EMBEDDED_MODS),$(C_MODS)))
modules.link: $(addsuffix .oo,$(filter $(EMBEDDED_MODS),$(CC_MODS)))
.PHONY: clean uninstall _all
ifneq ($(LOADABLE_MODS),)
_all: $(LOADABLE_MODS:%=%.so)
endif
ifneq ($(EMBEDDED_MODS),)
_all: modules.link
__embed_ldscript:
@echo "../$(SUBDIR)/modules.link"
__embed_ldflags:
@echo "$(foreach mod,$(filter $(EMBEDDED_MODS),$(C_MODS)),$(foreach dep,$(MENUSELECT_DEPENDS_$(mod)),$(dep)_LDFLAGS))"
@echo "$(foreach mod,$(filter $(EMBEDDED_MODS),$(CC_MODS)),$(foreach dep,$(MENUSELECT_DEPENDS_$(mod)),$(dep)_LDFLAGS))"
__embed_libs:
@echo "$(foreach mod,$(filter $(EMBEDDED_MODS),$(C_MODS)),$(foreach dep,$(MENUSELECT_DEPENDS_$(mod)),$(dep)_LIB))"
@echo "$(foreach mod,$(filter $(EMBEDDED_MODS),$(CC_MODS)),$(foreach dep,$(MENUSELECT_DEPENDS_$(mod)),$(dep)_LIB))"
else
__embed_ldscript:
__embed_ldflags:
__embed_libs:
endif
modules.link:
@rm -f $@
@for file in $(patsubst %,$(SUBDIR)/%,$(filter %.o,$^)); do echo "INPUT (../$${file})" >> $@; done
@for file in $(patsubst %,$(SUBDIR)/%,$(filter-out %.o,$^)); do echo "INPUT (../$${file})" >> $@; done
clean::
rm -f *.so *.o *.oo
rm -f .*.o.d .*.oo.d
rm -f modules.link
install:: all
for x in $(LOADABLE_MODS:%=%.so); do $(INSTALL) -m 755 $$x $(DESTDIR)$(MODULES_DIR) ; done
uninstall::
ifneq ($(wildcard .*.d),)
include .*.d
endif

View File

@@ -1,81 +0,0 @@
#
# Asterisk -- A telephony toolkit for Linux.
#
# Makefile rules
#
# Copyright (C) 2006, Digium, Inc.
#
# Kevin P. Fleming <kpfleming@digium.com>
#
# This program is free software, distributed under the terms of
# the GNU General Public License
#
# Each command is preceded by a short comment on what to do.
# Prefixing one or the other with @\# or @ or nothing makes the desired
# behaviour. ECHO_PREFIX prefixes the comment, CMD_PREFIX prefixes the command.
-include $(ASTTOPDIR)/makeopts
ifeq ($(NOISY_BUILD),)
ECHO_PREFIX=@
CMD_PREFIX=@
else
ECHO_PREFIX=@\#
CMD_PREFIX=
endif
ifeq ($(findstring DONT_OPTIMIZE,$(MENUSELECT_CFLAGS)),)
# More GSM codec optimization
# Uncomment to enable MMXTM optimizations for x86 architecture CPU's
# which support MMX instructions. This should be newer pentiums,
# ppro's, etc, as well as the AMD K6 and K7.
#K6OPT=-DK6OPT
OPTIMIZE?=-O6
ASTCFLAGS+=$(OPTIMIZE)
endif
%.o: %.c
$(ECHO_PREFIX) echo " [CC] $< -> $@"
ifeq ($(AST_DEVMODE),yes)
$(CMD_PREFIX) $(CC) -o $@ -c $< $(PTHREAD_CFLAGS) $(ASTCFLAGS) -MMD -MT $@ -MF .$(subst /,_,$@).d -MP
else
$(CMD_PREFIX) $(CC) -o $@ -c $< $(PTHREAD_CFLAGS) $(ASTCFLAGS)
endif
%.o: %.s
$(ECHO_PREFIX) echo " [AS] $< -> $@"
ifeq ($(AST_DEVMODE),yes)
$(CMD_PREFIX) $(CC) -o $@ -c $< $(PTHREAD_CFLAGS) $(ASTCFLAGS) -MMD -MT $@ -MF .$(subst /,_,$@).d -MP
else
$(CMD_PREFIX) $(CC) -o $@ -c $< $(PTHREAD_CFLAGS) $(ASTCFLAGS)
endif
%.oo: %.cc
$(ECHO_PREFIX) echo " [CXX] $< -> $@"
ifeq ($(AST_DEVMODE),yes)
$(CMD_PREFIX) $(CXX) -o $@ -c $< $(PTHREAD_CFLAGS) $(filter-out -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations,$(ASTCFLAGS)) -MMD -MT $@ -MF .$(subst /,_,$@).d -MP
else
$(CMD_PREFIX) $(CXX) -o $@ -c $< $(PTHREAD_CFLAGS) $(filter-out -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations,$(ASTCFLAGS))
endif
%.c: %.y
$(ECHO_PREFIX) echo " [BISON] $< -> $@"
$(CMD_PREFIX) bison -o $@ -d --name-prefix=ast_yy $<
%.c: %.fl
$(ECHO_PREFIX) echo " [FLEX] $< -> $@"
$(CMD_PREFIX) flex -o $@ --full $<
%.so: %.o
$(ECHO_PREFIX) echo " [LD] $^ -> $@"
$(CMD_PREFIX) $(CC) $(STATIC_BUILD) -o $@ $(PTHREAD_CFLAGS) $(ASTLDFLAGS) $(SOLINK) $^ $(PTHREAD_LIBS) $(LIBS)
%.so: %.oo
$(ECHO_PREFIX) echo " [LDXX] $^ -> $@"
$(CMD_PREFIX) $(CXX) $(STATIC_BUILD) -o $@ $(PTHREAD_CFLAGS) $(ASTLDFLAGS) $(SOLINK) $^ $(PTHREAD_LIBS) $(LIBS)
%: %.o
$(ECHO_PREFIX) echo " [LD] $^ -> $@"
$(CMD_PREFIX) $(CXX) $(STATIC_BUILD) -o $@ $(PTHREAD_CFLAGS) $(ASTLDFLAGS) $^ $(PTHREAD_LIBS) $(LIBS)

44
README
View File

@@ -1,15 +1,15 @@
The Asterisk(R) Open Source PBX
The Asterisk Open Source PBX
by Mark Spencer <markster@digium.com>
and the Asterisk.org developer community
Copyright (C) 2001-2006 Digium, Inc.
Copyright (C) 2001-2005 Digium, Inc.
and other copyright holders.
================================================================
* SECURITY
It is imperative that you read and fully understand the contents of
the security information file (doc/security.txt) before you attempt
to configure and run an Asterisk server.
the SECURITY file before you attempt to configure and run an Asterisk
server.
* WHAT IS ASTERISK ?
Asterisk is an Open Source PBX and telephony toolkit. It is, in a
@@ -51,15 +51,13 @@ ANY special hardware, not even a soundcard) to install and run Asterisk.
* All Wildcard (tm) products from Digium (www.digium.com)
* QuickNet Internet PhoneJack and LineJack (http://www.quicknet.net)
* any full duplex sound card supported by ALSA or OSS
* any ISDN card supported by mISDN on Linux (BRI)
* The Xorcom AstriBank channel bank
* VoiceTronix OpenLine products
The are several drivers for ISDN BRI cards available from third party sources.
Check the voip-info.org wiki for more information on chan_capi and
Check the voip-info.org wiki for more information on chan_capi, chan_misdn and
zaphfc.
* UPGRADING FROM AN EARLIER VERSION
* UPGRADING FROM VERSION 1.0
If you are updating from a previous version of Asterisk, make sure you
read the UPGRADE.txt file in the source directory. There are some files
@@ -84,31 +82,14 @@ On many distributions, these files are installed by packages with names like
So let's proceed:
1) Read this README file.
There are more documents than this one in the doc/ directory.
You may also want to check the configuration files that contain
examples and reference guides. They are all in the configs/
directory.
2) Run "./configure"
Execute the configure script to guess values for system-dependent
variables used during compilation.
3) Run "make menuselect" [optional]
This is needed if you want to select the modules that will be
compiled and to check modules dependencies.
4) Run "make"
1) Run "make"
Assuming the build completes successfully:
5) Run "make install"
2) Run "make install"
Each time you update or checkout from the repository, you are strongly
encouraged to ensure all previous object files are removed to avoid internal
Each time you update or checkout from CVS, you are strongly encouraged
to ensure all previous object files are removed to avoid internal
inconsistency in Asterisk. Normally, this is automatically done with
the presence of the file .cleancount, which increments each time a 'make clean'
is required, and the file .lastclean, which contains the last .cleancount used.
@@ -116,7 +97,7 @@ is required, and the file .lastclean, which contains the last .cleancount used.
If this is your first time working with Asterisk, you may wish to install
the sample PBX, with demonstration extensions, etc. If so, run:
6) "make samples"
3) "make samples"
Doing so will overwrite any existing config files you have.
@@ -257,6 +238,3 @@ you're interested in getting more information.
Welcome to the growing worldwide community of Asterisk users!
Mark Spencer
----
Asterisk is a trademark belonging to Digium, inc

View File

@@ -0,0 +1,295 @@
==================
| Best Practices |
==================
The purpose of this document is to define best practices when working with
Asterisk in order to minimize possible security breaches and to provide tried
examples in field deployments. This is a living document and is subject to
change over time as best practices are defined.
--------
Sections
--------
* Filtering Data:
How to protect yourself from redial attacks
* Proper Device Naming:
Why to not use numbered extensions for devices
* Secure Passwords:
Secure passwords limit your risk to brute force attacks
* Reducing Pattern Match Typos:
Using the 'same' prefix, or using Goto()
----------------
Additional Links
----------------
Additional links that contain useful information about best practices or
security are listed below.
* Seven Steps to Better SIP Security:
http://blogs.digium.com/2009/03/28/sip-security/
* Asterisk VoIP Security (webinar):
http://www.asterisk.org/security/webinar/
==============
Filtering Data
==============
In the Asterisk dialplan, several channel variables contain data potentially
supplied by outside sources. This could lead to a potential security concern
where those outside sources may send cleverly crafted strings of data which
could be utilized, e.g. to place calls to unexpected locations.
An example of this can be found in the use of pattern matching and the ${EXTEN}
channel variable. Note that ${EXTEN} is not the only system created channel
variable, so it is important to be aware of where the data you're using is
coming from.
For example, this common dialplan takes 2 or more characters of data, starting
with a number 0-9, and then accepts any additional information supplied by the
request.
[NOTE: We use SIP in this example, but is not limited to SIP only; protocols
such as Jabber/XMPP or IAX2 are also susceptible to the same sort of
injection problem.]
[incoming]
exten => _X.,1,Verbose(2,Incoming call to extension ${EXTEN})
exten => _X.,n,Dial(SIP/${EXTEN})
exten => _X.,n,Hangup()
This dialplan may be utilized to accept calls to extensions, which then dial a
numbered device name configured in one of the channel configuration files (such
as sip.conf, iax.conf, etc...) (see the section Proper Device Naming for more
information on why this approach is flawed).
The example we've given above looks harmless enough until you take into
consideration that several channel technologies accept characters that could
be utilized in a clever attack. For example, instead of just sending a request
to dial extension 500 (which in our example above would create the string
SIP/500 and is then used by the Dial() application to place a call), someone
could potentially send a string like "500&SIP/itsp/14165551212".
The string "500&SIP/itsp/14165551212" would then be contained within the
${EXTEN} channel variable, which is then utilized by the Dial() application in
our example, thereby giving you the dialplan line of:
exten => _X.,n,Dial(SIP/500&SIP/itsp/14165551212)
Our example above has now provided someone with a method to place calls out of
your ITSP in a place where you didn't expect to allow it. There are a couple of
ways in which you can mitigate this impact: stricter pattern matching, or using
the FILTER() dialplan function.
Strict Pattern Matching
-----------------------
The simple way to mitigate this problem is with a strict pattern match that does
not utilize the period (.) or bang (!) characters to match on one-or-more
characters or zero-or-more characters (respectively). To fine tune our example
to only accept three digit extensions, we could change our pattern match to
be:
exten => _XXX,n,Dial(SIP/${EXTEN})
In this way, we have minimized our impact because we're not allowing anything
other than the numbers zero through nine. But in some cases we really do need to
handle variable pattern matches, such as when dialing international numbers
or when we want to handle something like a SIP URI. In this case, we'll need to
utilize the FILTER() dialplan function.
Using FILTER()
--------------
The FILTER() dialplan function is used to filter strings by only allowing
characters that you have specified. This is a perfect candidate for controlling
which characters you want to pass to the Dial() application, or any other
application which will contain dynamic information passed to Asterisk from an
external source. Lets take a look at how we can use FILTER() to control what
data we allow.
Using our previous example to accept any string length of 2 or more characters,
starting with a number of zero through nine, we can use FILTER() to limit what
we will accept to just numbers. Our example would then change to something like:
[incoming]
exten => _X.,1,Verbose(2,Incoming call to extension ${EXTEN})
exten => _X.,n,Dial(SIP/${FILTER(0-9,${EXTEN})})
exten => _X.,n,Hangup()
Note how we've wrapped the ${EXTEN} channel variable with the FILTER() function
which will then only pass back characters that fit into the numerical range that
we've defined.
Alternatively, if we didn't want to utilize the FILTER() function within the
Dial() application directly, we could save the value to a channel variable,
which has a side effect of being usable in other locations of your dialplan if
necessary, and to handle error checking in a separate location.
[incoming]
exten => _X.,1,Verbose(2,Incoming call to extension ${EXTEN})
exten => _X.,n,Set(SAFE_EXTEN=${FILTER(0-9,${EXTEN})})
exten => _X.,n,Dial(SIP/${SAFE_EXTEN})
exten => _X.,n,Hangup()
Now we can use the ${SAFE_EXTEN} channel variable anywhere throughout the rest
of our dialplan, knowing we've already filtered it. We could also perform an
error check to verify that what we've received in ${EXTEN} also matches the data
passed back by FILTER(), and to fail the call if things do not match.
[incoming]
exten => _X.,1,Verbose(2,Incoming call to extension ${EXTEN})
exten => _X.,n,Set(SAFE_EXTEN=${FILTER(0-9,${EXTEN})})
exten => _X.,n,GotoIf($[${EXTEN} != ${SAFE_EXTEN}]?error,1)
exten => _X.,n,Dial(SIP/${SAFE_EXTEN})
exten => _X.,n,Hangup()
exten => error,1,Verbose(2,Values of EXTEN and SAFE_EXTEN did not match.)
exten => error,n,Verbose(2,EXTEN: "${EXTEN}" -- SAFE_EXTEN: "${SAFE_EXTEN}")
exten => error,n,Playback(silence/1&invalid)
exten => error,n,Hangup()
Another example would be using FILTER() to control the characters we accept when
we're expecting to get a SIP URI for dialing.
[incoming]
exten => _[0-9a-zA-Z].,1,Verbose(2,Incoming call to extension ${EXTEN})
exten => _[0-9a-zA-Z].,n,Dial(SIP/${FILTER(.@0-9a-zA-Z,${EXTEN})
exten => _[0-9a-zA-Z].,n,Hangup()
Of course the FILTER() function doesn't check the formatting of the incoming
request. There is also the REGEX() dialplan function which can be used to
determine if the string passed to it matches the regular expression you've
created, and to take proper action on whether it matches or not. The creation of
regular expressions is left as an exercise for the reader.
More information about the FILTER() and REGEX() dialplan functions can be found
by typing "core show function FILTER" and "core show function REGEX" from your
Asterisk console.
====================
Proper Device Naming
====================
In Asterisk, the concept of an extension number being tied to a specific device
does not exist. Asterisk is aware of devices it can call or receive calls from,
and how you define in your dialplan how to reach those devices is up to you.
Because it has become common practice to think of a specific device as having an
extension number associated with it, it only becomes natural to think about
naming your devices the same as the extension number you're providing it. But
by doing this, you're limiting the powerful concept of separating user from
extensions, and extensions from devices.
It can also be a security hazard to name your devices with a number, as this can
open you up to brute force attacks. Many of the current exploits deal with
device configurations which utilize a number, and even worse, a password that
matches the devices name. For example, take a look at this poorly created device
in sip.conf:
[1000]
type=friend
context=international_dialing
secret=1000
As implied by the context, we've permitted a device named 1000 with a password
of 1000 to place calls internationally. If your PBX system is accessible via
the internet, then your system will be vulnerable to expensive international
calls. Even if your system is not accessible via the internet, people within
your organization could get access to dialing rules you'd prefer to reserve only
for certain people.
A more secure example for the device would be to use something like the MAC
address of the device, along with a strong password (see the section Secure
Passwords). The following example would be more secure:
[0004f2040001]
type=friend
context=international_dialing
secret=aE3%B8*$jk^G
Then in your dialplan, you would reference the device via the MAC address of the
device (or if using the softphone, a MAC address of a network interface on the
computer).
Also note that you should NOT use this password, as it will likely be one of the
first ones added to the dictionary for brute force attacks.
================
Secure Passwords
================
Secure passwords are necessary in many (if not all) environments, and Asterisk
is certainly no exception, especially when it comes to expensive long distance
calls that could potentially cost your company hundreds or thousands of dollars
on an expensive monthly phone bill, with little to no recourse to fight the
charges.
Whenever you are positioned to add a password to your system, whether that is
for a device configuration, a database connection, or any other secure
connection, be sure to use a secure password. A good example of a secure
password would be something like:
aE3%B8*$jk^G
Our password also contains 12 characters with a mixture of upper and
lower case characters, numbers, and symbols. Because these passwords are likely
to only be entered once, or loaded via a configuration file, there is
no need to create simple passwords, even in testing. Some of the holes found in
production systems used for exploitations involve finding the one test extension
that contains a weak password that was forgotten prior to putting a system into
production.
Using a web search you can find several online password generators such as
http://www.strongpasswordgenerator.com or there are several scripts that can be
used to generate a strong password.
============================
Reducing Pattern Match Typos
============================
As of Asterisk 1.6.2, a new method for reducing the number of complex pattern
matches you need to enter, which can reduce typos in your dialplan, has been
implemented. Traditionally, a dialplan with a complex pattern match would look
something like:
exten => _[3-5]XXX,1,Verbose(Incoming call to ${EXTEN})
exten => _[3-5]XXX,n,Set(DEVICE=${DB(device/mac_address/${EXTEN})})
exten => _[3-5]XXX,n,Set(TECHNOLOGY=${DB(device/technology/${EXTEN})})
exten => _[3-5]XXX,n,GotoIf($[${ISNULL(${TECHNOLOGY})} | ${ISNULL(${DEVICE})}]?error,1)
exten => _[3-5]XXX,n,Dial(${TECHNOLOGY}/${DEVICE},${GLOBAL(TIMEOUT)})
exten => _[3-5]XXX,n,Set(vmFlag=${IF($[${DIALSTATUS} = BUSY]?b:u)})
exten => _[3-5]XXX,n,Voicemail(${EXTEN}@${GLOBAL(VOICEMAIL_CONTEXT)},${vmFlag})
exten => _[3-5]XXX,n,Hangup()
exten => error,1,Verbose(2,Unable to lookup technology or device for extension)
exten => error,n,Playback(silence/1&num-not-in-db)
exten => error,n,Hangup()
Of course there exists the possibility for a typo when retyping the pattern
match _[3-5]XXX which will match on extensions 3000 through 5999. We can
minimize this error by utilizing the same => prefix on all lines beyond the
first one. Our same dialplan with using same => would look like the following:
exten => _[3-5]XXX,1,Verbose(Incoming call to ${EXTEN})
same => n,Set(DEVICE=${DB(device/mac_address/${EXTEN})})
same => n,Set(TECHNOLOGY=${DB(device/technology/${EXTEN})})
same => n,GotoIf($[${ISNULL(${TECHNOLOGY})} | ${ISNULL(${DEVICE})}]?error,1)
same => n,Dial(${TECHNOLOGY}/${DEVICE},${GLOBAL(TIMEOUT)})
same => n,Set(vmFlag=${IF($[${DIALSTATUS} = BUSY]?b:u)})
same => n,Voicemail(${EXTEN}@${GLOBAL(VOICEMAIL_CONTEXT)},${vmFlag})
same => n,Hangup()
exten => error,1,Verbose(2,Unable to lookup technology or device for extension)
same => n,Playback(silence/1&num-not-in-db)
same => n,Hangup()

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

View File

@@ -1,461 +1,225 @@
Information for Upgrading From Previous Asterisk Releases
=========================================================
Build Process (configure script):
IAX2:
Asterisk now uses an autoconf-generated configuration script to learn how it
should build itself for your system. As it is a standard script, running:
* There have been some changes to the IAX2 protocol to address the security
concerns documented in the security advisory AST-2009-006. Please see the
IAX2 security document, doc/IAX2-security.pdf, for information regarding
backwards compatibility with versions of Asterisk that do not contain these
changes to IAX2.
$ ./configure --help
Compiling:
will show you all the options available. This script can be used to tell the
build process what libraries you have on your system (if it cannot find them
automatically), which libraries you wish to have ignored even though they may
be present, etc.
* The Asterisk 1.2 source code now uses C language features
supported only by 'modern' C compilers. Generally, this means GCC
version 3.0 or higher, although some GCC 2.96 releases will also
work. Some non-GCC compilers that support C99 and the common GCC
extensions (including anonymous structures and unions) will also
work. All releases of GCC 2.95 do _not_ have the requisite feature
support; systems using that compiler will need to be upgraded to
a more recent compiler release.
You must run the configure script before Asterisk will build, although it will
attempt to automatically run it for you with no options specified; for most
users, that will result in a similar build to what they would have had before
the configure script was added to the build process (except for having to run
'make' again after the configure script is run). Note that the configure script
does NOT need to be re-run just to rebuild Asterisk; you only need to re-run it
when your system configuration changes or you wish to build Asterisk with
different options.
Dialplan Expressions:
Build Process (module selection):
* The dialplan expression parser (which handles $[ ... ] constructs)
has gone through a major upgrade, but has one incompatible change:
spaces are no longer required around expression operators, including
string comparisons. However, you can now use quoting to keep strings
together for comparison. For more details, please read the
doc/README.variables file, and check over your dialplan for possible
problems.
The Asterisk source tree now includes a basic module selection and build option
selection tool called 'menuselect'. Run 'make menuselect' to make your choices.
In this tool, you can disable building of modules that you don't care about,
turn on/off global options for the build and see which modules will not
(and cannot) be built because your system does not have the required external
dependencies installed.
Agents:
The resulting file from menuselect is called 'menuselect.makeopts'. Note that
the resulting menuselect.makeopts file generally contains which modules *not*
to build. The modules listed in this file indicate which modules have unmet
dependencies, a present conflict, or have been disabled by the user in the
menuselect interface. Compiler Flags can also be set in the menuselect
interface. In this case, the resulting file contains which CFLAGS are in use,
not which ones are not in use.
* The default for ackcall has been changed to "no" instead of "yes"
because of a bug which caused the "yes" behavior to generally act like
"no". You may need to adjust the value if your agents behave
differently than you expect with respect to acknowledgement.
If you would like to save your choices and have them applied against all
builds, the file can be copied to '~/.asterisk.makeopts' or
'/etc/asterisk.makeopts'.
* The AgentCallBackLogin application now requires a second '|' before
specifying an extension@context. This is to distinguish the options
string from the extension, so that they do not conflict. See
'show application AgentCallbackLogin' for more details.
Build Process (Makefile targets):
Parking:
The 'valgrind' and 'dont-optimize' targets have been removed; their functionality
is available by enabling the DONT_OPTIMIZE setting in the 'Compiler Flags' menu
in the menuselect tool.
* Parking behavior has changed slightly; when a parked call times out,
Asterisk will attempt to deliver the call back to the extension that
parked it, rather than the 's' extension. If that extension is busy
or unavailable, the parked call will be lost.
It is now possible to run most make targets against a single subdirectory; from
the top level directory, for example, 'make channels' will run 'make all' in the
'channels' subdirectory. This also is true for 'clean', 'distclean' and 'depend'.
Dialing:
Sound (prompt) and Music On Hold files:
* The Caller*ID of the outbound leg is now the extension that was
called, rather than the Caller*ID of the inbound leg of the call. The
"o" flag for Dial can be used to restore the original behavior if
desired. Note that if you are looking for the originating callerid
from the manager event, there is a new manager event "Dial" which
provides the source and destination channels and callerid.
Beginning with Asterisk 1.4, the sound files and music on hold files supplied for
use with Asterisk have been replaced with new versions produced from high quality
master recordings, and are available in three languages (English, French and
Spanish) and in five formats (WAV (uncompressed), mu-Law, a-Law, GSM and G.729).
In addition, the music on hold files provided by opsound.org Music are now available
in the same five formats, but no longer available in MP3 format.
IAX:
The Asterisk 1.4 tarball packages will only include English prompts in GSM format,
(as were supplied with previous releases) and the opsound.org MOH files in WAV format.
All of the other variations can be installed by running 'make menuselect' and
selecting the packages you wish to install; when you run 'make install', those
packages will be downloaded and installed along with the standard files included
in the tarball.
* The naming convention for IAX channels has changed in two ways:
1. The call number follows a "-" rather than a "/" character.
2. The name of the channel has been simplified to IAX2/peer-callno,
rather than IAX2/peer@peer-callno or even IAX2/peer@peer/callno.
If for some reason you expect to not have Internet access at the time you will be
running 'make install', you can make your package selections using menuselect and
then run 'make sounds' to download (only) the sound packages; this will leave the
sound packages in the 'sounds' subdirectory to be used later during installation.
SIP:
WARNING: Asterisk 1.4 supports a new layout for sound files in multiple languages;
instead of the alternate-language files being stored in subdirectories underneath
the existing files (for French, that would be digits/fr, letters/fr, phonetic/fr,
etc.) the new layout creates one directory under /var/lib/asterisk/sounds for the
language itself, then places all the sound files for that language under that
directory and its subdirectories. This is the layout that will be created if you
select non-English languages to be installed via menuselect, HOWEVER Asterisk does
not default to this layout and will not find the files in the places it expects them
to be. If you wish to use this layout, make sure you put 'languageprefix=yes' in your
/etc/asterisk/asterisk.conf file, so that Asterisk will know how the files were
installed.
* The global option "port" in 1.0.X that is used to set which port to
bind to has been changed to "bindport" to be more consistent with
the other channel drivers and to avoid confusion with the "port"
option for users/peers.
PBX Core:
* The (very old and undocumented) ability to use BYEXTENSION for dialing
instead of ${EXTEN} has been removed.
* Builtin (res_features) transfer functionality attempts to use the context
defined in TRANSFER_CONTEXT variable of the transferer channel first. If
not set, it uses the transferee variable. If not set in any channel, it will
attempt to use the last non macro context. If not possible, it will default
to the current context.
* The autofallthrough setting introduced in Asterisk 1.2 now defaults to 'yes';
if your dialplan relies on the ability to 'run off the end' of an extension
and wait for a new extension without using WaitExten() to accomplish that,
you will need set autofallthrough to 'no' in your extensions.conf file.
Command Line Interface:
* 'show channels concise', designed to be used by applications that will parse
its output, previously used ':' characters to separate fields. However, some
of those fields can easily contain that character, making the output not
parseable. The delimiter has been changed to '!'.
* The "Registry" event now uses "Username" rather than "User" for
consistency with IAX.
Applications:
* In previous Asterisk releases, many applications would jump to priority n+101
to indicate some kind of status or error condition. This functionality was
marked deprecated in Asterisk 1.2. An option to disable it was provided with
the default value set to 'on'. The default value for the global priority
jumping option is now 'off'.
* The applications Cut, Sort, DBGet, DBPut, SetCIDNum, SetCIDName, SetRDNIS,
AbsoluteTimeout, DigitTimeout, ResponseTimeout, SetLanguage, GetGroupCount,
and GetGroupMatchCount were all deprecated in version 1.2, and therefore have
been removed in this version. You should use the equivalent dialplan
function in places where you have previously used one of these applications.
* The application SetGlobalVar has been deprecated. You should replace uses
of this application with the following combination of Set and GLOBAL():
Set(GLOBAL(name)=value). You may also access global variables exclusively by
using the GLOBAL() dialplan function, instead of relying on variable
interpolation falling back to globals when no channel variable is set.
* The application SetVar has been renamed to Set. The syntax SetVar was marked
deprecated in version 1.2 and is no longer recognized in this version.
* app_read has been updated to use the newer options codes, using "skip" or
"noanswer" will not work. Use s or n. Also there is a new feature i, for
using indication tones, so typing in skip would give you unexpected results.
* OSPAuth is added to authenticate OSP tokens in in_bound call setup messages.
* The CONNECT event in the queue_log from app_queue now has a second field
in addition to the holdtime field. It contains the unique ID of the
queue member channel that is taking the call. This is useful when trying
to link recording filenames back to a particular call from the queue.
* The old/current behavior of app_queue has a serial type behavior
in that the queue will make all waiting callers wait in the queue
even if there is more than one available member ready to take
calls until the head caller is connected with the member they
were trying to get to. The next waiting caller in line then
becomes the head caller, and they are then connected with the
next available member and all available members and waiting callers
waits while this happens. This cycle continues until there are
no more available members or waiting callers, whichever comes first.
The new behavior, enabled by setting autofill=yes in queues.conf
either at the [general] level to default for all queues or
to set on a per-queue level, makes sure that when the waiting
callers are connecting with available members in a parallel fashion
until there are no more available members or no more waiting callers,
whichever comes first. This is probably more along the lines of how
one would expect a queue should work and in most cases, you will want
to enable this new behavior. If you do not specify or comment out this
option, it will default to "no" to keep backward compatability with the old
behavior.
* Queues depend on the channel driver reporting the proper state
for each member of the queue. To get proper signalling on
queue members that use the SIP channel driver, you need to
enable a call limit (could be set to a high value so it
is not put into action) and also make sure that both inbound
and outbound calls are accounted for.
Example:
[general]
limitonpeer = yes
[peername]
type=friend
call-limit=10
* The app_queue application now has the ability to use MixMonitor to
record conversations queue members are having with queue callers. Please
see configs/queues.conf.sample for more information on this option.
* The app_queue application strategy called 'roundrobin' has been deprecated
for this release. Users are encouraged to use 'rrmemory' instead, since it
provides more 'true' round-robin call delivery. For the Asterisk 1.6 release,
'rrmemory' will be renamed 'roundrobin'.
* app_meetme: The 'm' option (monitor) is renamed to 'l' (listen only), and
the 'm' option now provides the functionality of "initially muted".
In practice, most existing dialplans using the 'm' flag should not notice
any difference, unless the keypad menu is enabled, allowing the user
to unmute themsleves.
* ast_play_and_record would attempt to cancel the recording if a DTMF
'0' was received. This behavior was not documented in most of the
applications that used ast_play_and_record and the return codes from
ast_play_and_record weren't checked for properly.
ast_play_and_record has been changed so that '0' no longer cancels a
recording. If you want to allow DTMF digits to cancel an
in-progress recording use ast_play_and_record_full which allows you
to specify which DTMF digits can be used to accept a recording and
which digits can be used to cancel a recording.
* ast_app_messagecount has been renamed to ast_app_inboxcount. There is now a
new ast_app_messagecount function which takes a single context/mailbox/folder
mailbox specification and returns the message count for that folder only.
This addresses the deficiency of not being able to count the number of
messages in folders other than INBOX and Old.
* The exit behavior of the AGI applications has changed. Previously, when
a connection to an AGI server failed, the application would cause the channel
to immediately stop dialplan execution and hangup. Now, the only time that
the AGI applications will cause the channel to stop dialplan execution is
when the channel itself requests hangup. The AGI applications now set an
AGISTATUS variable which will allow you to find out whether running the AGI
was successful or not.
Previously, there was no way to handle the case where Asterisk was unable to
locally execute an AGI script for some reason. In this case, dialplan
execution will continue as it did before, but the AGISTATUS variable will be
set to "FAILURE".
A locally executed AGI script can now exit with a non-zero exit code and this
failure will be detected by Asterisk. If an AGI script exits with a non-zero
exit code, the AGISTATUS variable will be set to "FAILURE" as opposed to
"SUCCESS".
* app_voicemail: The ODBC_STORAGE capability now requires the extended table format
previously used only by EXTENDED_ODBC_STORAGE. This means that you will need to update
your table format using the schema provided in doc/odbcstorage.txt
* app_waitforsilence: Fixes have been made to this application which changes the
default behavior with how quickly it returns. You can maintain "old-style" behavior
with the addition/use of a third "timeout" parameter.
Please consult the application documentation and make changes to your dialplan
if appropriate.
Manager:
* After executing the 'status' manager action, the "Status" manager events
included the header "CallerID:" which was actually only the CallerID number,
and not the full CallerID string. This header has been renamed to
"CallerIDNum". For compatibility purposes, the CallerID parameter will remain
until after the release of 1.4, when it will be removed. Please use the time
during the 1.4 release to make this transition.
* The AgentConnect event now has an additional field called "BridgedChannel"
which contains the unique ID of the queue member channel that is taking the
call. This is useful when trying to link recording filenames back to
a particular call from the queue.
* app_userevent has been modified to always send Event: UserEvent with the
additional header UserEvent: <userspec>. Also, the Channel and UniqueID
headers are not automatically sent, unless you specify them as separate
arguments. Please see the application help for the new syntax.
* app_meetme: Mute and Unmute events are now reported via the Manager API.
Native Manager API commands MeetMeMute and MeetMeUnmute are provided, which
are easier to use than "Action Command:". The MeetMeStopTalking event has
also been deprecated in favor of the already existing MeetmeTalking event
with a "Status" of "on" or "off" added.
* OriginateFailure and OriginateSuccess events were replaced by event
OriginateResponse with a header named "Response" to indicate success or
failure
Variables:
* The builtin variables ${CALLERID}, ${CALLERIDNAME}, ${CALLERIDNUM},
${CALLERANI}, ${DNID}, ${RDNIS}, ${DATETIME}, ${TIMESTAMP}, ${ACCOUNTCODE},
and ${LANGUAGE} have all been deprecated in favor of their related dialplan
functions. You are encouraged to move towards the associated dialplan
function, as these variables will be removed in a future release.
* The CDR-CSV variables uniqueid, userfield, and basing time on GMT are now
adjustable from cdr.conf, instead of recompiling.
* OSP applications exports several new variables, ${OSPINHANDLE},
${OSPOUTHANDLE}, ${OSPINTOKEN}, ${OSPOUTTOKEN}, ${OSPCALLING},
${OSPINTIMELIMIT}, and ${OSPOUTTIMELIMIT}
* Builtin transfer functionality sets the variable ${TRANSFERERNAME} in the new
created channel. This variables holds the channel name of the transferer.
* The dial plan variable PRI_CAUSE will be removed from future versions
of Asterisk.
It is replaced by adding a cause value to the hangup() application.
Functions:
* The function ${CHECK_MD5()} has been deprecated in favor of using an
expression: $[${MD5(<string>)} = ${saved_md5}].
* The 'builtin' functions that used to be combined in pbx_functions.so are
now built as separate modules. If you are not using 'autoload=yes' in your
modules.conf file then you will need to explicitly load the modules that
contain the functions you want to use.
* The ENUMLOOKUP() function with the 'c' option (for counting the number of
records), but the lookup fails to match any records, the returned value will
now be "0" instead of blank.
* The REALTIME() function is now available in version 1.4 and app_realtime has
been deprecated in favor of the new function. app_realtime will be removed
completely with the version 1.6 release so please take the time between
releases to make any necessary changes
* The QUEUEAGENTCOUNT() function has been deprecated in favor of
QUEUE_MEMBER_COUNT().
The IAX2 channel:
* The "mailboxdetail" option has been deprecated. Previously, if this option
was not enabled, the 2 byte MSGCOUNT information element would be set to all
1's to indicate there there is some number of messages waiting. With this
option enabled, the number of new messages were placed in one byte and the
number of old messages are placed in the other. This is now the default
(and the only) behavior.
The SIP channel:
* The "incominglimit" setting is replaced by the "call-limit" setting in
sip.conf.
* OSP support code is removed from SIP channel to OSP applications. ospauth
option in sip.conf is removed to osp.conf as authpolicy. allowguest option
in sip.conf cannot be set as osp anymore.
* The Asterisk RTP stack has been changed in regards to RFC2833 reception
and transmission. Packets will now be sent with proper duration instead of all
at once. If you are receiving calls from a pre-1.4 Asterisk installation you
will want to turn on the rfc2833compensate option. Without this option your
DTMF reception may act poorly.
* The $SIPUSERAGENT dialplan variable is deprecated and will be removed
in coming versions of Asterisk. Please use the dialplan function
SIPCHANINFO(useragent) instead.
* The ALERT_INFO dialplan variable is deprecated and will be removed
in coming versions of Asterisk. Please use the dialplan application
sipaddheader() to add the "Alert-Info" header to the outbound invite.
* The "canreinvite" option has changed. canreinvite=yes used to disable
re-invites if you had NAT=yes. In 1.4, you need to set canreinvite=nonat
to disable re-invites when NAT=yes. This is propably what you want.
The settings are now: "yes", "no", "nonat", "update". Please consult
sip.conf.sample for detailed information.
The Zap channel:
* Support for MFC/R2 has been removed, as it has not been functional for some
time and it has no maintainer.
The Agent channel:
* Callback mode (AgentCallbackLogin) is now deprecated, since the entire function
it provided can be done using dialplan logic, without requiring additional
channel and module locks (which frequently caused deadlocks). An example of
how to do this using AEL dialplan is in doc/queues-with-callback-members.txt.
The G726-32 codec:
* It has been determined that previous versions of Asterisk used the wrong codeword
packing order for G726-32 data. This version supports both available packing orders,
and can transcode between them. It also now selects the proper order when
negotiating with a SIP peer based on the codec name supplied in the SDP. However,
there are existing devices that improperly request one order and then use another;
Sipura and Grandstream ATAs are known to do this, and there may be others. To
be able to continue to use these devices with this version of Asterisk and the
G726-32 codec, a configuration parameter called 'g726nonstandard' has been added
to sip.conf, so that Asterisk can use the packing order expected by the device (even
though it requested a different order). In addition, the internal format number for
G726-32 has been changed, and the old number is now assigned to AAL2-G726-32. The
result of this is that this version of Asterisk will be able to interoperate over
IAX2 with older versions of Asterisk, as long as this version is told to allow
'g726aal2' instead of 'g726' as the codec for the call.
Installation:
* On BSD systems, the installation directories have changed to more "FreeBSDish"
directories. On startup, Asterisk will look for the main configuration in
/usr/local/etc/asterisk/asterisk.conf
If you have an old installation, you might want to remove the binaries and
move the configuration files to the new locations. The following directories
are now default:
ASTLIBDIR /usr/local/lib/asterisk
ASTVARLIBDIR /usr/local/share/asterisk
ASTETCDIR /usr/local/etc/asterisk
ASTBINDIR /usr/local/bin/asterisk
ASTSBINDIR /usr/local/sbin/asterisk
Music on Hold:
* The music on hold handling has been changed in some significant ways in hopes
to make it work in a way that is much less confusing to users. Behavior will
not change if the same configuration is used from older versions of Asterisk.
However, there are some new configuration options that will make things work
in a way that makes more sense.
Previously, many of the channel drivers had an option called "musicclass" or
something similar. This option set what music on hold class this channel
would *hear* when put on hold. Some people expected (with good reason) that
this option was to configure what music on hold class to play when putting
the bridged channel on hold. This option has now been deprecated.
Two new music on hold related configuration options for channel drivers have
been introduced. Some channel drivers support both options, some just one,
and some support neither of them. Check the sample configuration files to see
which options apply to which channel driver.
The "mohsuggest" option specifies which music on hold class to suggest to the
bridged channel when putting them on hold. The only way that this class can
be overridden is if the bridged channel has a specific music class set that
was done in the dialplan using Set(CHANNEL(musicclass)=something).
The "mohinterpret" option is similar to the old "musicclass" option. It
specifies which music on hold class this channel would like to listen to when
put on hold. This music class is only effective if this channel has no music
class set on it from the dialplan and the bridged channel putting this one on
hold had no "mohsuggest" setting.
The IAX2 and Zap channel drivers have an additional feature for the
"mohinterpret" option. If this option is set to "passthrough", then these
channel drivers will pass through the HOLD message in signalling instead of
starting music on hold on the channel. An example for how this would be
useful is in an enterprise network of Asterisk servers. When one phone on one
server puts a phone on a different server on hold, the remote server will be
responsible for playing the hold music to its local phone that was put on
hold instead of the far end server across the network playing the music.
CDR Records:
* The behavior of the "clid" field of the CDR has always been that it will
contain the callerid ANI if it is set, or the callerid number if ANI was not
set. When using the "callerid" option for various channel drivers, some
would set ANI and some would not. This has been cleared up so that all
channel drivers set ANI. If you would like to change the callerid number
on the channel from the dialplan and have that change also show up in the
CDR, then you *must* set CALLERID(ANI) as well as CALLERID(num).
API:
* There are some API functions that were not previously prefixed with the 'ast_'
prefix but now are; these include the ADSI, ODBC and AGI interfaces. If you
have a module that uses the services provided by res_adsi, res_odbc, or
res_agi, you will need to add ast_ prefixes to the functions that you call
from those modules.
Formats:
* format_wav: The GAIN preprocessor definition has been changed from 2 to 0
in Asterisk 1.4. This change was made in response to user complaints of
choppiness or the clipping of loud signal peaks. The GAIN preprocessor
definition will be retained in Asterisk 1.4, but will be removed in a
future release. The use of GAIN for the increasing of voicemail message
volume should use the 'volgain' option in voicemail.conf
* With the addition of dialplan functions (which operate similarly
to variables), the SetVar application has been renamed to Set.
* The CallerPres application has been removed. Use SetCallerPres
instead. It accepts both numeric and symbolic names.
* The applications GetGroupCount, GetGroupMatchCount, SetGroup, and
CheckGroup have been deprecated in favor of functions. Here is a
table of their replacements:
GetGroupCount([groupname][@category] GROUP_COUNT([groupname][@category]) Set(GROUPCOUNT=${GROUP_COUNT()})
GroupMatchCount(groupmatch[@category]) GROUP_MATCH_COUNT(groupmatch[@category]) Set(GROUPCOUNT=${GROUP_MATCH_COUNT(SIP/.*)})
SetGroup(groupname[@category]) GROUP([category])=groupname Set(GROUP()=test)
CheckGroup(max[@category]) N/A GotoIf($[ ${GROUP_COUNT()} > 5 ]?103)
Note that CheckGroup does not have a direct replacement. There is
also a new function called GROUP_LIST() which will return a space
separated list of all of the groups set on a channel. The GROUP()
function can also return the name of the group set on a channel when
used in a read environment.
* The applications DBGet and DBPut have been deprecated in favor of
functions. Here is a table of their replacements:
DBGet(foo=family/key) Set(foo=${DB(family/key)})
DBPut(family/key=${foo}) Set(DB(family/key)=${foo})
* The application SetLanguage has been deprecated in favor of the
function LANGUAGE().
SetLanguage(fr) Set(LANGUAGE()=fr)
The LANGUAGE function can also return the currently set language:
Set(MYLANG=${LANGUAGE()})
* The applications AbsoluteTimeout, DigitTimeout, and ResponseTimeout
have been deprecated in favor of the function TIMEOUT(timeouttype):
AbsoluteTimeout(300) Set(TIMEOUT(absolute)=300)
DigitTimeout(15) Set(TIMEOUT(digit)=15)
ResponseTimeout(15) Set(TIMEOUT(response)=15)
The TIMEOUT() function can also return the currently set timeouts:
Set(DTIMEOUT=${TIMEOUT(digit)})
* The applications SetCIDName, SetCIDNum, and SetRDNIS have been
deprecated in favor of the CALLERID(datatype) function:
SetCIDName(Joe Cool) Set(CALLERID(name)=Joe Cool)
SetCIDNum(2025551212) Set(CALLERID(number)=2025551212)
SetRDNIS(2024561414) Set(CALLERID(RDNIS)=2024561414)
* The application Record now uses the period to separate the filename
from the format, rather than the colon.
* The application VoiceMail now supports a 'temporary' greeting for each
mailbox. This greeting can be recorded by using option 4 in the
'mailbox options' menu, and 'change your password' option has been
moved to option 5.
* The application VoiceMailMain now only matches the 'default' context if
none is specified in the arguments. (This was the previously
documented behavior, however, we didn't follow that behavior.) The old
behavior can be restored by setting searchcontexts=yes in voicemail.conf.
Queues:
* A queue is now considered empty not only if there are no members but if
none of the members are available (e.g. agents not logged on). To
restore the original behavior, use "leavewhenempty=strict" or
"joinwhenempty=strict" instead of "=yes" for those options.
* It is now possible to use multi-digit extensions in the exit context
for a queue (although you should not have overlapping extensions,
as there is no digit timeout). This means that the EXITWITHKEY event
in queue_log can now contain a key field with more than a single
character in it.
Extensions:
* By default, there is a new option called "autofallthrough" in
extensions.conf that is set to yes. Asterisk 1.0 (and earlier)
behavior was to wait for an extension to be dialed after there were no
more extensions to execute. "autofallthrough" changes this behavior
so that the call will immediately be terminated with BUSY,
CONGESTION, or HANGUP based on Asterisk's best guess. If you are
writing an extension for IVR, you must use the WaitExten application
if "autofallthrough" is set to yes.
AGI:
* AGI scripts did not always get SIGHUP at the end, previously. That
behavior has been fixed. If you do not want your script to terminate
at the end of AGI being called (e.g. on a hangup) then set SIGHUP to
be ignored within your application.
* CallerID is reported with agi_callerid and agi_calleridname instead
of a single parameter holding both.
Music On Hold:
* The preferred format for musiconhold.conf has changed; please see the
sample configuration file for the new format. The existing format
is still supported but will generate warnings when the module is loaded.
chan_modem:
* All the chan_modem channel drivers (aopen, bestdata and i4l) are deprecated
in this release, and will be removed in the next major Asterisk release.
Please migrate to chan_misdn for ISDN interfaces; there is no upgrade
path for aopen and bestdata modem users.
MeetMe:
* The conference application now allows users to increase/decrease their
speaking volume and listening volume (independently of each other and
other users); the 'admin' and 'user' menus have changed, and new sound
files are included with this release. However, if a user calling in
over a Zaptel channel that does NOT have hardware DTMF detection
increases their speaking volume, it is likely they will no longer be
able to enter/exit the menu or make any further adjustments, as the
software DTMF detector will not be able to recognize the DTMF coming
from their device.
GetVar Manager Action:
* Previously, the behavior of the GetVar manager action reported the value
of a variable in the following manner:
> name: value
This has been changed to a manner similar to the SetVar action and is now
> Variable: name
> Value: value
iLBC Codec:
* Previously, the Asterisk source code distribution included the iLBC
encoder/decoder source code, from Global IP Solutions
(http://www.gipscorp.com). This code is not licensed for
distribution, and thus has been removed from the Asterisk source
code distribution. If you wish to use codec_ilbc to support iLBC
channels in Asterisk, you can run the contrib/scripts/get_ilbc_source.sh
script to download the source and put it in the proper place in
the Asterisk build tree. Once that is done you can follow your normal
steps of building Asterisk.

View File

@@ -1,943 +0,0 @@
# AST_GCC_ATTRIBUTE([attribute name])
AC_DEFUN([AST_GCC_ATTRIBUTE],
[
AC_MSG_CHECKING(for compiler 'attribute $1' support)
AC_COMPILE_IFELSE(
AC_LANG_PROGRAM([static int __attribute__(($1)) test(void) {}],
[]),
AC_MSG_RESULT(yes)
AC_DEFINE_UNQUOTED([HAVE_ATTRIBUTE_$1], 1, [Define to 1 if your GCC C compiler supports the '$1' attribute.]),
AC_MSG_RESULT(no))
])
# AST_EXT_LIB_SETUP([package symbol name], [package friendly name], [package option name], [additional help text])
AC_DEFUN([AST_EXT_LIB_SETUP],
[
$1_DESCRIP="$2"
$1_OPTION="$3"
AC_ARG_WITH([$3], AC_HELP_STRING([--with-$3=PATH],[use $2 files in PATH $4]),[
case ${withval} in
n|no)
USE_$1=no
;;
y|ye|yes)
$1_MANDATORY="yes"
;;
*)
$1_DIR="${withval}"
$1_MANDATORY="yes"
;;
esac
])
PBX_$1=0
AC_SUBST([$1_LIB])
AC_SUBST([$1_INCLUDE])
AC_SUBST([$1_DIR])
AC_SUBST([PBX_$1])
])
# AST_EXT_LIB_CHECK([package symbol name], [package library name], [function to check], [package header], [additional LIB data])
AC_DEFUN([AST_EXT_LIB_CHECK],
[
if test "${USE_$1}" != "no"; then
pbxlibdir=""
if test "x${$1_DIR}" != "x"; then
if test -d ${$1_DIR}/lib; then
pbxlibdir="-L${$1_DIR}/lib"
else
pbxlibdir="-L${$1_DIR}"
fi
fi
AC_CHECK_LIB([$2], [$3], [AST_$1_FOUND=yes], [AST_$1_FOUND=no], ${pbxlibdir} $5)
if test "${AST_$1_FOUND}" = "yes"; then
$1_LIB="-l$2 $5"
$1_HEADER_FOUND="1"
if test "x${$1_DIR}" != "x"; then
$1_LIB="${pbxlibdir} ${$1_LIB}"
$1_INCLUDE="-I${$1_DIR}/include"
saved_cppflags="${CPPFLAGS}"
CPPFLAGS="${CPPFLAGS} -I${$1_DIR}/include"
if test "x$4" != "x" ; then
AC_CHECK_HEADER([${$1_DIR}/include/$4], [$1_HEADER_FOUND=1], [$1_HEADER_FOUND=0])
fi
CPPFLAGS="${saved_cppflags}"
else
if test "x$4" != "x" ; then
AC_CHECK_HEADER([$4], [$1_HEADER_FOUND=1], [$1_HEADER_FOUND=0])
fi
fi
if test "x${$1_HEADER_FOUND}" = "x0" ; then
if test -n "${$1_MANDATORY}" ;
then
AC_MSG_NOTICE([***])
AC_MSG_NOTICE([*** It appears that you do not have the $2 development package installed.])
AC_MSG_NOTICE([*** Please install it to include ${$1_DESCRIP} support, or re-run configure])
AC_MSG_NOTICE([*** without explicitly specifying --with-${$1_OPTION}])
exit 1
fi
$1_LIB=""
$1_INCLUDE=""
PBX_$1=0
else
PBX_$1=1
AC_DEFINE_UNQUOTED([HAVE_$1], 1, [Define to indicate the ${$1_DESCRIP} library])
fi
elif test -n "${$1_MANDATORY}";
then
AC_MSG_NOTICE([***])
AC_MSG_NOTICE([*** The ${$1_DESCRIP} installation on this system appears to be broken.])
AC_MSG_NOTICE([*** Either correct the installation, or run configure])
AC_MSG_NOTICE([*** without explicitly specifying --with-${$1_OPTION}])
exit 1
fi
fi
])
AC_DEFUN(
[AST_CHECK_GNU_MAKE], [AC_CACHE_CHECK(for GNU make, GNU_MAKE,
GNU_MAKE='Not Found' ;
GNU_MAKE_VERSION_MAJOR=0 ;
GNU_MAKE_VERSION_MINOR=0 ;
for a in make gmake gnumake ; do
if test -z "$a" ; then continue ; fi ;
if ( sh -c "$a --version" 2> /dev/null | grep GNU 2>&1 > /dev/null ) ; then
GNU_MAKE=$a ;
GNU_MAKE_VERSION_MAJOR=`$GNU_MAKE --version | grep "GNU Make" | cut -f3 -d' ' | cut -f1 -d'.'`
GNU_MAKE_VERSION_MINOR=`$GNU_MAKE --version | grep "GNU Make" | cut -f2 -d'.' | cut -c1-2`
break;
fi
done ;
) ;
if test "x$GNU_MAKE" = "xNot Found" ; then
AC_MSG_ERROR( *** Please install GNU make. It is required to build Asterisk!)
exit 1
fi
AC_SUBST([GNU_MAKE])
])
AC_DEFUN(
[AST_CHECK_PWLIB], [
PWLIB_INCDIR=
PWLIB_LIBDIR=
AC_LANG_PUSH([C++])
if test "${PWLIBDIR:-unset}" != "unset" ; then
AC_CHECK_HEADER(${PWLIBDIR}/version.h, HAS_PWLIB=1, )
fi
if test "${HAS_PWLIB:-unset}" = "unset" ; then
if test "${OPENH323DIR:-unset}" != "unset"; then
AC_CHECK_HEADER(${OPENH323DIR}/../pwlib/version.h, HAS_PWLIB=1, )
fi
if test "${HAS_PWLIB:-unset}" != "unset" ; then
PWLIBDIR="${OPENH323DIR}/../pwlib"
else
AC_CHECK_HEADER(${HOME}/pwlib/include/ptlib.h, HAS_PWLIB=1, )
if test "${HAS_PWLIB:-unset}" != "unset" ; then
PWLIBDIR="${HOME}/pwlib"
else
AC_CHECK_HEADER(/usr/local/include/ptlib.h, HAS_PWLIB=1, )
if test "${HAS_PWLIB:-unset}" != "unset" ; then
AC_PATH_PROG(PTLIB_CONFIG, ptlib-config, , /usr/local/bin)
if test "${PTLIB_CONFIG:-unset}" = "unset" ; then
AC_PATH_PROG(PTLIB_CONFIG, ptlib-config, , /usr/local/share/pwlib/make)
fi
PWLIB_INCDIR="/usr/local/include"
PWLIB_LIBDIR=`${PTLIB_CONFIG} --pwlibdir`
if test "${PWLIB_LIBDIR:-unset}" = "unset"; then
if test "x$LIB64" != "x"; then
PWLIB_LIBDIR="/usr/local/lib64"
else
PWLIB_LIBDIR="/usr/local/lib"
fi
fi
PWLIB_LIB=`${PTLIB_CONFIG} --ldflags --libs`
PWLIB_LIB="-L${PWLIB_LIBDIR} `echo ${PWLIB_LIB}`"
else
AC_CHECK_HEADER(/usr/include/ptlib.h, HAS_PWLIB=1, )
if test "${HAS_PWLIB:-unset}" != "unset" ; then
AC_PATH_PROG(PTLIB_CONFIG, ptlib-config, , /usr/share/pwlib/make)
PWLIB_INCDIR="/usr/include"
PWLIB_LIBDIR=`${PTLIB_CONFIG} --pwlibdir`
if test "${PWLIB_LIBDIR:-unset}" = "unset"; then
if test "x$LIB64" != "x"; then
PWLIB_LIBDIR="/usr/lib64"
else
PWLIB_LIBDIR="/usr/lib"
fi
fi
PWLIB_LIB=`${PTLIB_CONFIG} --ldflags --libs`
PWLIB_LIB="-L${PWLIB_LIBDIR} `echo ${PWLIB_LIB}`"
fi
fi
fi
fi
fi
#if test "${HAS_PWLIB:-unset}" = "unset" ; then
# echo "Cannot find pwlib - please install or set PWLIBDIR and try again"
# exit
#fi
if test "${HAS_PWLIB:-unset}" != "unset" ; then
if test "${PWLIBDIR:-unset}" = "unset" ; then
if test "${PTLIB_CONFIG:-unset}" != "unset" ; then
PWLIBDIR=`$PTLIB_CONFIG --prefix`
else
echo "Cannot find ptlib-config - please install and try again"
exit
fi
fi
if test "x$PWLIBDIR" = "x/usr" -o "x$PWLIBDIR" = "x/usr/"; then
PWLIBDIR="/usr/share/pwlib"
PWLIB_INCDIR="/usr/include"
if test "x$LIB64" != "x"; then
PWLIB_LIBDIR="/usr/lib64"
else
PWLIB_LIBDIR="/usr/lib"
fi
fi
if test "x$PWLIBDIR" = "x/usr/local" -o "x$PWLIBDIR" = "x/usr/"; then
PWLIBDIR="/usr/local/share/pwlib"
PWLIB_INCDIR="/usr/local/include"
if test "x$LIB64" != "x"; then
PWLIB_LIBDIR="/usr/local/lib64"
else
PWLIB_LIBDIR="/usr/local/lib"
fi
fi
if test "${PWLIB_INCDIR:-unset}" = "unset"; then
PWLIB_INCDIR="${PWLIBDIR}/include"
fi
if test "${PWLIB_LIBDIR:-unset}" = "unset"; then
PWLIB_LIBDIR="${PWLIBDIR}/lib"
fi
AC_SUBST([PWLIBDIR])
AC_SUBST([PWLIB_INCDIR])
AC_SUBST([PWLIB_LIBDIR])
fi
AC_LANG_POP([C++])
])
AC_DEFUN(
[AST_CHECK_OPENH323_PLATFORM], [
PWLIB_OSTYPE=
case "$host_os" in
linux*) PWLIB_OSTYPE=linux ;
;;
freebsd* ) PWLIB_OSTYPE=FreeBSD ;
;;
openbsd* ) PWLIB_OSTYPE=OpenBSD ;
ENDLDLIBS="-lossaudio" ;
;;
netbsd* ) PWLIB_OSTYPE=NetBSD ;
ENDLDLIBS="-lossaudio" ;
;;
solaris* | sunos* ) PWLIB_OSTYPE=solaris ;
;;
darwin* ) PWLIB_OSTYPE=Darwin ;
;;
beos*) PWLIB_OSTYPE=beos ;
STDCCFLAGS="$STDCCFLAGS -D__BEOS__"
;;
cygwin*) PWLIB_OSTYPE=cygwin ;
;;
mingw*) PWLIB_OSTYPE=mingw ;
STDCCFLAGS="$STDCCFLAGS -mms-bitfields" ;
ENDLDLIBS="-lwinmm -lwsock32 -lsnmpapi -lmpr -lcomdlg32 -lgdi32 -lavicap32" ;
;;
* ) PWLIB_OSTYPE="$host_os" ;
AC_MSG_WARN("OS $PWLIB_OSTYPE not recognized - proceed with caution!") ;
;;
esac
PWLIB_MACHTYPE=
case "$host_cpu" in
x86 | i686 | i586 | i486 | i386 ) PWLIB_MACHTYPE=x86
;;
x86_64) PWLIB_MACHTYPE=x86_64 ;
P_64BIT=1 ;
LIB64=1 ;
;;
alpha | alphaev56 | alphaev6 | alphaev67 | alphaev7) PWLIB_MACHTYPE=alpha ;
P_64BIT=1 ;
;;
sparc ) PWLIB_MACHTYPE=sparc ;
;;
powerpc ) PWLIB_MACHTYPE=ppc ;
;;
ppc ) PWLIB_MACHTYPE=ppc ;
;;
powerpc64 ) PWLIB_MACHTYPE=ppc64 ;
P_64BIT=1 ;
LIB64=1 ;
;;
ppc64 ) PWLIB_MACHTYPE=ppc64 ;
P_64BIT=1 ;
LIB64=1 ;
;;
ia64) PWLIB_MACHTYPE=ia64 ;
P_64BIT=1 ;
;;
s390x) PWLIB_MACHTYPE=s390x ;
P_64BIT=1 ;
LIB64=1 ;
;;
s390) PWLIB_MACHTYPE=s390 ;
;;
* ) PWLIB_MACHTYPE="$host_cpu";
AC_MSG_WARN("CPU $PWLIB_MACHTYPE not recognized - proceed with caution!") ;;
esac
PWLIB_PLATFORM="${PWLIB_OSTYPE}_${PWLIB_MACHTYPE}"
AC_SUBST([PWLIB_PLATFORM])
])
AC_DEFUN(
[AST_CHECK_OPENH323], [
OPENH323_INCDIR=
OPENH323_LIBDIR=
AC_LANG_PUSH([C++])
if test "${OPENH323DIR:-unset}" != "unset" ; then
AC_CHECK_HEADER(${OPENH323DIR}/version.h, HAS_OPENH323=1, )
fi
if test "${HAS_OPENH323:-unset}" = "unset" ; then
AC_CHECK_HEADER(${PWLIBDIR}/../openh323/version.h, OPENH323DIR="${PWLIBDIR}/../openh323"; HAS_OPENH323=1, )
if test "${HAS_OPENH323:-unset}" != "unset" ; then
OPENH323DIR="${PWLIBDIR}/../openh323"
AC_CHECK_HEADER(${OPENH323DIR}/include/h323.h, , OPENH323_INCDIR="${PWLIB_INCDIR}/openh323"; OPENH323_LIBDIR="${PWLIB_LIBDIR}")
else
AC_CHECK_HEADER(${HOME}/openh323/include/h323.h, HAS_OPENH323=1, )
if test "${HAS_OPENH323:-unset}" != "unset" ; then
OPENH323DIR="${HOME}/openh323"
else
AC_CHECK_HEADER(/usr/local/include/openh323/h323.h, HAS_OPENH323=1, )
if test "${HAS_OPENH323:-unset}" != "unset" ; then
OPENH323DIR="/usr/local/share/openh323"
OPENH323_INCDIR="/usr/local/include/openh323"
if test "x$LIB64" != "x"; then
OPENH323_LIBDIR="/usr/local/lib64"
else
OPENH323_LIBDIR="/usr/local/lib"
fi
else
AC_CHECK_HEADER(/usr/include/openh323/h323.h, HAS_OPENH323=1, )
if test "${HAS_OPENH323:-unset}" != "unset" ; then
OPENH323DIR="/usr/share/openh323"
OPENH323_INCDIR="/usr/include/openh323"
if test "x$LIB64" != "x"; then
OPENH323_LIBDIR="/usr/lib64"
else
OPENH323_LIBDIR="/usr/lib"
fi
fi
fi
fi
fi
fi
if test "${HAS_OPENH323:-unset}" != "unset" ; then
if test "${OPENH323_INCDIR:-unset}" = "unset"; then
OPENH323_INCDIR="${OPENH323DIR}/include"
fi
if test "${OPENH323_LIBDIR:-unset}" = "unset"; then
OPENH323_LIBDIR="${OPENH323DIR}/lib"
fi
OPENH323_LIBDIR="`cd ${OPENH323_LIBDIR}; pwd`"
OPENH323_INCDIR="`cd ${OPENH323_INCDIR}; pwd`"
OPENH323DIR="`cd ${OPENH323DIR}; pwd`"
AC_SUBST([OPENH323DIR])
AC_SUBST([OPENH323_INCDIR])
AC_SUBST([OPENH323_LIBDIR])
fi
AC_LANG_POP([C++])
])
AC_DEFUN(
[AST_CHECK_PWLIB_VERSION], [
if test "${HAS_$2:-unset}" != "unset"; then
$2_VERSION=`grep "$2_VERSION" ${$2_INCDIR}/$3 | cut -f2 -d ' ' | sed -e 's/"//g'`
$2_MAJOR_VERSION=`echo ${$2_VERSION} | cut -f1 -d.`
$2_MINOR_VERSION=`echo ${$2_VERSION} | cut -f2 -d.`
$2_BUILD_NUMBER=`echo ${$2_VERSION} | cut -f3 -d.`
let $2_VER=${$2_MAJOR_VERSION}*10000+${$2_MINOR_VERSION}*100+${$2_BUILD_NUMBER}
let $2_REQ=$4*10000+$5*100+$6
AC_MSG_CHECKING(if $1 version ${$2_VERSION} is compatible with chan_h323)
if test ${$2_VER} -lt ${$2_REQ}; then
AC_MSG_RESULT(no)
unset HAS_$2
else
AC_MSG_RESULT(yes)
fi
fi
])
AC_DEFUN(
[AST_CHECK_PWLIB_BUILD], [
if test "${HAS_$2:-unset}" != "unset"; then
AC_MSG_CHECKING($1 installation validity)
saved_cppflags="${CPPFLAGS}"
saved_libs="${LIBS}"
if test "${$2_LIB:-unset}" != "unset"; then
LIBS="${LIBS} ${$2_LIB} $7"
else
LIBS="${LIBS} -L${$2_LIBDIR} -l${PLATFORM_$2} $7"
fi
CPPFLAGS="${CPPFLAGS} -I${$2_INCDIR} $6"
AC_LANG_PUSH([C++])
AC_LINK_IFELSE(
[AC_LANG_PROGRAM([$4],[$5])],
[ AC_MSG_RESULT(yes)
ac_cv_lib_$2="yes"
],
[ AC_MSG_RESULT(no)
ac_cv_lib_$2="no"
]
)
AC_LANG_POP([C++])
LIBS="${saved_libs}"
CPPFLAGS="${saved_cppflags}"
if test "${ac_cv_lib_$2}" = "yes"; then
if test "${$2_LIB:-undef}" = "undef"; then
if test "${$2_LIBDIR}" != "" -a "${$2_LIBDIR}" != "/usr/lib"; then
$2_LIB="-L${$2_LIBDIR} -l${PLATFORM_$2}"
else
$2_LIB="-l${PLATFORM_$2}"
fi
fi
if test "${$2_INCDIR}" != "" -a "${$2_INCDIR}" != "/usr/include"; then
$2_INCLUDE="-I${$2_INCDIR}"
fi
PBX_$2=1
AC_DEFINE([HAVE_$2], 1, [$3])
fi
fi
])
AC_DEFUN(
[AST_CHECK_OPENH323_BUILD], [
if test "${HAS_OPENH323:-unset}" != "unset"; then
AC_MSG_CHECKING(OpenH323 build option)
OPENH323_SUFFIX=
prefixes="h323_${PWLIB_PLATFORM}_ h323_ openh323"
for pfx in $prefixes; do
files=`ls -l ${OPENH323_LIBDIR}/lib${pfx}*.so* 2>/dev/null`
libfile=
if test -n "$files"; then
for f in $files; do
if test -f $f -a ! -L $f; then
libfile=`basename $f`
break;
fi
done
fi
if test -n "$libfile"; then
OPENH323_PREFIX=$pfx
break;
fi
done
if test "${libfile:-unset}" != "unset"; then
OPENH323_SUFFIX=`eval "echo ${libfile} | sed -e 's/lib${OPENH323_PREFIX}\(@<:@^.@:>@*\)\..*/\1/'"`
fi
case "${OPENH323_SUFFIX}" in
n)
OPENH323_BUILD="notrace";;
r)
OPENH323_BUILD="opt";;
d)
OPENH323_BUILD="debug";;
*)
if test "${OPENH323_PREFIX:-undef}" = "openh323"; then
notrace=`eval "grep NOTRACE ${OPENH323DIR}/openh323u.mak | grep = | sed -e 's/@<:@A-Z0-9_@:>@*@<:@ @:>@*=@<:@ @:>@*//'"`
if test "x$notrace" = "x"; then
notrace="0"
fi
if test "$notrace" -ne 0; then
OPENH323_BUILD="notrace"
else
OPENH323_BUILD="opt"
fi
OPENH323_LIB="-l${OPENH323_PREFIX}"
else
OPENH323_BUILD="notrace"
fi
;;
esac
AC_MSG_RESULT(${OPENH323_BUILD})
AC_SUBST([OPENH323_SUFFIX])
AC_SUBST([OPENH323_BUILD])
fi
])
# AST_FUNC_FORK
# -------------
AN_FUNCTION([fork], [AST_FUNC_FORK])
AN_FUNCTION([vfork], [AST_FUNC_FORK])
AC_DEFUN([AST_FUNC_FORK],
[AC_REQUIRE([AC_TYPE_PID_T])dnl
AC_CHECK_HEADERS(vfork.h)
AC_CHECK_FUNCS(fork vfork)
if test "x$ac_cv_func_fork" = xyes; then
_AST_FUNC_FORK
else
ac_cv_func_fork_works=$ac_cv_func_fork
fi
if test "x$ac_cv_func_fork_works" = xcross; then
case $host in
*-*-amigaos* | *-*-msdosdjgpp* | *-*-uclinux* | *-*-linux-uclibc* )
# Override, as these systems have only a dummy fork() stub
ac_cv_func_fork_works=no
;;
*)
ac_cv_func_fork_works=yes
;;
esac
AC_MSG_WARN([result $ac_cv_func_fork_works guessed because of cross compilation])
fi
ac_cv_func_vfork_works=$ac_cv_func_vfork
if test "x$ac_cv_func_vfork" = xyes; then
_AC_FUNC_VFORK
fi;
if test "x$ac_cv_func_fork_works" = xcross; then
ac_cv_func_vfork_works=$ac_cv_func_vfork
AC_MSG_WARN([result $ac_cv_func_vfork_works guessed because of cross compilation])
fi
if test "x$ac_cv_func_vfork_works" = xyes; then
AC_DEFINE(HAVE_WORKING_VFORK, 1, [Define to 1 if `vfork' works.])
else
AC_DEFINE(vfork, fork, [Define as `fork' if `vfork' does not work.])
fi
if test "x$ac_cv_func_fork_works" = xyes; then
AC_DEFINE(HAVE_WORKING_FORK, 1, [Define to 1 if `fork' works.])
fi
])# AST_FUNC_FORK
# _AST_FUNC_FORK
# -------------
AC_DEFUN([_AST_FUNC_FORK],
[AC_CACHE_CHECK(for working fork, ac_cv_func_fork_works,
[AC_RUN_IFELSE(
[AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT],
[
/* By Ruediger Kuhlmann. */
return fork () < 0;
])],
[ac_cv_func_fork_works=yes],
[ac_cv_func_fork_works=no],
[ac_cv_func_fork_works=cross])])]
)# _AST_FUNC_FORK
# AST_PROG_LD
# ----------
# find the pathname to the GNU or non-GNU linker
AC_DEFUN([AST_PROG_LD],
[AC_ARG_WITH([gnu-ld],
[AC_HELP_STRING([--with-gnu-ld],
[assume the C compiler uses GNU ld @<:@default=no@:>@])],
[test "$withval" = no || with_gnu_ld=yes],
[with_gnu_ld=no])
AC_REQUIRE([AST_PROG_SED])dnl
AC_REQUIRE([AC_PROG_CC])dnl
AC_REQUIRE([AC_CANONICAL_HOST])dnl
AC_REQUIRE([AC_CANONICAL_BUILD])dnl
ac_prog=ld
if test "$GCC" = yes; then
# Check if gcc -print-prog-name=ld gives a path.
AC_MSG_CHECKING([for ld used by $CC])
case $host in
*-*-mingw*)
# gcc leaves a trailing carriage return which upsets mingw
ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
*)
ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
esac
case $ac_prog in
# Accept absolute paths.
[[\\/]]* | ?:[[\\/]]*)
re_direlt='/[[^/]][[^/]]*/\.\./'
# Canonicalize the pathname of ld
ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'`
while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"`
done
test -z "$LD" && LD="$ac_prog"
;;
"")
# If it fails, then pretend we aren't using GCC.
ac_prog=ld
;;
*)
# If it is relative, then search for the first ld in PATH.
with_gnu_ld=unknown
;;
esac
elif test "$with_gnu_ld" = yes; then
AC_MSG_CHECKING([for GNU ld])
else
AC_MSG_CHECKING([for non-GNU ld])
fi
AC_CACHE_VAL(lt_cv_path_LD,
[if test -z "$LD"; then
lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
for ac_dir in $PATH; do
IFS="$lt_save_ifs"
test -z "$ac_dir" && ac_dir=.
if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
lt_cv_path_LD="$ac_dir/$ac_prog"
# Check to see if the program is GNU ld. I'd rather use --version,
# but apparently some variants of GNU ld only accept -v.
# Break only if it was the GNU/non-GNU ld that we prefer.
case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
*GNU* | *'with BFD'*)
test "$with_gnu_ld" != no && break
;;
*)
test "$with_gnu_ld" != yes && break
;;
esac
fi
done
IFS="$lt_save_ifs"
else
lt_cv_path_LD="$LD" # Let the user override the test with a path.
fi])
LD="$lt_cv_path_LD"
if test -n "$LD"; then
AC_MSG_RESULT($LD)
else
AC_MSG_RESULT(no)
fi
test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
AST_PROG_LD_GNU
])# AST_PROG_LD
# AST_PROG_LD_GNU
# --------------
AC_DEFUN([AST_PROG_LD_GNU],
[AC_REQUIRE([AST_PROG_EGREP])dnl
AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
[# I'd rather use --version here, but apparently some GNU lds only accept -v.
case `$LD -v 2>&1 </dev/null` in
*GNU* | *'with BFD'*)
lt_cv_prog_gnu_ld=yes
;;
*)
lt_cv_prog_gnu_ld=no
;;
esac])
with_gnu_ld=$lt_cv_prog_gnu_ld
])# AST_PROG_LD_GNU
# AST_PROG_EGREP
# -------------
m4_ifndef([AST_PROG_EGREP], [AC_DEFUN([AST_PROG_EGREP],
[AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep],
[if echo a | (grep -E '(a|b)') >/dev/null 2>&1
then ac_cv_prog_egrep='grep -E'
else ac_cv_prog_egrep='egrep'
fi])
EGREP=$ac_cv_prog_egrep
AC_SUBST([EGREP])
])]) # AST_PROG_EGREP
# AST_PROG_SED
# -----------
# Check for a fully functional sed program that truncates
# as few characters as possible. Prefer GNU sed if found.
AC_DEFUN([AST_PROG_SED],
[AC_CACHE_CHECK([for a sed that does not truncate output], ac_cv_path_SED,
[dnl ac_script should not contain more than 99 commands (for HP-UX sed),
dnl but more than about 7000 bytes, to catch a limit in Solaris 8 /usr/ucb/sed.
ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
for ac_i in 1 2 3 4 5 6 7; do
ac_script="$ac_script$as_nl$ac_script"
done
echo "$ac_script" | sed 99q >conftest.sed
$as_unset ac_script || ac_script=
_AC_PATH_PROG_FEATURE_CHECK(SED, [sed gsed],
[_AC_FEATURE_CHECK_LENGTH([ac_path_SED], [ac_cv_path_SED],
["$ac_path_SED" -f conftest.sed])])])
SED="$ac_cv_path_SED"
AC_SUBST([SED])dnl
rm -f conftest.sed
])# AST_PROG_SED
dnl @synopsis ACX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
dnl
dnl @summary figure out how to build C programs using POSIX threads
dnl
dnl This macro figures out how to build C programs using POSIX threads.
dnl It sets the PTHREAD_LIBS output variable to the threads library and
dnl linker flags, and the PTHREAD_CFLAGS output variable to any special
dnl C compiler flags that are needed. (The user can also force certain
dnl compiler flags/libs to be tested by setting these environment
dnl variables.)
dnl
dnl Also sets PTHREAD_CC to any special C compiler that is needed for
dnl multi-threaded programs (defaults to the value of CC otherwise).
dnl (This is necessary on AIX to use the special cc_r compiler alias.)
dnl
dnl NOTE: You are assumed to not only compile your program with these
dnl flags, but also link it with them as well. e.g. you should link
dnl with $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS
dnl $LIBS
dnl
dnl If you are only building threads programs, you may wish to use
dnl these variables in your default LIBS, CFLAGS, and CC:
dnl
dnl LIBS="$PTHREAD_LIBS $LIBS"
dnl CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
dnl CC="$PTHREAD_CC"
dnl
dnl In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute
dnl constant has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to
dnl that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
dnl
dnl ACTION-IF-FOUND is a list of shell commands to run if a threads
dnl library is found, and ACTION-IF-NOT-FOUND is a list of commands to
dnl run it if it is not found. If ACTION-IF-FOUND is not specified, the
dnl default action will define HAVE_PTHREAD.
dnl
dnl Please let the authors know if this macro fails on any platform, or
dnl if you have any other suggestions or comments. This macro was based
dnl on work by SGJ on autoconf scripts for FFTW (www.fftw.org) (with
dnl help from M. Frigo), as well as ac_pthread and hb_pthread macros
dnl posted by Alejandro Forero Cuervo to the autoconf macro repository.
dnl We are also grateful for the helpful feedback of numerous users.
dnl
dnl @category InstalledPackages
dnl @author Steven G. Johnson <stevenj@alum.mit.edu>
dnl @version 2006-05-29
dnl @license GPLWithACException
AC_DEFUN([ACX_PTHREAD], [
AC_REQUIRE([AC_CANONICAL_HOST])
AC_LANG_SAVE
AC_LANG_C
acx_pthread_ok=no
# We used to check for pthread.h first, but this fails if pthread.h
# requires special compiler flags (e.g. on True64 or Sequent).
# It gets checked for in the link test anyway.
# First of all, check if the user has set any of the PTHREAD_LIBS,
# etcetera environment variables, and if threads linking works using
# them:
if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
save_LIBS="$LIBS"
LIBS="$PTHREAD_LIBS $LIBS"
AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS])
AC_TRY_LINK_FUNC(pthread_join, acx_pthread_ok=yes)
AC_MSG_RESULT($acx_pthread_ok)
if test x"$acx_pthread_ok" = xno; then
PTHREAD_LIBS=""
PTHREAD_CFLAGS=""
fi
LIBS="$save_LIBS"
CFLAGS="$save_CFLAGS"
fi
# We must check for the threads library under a number of different
# names; the ordering is very important because some systems
# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
# libraries is broken (non-POSIX).
# Create a list of thread flags to try. Items starting with a "-" are
# C compiler flags, and other items are library names, except for "none"
# which indicates that we try without any flags at all, and "pthread-config"
# which is a program returning the flags for the Pth emulation library.
acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
# The ordering *is* (sometimes) important. Some notes on the
# individual items follow:
# pthreads: AIX (must check this before -lpthread)
# none: in case threads are in libc; should be tried before -Kthread and
# other compiler flags to prevent continual compiler warnings
# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
# -pthreads: Solaris/gcc
# -mthreads: Mingw32/gcc, Lynx/gcc
# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
# doesn't hurt to check since this sometimes defines pthreads too;
# also defines -D_REENTRANT)
# ... -mt is also the pthreads flag for HP/aCC
# pthread: Linux, etcetera
# --thread-safe: KAI C++
# pthread-config: use pthread-config program (for GNU Pth library)
case "${host_cpu}-${host_os}" in
*solaris*)
# On Solaris (at least, for some versions), libc contains stubbed
# (non-functional) versions of the pthreads routines, so link-based
# tests will erroneously succeed. (We need to link with -pthreads/-mt/
# -lpthread.) (The stubs are missing pthread_cleanup_push, or rather
# a function called by this macro, so we could check for that, but
# who knows whether they'll stub that too in a future libc.) So,
# we'll just look for -pthreads and -lpthread first:
acx_pthread_flags="-pthreads pthread -mt -pthread $acx_pthread_flags"
;;
esac
if test x"$acx_pthread_ok" = xno; then
for flag in $acx_pthread_flags; do
case $flag in
none)
AC_MSG_CHECKING([whether pthreads work without any flags])
;;
-*)
AC_MSG_CHECKING([whether pthreads work with $flag])
PTHREAD_CFLAGS="$flag"
;;
pthread-config)
AC_CHECK_PROG(acx_pthread_config, pthread-config, yes, no)
if test x"$acx_pthread_config" = xno; then continue; fi
PTHREAD_CFLAGS="`pthread-config --cflags`"
PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
;;
*)
AC_MSG_CHECKING([for the pthreads library -l$flag])
PTHREAD_LIBS="-l$flag"
;;
esac
save_LIBS="$LIBS"
save_CFLAGS="$CFLAGS"
LIBS="$PTHREAD_LIBS $LIBS"
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
# Check for various functions. We must include pthread.h,
# since some functions may be macros. (On the Sequent, we
# need a special flag -Kthread to make this header compile.)
# We check for pthread_join because it is in -lpthread on IRIX
# while pthread_create is in libc. We check for pthread_attr_init
# due to DEC craziness with -lpthreads. We check for
# pthread_cleanup_push because it is one of the few pthread
# functions on Solaris that doesn't have a non-functional libc stub.
# We try pthread_create on general principles.
AC_TRY_LINK([#include <pthread.h>],
[pthread_t th; pthread_join(th, 0);
pthread_attr_init(0); pthread_cleanup_push(0, 0);
pthread_create(0,0,0,0); pthread_cleanup_pop(0); ],
[acx_pthread_ok=yes])
LIBS="$save_LIBS"
CFLAGS="$save_CFLAGS"
AC_MSG_RESULT($acx_pthread_ok)
if test "x$acx_pthread_ok" = xyes; then
break;
fi
PTHREAD_LIBS=""
PTHREAD_CFLAGS=""
done
fi
# Various other checks:
if test "x$acx_pthread_ok" = xyes; then
save_LIBS="$LIBS"
LIBS="$PTHREAD_LIBS $LIBS"
save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
# Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
AC_MSG_CHECKING([for joinable pthread attribute])
attr_name=unknown
for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
AC_TRY_LINK([#include <pthread.h>], [int attr=$attr; return attr;],
[attr_name=$attr; break])
done
AC_MSG_RESULT($attr_name)
if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name,
[Define to necessary symbol if this constant
uses a non-standard name on your system.])
fi
AC_MSG_CHECKING([if more special flags are required for pthreads])
flag=no
case "${host_cpu}-${host_os}" in
*-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";;
*solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";;
esac
AC_MSG_RESULT(${flag})
if test "x$flag" != xno; then
PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
fi
LIBS="$save_LIBS"
CFLAGS="$save_CFLAGS"
# More AIX lossage: must compile with xlc_r or cc_r
if test x"$GCC" != xyes; then
AC_CHECK_PROGS(PTHREAD_CC, xlc_r cc_r, ${CC})
else
PTHREAD_CC=$CC
fi
else
PTHREAD_CC="$CC"
fi
AC_SUBST(PTHREAD_LIBS)
AC_SUBST(PTHREAD_CFLAGS)
AC_SUBST(PTHREAD_CC)
# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
if test x"$acx_pthread_ok" = xyes; then
ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1])
:
else
acx_pthread_ok=no
$2
fi
AC_LANG_RESTORE
])dnl ACX_PTHREAD

View File

@@ -1,7 +1,7 @@
/*
* Asterisk -- An open source telephony toolkit.
*
* Copyright (C) 1999 - 2006, Digium, Inc.
* Copyright (C) 1999 - 2005, Digium, Inc.
*
* Mark Spencer <markster@digium.com>
*
@@ -19,14 +19,9 @@
/*! \file
*
* \brief Various sorts of access control
*
* \author Mark Spencer <markster@digium.com>
*
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -62,6 +57,10 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#define IPTOS_MINCOST IPTOS_LOWCOST
#endif
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/acl.h"
#include "asterisk/logger.h"
#include "asterisk/channel.h"
@@ -69,14 +68,11 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/utils.h"
#include "asterisk/lock.h"
#include "asterisk/srv.h"
#include "asterisk/compat.h"
struct ast_ha {
/* Host access rule */
struct in_addr netaddr;
struct in_addr netmask;
int sense;
struct ast_ha *next;
};
#if defined(__OpenBSD__) || defined(__NetBSD__) || defined(__FreeBSD__)
AST_MUTEX_DEFINE_STATIC(routeseq_lock);
#endif
/* Default IP - if not otherwise set, don't breathe garbage */
static struct in_addr __ourip = { 0x00000000 };
@@ -90,7 +86,7 @@ struct my_ifreq {
void ast_free_ha(struct ast_ha *ha)
{
struct ast_ha *hal;
while (ha) {
while(ha) {
hal = ha;
ha = ha->next;
free(hal);
@@ -98,7 +94,7 @@ void ast_free_ha(struct ast_ha *ha)
}
/* Copy HA structure */
static void ast_copy_ha(struct ast_ha *from, struct ast_ha *to)
void ast_copy_ha(const struct ast_ha *from, struct ast_ha *to)
{
memcpy(&to->netaddr, &from->netaddr, sizeof(from->netaddr));
memcpy(&to->netmask, &from->netmask, sizeof(from->netmask));
@@ -108,12 +104,9 @@ static void ast_copy_ha(struct ast_ha *from, struct ast_ha *to)
/* Create duplicate of ha structure */
static struct ast_ha *ast_duplicate_ha(struct ast_ha *original)
{
struct ast_ha *new_ha;
if ((new_ha = ast_malloc(sizeof(*new_ha)))) {
/* Copy from original to new object */
ast_copy_ha(original, new_ha);
}
struct ast_ha *new_ha = malloc(sizeof(struct ast_ha));
/* Copy from original to new object */
ast_copy_ha(original, new_ha);
return new_ha;
}
@@ -122,16 +115,16 @@ static struct ast_ha *ast_duplicate_ha(struct ast_ha *original)
/* Used in chan_sip2 templates */
struct ast_ha *ast_duplicate_ha_list(struct ast_ha *original)
{
struct ast_ha *start = original;
struct ast_ha *start=original;
struct ast_ha *ret = NULL;
struct ast_ha *link, *prev = NULL;
struct ast_ha *link,*prev=NULL;
while (start) {
link = ast_duplicate_ha(start); /* Create copy of this object */
if (prev)
prev->next = link; /* Link previous to this object */
if (!ret)
if (!ret)
ret = link; /* Save starting point */
start = start->next; /* Go to next object */
@@ -140,22 +133,21 @@ struct ast_ha *ast_duplicate_ha_list(struct ast_ha *original)
return ret; /* Return start of list */
}
struct ast_ha *ast_append_ha(char *sense, char *stuff, struct ast_ha *path)
struct ast_ha *ast_append_ha(char *sense, const char *stuff, struct ast_ha *path)
{
struct ast_ha *ha;
struct ast_ha *ha = malloc(sizeof(struct ast_ha));
char *nm = "255.255.255.255";
char tmp[256];
struct ast_ha *prev = NULL;
struct ast_ha *ret;
int x, z;
unsigned int y;
ret = path;
while (path) {
prev = path;
path = path->next;
}
if ((ha = ast_malloc(sizeof(*ha)))) {
if (ha) {
ast_copy_string(tmp, stuff, sizeof(tmp));
nm = strchr(tmp, '/');
if (!nm) {
@@ -165,9 +157,9 @@ struct ast_ha *ast_append_ha(char *sense, char *stuff, struct ast_ha *path)
nm++;
}
if (!strchr(nm, '.')) {
if ((sscanf(nm, "%d", &x) == 1) && (x >= 0) && (x <= 32)) {
if ((sscanf(nm, "%30d", &x) == 1) && (x >= 0) && (x <= 32)) {
y = 0;
for (z = 0; z < x; z++) {
for (z=0;z<x;z++) {
y >>= 1;
y |= 0x80000000;
}
@@ -196,8 +188,7 @@ struct ast_ha *ast_append_ha(char *sense, char *stuff, struct ast_ha *path)
ret = ha;
}
}
if (option_debug)
ast_log(LOG_DEBUG, "%s/%s appended to acl for peer\n", stuff, nm);
ast_log(LOG_DEBUG, "%s/%s appended to acl for peer\n", stuff, nm);
return ret;
}
@@ -209,10 +200,10 @@ int ast_apply_ha(struct ast_ha *ha, struct sockaddr_in *sin)
char iabuf[INET_ADDRSTRLEN];
char iabuf2[INET_ADDRSTRLEN];
/* DEBUG */
ast_copy_string(iabuf, ast_inet_ntoa(sin->sin_addr), sizeof(iabuf));
ast_copy_string(iabuf2, ast_inet_ntoa(ha->netaddr), sizeof(iabuf2));
if (option_debug)
ast_log(LOG_DEBUG, "##### Testing %s with %s\n", iabuf, iabuf2);
ast_log(LOG_DEBUG,
"##### Testing %s with %s\n",
ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr),
ast_inet_ntoa(iabuf2, sizeof(iabuf2), ha->netaddr));
/* For each rule, if this address and the netmask = the net address
apply the current rule */
if ((sin->sin_addr.s_addr & ha->netmask.s_addr) == ha->netaddr.s_addr)
@@ -248,55 +239,12 @@ int ast_get_ip_or_srv(struct sockaddr_in *sin, const char *value, const char *se
return 0;
}
struct dscp_codepoint {
char *name;
unsigned int space;
};
/* IANA registered DSCP codepoints */
static const struct dscp_codepoint dscp_pool1[] = {
{ "CS0", 0x00 },
{ "CS1", 0x08 },
{ "CS2", 0x10 },
{ "CS3", 0x18 },
{ "CS4", 0x20 },
{ "CS5", 0x28 },
{ "CS6", 0x30 },
{ "CS7", 0x38 },
{ "AF11", 0x0A },
{ "AF12", 0x0C },
{ "AF13", 0x0E },
{ "AF21", 0x12 },
{ "AF22", 0x14 },
{ "AF23", 0x16 },
{ "AF31", 0x1A },
{ "AF32", 0x1C },
{ "AF33", 0x1E },
{ "AF41", 0x22 },
{ "AF42", 0x24 },
{ "AF43", 0x26 },
{ "EF", 0x2E },
};
int ast_str2tos(const char *value, unsigned int *tos)
int ast_str2tos(const char *value, int *tos)
{
int fval;
unsigned int x;
if (sscanf(value, "%i", &fval) == 1) {
*tos = fval & 0xFF;
return 0;
}
for (x = 0; x < sizeof(dscp_pool1) / sizeof(dscp_pool1[0]); x++) {
if (!strcasecmp(value, dscp_pool1[x].name)) {
*tos = dscp_pool1[x].space << 2;
return 0;
}
}
if (!strcasecmp(value, "lowdelay"))
if (sscanf(value, "%30i", &fval) == 1)
*tos = fval & 0xff;
else if (!strcasecmp(value, "lowdelay"))
*tos = IPTOS_LOWDELAY;
else if (!strcasecmp(value, "throughput"))
*tos = IPTOS_THROUGHPUT;
@@ -308,44 +256,16 @@ int ast_str2tos(const char *value, unsigned int *tos)
*tos = 0;
else
return -1;
ast_log(LOG_WARNING, "TOS value %s is deprecated. Please see doc/ip-tos.txt for more information.\n", value);
return 0;
}
const char *ast_tos2str(unsigned int tos)
{
unsigned int x;
switch (tos) {
case 0:
return "none";
case IPTOS_LOWDELAY:
return "lowdelay";
case IPTOS_THROUGHPUT:
return "throughput";
case IPTOS_RELIABILITY:
return "reliability";
case IPTOS_MINCOST:
return "mincost";
default:
for (x = 0; x < sizeof(dscp_pool1) / sizeof(dscp_pool1[0]); x++) {
if (dscp_pool1[x].space == (tos >> 2))
return dscp_pool1[x].name;
}
}
return "unknown";
}
int ast_get_ip(struct sockaddr_in *sin, const char *value)
{
return ast_get_ip_or_srv(sin, value, NULL);
}
/* iface is the interface (e.g. eth0); address is the return value */
int ast_lookup_iface(char *iface, struct in_addr *address)
int ast_lookup_iface(char *iface, struct in_addr *address)
{
int mysock, res = 0;
struct my_ifreq ifreq;

View File

@@ -31,16 +31,12 @@
Issue Date: 26/08/2003
*/
/*! \file
*
* \brief This file contains the code for implementing encryption and decryption
* for AES (Rijndael) for block and key sizes of 16, 24 and 32 bytes. It
* can optionally be replaced by code written in assembler using NASM. For
* further details see the file aesopt.h
*
* \author Dr Brian Gladman <brg@gladman.me.uk>
*/
\brief This file contains the code for implementing encryption and decryption
for AES (Rijndael) for block and key sizes of 16, 24 and 32 bytes. It
can optionally be replaced by code written in assembler using NASM. For
further details see the file aesopt.h
*/
#include "aesopt.h"

View File

@@ -31,15 +31,11 @@
Issue Date: 26/08/2003
*/
/*! \file
*
* \brief This file contains the code for implementing the key schedule for AES
* (Rijndael) for block and key sizes of 16, 24, and 32 bytes. See aesopt.h
* for further details including optimisation.
*
* \author Dr Brian Gladman <brg@gladman.me.uk>
*/
\brief This file contains the code for implementing the key schedule for AES
(Rijndael) for block and key sizes of 16, 24, and 32 bytes. See aesopt.h
for further details including optimisation.
*/
#include "aesopt.h"

View File

@@ -3,7 +3,7 @@
#
# Makefile for AGI-related stuff
#
# Copyright (C) 1999-2006, Digium
# Copyright (C) 1999-2005, Digium
#
# Mark Spencer <markster@digium.com>
#
@@ -11,37 +11,42 @@
# the GNU General Public License
#
.PHONY: clean all uninstall
AGIS=agi-test.agi eagi-test eagi-sphinx-test
AGIS=agi-test.agi eagi-test eagi-sphinx-test jukebox.agi
CFLAGS+=-DNO_AST_MM
LIBS=
ifeq ($(OSARCH),SunOS)
LIBS+=-lsocket -lnsl
LIBS=-lsocket -lnsl ../strcompat.o
endif
include $(ASTTOPDIR)/Makefile.rules
ifeq ($(findstring BSD,${OSARCH}),BSD)
CFLAGS+=-I$(CROSS_COMPILE_TARGET)/usr/local/include -L$(CROSS_COMPILE_TARGET)/usr/local/lib
endif
all: $(AGIS)
strcompat.c: ../main/strcompat.c
@cp $< $@
eagi-test: eagi-test.o strcompat.o
eagi-sphinx-test: eagi-sphinx-test.o
all: depend $(AGIS)
install: all
mkdir -p $(DESTDIR)$(AGI_DIR)
for x in $(AGIS); do $(INSTALL) -m 755 $$x $(DESTDIR)$(AGI_DIR) ; done
uninstall:
for x in $(AGIS); do rm -f $(DESTDIR)$(AGI_DIR)/$$x ; done
eagi-test: eagi-test.o
$(CC) $(CFLAGS) -o eagi-test eagi-test.o $(LIBS)
eagi-sphinx-test: eagi-sphinx-test.o
$(CC) $(CFLAGS) -o eagi-sphinx-test eagi-sphinx-test.o $(LIBS)
clean:
rm -f *.so *.o look eagi-test eagi-sphinx-test
rm -f .*.o.d .*.oo.d
rm -f strcompat.c
rm -f *.so *.o look .depend eagi-test eagi-sphinx-test
ifneq ($(wildcard .*.d),)
include .*.d
%.so : %.o
$(CC) -shared -Xlinker -x -o $@ $<
ifneq ($(wildcard .depend),)
include .depend
endif
depend: .depend
.depend:
../build_tools/mkdep $(CFLAGS) `ls *.c`

View File

@@ -17,10 +17,7 @@
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include "asterisk.h"
#include "asterisk/compat.h"
#include <asterisk/compat.h>
#define AUDIO_FILENO (STDERR_FILENO + 1)

View File

@@ -11,10 +11,7 @@
#include <errno.h>
#include <string.h>
#include <sys/select.h>
#include "asterisk.h"
#include "asterisk/compat.h"
#include <asterisk/compat.h>
#define AUDIO_FILENO (STDERR_FILENO + 1)

View File

@@ -1,488 +0,0 @@
#!/usr/bin/perl
#
# Jukebox 0.2
#
# A music manager for Asterisk.
#
# Copyright (C) 2005-2006, Justin Tunney
#
# Justin Tunney <jesuscyborg@gmail.com>
#
# This program is free software, distributed under the terms of the
# GNU General Public License v2.
#
# Keep it open source pigs
#
# --------------------------------------------------------------------
#
# Uses festival to list off all your MP3 music files over a channel in
# a hierarchical fashion. Put this file in your agi-bin folder which
# is located at: /var/lib/asterisk/agi-bin Be sure to chmod +x it!
#
# Invocation Example:
# exten => 68742,1,Answer()
# exten => 68742,2,agi,jukebox.agi|/home/justin/Music
# exten => 68742,3,Hangup()
#
# exten => 68742,1,Answer()
# exten => 68742,2,agi,jukebox.agi|/home/justin/Music|pm
# exten => 68742,3,Hangup()
#
# Options:
# p - Precache text2wave outputs for every possible filename.
# It is much better to set this option because if a caller
# presses a key during a cache operation, it will be ignored.
# m - Go back to menu after playing song
# g - Do not play the greeting message
#
# Usage Instructions:
# - Press '*' to go up a directory. If you are in the root music
# folder you will be exitted from the script.
# - If you have a really long list of files, you can filter the list
# at any time by pressing '#' and spelling out a few letters you
# expect the files to start with. For example, if you wanted to
# know what extension 'Requiem For A Dream' was, you'd type:
# '#737'. Note, phone keypads don't include Q and Z. Q is 7 and
# Z is 9.
#
# Notes:
# - This AGI script uses the MP3Player command which uses the
# mpg123 Program. Grab yourself a copy of this program by
# going to http://www.mpg123.de/cgi-bin/sitexplorer.cgi?/mpg123/
# Be sure to download mpg123-0.59r.tar.gz because it is known to
# work with Asterisk and hopefully isn't the release with that
# awful security problem. If you're using Fedora Core 3 with
# Alsa like me, make linux-alsa isn't going to work. Do make
# linux-devel and you're peachy keen.
#
# - You won't get nifty STDERR debug messages if you're using a
# remote asterisk shell.
#
# - For some reason, caching certain files will generate the
# error: 'using default diphone ax-ax for y-pau'. Example:
# # echo "Depeche Mode - CUW - 05 - The Meaning of Love" | text2wave -o /var/jukeboxcache/jukeboxcache/Depeche_Mode/Depeche_Mode_-_CUW_-_05_-_The_Meaning_of_Love.mp3.ul -otype ulaw -
# The temporary work around is to just touch these files.
#
# - The background app doesn't like to get more than 2031 chars
# of input.
#
use strict;
$|=1;
# Setup some variables
my %AGI; my $tests = 0; my $fail = 0; my $pass = 0;
my @masterCacheList = ();
my $maxNumber = 10;
while (<STDIN>) {
chomp;
last unless length($_);
if (/^agi_(\w+)\:\s+(.*)$/) {
$AGI{$1} = $2;
}
}
# setup options
my $SHOWGREET = 1;
my $PRECACHE = 0;
my $MENUAFTERSONG = 0;
$PRECACHE = 1 if $ARGV[1] =~ /p/;
$MENUAFTERSONG = 1 if $ARGV[1] =~ /m/;
$SHOWGREET = 0 if $ARGV[1] =~ /g/;
# setup folders
my $MUSIC = $ARGV[0];
$MUSIC = &rmts($MUSIC);
my $FESTIVALCACHE = "/var/jukeboxcache";
if (! -e $FESTIVALCACHE) {
`mkdir -p -m0776 $FESTIVALCACHE`;
}
# make sure we have some essential files
if (! -e "$FESTIVALCACHE/jukebox_greet.ul") {
`echo "Welcome to the Asterisk Jukebox" | text2wave -o $FESTIVALCACHE/jukebox_greet.ul -otype ulaw -`;
}
if (! -e "$FESTIVALCACHE/jukebox_press.ul") {
`echo "Press" | text2wave -o $FESTIVALCACHE/jukebox_press.ul -otype ulaw -`;
}
if (! -e "$FESTIVALCACHE/jukebox_for.ul") {
`echo "For" | text2wave -o $FESTIVALCACHE/jukebox_for.ul -otype ulaw -`;
}
if (! -e "$FESTIVALCACHE/jukebox_toplay.ul") {
`echo "To play" | text2wave -o $FESTIVALCACHE/jukebox_toplay.ul -otype ulaw -`;
}
if (! -e "$FESTIVALCACHE/jukebox_nonefound.ul") {
`echo "There were no music files found in this folder" | text2wave -o $FESTIVALCACHE/jukebox_nonefound.ul -otype ulaw -`;
}
if (! -e "$FESTIVALCACHE/jukebox_percent.ul") {
`echo "Percent" | text2wave -o $FESTIVALCACHE/jukebox_percent.ul -otype ulaw -`;
}
if (! -e "$FESTIVALCACHE/jukebox_generate.ul") {
`echo "Please wait while Astrisk Jukebox cashes the files of your music collection" | text2wave -o $FESTIVALCACHE/jukebox_generate.ul -otype ulaw -`;
}
if (! -e "$FESTIVALCACHE/jukebox_invalid.ul") {
`echo "You have entered an invalid selection" | text2wave -o $FESTIVALCACHE/jukebox_invalid.ul -otype ulaw -`;
}
if (! -e "$FESTIVALCACHE/jukebox_thankyou.ul") {
`echo "Thank you for using Astrisk Jukebox, Goodbye" | text2wave -o $FESTIVALCACHE/jukebox_thankyou.ul -otype ulaw -`;
}
# greet the user
if ($SHOWGREET) {
print "EXEC Playback \"$FESTIVALCACHE/jukebox_greet\"\n";
my $result = <STDIN>; &check_result($result);
}
# go through the directories
music_dir_cache() if $PRECACHE;
music_dir_menu('/');
exit 0;
##########################################################################
sub music_dir_menu {
my $dir = shift;
# generate a list of mp3's and directories and assign each one it's
# own selection number. Then make sure that we've got a sound clip
# for the file name
if (!opendir(THEDIR, rmts($MUSIC.$dir))) {
print STDERR "Failed to open music directory: $dir\n";
exit 1;
}
my @files = sort readdir THEDIR;
my $cnt = 1;
my @masterBgList = ();
foreach my $file (@files) {
chomp($file);
if ($file ne '.' && $file ne '..' && $file ne 'festivalcache') { # ignore special files
my $real_version = &rmts($MUSIC.$dir).'/'.$file;
my $cache_version = &rmts($FESTIVALCACHE.$dir).'/'.$file.'.ul';
my $cache_version2 = &rmts($FESTIVALCACHE.$dir).'/'.$file;
my $cache_version_esc = &clean_file($cache_version);
my $cache_version2_esc = &clean_file($cache_version2);
if (-d $real_version) {
# 0:id 1:type 2:text2wav-file 3:for-filtering 4:the-directory 5:text2wav echo
push(@masterBgList, [$cnt++, 1, $cache_version2_esc, &remove_special_chars($file), $file, "for the $file folder"]);
} elsif ($real_version =~ /\.mp3$/) {
# 0:id 1:type 2:text2wav-file 3:for-filtering 4:the-mp3
push(@masterBgList, [$cnt++, 2, $cache_version2_esc, &remove_special_chars($file), $real_version, "to play $file"]);
}
}
}
close(THEDIR);
my @filterList = @masterBgList;
if (@filterList == 0) {
print "EXEC Playback \"$FESTIVALCACHE/jukebox_nonefound\"\n";
my $result = <STDIN>; &check_result($result);
return 0;
}
for (;;) {
MYCONTINUE:
# play bg selections and figure out their selection
my $digit = '';
my $digitstr = '';
for (my $n=0; $n<@filterList; $n++) {
&cache_speech(&remove_file_extension($filterList[$n][5]), "$filterList[$n][2].ul") if ! -e "$filterList[$n][2].ul";
&cache_speech("Press $filterList[$n][0]", "$FESTIVALCACHE/jukebox_$filterList[$n][0].ul") if ! -e "$FESTIVALCACHE/jukebox_$filterList[$n][0].ul";
print "EXEC Background \"$filterList[$n][2]&$FESTIVALCACHE/jukebox_$filterList[$n][0]\"\n";
my $result = <STDIN>;
$digit = &check_result($result);
if ($digit > 0) {
$digitstr .= chr($digit);
last;
}
}
for (;;) {
print "WAIT FOR DIGIT 3000\n";
my $result = <STDIN>;
$digit = &check_result($result);
last if $digit <= 0;
$digitstr .= chr($digit);
}
# see if it's a valid selection
print STDERR "Digits Entered: '$digitstr'\n";
exit 0 if $digitstr eq '';
my $found = 0;
goto EXITSUB if $digitstr =~ /\*/;
# filter the list
if ($digitstr =~ /^\#\d+/) {
my $regexp = '';
for (my $n=1; $n<length($digitstr); $n++) {
my $d = substr($digitstr, $n, 1);
if ($d == 2) {
$regexp .= '[abc]';
} elsif ($d == 3) {
$regexp .= '[def]';
} elsif ($d == 4) {
$regexp .= '[ghi]';
} elsif ($d == 5) {
$regexp .= '[jkl]';
} elsif ($d == 6) {
$regexp .= '[mno]';
} elsif ($d == 7) {
$regexp .= '[pqrs]';
} elsif ($d == 8) {
$regexp .= '[tuv]';
} elsif ($d == 9) {
$regexp .= '[wxyz]';
}
}
@filterList = ();
for (my $n=1; $n<@masterBgList; $n++) {
push(@filterList, $masterBgList[$n]) if $masterBgList[$n][3] =~ /^$regexp/i;
}
goto MYCONTINUE;
}
for (my $n=0; $n<@masterBgList; $n++) {
if ($digitstr == $masterBgList[$n][0]) {
if ($masterBgList[$n][1] == 1) { # a folder
&music_dir_menu(rmts($dir).'/'.$masterBgList[$n][4]);
@filterList = @masterBgList;
goto MYCONTINUE;
} elsif ($masterBgList[$n][1] == 2) { # a file
# because *'s scripting language is crunk and won't allow us to escape
# funny filenames, we need to create a temporary symlink to the mp3
# file
my $mp3 = &escape_file($masterBgList[$n][4]);
my $link = `mktemp`;
chomp($link);
$link .= '.mp3';
print STDERR "ln -s $mp3 $link\n";
my $cmdr = `ln -s $mp3 $link`;
chomp($cmdr);
print "Failed to create symlink to mp3: $cmdr\n" if $cmdr ne '';
print "EXEC MP3Player \"$link\"\n";
my $result = <STDIN>; &check_result($result);
`rm $link`;
if (!$MENUAFTERSONG) {
print "EXEC Playback \"$FESTIVALCACHE/jukebox_thankyou\"\n";
my $result = <STDIN>; &check_result($result);
exit 0;
} else {
goto MYCONTINUE;
}
}
}
}
print "EXEC Playback \"$FESTIVALCACHE/jukebox_invalid\"\n";
my $result = <STDIN>; &check_result($result);
}
EXITSUB:
}
sub cache_speech {
my $speech = shift;
my $file = shift;
my $theDir = extract_file_dir($file);
`mkdir -p -m0776 $theDir`;
print STDERR "echo \"$speech\" | text2wave -o $file -otype ulaw -\n";
my $cmdr = `echo "$speech" | text2wave -o $file -otype ulaw -`;
chomp($cmdr);
if ($cmdr =~ /using default diphone/) {
# temporary bug work around....
`touch $file`;
} elsif ($cmdr ne '') {
print STDERR "Command Failed\n";
exit 1;
}
}
sub music_dir_cache {
# generate list of text2speech files to generate
if (!music_dir_cache_genlist('/')) {
print STDERR "Horrible Dreadful Error: No Music Found in $MUSIC!";
exit 1;
}
# add to list how many 'number' files we have to generate. We can't
# use the SayNumber app in Asterisk because we want to chain all
# talking in one Background command. We also want a consistent
# voice...
for (my $n=1; $n<=$maxNumber; $n++) {
push(@masterCacheList, [3, "Press $n", "$FESTIVALCACHE/jukebox_$n.ul"]) if ! -e "$FESTIVALCACHE/jukebox_$n.ul";
}
# now generate all these darn text2speech files
if (@masterCacheList > 5) {
print "EXEC Playback \"$FESTIVALCACHE/jukebox_generate\"\n";
my $result = <STDIN>; &check_result($result);
}
my $theTime = time();
for (my $n=0; $n < @masterCacheList; $n++) {
my $cmdr = '';
if ($masterCacheList[$n][0] == 1) { # directory
&cache_speech("for folder $masterCacheList[$n][1]", $masterCacheList[$n][2]);
} elsif ($masterCacheList[$n][0] == 2) { # file
&cache_speech("to play $masterCacheList[$n][1]", $masterCacheList[$n][2]);
} elsif ($masterCacheList[$n][0] == 3) { # number
&cache_speech($masterCacheList[$n][1], $masterCacheList[$n][2]);
}
if (time() >= $theTime + 30) {
my $percent = int($n / @masterCacheList * 100);
print "SAY NUMBER $percent \"\"\n";
my $result = <STDIN>; &check_result($result);
print "EXEC Playback \"$FESTIVALCACHE/jukebox_percent\"\n";
my $result = <STDIN>; &check_result($result);
$theTime = time();
}
}
}
# this function will fill the @masterCacheList of all the files that
# need to have text2speeced ulaw files of their names generated
sub music_dir_cache_genlist {
my $dir = shift;
if (!opendir(THEDIR, rmts($MUSIC.$dir))) {
print STDERR "Failed to open music directory: $dir\n";
exit 1;
}
my @files = sort readdir THEDIR;
my $foundFiles = 0;
my $tmpMaxNum = 0;
foreach my $file (@files) {
chomp;
if ($file ne '.' && $file ne '..' && $file ne 'festivalcache') { # ignore special files
my $real_version = &rmts($MUSIC.$dir).'/'.$file;
my $cache_version = &rmts($FESTIVALCACHE.$dir).'/'.$file.'.ul';
my $cache_version2 = &rmts($FESTIVALCACHE.$dir).'/'.$file;
my $cache_version_esc = &clean_file($cache_version);
my $cache_version2_esc = &clean_file($cache_version2);
if (-d $real_version) {
if (music_dir_cache_genlist(rmts($dir).'/'.$file)) {
$tmpMaxNum++;
$maxNumber = $tmpMaxNum if $tmpMaxNum > $maxNumber;
push(@masterCacheList, [1, $file, $cache_version_esc]) if ! -e $cache_version_esc;
$foundFiles = 1;
}
} elsif ($real_version =~ /\.mp3$/) {
$tmpMaxNum++;
$maxNumber = $tmpMaxNum if $tmpMaxNum > $maxNumber;
push(@masterCacheList, [2, &remove_file_extension($file), $cache_version_esc]) if ! -e $cache_version_esc;
$foundFiles = 1;
}
}
}
close(THEDIR);
return $foundFiles;
}
sub rmts { # remove trailing slash
my $hog = shift;
$hog =~ s/\/$//;
return $hog;
}
sub extract_file_name {
my $hog = shift;
$hog =~ /\/?([^\/]+)$/;
return $1;
}
sub extract_file_dir {
my $hog = shift;
return $hog if ! ($hog =~ /\//);
$hog =~ /(.*)\/[^\/]*$/;
return $1;
}
sub remove_file_extension {
my $hog = shift;
return $hog if ! ($hog =~ /\./);
$hog =~ /(.*)\.[^.]*$/;
return $1;
}
sub clean_file {
my $hog = shift;
$hog =~ s/\\/_/g;
$hog =~ s/ /_/g;
$hog =~ s/\t/_/g;
$hog =~ s/\'/_/g;
$hog =~ s/\"/_/g;
$hog =~ s/\(/_/g;
$hog =~ s/\)/_/g;
$hog =~ s/&/_/g;
$hog =~ s/\[/_/g;
$hog =~ s/\]/_/g;
$hog =~ s/\$/_/g;
$hog =~ s/\|/_/g;
$hog =~ s/\^/_/g;
return $hog;
}
sub remove_special_chars {
my $hog = shift;
$hog =~ s/\\//g;
$hog =~ s/ //g;
$hog =~ s/\t//g;
$hog =~ s/\'//g;
$hog =~ s/\"//g;
$hog =~ s/\(//g;
$hog =~ s/\)//g;
$hog =~ s/&//g;
$hog =~ s/\[//g;
$hog =~ s/\]//g;
$hog =~ s/\$//g;
$hog =~ s/\|//g;
$hog =~ s/\^//g;
return $hog;
}
sub escape_file {
my $hog = shift;
$hog =~ s/\\/\\\\/g;
$hog =~ s/ /\\ /g;
$hog =~ s/\t/\\\t/g;
$hog =~ s/\'/\\\'/g;
$hog =~ s/\"/\\\"/g;
$hog =~ s/\(/\\\(/g;
$hog =~ s/\)/\\\)/g;
$hog =~ s/&/\\&/g;
$hog =~ s/\[/\\\[/g;
$hog =~ s/\]/\\\]/g;
$hog =~ s/\$/\\\$/g;
$hog =~ s/\|/\\\|/g;
$hog =~ s/\^/\\\^/g;
return $hog;
}
sub check_result {
my ($res) = @_;
my $retval;
$tests++;
chomp $res;
if ($res =~ /^200/) {
$res =~ /result=(-?\d+)/;
if (!length($1)) {
print STDERR "FAIL ($res)\n";
$fail++;
exit 1;
} else {
print STDERR "PASS ($1)\n";
return $1;
}
} else {
print STDERR "FAIL (unexpected result '$res')\n";
exit 1;
}
}

View File

@@ -19,8 +19,7 @@
/*! \file
*
* \brief u-Law to Signed linear conversion
*
* \author Mark Spencer <markster@digium.com>
*
*/
#include "asterisk.h"

File diff suppressed because it is too large Load Diff

View File

@@ -3,39 +3,128 @@
#
# Makefile for PBX applications
#
# Copyright (C) 1999-2006, Digium, Inc.
# Copyright (C) 1999-2005, Digium
#
# Mark Spencer <markster@digium.com>
#
# This program is free software, distributed under the terms of
# the GNU General Public License
#
-include ../menuselect.makeopts ../menuselect.makedeps
APPS=app_dial.so app_playback.so app_voicemail.so app_directory.so app_mp3.so\
app_system.so app_echo.so app_record.so app_image.so app_url.so app_disa.so \
app_adsiprog.so app_getcpeid.so app_milliwatt.so \
app_zapateller.so app_setcallerid.so app_festival.so \
app_queue.so app_senddtmf.so app_parkandannounce.so \
app_setcidname.so app_lookupcidname.so app_macro.so \
app_authenticate.so app_softhangup.so app_lookupblacklist.so \
app_waitforring.so app_privacy.so app_db.so app_chanisavail.so \
app_enumlookup.so app_transfer.so app_setcidnum.so app_cdr.so \
app_hasnewvoicemail.so app_sayunixtime.so app_cut.so app_read.so \
app_setcdruserfield.so app_random.so app_ices.so app_eval.so \
app_nbscat.so app_sendtext.so app_exec.so \
app_groupcount.so app_txtcidname.so app_controlplayback.so \
app_talkdetect.so app_alarmreceiver.so app_userevent.so app_verbose.so \
app_test.so app_forkcdr.so app_math.so app_realtime.so \
app_dumpchan.so app_waitforsilence.so app_while.so app_setrdnis.so \
app_md5.so app_readfile.so app_chanspy.so app_settransfercapability.so \
app_dictate.so app_externalivr.so app_directed_pickup.so \
app_mixmonitor.so app_stack.so
C_MODS:=$(filter-out $(MENUSELECT_APPS),$(patsubst %.c,%,$(wildcard app_*.c)))
CC_MODS:=$(filter-out $(MENUSELECT_APPS),$(patsubst %.cc,%,$(wildcard app_*.cc)))
#
# Obsolete things...
#
#APPS+=app_sql_postgres.so
#APPS+=app_sql_odbc.so
LOADABLE_MODS:=$(C_MODS) $(CC_MODS)
#
# Experimental things
#
#APPS+=app_ivrdemo.so
#APPS+=app_skel.so
#APPS+=app_rpt.so
ifneq ($(findstring apps,$(MENUSELECT_EMBED)),)
EMBEDDED_MODS:=$(LOADABLE_MODS)
LOADABLE_MODS:=
ifndef WITHOUT_ZAPTEL
ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/include/linux/zaptel.h)$(wildcard $(CROSS_COMPILE_TARGET)/usr/local/include/zaptel.h),)
APPS+=app_zapras.so app_meetme.so app_flash.so app_zapbarge.so app_zapscan.so app_page.so
endif
endif # WITHOUT_ZAPTEL
ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/local/include/osp/osp.h $(CROSS_COMPILE_TARGET)/usr/include/osp/osp.h),)
APPS+=app_osplookup.so
endif
MENUSELECT_OPTS_app_directory:=$(MENUSELECT_OPTS_app_voicemail)
ifneq ($(findstring ODBC_STORAGE,$(MENUSELECT_OPTS_app_voicemail)),)
MENUSELECT_DEPENDS_app_voicemail+=$(MENUSELECT_DEPENDS_ODBC_STORAGE)
MENUSELECT_DEPENDS_app_directory+=$(MENUSELECT_DEPENDS_ODBC_STORAGE)
ifeq ($(findstring BSD,${OSARCH}),BSD)
CFLAGS+=-I$(CROSS_COMPILE_TARGET)/usr/local/include -L$(CROSS_COMPILE_TARGET)/usr/local/lib
endif
ifneq ($(findstring IMAP_STORAGE,$(MENUSELECT_OPTS_app_voicemail)),)
MENUSELECT_DEPENDS_app_voicemail+=$(MENUSELECT_DEPENDS_IMAP_STORAGE)
MENUSELECT_DEPENDS_app_directory+=$(MENUSELECT_DEPENDS_IMAP_STORAGE)
CURLLIBS=$(shell $(CROSS_COMPILE_BIN)curl-config --libs)
ifneq ($(shell if [[ 0x`$(CROSS_COMPILE_BIN)curl-config --vernum` -ge 0x70907 ]]; then echo "OK" ; fi),)
ifneq (${CURLLIBS},)
APPS+=app_curl.so
endif
endif
ifeq (${OSARCH},CYGWIN)
CYGSOLINK=-Wl,--out-implib=lib$@.a -Wl,--export-all-symbols
CYGSOLIB=-L.. -L. -L../res -lasterisk.dll -lres_features.so -lres_adsi.so -lres_monitor.so
else
CFLAGS+=-fPIC
APPS+=app_sms.so
endif
#
# 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
all: $(APPS)
clean:
rm -f *.so *.o .depend
%.so : %.o
$(CC) $(SOLINK) -o $@ ${CYGSOLINK} $< ${CYGSOLIB}
app_rpt.so : app_rpt.o
$(CC) $(SOLINK) -o $@ ${CYGSOLINK} $< ${CYGSOLIB} -ltonezone
install: all
for x in $(APPS); do $(INSTALL) -m 755 $$x $(DESTDIR)$(MODULES_DIR) ; done
rm -f $(DESTDIR)$(MODULES_DIR)/app_datetime.so
rm -f $(DESTDIR)$(MODULES_DIR)/app_qcall.so
app_curl.so: app_curl.o
$(CC) $(SOLINK) -o $@ ${CYGSOLINK} $< ${CYGSOLIB} $(CURLLIBS)
app_sql_postgres.o: app_sql_postgres.c
$(CC) -pipe -I$(CROSS_COMPILE_TARGET)/usr/local/pgsql/include -I$(CROSS_COMPILE_TARGET)/usr/include/postgresql $(CFLAGS) -c -o app_sql_postgres.o app_sql_postgres.c
app_sql_postgres.so: app_sql_postgres.o
$(CC) $(SOLINK) -o $@ ${CYGSOLINK} $< ${CYGSOLIB} -L/usr/local/pgsql/lib -lpq
app_sql_odbc.so: app_sql_odbc.o
$(CC) $(SOLINK) -o $@ ${CYGSOLINK} $< ${CYGSOLIB} -lodbc
ifeq (SunOS,$(shell uname))
MENUSELECT_DEPENDS_app_chanspy+=RT
RT_LIB=-lrt
app_chanspy.so: app_chanspy.o
$(CC) $(SOLINK) -o $@ $< -lrt
endif
all: _all
include $(ASTTOPDIR)/Makefile.moddir_rules
ifneq ($(wildcard .depend),)
include .depend
endif
depend: .depend
.depend:
../build_tools/mkdep $(CFLAGS) `ls *.c`
env:
env

View File

@@ -17,22 +17,11 @@
*/
/*! \file
*
* \brief Program Asterisk ADSI Scripts into phone
*
* \author Mark Spencer <markster@digium.com>
*
* \ingroup applications
*/
/*** MODULEINFO
<depend>res_adsi</depend>
***/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <sys/types.h>
#include <netinet/in.h>
#include <stdlib.h>
@@ -43,6 +32,10 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <stdio.h>
#include <errno.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/file.h"
#include "asterisk/logger.h"
#include "asterisk/channel.h"
@@ -53,6 +46,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/utils.h"
#include "asterisk/lock.h"
static char *tdesc = "Asterisk ADSI Programming Application";
static char *app = "ADSIProg";
static char *synopsis = "Load Asterisk ADSI Scripts into phone";
@@ -63,6 +58,10 @@ static char *descrip =
" ADSIProg(script): This application programs an ADSI Phone with the given\n"
"script. If nothing is specified, the default script (asterisk.adsi) is used.\n";
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
struct adsi_event {
int id;
char *name;
@@ -195,7 +194,7 @@ static int process_token(void *out, char *src, int maxlen, int argtype)
if (!(argtype & ARG_NUMBER))
return -1;
/* Octal value */
if (sscanf(src, "%o", (int *)out) != 1)
if (sscanf(src, "%30o", (int *)out) != 1)
return -1;
if (argtype & ARG_STRING) {
/* Convert */
@@ -205,7 +204,7 @@ static int process_token(void *out, char *src, int maxlen, int argtype)
if (!(argtype & ARG_NUMBER))
return -1;
/* Hex value */
if (sscanf(src + 2, "%x", (unsigned int *)out) != 1)
if (sscanf(src + 2, "%30x", (unsigned int *)out) != 1)
return -1;
if (argtype & ARG_STRING) {
/* Convert */
@@ -215,7 +214,7 @@ static int process_token(void *out, char *src, int maxlen, int argtype)
if (!(argtype & ARG_NUMBER))
return -1;
/* Hex value */
if (sscanf(src, "%d", (int *)out) != 1)
if (sscanf(src, "%30d", (int *)out) != 1)
return -1;
if (argtype & ARG_STRING) {
/* Convert */
@@ -1357,10 +1356,13 @@ static struct adsi_script *compile_script(char *script)
ast_log(LOG_WARNING, "Can't open file '%s'\n", fn);
return NULL;
}
if (!(scr = ast_calloc(1, sizeof(*scr)))) {
scr = malloc(sizeof(struct adsi_script));
if (!scr) {
fclose(f);
ast_log(LOG_WARNING, "Out of memory loading script '%s'\n", fn);
return NULL;
}
memset(scr, 0, sizeof(struct adsi_script));
/* Create "main" as first subroutine */
getsubbyname(scr, "main", NULL, 0);
while(!feof(f)) {
@@ -1442,11 +1444,11 @@ static int adsi_prog(struct ast_channel *chan, char *script)
return -1;
/* Start an empty ADSI Session */
if (ast_adsi_load_session(chan, NULL, 0, 1) < 1)
if (adsi_load_session(chan, NULL, 0, 1) < 1)
return -1;
/* Now begin the download attempt */
if (ast_adsi_begin_download(chan, scr->desc, scr->fdn, scr->sec, scr->ver)) {
if (adsi_begin_download(chan, scr->desc, scr->fdn, scr->sec, scr->ver)) {
/* User rejected us for some reason */
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "User rejected download attempt\n");
@@ -1460,7 +1462,7 @@ static int adsi_prog(struct ast_channel *chan, char *script)
for (x=0;x<scr->numkeys;x++) {
if (bytes + scr->keys[x].retstrlen > 253) {
/* Send what we've collected so far */
if (ast_adsi_transmit_message(chan, buf, bytes, ADSI_MSG_DOWNLOAD)) {
if (adsi_transmit_message(chan, buf, bytes, ADSI_MSG_DOWNLOAD)) {
ast_log(LOG_WARNING, "Unable to send chunk ending at %d\n", x);
return -1;
}
@@ -1473,7 +1475,7 @@ static int adsi_prog(struct ast_channel *chan, char *script)
#endif
}
if (bytes) {
if (ast_adsi_transmit_message(chan, buf, bytes, ADSI_MSG_DOWNLOAD)) {
if (adsi_transmit_message(chan, buf, bytes, ADSI_MSG_DOWNLOAD)) {
ast_log(LOG_WARNING, "Unable to send chunk ending at %d\n", x);
return -1;
}
@@ -1484,7 +1486,7 @@ static int adsi_prog(struct ast_channel *chan, char *script)
for (x=0;x<scr->numdisplays;x++) {
if (bytes + scr->displays[x].datalen > 253) {
/* Send what we've collected so far */
if (ast_adsi_transmit_message(chan, buf, bytes, ADSI_MSG_DOWNLOAD)) {
if (adsi_transmit_message(chan, buf, bytes, ADSI_MSG_DOWNLOAD)) {
ast_log(LOG_WARNING, "Unable to send chunk ending at %d\n", x);
return -1;
}
@@ -1497,7 +1499,7 @@ static int adsi_prog(struct ast_channel *chan, char *script)
#endif
}
if (bytes) {
if (ast_adsi_transmit_message(chan, buf, bytes, ADSI_MSG_DOWNLOAD)) {
if (adsi_transmit_message(chan, buf, bytes, ADSI_MSG_DOWNLOAD)) {
ast_log(LOG_WARNING, "Unable to send chunk ending at %d\n", x);
return -1;
}
@@ -1508,7 +1510,7 @@ static int adsi_prog(struct ast_channel *chan, char *script)
for (x=0;x<scr->numsubs;x++) {
if (bytes + scr->subs[x].datalen > 253) {
/* Send what we've collected so far */
if (ast_adsi_transmit_message(chan, buf, bytes, ADSI_MSG_DOWNLOAD)) {
if (adsi_transmit_message(chan, buf, bytes, ADSI_MSG_DOWNLOAD)) {
ast_log(LOG_WARNING, "Unable to send chunk ending at %d\n", x);
return -1;
}
@@ -1521,7 +1523,7 @@ static int adsi_prog(struct ast_channel *chan, char *script)
#endif
}
if (bytes) {
if (ast_adsi_transmit_message(chan, buf, bytes, ADSI_MSG_DOWNLOAD)) {
if (adsi_transmit_message(chan, buf, bytes, ADSI_MSG_DOWNLOAD)) {
ast_log(LOG_WARNING, "Unable to send chunk ending at %d\n", x);
return -1;
}
@@ -1529,11 +1531,11 @@ static int adsi_prog(struct ast_channel *chan, char *script)
bytes = 0;
bytes += ast_adsi_display(buf, ADSI_INFO_PAGE, 1, ADSI_JUST_LEFT, 0, "Download complete.", "");
bytes += ast_adsi_set_line(buf, ADSI_INFO_PAGE, 1);
if (ast_adsi_transmit_message(chan, buf, bytes, ADSI_MSG_DISPLAY) < 0)
bytes += adsi_display(buf, ADSI_INFO_PAGE, 1, ADSI_JUST_LEFT, 0, "Download complete.", "");
bytes += adsi_set_line(buf, ADSI_INFO_PAGE, 1);
if (adsi_transmit_message(chan, buf, bytes, ADSI_MSG_DISPLAY) < 0)
return -1;
if (ast_adsi_end_download(chan)) {
if (adsi_end_download(chan)) {
/* Download failed for some reason */
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "Download attempt failed\n");
@@ -1542,21 +1544,21 @@ static int adsi_prog(struct ast_channel *chan, char *script)
return -1;
}
free(scr);
ast_adsi_unload_session(chan);
adsi_unload_session(chan);
return 0;
}
static int adsi_exec(struct ast_channel *chan, void *data)
{
int res=0;
struct ast_module_user *u;
struct localuser *u;
u = ast_module_user_add(chan);
LOCAL_USER_ADD(u);
if (ast_strlen_zero(data))
data = "asterisk.adsi";
if (!ast_adsi_available(chan)) {
if (!adsi_available(chan)) {
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "ADSI Unavailable on CPE. Not bothering to try.\n");
} else {
@@ -1565,26 +1567,40 @@ static int adsi_exec(struct ast_channel *chan, void *data)
res = adsi_prog(chan, data);
}
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return res;
}
static int unload_module(void)
int unload_module(void)
{
int res;
ast_module_user_hangup_all();
res = ast_unregister_application(app);
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int load_module(void)
{
return ast_register_application(app, adsi_exec, synopsis, descrip);
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Asterisk ADSI Programming Application");
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

View File

@@ -22,17 +22,13 @@
*
* *** WARNING *** WARNING *** WARNING *** WARNING *** WARNING *** WARNING *** WARNING *** WARNING ***
*
* Use at your own risk. Please consult the GNU GPL license document included with Asterisk. *
* Use at your own risk. Please consult the GNU GPL license document included with Asterisk details. *
*
* *** WARNING *** WARNING *** WARNING *** WARNING *** WARNING *** WARNING *** WARNING *** WARNING ***
*
* \ingroup applications
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
@@ -41,6 +37,10 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <unistd.h>
#include <sys/time.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/lock.h"
#include "asterisk/file.h"
#include "asterisk/logger.h"
@@ -56,7 +56,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/localtime.h"
#include "asterisk/callerid.h"
#include "asterisk/astdb.h"
#include "asterisk/utils.h"
#define ALMRCV_CONFIG "alarmreceiver.conf"
#define ADEMCO_CONTACT_ID "ADEMCO_CONTACT_ID"
@@ -68,9 +67,11 @@ struct event_node{
typedef struct event_node event_node_t;
static char *tdesc = "Alarm Receiver for Asterisk";
static char *app = "AlarmReceiver";
static char *synopsis = "Provide support for receiving alarm reports from a burglar or fire alarm panel";
static char *synopsis = "Provide support for receving alarm reports from a burglar or fire alarm panel";
static char *descrip =
" AlarmReceiver(): Only 1 signalling format is supported at this time: Ademco\n"
"Contact ID. This application should be called whenever there is an alarm\n"
@@ -93,10 +94,18 @@ static char event_app[128] = {'\0'};
static char db_family[128] = {'\0'};
static char time_stamp_format[128] = {"%a %b %d, %Y @ %H:%M:%S %Z"};
/* Misc variables */
static char event_file[14] = "/event-XXXXXX";
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
/*
* Attempt to access a database variable and increment it,
* provided that the user defined db-family in alarmreceiver.conf
@@ -125,7 +134,7 @@ static void database_increment( char *key )
return;
}
sscanf(value, "%u", &v);
sscanf(value, "%30u", &v);
v++;
if(option_verbose >= 4)
@@ -549,9 +558,9 @@ static int receive_ademco_contact_id( struct ast_channel *chan, void *data, int
checksum = checksum % 15;
if (checksum) {
if(checksum){
database_increment("checksum-errors");
if (option_verbose >= 2)
if(option_verbose >= 2)
ast_verbose(VERBOSE_PREFIX_2 "AlarmReceiver: Nonzero checksum\n");
ast_log(LOG_DEBUG, "AlarmReceiver: Nonzero checksum\n");
continue;
@@ -571,11 +580,17 @@ static int receive_ademco_contact_id( struct ast_channel *chan, void *data, int
events_received++;
/* Queue the Event */
if (!(enew = ast_calloc(1, sizeof(*enew)))) {
/* Queue the Event */
if((enew = malloc(sizeof(event_node_t))) == NULL){
if(option_verbose >= 1)
ast_verbose(VERBOSE_PREFIX_1 "AlarmReceiver: Failed to allocate memory\n");
ast_log(LOG_WARNING, "AlarmReceiver Failed to allocate memory\n");
res = -1;
break;
break;
}
memset(enew, 0, sizeof(event_node_t));
enew->next = NULL;
ast_copy_string(enew->data, event, sizeof(enew->data));
@@ -626,13 +641,13 @@ static int receive_ademco_contact_id( struct ast_channel *chan, void *data, int
static int alarmreceiver_exec(struct ast_channel *chan, void *data)
{
int res = 0;
struct ast_module_user *u;
struct localuser *u;
event_node_t *elp, *efree;
char signalling_type[64] = "";
event_node_t *event_head = NULL;
u = ast_module_user_add(chan);
LOCAL_USER_ADD(u);
/* Set write and read formats to ULAW */
@@ -641,13 +656,13 @@ static int alarmreceiver_exec(struct ast_channel *chan, void *data)
if (ast_set_write_format(chan,AST_FORMAT_ULAW)){
ast_log(LOG_WARNING, "AlarmReceiver: Unable to set write format to Mu-law on %s\n",chan->name);
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return -1;
}
if (ast_set_read_format(chan,AST_FORMAT_ULAW)){
ast_log(LOG_WARNING, "AlarmReceiver: Unable to set read format to Mu-law on %s\n",chan->name);
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return -1;
}
@@ -666,7 +681,7 @@ static int alarmreceiver_exec(struct ast_channel *chan, void *data)
res = ast_answer(chan);
if (res) {
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return -1;
}
}
@@ -721,7 +736,7 @@ static int alarmreceiver_exec(struct ast_channel *chan, void *data)
}
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return 0;
}
@@ -733,7 +748,7 @@ static int alarmreceiver_exec(struct ast_channel *chan, void *data)
static int load_config(void)
{
struct ast_config *cfg;
const char *p;
char *p;
/* Read in the config file */
@@ -743,7 +758,6 @@ static int load_config(void)
if(option_verbose >= 4)
ast_verbose(VERBOSE_PREFIX_4 "AlarmReceiver: No config file\n");
return 0;
}
else{
@@ -810,7 +824,7 @@ static int load_config(void)
}
ast_config_destroy(cfg);
}
return 1;
return 0;
}
@@ -819,23 +833,36 @@ static int load_config(void)
*/
static int unload_module(void)
int unload_module(void)
{
int res;
res = ast_unregister_application(app);
ast_module_user_hangup_all();
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int load_module(void)
{
if(load_config())
return ast_register_application(app, alarmreceiver_exec, synopsis, descrip);
else
return AST_MODULE_LOAD_DECLINE;
load_config();
return ast_register_application(app, alarmreceiver_exec, synopsis, descrip);
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Alarm Receiver for Asterisk");
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

View File

@@ -1,398 +0,0 @@
/*
* Asterisk -- An open source telephony toolkit.
*
* Copyright (C) 2003 - 2006, Aheeva Technology.
*
* Claude Klimos (claude.klimos@aheeva.com)
*
* See http://www.asterisk.org for more information about
* the Asterisk project. Please do not directly contact
* any of the maintainers of this project for assistance;
* the project provides a web site, mailing lists and IRC
* channels for your use.
*
* This program is free software, distributed under the terms of
* the GNU General Public License Version 2. See the LICENSE file
* at the top of the source tree.
*
* A license has been granted to Digium (via disclaimer) for the use of
* this code.
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <stdio.h>
#include <stdlib.h>
#include "asterisk/module.h"
#include "asterisk/lock.h"
#include "asterisk/options.h"
#include "asterisk/channel.h"
#include "asterisk/dsp.h"
#include "asterisk/pbx.h"
#include "asterisk/config.h"
#include "asterisk/app.h"
static char *app = "AMD";
static char *synopsis = "Attempts to detect answering machines";
static char *descrip =
" AMD([initialSilence][|greeting][|afterGreetingSilence][|totalAnalysisTime]\n"
" [|minimumWordLength][|betweenWordsSilence][|maximumNumberOfWords]\n"
" [|silenceThreshold])\n"
" This application attempts to detect answering machines at the beginning\n"
" of outbound calls. Simply call this application after the call\n"
" has been answered (outbound only, of course).\n"
" When loaded, AMD reads amd.conf and uses the parameters specified as\n"
" default values. Those default values get overwritten when calling AMD\n"
" with parameters.\n"
"- 'initialSilence' is the maximum silence duration before the greeting. If\n"
" exceeded then MACHINE.\n"
"- 'greeting' is the maximum length of a greeting. If exceeded then MACHINE.\n"
"- 'afterGreetingSilence' is the silence after detecting a greeting.\n"
" If exceeded then HUMAN.\n"
"- 'totalAnalysisTime' is the maximum time allowed for the algorithm to decide\n"
" on a HUMAN or MACHINE.\n"
"- 'minimumWordLength'is the minimum duration of Voice to considered as a word.\n"
"- 'betweenWordsSilence' is the minimum duration of silence after a word to \n"
" consider the audio that follows as a new word.\n"
"- 'maximumNumberOfWords'is the maximum number of words in the greeting. \n"
" If exceeded then MACHINE.\n"
"- 'silenceThreshold' is the silence threshold.\n"
"This application sets the following channel variable upon completion:\n"
" AMDSTATUS - This is the status of the answering machine detection.\n"
" Possible values are:\n"
" MACHINE | HUMAN | NOTSURE | HANGUP\n"
" AMDCAUSE - Indicates the cause that led to the conclusion.\n"
" Possible values are:\n"
" TOOLONG-<%d total_time>\n"
" INITIALSILENCE-<%d silenceDuration>-<%d initialSilence>\n"
" HUMAN-<%d silenceDuration>-<%d afterGreetingSilence>\n"
" MAXWORDS-<%d wordsCount>-<%d maximumNumberOfWords>\n"
" LONGGREETING-<%d voiceDuration>-<%d greeting>\n";
#define STATE_IN_WORD 1
#define STATE_IN_SILENCE 2
/* Some default values for the algorithm parameters. These defaults will be overwritten from amd.conf */
static int dfltInitialSilence = 2500;
static int dfltGreeting = 1500;
static int dfltAfterGreetingSilence = 800;
static int dfltTotalAnalysisTime = 5000;
static int dfltMinimumWordLength = 100;
static int dfltBetweenWordsSilence = 50;
static int dfltMaximumNumberOfWords = 3;
static int dfltSilenceThreshold = 256;
static void isAnsweringMachine(struct ast_channel *chan, void *data)
{
int res = 0;
struct ast_frame *f = NULL;
struct ast_dsp *silenceDetector = NULL;
int dspsilence = 0, readFormat, framelength;
int inInitialSilence = 1;
int inGreeting = 0;
int voiceDuration = 0;
int silenceDuration = 0;
int iTotalTime = 0;
int iWordsCount = 0;
int currentState = STATE_IN_SILENCE;
int previousState = STATE_IN_SILENCE;
int consecutiveVoiceDuration = 0;
char amdCause[256] = "", amdStatus[256] = "";
char *parse = ast_strdupa(data);
/* Lets set the initial values of the variables that will control the algorithm.
The initial values are the default ones. If they are passed as arguments
when invoking the application, then the default values will be overwritten
by the ones passed as parameters. */
int initialSilence = dfltInitialSilence;
int greeting = dfltGreeting;
int afterGreetingSilence = dfltAfterGreetingSilence;
int totalAnalysisTime = dfltTotalAnalysisTime;
int minimumWordLength = dfltMinimumWordLength;
int betweenWordsSilence = dfltBetweenWordsSilence;
int maximumNumberOfWords = dfltMaximumNumberOfWords;
int silenceThreshold = dfltSilenceThreshold;
AST_DECLARE_APP_ARGS(args,
AST_APP_ARG(argInitialSilence);
AST_APP_ARG(argGreeting);
AST_APP_ARG(argAfterGreetingSilence);
AST_APP_ARG(argTotalAnalysisTime);
AST_APP_ARG(argMinimumWordLength);
AST_APP_ARG(argBetweenWordsSilence);
AST_APP_ARG(argMaximumNumberOfWords);
AST_APP_ARG(argSilenceThreshold);
);
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "AMD: %s %s %s (Fmt: %d)\n", chan->name ,chan->cid.cid_ani, chan->cid.cid_rdnis, chan->readformat);
/* Lets parse the arguments. */
if (!ast_strlen_zero(parse)) {
/* Some arguments have been passed. Lets parse them and overwrite the defaults. */
AST_STANDARD_APP_ARGS(args, parse);
if (!ast_strlen_zero(args.argInitialSilence))
initialSilence = atoi(args.argInitialSilence);
if (!ast_strlen_zero(args.argGreeting))
greeting = atoi(args.argGreeting);
if (!ast_strlen_zero(args.argAfterGreetingSilence))
afterGreetingSilence = atoi(args.argAfterGreetingSilence);
if (!ast_strlen_zero(args.argTotalAnalysisTime))
totalAnalysisTime = atoi(args.argTotalAnalysisTime);
if (!ast_strlen_zero(args.argMinimumWordLength))
minimumWordLength = atoi(args.argMinimumWordLength);
if (!ast_strlen_zero(args.argBetweenWordsSilence))
betweenWordsSilence = atoi(args.argBetweenWordsSilence);
if (!ast_strlen_zero(args.argMaximumNumberOfWords))
maximumNumberOfWords = atoi(args.argMaximumNumberOfWords);
if (!ast_strlen_zero(args.argSilenceThreshold))
silenceThreshold = atoi(args.argSilenceThreshold);
} else if (option_debug)
ast_log(LOG_DEBUG, "AMD using the default parameters.\n");
/* Now we're ready to roll! */
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "AMD: initialSilence [%d] greeting [%d] afterGreetingSilence [%d] "
"totalAnalysisTime [%d] minimumWordLength [%d] betweenWordsSilence [%d] maximumNumberOfWords [%d] silenceThreshold [%d] \n",
initialSilence, greeting, afterGreetingSilence, totalAnalysisTime,
minimumWordLength, betweenWordsSilence, maximumNumberOfWords, silenceThreshold );
/* Set read format to signed linear so we get signed linear frames in */
readFormat = chan->readformat;
if (ast_set_read_format(chan, AST_FORMAT_SLINEAR) < 0 ) {
ast_log(LOG_WARNING, "AMD: Channel [%s]. Unable to set to linear mode, giving up\n", chan->name );
pbx_builtin_setvar_helper(chan , "AMDSTATUS", "");
pbx_builtin_setvar_helper(chan , "AMDCAUSE", "");
return;
}
/* Create a new DSP that will detect the silence */
if (!(silenceDetector = ast_dsp_new())) {
ast_log(LOG_WARNING, "AMD: Channel [%s]. Unable to create silence detector :(\n", chan->name );
pbx_builtin_setvar_helper(chan , "AMDSTATUS", "");
pbx_builtin_setvar_helper(chan , "AMDCAUSE", "");
return;
}
/* Set silence threshold to specified value */
ast_dsp_set_threshold(silenceDetector, silenceThreshold);
/* Now we go into a loop waiting for frames from the channel */
while ((res = ast_waitfor(chan, totalAnalysisTime)) > -1) {
/* If we fail to read in a frame, that means they hung up */
if (!(f = ast_read(chan))) {
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "AMD: HANGUP\n");
if (option_debug)
ast_log(LOG_DEBUG, "Got hangup\n");
strcpy(amdStatus, "HANGUP");
break;
}
if (f->frametype == AST_FRAME_VOICE) {
/* If the total time exceeds the analysis time then give up as we are not too sure */
framelength = (ast_codec_get_samples(f) / DEFAULT_SAMPLES_PER_MS);
iTotalTime += framelength;
if (iTotalTime >= totalAnalysisTime) {
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "AMD: Channel [%s]. Too long...\n", chan->name );
ast_frfree(f);
strcpy(amdStatus , "NOTSURE");
sprintf(amdCause , "TOOLONG-%d", iTotalTime);
break;
}
/* Feed the frame of audio into the silence detector and see if we get a result */
dspsilence = 0;
ast_dsp_silence(silenceDetector, f, &dspsilence);
if (dspsilence) {
silenceDuration = dspsilence;
if (silenceDuration >= betweenWordsSilence) {
if (currentState != STATE_IN_SILENCE ) {
previousState = currentState;
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "AMD: Changed state to STATE_IN_SILENCE\n");
}
currentState = STATE_IN_SILENCE;
consecutiveVoiceDuration = 0;
}
if (inInitialSilence == 1 && silenceDuration >= initialSilence) {
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "AMD: ANSWERING MACHINE: silenceDuration:%d initialSilence:%d\n",
silenceDuration, initialSilence);
ast_frfree(f);
strcpy(amdStatus , "MACHINE");
sprintf(amdCause , "INITIALSILENCE-%d-%d", silenceDuration, initialSilence);
break;
}
if (silenceDuration >= afterGreetingSilence && inGreeting == 1) {
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "AMD: HUMAN: silenceDuration:%d afterGreetingSilence:%d\n",
silenceDuration, afterGreetingSilence);
ast_frfree(f);
strcpy(amdStatus , "HUMAN");
sprintf(amdCause , "HUMAN-%d-%d", silenceDuration, afterGreetingSilence);
break;
}
} else {
consecutiveVoiceDuration += framelength;
voiceDuration += framelength;
/* If I have enough consecutive voice to say that I am in a Word, I can only increment the
number of words if my previous state was Silence, which means that I moved into a word. */
if (consecutiveVoiceDuration >= minimumWordLength && currentState == STATE_IN_SILENCE) {
iWordsCount++;
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "AMD: Word detected. iWordsCount:%d\n", iWordsCount);
previousState = currentState;
currentState = STATE_IN_WORD;
}
if (iWordsCount >= maximumNumberOfWords) {
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "AMD: ANSWERING MACHINE: iWordsCount:%d\n", iWordsCount);
ast_frfree(f);
strcpy(amdStatus , "MACHINE");
sprintf(amdCause , "MAXWORDS-%d-%d", iWordsCount, maximumNumberOfWords);
break;
}
if (inGreeting == 1 && voiceDuration >= greeting) {
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "AMD: ANSWERING MACHINE: voiceDuration:%d greeting:%d\n", voiceDuration, greeting);
ast_frfree(f);
strcpy(amdStatus , "MACHINE");
sprintf(amdCause , "LONGGREETING-%d-%d", voiceDuration, greeting);
break;
}
if (voiceDuration >= minimumWordLength ) {
silenceDuration = 0;
inInitialSilence = 0;
inGreeting = 1;
}
}
}
ast_frfree(f);
}
if (!res) {
/* It took too long to get a frame back. Giving up. */
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "AMD: Channel [%s]. Too long...\n", chan->name);
strcpy(amdStatus , "NOTSURE");
sprintf(amdCause , "TOOLONG-%d", iTotalTime);
}
/* Set the status and cause on the channel */
pbx_builtin_setvar_helper(chan , "AMDSTATUS" , amdStatus);
pbx_builtin_setvar_helper(chan , "AMDCAUSE" , amdCause);
/* Restore channel read format */
if (readFormat && ast_set_read_format(chan, readFormat))
ast_log(LOG_WARNING, "AMD: Unable to restore read format on '%s'\n", chan->name);
/* Free the DSP used to detect silence */
ast_dsp_free(silenceDetector);
return;
}
static int amd_exec(struct ast_channel *chan, void *data)
{
struct ast_module_user *u = NULL;
u = ast_module_user_add(chan);
isAnsweringMachine(chan, data);
ast_module_user_remove(u);
return 0;
}
static void load_config(void)
{
struct ast_config *cfg = NULL;
char *cat = NULL;
struct ast_variable *var = NULL;
if (!(cfg = ast_config_load("amd.conf"))) {
ast_log(LOG_ERROR, "Configuration file amd.conf missing.\n");
return;
}
cat = ast_category_browse(cfg, NULL);
while (cat) {
if (!strcasecmp(cat, "general") ) {
var = ast_variable_browse(cfg, cat);
while (var) {
if (!strcasecmp(var->name, "initial_silence")) {
dfltInitialSilence = atoi(var->value);
} else if (!strcasecmp(var->name, "greeting")) {
dfltGreeting = atoi(var->value);
} else if (!strcasecmp(var->name, "after_greeting_silence")) {
dfltAfterGreetingSilence = atoi(var->value);
} else if (!strcasecmp(var->name, "silence_threshold")) {
dfltSilenceThreshold = atoi(var->value);
} else if (!strcasecmp(var->name, "total_analysis_time")) {
dfltTotalAnalysisTime = atoi(var->value);
} else if (!strcasecmp(var->name, "min_word_length")) {
dfltMinimumWordLength = atoi(var->value);
} else if (!strcasecmp(var->name, "between_words_silence")) {
dfltBetweenWordsSilence = atoi(var->value);
} else if (!strcasecmp(var->name, "maximum_number_of_words")) {
dfltMaximumNumberOfWords = atoi(var->value);
} else {
ast_log(LOG_WARNING, "%s: Cat:%s. Unknown keyword %s at line %d of amd.conf\n",
app, cat, var->name, var->lineno);
}
var = var->next;
}
}
cat = ast_category_browse(cfg, cat);
}
ast_config_destroy(cfg);
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "AMD defaults: initialSilence [%d] greeting [%d] afterGreetingSilence [%d] "
"totalAnalysisTime [%d] minimumWordLength [%d] betweenWordsSilence [%d] maximumNumberOfWords [%d] silenceThreshold [%d] \n",
dfltInitialSilence, dfltGreeting, dfltAfterGreetingSilence, dfltTotalAnalysisTime,
dfltMinimumWordLength, dfltBetweenWordsSilence, dfltMaximumNumberOfWords, dfltSilenceThreshold );
return;
}
static int unload_module(void)
{
ast_module_user_hangup_all();
return ast_unregister_application(app);
}
static int load_module(void)
{
load_config();
return ast_register_application(app, amd_exec, synopsis, descrip);
}
static int reload(void)
{
load_config();
return 0;
}
AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Answering Machine Detection Application",
.load = load_module,
.unload = unload_module,
.reload = reload,
);

View File

@@ -17,24 +17,21 @@
*/
/*! \file
*
* \brief Execute arbitrary authenticate commands
*
* \author Mark Spencer <markster@digium.com>
*
* \ingroup applications
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <stdio.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/lock.h"
#include "asterisk/file.h"
#include "asterisk/logger.h"
@@ -44,33 +41,17 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/app.h"
#include "asterisk/astdb.h"
#include "asterisk/utils.h"
#include "asterisk/options.h"
enum {
OPT_ACCOUNT = (1 << 0),
OPT_DATABASE = (1 << 1),
OPT_JUMP = (1 << 2),
OPT_MULTIPLE = (1 << 3),
OPT_REMOVE = (1 << 4),
} auth_option_flags;
AST_APP_OPTIONS(auth_app_options, {
AST_APP_OPTION('a', OPT_ACCOUNT),
AST_APP_OPTION('d', OPT_DATABASE),
AST_APP_OPTION('j', OPT_JUMP),
AST_APP_OPTION('m', OPT_MULTIPLE),
AST_APP_OPTION('r', OPT_REMOVE),
});
static char *tdesc = "Authentication Application";
static char *app = "Authenticate";
static char *synopsis = "Authenticate a user";
static char *descrip =
" Authenticate(password[|options[|maxdigits]]): This application asks the caller\n"
"to enter a given password in order to continue dialplan execution. If the password\n"
"begins with the '/' character, it is interpreted as a file which contains a list of\n"
" Authenticate(password[|options]): This application asks the caller to enter a\n"
"given password in order to continue dialplan execution. If the password begins\n"
"with the '/' character, it is interpreted as a file which contains a list of\n"
"valid passwords, listed 1 password per line in the file.\n"
" When using a database key, the value associated with the key can be anything.\n"
"Users have three attempts to authenticate before the channel is hung up. If the\n"
@@ -85,82 +66,69 @@ static char *descrip =
" the file. When one of the passwords is matched, the channel will have\n"
" its account code set to the corresponding account code in the file.\n"
" r - Remove the database key upon successful entry (valid with 'd' only)\n"
" maxdigits - maximum acceptable number of digits. Stops reading after\n"
" maxdigits have been entered (without requiring the user to\n"
" press the '#' key).\n"
" Defaults to 0 - no limit - wait for the user press the '#' key.\n"
;
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
static int auth_exec(struct ast_channel *chan, void *data)
{
int res=0;
int jump = 0;
int retries;
struct ast_module_user *u;
struct localuser *u;
char password[256]="";
char passwd[256];
char *opts;
char *prompt;
int maxdigits;
char *argcopy =NULL;
struct ast_flags flags = {0};
AST_DECLARE_APP_ARGS(arglist,
AST_APP_ARG(password);
AST_APP_ARG(options);
AST_APP_ARG(maxdigits);
);
if (ast_strlen_zero(data)) {
ast_log(LOG_WARNING, "Authenticate requires an argument(password)\n");
return -1;
}
u = ast_module_user_add(chan);
LOCAL_USER_ADD(u);
if (chan->_state != AST_STATE_UP) {
res = ast_answer(chan);
if (res) {
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return -1;
}
}
argcopy = ast_strdupa(data);
AST_STANDARD_APP_ARGS(arglist,argcopy);
if (!ast_strlen_zero(arglist.options)) {
ast_app_parse_options(auth_app_options, &flags, NULL, arglist.options);
}
if (!ast_strlen_zero(arglist.maxdigits)) {
maxdigits = atoi(arglist.maxdigits);
if ((maxdigits<1) || (maxdigits>sizeof(passwd)-2))
maxdigits = sizeof(passwd) - 2;
} else {
maxdigits = sizeof(passwd) - 2;
}
strncpy(password, data, sizeof(password) - 1);
opts=strchr(password, '|');
if (opts) {
*opts = 0;
opts++;
} else
opts = "";
if (strchr(opts, 'j'))
jump = 1;
/* Start asking for password */
prompt = "agent-pass";
for (retries = 0; retries < 3; retries++) {
res = ast_app_getdata(chan, prompt, passwd, maxdigits, 0);
res = ast_app_getdata(chan, prompt, passwd, sizeof(passwd) - 2, 0);
if (res < 0)
break;
res = 0;
if (arglist.password[0] == '/') {
if (ast_test_flag(&flags,OPT_DATABASE)) {
if (password[0] == '/') {
if (strchr(opts, 'd')) {
char tmp[256];
/* Compare against a database key */
if (!ast_db_get(arglist.password + 1, passwd, tmp, sizeof(tmp))) {
if (!ast_db_get(password + 1, passwd, tmp, sizeof(tmp))) {
/* It's a good password */
if (ast_test_flag(&flags,OPT_REMOVE)) {
ast_db_del(arglist.password + 1, passwd);
if (strchr(opts, 'r')) {
ast_db_del(password + 1, passwd);
}
break;
}
} else {
/* Compare against a file */
FILE *f;
f = fopen(arglist.password, "r");
f = fopen(password, "r");
if (f) {
char buf[256] = "";
char md5passwd[33] = "";
@@ -170,7 +138,7 @@ static int auth_exec(struct ast_channel *chan, void *data)
fgets(buf, sizeof(buf), f);
if (!feof(f) && !ast_strlen_zero(buf)) {
buf[strlen(buf) - 1] = '\0';
if (ast_test_flag(&flags,OPT_MULTIPLE)) {
if (strchr(opts, 'm')) {
md5secret = strchr(buf, ':');
if (md5secret == NULL)
continue;
@@ -178,13 +146,13 @@ static int auth_exec(struct ast_channel *chan, void *data)
md5secret++;
ast_md5_hash(md5passwd, passwd);
if (!strcmp(md5passwd, md5secret)) {
if (ast_test_flag(&flags,OPT_ACCOUNT))
if (strchr(opts, 'a'))
ast_cdr_setaccount(chan, buf);
break;
}
} else {
if (!strcmp(passwd, buf)) {
if (ast_test_flag(&flags,OPT_ACCOUNT))
if (strchr(opts, 'a'))
ast_cdr_setaccount(chan, buf);
break;
}
@@ -193,7 +161,7 @@ static int auth_exec(struct ast_channel *chan, void *data)
}
fclose(f);
if (!ast_strlen_zero(buf)) {
if (ast_test_flag(&flags,OPT_MULTIPLE)) {
if (strchr(opts, 'm')) {
if (md5secret && !strcmp(md5passwd, md5secret))
break;
} else {
@@ -202,23 +170,23 @@ static int auth_exec(struct ast_channel *chan, void *data)
}
}
} else
ast_log(LOG_WARNING, "Unable to open file '%s' for authentication: %s\n", arglist.password, strerror(errno));
ast_log(LOG_WARNING, "Unable to open file '%s' for authentication: %s\n", password, strerror(errno));
}
} else {
/* Compare against a fixed password */
if (!strcmp(passwd, arglist.password))
if (!strcmp(passwd, password))
break;
}
prompt="auth-incorrect";
}
if ((retries < 3) && !res) {
if (ast_test_flag(&flags,OPT_ACCOUNT) && !ast_test_flag(&flags,OPT_MULTIPLE))
if (strchr(opts, 'a') && !strchr(opts, 'm'))
ast_cdr_setaccount(chan, passwd);
res = ast_streamfile(chan, "auth-thankyou", chan->language);
if (!res)
res = ast_waitstream(chan, "");
} else {
if (ast_test_flag(&flags,OPT_JUMP) && ast_goto_if_exists(chan, chan->context, chan->exten, chan->priority + 101) == 0) {
if (jump && ast_goto_if_exists(chan, chan->context, chan->exten, chan->priority + 101) == 0) {
res = 0;
} else {
if (!ast_streamfile(chan, "vm-goodbye", chan->language))
@@ -226,25 +194,39 @@ static int auth_exec(struct ast_channel *chan, void *data)
res = -1;
}
}
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return res;
}
static int unload_module(void)
int unload_module(void)
{
int res;
ast_module_user_hangup_all();
res = ast_unregister_application(app);
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int load_module(void)
{
return ast_register_application(app, auth_exec, synopsis, descrip);
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Authentication Application");
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

View File

@@ -17,25 +17,25 @@
*/
/*! \file
*
* \brief Applications connected with CDR engine
*
* Martin Pycko <martinp@digium.com>
*
* \ingroup applications
*/
#include <sys/types.h>
#include <stdlib.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <sys/types.h>
#include <stdlib.h>
#include "asterisk/channel.h"
#include "asterisk/module.h"
#include "asterisk/pbx.h"
static char *tdesc = "Tell Asterisk to not maintain a CDR for the current call";
static char *nocdr_descrip =
" NoCDR(): This application will tell Asterisk not to maintain a CDR for the\n"
"current call.\n";
@@ -43,36 +43,55 @@ static char *nocdr_descrip =
static char *nocdr_app = "NoCDR";
static char *nocdr_synopsis = "Tell Asterisk to not maintain a CDR for the current call";
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
static int nocdr_exec(struct ast_channel *chan, void *data)
{
struct ast_module_user *u;
struct localuser *u;
u = ast_module_user_add(chan);
LOCAL_USER_ADD(u);
if (chan->cdr) {
ast_set_flag(chan->cdr, AST_CDR_FLAG_POST_DISABLED);
ast_cdr_free(chan->cdr);
chan->cdr = NULL;
}
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return 0;
}
static int unload_module(void)
int unload_module(void)
{
int res;
res = ast_unregister_application(nocdr_app);
ast_module_user_hangup_all();
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int load_module(void)
{
return ast_register_application(nocdr_app, nocdr_exec, nocdr_synopsis, nocdr_descrip);
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Tell Asterisk to not maintain a CDR for the current call");
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

View File

@@ -18,19 +18,11 @@
*/
/*! \file
*
* \brief Check if Channel is Available
*
* \author Mark Spencer <markster@digium.com>
* \author James Golovich <james@gnuinter.net>
* \brief Check if Channel is Available
*
* \ingroup applications
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
@@ -38,6 +30,10 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <errno.h>
#include <sys/ioctl.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/lock.h"
#include "asterisk/file.h"
#include "asterisk/logger.h"
@@ -48,6 +44,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/devicestate.h"
#include "asterisk/options.h"
static char *tdesc = "Check channel availability";
static char *app = "ChanIsAvail";
static char *synopsis = "Check channel availability";
@@ -63,37 +61,36 @@ static char *descrip =
" s - Consider the channel unavailable if the channel is in use at all\n"
" j - Support jumping to priority n+101 if no channel is available\n";
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
static int chanavail_exec(struct ast_channel *chan, void *data)
{
int res=-1, inuse=-1, option_state=0, priority_jump=0;
int status;
struct ast_module_user *u;
char *info, tmp[512], trychan[512], *peers, *tech, *number, *rest, *cur;
struct localuser *u;
char *info, tmp[512], trychan[512], *peers, *tech, *number, *rest, *cur, *options, *stringp;
struct ast_channel *tempchan;
AST_DECLARE_APP_ARGS(args,
AST_APP_ARG(reqchans);
AST_APP_ARG(options);
);
if (ast_strlen_zero(data)) {
ast_log(LOG_WARNING, "ChanIsAvail requires an argument (Zap/1&Zap/2)\n");
return -1;
}
u = ast_module_user_add(chan);
LOCAL_USER_ADD(u);
info = ast_strdupa(data);
AST_STANDARD_APP_ARGS(args, info);
if (args.options) {
if (strchr(args.options, 's'))
stringp = info;
strsep(&stringp, "|");
options = strsep(&stringp, "|");
if (options) {
if (strchr(options, 's'))
option_state = 1;
if (strchr(args.options, 'j'))
if (strchr(options, 'j'))
priority_jump = 1;
}
peers = args.reqchans;
peers = info;
if (peers) {
cur = peers;
do {
@@ -107,7 +104,7 @@ static int chanavail_exec(struct ast_channel *chan, void *data)
number = strchr(tech, '/');
if (!number) {
ast_log(LOG_WARNING, "ChanIsAvail argument takes format ([technology]/[device])\n");
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return -1;
}
*number = '\0';
@@ -142,32 +139,47 @@ static int chanavail_exec(struct ast_channel *chan, void *data)
if (res < 1) {
pbx_builtin_setvar_helper(chan, "AVAILCHAN", "");
pbx_builtin_setvar_helper(chan, "AVAILORIGCHAN", "");
if (priority_jump || ast_opt_priority_jumping) {
if (priority_jump || option_priority_jumping) {
if (ast_goto_if_exists(chan, chan->context, chan->exten, chan->priority + 101)) {
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return -1;
}
}
}
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return 0;
}
static int unload_module(void)
int unload_module(void)
{
int res = 0;
res = ast_unregister_application(app);
ast_module_user_hangup_all();
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int load_module(void)
{
return ast_register_application(app, chanavail_exec, synopsis, descrip);
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Check channel availability");
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

View File

@@ -1,140 +0,0 @@
/*
* Asterisk -- An open source telephony toolkit.
*
* Copyright (C) 2006, Sergey Basmanov
*
* See http://www.asterisk.org for more information about
* the Asterisk project. Please do not directly contact
* any of the maintainers of this project for assistance;
* the project provides a web site, mailing lists and IRC
* channels for your use.
*
* This program is free software, distributed under the terms of
* the GNU General Public License Version 2. See the LICENSE file
* at the top of the source tree.
*/
/*! \file
*
* \brief ChannelRedirect application
*
* \author Sergey Basmanov <sergey_basmanov@mail.ru>
*
* \ingroup applications
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include "asterisk/file.h"
#include "asterisk/logger.h"
#include "asterisk/channel.h"
#include "asterisk/pbx.h"
#include "asterisk/module.h"
#include "asterisk/lock.h"
#include "asterisk/app.h"
#include "asterisk/features.h"
#include "asterisk/options.h"
static char *app = "ChannelRedirect";
static char *synopsis = "Redirects given channel to a dialplan target.";
static char *descrip =
"ChannelRedirect(channel|[[context|]extension|]priority):\n"
" Sends the specified channel to the specified extension priority\n";
static int asyncgoto_exec(struct ast_channel *chan, void *data)
{
int res = -1;
struct ast_module_user *u;
char *info, *context, *exten, *priority;
int prio = 1;
struct ast_channel *chan2 = NULL;
AST_DECLARE_APP_ARGS(args,
AST_APP_ARG(channel);
AST_APP_ARG(label);
);
if (ast_strlen_zero(data)) {
ast_log(LOG_WARNING, "%s requires an argument (channel|[[context|]exten|]priority)\n", app);
return -1;
}
u = ast_module_user_add(chan);
info = ast_strdupa(data);
AST_STANDARD_APP_ARGS(args, info);
if (ast_strlen_zero(args.channel) || ast_strlen_zero(args.label)) {
ast_log(LOG_WARNING, "%s requires an argument (channel|[[context|]exten|]priority)\n", app);
goto quit;
}
chan2 = ast_get_channel_by_name_locked(args.channel);
if (!chan2) {
ast_log(LOG_WARNING, "No such channel: %s\n", args.channel);
goto quit;
}
/* Parsed right to left, so standard parsing won't work */
context = strsep(&args.label, "|");
exten = strsep(&args.label, "|");
if (exten) {
priority = strsep(&args.label, "|");
if (!priority) {
priority = exten;
exten = context;
context = NULL;
}
} else {
priority = context;
context = NULL;
}
/* ast_findlabel_extension does not convert numeric priorities; it only does a lookup */
if (!(prio = atoi(priority)) && !(prio = ast_findlabel_extension(chan2, S_OR(context, chan2->context),
S_OR(exten, chan2->exten), priority, chan2->cid.cid_num))) {
ast_log(LOG_WARNING, "'%s' is not a known priority or label\n", priority);
goto chanquit;
}
if (option_debug > 1)
ast_log(LOG_DEBUG, "Attempting async goto (%s) to %s|%s|%d\n", args.channel, S_OR(context, chan2->context), S_OR(exten, chan2->exten), prio);
if (ast_async_goto_if_exists(chan2, S_OR(context, chan2->context), S_OR(exten, chan2->exten), prio))
ast_log(LOG_WARNING, "%s failed for %s\n", app, args.channel);
else
res = 0;
chanquit:
ast_mutex_unlock(&chan2->lock);
quit:
ast_module_user_remove(u);
return res;
}
static int unload_module(void)
{
int res;
res = ast_unregister_application(app);
ast_module_user_hangup_all();
return res;
}
static int load_module(void)
{
return ast_register_application(app, asyncgoto_exec, synopsis, descrip);
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Channel Redirect");

View File

@@ -2,7 +2,6 @@
* Asterisk -- An open source telephony toolkit.
*
* Copyright (C) 2005 Anthony Minessale II (anthmct@yahoo.com)
* Copyright (C) 2005 - 2006, Digium, Inc.
*
* A license has been granted to Digium (via disclaimer) for the use of
* this code.
@@ -19,24 +18,21 @@
*/
/*! \file
*
* \brief ChanSpy: Listen in on any channel.
*
* \author Anthony Minessale II <anthmct@yahoo.com>
*
*
* \ingroup applications
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <ctype.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/file.h"
#include "asterisk/logger.h"
#include "asterisk/channel.h"
@@ -51,76 +47,46 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/module.h"
#include "asterisk/lock.h"
#define AST_NAME_STRLEN 256
AST_MUTEX_DEFINE_STATIC(modlock);
static const char *tdesc = "Listen to a channel, and optionally whisper into it";
static const char *app_chan = "ChanSpy";
static const char *desc_chan =
#define AST_NAME_STRLEN 256
#define ALL_DONE(u, ret) LOCAL_USER_REMOVE(u); return ret;
#define get_volfactor(x) x ? ((x > 0) ? (1 << x) : ((1 << abs(x)) * -1)) : 0
static const char *synopsis = "Listen to the audio of an active channel";
static const char *app = "ChanSpy";
static const char *desc =
" ChanSpy([chanprefix][|options]): This application is used to listen to the\n"
"audio from an Asterisk channel. This includes the audio coming in and\n"
"audio from an active Asterisk channel. This includes the audio coming in and\n"
"out of the channel being spied on. If the 'chanprefix' parameter is specified,\n"
"only channels beginning with this string will be spied upon.\n"
" While spying, the following actions may be performed:\n"
" While Spying, the following actions may be performed:\n"
" - Dialing # cycles the volume level.\n"
" - Dialing * will stop spying and look for another channel to spy on.\n"
" - Dialing a series of digits followed by # builds a channel name to append\n"
" to 'chanprefix'. For example, executing ChanSpy(Agent) and then dialing\n"
" the digits '1234#' while spying will begin spying on the channel\n"
" the digits '1234#' while spying will begin spying on the channel,\n"
" 'Agent/1234'.\n"
" Options:\n"
" b - Only spy on channels involved in a bridged call.\n"
" g(grp) - Match only channels where their ${SPYGROUP} variable is set to\n"
" contain 'grp' in an optional : delimited list.\n"
" q - Don't play a beep when beginning to spy on a channel, or speak the\n"
" selected channel name.\n"
" b - Only spy on channels involved in a bridged call.\n"
" g(grp) - Match only channels where their ${SPYGROUP} variable is set to\n"
" 'grp'.\n"
" q - Don't play a beep when beginning to spy on a channel.\n"
" r[(basename)] - Record the session to the monitor spool directory. An\n"
" optional base for the filename may be specified. The\n"
" default is 'chanspy'.\n"
" v([value]) - Adjust the initial volume in the range from -4 to 4. A\n"
" negative value refers to a quieter setting.\n"
" w - Enable 'whisper' mode, so the spying channel can talk to\n"
" the spied-on channel.\n"
" W - Enable 'private whisper' mode, so the spying channel can\n"
" talk to the spied-on channel but cannot listen to that\n"
" channel.\n"
" v([value]) - Adjust the initial volume in the range from -4 to 4. A\n"
" negative value refers to a quieter setting.\n"
;
static const char *app_ext = "ExtenSpy";
static const char *desc_ext =
" ExtenSpy(exten[@context][|options]): This application is used to listen to the\n"
"audio from an Asterisk channel. This includes the audio coming in and\n"
"out of the channel being spied on. Only channels created by outgoing calls for the\n"
"specified extension will be selected for spying. If the optional context is not\n"
"supplied, the current channel's context will be used.\n"
" While spying, the following actions may be performed:\n"
" - Dialing # cycles the volume level.\n"
" - Dialing * will stop spying and look for another channel to spy on.\n"
" Options:\n"
" b - Only spy on channels involved in a bridged call.\n"
" g(grp) - Match only channels where their ${SPYGROUP} variable is set to\n"
" contain 'grp' in an optional : delimited list.\n"
" q - Don't play a beep when beginning to spy on a channel, or speak the\n"
" selected channel name.\n"
" r[(basename)] - Record the session to the monitor spool directory. An\n"
" optional base for the filename may be specified. The\n"
" default is 'chanspy'.\n"
" v([value]) - Adjust the initial volume in the range from -4 to 4. A\n"
" negative value refers to a quieter setting.\n"
" w - Enable 'whisper' mode, so the spying channel can talk to\n"
" the spied-on channel.\n"
" W - Enable 'private whisper' mode, so the spying channel can\n"
" talk to the spied-on channel but cannot listen to that\n"
" channel.\n"
;
static const char *chanspy_spy_type = "ChanSpy";
enum {
OPTION_QUIET = (1 << 0), /* Quiet, no announcement */
OPTION_BRIDGED = (1 << 1), /* Only look at bridged calls */
OPTION_VOLUME = (1 << 2), /* Specify initial volume */
OPTION_GROUP = (1 << 3), /* Only look at channels in group */
OPTION_RECORD = (1 << 4),
OPTION_WHISPER = (1 << 5),
OPTION_PRIVATE = (1 << 6), /* Private Whisper mode */
OPTION_RECORD = (1 << 4), /* Record */
} chanspy_opt_flags;
enum {
@@ -130,16 +96,16 @@ enum {
OPT_ARG_ARRAY_SIZE,
} chanspy_opt_args;
AST_APP_OPTIONS(spy_opts, {
AST_APP_OPTIONS(chanspy_opts, {
AST_APP_OPTION('q', OPTION_QUIET),
AST_APP_OPTION('b', OPTION_BRIDGED),
AST_APP_OPTION('w', OPTION_WHISPER),
AST_APP_OPTION('W', OPTION_PRIVATE),
AST_APP_OPTION_ARG('v', OPTION_VOLUME, OPT_ARG_VOLUME),
AST_APP_OPTION_ARG('g', OPTION_GROUP, OPT_ARG_GROUP),
AST_APP_OPTION_ARG('r', OPTION_RECORD, OPT_ARG_RECORD),
});
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
struct chanspy_translation_helper {
/* spy data */
@@ -148,6 +114,34 @@ struct chanspy_translation_helper {
int volfactor;
};
static struct ast_channel *local_channel_walk(struct ast_channel *chan)
{
struct ast_channel *ret;
ast_mutex_lock(&modlock);
if ((ret = ast_channel_walk_locked(chan))) {
ast_mutex_unlock(&ret->lock);
}
ast_mutex_unlock(&modlock);
return ret;
}
static struct ast_channel *local_get_channel_begin_name(char *name)
{
struct ast_channel *chan, *ret = NULL;
ast_mutex_lock(&modlock);
chan = local_channel_walk(NULL);
while (chan) {
if (!strncmp(chan->name, name, strlen(name)) && strncmp(chan->name, "Zap/pseudo", 10)) {
ret = chan;
break;
}
chan = local_channel_walk(chan);
}
ast_mutex_unlock(&modlock);
return ret;
}
static void *spy_alloc(struct ast_channel *chan, void *data)
{
/* just store the data pointer in the channel structure */
@@ -188,6 +182,7 @@ static int spy_generate(struct ast_channel *chan, void *data, int len, int sampl
return 0;
}
static struct ast_generator spygen = {
.alloc = spy_alloc,
.release = spy_release,
@@ -201,12 +196,13 @@ static int start_spying(struct ast_channel *chan, struct ast_channel *spychan, s
ast_log(LOG_NOTICE, "Attaching %s to %s\n", spychan->name, chan->name);
ast_channel_lock(chan);
ast_mutex_lock(&chan->lock);
res = ast_channel_spy_add(chan, spy);
ast_channel_unlock(chan);
ast_mutex_unlock(&chan->lock);
if (!res && ast_test_flag(chan, AST_FLAG_NBRIDGE) && (peer = ast_bridged_channel(chan)))
if (!res && ast_test_flag(chan, AST_FLAG_NBRIDGE) && (peer = ast_bridged_channel(chan))) {
ast_softhangup(peer, AST_SOFTHANGUP_UNBRIDGE);
}
return res;
}
@@ -236,32 +232,27 @@ static void set_volume(struct ast_channel *chan, struct chanspy_translation_help
if (!ast_channel_setoption(chan, AST_OPTION_TXGAIN, &volume_adjust, sizeof(volume_adjust), 0))
csth->volfactor = 0;
csth->spy.read_vol_adjustment = csth->volfactor;
csth->spy.write_vol_adjustment = csth->volfactor;
}
static int channel_spy(struct ast_channel *chan, struct ast_channel *spyee, int *volfactor, int fd,
const struct ast_flags *flags)
static int channel_spy(struct ast_channel *chan, struct ast_channel *spyee, int *volfactor, int fd)
{
struct chanspy_translation_helper csth;
int running = 0, res, x = 0;
char inp[24] = {0};
char *name;
struct ast_frame *f;
struct ast_silence_generator *silgen = NULL;
int running = 0, res = 0, x = 0;
char inp[24] = "", *name = NULL;
struct ast_frame *f = NULL;
if (ast_check_hangup(chan) || ast_check_hangup(spyee))
if ((chan && ast_check_hangup(chan)) || (spyee && ast_check_hangup(spyee)))
return 0;
name = ast_strdupa(spyee->name);
if (option_verbose >= 2)
if (option_verbose > 1)
ast_verbose(VERBOSE_PREFIX_2 "Spying on channel %s\n", name);
memset(&csth, 0, sizeof(csth));
ast_set_flag(&csth.spy, CHANSPY_FORMAT_AUDIO);
ast_set_flag(&csth.spy, CHANSPY_TRIGGER_NONE);
ast_set_flag(&csth.spy, CHANSPY_MIXAUDIO);
csth.spy.type = "ChanSpy";
csth.spy.type = chanspy_spy_type;
csth.spy.status = CHANSPY_RUNNING;
csth.spy.read_queue.format = AST_FORMAT_SLINEAR;
csth.spy.write_queue.format = AST_FORMAT_SLINEAR;
@@ -275,474 +266,320 @@ static int channel_spy(struct ast_channel *chan, struct ast_channel *spyee, int
csth.spy.write_vol_adjustment = csth.volfactor;
}
csth.fd = fd;
if (start_spying(spyee, chan, &csth.spy)) {
ast_mutex_destroy(&csth.spy.lock);
ast_channel_spy_free(&csth.spy);
return 0;
}
if (ast_test_flag(flags, OPTION_WHISPER)) {
struct ast_filestream *beepstream;
int old_write_format = 0;
ast_activate_generator(chan, &spygen, &csth);
ast_channel_whisper_start(csth.spy.chan);
old_write_format = chan->writeformat;
if ((beepstream = ast_openstream_full(chan, "beep", chan->language, 1))) {
struct ast_frame *f;
while ((f = ast_readframe(beepstream))) {
ast_channel_whisper_feed(csth.spy.chan, f);
ast_frfree(f);
}
ast_closestream(beepstream);
chan->stream = NULL;
}
if (old_write_format)
ast_set_write_format(chan, old_write_format);
}
if (ast_test_flag(flags, OPTION_PRIVATE))
silgen = ast_channel_start_silence_generator(chan);
else
ast_activate_generator(chan, &spygen, &csth);
/* We can no longer rely on 'spyee' being an actual channel;
it can be hung up and freed out from under us. However, the
channel destructor will put NULL into our csth.spy.chan
field when that happens, so that is our signal that the spyee
channel has gone away.
*/
/* Note: it is very important that the ast_waitfor() be the first
condition in this expression, so that if we wait for some period
of time before receiving a frame from our spying channel, we check
for hangup on the spied-on channel _after_ knowing that a frame
has arrived, since the spied-on channel could have gone away while
we were waiting
*/
while ((res = ast_waitfor(chan, -1) > -1) &&
csth.spy.status == CHANSPY_RUNNING &&
csth.spy.chan) {
if (!(f = ast_read(chan)) || ast_check_hangup(chan)) {
running = -1;
while (csth.spy.status == CHANSPY_RUNNING &&
(res = ast_waitfor(chan, -1) > -1)) {
/* Read in frame from channel, break out if no frame */
if (!(f = ast_read(chan)))
break;
}
if (ast_test_flag(flags, OPTION_WHISPER) &&
(f->frametype == AST_FRAME_VOICE)) {
ast_channel_whisper_feed(csth.spy.chan, f);
ast_frfree(f);
continue;
}
res = (f->frametype == AST_FRAME_DTMF) ? f->subclass : 0;
/* Now if this is DTMF then we have to handle it as such, otherwise just skip it */
res = 0;
if (f->frametype == AST_FRAME_DTMF)
res = f->subclass;
ast_frfree(f);
if (!res)
continue;
if (x == sizeof(inp))
x = 0;
if (res < 0) {
running = -1;
break;
}
if (res == '*') {
running = 0;
break;
} else if (res == '#') {
/* Process DTMF digits */
if (res == '#') {
if (!ast_strlen_zero(inp)) {
running = atoi(inp);
running = x ? atoi(inp) : -1;
break;
}
(*volfactor)++;
if (*volfactor > 4)
*volfactor = -4;
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "Setting spy volume on %s to %d\n", chan->name, *volfactor);
csth.volfactor = *volfactor;
set_volume(chan, &csth);
if (csth.volfactor) {
ast_set_flag(&csth.spy, CHANSPY_READ_VOLADJUST);
csth.spy.read_vol_adjustment = csth.volfactor;
ast_set_flag(&csth.spy, CHANSPY_WRITE_VOLADJUST);
csth.spy.write_vol_adjustment = csth.volfactor;
} else {
ast_clear_flag(&csth.spy, CHANSPY_READ_VOLADJUST);
ast_clear_flag(&csth.spy, CHANSPY_WRITE_VOLADJUST);
(*volfactor)++;
if (*volfactor > 4)
*volfactor = -1;
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "Setting spy volume on %s to %d\n", chan->name, *volfactor);
csth.volfactor = *volfactor;
set_volume(chan, &csth);
if (csth.volfactor) {
ast_set_flag(&csth.spy, CHANSPY_READ_VOLADJUST);
csth.spy.read_vol_adjustment = csth.volfactor;
ast_set_flag(&csth.spy, CHANSPY_WRITE_VOLADJUST);
csth.spy.write_vol_adjustment = csth.volfactor;
} else {
ast_clear_flag(&csth.spy, CHANSPY_READ_VOLADJUST);
ast_clear_flag(&csth.spy, CHANSPY_WRITE_VOLADJUST);
}
}
} else if (res >= '0' && res <= '9') {
} else if (res == '*') {
break;
} else if (res >= 48 && res <= 57) {
inp[x++] = res;
}
}
if (ast_test_flag(flags, OPTION_WHISPER) && csth.spy.chan)
ast_channel_whisper_stop(csth.spy.chan);
if (ast_test_flag(flags, OPTION_PRIVATE))
ast_channel_stop_silence_generator(chan, silgen);
else
ast_deactivate_generator(chan);
ast_deactivate_generator(chan);
csth.spy.status = CHANSPY_DONE;
/* If a channel still exists on our spy structure then we need to remove ourselves */
ast_mutex_lock(&csth.spy.lock);
if (csth.spy.chan) {
ast_channel_lock(csth.spy.chan);
ast_mutex_lock(&csth.spy.chan->lock);
ast_channel_spy_remove(csth.spy.chan, &csth.spy);
ast_channel_unlock(csth.spy.chan);
ast_mutex_unlock(&csth.spy.chan->lock);
}
ast_channel_spy_free(&csth.spy);
if (option_verbose >= 2)
ast_mutex_unlock(&csth.spy.lock);
if (option_verbose > 1)
ast_verbose(VERBOSE_PREFIX_2 "Done Spying on channel %s\n", name);
ast_channel_spy_free(&csth.spy);
return running;
}
static struct ast_channel *next_channel(const struct ast_channel *last, const char *spec,
const char *exten, const char *context)
static int chanspy_exec(struct ast_channel *chan, void *data)
{
struct ast_channel *this;
struct localuser *u;
struct ast_channel *peer=NULL, *prev=NULL;
char name[AST_NAME_STRLEN],
peer_name[AST_NAME_STRLEN + 5],
*args,
*ptr = NULL,
*options = NULL,
*spec = NULL,
*argv[5],
*mygroup = NULL,
*recbase = NULL;
int res = -1,
volfactor = 0,
silent = 0,
argc = 0,
bronly = 0,
chosen = 0,
count=0,
waitms = 100,
num = 0,
oldrf = 0,
oldwf = 0,
fd = 0;
struct ast_flags flags;
signed char zero_volume = 0;
redo:
if (spec)
this = ast_walk_channel_by_name_prefix_locked(last, spec, strlen(spec));
else if (exten)
this = ast_walk_channel_by_exten_locked(last, exten, context);
else
this = ast_channel_walk_locked(last);
if (this) {
ast_channel_unlock(this);
if (!strncmp(this->name, "Zap/pseudo", 10))
goto redo;
if (!(args = ast_strdupa((char *)data))) {
ast_log(LOG_ERROR, "Out of memory!\n");
return -1;
}
return this;
}
LOCAL_USER_ADD(u);
static int common_exec(struct ast_channel *chan, const struct ast_flags *flags,
int volfactor, const int fd, const char *mygroup, const char *spec,
const char *exten, const char *context)
{
struct ast_channel *peer, *prev, *next;
char nameprefix[AST_NAME_STRLEN];
char peer_name[AST_NAME_STRLEN + 5];
signed char zero_volume = 0;
int waitms;
int res;
char *ptr;
int num;
oldrf = chan->readformat;
oldwf = chan->writeformat;
if (ast_set_read_format(chan, AST_FORMAT_SLINEAR) < 0) {
ast_log(LOG_ERROR, "Could Not Set Read Format.\n");
LOCAL_USER_REMOVE(u);
return -1;
}
if (ast_set_write_format(chan, AST_FORMAT_SLINEAR) < 0) {
ast_log(LOG_ERROR, "Could Not Set Write Format.\n");
LOCAL_USER_REMOVE(u);
return -1;
}
if (chan->_state != AST_STATE_UP)
ast_answer(chan);
ast_answer(chan);
ast_set_flag(chan, AST_FLAG_SPYING); /* so nobody can spy on us while we are spying */
waitms = 100;
if ((argc = ast_app_separate_args(args, '|', argv, sizeof(argv) / sizeof(argv[0])))) {
spec = argv[0];
if ( argc > 1) {
options = argv[1];
}
if (ast_strlen_zero(spec) || !strcmp(spec, "all")) {
spec = NULL;
}
}
if (options) {
char *opts[OPT_ARG_ARRAY_SIZE];
ast_app_parse_options(chanspy_opts, &flags, opts, options);
if (ast_test_flag(&flags, OPTION_GROUP)) {
mygroup = opts[OPT_ARG_GROUP];
}
if (ast_test_flag(&flags, OPTION_RECORD)) {
if (!(recbase = opts[OPT_ARG_RECORD])) {
recbase = "chanspy";
}
}
silent = ast_test_flag(&flags, OPTION_QUIET);
bronly = ast_test_flag(&flags, OPTION_BRIDGED);
if (ast_test_flag(&flags, OPTION_VOLUME) && opts[OPT_ARG_VOLUME]) {
int vol;
for (;;) {
if (!ast_test_flag(flags, OPTION_QUIET)) {
if ((sscanf(opts[OPT_ARG_VOLUME], "%30d", &vol) != 1) || (vol > 4) || (vol < -4))
ast_log(LOG_NOTICE, "Volume factor must be a number between -4 and 4\n");
else
volfactor = vol;
}
}
else
ast_clear_flag(&flags, AST_FLAGS_ALL);
if (recbase) {
char filename[512];
snprintf(filename,sizeof(filename),"%s/%s.%d.raw",ast_config_AST_MONITOR_DIR, recbase, (int)time(NULL));
if ((fd = open(filename, O_CREAT | O_WRONLY | O_TRUNC, 0644)) <= 0) {
ast_log(LOG_WARNING, "Cannot open %s for recording\n", filename);
fd = 0;
}
}
for(;;) {
if (!silent) {
res = ast_streamfile(chan, "beep", chan->language);
if (!res)
res = ast_waitstream(chan, "");
else if (res < 0) {
if (res < 0) {
ast_clear_flag(chan, AST_FLAG_SPYING);
break;
}
}
count = 0;
res = ast_waitfordigit(chan, waitms);
if (res < 0) {
ast_clear_flag(chan, AST_FLAG_SPYING);
break;
}
/* reset for the next loop around, unless overridden later */
waitms = 100;
peer = prev = next = NULL;
peer = local_channel_walk(NULL);
prev=NULL;
while(peer) {
if (peer != chan) {
char *group = NULL;
int igrp = 1;
for (peer = next_channel(peer, spec, exten, context);
peer;
prev = peer, peer = next ? next : next_channel(peer, spec, exten, context), next = NULL) {
const char *group;
int igrp = !mygroup;
char *groups[25];
int num_groups = 0;
char *dup_group;
int x;
char *s;
if (peer == prev)
break;
if (peer == chan)
continue;
if (ast_test_flag(flags, OPTION_BRIDGED) && !ast_bridged_channel(peer))
continue;
if (ast_check_hangup(peer) || ast_test_flag(peer, AST_FLAG_SPYING))
continue;
if (mygroup) {
if ((group = pbx_builtin_getvar_helper(peer, "SPYGROUP"))) {
dup_group = ast_strdupa(group);
num_groups = ast_app_separate_args(dup_group, ':', groups,
sizeof(groups) / sizeof(groups[0]));
if (peer == prev && !chosen) {
break;
}
chosen = 0;
group = pbx_builtin_getvar_helper(peer, "SPYGROUP");
if (mygroup) {
if (!group || strcmp(mygroup, group)) {
igrp = 0;
}
}
for (x = 0; x < num_groups; x++) {
if (!strcmp(mygroup, groups[x])) {
igrp = 1;
break;
if (igrp && (!spec || ((strlen(spec) <= strlen(peer->name) &&
!strncasecmp(peer->name, spec, strlen(spec)))))) {
if (peer && (!bronly || ast_bridged_channel(peer)) &&
!ast_check_hangup(peer) && !ast_test_flag(peer, AST_FLAG_SPYING)) {
int x = 0;
strncpy(peer_name, "spy-", 5);
strncpy(peer_name + strlen(peer_name), peer->name, AST_NAME_STRLEN);
ptr = strchr(peer_name, '/');
*ptr = '\0';
ptr++;
for (x = 0 ; x < strlen(peer_name) ; x++) {
if (peer_name[x] == '/') {
break;
}
peer_name[x] = tolower(peer_name[x]);
}
if (!silent) {
if (ast_fileexists(peer_name, NULL, NULL) != -1) {
res = ast_streamfile(chan, peer_name, chan->language);
if (!res)
res = ast_waitstream(chan, "");
if (res)
break;
} else
res = ast_say_character_str(chan, peer_name, "", chan->language);
if ((num=atoi(ptr)))
ast_say_digits(chan, atoi(ptr), "", chan->language);
}
count++;
prev = peer;
res = channel_spy(chan, peer, &volfactor, fd);
if (res == -1) {
break;
} else if (res > 1 && spec) {
snprintf(name, AST_NAME_STRLEN, "%s/%d", spec, res);
if ((peer = local_get_channel_begin_name(name))) {
chosen = 1;
}
continue;
}
}
}
}
if (!igrp)
continue;
strcpy(peer_name, "spy-");
strncat(peer_name, peer->name, AST_NAME_STRLEN);
ptr = strchr(peer_name, '/');
*ptr++ = '\0';
for (s = peer_name; s < ptr; s++)
*s = tolower(*s);
if (!ast_test_flag(flags, OPTION_QUIET)) {
if (ast_fileexists(peer_name, NULL, NULL) != -1) {
res = ast_streamfile(chan, peer_name, chan->language);
if (!res)
res = ast_waitstream(chan, "");
if (res)
break;
} else
res = ast_say_character_str(chan, peer_name, "", chan->language);
if ((num = atoi(ptr)))
ast_say_digits(chan, atoi(ptr), "", chan->language);
}
waitms = 5000;
res = channel_spy(chan, peer, &volfactor, fd, flags);
if (res == -1) {
if ((peer = local_channel_walk(peer)) == NULL) {
break;
} else if (res > 1 && spec) {
snprintf(nameprefix, AST_NAME_STRLEN, "%s/%d", spec, res);
if ((next = ast_get_channel_by_name_prefix_locked(nameprefix, strlen(nameprefix)))) {
ast_channel_unlock(next);
} else {
/* stay on this channel */
next = peer;
}
peer = NULL;
}
}
if (res == -1)
break;
waitms = count ? 100 : 5000;
}
if (fd > 0) {
close(fd);
}
if (oldrf && ast_set_read_format(chan, oldrf) < 0) {
ast_log(LOG_ERROR, "Could Not Set Read Format.\n");
}
if (oldwf && ast_set_write_format(chan, oldwf) < 0) {
ast_log(LOG_ERROR, "Could Not Set Write Format.\n");
}
ast_clear_flag(chan, AST_FLAG_SPYING);
ast_channel_setoption(chan, AST_OPTION_TXGAIN, &zero_volume, sizeof(zero_volume), 0);
return res;
ALL_DONE(u, res);
}
static int chanspy_exec(struct ast_channel *chan, void *data)
int unload_module(void)
{
struct ast_module_user *u;
char *options = NULL;
char *spec = NULL;
char *argv[2];
char *mygroup = NULL;
char *recbase = NULL;
int fd = 0;
struct ast_flags flags;
int oldwf = 0;
int argc = 0;
int volfactor = 0;
int res;
data = ast_strdupa(data);
res = ast_unregister_application(app);
u = ast_module_user_add(chan);
if ((argc = ast_app_separate_args(data, '|', argv, sizeof(argv) / sizeof(argv[0])))) {
spec = argv[0];
if (argc > 1)
options = argv[1];
if (ast_strlen_zero(spec) || !strcmp(spec, "all"))
spec = NULL;
}
if (options) {
char *opts[OPT_ARG_ARRAY_SIZE];
ast_app_parse_options(spy_opts, &flags, opts, options);
if (ast_test_flag(&flags, OPTION_GROUP))
mygroup = opts[OPT_ARG_GROUP];
if (ast_test_flag(&flags, OPTION_RECORD) &&
!(recbase = opts[OPT_ARG_RECORD]))
recbase = "chanspy";
if (ast_test_flag(&flags, OPTION_VOLUME) && opts[OPT_ARG_VOLUME]) {
int vol;
if ((sscanf(opts[OPT_ARG_VOLUME], "%d", &vol) != 1) || (vol > 4) || (vol < -4))
ast_log(LOG_NOTICE, "Volume factor must be a number between -4 and 4\n");
else
volfactor = vol;
}
if (ast_test_flag(&flags, OPTION_PRIVATE))
ast_set_flag(&flags, OPTION_WHISPER);
} else
ast_clear_flag(&flags, AST_FLAGS_ALL);
oldwf = chan->writeformat;
if (ast_set_write_format(chan, AST_FORMAT_SLINEAR) < 0) {
ast_log(LOG_ERROR, "Could Not Set Write Format.\n");
ast_module_user_remove(u);
return -1;
}
if (recbase) {
char filename[512];
snprintf(filename, sizeof(filename), "%s/%s.%d.raw", ast_config_AST_MONITOR_DIR, recbase, (int) time(NULL));
if ((fd = open(filename, O_CREAT | O_WRONLY | O_TRUNC, 0644)) <= 0) {
ast_log(LOG_WARNING, "Cannot open '%s' for recording\n", filename);
fd = 0;
}
}
res = common_exec(chan, &flags, volfactor, fd, mygroup, spec, NULL, NULL);
if (fd)
close(fd);
if (oldwf && ast_set_write_format(chan, oldwf) < 0)
ast_log(LOG_ERROR, "Could Not Set Write Format.\n");
ast_module_user_remove(u);
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int extenspy_exec(struct ast_channel *chan, void *data)
int load_module(void)
{
return ast_register_application(app, chanspy_exec, synopsis, desc);
}
char *description(void)
{
return (char *) synopsis;
}
int usecount(void)
{
struct ast_module_user *u;
char *options = NULL;
char *exten = NULL;
char *context = NULL;
char *argv[2];
char *mygroup = NULL;
char *recbase = NULL;
int fd = 0;
struct ast_flags flags;
int oldwf = 0;
int argc = 0;
int volfactor = 0;
int res;
data = ast_strdupa(data);
u = ast_module_user_add(chan);
if ((argc = ast_app_separate_args(data, '|', argv, sizeof(argv) / sizeof(argv[0])))) {
context = argv[0];
if (!ast_strlen_zero(argv[0]))
exten = strsep(&context, "@");
if (ast_strlen_zero(context))
context = ast_strdupa(chan->context);
if (argc > 1)
options = argv[1];
}
if (options) {
char *opts[OPT_ARG_ARRAY_SIZE];
ast_app_parse_options(spy_opts, &flags, opts, options);
if (ast_test_flag(&flags, OPTION_GROUP))
mygroup = opts[OPT_ARG_GROUP];
if (ast_test_flag(&flags, OPTION_RECORD) &&
!(recbase = opts[OPT_ARG_RECORD]))
recbase = "chanspy";
if (ast_test_flag(&flags, OPTION_VOLUME) && opts[OPT_ARG_VOLUME]) {
int vol;
if ((sscanf(opts[OPT_ARG_VOLUME], "%d", &vol) != 1) || (vol > 4) || (vol < -4))
ast_log(LOG_NOTICE, "Volume factor must be a number between -4 and 4\n");
else
volfactor = vol;
}
if (ast_test_flag(&flags, OPTION_PRIVATE))
ast_set_flag(&flags, OPTION_WHISPER);
} else
ast_clear_flag(&flags, AST_FLAGS_ALL);
oldwf = chan->writeformat;
if (ast_set_write_format(chan, AST_FORMAT_SLINEAR) < 0) {
ast_log(LOG_ERROR, "Could Not Set Write Format.\n");
ast_module_user_remove(u);
return -1;
}
if (recbase) {
char filename[512];
snprintf(filename, sizeof(filename), "%s/%s.%d.raw", ast_config_AST_MONITOR_DIR, recbase, (int) time(NULL));
if ((fd = open(filename, O_CREAT | O_WRONLY | O_TRUNC, 0644)) <= 0) {
ast_log(LOG_WARNING, "Cannot open '%s' for recording\n", filename);
fd = 0;
}
}
res = common_exec(chan, &flags, volfactor, fd, mygroup, NULL, exten, context);
if (fd)
close(fd);
if (oldwf && ast_set_write_format(chan, oldwf) < 0)
ast_log(LOG_ERROR, "Could Not Set Write Format.\n");
ast_module_user_remove(u);
STANDARD_USECOUNT(res);
return res;
}
static int unload_module(void)
char *key()
{
int res = 0;
res |= ast_unregister_application(app_chan);
res |= ast_unregister_application(app_ext);
ast_module_user_hangup_all();
return res;
return ASTERISK_GPL_KEY;
}
static int load_module(void)
{
int res = 0;
res |= ast_register_application(app_chan, chanspy_exec, tdesc, desc_chan);
res |= ast_register_application(app_ext, extenspy_exec, tdesc, desc_ext);
return res;
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Listen to the audio of an active channel");

View File

@@ -17,22 +17,19 @@
*/
/*! \file
*
* \brief Trivial application to control playback of a sound file
*
* \author Mark Spencer <markster@digium.com>
*
* \ingroup applications
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/lock.h"
#include "asterisk/file.h"
#include "asterisk/logger.h"
@@ -44,6 +41,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/utils.h"
#include "asterisk/options.h"
static const char *tdesc = "Control Playback Application";
static const char *app = "ControlPlayback";
static const char *synopsis = "Play a file with fast forward and rewind";
@@ -66,6 +65,9 @@ static const char *descrip =
" CPLAYBACKSTATUS - This variable contains the status of the attempt as a text\n"
" string, one of: SUCCESS | USERSTOPPED | ERROR\n";
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
static int is_on_phonepad(char key)
{
@@ -76,7 +78,7 @@ static int controlplayback_exec(struct ast_channel *chan, void *data)
{
int res = 0, priority_jump = 0;
int skipms = 0;
struct ast_module_user *u;
struct localuser *u;
char *tmp;
int argc;
char *argv[8];
@@ -96,7 +98,7 @@ static int controlplayback_exec(struct ast_channel *chan, void *data)
return -1;
}
u = ast_module_user_add(chan);
LOCAL_USER_ADD(u);
tmp = ast_strdupa(data);
memset(argv, 0, sizeof(argv));
@@ -105,7 +107,7 @@ static int controlplayback_exec(struct ast_channel *chan, void *data)
if (argc < 1) {
ast_log(LOG_WARNING, "ControlPlayback requires an argument (filename)\n");
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return -1;
}
@@ -137,7 +139,7 @@ static int controlplayback_exec(struct ast_channel *chan, void *data)
pbx_builtin_setvar_helper(chan, "CPLAYBACKSTATUS", "USERSTOPPED");
} else {
if (res < 0) {
if (priority_jump || ast_opt_priority_jumping) {
if (priority_jump || option_priority_jumping) {
if (ast_goto_if_exists(chan, chan->context, chan->exten, chan->priority + 101)) {
ast_log(LOG_WARNING, "ControlPlayback tried to jump to priority n+101 as requested, but priority didn't exist\n");
}
@@ -148,21 +150,41 @@ static int controlplayback_exec(struct ast_channel *chan, void *data)
pbx_builtin_setvar_helper(chan, "CPLAYBACKSTATUS", "SUCCESS");
}
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return res;
}
static int unload_module(void)
int unload_module(void)
{
int res;
res = ast_unregister_application(app);
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int load_module(void)
{
return ast_register_application(app, controlplayback_exec, synopsis, descrip);
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Control Playback Application");
char *description(void)
{
return (char *) tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

257
apps/app_curl.c Normal file
View File

@@ -0,0 +1,257 @@
/*
* Asterisk -- An open source telephony toolkit.
*
* Copyright (C) 2004 - 2005, Tilghman Lesher
*
* Tilghman Lesher <curl-20050919@the-tilghman.com>
* and Brian Wilkins <bwilkins@cfl.rr.com> (Added POST option)
*
* app_curl.c is distributed with no restrictions on usage or
* redistribution.
*
* See http://www.asterisk.org for more information about
* the Asterisk project. Please do not directly contact
* any of the maintainers of this project for assistance;
* the project provides a web site, mailing lists and IRC
* channels for your use.
*
*/
/*! \file
* \brief Curl - App to load a URL
*
* \ingroup applications
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <curl/curl.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/lock.h"
#include "asterisk/file.h"
#include "asterisk/logger.h"
#include "asterisk/channel.h"
#include "asterisk/pbx.h"
#include "asterisk/cli.h"
#include "asterisk/options.h"
#include "asterisk/module.h"
static char *tdesc = "Load external URL";
static char *app = "Curl";
static char *synopsis = "Load an external URL";
static char *descrip =
" Curl(URL[|postdata]): This application will request the specified URL.\n"
"It is mainly used for signalling external applications of an event.\n"
"Parameters:\n"
" URL - This is the external URL to request.\n"
" postdata - This information will be treated as POST data.\n"
"This application will set the following variable:\n"
" CURL - This variable will contain the resulting page.\n"
"This application has been deprecated in favor of the CURL function.\n";
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
struct MemoryStruct {
char *memory;
size_t size;
};
static void *myrealloc(void *ptr, size_t size)
{
/* There might be a realloc() out there that doesn't like reallocing
NULL pointers, so we take care of it here */
if (ptr)
return realloc(ptr, size);
else
return malloc(size);
}
static size_t WriteMemoryCallback(void *ptr, size_t size, size_t nmemb, void *data)
{
register int realsize = size * nmemb;
struct MemoryStruct *mem = (struct MemoryStruct *)data;
mem->memory = (char *)myrealloc(mem->memory, mem->size + realsize + 1);
if (mem->memory) {
memcpy(&(mem->memory[mem->size]), ptr, realsize);
mem->size += realsize;
mem->memory[mem->size] = 0;
}
return realsize;
}
static int curl_internal(struct MemoryStruct *chunk, char *url, char *post)
{
CURL *curl;
curl = curl_easy_init();
if (!curl) {
return -1;
}
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)chunk);
curl_easy_setopt(curl, CURLOPT_USERAGENT, "asterisk-libcurl-agent/1.0");
if (post) {
curl_easy_setopt(curl, CURLOPT_POST, 1);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, post);
}
curl_easy_perform(curl);
curl_easy_cleanup(curl);
return 0;
}
static int curl_exec(struct ast_channel *chan, void *data)
{
int res = 0;
struct localuser *u;
char *info, *post_data=NULL, *url;
struct MemoryStruct chunk = { NULL, 0 };
static int dep_warning = 0;
if (!dep_warning) {
ast_log(LOG_WARNING, "The application Curl is deprecated. Please use the CURL() function instead.\n");
dep_warning = 1;
}
if (ast_strlen_zero(data)) {
ast_log(LOG_WARNING, "Curl requires an argument (URL)\n");
return -1;
}
LOCAL_USER_ADD(u);
if ((info = ast_strdupa(data))) {
url = strsep(&info, "|");
post_data = info;
} else {
ast_log(LOG_ERROR, "Out of memory\n");
LOCAL_USER_REMOVE(u);
return -1;
}
if (! curl_internal(&chunk, url, post_data)) {
if (chunk.memory) {
chunk.memory[chunk.size] = '\0';
if (chunk.memory[chunk.size - 1] == 10)
chunk.memory[chunk.size - 1] = '\0';
pbx_builtin_setvar_helper(chan, "CURL", chunk.memory);
free(chunk.memory);
}
} else {
ast_log(LOG_ERROR, "Cannot allocate curl structure\n");
res = -1;
}
LOCAL_USER_REMOVE(u);
return res;
}
static char *acf_curl_exec(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len)
{
struct localuser *u;
char *info, *post_data=NULL, *url;
struct MemoryStruct chunk = { NULL, 0 };
*buf = '\0';
if (ast_strlen_zero(data)) {
ast_log(LOG_WARNING, "CURL requires an argument (URL)\n");
return buf;
}
LOCAL_USER_ACF_ADD(u);
info = ast_strdupa(data);
if (!info) {
ast_log(LOG_ERROR, "Out of memory\n");
LOCAL_USER_REMOVE(u);
return buf;
}
url = strsep(&info, "|");
post_data = info;
if (! curl_internal(&chunk, url, post_data)) {
if (chunk.memory) {
chunk.memory[chunk.size] = '\0';
if (chunk.memory[chunk.size - 1] == 10)
chunk.memory[chunk.size - 1] = '\0';
ast_copy_string(buf, chunk.memory, len);
free(chunk.memory);
}
} else {
ast_log(LOG_ERROR, "Cannot allocate curl structure\n");
}
LOCAL_USER_REMOVE(u);
return buf;
}
struct ast_custom_function acf_curl = {
.name = "CURL",
.synopsis = "Retrieves the contents of a URL",
.syntax = "CURL(url[|post-data])",
.desc =
" url - URL to retrieve\n"
" post-data - Optional data to send as a POST (GET is default action)\n",
.read = acf_curl_exec,
};
int unload_module(void)
{
int res;
res = ast_custom_function_unregister(&acf_curl);
res |= ast_unregister_application(app);
STANDARD_HANGUP_LOCALUSERS;
curl_global_cleanup();
return res;
}
int load_module(void)
{
int res;
curl_global_init(CURL_GLOBAL_ALL);
res = ast_custom_function_register(&acf_curl);
res |= ast_register_application(app, curl_exec, synopsis, descrip);
return res;
}
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

473
apps/app_cut.c Normal file
View File

@@ -0,0 +1,473 @@
/*
* Asterisk -- An open source telephony toolkit.
*
* Copyright (c) 2003 Tilghman Lesher. All rights reserved.
*
* Tilghman Lesher <app_cut__v003@the-tilghman.com>
*
* This code is released by the author with no restrictions on usage.
*
* See http://www.asterisk.org for more information about
* the Asterisk project. Please do not directly contact
* any of the maintainers of this project for assistance;
* the project provides a web site, mailing lists and IRC
* channels for your use.
*
*/
/*! \file
* \brief Cut application
*
* \ingroup applications
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/file.h"
#include "asterisk/logger.h"
#include "asterisk/options.h"
#include "asterisk/channel.h"
#include "asterisk/pbx.h"
#include "asterisk/module.h"
#include "asterisk/app.h"
/* Maximum length of any variable */
#define MAXRESULT 1024
static char *tdesc = "Cut out information from a string";
static char *app_cut = "Cut";
static char *cut_synopsis = "Splits a variable's contents using the specified delimiter";
static char *cut_descrip =
" Cut(newvar=varname,delimiter,fieldspec): This application will split the\n"
"contents of a variable based on the given delimeter and store the result in\n"
"a new variable.\n"
"Parameters:\n"
" newvar - new variable created from result string\n"
" varname - variable you want cut\n"
" delimiter - defaults to '-'\n"
" fieldspec - number of the field you want (1-based offset)\n"
" may also be specified as a range (with -)\n"
" or group of ranges and fields (with &)\n"
"This application has been deprecated in favor of the CUT function.\n";
static char *app_sort = "Sort";
static char *app_sort_synopsis = "Sorts a list of keywords and values";
static char *app_sort_descrip =
" Sort(newvar=key1:val1[,key2:val2[[...],keyN:valN]]): This application will\n"
"sort the list provided in ascending order. The result will be stored in the\n"
"specified variable name.\n"
" This application has been deprecated in favor of the SORT function.\n";
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
struct sortable_keys {
char *key;
float value;
};
static int sort_subroutine(const void *arg1, const void *arg2)
{
const struct sortable_keys *one=arg1, *two=arg2;
if (one->value < two->value) {
return -1;
} else if (one->value == two->value) {
return 0;
} else {
return 1;
}
}
#define ERROR_NOARG (-1)
#define ERROR_NOMEM (-2)
#define ERROR_USAGE (-3)
static int sort_internal(struct ast_channel *chan, char *data, char *buffer, size_t buflen)
{
char *strings, *ptrkey, *ptrvalue;
int count=1, count2, element_count=0;
struct sortable_keys *sortable_keys;
memset(buffer, 0, buflen);
if (!data) {
return ERROR_NOARG;
}
strings = ast_strdupa((char *)data);
if (!strings) {
return ERROR_NOMEM;
}
for (ptrkey = strings; *ptrkey; ptrkey++) {
if (*ptrkey == '|') {
count++;
}
}
sortable_keys = alloca(count * sizeof(struct sortable_keys));
if (!sortable_keys) {
return ERROR_NOMEM;
}
memset(sortable_keys, 0, count * sizeof(struct sortable_keys));
/* Parse each into a struct */
count2 = 0;
while ((ptrkey = strsep(&strings, "|"))) {
ptrvalue = index(ptrkey, ':');
if (!ptrvalue) {
count--;
continue;
}
*ptrvalue = '\0';
ptrvalue++;
sortable_keys[count2].key = ptrkey;
sscanf(ptrvalue, "%30f", &sortable_keys[count2].value);
count2++;
}
/* Sort the structs */
qsort(sortable_keys, count, sizeof(struct sortable_keys), sort_subroutine);
for (count2 = 0; count2 < count; count2++) {
int blen = strlen(buffer);
if (element_count++) {
strncat(buffer + blen, ",", buflen - blen - 1);
blen++;
}
strncat(buffer + blen, sortable_keys[count2].key, buflen - blen - 1);
}
return 0;
}
static int cut_internal(struct ast_channel *chan, char *data, char *buffer, size_t buflen)
{
char *s, *args[3], *varname=NULL, *delimiter=NULL, *field=NULL;
int args_okay = 0;
memset(buffer, 0, buflen);
/* Check and parse arguments */
if (data) {
s = ast_strdupa((char *)data);
if (s) {
ast_app_separate_args(s, '|', args, 3);
varname = args[0];
delimiter = args[1];
field = args[2];
if (field) {
args_okay = 1;
}
} else {
return ERROR_NOMEM;
}
}
if (args_okay) {
char d, ds[2];
char *tmp = alloca(strlen(varname) + 4);
char varvalue[MAXRESULT], *tmp2=varvalue;
if (tmp) {
snprintf(tmp, strlen(varname) + 4, "${%s}", varname);
memset(varvalue, 0, sizeof(varvalue));
} else {
return ERROR_NOMEM;
}
if (delimiter[0])
d = delimiter[0];
else
d = '-';
/* String form of the delimiter, for use with strsep(3) */
snprintf(ds, sizeof(ds), "%c", d);
pbx_substitute_variables_helper(chan, tmp, tmp2, MAXRESULT - 1);
if (tmp2) {
int curfieldnum = 1;
while ((tmp2 != NULL) && (field != NULL)) {
char *nextgroup = strsep(&field, "&");
int num1 = 0, num2 = MAXRESULT;
char trashchar;
if (sscanf(nextgroup, "%30d-%30d", &num1, &num2) == 2) {
/* range with both start and end */
} else if (sscanf(nextgroup, "-%30d", &num2) == 1) {
/* range with end */
num1 = 0;
} else if ((sscanf(nextgroup, "%30d%1c", &num1, &trashchar) == 2) && (trashchar == '-')) {
/* range with start */
num2 = MAXRESULT;
} else if (sscanf(nextgroup, "%30d", &num1) == 1) {
/* single number */
num2 = num1;
} else {
return ERROR_USAGE;
}
/* Get to start, if any */
if (num1 > 0) {
while ((tmp2 != (char *)NULL + 1) && (curfieldnum < num1)) {
tmp2 = index(tmp2, d) + 1;
curfieldnum++;
}
}
/* Most frequent problem is the expectation of reordering fields */
if ((num1 > 0) && (curfieldnum > num1)) {
ast_log(LOG_WARNING, "We're already past the field you wanted?\n");
}
/* Re-null tmp2 if we added 1 to NULL */
if (tmp2 == (char *)NULL + 1)
tmp2 = NULL;
/* Output fields until we either run out of fields or num2 is reached */
while ((tmp2 != NULL) && (curfieldnum <= num2)) {
char *tmp3 = strsep(&tmp2, ds);
int curlen = strlen(buffer);
if (curlen) {
snprintf(buffer + curlen, buflen - curlen, "%c%s", d, tmp3);
} else {
snprintf(buffer, buflen, "%s", tmp3);
}
curfieldnum++;
}
}
}
} else {
return ERROR_NOARG;
}
return 0;
}
static int sort_exec(struct ast_channel *chan, void *data)
{
int res=0;
struct localuser *u;
char *varname, *strings, result[512] = "";
static int dep_warning=0;
if (!dep_warning) {
ast_log(LOG_WARNING, "The application Sort is deprecated. Please use the SORT() function instead.\n");
dep_warning=1;
}
if (!data) {
ast_log(LOG_ERROR, "Sort() requires an argument\n");
return 0;
}
LOCAL_USER_ADD(u);
strings = ast_strdupa((char *)data);
if (!strings) {
ast_log(LOG_ERROR, "Out of memory\n");
LOCAL_USER_REMOVE(u);
return 0;
}
varname = strsep(&strings, "=");
switch (sort_internal(chan, strings, result, sizeof(result))) {
case ERROR_NOARG:
ast_log(LOG_ERROR, "Sort() requires an argument\n");
res = 0;
break;
case ERROR_NOMEM:
ast_log(LOG_ERROR, "Out of memory\n");
res = -1;
break;
case 0:
pbx_builtin_setvar_helper(chan, varname, result);
res = 0;
break;
default:
ast_log(LOG_ERROR, "Unknown internal error\n");
res = -1;
}
LOCAL_USER_REMOVE(u);
return res;
}
static int cut_exec(struct ast_channel *chan, void *data)
{
int res=0;
struct localuser *u;
char *s, *newvar=NULL, result[512];
static int dep_warning = 0;
LOCAL_USER_ADD(u);
if (!dep_warning) {
ast_log(LOG_WARNING, "The application Cut is deprecated. Please use the CUT() function instead.\n");
dep_warning=1;
}
/* Check and parse arguments */
if (data) {
s = ast_strdupa((char *)data);
if (s) {
newvar = strsep(&s, "=");
} else {
ast_log(LOG_ERROR, "Out of memory\n");
LOCAL_USER_REMOVE(u);
return -1;
}
}
switch (cut_internal(chan, s, result, sizeof(result))) {
case ERROR_NOARG:
ast_log(LOG_ERROR, "Cut() requires an argument\n");
res = 0;
break;
case ERROR_NOMEM:
ast_log(LOG_ERROR, "Out of memory\n");
res = -1;
break;
case ERROR_USAGE:
ast_log(LOG_ERROR, "Usage: %s\n", cut_synopsis);
res = 0;
break;
case 0:
pbx_builtin_setvar_helper(chan, newvar, result);
res = 0;
break;
default:
ast_log(LOG_ERROR, "Unknown internal error\n");
res = -1;
}
LOCAL_USER_REMOVE(u);
return res;
}
static char *acf_sort_exec(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len)
{
struct localuser *u;
LOCAL_USER_ACF_ADD(u);
switch (sort_internal(chan, data, buf, len)) {
case ERROR_NOARG:
ast_log(LOG_ERROR, "SORT() requires an argument\n");
break;
case ERROR_NOMEM:
ast_log(LOG_ERROR, "Out of memory\n");
break;
case 0:
break;
default:
ast_log(LOG_ERROR, "Unknown internal error\n");
}
LOCAL_USER_REMOVE(u);
return buf;
}
static char *acf_cut_exec(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len)
{
struct localuser *u;
LOCAL_USER_ACF_ADD(u);
switch (cut_internal(chan, data, buf, len)) {
case ERROR_NOARG:
ast_log(LOG_ERROR, "CUT() requires an argument\n");
break;
case ERROR_NOMEM:
ast_log(LOG_ERROR, "Out of memory\n");
break;
case ERROR_USAGE:
ast_log(LOG_ERROR, "Usage: %s\n", cut_synopsis);
break;
case 0:
break;
default:
ast_log(LOG_ERROR, "Unknown internal error\n");
}
LOCAL_USER_REMOVE(u);
return buf;
}
struct ast_custom_function acf_sort = {
.name = "SORT",
.synopsis = "Sorts a list of key/vals into a list of keys, based upon the vals",
.syntax = "SORT(key1:val1[...][,keyN:valN])",
.desc =
"Takes a comma-separated list of keys and values, each separated by a colon, and returns a\n"
"comma-separated list of the keys, sorted by their values. Values will be evaluated as\n"
"floating-point numbers.\n",
.read = acf_sort_exec,
};
struct ast_custom_function acf_cut = {
.name = "CUT",
.synopsis = "Slices and dices strings, based upon a named delimiter.",
.syntax = "CUT(<varname>,<char-delim>,<range-spec>)",
.desc =
" varname - variable you want cut\n"
" char-delim - defaults to '-'\n"
" range-spec - number of the field you want (1-based offset)\n"
" may also be specified as a range (with -)\n"
" or group of ranges and fields (with &)\n",
.read = acf_cut_exec,
};
int unload_module(void)
{
int res;
res = ast_custom_function_unregister(&acf_cut);
res |= ast_custom_function_unregister(&acf_sort);
res |= ast_unregister_application(app_sort);
res |= ast_unregister_application(app_cut);
STANDARD_HANGUP_LOCALUSERS;
return res;
}
int load_module(void)
{
int res;
res = ast_custom_function_register(&acf_cut);
res |= ast_custom_function_register(&acf_sort);
res |= ast_register_application(app_sort, sort_exec, app_sort_synopsis, app_sort_descrip);
res |= ast_register_application(app_cut, cut_exec, cut_synopsis, cut_descrip);
return res;
}
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

101
apps/app_datetime.c Normal file
View File

@@ -0,0 +1,101 @@
/*
* Asterisk -- An open source telephony toolkit.
*
* Copyright (C) 1999 - 2005, Digium, Inc.
*
* Mark Spencer <markster@digium.com>
*
* See http://www.asterisk.org for more information about
* the Asterisk project. Please do not directly contact
* any of the maintainers of this project for assistance;
* the project provides a web site, mailing lists and IRC
* channels for your use.
*
* This program is free software, distributed under the terms of
* the GNU General Public License Version 2. See the LICENSE file
* at the top of the source tree.
*/
/*! \file
* \brief Time of day - Report the time of day
*
* \ingroup applications
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/lock.h"
#include "asterisk/file.h"
#include "asterisk/logger.h"
#include "asterisk/channel.h"
#include "asterisk/pbx.h"
#include "asterisk/module.h"
#include "asterisk/say.h"
static char *tdesc = "Date and Time";
static char *app = "DateTime";
static char *synopsis = "Say the date and time";
static char *descrip =
" DateTime(): This application will say the current date and time.\n";
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
static int datetime_exec(struct ast_channel *chan, void *data)
{
int res=0;
time_t t;
struct localuser *u;
LOCAL_USER_ADD(u);
time(&t);
if (chan->_state != AST_STATE_UP)
res = ast_answer(chan);
if (!res)
res = ast_say_datetime(chan, t, "", chan->language);
LOCAL_USER_REMOVE(u);
return res;
}
int unload_module(void)
{
int res;
res = ast_unregister_application(app);
STANDARD_HANGUP_LOCALUSERS;
return res;
}
int load_module(void)
{
return ast_register_application(app, datetime_exec, synopsis, descrip);
}
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

View File

@@ -22,22 +22,19 @@
*
* \brief Database access functions
*
* \author Mark Spencer <markster@digium.com>
* \author Jefferson Noxon <jeff@debian.org>
*
* \ingroup applications
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/options.h"
#include "asterisk/file.h"
#include "asterisk/logger.h"
@@ -48,38 +45,65 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/lock.h"
#include "asterisk/options.h"
/*! \todo XXX Remove this application after 1.4 is relased */
static char *tdesc = "Database Access Functions";
static char *g_descrip =
" DBget(varname=family/key[|options]): This application will retrieve a value\n"
"from the Asterisk database and store it in the given variable.\n"
" Options:\n"
" j - Jump to priority n+101 if the requested family/key isn't found.\n"
" This application sets the following channel variable upon completion:\n"
" DBGETSTATUS - This variable will contain the status of the attempt\n"
" FOUND | NOTFOUND \n"
" This application has been deprecated in favor of the DB function.\n";
static char *p_descrip =
" DBput(family/key=value): This application will store the given value in the\n"
"specified location in the Asterisk database.\n"
" This application has been deprecated in favor of the DB function.\n";
static char *d_descrip =
" DBdel(family/key): This application will delete a key from the Asterisk\n"
"database.\n"
" This application has been DEPRECATED in favor of the DB_DELETE function.\n";
"database.\n";
static char *dt_descrip =
" DBdeltree(family[/keytree]): This application will delete a family or keytree\n"
"from the Asterisk database\n";
static char *g_app = "DBget";
static char *p_app = "DBput";
static char *d_app = "DBdel";
static char *dt_app = "DBdeltree";
static char *g_synopsis = "Retrieve a value from the database";
static char *p_synopsis = "Store a value in the database";
static char *d_synopsis = "Delete a key from the database";
static char *dt_synopsis = "Delete a family or keytree from the database";
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
static int deltree_exec(struct ast_channel *chan, void *data)
{
char *argv, *family, *keytree;
struct ast_module_user *u;
struct localuser *u;
u = ast_module_user_add(chan);
LOCAL_USER_ADD(u);
argv = ast_strdupa(data);
if (!argv) {
ast_log(LOG_ERROR, "Memory allocation failed\n");
LOCAL_USER_REMOVE(u);
return 0;
}
if (strchr(argv, '/')) {
family = strsep(&argv, "/");
keytree = strsep(&argv, "\0");
if (!family || !keytree) {
ast_log(LOG_DEBUG, "Ignoring; Syntax error in argument\n");
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return 0;
}
if (ast_strlen_zero(keytree))
@@ -101,7 +125,7 @@ static int deltree_exec(struct ast_channel *chan, void *data)
ast_verbose(VERBOSE_PREFIX_3 "DBdeltree: Error deleting key from database.\n");
}
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return 0;
}
@@ -109,24 +133,23 @@ static int deltree_exec(struct ast_channel *chan, void *data)
static int del_exec(struct ast_channel *chan, void *data)
{
char *argv, *family, *key;
struct ast_module_user *u;
static int deprecation_warning = 0;
struct localuser *u;
u = ast_module_user_add(chan);
if (!deprecation_warning) {
deprecation_warning = 1;
ast_log(LOG_WARNING, "The DBdel application has been deprecated in favor of the DB_DELETE dialplan function!\n");
}
LOCAL_USER_ADD(u);
argv = ast_strdupa(data);
if (!argv) {
ast_log (LOG_ERROR, "Memory allocation failed\n");
LOCAL_USER_REMOVE(u);
return 0;
}
if (strchr(argv, '/')) {
family = strsep(&argv, "/");
key = strsep(&argv, "\0");
if (!family || !key) {
ast_log(LOG_DEBUG, "Ignoring; Syntax error in argument\n");
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return 0;
}
if (option_verbose > 2)
@@ -139,29 +162,162 @@ static int del_exec(struct ast_channel *chan, void *data)
ast_log(LOG_DEBUG, "Ignoring, no parameters\n");
}
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return 0;
}
static int unload_module(void)
static int put_exec(struct ast_channel *chan, void *data)
{
char *argv, *value, *family, *key;
static int dep_warning = 0;
struct localuser *u;
LOCAL_USER_ADD(u);
if (!dep_warning) {
ast_log(LOG_WARNING, "This application has been deprecated, please use the ${DB(family/key)} function instead.\n");
dep_warning = 1;
}
argv = ast_strdupa(data);
if (!argv) {
ast_log(LOG_ERROR, "Memory allocation failed\n");
LOCAL_USER_REMOVE(u);
return 0;
}
if (strchr(argv, '/') && strchr(argv, '=')) {
family = strsep(&argv, "/");
key = strsep(&argv, "=");
value = strsep(&argv, "\0");
if (!value || !family || !key) {
ast_log(LOG_DEBUG, "Ignoring; Syntax error in argument\n");
LOCAL_USER_REMOVE(u);
return 0;
}
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "DBput: family=%s, key=%s, value=%s\n", family, key, value);
if (ast_db_put(family, key, value)) {
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "DBput: Error writing value to database.\n");
}
} else {
ast_log (LOG_DEBUG, "Ignoring, no parameters\n");
}
LOCAL_USER_REMOVE(u);
return 0;
}
static int get_exec(struct ast_channel *chan, void *data)
{
char *argv, *varname, *family, *key, *options = NULL;
char dbresult[256];
static int dep_warning = 0;
int priority_jump = 0;
struct localuser *u;
LOCAL_USER_ADD(u);
if (!dep_warning) {
ast_log(LOG_WARNING, "This application has been deprecated, please use the ${DB(family/key)} function instead.\n");
dep_warning = 1;
}
argv = ast_strdupa(data);
if (!argv) {
ast_log(LOG_ERROR, "Memory allocation failed\n");
LOCAL_USER_REMOVE(u);
return 0;
}
if (strchr(argv, '=') && strchr(argv, '/')) {
varname = strsep(&argv, "=");
family = strsep(&argv, "/");
if (strchr((void *)&argv, '|')) {
key = strsep(&argv, "|");
options = strsep(&argv, "\0");
} else
key = strsep(&argv, "\0");
if (!varname || !family || !key) {
ast_log(LOG_DEBUG, "Ignoring; Syntax error in argument\n");
LOCAL_USER_REMOVE(u);
return 0;
}
if (options) {
if (strchr(options, 'j'))
priority_jump = 1;
}
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "DBget: varname=%s, family=%s, key=%s\n", varname, family, key);
if (!ast_db_get(family, key, dbresult, sizeof (dbresult) - 1)) {
pbx_builtin_setvar_helper(chan, varname, dbresult);
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "DBget: set variable %s to %s\n", varname, dbresult);
pbx_builtin_setvar_helper(chan, "DBGETSTATUS", "FOUND");
} else {
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "DBget: Value not found in database.\n");
if (priority_jump || option_priority_jumping) {
/* Send the call to n+101 priority, where n is the current priority */
ast_goto_if_exists(chan, chan->context, chan->exten, chan->priority + 101);
}
pbx_builtin_setvar_helper(chan, "DBGETSTATUS", "NOTFOUND");
}
} else {
ast_log(LOG_DEBUG, "Ignoring, no parameters\n");
}
LOCAL_USER_REMOVE(u);
return 0;
}
int unload_module(void)
{
int retval;
retval = ast_unregister_application(dt_app);
retval |= ast_unregister_application(d_app);
retval |= ast_unregister_application(p_app);
retval |= ast_unregister_application(g_app);
STANDARD_HANGUP_LOCALUSERS;
return retval;
}
static int load_module(void)
int load_module(void)
{
int retval;
retval = ast_register_application(d_app, del_exec, d_synopsis, d_descrip);
retval = ast_register_application(g_app, get_exec, g_synopsis, g_descrip);
retval |= ast_register_application(p_app, put_exec, p_synopsis, p_descrip);
retval |= ast_register_application(d_app, del_exec, d_synopsis, d_descrip);
retval |= ast_register_application(dt_app, deltree_exec, dt_synopsis, dt_descrip);
return retval;
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Database Access Functions");
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

File diff suppressed because it is too large Load Diff

View File

@@ -22,20 +22,18 @@
*
* \brief Virtual Dictation Machine Application For Asterisk
*
* \author Anthony Minessale II <anthmct@yahoo.com>
*
* \ingroup applications
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/stat.h> /* for mkdir */
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/file.h"
#include "asterisk/logger.h"
@@ -46,12 +44,16 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/lock.h"
#include "asterisk/app.h"
static char *tdesc = "Virtual Dictation Machine";
static char *app = "Dictate";
static char *synopsis = "Virtual Dictation Machine";
static char *desc = " Dictate([<base_dir>[|<filename>]])\n"
static char *desc = " Dictate([<base_dir>])\n"
"Start dictation machine using optional base dir for files.\n";
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
typedef enum {
DFLAG_RECORD = (1 << 0),
DFLAG_PLAY = (1 << 1),
@@ -78,20 +80,16 @@ static int play_and_wait(struct ast_channel *chan, char *file, char *digits)
static int dictate_exec(struct ast_channel *chan, void *data)
{
char *path = NULL, filein[256], *filename = "";
char *parse;
AST_DECLARE_APP_ARGS(args,
AST_APP_ARG(base);
AST_APP_ARG(filename);
);
char *mydata, *argv[2], *path = NULL, filein[256];
char dftbase[256];
char *base;
struct ast_flags flags = {0};
struct ast_filestream *fs;
struct ast_frame *f = NULL;
struct ast_module_user *u;
struct localuser *u;
int ffactor = 320 * 80,
res = 0,
argc = 0,
done = 0,
oldr = 0,
lastop = 0,
@@ -102,43 +100,35 @@ static int dictate_exec(struct ast_channel *chan, void *data)
maxlen = 0,
mode = 0;
u = ast_module_user_add(chan);
LOCAL_USER_ADD(u);
snprintf(dftbase, sizeof(dftbase), "%s/dictate", ast_config_AST_SPOOL_DIR);
if (!ast_strlen_zero(data)) {
parse = ast_strdupa(data);
AST_STANDARD_APP_ARGS(args, parse);
} else
args.argc = 0;
if (!ast_strlen_zero(data) && (mydata = ast_strdupa(data))) {
argc = ast_app_separate_args(mydata, '|', argv, sizeof(argv) / sizeof(argv[0]));
}
if (args.argc && !ast_strlen_zero(args.base)) {
base = args.base;
if (argc) {
base = argv[0];
} else {
base = dftbase;
}
if (args.argc > 1 && args.filename) {
filename = args.filename;
}
oldr = chan->readformat;
if ((res = ast_set_read_format(chan, AST_FORMAT_SLINEAR)) < 0) {
ast_log(LOG_WARNING, "Unable to set to linear mode.\n");
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return -1;
}
ast_answer(chan);
ast_safe_sleep(chan, 200);
for (res = 0; !res;) {
if (ast_strlen_zero(filename)) {
if (ast_app_getdata(chan, "dictate/enter_filename", filein, sizeof(filein), 0) ||
ast_strlen_zero(filein)) {
res = -1;
break;
}
} else {
ast_copy_string(filein, filename, sizeof(filein));
filename = "";
for(res = 0; !res;) {
if (ast_app_getdata(chan, "dictate/enter_filename", filein, sizeof(filein), 0) ||
ast_strlen_zero(filein)) {
res = -1;
break;
}
mkdir(base, 0755);
len = strlen(base) + strlen(filein) + 2;
if (!path || len > maxlen) {
@@ -330,20 +320,40 @@ static int dictate_exec(struct ast_channel *chan, void *data)
if (oldr) {
ast_set_read_format(chan, oldr);
}
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return 0;
}
static int unload_module(void)
int unload_module(void)
{
int res;
res = ast_unregister_application(app);
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int load_module(void)
{
return ast_register_application(app, dictate_exec, synopsis, desc);
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Virtual Dictation Machine");
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

View File

@@ -20,20 +20,18 @@
*
* \brief Directed Call Pickup Support
*
* \author Joshua Colp <jcolp@digium.com>
*
* \ingroup applications
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/file.h"
#include "asterisk/logger.h"
#include "asterisk/channel.h"
@@ -41,141 +39,131 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/module.h"
#include "asterisk/lock.h"
#include "asterisk/app.h"
#include "asterisk/options.h"
#define PICKUPMARK "PICKUPMARK"
static const char *tdesc = "Directed Call Pickup Application";
static const char *app = "Pickup";
static const char *synopsis = "Directed Call Pickup";
static const char *descrip =
" Pickup(extension[@context][&extension2@context...]): This application can pickup any ringing channel\n"
" Pickup(extension[@context]): This application can pickup any ringing channel\n"
"that is calling the specified extension. If no context is specified, the current\n"
"context will be used. If you use the special string \"PICKUPMARK\" for the context parameter, for example\n"
"10@PICKUPMARK, this application tries to find a channel which has defined a channel variable with the same content\n"
"as \"extension\".";
"context will be used.\n";
/* Perform actual pickup between two channels */
static int pickup_do(struct ast_channel *chan, struct ast_channel *target)
{
int res = 0;
STANDARD_LOCAL_USER;
if (option_debug)
ast_log(LOG_DEBUG, "Call pickup on '%s' by '%s'\n", target->name, chan->name);
LOCAL_USER_DECL;
if ((res = ast_answer(chan))) {
ast_log(LOG_WARNING, "Unable to answer '%s'\n", chan->name);
return -1;
}
if ((res = ast_queue_control(chan, AST_CONTROL_ANSWER))) {
ast_log(LOG_WARNING, "Unable to queue answer on '%s'\n", chan->name);
return -1;
}
if ((res = ast_channel_masquerade(target, chan))) {
ast_log(LOG_WARNING, "Unable to masquerade '%s' into '%s'\n", chan->name, target->name);
return -1;
}
return res;
}
/* Helper function that determines whether a channel is capable of being picked up */
static int can_pickup(struct ast_channel *chan)
{
if (!chan->pbx && (chan->_state == AST_STATE_RINGING || chan->_state == AST_STATE_RING))
return 1;
else
return 0;
}
/* Attempt to pick up specified extension with context */
static int pickup_by_exten(struct ast_channel *chan, char *exten, char *context)
{
int res = -1;
struct ast_channel *target = NULL;
while ((target = ast_channel_walk_locked(target))) {
if ((!strcasecmp(target->macroexten, exten) || !strcasecmp(target->exten, exten)) &&
!strcasecmp(target->dialcontext, context) &&
can_pickup(target)) {
res = pickup_do(chan, target);
ast_channel_unlock(target);
break;
}
ast_channel_unlock(target);
}
return res;
}
/* Attempt to pick up specified mark */
static int pickup_by_mark(struct ast_channel *chan, char *mark)
{
int res = -1;
const char *tmp = NULL;
struct ast_channel *target = NULL;
while ((target = ast_channel_walk_locked(target))) {
if ((tmp = pbx_builtin_getvar_helper(target, PICKUPMARK)) &&
!strcasecmp(tmp, mark) &&
can_pickup(target)) {
res = pickup_do(chan, target);
ast_channel_unlock(target);
break;
}
ast_channel_unlock(target);
}
return res;
}
/* Main application entry point */
static int pickup_exec(struct ast_channel *chan, void *data)
{
int res = 0;
struct ast_module_user *u = NULL;
char *tmp = ast_strdupa(data);
char *exten = NULL, *context = NULL;
struct localuser *u = NULL;
struct ast_channel *origin = NULL, *target = NULL;
char *tmp = NULL, *exten = NULL, *context = NULL;
char workspace[256] = "";
if (ast_strlen_zero(data)) {
ast_log(LOG_WARNING, "Pickup requires an argument (extension)!\n");
ast_log(LOG_WARNING, "Pickup requires an argument (extension) !\n");
return -1;
}
u = ast_module_user_add(chan);
LOCAL_USER_ADD(u);
/* Parse extension (and context if there) */
while (!ast_strlen_zero(tmp) && (exten = strsep(&tmp, "&"))) {
if ((context = strchr(exten, '@')))
*context++ = '\0';
if (context && !strcasecmp(context, PICKUPMARK)) {
if (!pickup_by_mark(chan, exten))
break;
} else {
if (!pickup_by_exten(chan, exten, context ? context : chan->context))
break;
}
ast_log(LOG_NOTICE, "No target channel found for %s.\n", exten);
/* Get the extension and context if present */
exten = data;
context = strchr(data, '@');
if (context) {
*context = '\0';
context++;
}
ast_module_user_remove(u);
/* Find a channel to pickup */
origin = ast_get_channel_by_exten_locked(exten, context);
if (origin && origin->cdr) {
ast_cdr_getvar(origin->cdr, "dstchannel", &tmp, workspace,
sizeof(workspace), 0);
if (tmp) {
/* We have a possible channel... now we need to find it! */
target = ast_get_channel_by_name_locked(tmp);
} else {
ast_log(LOG_DEBUG, "No target channel found.\n");
res = -1;
}
ast_mutex_unlock(&origin->lock);
} else {
if (origin)
ast_mutex_unlock(&origin->lock);
ast_log(LOG_DEBUG, "No originating channel found.\n");
}
if (res)
goto out;
if (target && (!target->pbx) && ((target->_state == AST_STATE_RINGING) || (target->_state == AST_STATE_RING))) {
ast_log(LOG_DEBUG, "Call pickup on chan '%s' by '%s'\n", target->name,
chan->name);
res = ast_answer(chan);
if (res) {
ast_log(LOG_WARNING, "Unable to answer '%s'\n", chan->name);
res = -1;
goto out;
}
res = ast_queue_control(chan, AST_CONTROL_ANSWER);
if (res) {
ast_log(LOG_WARNING, "Unable to queue answer on '%s'\n",
chan->name);
res = -1;
goto out;
}
res = ast_channel_masquerade(target, chan);
if (res) {
ast_log(LOG_WARNING, "Unable to masquerade '%s' into '%s'\n", chan->name, target->name);
res = -1;
goto out;
}
} else {
ast_log(LOG_DEBUG, "No call pickup possible...\n");
res = -1;
}
/* Done */
out:
if (target)
ast_mutex_unlock(&target->lock);
LOCAL_USER_REMOVE(u);
return res;
}
static int unload_module(void)
int unload_module(void)
{
int res;
res = ast_unregister_application(app);
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int load_module(void)
{
return ast_register_application(app, pickup_exec, synopsis, descrip);
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Directed Call Pickup Application");
char *description(void)
{
return (char *) tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

View File

@@ -19,21 +19,19 @@
/*! \file
*
* \brief Provide a directory of extensions
*
* \author Mark Spencer <markster@digium.com>
*
* \ingroup applications
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#include <stdio.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/lock.h"
#include "asterisk/file.h"
#include "asterisk/logger.h"
@@ -43,9 +41,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/config.h"
#include "asterisk/say.h"
#include "asterisk/utils.h"
#include "asterisk/app.h"
#ifdef ODBC_STORAGE
#ifdef USE_ODBC_STORAGE
#include <errno.h>
#include <sys/mman.h>
#include "asterisk/res_odbc.h"
@@ -55,6 +52,7 @@ static char odbc_table[80] = "voicemessages";
static char vmfmts[80] = "wav";
#endif
static char *tdesc = "Extension Directory";
static char *app = "Directory";
static char *synopsis = "Provide directory of voicemail extensions";
@@ -74,10 +72,8 @@ static char *descrip =
" extension that the user has selected, or when jumping to the\n"
" 'o' or 'a' extension.\n\n"
" Options:\n"
" e - In addition to the name, also read the extension number to the\n"
" caller before presenting dialing options.\n"
" f - Allow the caller to enter the first name of a user in the directory\n"
" instead of using the last name.\n";
" instead of using the last name.\n";
/* For simplicity, I'm keeping the format compatible with the voicemail config,
but i'm open to suggestions for isolating it */
@@ -87,8 +83,11 @@ static char *descrip =
/* How many digits to read in */
#define NUMDIGITS 3
STANDARD_LOCAL_USER;
#ifdef ODBC_STORAGE
LOCAL_USER_DECL;
#ifdef USE_ODBC_STORAGE
static void retrieve_file(char *dir)
{
int x = 0;
@@ -102,9 +101,9 @@ static void retrieve_file(char *dir)
char *c;
SQLLEN colsize;
char full_fn[256];
struct odbc_obj *obj;
obj = ast_odbc_request_obj(odbc_database, 1);
odbc_obj *obj;
obj = fetch_odbc_obj(odbc_database, 0);
if (obj) {
do {
ast_copy_string(fmt, vmfmts, sizeof(fmt));
@@ -127,7 +126,7 @@ static void retrieve_file(char *dir)
break;
}
SQLBindParameter(stmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, strlen(dir), 0, (void *)dir, 0, NULL);
res = ast_odbc_smart_execute(obj, stmt);
res = odbc_smart_execute(obj, stmt);
if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) {
ast_log(LOG_WARNING, "SQL Execute error!\n[%s]\n\n", sql);
SQLFreeHandle(SQL_HANDLE_STMT, stmt);
@@ -173,7 +172,6 @@ static void retrieve_file(char *dir)
}
SQLFreeHandle(SQL_HANDLE_STMT, stmt);
} while (0);
ast_odbc_release_obj(obj);
} else
ast_log(LOG_WARNING, "Failed to obtain database object for '%s'!\n", odbc_database);
if (fdm != MAP_FAILED)
@@ -184,11 +182,11 @@ static void retrieve_file(char *dir)
}
#endif
static char *convert(const char *lastname)
static char *convert(char *lastname)
{
char *tmp;
int lcount = 0;
tmp = ast_malloc(NUMDIGITS + 1);
tmp = malloc(NUMDIGITS + 1);
if (tmp) {
while((*lastname > 32) && lcount < NUMDIGITS) {
switch(toupper(*lastname)) {
@@ -258,79 +256,95 @@ static char *convert(const char *lastname)
* '1' for selected entry from directory
* '*' for skipped entry from directory
*/
static int play_mailbox_owner(struct ast_channel *chan, char *context,
char *dialcontext, char *ext, char *name, int readext,
int fromappvm)
{
static int play_mailbox_owner(struct ast_channel *chan, char *context, char *dialcontext, char *ext, char *name, int fromappvm) {
int res = 0;
int loop;
int loop = 3;
char fn[256];
char fn2[256];
/* Check for the VoiceMail2 greeting first */
snprintf(fn, sizeof(fn), "%s/voicemail/%s/%s/greet",
ast_config_AST_SPOOL_DIR, context, ext);
#ifdef ODBC_STORAGE
(char *)ast_config_AST_SPOOL_DIR, context, ext);
#ifdef USE_ODBC_STORAGE
retrieve_file(fn);
#endif
if (ast_fileexists(fn, NULL, chan->language) <= 0) {
/* no file, check for an old-style Voicemail greeting */
snprintf(fn, sizeof(fn), "%s/vm/%s/greet",
ast_config_AST_SPOOL_DIR, ext);
}
#ifdef ODBC_STORAGE
retrieve_file(fn);
/* Otherwise, check for an old-style Voicemail greeting */
snprintf(fn2, sizeof(fn2), "%s/vm/%s/greet",
(char *)ast_config_AST_SPOOL_DIR, ext);
#ifdef USE_ODBC_STORAGE
retrieve_file(fn2);
#endif
if (ast_fileexists(fn, NULL, chan->language) > 0) {
res = ast_stream_and_wait(chan, fn, chan->language, AST_DIGIT_ANY);
res = ast_streamfile(chan, fn, chan->language);
if (!res) {
res = ast_waitstream(chan, AST_DIGIT_ANY);
}
ast_stopstream(chan);
/* If Option 'e' was specified, also read the extension number with the name */
if (readext) {
ast_stream_and_wait(chan, "vm-extension", chan->language, AST_DIGIT_ANY);
res = ast_say_character_str(chan, ext, AST_DIGIT_ANY, chan->language);
} else if (ast_fileexists(fn2, NULL, chan->language) > 0) {
res = ast_streamfile(chan, fn2, chan->language);
if (!res) {
res = ast_waitstream(chan, AST_DIGIT_ANY);
}
ast_stopstream(chan);
} else {
res = ast_say_character_str(chan, S_OR(name, ext), AST_DIGIT_ANY, chan->language);
if (!ast_strlen_zero(name) && readext) {
ast_stream_and_wait(chan, "vm-extension", chan->language, AST_DIGIT_ANY);
res = ast_say_character_str(chan, ext, AST_DIGIT_ANY, chan->language);
}
res = ast_say_character_str(chan, !ast_strlen_zero(name) ? name : ext,
AST_DIGIT_ANY, chan->language);
}
#ifdef ODBC_STORAGE
#ifdef USE_ODBC_STORAGE
ast_filedelete(fn, NULL);
ast_filedelete(fn2, NULL);
#endif
for (loop = 3 ; loop > 0; loop--) {
if (!res)
res = ast_stream_and_wait(chan, "dir-instr", chan->language, AST_DIGIT_ANY);
if (!res)
while (loop) {
if (!res) {
res = ast_streamfile(chan, "dir-instr", chan->language);
}
if (!res) {
res = ast_waitstream(chan, AST_DIGIT_ANY);
}
if (!res) {
res = ast_waitfordigit(chan, 3000);
}
ast_stopstream(chan);
if (res < 0) /* User hungup, so jump out now */
break;
if (res == '1') { /* Name selected */
if (fromappvm) {
/* We still want to set the exten though */
ast_copy_string(chan->exten, ext, sizeof(chan->exten));
} else {
if (ast_goto_if_exists(chan, dialcontext, ext, 1)) {
ast_log(LOG_WARNING,
"Can't find extension '%s' in context '%s'. "
"Did you pass the wrong context to Directory?\n",
ext, dialcontext);
res = -1;
}
}
break;
if (res > -1) {
switch (res) {
case '1':
/* Name selected */
loop = 0;
if (fromappvm) {
/* We still want to set the exten */
ast_copy_string(chan->exten, ext, sizeof(chan->exten));
} else {
if (ast_goto_if_exists(chan, dialcontext, ext, 1)) {
ast_log(LOG_WARNING,
"Can't find extension '%s' in context '%s'. "
"Did you pass the wrong context to Directory?\n",
ext, dialcontext);
res = -1;
}
}
break;
case '*':
/* Skip to next match in list */
loop = 0;
break;
default:
/* Not '1', or '*', so decrement number of tries */
res = 0;
loop--;
break;
} /* end switch */
} /* end if */
else {
/* User hungup, so jump out now */
loop = 0;
}
if (res == '*') /* Skip to next match in list */
break;
/* Not '1', or '*', so decrement number of tries */
res = 0;
}
} /* end while */
return(res);
}
@@ -342,8 +356,8 @@ static struct ast_config *realtime_directory(char *context)
struct ast_category *cat;
struct ast_variable *var;
char *mailbox;
const char *fullname;
const char *hidefromdir;
char *fullname;
char *hidefromdir;
char tmp[100];
/* Load flat file config. */
@@ -375,8 +389,8 @@ static struct ast_config *realtime_directory(char *context)
ast_category_append(cfg, cat);
}
mailbox = NULL;
while ( (mailbox = ast_category_browse(rtdata, mailbox)) ) {
mailbox = ast_category_browse(rtdata, NULL);
while (mailbox) {
fullname = ast_variable_retrieve(rtdata, mailbox, "fullname");
hidefromdir = ast_variable_retrieve(rtdata, mailbox, "hidefromdir");
snprintf(tmp, sizeof(tmp), "no-password,%s,hidefromdir=%s",
@@ -387,24 +401,23 @@ static struct ast_config *realtime_directory(char *context)
ast_variable_append(cat, var);
else
ast_log(LOG_WARNING, "Out of memory adding mailbox '%s'\n", mailbox);
mailbox = ast_category_browse(rtdata, mailbox);
}
ast_config_destroy(rtdata);
return cfg;
}
static int do_directory(struct ast_channel *chan, struct ast_config *cfg, struct ast_config *ucfg, char *context, char *dialcontext, char digit, int last, int readext, int fromappvm)
static int do_directory(struct ast_channel *chan, struct ast_config *cfg, char *context, char *dialcontext, char digit, int last, int fromappvm)
{
/* Read in the first three digits.. "digit" is the first digit, already read */
char ext[NUMDIGITS + 1], *cat;
char ext[NUMDIGITS + 1];
char name[80] = "";
struct ast_variable *v;
int res;
int found=0;
int lastuserchoice = 0;
char *start, *conv, *stringp = NULL;
const char *pos;
int breakout = 0;
char *start, *pos, *conv,*stringp=NULL;
if (ast_strlen_zero(context)) {
ast_log(LOG_WARNING,
@@ -474,7 +487,7 @@ static int do_directory(struct ast_channel *chan, struct ast_config *cfg, struct
if (v) {
/* We have a match -- play a greeting if they have it */
res = play_mailbox_owner(chan, context, dialcontext, v->name, name, readext, fromappvm);
res = play_mailbox_owner(chan, context, dialcontext, v->name, name, fromappvm);
switch (res) {
case -1:
/* user pressed '1' but extension does not exist, or
@@ -501,66 +514,11 @@ static int do_directory(struct ast_channel *chan, struct ast_config *cfg, struct
}
}
if (!res && ucfg) {
/* Search users.conf for all names which start with those digits */
for (cat = ast_category_browse(ucfg, NULL); cat && !res ; cat = ast_category_browse(ucfg, cat)) {
if (!strcasecmp(cat, "general"))
continue;
if (!ast_true(ast_config_option(ucfg, cat, "hasdirectory")))
continue;
/* Find all candidate extensions */
if ((pos = ast_variable_retrieve(ucfg, cat, "fullname"))) {
ast_copy_string(name, pos, sizeof(name));
/* Grab the last name */
if (last && strrchr(pos,' '))
pos = strrchr(pos, ' ') + 1;
conv = convert(pos);
if (conv) {
if (!strcmp(conv, ext)) {
/* Match! */
found++;
/* We have a match -- play a greeting if they have it */
res = play_mailbox_owner(chan, context, dialcontext, cat, name, readext, fromappvm);
switch (res) {
case -1:
/* user pressed '1' but extension does not exist, or
* user hungup
*/
lastuserchoice = 0;
breakout = 1;
break;
case '1':
/* user pressed '1' and extensions exists;
play_mailbox_owner will already have done
a goto() on the channel
*/
lastuserchoice = res;
breakout = 1;
break;
case '*':
/* user pressed '*' to skip something found */
lastuserchoice = res;
breakout = 0;
res = 0;
break;
default:
breakout = 1;
break;
}
free(conv);
if (breakout)
break;
}
else
free(conv);
}
}
}
}
if (lastuserchoice != '1') {
res = ast_streamfile(chan, found ? "dir-nomore" : "dir-nomatch", chan->language);
if (found)
res = ast_streamfile(chan, "dir-nomore", chan->language);
else
res = ast_streamfile(chan, "dir-nomatch", chan->language);
if (!res)
res = 1;
return res;
@@ -573,96 +531,96 @@ static int do_directory(struct ast_channel *chan, struct ast_config *cfg, struct
static int directory_exec(struct ast_channel *chan, void *data)
{
int res = 0;
struct ast_module_user *u;
struct ast_config *cfg, *ucfg;
struct localuser *u;
struct ast_config *cfg;
int last = 1;
int readext = 0;
int fromappvm = 0;
const char *dirintro;
char *parse;
AST_DECLARE_APP_ARGS(args,
AST_APP_ARG(vmcontext);
AST_APP_ARG(dialcontext);
AST_APP_ARG(options);
);
char *context, *dialcontext, *dirintro, *options;
if (ast_strlen_zero(data)) {
ast_log(LOG_WARNING, "Directory requires an argument (context[,dialcontext])\n");
return -1;
}
u = ast_module_user_add(chan);
LOCAL_USER_ADD(u);
parse = ast_strdupa(data);
context = ast_strdupa(data);
dialcontext = strchr(context, '|');
if (dialcontext) {
*dialcontext = '\0';
dialcontext++;
options = strchr(dialcontext, '|');
if (options) {
*options = '\0';
options++;
if (strchr(options, 'f'))
last = 0;
if (strchr(options, 'v'))
fromappvm = 1;
}
} else
dialcontext = context;
AST_STANDARD_APP_ARGS(args, parse);
if (args.options) {
if (strchr(args.options, 'f'))
last = 0;
if (strchr(args.options, 'e'))
readext = 1;
if (strchr(args.options, 'v'))
fromappvm = 1;
}
if (ast_strlen_zero(args.dialcontext))
args.dialcontext = args.vmcontext;
cfg = realtime_directory(args.vmcontext);
cfg = realtime_directory(context);
if (!cfg) {
ast_log(LOG_ERROR, "Unable to read the configuration data!\n");
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return -1;
}
ucfg = ast_config_load("users.conf");
dirintro = ast_variable_retrieve(cfg, args.vmcontext, "directoryintro");
dirintro = ast_variable_retrieve(cfg, context, "directoryintro");
if (ast_strlen_zero(dirintro))
dirintro = ast_variable_retrieve(cfg, "general", "directoryintro");
if (ast_strlen_zero(dirintro))
dirintro = last ? "dir-intro" : "dir-intro-fn";
if (ast_strlen_zero(dirintro)) {
if (last)
dirintro = "dir-intro";
else
dirintro = "dir-intro-fn";
}
if (chan->_state != AST_STATE_UP)
res = ast_answer(chan);
for (;;) {
if (!res)
res = ast_stream_and_wait(chan, dirintro, chan->language, AST_DIGIT_ANY);
res = ast_streamfile(chan, dirintro, chan->language);
if (!res)
res = ast_waitstream(chan, AST_DIGIT_ANY);
ast_stopstream(chan);
if (!res)
res = ast_waitfordigit(chan, 5000);
if (res > 0) {
res = do_directory(chan, cfg, ucfg, args.vmcontext, args.dialcontext, res, last, readext, fromappvm);
res = do_directory(chan, cfg, context, dialcontext, res, last, fromappvm);
if (res > 0) {
res = ast_waitstream(chan, AST_DIGIT_ANY);
ast_stopstream(chan);
if (res >= 0)
if (res >= 0) {
continue;
}
}
}
break;
}
if (ucfg)
ast_config_destroy(ucfg);
ast_config_destroy(cfg);
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return res;
}
static int unload_module(void)
int unload_module(void)
{
int res;
res = ast_unregister_application(app);
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int load_module(void)
{
#ifdef ODBC_STORAGE
#ifdef USE_ODBC_STORAGE
struct ast_config *cfg = ast_config_load(VOICEMAIL_CONFIG);
const char *tmp;
char *tmp;
if (cfg) {
if ((tmp = ast_variable_retrieve(cfg, "general", "odbcstorage"))) {
@@ -682,4 +640,19 @@ static int load_module(void)
return ast_register_application(app, directory_exec, synopsis, descrip);
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Extension Directory");
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

View File

@@ -26,16 +26,16 @@
* \ingroup applications
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <sys/time.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/lock.h"
#include "asterisk/file.h"
#include "asterisk/logger.h"
@@ -47,14 +47,15 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/translate.h"
#include "asterisk/ulaw.h"
#include "asterisk/callerid.h"
#include "asterisk/stringfields.h"
static char *tdesc = "DISA (Direct Inward System Access) Application";
static char *app = "DISA";
static char *synopsis = "DISA (Direct Inward System Access)";
static char *descrip =
"DISA(<numeric passcode>[|<context>]) or DISA(<filename>)\n"
"DISA(<numeric passcode>[|<context>]) or disa(<filename>)\n"
"The DISA, Direct Inward System Access, application allows someone from \n"
"outside the telephone switch (PBX) to obtain an \"internal\" system \n"
"dialtone and to place calls from it as if they were placing a call from \n"
@@ -70,7 +71,7 @@ static char *descrip =
"Be aware that using this compromises the security of your PBX.\n\n"
"The arguments to this application (in extensions.conf) allow either\n"
"specification of a single global passcode (that everyone uses), or\n"
"individual passcodes contained in a file. It also allows specification\n"
"individual passcodes contained in a file. It also allow specification\n"
"of the context on which the user will be dialing. If no context is\n"
"specified, the DISA application defaults the context to \"disa\".\n"
"Presumably a normal system will have a special context set up\n"
@@ -92,9 +93,11 @@ static char *descrip =
"If login is successful, the application looks up the dialed number in\n"
"the specified (or default) context, and executes it if found.\n"
"If the user enters an invalid extension and extension \"i\" (invalid) \n"
"exists in the context, it will be used. Also, if you set the 5th argument\n"
"to 'NOANSWER', the DISA application will not answer initially.\n";
"exists in the context, it will be used.\n";
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
static void play_dialtone(struct ast_channel *chan, char *mailbox)
{
@@ -111,10 +114,10 @@ static void play_dialtone(struct ast_channel *chan, char *mailbox)
static int disa_exec(struct ast_channel *chan, void *data)
{
int i,j,k,x,did_ignore,special_noanswer;
int i,j,k,x,did_ignore;
int firstdigittimeout = 20000;
int digittimeout = 10000;
struct ast_module_user *u;
struct localuser *u;
char *tmp, exten[AST_MAX_EXTENSION],acctcode[20]="";
char pwline[256];
char ourcidname[256],ourcidnum[256];
@@ -128,15 +131,14 @@ static int disa_exec(struct ast_channel *chan, void *data)
AST_APP_ARG(context);
AST_APP_ARG(cid);
AST_APP_ARG(mailbox);
AST_APP_ARG(noanswer);
);
if (ast_strlen_zero(data)) {
ast_log(LOG_WARNING, "DISA requires an argument (passcode/passcode file)\n");
ast_log(LOG_WARNING, "disa requires an argument (passcode/passcode file)\n");
return -1;
}
u = ast_module_user_add(chan);
LOCAL_USER_ADD(u);
if (chan->pbx) {
firstdigittimeout = chan->pbx->rtimeout*1000;
@@ -144,13 +146,13 @@ static int disa_exec(struct ast_channel *chan, void *data)
}
if (ast_set_write_format(chan,AST_FORMAT_ULAW)) {
ast_log(LOG_WARNING, "Unable to set write format to Mu-law on %s\n", chan->name);
ast_module_user_remove(u);
ast_log(LOG_WARNING, "Unable to set write format to Mu-law on %s\n",chan->name);
LOCAL_USER_REMOVE(u);
return -1;
}
if (ast_set_read_format(chan,AST_FORMAT_ULAW)) {
ast_log(LOG_WARNING, "Unable to set read format to Mu-law on %s\n", chan->name);
ast_module_user_remove(u);
ast_log(LOG_WARNING, "Unable to set read format to Mu-law on %s\n",chan->name);
LOCAL_USER_REMOVE(u);
return -1;
}
@@ -158,6 +160,11 @@ static int disa_exec(struct ast_channel *chan, void *data)
ast_log(LOG_DEBUG, "Responsetimeout: %d\n", firstdigittimeout);
tmp = ast_strdupa(data);
if (!tmp) {
ast_log(LOG_ERROR, "Out of memory\n");
LOCAL_USER_REMOVE(u);
return -1;
}
AST_STANDARD_APP_ARGS(args, tmp);
@@ -168,15 +175,10 @@ static int disa_exec(struct ast_channel *chan, void *data)
ast_log(LOG_DEBUG, "Mailbox: %s\n",args.mailbox);
special_noanswer = 0;
if ((!args.noanswer) || strcmp(args.noanswer,"NOANSWER"))
{
if (chan->_state != AST_STATE_UP) {
/* answer */
ast_answer(chan);
}
} else special_noanswer = 1;
if (chan->_state != AST_STATE_UP) {
/* answer */
ast_answer(chan);
}
i = k = x = 0; /* k is 0 for pswd entry, 1 for ext entry */
did_ignore = 0;
exten[0] = 0;
@@ -196,7 +198,8 @@ static int disa_exec(struct ast_channel *chan, void *data)
for (;;) {
/* if outa time, give em reorder */
if (ast_tvdiff_ms(ast_tvnow(), lastdigittime) >
((k&2) ? digittimeout : firstdigittimeout)) {
((k&2) ? digittimeout : firstdigittimeout))
{
ast_log(LOG_DEBUG,"DISA %s entry timeout on chan %s\n",
((k&1) ? "extension" : "password"),chan->name);
break;
@@ -207,68 +210,72 @@ static int disa_exec(struct ast_channel *chan, void *data)
}
f = ast_read(chan);
if (f == NULL) {
ast_module_user_remove(u);
if (f == NULL)
{
LOCAL_USER_REMOVE(u);
return -1;
}
if ((f->frametype == AST_FRAME_CONTROL) &&
(f->subclass == AST_CONTROL_HANGUP)) {
(f->subclass == AST_CONTROL_HANGUP))
{
ast_frfree(f);
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return -1;
}
if (f->frametype == AST_FRAME_VOICE) {
ast_frfree(f);
continue;
}
/* if not DTMF, just do it again */
if (f->frametype != AST_FRAME_DTMF) {
/* if not DTMF, just do it again */
if (f->frametype != AST_FRAME_DTMF)
{
ast_frfree(f);
continue;
}
j = f->subclass; /* save digit */
ast_frfree(f);
if (i == 0) {
if (i == 0)
{
k|=2; /* We have the first digit */
ast_playtones_stop(chan);
}
lastdigittime = ast_tvnow();
/* got a DTMF tone */
if (i < AST_MAX_EXTENSION) { /* if still valid number of digits */
if (!(k&1)) { /* if in password state */
if (j == '#') { /* end of password */
if (i < AST_MAX_EXTENSION) /* if still valid number of digits */
{
if (!(k&1)) /* if in password state */
{
if (j == '#') /* end of password */
{
/* see if this is an integer */
if (sscanf(args.passcode,"%d",&j) < 1) { /* nope, it must be a filename */
if (sscanf(args.passcode,"%30d",&j) < 1)
{ /* nope, it must be a filename */
fp = fopen(args.passcode,"r");
if (!fp) {
if (!fp)
{
ast_log(LOG_WARNING,"DISA password file %s not found on chan %s\n",args.passcode,chan->name);
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return -1;
}
}
pwline[0] = 0;
while(fgets(pwline,sizeof(pwline) - 1,fp)) {
if (!pwline[0])
continue;
while(fgets(pwline,sizeof(pwline) - 1,fp))
{
if (!pwline[0]) continue;
if (pwline[strlen(pwline) - 1] == '\n')
pwline[strlen(pwline) - 1] = 0;
if (!pwline[0])
continue;
/* skip comments */
if (pwline[0] == '#')
continue;
if (pwline[0] == ';')
continue;
if (!pwline[0]) continue;
/* skip comments */
if (pwline[0] == '#') continue;
if (pwline[0] == ';') continue;
AST_STANDARD_APP_ARGS(args, pwline);
ast_log(LOG_DEBUG, "Mailbox: %s\n",args.mailbox);
/* password must be in valid format (numeric) */
if (sscanf(args.passcode,"%d", &j) < 1)
continue;
/* if we got it */
/* password must be in valid format (numeric) */
if (sscanf(args.passcode,"%30d",&j) < 1) continue;
/* if we got it */
if (!strcmp(exten,args.passcode)) {
if (ast_strlen_zero(args.context))
args.context = "disa";
@@ -276,11 +283,12 @@ static int disa_exec(struct ast_channel *chan, void *data)
args.mailbox = "";
break;
}
}
}
fclose(fp);
}
/* compare the two */
if (strcmp(exten,args.passcode)) {
}
/* compare the two */
if (strcmp(exten,args.passcode))
{
ast_log(LOG_WARNING,"DISA on chan %s got bad password %s\n",chan->name,exten);
goto reorder;
@@ -294,16 +302,15 @@ static int disa_exec(struct ast_channel *chan, void *data)
exten[sizeof(acctcode)] = 0;
ast_copy_string(acctcode, exten, sizeof(acctcode));
exten[0] = 0;
ast_log(LOG_DEBUG,"Successful DISA log-in on chan %s\n", chan->name);
ast_log(LOG_DEBUG,"Successful DISA log-in on chan %s\n",chan->name);
continue;
}
}
exten[i++] = j; /* save digit */
exten[i] = 0;
if (!(k&1))
continue; /* if getting password, continue doing it */
/* if this exists */
if (!(k&1)) continue; /* if getting password, continue doing it */
/* if this exists */
if (ast_ignore_pattern(args.context, exten)) {
play_dialtone(chan, "");
@@ -314,7 +321,7 @@ static int disa_exec(struct ast_channel *chan, void *data)
did_ignore = 0;
}
/* if can do some more, do it */
/* if can do some more, do it */
if (!ast_matchmore_extension(chan,args.context,exten,1, chan->cid.cid_num)) {
break;
}
@@ -334,18 +341,18 @@ static int disa_exec(struct ast_channel *chan, void *data)
if (!recheck || ast_exists_extension(chan, args.context, exten, 1, chan->cid.cid_num)) {
ast_playtones_stop(chan);
/* We're authenticated and have a target extension */
if (!ast_strlen_zero(args.cid)) {
if (!ast_strlen_zero(args.cid))
{
ast_callerid_split(args.cid, ourcidname, sizeof(ourcidname), ourcidnum, sizeof(ourcidnum));
ast_set_callerid(chan, ourcidnum, ourcidname, ourcidnum);
}
if (!ast_strlen_zero(acctcode))
ast_string_field_set(chan, accountcode, acctcode);
ast_copy_string(chan->accountcode, acctcode, sizeof(chan->accountcode));
if (special_noanswer) flags.flags = 0;
ast_cdr_reset(chan->cdr, &flags);
ast_explicit_goto(chan, args.context, exten, 1);
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return 0;
}
}
@@ -357,7 +364,8 @@ reorder:
ast_indicate(chan,AST_CONTROL_CONGESTION);
/* something is invalid, give em reorder for several seconds */
time(&rstart);
while(time(NULL) < rstart + 10) {
while(time(NULL) < rstart + 10)
{
if (ast_waitfor(chan, -1) < 0)
break;
f = ast_read(chan);
@@ -366,24 +374,39 @@ reorder:
ast_frfree(f);
}
ast_playtones_stop(chan);
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return -1;
}
static int unload_module(void)
int unload_module(void)
{
int res;
res = ast_unregister_application(app);
ast_module_user_hangup_all();
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int load_module(void)
{
return ast_register_application(app, disa_exec, synopsis, descrip);
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "DISA (Direct Inward System Access) Application");
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key(void)
{
return ASTERISK_GPL_KEY;
}

View File

@@ -22,21 +22,19 @@
/*! \file
*
* \brief Application to dump channel variables
*
* \author Anthony Minessale <anthmct@yahoo.com>
*
*
* \ingroup applications
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/file.h"
#include "asterisk/logger.h"
#include "asterisk/channel.h"
@@ -47,27 +45,30 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/lock.h"
#include "asterisk/utils.h"
static char *tdesc = "Dump Info About The Calling Channel";
static char *app = "DumpChan";
static char *synopsis = "Dump Info About The Calling Channel";
static char *desc =
" DumpChan([<min_verbose_level>])\n"
"Displays information on channel and listing of all channel\n"
"variables. If min_verbose_level is specified, output is only\n"
"displayed when the verbose level is currently set to that number\n"
"or greater. \n";
" DumpChan([<min_verbose_level>])\n"
"Displays information on channel and listing of all channel\n"
"variables. If min_verbose_level is specified, output is only\n"
"displayed when the verbose level is currently set to that number\n"
"or greater. \n";
STANDARD_LOCAL_USER;
static int serialize_showchan(struct ast_channel *c, char *buf, size_t size)
LOCAL_USER_DECL;
static int ast_serialize_showchan(struct ast_channel *c, char *buf, size_t size)
{
struct timeval now;
long elapsed_seconds = 0;
int hour = 0, min = 0, sec = 0;
char cgrp[BUFSIZ/2];
char pgrp[BUFSIZ/2];
char formatbuf[BUFSIZ/2];
long elapsed_seconds=0;
int hour=0, min=0, sec=0;
char cgrp[256];
char pgrp[256];
now = ast_tvnow();
memset(buf, 0, size);
memset(buf,0,size);
if (!c)
return 0;
@@ -85,12 +86,11 @@ static int serialize_showchan(struct ast_channel *c, char *buf, size_t size)
"CallerID= %s\n"
"CallerIDName= %s\n"
"DNIDDigits= %s\n"
"RDNIS= %s\n"
"State= %s (%d)\n"
"Rings= %d\n"
"NativeFormat= %s\n"
"WriteFormat= %s\n"
"ReadFormat= %s\n"
"NativeFormat= %d\n"
"WriteFormat= %d\n"
"ReadFormat= %d\n"
"1stFileDescriptor= %d\n"
"Framesin= %d %s\n"
"Framesout= %d %s\n"
@@ -105,20 +105,19 @@ static int serialize_showchan(struct ast_channel *c, char *buf, size_t size)
"Data= %s\n"
"Blocking_in= %s\n",
c->name,
c->tech->type,
c->type,
c->uniqueid,
S_OR(c->cid.cid_num, "(N/A)"),
S_OR(c->cid.cid_name, "(N/A)"),
S_OR(c->cid.cid_dnid, "(N/A)"),
S_OR(c->cid.cid_rdnis, "(N/A)"),
(c->cid.cid_num ? c->cid.cid_num : "(N/A)"),
(c->cid.cid_name ? c->cid.cid_name : "(N/A)"),
(c->cid.cid_dnid ? c->cid.cid_dnid : "(N/A)" ),
ast_state2str(c->_state),
c->_state,
c->rings,
ast_getformatname_multiple(formatbuf, sizeof(formatbuf), c->nativeformats),
ast_getformatname_multiple(formatbuf, sizeof(formatbuf), c->writeformat),
ast_getformatname_multiple(formatbuf, sizeof(formatbuf), c->readformat),
c->fds[0], c->fin & ~DEBUGCHAN_FLAG, (c->fin & DEBUGCHAN_FLAG) ? " (DEBUGGED)" : "",
c->fout & ~DEBUGCHAN_FLAG, (c->fout & DEBUGCHAN_FLAG) ? " (DEBUGGED)" : "", (long)c->whentohangup,
c->nativeformats,
c->writeformat,
c->readformat,
c->fds[0], c->fin & 0x7fffffff, (c->fin & 0x80000000) ? " (DEBUGGED)" : "",
c->fout & 0x7fffffff, (c->fout & 0x80000000) ? " (DEBUGGED)" : "", (long)c->whentohangup,
hour,
min,
sec,
@@ -128,7 +127,7 @@ static int serialize_showchan(struct ast_channel *c, char *buf, size_t size)
ast_print_group(cgrp, sizeof(cgrp), c->callgroup),
ast_print_group(pgrp, sizeof(pgrp), c->pickupgroup),
( c->appl ? c->appl : "(N/A)" ),
( c-> data ? S_OR(c->data, "(Empty)") : "(None)"),
( c-> data ? (!ast_strlen_zero(c->data) ? c->data : "(Empty)") : "(None)"),
(ast_test_flag(c, AST_FLAG_BLOCKING) ? c->blockproc : "(Not Blocking)"));
return 0;
@@ -136,41 +135,59 @@ static int serialize_showchan(struct ast_channel *c, char *buf, size_t size)
static int dumpchan_exec(struct ast_channel *chan, void *data)
{
struct ast_module_user *u;
char vars[BUFSIZ * 4];
int res=0;
struct localuser *u;
char vars[1024];
char info[1024];
int level = 0;
static char *line = "================================================================================";
u = ast_module_user_add(chan);
LOCAL_USER_ADD(u);
if (!ast_strlen_zero(data))
if (!ast_strlen_zero(data)) {
level = atoi(data);
}
pbx_builtin_serialize_variables(chan, vars, sizeof(vars));
serialize_showchan(chan, info, sizeof(info));
ast_serialize_showchan(chan, info, sizeof(info));
if (option_verbose >= level)
ast_verbose("\nDumping Info For Channel: %s:\n%s\nInfo:\n%s\nVariables:\n%s%s\n", chan->name, line, info, vars, line);
ast_verbose("\nDumping Info For Channel: %s:\n%s\nInfo:\n%s\nVariables:\n%s%s\n",chan->name, line, info, vars, line);
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return 0;
return res;
}
static int unload_module(void)
int unload_module(void)
{
int res;
res = ast_unregister_application(app);
ast_module_user_hangup_all();
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int load_module(void)
{
return ast_register_application(app, dumpchan_exec, synopsis, desc);
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Dump Info About The Calling Channel");
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

View File

@@ -19,21 +19,19 @@
/*! \file
*
* \brief Echo application -- play back what you hear to evaluate latency
*
* \author Mark Spencer <markster@digium.com>
*
* \ingroup applications
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/lock.h"
#include "asterisk/file.h"
#include "asterisk/logger.h"
@@ -41,64 +39,85 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/pbx.h"
#include "asterisk/module.h"
static char *tdesc = "Simple Echo Application";
static char *app = "Echo";
static char *synopsis = "Echo audio, video, or DTMF back to the calling party";
static char *synopsis = "Echo audio read back to the user";
static char *descrip =
" Echo(): This application will echo any audio, video, or DTMF frames read from\n"
"the calling channel back to itself. If the DTMF digit '#' is received, the\n"
"application will exit.\n";
" Echo(): Echo audio read from channel back to the channel. \n"
"User can exit the application by either pressing the '#' key, \n"
"or hanging up.\n";
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
static int echo_exec(struct ast_channel *chan, void *data)
{
int res = -1;
int format;
struct ast_module_user *u;
u = ast_module_user_add(chan);
format = ast_best_codec(chan->nativeformats);
ast_set_write_format(chan, format);
ast_set_read_format(chan, format);
while (ast_waitfor(chan, -1) > -1) {
struct ast_frame *f = ast_read(chan);
int res=-1;
struct localuser *u;
struct ast_frame *f;
LOCAL_USER_ADD(u);
ast_set_write_format(chan, ast_best_codec(chan->nativeformats));
ast_set_read_format(chan, ast_best_codec(chan->nativeformats));
/* Do our thing here */
while(ast_waitfor(chan, -1) > -1) {
f = ast_read(chan);
if (!f)
break;
f->delivery.tv_sec = 0;
f->delivery.tv_usec = 0;
if (ast_write(chan, f)) {
ast_frfree(f);
goto end;
}
if ((f->frametype == AST_FRAME_DTMF) && (f->subclass == '#')) {
res = 0;
ast_frfree(f);
goto end;
if (f->frametype == AST_FRAME_VOICE) {
if (ast_write(chan, f))
break;
} else if (f->frametype == AST_FRAME_VIDEO) {
if (ast_write(chan, f))
break;
} else if (f->frametype == AST_FRAME_DTMF) {
if (f->subclass == '#') {
res = 0;
break;
} else
if (ast_write(chan, f))
break;
}
ast_frfree(f);
}
end:
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return res;
}
static int unload_module(void)
int unload_module(void)
{
int res;
res = ast_unregister_application(app);
ast_module_user_hangup_all();
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int load_module(void)
{
return ast_register_application(app, echo_exec, synopsis, descrip);
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Simple Echo Application");
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

270
apps/app_enumlookup.c Normal file
View File

@@ -0,0 +1,270 @@
/*
* Asterisk -- An open source telephony toolkit.
*
* Copyright (C) 1999 - 2005, Digium, Inc.
*
* Mark Spencer <markster@digium.com>
*
* See http://www.asterisk.org for more information about
* the Asterisk project. Please do not directly contact
* any of the maintainers of this project for assistance;
* the project provides a web site, mailing lists and IRC
* channels for your use.
*
* This program is free software, distributed under the terms of
* the GNU General Public License Version 2. See the LICENSE file
* at the top of the source tree.
*/
/*! \file
*
* \brief Enumlookup - lookup entry in ENUM
*
* \ingroup applications
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <ctype.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/lock.h"
#include "asterisk/file.h"
#include "asterisk/logger.h"
#include "asterisk/channel.h"
#include "asterisk/pbx.h"
#include "asterisk/options.h"
#include "asterisk/config.h"
#include "asterisk/module.h"
#include "asterisk/enum.h"
#include "asterisk/utils.h"
#include "asterisk/app.h"
#include "asterisk/options.h"
static char *tdesc = "ENUM Lookup";
static char *app = "EnumLookup";
static char *synopsis = "Lookup number in ENUM";
static char *descrip =
" EnumLookup(exten[|option]): Looks up an extension via ENUM and sets\n"
"the variable 'ENUM'. For VoIP URIs this variable will \n"
"look like 'TECHNOLOGY/URI' with the appropriate technology.\n"
"Currently, the enumservices SIP, H323, IAX, IAX2 and TEL are recognized. \n"
"\nReturns status in the ENUMSTATUS channel variable:\n"
" ERROR Failed to do a lookup\n"
" <tech> Technology of the successful lookup: SIP, H323, IAX, IAX2 or TEL\n"
" BADURI Got URI Asterisk does not understand.\n"
" The option string may contain zero or the following character:\n"
" 'j' -- jump to +101 priority if the lookup isn't successful.\n"
" and jump to +51 priority on a TEL entry.\n";
#define ENUM_CONFIG "enum.conf"
static char h323driver[80] = "";
#define H323DRIVERDEFAULT "H323"
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
/*--- enumlookup_exec: Look up number in ENUM and return result */
static int enumlookup_exec(struct ast_channel *chan, void *data)
{
int res=0,priority_jump=0;
char tech[80];
char dest[80];
char tmp[256];
char *c,*t = NULL;
static int dep_warning=0;
struct localuser *u;
char *parse;
AST_DECLARE_APP_ARGS(args,
AST_APP_ARG(d);
AST_APP_ARG(o);
);
if (ast_strlen_zero(data)) {
ast_log(LOG_WARNING, "EnumLookup requires an argument (extension)\n");
return -1;
}
if (!dep_warning) {
ast_log(LOG_WARNING, "The application EnumLookup is deprecated. Please use the ENUMLOOKUP() function instead.\n");
dep_warning = 1;
}
LOCAL_USER_ADD(u);
parse = ast_strdupa(data);
if (!parse) {
ast_log(LOG_ERROR, "Out of memory!\n");
LOCAL_USER_REMOVE(u);
return -1;
}
AST_STANDARD_APP_ARGS(args, parse);
tech[0] = '\0';
dest[0] = '\0';
if (args.o) {
if (strchr(args.o, 'j'))
priority_jump = 1;
}
res = ast_get_enum(chan, args.d, dest, sizeof(dest), tech, sizeof(tech), NULL, NULL);
if (!res) { /* Failed to do a lookup */
if (priority_jump || option_priority_jumping) {
/* Look for a "busy" place */
ast_goto_if_exists(chan, chan->context, chan->exten, chan->priority + 101);
}
pbx_builtin_setvar_helper(chan, "ENUMSTATUS", "ERROR");
LOCAL_USER_REMOVE(u);
return 0;
}
pbx_builtin_setvar_helper(chan, "ENUMSTATUS", tech);
/* Parse it out */
if (res > 0) {
if (!strcasecmp(tech, "SIP")) {
c = dest;
if (!strncmp(c, "sip:", 4))
c += 4;
snprintf(tmp, sizeof(tmp), "SIP/%s", c);
pbx_builtin_setvar_helper(chan, "ENUM", tmp);
} else if (!strcasecmp(tech, "h323")) {
c = dest;
if (!strncmp(c, "h323:", 5))
c += 5;
snprintf(tmp, sizeof(tmp), "%s/%s", h323driver, c);
/* do a s!;.*!! on the H323 URI */
t = strchr(c,';');
if (t)
*t = 0;
pbx_builtin_setvar_helper(chan, "ENUM", tmp);
} else if (!strcasecmp(tech, "iax")) {
c = dest;
if (!strncmp(c, "iax:", 4))
c += 4;
snprintf(tmp, sizeof(tmp), "IAX/%s", c);
pbx_builtin_setvar_helper(chan, "ENUM", tmp);
} else if (!strcasecmp(tech, "iax2")) {
c = dest;
if (!strncmp(c, "iax2:", 5))
c += 5;
snprintf(tmp, sizeof(tmp), "IAX2/%s", c);
pbx_builtin_setvar_helper(chan, "ENUM", tmp);
} else if (!strcasecmp(tech, "tel")) {
c = dest;
if (!strncmp(c, "tel:", 4))
c += 4;
if (c[0] != '+') {
ast_log(LOG_NOTICE, "tel: uri must start with a \"+\" (got '%s')\n", c);
res = 0;
} else {
/* now copy over the number, skipping all non-digits and stop at ; or NULL */
t = tmp;
while( *c && (*c != ';') && (t - tmp < (sizeof(tmp) - 1))) {
if (isdigit(*c))
*t++ = *c;
c++;
}
*t = 0;
pbx_builtin_setvar_helper(chan, "ENUM", tmp);
ast_log(LOG_NOTICE, "tel: ENUM set to \"%s\"\n", tmp);
if (priority_jump || option_priority_jumping) {
if (ast_goto_if_exists(chan, chan->context, chan->exten, chan->priority + 51))
res = 0;
}
}
} else if (!ast_strlen_zero(tech)) {
ast_log(LOG_NOTICE, "Don't know how to handle technology '%s'\n", tech);
pbx_builtin_setvar_helper(chan, "ENUMSTATUS", "BADURI");
res = 0;
}
}
LOCAL_USER_REMOVE(u);
return 0;
}
/*--- load_config: Load enum.conf and find out how to handle H.323 */
static int load_config(void)
{
struct ast_config *cfg;
char *s;
cfg = ast_config_load(ENUM_CONFIG);
if (cfg) {
if (!(s=ast_variable_retrieve(cfg, "general", "h323driver"))) {
strncpy(h323driver, H323DRIVERDEFAULT, sizeof(h323driver) - 1);
} else {
strncpy(h323driver, s, sizeof(h323driver) - 1);
}
ast_config_destroy(cfg);
return 0;
}
ast_log(LOG_NOTICE, "No ENUM Config file, using defaults\n");
return 0;
}
/*--- unload_module: Unload this application from PBX */
int unload_module(void)
{
int res;
res = ast_unregister_application(app);
STANDARD_HANGUP_LOCALUSERS;
return res;
}
/*--- load_module: Load this application into PBX */
int load_module(void)
{
int res;
res = ast_register_application(app, enumlookup_exec, synopsis, descrip);
if (!res)
res = load_config();
return res;
}
/*--- reload: Reload configuration file */
int reload(void)
{
return load_config();
}
/*--- description: Describe module */
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

127
apps/app_eval.c Normal file
View File

@@ -0,0 +1,127 @@
/*
* Asterisk -- An open source telephony toolkit.
*
* Copyright (c) 2004 - 2005, Tilghman Lesher. All rights reserved.
*
* Tilghman Lesher <app_eval__v001@the-tilghman.com>
*
* This code is released by the author with no restrictions on usage.
*
* See http://www.asterisk.org for more information about
* the Asterisk project. Please do not directly contact
* any of the maintainers of this project for assistance;
* the project provides a web site, mailing lists and IRC
* channels for your use.
*
*/
/*! \file
* \brief Eval application
*
* \author Tilghman Lesher <app_eval__v001@the-tilghman.com>
*
* \ingroup applications
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/file.h"
#include "asterisk/logger.h"
#include "asterisk/options.h"
#include "asterisk/channel.h"
#include "asterisk/pbx.h"
#include "asterisk/module.h"
/* Maximum length of any variable */
#define MAXRESULT 1024
static char *tdesc = "Reevaluates strings";
static char *app_eval = "Eval";
static char *eval_synopsis = "Evaluates a string";
static char *eval_descrip =
"Usage: Eval(newvar=somestring)\n"
" Normally Asterisk evaluates variables inline. But what if you want to\n"
"store variable offsets in a database, to be evaluated later? Eval is\n"
"the answer, by allowing a string to be evaluated twice in the dialplan,\n"
"the first time as part of the normal dialplan, and the second using Eval.\n";
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
static int eval_exec(struct ast_channel *chan, void *data)
{
int res=0;
struct localuser *u;
char *s, *newvar=NULL, tmp[MAXRESULT];
static int dep_warning = 0;
LOCAL_USER_ADD(u);
if (!dep_warning) {
ast_log(LOG_WARNING, "This application has been deprecated in favor of the dialplan function, EVAL\n");
dep_warning = 1;
}
/* Check and parse arguments */
if (data) {
s = ast_strdupa((char *)data);
if (s) {
newvar = strsep(&s, "=");
if (newvar && (newvar[0] != '\0')) {
memset(tmp, 0, MAXRESULT);
pbx_substitute_variables_helper(chan, s, tmp, MAXRESULT - 1);
pbx_builtin_setvar_helper(chan, newvar, tmp);
}
} else {
ast_log(LOG_ERROR, "Out of memory\n");
res = -1;
}
}
LOCAL_USER_REMOVE(u);
return res;
}
int unload_module(void)
{
int res;
res = ast_unregister_application(app_eval);
STANDARD_HANGUP_LOCALUSERS;
return res;
}
int load_module(void)
{
return ast_register_application(app_eval, eval_exec, eval_synopsis, eval_descrip);
}
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

View File

@@ -2,9 +2,8 @@
* Asterisk -- An open source telephony toolkit.
*
* Copyright (c) 2004 - 2005, Tilghman Lesher. All rights reserved.
* Portions copyright (c) 2006, Philipp Dunkel.
*
* Tilghman Lesher <app_exec__v002@the-tilghman.com>
* Tilghman Lesher <app_exec__v001@the-tilghman.com>
*
* This code is released by the author with no restrictions on usage.
*
@@ -20,21 +19,20 @@
*
* \brief Exec application
*
* \author Tilghman Lesher <app_exec__v002@the-tilghman.com>
* \author Philipp Dunkel <philipp.dunkel@ebox.at>
* \author Tilghman Lesher <app_exec__v001@the-tilghman.com>
*
* \ingroup applications
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/file.h"
#include "asterisk/logger.h"
#include "asterisk/options.h"
@@ -45,177 +43,93 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
/* Maximum length of any variable */
#define MAXRESULT 1024
/*! Note
*
* The key difference between these two apps is exit status. In a
* nutshell, Exec tries to be transparent as possible, behaving
* in exactly the same way as if the application it calls was
* directly invoked from the dialplan.
*
* TryExec, on the other hand, provides a way to execute applications
* and catch any possible fatal error without actually fatally
* affecting the dialplan.
*/
static char *tdesc = "Executes applications";
static char *app_exec = "Exec";
static char *exec_synopsis = "Executes dialplan application";
static char *exec_synopsis = "Executes internal application";
static char *exec_descrip =
"Usage: Exec(appname(arguments))\n"
" Allows an arbitrary application to be invoked even when not\n"
"hardcoded into the dialplan. If the underlying application\n"
"terminates the dialplan, or if the application cannot be found,\n"
"Exec will terminate the dialplan.\n"
" To invoke external applications, see the application System.\n"
" If you would like to catch any error instead, see TryExec.\n";
static char *app_tryexec = "TryExec";
static char *tryexec_synopsis = "Executes dialplan application, always returning";
static char *tryexec_descrip =
"Usage: TryExec(appname(arguments))\n"
" Allows an arbitrary application to be invoked even when not\n"
"hardcoded into the dialplan. To invoke external applications\n"
"see the application System. Always returns to the dialplan.\n"
"The channel variable TRYSTATUS will be set to:\n"
" SUCCESS if the application returned zero\n"
" FAILED if the application returned non-zero\n"
" NOAPP if the application was not found or was not specified\n";
"see the application System. Returns whatever value the\n"
"app returns or a non-zero value if the app cannot be found.\n";
static char *app_execif = "ExecIf";
static char *execif_synopsis = "Executes dialplan application, conditionally";
static char *execif_descrip =
"Usage: ExecIF (<expr>|<app>|<data>)\n"
"If <expr> is true, execute and return the result of <app>(<data>).\n"
"If <expr> is true, but <app> is not found, then the application\n"
"will return a non-zero value.\n";
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
static int exec_exec(struct ast_channel *chan, void *data)
{
int res=0;
struct ast_module_user *u;
char *s, *appname, *endargs, args[MAXRESULT] = "";
struct localuser *u;
char *s, *appname, *endargs, args[MAXRESULT];
struct ast_app *app;
u = ast_module_user_add(chan);
LOCAL_USER_ADD(u);
memset(args, 0, MAXRESULT);
/* Check and parse arguments */
if (data) {
s = ast_strdupa(data);
appname = strsep(&s, "(");
s = ast_strdupa((char *)data);
if (s) {
endargs = strrchr(s, ')');
if (endargs)
*endargs = '\0';
pbx_substitute_variables_helper(chan, s, args, MAXRESULT - 1);
}
if (appname) {
app = pbx_findapp(appname);
if (app) {
res = pbx_exec(chan, app, args);
} else {
ast_log(LOG_WARNING, "Could not find application (%s)\n", appname);
res = -1;
appname = strsep(&s, "(");
if (s) {
endargs = strrchr(s, ')');
if (endargs)
*endargs = '\0';
pbx_substitute_variables_helper(chan, s, args, MAXRESULT - 1);
}
if (appname) {
app = pbx_findapp(appname);
if (app) {
res = pbx_exec(chan, app, args, 1);
} else {
ast_log(LOG_WARNING, "Could not find application (%s)\n", appname);
res = -1;
}
}
} else {
ast_log(LOG_ERROR, "Out of memory\n");
res = -1;
}
}
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return res;
}
static int tryexec_exec(struct ast_channel *chan, void *data)
{
int res=0;
struct ast_module_user *u;
char *s, *appname, *endargs, args[MAXRESULT] = "";
struct ast_app *app;
u = ast_module_user_add(chan);
/* Check and parse arguments */
if (data) {
s = ast_strdupa(data);
appname = strsep(&s, "(");
if (s) {
endargs = strrchr(s, ')');
if (endargs)
*endargs = '\0';
pbx_substitute_variables_helper(chan, s, args, MAXRESULT - 1);
}
if (appname) {
app = pbx_findapp(appname);
if (app) {
res = pbx_exec(chan, app, args);
pbx_builtin_setvar_helper(chan, "TRYSTATUS", res ? "FAILED" : "SUCCESS");
} else {
ast_log(LOG_WARNING, "Could not find application (%s)\n", appname);
pbx_builtin_setvar_helper(chan, "TRYSTATUS", "NOAPP");
}
}
}
ast_module_user_remove(u);
return 0;
}
static int execif_exec(struct ast_channel *chan, void *data)
{
int res = 0;
struct ast_module_user *u;
char *myapp = NULL;
char *mydata = NULL;
char *expr = NULL;
struct ast_app *app = NULL;
u = ast_module_user_add(chan);
expr = ast_strdupa(data);
if ((myapp = strchr(expr,'|'))) {
*myapp = '\0';
myapp++;
if ((mydata = strchr(myapp,'|'))) {
*mydata = '\0';
mydata++;
} else
mydata = "";
if (pbx_checkcondition(expr)) {
if ((app = pbx_findapp(myapp))) {
res = pbx_exec(chan, app, mydata);
} else {
ast_log(LOG_WARNING, "Count not find application! (%s)\n", myapp);
res = -1;
}
}
} else {
ast_log(LOG_ERROR,"Invalid Syntax.\n");
res = -1;
}
ast_module_user_remove(u);
return res;
}
static int unload_module(void)
int unload_module(void)
{
int res;
res = ast_unregister_application(app_exec);
res |= ast_unregister_application(app_tryexec);
res |= ast_unregister_application(app_execif);
ast_module_user_hangup_all();
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int load_module(void)
{
int res = ast_register_application(app_exec, exec_exec, exec_synopsis, exec_descrip);
res |= ast_register_application(app_tryexec, tryexec_exec, tryexec_synopsis, tryexec_descrip);
res |= ast_register_application(app_execif, execif_exec, execif_synopsis, execif_descrip);
return ast_register_application(app_exec, exec_exec, exec_synopsis, exec_descrip);
}
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Executes dialplan applications");
char *key()
{
return ASTERISK_GPL_KEY;
}

View File

@@ -22,19 +22,10 @@
/*! \file
*
* \brief External IVR application interface
*
* \author Kevin P. Fleming <kpfleming@digium.com>
*
* \note Portions taken from the file-based music-on-hold work
* created by Anthony Minessale II in res_musiconhold.c
*
*
* \ingroup applications
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
@@ -42,6 +33,10 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <errno.h>
#include <signal.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/lock.h"
#include "asterisk/file.h"
#include "asterisk/logger.h"
@@ -50,9 +45,10 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/module.h"
#include "asterisk/linkedlists.h"
#include "asterisk/app.h"
#include "asterisk/utils.h"
#include "asterisk/options.h"
static const char *tdesc = "External IVR Interface Application";
static const char *app = "ExternalIVR";
static const char *synopsis = "Interfaces with an external IVR application";
@@ -65,7 +61,7 @@ static const char *descrip =
"will receive all DTMF events received on the channel, and notification\n"
"if the channel is hung up. The application will not be forcibly terminated\n"
"when the channel is hung up.\n"
"See doc/externalivr.txt for a protocol specification.\n";
"See doc/README.externalivr for a protocol specification.\n";
/* XXX the parser in gcc 2.95 gets confused if you don't put a space between 'name' and the comma */
#define ast_chan_log(level, channel, format, ...) ast_log(level, "%s: " format, channel->name , ## __VA_ARGS__)
@@ -75,8 +71,9 @@ struct playlist_entry {
char filename[1];
};
struct ivr_localuser {
struct localuser {
struct ast_channel *chan;
struct localuser *next;
AST_LIST_HEAD(playlist, playlist_entry) playlist;
AST_LIST_HEAD(finishlist, playlist_entry) finishlist;
int abort_current_sound;
@@ -84,9 +81,10 @@ struct ivr_localuser {
int option_autoclear;
};
LOCAL_USER_DECL;
struct gen_state {
struct ivr_localuser *u;
struct localuser *u;
struct ast_filestream *stream;
struct playlist_entry *current;
int sample_queue;
@@ -109,10 +107,12 @@ static void send_child_event(FILE *handle, const char event, const char *data,
static void *gen_alloc(struct ast_channel *chan, void *params)
{
struct ivr_localuser *u = params;
struct localuser *u = params;
struct gen_state *state;
if (!(state = ast_calloc(1, sizeof(*state))))
state = calloc(1, sizeof(*state));
if (!state)
return NULL;
state->u = u;
@@ -141,7 +141,7 @@ static void gen_release(struct ast_channel *chan, void *data)
/* caller has the playlist locked */
static int gen_nextfile(struct gen_state *state)
{
struct ivr_localuser *u = state->u;
struct localuser *u = state->u;
char *file_to_stream;
u->abort_current_sound = 0;
@@ -173,7 +173,7 @@ static int gen_nextfile(struct gen_state *state)
static struct ast_frame *gen_readframe(struct gen_state *state)
{
struct ast_frame *f = NULL;
struct ivr_localuser *u = state->u;
struct localuser *u = state->u;
if (u->abort_current_sound ||
(u->playing_silence && AST_LIST_FIRST(&u->playlist))) {
@@ -231,8 +231,10 @@ static struct ast_generator gen =
static struct playlist_entry *make_entry(const char *filename)
{
struct playlist_entry *entry;
if (!(entry = ast_calloc(1, sizeof(*entry) + strlen(filename) + 10))) /* XXX why 10 ? */
entry = calloc(1, sizeof(*entry) + strlen(filename) + 10);
if (!entry)
return NULL;
strcpy(entry->filename, filename);
@@ -242,7 +244,7 @@ static struct playlist_entry *make_entry(const char *filename)
static int app_exec(struct ast_channel *chan, void *data)
{
struct ast_module_user *lu;
struct localuser *u = NULL;
struct playlist_entry *entry;
const char *args = data;
int child_stdin[2] = { 0,0 };
@@ -257,28 +259,28 @@ static int app_exec(struct ast_channel *chan, void *data)
FILE *child_commands = NULL;
FILE *child_errors = NULL;
FILE *child_events = NULL;
struct ivr_localuser foo = {
.playlist = AST_LIST_HEAD_INIT_VALUE,
.finishlist = AST_LIST_HEAD_INIT_VALUE,
};
struct ivr_localuser *u = &foo;
sigset_t fullset, oldset;
lu = ast_module_user_add(chan);
LOCAL_USER_ADD(u);
sigfillset(&fullset);
pthread_sigmask(SIG_BLOCK, &fullset, &oldset);
AST_LIST_HEAD_INIT(&u->playlist);
AST_LIST_HEAD_INIT(&u->finishlist);
u->abort_current_sound = 0;
u->chan = chan;
if (ast_strlen_zero(args)) {
ast_log(LOG_WARNING, "ExternalIVR requires a command to execute\n");
ast_module_user_remove(lu);
return -1;
goto exit;
}
buf = ast_strdupa(data);
if (!buf) {
ast_log(LOG_ERROR, "Out of memory!\n");
LOCAL_USER_REMOVE(u);
return -1;
}
argc = ast_app_separate_args(buf, '|', argv, sizeof(argv) / sizeof(argv[0]));
@@ -320,7 +322,7 @@ static int app_exec(struct ast_channel *chan, void *data)
signal(SIGPIPE, SIG_DFL);
pthread_sigmask(SIG_UNBLOCK, &fullset, NULL);
if (ast_opt_high_priority)
if (option_highpriority)
ast_set_priority(0);
dup2(child_stdin[0], STDIN_FILENO);
@@ -554,25 +556,42 @@ static int app_exec(struct ast_channel *chan, void *data)
while ((entry = AST_LIST_REMOVE_HEAD(&u->playlist, list)))
free(entry);
ast_module_user_remove(lu);
LOCAL_USER_REMOVE(u);
return res;
}
static int unload_module(void)
int unload_module(void)
{
int res;
res = ast_unregister_application(app);
ast_module_user_hangup_all();
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int load_module(void)
{
return ast_register_application(app, app_exec, synopsis, descrip);
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "External IVR Interface Application");
char *description(void)
{
return (char *) tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

View File

@@ -19,16 +19,10 @@
/*! \file
*
* \brief Connect to festival
*
* \author Christos Ricudis <ricudis@itc.auth.gr>
*
* \ingroup applications
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <sys/types.h>
#include <stdlib.h>
#include <unistd.h>
@@ -46,6 +40,10 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <fcntl.h>
#include <ctype.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/file.h"
#include "asterisk/logger.h"
#include "asterisk/channel.h"
@@ -59,6 +57,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#define FESTIVAL_CONFIG "festival.conf"
static char *tdesc = "Simple Festival Interface";
static char *app = "Festival";
static char *synopsis = "Say text to the user";
@@ -68,6 +68,9 @@ static char *descrip =
"play it to the user, allowing any given interrupt keys to immediately terminate and return\n"
"the value, or 'any' to allow any number back (useful in dialplan)\n";
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
static char *socket_receive_file_to_buff(int fd,int *size)
{
@@ -82,10 +85,7 @@ static char *socket_receive_file_to_buff(int fd,int *size)
char c;
bufflen = 1024;
if (!(buff = ast_malloc(bufflen)))
{
/* TODO: Handle memory allocation failure */
}
buff = (char *)malloc(bufflen);
*size=0;
for (k=0; file_stuff_key[k] != '\0';)
@@ -95,10 +95,7 @@ static char *socket_receive_file_to_buff(int fd,int *size)
if ((*size)+k+1 >= bufflen)
{ /* +1 so you can add a NULL if you want */
bufflen += bufflen/4;
if (!(buff = ast_realloc(buff, bufflen)))
{
/* TODO: Handle memory allocation failure */
}
buff = (char *)realloc(buff,bufflen);
}
if (file_stuff_key[k] == c)
k++;
@@ -146,7 +143,7 @@ static int send_waveform_to_fd(char *waveform, int length, int fd) {
if (x != fd)
close(x);
}
if (ast_opt_high_priority)
if (option_highpriority)
ast_set_priority(0);
signal(SIGPIPE, SIG_DFL);
pthread_sigmask(SIG_UNBLOCK, &fullset, NULL);
@@ -178,9 +175,7 @@ static int send_waveform_to_channel(struct ast_channel *chan, char *waveform, in
struct ast_frame f;
char offset[AST_FRIENDLY_OFFSET];
char frdata[2048];
} myf = {
.f = { 0, },
};
} myf;
if (pipe(fds)) {
ast_log(LOG_WARNING, "Unable to create pipe\n");
@@ -240,6 +235,7 @@ static int send_waveform_to_channel(struct ast_channel *chan, char *waveform, in
myf.f.subclass = AST_FORMAT_SLINEAR;
myf.f.datalen = res;
myf.f.samples = res / 2;
myf.f.mallocd = 0;
myf.f.offset = AST_FRIENDLY_OFFSET;
myf.f.src = __PRETTY_FUNCTION__;
myf.f.data = myf.frdata;
@@ -282,16 +278,16 @@ static int festival_exec(struct ast_channel *chan, void *vdata)
{
int usecache;
int res=0;
struct ast_module_user *u;
struct localuser *u;
struct sockaddr_in serv_addr;
struct hostent *serverhost;
struct ast_hostent ahp;
int fd;
FILE *fs;
const char *host;
const char *cachedir;
const char *temp;
const char *festivalcommand;
char *host;
char *cachedir;
char *temp;
char *festivalcommand;
int port=1314;
int n;
char ack[4];
@@ -314,19 +310,18 @@ static int festival_exec(struct ast_channel *chan, void *vdata)
char *data;
char *intstr;
struct ast_config *cfg;
char *newfestivalcommand;
if (ast_strlen_zero(vdata)) {
ast_log(LOG_WARNING, "festival requires an argument (text)\n");
return -1;
}
u = ast_module_user_add(chan);
LOCAL_USER_ADD(u);
cfg = ast_config_load(FESTIVAL_CONFIG);
if (!cfg) {
ast_log(LOG_WARNING, "No such configuration file %s\n", FESTIVAL_CONFIG);
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return -1;
}
if (!(host = ast_variable_retrieve(cfg, "general", "host"))) {
@@ -347,25 +342,15 @@ static int festival_exec(struct ast_channel *chan, void *vdata)
}
if (!(festivalcommand = ast_variable_retrieve(cfg, "general", "festivalcommand"))) {
festivalcommand = "(tts_textasterisk \"%s\" 'file)(quit)\n";
} else { /* This else parses the festivalcommand that we're sent from the config file for \n's, etc */
int i, j;
newfestivalcommand = alloca(strlen(festivalcommand) + 1);
for (i = 0, j = 0; i < strlen(festivalcommand); i++) {
if (festivalcommand[i] == '\\' && festivalcommand[i + 1] == 'n') {
newfestivalcommand[j++] = '\n';
i++;
} else if (festivalcommand[i] == '\\') {
newfestivalcommand[j++] = festivalcommand[i + 1];
i++;
} else
newfestivalcommand[j++] = festivalcommand[i];
}
newfestivalcommand[j] = '\0';
festivalcommand = newfestivalcommand;
}
data = ast_strdupa(vdata);
if (!data) {
ast_log(LOG_ERROR, "Out of memery\n");
ast_config_destroy(cfg);
LOCAL_USER_REMOVE(u);
return -1;
}
intstr = strchr(data, '|');
if (intstr) {
@@ -383,7 +368,7 @@ static int festival_exec(struct ast_channel *chan, void *vdata)
if (fd < 0) {
ast_log(LOG_WARNING,"festival_client: can't get socket\n");
ast_config_destroy(cfg);
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return -1;
}
memset(&serv_addr, 0, sizeof(serv_addr));
@@ -393,7 +378,7 @@ static int festival_exec(struct ast_channel *chan, void *vdata)
if (serverhost == (struct hostent *)0) {
ast_log(LOG_WARNING,"festival_client: gethostbyname failed\n");
ast_config_destroy(cfg);
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return -1;
}
memmove(&serv_addr.sin_addr,serverhost->h_addr, serverhost->h_length);
@@ -404,7 +389,7 @@ static int festival_exec(struct ast_channel *chan, void *vdata)
if (connect(fd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) != 0) {
ast_log(LOG_WARNING,"festival_client: connect to server failed\n");
ast_config_destroy(cfg);
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return -1;
}
@@ -496,7 +481,7 @@ static int festival_exec(struct ast_channel *chan, void *vdata)
ast_log(LOG_WARNING,"Unable to read from cache/festival fd\n");
close(fd);
ast_config_destroy(cfg);
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return -1;
}
n += read_data;
@@ -523,31 +508,41 @@ static int festival_exec(struct ast_channel *chan, void *vdata)
} while (strcmp(ack,"OK\n") != 0);
close(fd);
ast_config_destroy(cfg);
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return res;
}
static int unload_module(void)
int unload_module(void)
{
int res;
res = ast_unregister_application(app);
ast_module_user_hangup_all();
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int load_module(void)
{
struct ast_config *cfg = ast_config_load(FESTIVAL_CONFIG);
if (!cfg) {
ast_log(LOG_WARNING, "No such configuration file %s\n", FESTIVAL_CONFIG);
return AST_MODULE_LOAD_DECLINE;
}
ast_config_destroy(cfg);
return ast_register_application(app, festival_exec, synopsis, descrip);
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Simple Festival Interface");
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

View File

@@ -19,26 +19,24 @@
/*! \file
*
* \brief App to flash a zap trunk
*
* \author Mark Spencer <markster@digium.com>
*
* \ingroup applications
*/
/*** MODULEINFO
<depend>zaptel</depend>
***/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <sys/ioctl.h>
#include <zaptel/zaptel.h>
#ifdef __linux__
#include <linux/zaptel.h>
#else
#include <zaptel.h>
#endif /* __linux__ */
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/lock.h"
#include "asterisk/file.h"
@@ -50,6 +48,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/image.h"
#include "asterisk/options.h"
static char *tdesc = "Flash zap trunk application";
static char *app = "Flash";
static char *synopsis = "Flashes a Zap Trunk";
@@ -59,6 +59,9 @@ static char *descrip =
"people who want to perform transfers and such via AGI and is generally\n"
"quite useless oths application will only work on Zap trunks.\n";
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
static inline int zt_wait_event(int fd)
{
@@ -74,10 +77,10 @@ static int flash_exec(struct ast_channel *chan, void *data)
{
int res = -1;
int x;
struct ast_module_user *u;
struct localuser *u;
struct zt_params ztp;
u = ast_module_user_add(chan);
if (!strcasecmp(chan->tech->type, "Zap")) {
LOCAL_USER_ADD(u);
if (!strcasecmp(chan->type, "Zap")) {
memset(&ztp, 0, sizeof(ztp));
res = ioctl(chan->fds[0], ZT_GET_PARAMS, &ztp);
if (!res) {
@@ -100,25 +103,39 @@ static int flash_exec(struct ast_channel *chan, void *data)
ast_log(LOG_WARNING, "Unable to get parameters of %s: %s\n", chan->name, strerror(errno));
} else
ast_log(LOG_WARNING, "%s is not a Zap channel\n", chan->name);
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return res;
}
static int unload_module(void)
int unload_module(void)
{
int res;
res = ast_unregister_application(app);
ast_module_user_hangup_all();
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int load_module(void)
{
return ast_register_application(app, flash_exec, synopsis, descrip);
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Flash channel application");
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

File diff suppressed because it is too large Load Diff

View File

@@ -18,23 +18,19 @@
/*! \file
*
* \brief Fork CDR application
*
* \author Anthony Minessale anthmct@yahoo.com
*
* \note Development of this app Sponsored/Funded by TAAN Softworks Corp
*
* \ingroup applications
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/file.h"
#include "asterisk/logger.h"
#include "asterisk/channel.h"
@@ -42,15 +38,21 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/cdr.h"
#include "asterisk/module.h"
static char *tdesc = "Fork The CDR into 2 separate entities.";
static char *app = "ForkCDR";
static char *synopsis =
"Forks the Call Data Record";
static char *descrip =
" ForkCDR([options]): Causes the Call Data Record to fork an additional\n"
"cdr record starting from the time of the fork call\n"
"If the option 'v' is passed all cdr variables will be passed along also.\n";
"If the option 'v' is passed all cdr variables will be passed along also.\n"
"";
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
static void ast_cdr_fork(struct ast_channel *chan)
{
struct ast_cdr *cdr;
@@ -77,38 +79,53 @@ static void ast_cdr_fork(struct ast_channel *chan)
static int forkcdr_exec(struct ast_channel *chan, void *data)
{
int res = 0;
struct ast_module_user *u;
struct localuser *u;
if (!chan->cdr) {
ast_log(LOG_WARNING, "Channel does not have a CDR\n");
return 0;
}
u = ast_module_user_add(chan);
LOCAL_USER_ADD(u);
if (!ast_strlen_zero(data))
ast_set2_flag(chan->cdr, strchr(data, 'v'), AST_CDR_FLAG_KEEP_VARS);
ast_cdr_fork(chan);
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return res;
}
static int unload_module(void)
int unload_module(void)
{
int res;
res = ast_unregister_application(app);
ast_module_user_hangup_all();
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int load_module(void)
{
return ast_register_application(app, forkcdr_exec, synopsis, descrip);
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Fork The CDR into 2 separate entities");
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

View File

@@ -19,21 +19,19 @@
/*! \file
*
* \brief Get ADSI CPE ID
*
* \author Mark Spencer <markster@digium.com>
*
* \ingroup applications
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/lock.h"
#include "asterisk/file.h"
#include "asterisk/logger.h"
@@ -43,6 +41,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/adsi.h"
#include "asterisk/options.h"
static char *tdesc = "Get ADSI CPE ID";
static char *app = "GetCPEID";
static char *synopsis = "Get ADSI CPE ID";
@@ -51,6 +51,9 @@ static char *descrip =
" GetCPEID: Obtains and displays ADSI CPE ID and other information in order\n"
"to properly setup zapata.conf for on-hook operations.\n";
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
static int cpeid_setstatus(struct ast_channel *chan, char *stuff[], int voice)
{
@@ -60,42 +63,43 @@ static int cpeid_setstatus(struct ast_channel *chan, char *stuff[], int voice)
for (x=0;x<4;x++)
tmp[x] = stuff[x];
tmp[4] = NULL;
return ast_adsi_print(chan, tmp, justify, voice);
return adsi_print(chan, tmp, justify, voice);
}
static int cpeid_exec(struct ast_channel *chan, void *idata)
{
int res=0;
struct ast_module_user *u;
struct localuser *u;
unsigned char cpeid[4];
int gotgeometry = 0;
int gotcpeid = 0;
int width, height, buttons;
char *data[4];
unsigned int x;
char data[4][80];
char *stuff[4];
u = ast_module_user_add(chan);
for (x = 0; x < 4; x++)
data[x] = alloca(80);
strcpy(data[0], "** CPE Info **");
strcpy(data[1], "Identifying CPE...");
strcpy(data[2], "Please wait...");
res = ast_adsi_load_session(chan, NULL, 0, 1);
LOCAL_USER_ADD(u);
stuff[0] = data[0];
stuff[1] = data[1];
stuff[2] = data[2];
stuff[3] = data[3];
memset(data, 0, sizeof(data));
strncpy(stuff[0], "** CPE Info **", sizeof(data[0]) - 1);
strncpy(stuff[1], "Identifying CPE...", sizeof(data[1]) - 1);
strncpy(stuff[2], "Please wait...", sizeof(data[2]) - 1);
res = adsi_load_session(chan, NULL, 0, 1);
if (res > 0) {
cpeid_setstatus(chan, data, 0);
res = ast_adsi_get_cpeid(chan, cpeid, 0);
cpeid_setstatus(chan, stuff, 0);
res = adsi_get_cpeid(chan, cpeid, 0);
if (res > 0) {
gotcpeid = 1;
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "Got CPEID of '%02x:%02x:%02x:%02x' on '%s'\n", cpeid[0], cpeid[1], cpeid[2], cpeid[3], chan->name);
}
if (res > -1) {
strcpy(data[1], "Measuring CPE...");
strcpy(data[2], "Please wait...");
cpeid_setstatus(chan, data, 0);
res = ast_adsi_get_cpeinfo(chan, &width, &height, &buttons, 0);
strncpy(stuff[1], "Measuring CPE...", sizeof(data[1]) - 1);
strncpy(stuff[2], "Please wait...", sizeof(data[2]) - 1);
cpeid_setstatus(chan, stuff, 0);
res = adsi_get_cpeinfo(chan, &width, &height, &buttons, 0);
if (res > -1) {
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "CPE has %d lines, %d columns, and %d buttons on '%s'\n", height, width, buttons, chan->name);
@@ -104,15 +108,15 @@ static int cpeid_exec(struct ast_channel *chan, void *idata)
}
if (res > -1) {
if (gotcpeid)
snprintf(data[1], 80, "CPEID: %02x:%02x:%02x:%02x", cpeid[0], cpeid[1], cpeid[2], cpeid[3]);
snprintf(stuff[1], sizeof(data[1]), "CPEID: %02x:%02x:%02x:%02x", cpeid[0], cpeid[1], cpeid[2], cpeid[3]);
else
strcpy(data[1], "CPEID Unknown");
strncpy(stuff[1], "CPEID Unknown", sizeof(data[1]) - 1);
if (gotgeometry)
snprintf(data[2], 80, "Geom: %dx%d, %d buttons", width, height, buttons);
snprintf(stuff[2], sizeof(data[2]), "Geom: %dx%d, %d buttons", width, height, buttons);
else
strcpy(data[2], "Geometry unknown");
strcpy(data[3], "Press # to exit");
cpeid_setstatus(chan, data, 1);
strncpy(stuff[2], "Geometry unknown", sizeof(data[2]) - 1);
strncpy(stuff[3], "Press # to exit", sizeof(data[3]) - 1);
cpeid_setstatus(chan, stuff, 1);
for(;;) {
res = ast_waitfordigit(chan, 1000);
if (res < 0)
@@ -122,27 +126,42 @@ static int cpeid_exec(struct ast_channel *chan, void *idata)
break;
}
}
ast_adsi_unload_session(chan);
adsi_unload_session(chan);
}
}
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return res;
}
static int unload_module(void)
int unload_module(void)
{
int res;
res = ast_unregister_application(app);
ast_module_user_hangup_all();
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int load_module(void)
{
return ast_register_application(app, cpeid_exec, synopsis, descrip);
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Get ADSI CPE ID");
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

338
apps/app_groupcount.c Normal file
View File

@@ -0,0 +1,338 @@
/*
* Asterisk -- An open source telephony toolkit.
*
* Copyright (C) 1999 - 2005, Digium, Inc.
*
* Mark Spencer <markster@digium.com>
*
* See http://www.asterisk.org for more information about
* the Asterisk project. Please do not directly contact
* any of the maintainers of this project for assistance;
* the project provides a web site, mailing lists and IRC
* channels for your use.
*
* This program is free software, distributed under the terms of
* the GNU General Public License Version 2. See the LICENSE file
* at the top of the source tree.
*/
/*! \file
*
* \brief Group Manipulation Applications
*
* \ingroup applications
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <regex.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/file.h"
#include "asterisk/logger.h"
#include "asterisk/options.h"
#include "asterisk/channel.h"
#include "asterisk/pbx.h"
#include "asterisk/module.h"
#include "asterisk/utils.h"
#include "asterisk/cli.h"
#include "asterisk/app.h"
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
static int group_count_exec(struct ast_channel *chan, void *data)
{
int res = 0;
int count;
struct localuser *u;
char group[80] = "";
char category[80] = "";
char ret[80] = "";
char *grp;
static int deprecation_warning = 0;
LOCAL_USER_ADD(u);
if (!deprecation_warning) {
ast_log(LOG_WARNING, "The GetGroupCount application has been deprecated, please use the GROUP_COUNT function.\n");
deprecation_warning = 1;
}
ast_app_group_split_group(data, group, sizeof(group), category, sizeof(category));
if (ast_strlen_zero(group)) {
grp = pbx_builtin_getvar_helper(chan, category);
if (!ast_strlen_zero(grp))
ast_copy_string(group, grp, sizeof(group));
}
count = ast_app_group_get_count(group, category);
snprintf(ret, sizeof(ret), "%d", count);
pbx_builtin_setvar_helper(chan, "GROUPCOUNT", ret);
LOCAL_USER_REMOVE(u);
return res;
}
static int group_match_count_exec(struct ast_channel *chan, void *data)
{
int res = 0;
int count;
struct localuser *u;
char group[80] = "";
char category[80] = "";
char ret[80] = "";
static int deprecation_warning = 0;
LOCAL_USER_ADD(u);
if (!deprecation_warning) {
ast_log(LOG_WARNING, "The GetGroupMatchCount application has been deprecated, please use the GROUP_MATCH_COUNT function.\n");
deprecation_warning = 1;
}
ast_app_group_split_group(data, group, sizeof(group), category, sizeof(category));
if (!ast_strlen_zero(group)) {
count = ast_app_group_match_get_count(group, category);
snprintf(ret, sizeof(ret), "%d", count);
pbx_builtin_setvar_helper(chan, "GROUPCOUNT", ret);
}
LOCAL_USER_REMOVE(u);
return res;
}
static int group_set_exec(struct ast_channel *chan, void *data)
{
int res = 0;
struct localuser *u;
static int deprecation_warning = 0;
LOCAL_USER_ADD(u);
if (!deprecation_warning) {
ast_log(LOG_WARNING, "The SetGroup application has been deprecated, please use the GROUP() function.\n");
deprecation_warning = 1;
}
if (ast_app_group_set_channel(chan, data))
ast_log(LOG_WARNING, "SetGroup requires an argument (group name)\n");
LOCAL_USER_REMOVE(u);
return res;
}
static int group_check_exec(struct ast_channel *chan, void *data)
{
int res = 0;
int max, count;
struct localuser *u;
char limit[80]="";
char category[80]="";
static int deprecation_warning = 0;
char *parse;
int priority_jump = 0;
AST_DECLARE_APP_ARGS(args,
AST_APP_ARG(max);
AST_APP_ARG(options);
);
LOCAL_USER_ADD(u);
if (!deprecation_warning) {
ast_log(LOG_WARNING, "The CheckGroup application has been deprecated, please use a combination of the GotoIf application and the GROUP_COUNT() function.\n");
deprecation_warning = 1;
}
if (ast_strlen_zero(data)) {
ast_log(LOG_WARNING, "CheckGroup requires an argument(max[@category][|options])\n");
return 0;
}
if (!(parse = ast_strdupa(data))) {
ast_log(LOG_WARNING, "Memory Error!\n");
LOCAL_USER_REMOVE(u);
return -1;
}
AST_STANDARD_APP_ARGS(args, parse);
if (args.options) {
if (strchr(args.options, 'j'))
priority_jump = 1;
}
if (ast_strlen_zero(args.max)) {
ast_log(LOG_WARNING, "CheckGroup requires an argument(max[@category][|options])\n");
return res;
}
ast_app_group_split_group(args.max, limit, sizeof(limit), category, sizeof(category));
if ((sscanf(limit, "%30d", &max) == 1) && (max > -1)) {
count = ast_app_group_get_count(pbx_builtin_getvar_helper(chan, category), category);
if (count > max) {
pbx_builtin_setvar_helper(chan, "CHECKGROUPSTATUS", "OVERMAX");
if (priority_jump || option_priority_jumping) {
if (!ast_goto_if_exists(chan, chan->context, chan->exten, chan->priority + 101))
res = -1;
}
} else
pbx_builtin_setvar_helper(chan, "CHECKGROUPSTATUS", "OK");
} else
ast_log(LOG_WARNING, "CheckGroup requires a positive integer argument (max)\n");
LOCAL_USER_REMOVE(u);
return res;
}
static int group_show_channels(int fd, int argc, char *argv[])
{
#define FORMAT_STRING "%-25s %-20s %-20s\n"
int numchans = 0;
struct ast_group_info *gi = NULL;
regex_t regexbuf;
int havepattern = 0;
if (argc < 3 || argc > 4)
return RESULT_SHOWUSAGE;
if (argc == 4) {
if (regcomp(&regexbuf, argv[3], REG_EXTENDED | REG_NOSUB))
return RESULT_SHOWUSAGE;
havepattern = 1;
}
ast_cli(fd, FORMAT_STRING, "Channel", "Group", "Category");
ast_app_group_list_lock();
gi = ast_app_group_list_head();
while (gi) {
if (!havepattern || !regexec(&regexbuf, gi->group, 0, NULL, 0)) {
ast_cli(fd, FORMAT_STRING, gi->chan->name, gi->group, (ast_strlen_zero(gi->category) ? "(default)" : gi->category));
numchans++;
}
gi = AST_LIST_NEXT(gi, list);
}
ast_app_group_list_unlock();
if (havepattern)
regfree(&regexbuf);
ast_cli(fd, "%d active channel%s\n", numchans, (numchans != 1) ? "s" : "");
return RESULT_SUCCESS;
#undef FORMAT_STRING
}
static char *tdesc = "Group Management Routines";
static char *app_group_count = "GetGroupCount";
static char *app_group_set = "SetGroup";
static char *app_group_check = "CheckGroup";
static char *app_group_match_count = "GetGroupMatchCount";
static char *group_count_synopsis = "Get the channel count of a group";
static char *group_set_synopsis = "Set the channel's group";
static char *group_check_synopsis = "Check the channel count of a group against a limit";
static char *group_match_count_synopsis = "Get the channel count of all groups that match a pattern";
static char *group_count_descrip =
"Usage: GetGroupCount([groupname][@category])\n"
" Calculates the group count for the specified group, or uses\n"
"the current channel's group if not specifed (and non-empty).\n"
"Stores result in GROUPCOUNT. \n"
"Note: This application has been deprecated, please use the function\n"
"GROUP_COUNT.\n";
static char *group_set_descrip =
"Usage: SetGroup(groupname[@category])\n"
" Sets the channel group to the specified value. Equivalent to\n"
"Set(GROUP=group). Always returns 0.\n";
static char *group_check_descrip =
"Usage: CheckGroup(max[@category][|options])\n"
" Checks that the current number of total channels in the\n"
"current channel's group does not exceed 'max'. If the number\n"
"does not exceed 'max', we continue to the next step. \n"
" The option string may contain zero of the following character:\n"
" 'j' -- jump to n+101 priority if the number does in fact exceed max,\n"
" and priority n+101 exists. Execuation then continues at that\n"
" step, otherwise -1 is returned.\n"
" This application sets the following channel variable upon successful completion:\n"
" CHECKGROUPSTATUS The status of the check that the current channel's\n"
" group does not exceed 'max'. It's value is one of\n"
" OK | OVERMAX \n";
static char *group_match_count_descrip =
"Usage: GetGroupMatchCount(groupmatch[@category])\n"
" Calculates the group count for all groups that match the specified\n"
"pattern. Uses standard regular expression matching (see regex(7)).\n"
"Stores result in GROUPCOUNT. Always returns 0.\n"
"Note: This application has been deprecated, please use the function\n"
"GROUP_MATCH_COUNT.\n";
static char show_channels_usage[] =
"Usage: group show channels [pattern]\n"
" Lists all currently active channels with channel group(s) specified.\n Optional regular expression pattern is matched to group names for each channel.\n";
static struct ast_cli_entry cli_show_channels =
{ { "group", "show", "channels", NULL }, group_show_channels, "Show active channels with group(s)", show_channels_usage};
int unload_module(void)
{
int res;
res = ast_cli_unregister(&cli_show_channels);
res |= ast_unregister_application(app_group_count);
res |= ast_unregister_application(app_group_set);
res |= ast_unregister_application(app_group_check);
res |= ast_unregister_application(app_group_match_count);
STANDARD_HANGUP_LOCALUSERS;
return res;
}
int load_module(void)
{
int res;
res = ast_register_application(app_group_count, group_count_exec, group_count_synopsis, group_count_descrip);
res |= ast_register_application(app_group_set, group_set_exec, group_set_synopsis, group_set_descrip);
res |= ast_register_application(app_group_check, group_check_exec, group_check_synopsis, group_check_descrip);
res |= ast_register_application(app_group_match_count, group_match_count_exec, group_match_count_synopsis, group_match_count_descrip);
res |= ast_cli_register(&cli_show_channels);
return res;
}
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

View File

@@ -1,7 +1,7 @@
/*
* Asterisk -- An open source telephony toolkit.
*
* Changes Copyright (c) 2004 - 2006 Todd Freeman <freeman@andrews.edu>
* Changes Copyright (c) 2004 - 2005 Todd Freeman <freeman@andrews.edu>
*
* 95% based on HasNewVoicemail by:
*
@@ -24,18 +24,9 @@
*
* \brief HasVoicemail application
*
* \author Todd Freeman <freeman@andrews.edu>
*
* \note 95% based on HasNewVoicemail by
* Tilghman Lesher <asterisk-hasnewvoicemail-app@the-tilghman.com>
*
* \ingroup applications
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
@@ -43,6 +34,10 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <dirent.h>
#include <sys/types.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/file.h"
#include "asterisk/logger.h"
#include "asterisk/channel.h"
@@ -52,7 +47,14 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/utils.h"
#include "asterisk/app.h"
#include "asterisk/options.h"
#ifdef USE_ODBC_STORAGE
#include "asterisk/res_odbc.h"
static char odbc_database[80];
static char odbc_table[80];
#endif
static char *tdesc = "Indicator for whether a voice mailbox has messages in a given folder.";
static char *app_hasvoicemail = "HasVoicemail";
static char *hasvoicemail_synopsis = "Conditionally branches to priority + 101 with the right options set";
static char *hasvoicemail_descrip =
@@ -63,8 +65,7 @@ static char *hasvoicemail_descrip =
" 'j' -- jump to priority n+101, if there is voicemail in the folder indicated.\n"
" This application sets the following channel variable upon completion:\n"
" HASVMSTATUS The result of the voicemail check returned as a text string as follows\n"
" <# of messages in the folder, 0 for NONE>\n"
"\nThis application has been deprecated in favor of the VMCOUNT() function\n";
" <# of messages in the folder, 0 for NONE>\n";
static char *app_hasnewvoicemail = "HasNewVoicemail";
static char *hasnewvoicemail_synopsis = "Conditionally branches to priority + 101 with the right options set";
@@ -76,13 +77,103 @@ static char *hasnewvoicemail_descrip =
" 'j' -- jump to priority n+101, if there is new voicemail in folder 'folder' or INBOX\n"
" This application sets the following channel variable upon completion:\n"
" HASVMSTATUS The result of the new voicemail check returned as a text string as follows\n"
" <# of messages in the folder, 0 for NONE>\n"
"\nThis application has been deprecated in favor of the VMCOUNT() function\n";
" <# of messages in the folder, 0 for NONE>\n";
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
#ifdef USE_ODBC_STORAGE
static int hasvoicemail_internal(const char *context, const char *mailbox, const char *folder)
{
int nummsgs = 0;
int res;
SQLHSTMT stmt;
char sql[256];
char rowdata[20];
if (!folder)
folder = "INBOX";
/* If no mailbox, return immediately */
if (ast_strlen_zero(mailbox))
return 0;
if (ast_strlen_zero(context))
context = "default";
odbc_obj *obj;
obj = fetch_odbc_obj(odbc_database, 0);
if (obj) {
res = SQLAllocHandle(SQL_HANDLE_STMT, obj->con, &stmt);
if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) {
ast_log(LOG_WARNING, "SQL Alloc Handle failed!\n");
goto yuck;
}
snprintf(sql, sizeof(sql), "SELECT COUNT(*) FROM %s WHERE dir = '%s/voicemail/%s/%s/%s'", odbc_table, ast_config_AST_SPOOL_DIR, context, mailbox, folder);
res = SQLPrepare(stmt, sql, SQL_NTS);
if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) {
ast_log(LOG_WARNING, "SQL Prepare failed![%s]\n", sql);
SQLFreeHandle(SQL_HANDLE_STMT, stmt);
goto yuck;
}
res = odbc_smart_execute(obj, stmt);
if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) {
ast_log(LOG_WARNING, "SQL Execute error!\n[%s]\n\n", sql);
SQLFreeHandle(SQL_HANDLE_STMT, stmt);
goto yuck;
}
res = SQLFetch(stmt);
if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) {
ast_log(LOG_WARNING, "SQL Fetch error!\n[%s]\n\n", sql);
SQLFreeHandle(SQL_HANDLE_STMT, stmt);
goto yuck;
}
res = SQLGetData(stmt, 1, SQL_CHAR, rowdata, sizeof(rowdata), NULL);
if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) {
ast_log(LOG_WARNING, "SQL Get Data error!\n[%s]\n\n", sql);
SQLFreeHandle(SQL_HANDLE_STMT, stmt);
goto yuck;
}
nummsgs = atoi(rowdata);
SQLFreeHandle(SQL_HANDLE_STMT, stmt);
} else
ast_log(LOG_WARNING, "Failed to obtain database object for '%s'!\n", odbc_database);
yuck:
return nummsgs;
}
#else
static int hasvoicemail_internal(const char *context, const char *mailbox, const char *folder)
{
DIR *dir;
struct dirent *de;
char fn[256];
int count = 0;
if (ast_strlen_zero(folder))
folder = "INBOX";
if (ast_strlen_zero(context))
context = "default";
/* If no mailbox, return immediately */
if (ast_strlen_zero(mailbox))
return 0;
snprintf(fn, sizeof(fn), "%s/voicemail/%s/%s/%s", ast_config_AST_SPOOL_DIR, context, mailbox, folder);
dir = opendir(fn);
if (!dir)
return 0;
while ((de = readdir(dir))) {
if (!strncasecmp(de->d_name, "msg", 3) && !strcasecmp(de->d_name + 8, "txt"))
count++;
}
closedir(dir);
return count;
}
#endif
static int hasvoicemail_exec(struct ast_channel *chan, void *data)
{
struct ast_module_user *u;
struct localuser *u;
char *input, *varname = NULL, *vmbox, *context = "default";
char *vmfolder;
int vmcount = 0;
@@ -105,16 +196,22 @@ static int hasvoicemail_exec(struct ast_channel *chan, void *data)
return -1;
}
u = ast_module_user_add(chan);
LOCAL_USER_ADD(u);
input = ast_strdupa(data);
input = ast_strdupa((char *)data);
if (! input) {
ast_log(LOG_ERROR, "Out of memory error\n");
LOCAL_USER_REMOVE(u);
return -1;
}
AST_STANDARD_APP_ARGS(args, input);
vmbox = strsep(&args.vmbox, "@");
if (!ast_strlen_zero(args.vmbox))
context = args.vmbox;
if ((vmbox = strsep(&args.vmbox, "@")))
if (!ast_strlen_zero(args.vmbox))
context = args.vmbox;
if (!vmbox)
vmbox = args.vmbox;
vmfolder = strchr(vmbox, '/');
if (vmfolder) {
@@ -129,7 +226,7 @@ static int hasvoicemail_exec(struct ast_channel *chan, void *data)
priority_jump = 1;
}
vmcount = ast_app_messagecount(context, vmbox, vmfolder);
vmcount = hasvoicemail_internal(context, vmbox, vmfolder);
/* Set the count in the channel variable */
if (varname) {
snprintf(tmp, sizeof(tmp), "%d", vmcount);
@@ -138,7 +235,7 @@ static int hasvoicemail_exec(struct ast_channel *chan, void *data)
if (vmcount > 0) {
/* Branch to the next extension */
if (priority_jump || ast_opt_priority_jumping) {
if (priority_jump || option_priority_jumping) {
if (ast_goto_if_exists(chan, chan->context, chan->exten, chan->priority + 101))
ast_log(LOG_WARNING, "VM box %s@%s has new voicemail, but extension %s, priority %d doesn't exist\n", vmbox, context, chan->exten, chan->priority + 101);
}
@@ -147,42 +244,46 @@ static int hasvoicemail_exec(struct ast_channel *chan, void *data)
snprintf(tmp, sizeof(tmp), "%d", vmcount);
pbx_builtin_setvar_helper(chan, "HASVMSTATUS", tmp);
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return 0;
}
static int acf_vmcount_exec(struct ast_channel *chan, char *cmd, char *argsstr, char *buf, size_t len)
static char *acf_vmcount_exec(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len)
{
struct ast_module_user *u;
char *context;
AST_DECLARE_APP_ARGS(args,
AST_APP_ARG(vmbox);
AST_APP_ARG(folder);
);
struct localuser *u;
char *args, *context, *box, *folder;
u = ast_module_user_add(chan);
LOCAL_USER_ACF_ADD(u);
buf[0] = '\0';
AST_STANDARD_APP_ARGS(args, argsstr);
args = ast_strdupa(data);
if (!args) {
ast_log(LOG_ERROR, "Out of memory\n");
LOCAL_USER_REMOVE(u);
return buf;
}
if (strchr(args.vmbox, '@')) {
context = args.vmbox;
args.vmbox = strsep(&context, "@");
box = strsep(&args, "|");
if (strchr(box, '@')) {
context = box;
box = strsep(&context, "@");
} else {
context = "default";
}
if (ast_strlen_zero(args.folder)) {
args.folder = "INBOX";
if (args) {
folder = args;
} else {
folder = "INBOX";
}
snprintf(buf, len, "%d", ast_app_messagecount(context, args.vmbox, args.folder));
snprintf(buf, len, "%d", hasvoicemail_internal(context, box, folder));
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return 0;
return buf;
}
struct ast_custom_function acf_vmcount = {
@@ -195,7 +296,32 @@ struct ast_custom_function acf_vmcount = {
.read = acf_vmcount_exec,
};
static int unload_module(void)
static int load_config(void)
{
#ifdef USE_ODBC_STORAGE
struct ast_config *cfg;
char *tmp;
cfg = ast_config_load("voicemail.conf");
if (cfg) {
if (! (tmp = ast_variable_retrieve(cfg, "general", "odbcstorage")))
tmp = "asterisk";
ast_copy_string(odbc_database, tmp, sizeof(odbc_database));
if (! (tmp = ast_variable_retrieve(cfg, "general", "odbctable")))
tmp = "voicemessages";
ast_copy_string(odbc_table, tmp, sizeof(odbc_table));
ast_config_destroy(cfg);
}
#endif
return 0;
}
int reload(void)
{
return load_config();
}
int unload_module(void)
{
int res;
@@ -203,15 +329,15 @@ static int unload_module(void)
res |= ast_unregister_application(app_hasvoicemail);
res |= ast_unregister_application(app_hasnewvoicemail);
ast_module_user_hangup_all();
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int load_module(void)
{
int res;
load_config();
res = ast_custom_function_register(&acf_vmcount);
res |= ast_register_application(app_hasvoicemail, hasvoicemail_exec, hasvoicemail_synopsis, hasvoicemail_descrip);
res |= ast_register_application(app_hasnewvoicemail, hasvoicemail_exec, hasnewvoicemail_synopsis, hasnewvoicemail_descrip);
@@ -219,4 +345,19 @@ static int load_module(void)
return res;
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Indicator for whether a voice mailbox has messages in a given folder.");
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

View File

@@ -19,16 +19,10 @@
/*! \file
*
* \brief Stream to an icecast server via ICES (see contrib/asterisk-ices.xml)
*
* \author Mark Spencer <markster@digium.com>
*
* \ingroup applications
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <string.h>
#include <stdio.h>
#include <signal.h>
@@ -38,6 +32,10 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <sys/time.h>
#include <errno.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/lock.h"
#include "asterisk/file.h"
#include "asterisk/logger.h"
@@ -51,6 +49,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#define ICES "/usr/bin/ices"
#define LOCAL_ICES "/usr/local/bin/ices"
static char *tdesc = "Encode and Stream via icecast and ices";
static char *app = "ICES";
static char *synopsis = "Encode and stream using 'ices'";
@@ -60,6 +60,9 @@ static char *descrip =
"(available separately). A configuration file must be supplied\n"
"for ices (see examples/asterisk-ices.conf). \n";
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
static int icesencode(char *filename, int fd)
{
@@ -82,7 +85,7 @@ static int icesencode(char *filename, int fd)
signal(SIGPIPE, SIG_DFL);
pthread_sigmask(SIG_UNBLOCK, &fullset, NULL);
if (ast_opt_high_priority)
if (option_highpriority)
ast_set_priority(0);
dup2(fd, STDIN_FILENO);
for (x=STDERR_FILENO + 1;x<1024;x++) {
@@ -102,7 +105,7 @@ static int icesencode(char *filename, int fd)
static int ices_exec(struct ast_channel *chan, void *data)
{
int res=0;
struct ast_module_user *u;
struct localuser *u;
int fds[2];
int ms = -1;
int pid = -1;
@@ -118,13 +121,13 @@ static int ices_exec(struct ast_channel *chan, void *data)
return -1;
}
u = ast_module_user_add(chan);
LOCAL_USER_ADD(u);
last = ast_tv(0, 0);
if (pipe(fds)) {
ast_log(LOG_WARNING, "Unable to create pipe\n");
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return -1;
}
flags = fcntl(fds[1], F_GETFL);
@@ -139,7 +142,7 @@ static int ices_exec(struct ast_channel *chan, void *data)
close(fds[0]);
close(fds[1]);
ast_log(LOG_WARNING, "Answer failed!\n");
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return -1;
}
@@ -149,11 +152,11 @@ static int ices_exec(struct ast_channel *chan, void *data)
close(fds[0]);
close(fds[1]);
ast_log(LOG_WARNING, "Unable to set write format to signed linear\n");
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return -1;
}
if (((char *)data)[0] == '/')
ast_copy_string(filename, (char *) data, sizeof(filename));
strncpy(filename, (char *)data, sizeof(filename) - 1);
else
snprintf(filename, sizeof(filename), "%s/%s", (char *)ast_config_AST_CONFIG_DIR, (char *)data);
/* Placeholder for options */
@@ -199,25 +202,40 @@ static int ices_exec(struct ast_channel *chan, void *data)
if (!res && oreadformat)
ast_set_read_format(chan, oreadformat);
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return res;
}
static int unload_module(void)
int unload_module(void)
{
int res;
res = ast_unregister_application(app);
ast_module_user_hangup_all();
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int load_module(void)
{
return ast_register_application(app, ices_exec, synopsis, descrip);
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Encode and Stream via icecast and ices");
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

View File

@@ -19,20 +19,18 @@
/*! \file
*
* \brief App to transmit an image
*
* \author Mark Spencer <markster@digium.com>
*
* \ingroup applications
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/lock.h"
#include "asterisk/file.h"
#include "asterisk/logger.h"
@@ -44,6 +42,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/app.h"
#include "asterisk/options.h"
static char *tdesc = "Image Transmission Application";
static char *app = "SendImage";
static char *synopsis = "Send an image file";
@@ -59,11 +59,14 @@ static char *descrip =
" SENDIMAGESTATUS The status is the result of the attempt as a text string, one of\n"
" OK | NOSUPPORT \n";
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
static int sendimage_exec(struct ast_channel *chan, void *data)
{
int res = 0;
struct ast_module_user *u;
struct localuser *u;
char *parse;
int priority_jump = 0;
AST_DECLARE_APP_ARGS(args,
@@ -71,9 +74,13 @@ static int sendimage_exec(struct ast_channel *chan, void *data)
AST_APP_ARG(options);
);
u = ast_module_user_add(chan);
LOCAL_USER_ADD(u);
parse = ast_strdupa(data);
if (!(parse = ast_strdupa(data))) {
ast_log(LOG_WARNING, "Memory Error!\n");
LOCAL_USER_REMOVE(u);
return -1;
}
AST_STANDARD_APP_ARGS(args, parse);
@@ -89,10 +96,10 @@ static int sendimage_exec(struct ast_channel *chan, void *data)
if (!ast_supports_images(chan)) {
/* Does not support transport */
if (priority_jump || ast_opt_priority_jumping)
if (priority_jump || option_priority_jumping)
ast_goto_if_exists(chan, chan->context, chan->exten, chan->priority + 101);
pbx_builtin_setvar_helper(chan, "SENDIMAGESTATUS", "NOSUPPORT");
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return 0;
}
@@ -101,25 +108,40 @@ static int sendimage_exec(struct ast_channel *chan, void *data)
if (!res)
pbx_builtin_setvar_helper(chan, "SENDIMAGESTATUS", "OK");
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return res;
}
static int unload_module(void)
int unload_module(void)
{
int res;
res = ast_unregister_application(app);
ast_module_user_hangup_all();
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int load_module(void)
{
return ast_register_application(app, sendimage_exec, synopsis, descrip);
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Image Transmission Application");
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

234
apps/app_intercom.c Normal file
View File

@@ -0,0 +1,234 @@
/*
* Asterisk -- An open source telephony toolkit.
*
* Copyright (C) 1999 - 2005, Digium, Inc.
*
* Mark Spencer <markster@digium.com>
*
* See http://www.asterisk.org for more information about
* the Asterisk project. Please do not directly contact
* any of the maintainers of this project for assistance;
* the project provides a web site, mailing lists and IRC
* channels for your use.
*
* This program is free software, distributed under the terms of
* the GNU General Public License Version 2. See the LICENSE file
* at the top of the source tree.
*/
/*! \file
*
* \brief Use /dev/dsp as an intercom.
*
* \ingroup applications
*/
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <sys/ioctl.h>
#include <string.h>
#include <stdlib.h>
#include <sys/time.h>
#include <netinet/in.h>
#if defined(__linux__)
#include <linux/soundcard.h>
#elif defined(__FreeBSD__)
#include <sys/soundcard.h>
#else
#include <soundcard.h>
#endif
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/lock.h"
#include "asterisk/file.h"
#include "asterisk/frame.h"
#include "asterisk/logger.h"
#include "asterisk/channel.h"
#include "asterisk/pbx.h"
#include "asterisk/module.h"
#include "asterisk/translate.h"
#ifdef __OpenBSD__
#define DEV_DSP "/dev/audio"
#else
#define DEV_DSP "/dev/dsp"
#endif
/* Number of 32 byte buffers -- each buffer is 2 ms */
#define BUFFER_SIZE 32
static char *tdesc = "Intercom using /dev/dsp for output";
static char *app = "Intercom";
static char *synopsis = "(Obsolete) Send to Intercom";
static char *descrip =
" Intercom(): Sends the user to the intercom (i.e. /dev/dsp). This program\n"
"is generally considered obselete by the chan_oss module. User can terminate\n"with a DTMF tone, or by hangup.\n";
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
AST_MUTEX_DEFINE_STATIC(sound_lock);
static int sound = -1;
static int write_audio(short *data, int len)
{
int res;
struct audio_buf_info info;
ast_mutex_lock(&sound_lock);
if (sound < 0) {
ast_log(LOG_WARNING, "Sound device closed?\n");
ast_mutex_unlock(&sound_lock);
return -1;
}
if (ioctl(sound, SNDCTL_DSP_GETOSPACE, &info)) {
ast_log(LOG_WARNING, "Unable to read output space\n");
ast_mutex_unlock(&sound_lock);
return -1;
}
res = write(sound, data, len);
ast_mutex_unlock(&sound_lock);
return res;
}
static int create_audio(void)
{
int fmt, desired, res, fd;
fd = open(DEV_DSP, O_WRONLY);
if (fd < 0) {
ast_log(LOG_WARNING, "Unable to open %s: %s\n", DEV_DSP, strerror(errno));
close(fd);
return -1;
}
fmt = AFMT_S16_LE;
res = ioctl(fd, SNDCTL_DSP_SETFMT, &fmt);
if (res < 0) {
ast_log(LOG_WARNING, "Unable to set format to 16-bit signed\n");
close(fd);
return -1;
}
fmt = 0;
res = ioctl(fd, SNDCTL_DSP_STEREO, &fmt);
if (res < 0) {
ast_log(LOG_WARNING, "Failed to set audio device to mono\n");
close(fd);
return -1;
}
/* 8000 Hz desired */
desired = 8000;
fmt = desired;
res = ioctl(fd, SNDCTL_DSP_SPEED, &fmt);
if (res < 0) {
ast_log(LOG_WARNING, "Failed to set audio device to mono\n");
close(fd);
return -1;
}
if (fmt != desired) {
ast_log(LOG_WARNING, "Requested %d Hz, got %d Hz -- sound may be choppy\n", desired, fmt);
}
#if 1
/* 2 bytes * 15 units of 2^5 = 32 bytes per buffer */
fmt = ((BUFFER_SIZE) << 16) | (0x0005);
res = ioctl(fd, SNDCTL_DSP_SETFRAGMENT, &fmt);
if (res < 0) {
ast_log(LOG_WARNING, "Unable to set fragment size -- sound may be choppy\n");
}
#endif
sound = fd;
return 0;
}
static int intercom_exec(struct ast_channel *chan, void *data)
{
int res = 0;
struct localuser *u;
struct ast_frame *f;
int oreadformat;
LOCAL_USER_ADD(u);
/* Remember original read format */
oreadformat = chan->readformat;
/* Set mode to signed linear */
res = ast_set_read_format(chan, AST_FORMAT_SLINEAR);
if (res < 0) {
ast_log(LOG_WARNING, "Unable to set format to signed linear on channel %s\n", chan->name);
LOCAL_USER_REMOVE(u);
return -1;
}
/* Read packets from the channel */
while(!res) {
res = ast_waitfor(chan, -1);
if (res > 0) {
res = 0;
f = ast_read(chan);
if (f) {
if (f->frametype == AST_FRAME_DTMF) {
ast_frfree(f);
break;
} else {
if (f->frametype == AST_FRAME_VOICE) {
if (f->subclass == AST_FORMAT_SLINEAR) {
res = write_audio(f->data, f->datalen);
if (res > 0)
res = 0;
} else
ast_log(LOG_DEBUG, "Unable to handle non-signed linear frame (%d)\n", f->subclass);
}
}
ast_frfree(f);
} else
res = -1;
}
}
if (!res)
ast_set_read_format(chan, oreadformat);
LOCAL_USER_REMOVE(u);
return res;
}
int unload_module(void)
{
int res;
if (sound > -1)
close(sound);
res = ast_unregister_application(app);
STANDARD_HANGUP_LOCALUSERS;
return res;
}
int load_module(void)
{
if (create_audio())
return -1;
return ast_register_application(app, intercom_exec, synopsis, descrip);
}
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

View File

@@ -19,25 +19,19 @@
/*! \file
*
* \brief IVR Demo application
*
* \author Mark Spencer <markster@digium.com>
*
* \ingroup applications
*/
/*** MODULEINFO
<defaultenabled>no</defaultenabled>
***/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/file.h"
#include "asterisk/logger.h"
#include "asterisk/channel.h"
@@ -88,18 +82,21 @@ AST_IVR_DECLARE_MENU(ivr_demo, "IVR Demo Main Menu", 0,
{ NULL },
});
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
static int skel_exec(struct ast_channel *chan, void *data)
{
int res=0;
struct ast_module_user *u;
struct localuser *u;
if (ast_strlen_zero(data)) {
ast_log(LOG_WARNING, "skel requires an argument (filename)\n");
return -1;
}
u = ast_module_user_add(chan);
LOCAL_USER_ADD(u);
/* Do our thing here */
@@ -108,25 +105,40 @@ static int skel_exec(struct ast_channel *chan, void *data)
if (!res)
res = ast_ivr_menu_run(chan, &ivr_demo, data);
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return res;
}
static int unload_module(void)
int unload_module(void)
{
int res;
res = ast_unregister_application(app);
ast_module_user_hangup_all();
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int load_module(void)
{
return ast_register_application(app, skel_exec, tdesc, synopsis);
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "IVR Demo Application");
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

View File

@@ -20,20 +20,18 @@
*
* \brief App to lookup the callerid number, and see if it is blacklisted
*
* \author Mark Spencer <markster@digium.com>
*
* \ingroup applications
*
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/lock.h"
#include "asterisk/file.h"
#include "asterisk/logger.h"
@@ -47,6 +45,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/astdb.h"
#include "asterisk/options.h"
static char *tdesc = "Look up Caller*ID name/number from blacklist database";
static char *app = "LookupBlacklist";
static char *synopsis = "Look up Caller*ID name/number from blacklist database";
@@ -59,52 +59,21 @@ static char *descrip =
"This application sets the following channel variable upon completion:\n"
" LOOKUPBLSTATUS The status of the Blacklist lookup as a text string, one of\n"
" FOUND | NOTFOUND\n"
"Example: exten => 1234,1,LookupBlacklist()\n\n"
"This application is deprecated and may be removed from a future release.\n"
"Please use the dialplan function BLACKLIST() instead.\n";
"Example: exten => 1234,1,LookupBlacklist()\n";
STANDARD_LOCAL_USER;
static int blacklist_read(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len)
{
char blacklist[1];
int bl = 0;
if (chan->cid.cid_num) {
if (!ast_db_get("blacklist", chan->cid.cid_num, blacklist, sizeof (blacklist)))
bl = 1;
}
if (chan->cid.cid_name) {
if (!ast_db_get("blacklist", chan->cid.cid_name, blacklist, sizeof (blacklist)))
bl = 1;
}
snprintf(buf, len, "%d", bl);
return 0;
}
static struct ast_custom_function blacklist_function = {
.name = "BLACKLIST",
.synopsis = "Check if the callerid is on the blacklist",
.desc = "Uses astdb to check if the Caller*ID is in family 'blacklist'. Returns 1 or 0.\n",
.syntax = "BLACKLIST()",
.read = blacklist_read,
};
LOCAL_USER_DECL;
static int
lookupblacklist_exec (struct ast_channel *chan, void *data)
{
char blacklist[1];
struct ast_module_user *u;
struct localuser *u;
int bl = 0;
int priority_jump = 0;
static int dep_warning = 0;
u = ast_module_user_add(chan);
if (!dep_warning) {
dep_warning = 1;
ast_log(LOG_WARNING, "LookupBlacklist is deprecated. Please use ${BLACKLIST()} instead.\n");
}
LOCAL_USER_ADD(u);
if (!ast_strlen_zero(data)) {
if (strchr(data, 'j'))
@@ -127,34 +96,46 @@ lookupblacklist_exec (struct ast_channel *chan, void *data)
}
if (bl) {
if (priority_jump || ast_opt_priority_jumping)
if (priority_jump || option_priority_jumping)
ast_goto_if_exists(chan, chan->context, chan->exten, chan->priority + 101);
pbx_builtin_setvar_helper(chan, "LOOKUPBLSTATUS", "FOUND");
} else
pbx_builtin_setvar_helper(chan, "LOOKUPBLSTATUS", "NOTFOUND");
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return 0;
}
static int unload_module(void)
int unload_module (void)
{
int res;
res = ast_unregister_application(app);
res |= ast_custom_function_unregister(&blacklist_function);
ast_module_user_hangup_all();
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int load_module (void)
{
int res = ast_custom_function_register(&blacklist_function);
res |= ast_register_application (app, lookupblacklist_exec, synopsis,descrip);
return ast_register_application (app, lookupblacklist_exec, synopsis,descrip);
}
char *description (void)
{
return tdesc;
}
int usecount (void)
{
int res;
STANDARD_USECOUNT (res);
return res;
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Look up Caller*ID name/number from blacklist database");
char *key ()
{
return ASTERISK_GPL_KEY;
}

View File

@@ -19,20 +19,18 @@
/*! \file
*
* \brief App to set callerid name from database, based on directory number
*
* \author Mark Spencer <markster@digium.com>
*
* \ingroup applications
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/lock.h"
#include "asterisk/file.h"
#include "asterisk/logger.h"
@@ -45,6 +43,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/callerid.h"
#include "asterisk/astdb.h"
static char *tdesc = "Look up CallerID Name from local database";
static char *app = "LookupCIDName";
static char *synopsis = "Look up CallerID Name from local database";
@@ -55,49 +55,66 @@ static char *descrip =
"Caller*ID name. Does nothing if no Caller*ID was received on the\n"
"channel. This is useful if you do not subscribe to Caller*ID\n"
"name delivery, or if you want to change the names on some incoming\n"
"calls.\n\n"
"LookupCIDName is deprecated. Please use ${DB(cidname/${CALLERID(num)})}\n"
"instead.\n";
"calls.\n";
STANDARD_LOCAL_USER;
static int lookupcidname_exec (struct ast_channel *chan, void *data)
LOCAL_USER_DECL;
static int
lookupcidname_exec (struct ast_channel *chan, void *data)
{
char dbname[64];
struct ast_module_user *u;
static int dep_warning = 0;
char dbname[64];
struct localuser *u;
u = ast_module_user_add(chan);
if (!dep_warning) {
dep_warning = 1;
ast_log(LOG_WARNING, "LookupCIDName is deprecated. Please use ${DB(cidname/${CALLERID(num)})} instead.\n");
LOCAL_USER_ADD (u);
if (chan->cid.cid_num) {
if (!ast_db_get ("cidname", chan->cid.cid_num, dbname, sizeof (dbname))) {
ast_set_callerid (chan, NULL, dbname, NULL);
if (option_verbose > 2)
ast_verbose (VERBOSE_PREFIX_3 "Changed Caller*ID name to %s\n",
dbname);
}
if (chan->cid.cid_num) {
if (!ast_db_get ("cidname", chan->cid.cid_num, dbname, sizeof (dbname))) {
ast_set_callerid (chan, NULL, dbname, NULL);
if (option_verbose > 2)
ast_verbose (VERBOSE_PREFIX_3 "Changed Caller*ID name to %s\n",
dbname);
}
}
ast_module_user_remove(u);
return 0;
}
LOCAL_USER_REMOVE (u);
return 0;
}
static int unload_module(void)
int
unload_module (void)
{
int res;
res = ast_unregister_application (app);
ast_module_user_hangup_all();
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int
load_module (void)
{
return ast_register_application (app, lookupcidname_exec, synopsis, descrip);
return ast_register_application (app, lookupcidname_exec, synopsis,
descrip);
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Look up CallerID Name from local database");
char *
description (void)
{
return tdesc;
}
int
usecount (void)
{
int res;
STANDARD_USECOUNT (res);
return res;
}
char *
key ()
{
return ASTERISK_GPL_KEY;
}

View File

@@ -19,22 +19,20 @@
/*! \file
*
* \brief Dial plan macro Implementation
*
* \author Mark Spencer <markster@digium.com>
*
* \ingroup applications
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/file.h"
#include "asterisk/logger.h"
#include "asterisk/channel.h"
@@ -50,6 +48,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
/* special result value used to force macro exit */
#define MACRO_EXIT_RESULT 1024
static char *tdesc = "Extension Macros";
static char *descrip =
" Macro(macroname|arg1|arg2...): Executes a macro using the context\n"
"'macro-<macroname>', jumping to the 's' extension of that context and\n"
@@ -70,8 +70,8 @@ static char *descrip =
" contained within it via sub-engine), and a fixed per-thread\n"
" memory stack allowance, macros are limited to 7 levels\n"
" of nesting (macro calling macro calling macro, etc.); It\n"
" may be possible that stack-intensive applications in deeply nested macros\n"
" could cause asterisk to crash earlier than this limit.\n";
" may be possible that stack-intensive applications in deeply nested\n"
" macros could cause asterisk to crash earlier than this limit.\n";
static char *if_descrip =
" MacroIf(<expr>?macroname_a[|arg1][:macroname_b[|arg1]])\n"
@@ -79,13 +79,6 @@ static char *if_descrip =
"(otherwise <macroname_b> if provided)\n"
"Arguments and return values as in application macro()\n";
static char *exclusive_descrip =
" MacroExclusive(macroname|arg1|arg2...):\n"
"Executes macro defined in the context 'macro-macroname'\n"
"Only one call at a time may run the macro.\n"
"(we'll wait if another call is busy executing in the Macro)\n"
"Arguments and return values as in application Macro()\n";
static char *exit_descrip =
" MacroExit():\n"
"Causes the currently running macro to exit as if it had\n"
@@ -95,14 +88,15 @@ static char *exit_descrip =
static char *app = "Macro";
static char *if_app = "MacroIf";
static char *exclusive_app = "MacroExclusive";
static char *exit_app = "MacroExit";
static char *synopsis = "Macro Implementation";
static char *if_synopsis = "Conditional Macro Implementation";
static char *exclusive_synopsis = "Exclusive Macro Implementation";
static char *exit_synopsis = "Exit From Macro";
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
static struct ast_exten *find_matching_priority(struct ast_context *c, const char *exten, int priority, const char *callerid)
{
@@ -139,9 +133,8 @@ static struct ast_exten *find_matching_priority(struct ast_context *c, const cha
return NULL;
}
static int _macro_exec(struct ast_channel *chan, void *data, int exclusive)
static int macro_exec(struct ast_channel *chan, void *data)
{
const char *s;
char *tmp;
char *cur, *rest;
char *macro;
@@ -155,7 +148,7 @@ static int _macro_exec(struct ast_channel *chan, void *data, int exclusive)
int oldpriority, gosub_level = 0;
char pc[80], depthc[12];
char oldcontext[AST_MAX_CONTEXT] = "";
const char *inhangupc;
char *offsets, *s, *inhangupc;
int offset, depth = 0, maxdepth = 7;
int setmacrocontext=0;
int autoloopflag, dead = 0, inhangup = 0;
@@ -164,34 +157,38 @@ static int _macro_exec(struct ast_channel *chan, void *data, int exclusive)
char *save_macro_context;
char *save_macro_priority;
char *save_macro_offset;
struct ast_module_user *u;
struct localuser *u;
if (ast_strlen_zero(data)) {
ast_log(LOG_WARNING, "Macro() requires arguments. See \"show application macro\" for help.\n");
return -1;
}
u = ast_module_user_add(chan);
LOCAL_USER_ADD(u);
/* does the user want a deeper rabbit hole? */
s = pbx_builtin_getvar_helper(chan, "MACRO_RECURSION");
if (s)
sscanf(s, "%d", &maxdepth);
sscanf(s, "%3d", &maxdepth);
/* Count how many levels deep the rabbit hole goes */
s = pbx_builtin_getvar_helper(chan, "MACRO_DEPTH");
if (s)
sscanf(s, "%d", &depth);
tmp = pbx_builtin_getvar_helper(chan, "MACRO_DEPTH");
if (tmp) {
sscanf(tmp, "%3d", &depth);
} else {
depth = 0;
}
/* Used for detecting whether to return when a Macro is called from another Macro after hangup */
if (strcmp(chan->exten, "h") == 0)
pbx_builtin_setvar_helper(chan, "MACRO_IN_HANGUP", "1");
inhangupc = pbx_builtin_getvar_helper(chan, "MACRO_IN_HANGUP");
if (!ast_strlen_zero(inhangupc))
sscanf(inhangupc, "%d", &inhangup);
sscanf(inhangupc, "%3d", &inhangup);
if (depth >= maxdepth) {
ast_log(LOG_ERROR, "Macro(): possible infinite loop detected. Returning early.\n");
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return 0;
}
snprintf(depthc, sizeof(depthc), "%d", depth + 1);
@@ -202,33 +199,18 @@ static int _macro_exec(struct ast_channel *chan, void *data, int exclusive)
macro = strsep(&rest, "|");
if (ast_strlen_zero(macro)) {
ast_log(LOG_WARNING, "Invalid macro name specified\n");
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return 0;
}
snprintf(fullmacro, sizeof(fullmacro), "macro-%s", macro);
if (!ast_exists_extension(chan, fullmacro, "s", 1, chan->cid.cid_num)) {
if (!ast_context_find(fullmacro))
if (!ast_context_find(fullmacro))
ast_log(LOG_WARNING, "No such context '%s' for macro '%s'\n", fullmacro, macro);
else
ast_log(LOG_WARNING, "Context '%s' for macro '%s' lacks 's' extension, priority 1\n", fullmacro, macro);
ast_module_user_remove(u);
ast_log(LOG_WARNING, "Context '%s' for macro '%s' lacks 's' extension, priority 1\n", fullmacro, macro);
LOCAL_USER_REMOVE(u);
return 0;
}
/* If we are to run the macro exclusively, take the mutex */
if (exclusive) {
ast_log(LOG_DEBUG, "Locking macrolock for '%s'\n", fullmacro);
ast_autoservice_start(chan);
if (ast_context_lockmacro(fullmacro)) {
ast_log(LOG_WARNING, "Failed to lock macro '%s' as in-use\n", fullmacro);
ast_autoservice_stop(chan);
ast_module_user_remove(u);
return 0;
}
ast_autoservice_stop(chan);
}
/* Save old info */
oldpriority = chan->priority;
@@ -242,17 +224,25 @@ static int _macro_exec(struct ast_channel *chan, void *data, int exclusive)
}
argc = 1;
/* Save old macro variables */
save_macro_exten = ast_strdup(pbx_builtin_getvar_helper(chan, "MACRO_EXTEN"));
save_macro_exten = pbx_builtin_getvar_helper(chan, "MACRO_EXTEN");
if (save_macro_exten)
save_macro_exten = strdup(save_macro_exten);
pbx_builtin_setvar_helper(chan, "MACRO_EXTEN", oldexten);
save_macro_context = ast_strdup(pbx_builtin_getvar_helper(chan, "MACRO_CONTEXT"));
save_macro_context = pbx_builtin_getvar_helper(chan, "MACRO_CONTEXT");
if (save_macro_context)
save_macro_context = strdup(save_macro_context);
pbx_builtin_setvar_helper(chan, "MACRO_CONTEXT", oldcontext);
save_macro_priority = ast_strdup(pbx_builtin_getvar_helper(chan, "MACRO_PRIORITY"));
save_macro_priority = pbx_builtin_getvar_helper(chan, "MACRO_PRIORITY");
if (save_macro_priority)
save_macro_priority = strdup(save_macro_priority);
snprintf(pc, sizeof(pc), "%d", oldpriority);
pbx_builtin_setvar_helper(chan, "MACRO_PRIORITY", pc);
save_macro_offset = ast_strdup(pbx_builtin_getvar_helper(chan, "MACRO_OFFSET"));
save_macro_offset = pbx_builtin_getvar_helper(chan, "MACRO_OFFSET");
if (save_macro_offset)
save_macro_offset = strdup(save_macro_offset);
pbx_builtin_setvar_helper(chan, "MACRO_OFFSET", NULL);
/* Setup environment for new run */
@@ -262,13 +252,12 @@ static int _macro_exec(struct ast_channel *chan, void *data, int exclusive)
chan->priority = 1;
while((cur = strsep(&rest, "|")) && (argc < MAX_ARGS)) {
const char *s;
/* Save copy of old arguments if we're overwriting some, otherwise
let them pass through to the other macro */
snprintf(varname, sizeof(varname), "ARG%d", argc);
s = pbx_builtin_getvar_helper(chan, varname);
if (s)
oldargs[argc] = ast_strdup(s);
oldargs[argc] = pbx_builtin_getvar_helper(chan, varname);
if (oldargs[argc])
oldargs[argc] = strdup(oldargs[argc]);
pbx_builtin_setvar_helper(chan, varname, cur);
argc++;
}
@@ -320,14 +309,14 @@ static int _macro_exec(struct ast_channel *chan, void *data, int exclusive)
case AST_PBX_KEEPALIVE:
if (option_debug)
ast_log(LOG_DEBUG, "Spawn extension (%s,%s,%d) exited KEEPALIVE in macro %s on '%s'\n", chan->context, chan->exten, chan->priority, macro, chan->name);
else if (option_verbose > 1)
if (option_verbose > 1)
ast_verbose( VERBOSE_PREFIX_2 "Spawn extension (%s, %s, %d) exited KEEPALIVE in macro '%s' on '%s'\n", chan->context, chan->exten, chan->priority, macro, chan->name);
goto out;
break;
default:
if (option_debug)
ast_log(LOG_DEBUG, "Spawn extension (%s,%s,%d) exited non-zero on '%s' in macro '%s'\n", chan->context, chan->exten, chan->priority, chan->name, macro);
else if (option_verbose > 1)
if (option_verbose > 1)
ast_verbose( VERBOSE_PREFIX_2 "Spawn extension (%s, %s, %d) exited non-zero on '%s' in macro '%s'\n", chan->context, chan->exten, chan->priority, chan->name, macro);
dead = 1;
goto out;
@@ -408,6 +397,7 @@ static int _macro_exec(struct ast_channel *chan, void *data, int exclusive)
snprintf(depthc, sizeof(depthc), "%d", depth);
if (!dead) {
pbx_builtin_setvar_helper(chan, "MACRO_DEPTH", depthc);
ast_set2_flag(chan, autoloopflag, AST_FLAG_IN_AUTOLOOP);
}
@@ -448,12 +438,11 @@ static int _macro_exec(struct ast_channel *chan, void *data, int exclusive)
ast_copy_string(chan->context, oldcontext, sizeof(chan->context));
if (!(chan->_softhangup & AST_SOFTHANGUP_ASYNCGOTO)) {
/* Copy the extension, so long as we're not in softhangup, where we could be given an asyncgoto */
const char *offsets;
ast_copy_string(chan->exten, oldexten, sizeof(chan->exten));
if ((offsets = pbx_builtin_getvar_helper(chan, "MACRO_OFFSET"))) {
/* Handle macro offset if it's set by checking the availability of step n + offset + 1, otherwise continue
normally if there is any problem */
if (sscanf(offsets, "%d", &offset) == 1) {
if (sscanf(offsets, "%30d", &offset) == 1) {
if (ast_exists_extension(chan, chan->context, chan->exten, chan->priority + offset + 1, chan->cid.cid_num)) {
chan->priority += offset;
}
@@ -466,41 +455,22 @@ static int _macro_exec(struct ast_channel *chan, void *data, int exclusive)
pbx_builtin_setvar_helper(chan, "MACRO_OFFSET", save_macro_offset);
if (save_macro_offset)
free(save_macro_offset);
/* Unlock the macro */
if (exclusive) {
ast_log(LOG_DEBUG, "Unlocking macrolock for '%s'\n", fullmacro);
if (ast_context_unlockmacro(fullmacro)) {
ast_log(LOG_ERROR, "Failed to unlock macro '%s' - that isn't good\n", fullmacro);
res = 0;
}
}
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return res;
}
static int macro_exec(struct ast_channel *chan, void *data)
{
return _macro_exec(chan, data, 0);
}
static int macroexclusive_exec(struct ast_channel *chan, void *data)
{
return _macro_exec(chan, data, 1);
}
static int macroif_exec(struct ast_channel *chan, void *data)
{
char *expr = NULL, *label_a = NULL, *label_b = NULL;
int res = 0;
struct ast_module_user *u;
struct localuser *u;
u = ast_module_user_add(chan);
LOCAL_USER_ADD(u);
if (!(expr = ast_strdupa(data))) {
ast_module_user_remove(u);
expr = ast_strdupa(data);
if (!expr) {
ast_log(LOG_ERROR, "Out of Memory!\n");
LOCAL_USER_REMOVE(u);
return -1;
}
@@ -512,13 +482,13 @@ static int macroif_exec(struct ast_channel *chan, void *data)
label_b++;
}
if (pbx_checkcondition(expr))
macro_exec(chan, label_a);
res = macro_exec(chan, label_a);
else if (label_b)
macro_exec(chan, label_b);
res = macro_exec(chan, label_b);
} else
ast_log(LOG_WARNING, "Invalid Syntax.\n");
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return res;
}
@@ -528,30 +498,43 @@ static int macro_exit_exec(struct ast_channel *chan, void *data)
return MACRO_EXIT_RESULT;
}
static int unload_module(void)
int unload_module(void)
{
int res;
res = ast_unregister_application(if_app);
res |= ast_unregister_application(exit_app);
res |= ast_unregister_application(app);
res |= ast_unregister_application(exclusive_app);
ast_module_user_hangup_all();
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int load_module(void)
{
int res;
res = ast_register_application(exit_app, macro_exit_exec, exit_synopsis, exit_descrip);
res |= ast_register_application(if_app, macroif_exec, if_synopsis, if_descrip);
res |= ast_register_application(exclusive_app, macroexclusive_exec, exclusive_synopsis, exclusive_descrip);
res |= ast_register_application(app, macro_exec, synopsis, descrip);
return res;
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Extension Macros");
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

298
apps/app_math.c Normal file
View File

@@ -0,0 +1,298 @@
/*
* Asterisk -- An open source telephony toolkit.
*
* Copyright (C) 2004 - 2005, Andy Powell
*
* Updated by Mark Spencer <markster@digium.com>
*
* See http://www.asterisk.org for more information about
* the Asterisk project. Please do not directly contact
* any of the maintainers of this project for assistance;
* the project provides a web site, mailing lists and IRC
* channels for your use.
*
* This program is free software, distributed under the terms of
* the GNU General Public License Version 2. See the LICENSE file
* at the top of the source tree.
*/
/*! \file
*
* \brief A simple math application
*
* \ingroup applications
*/
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/time.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <time.h>
#include <dirent.h>
#include <ctype.h>
#include <sys/file.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/lock.h"
#include "asterisk/file.h"
#include "asterisk/logger.h"
#include "asterisk/channel.h"
#include "asterisk/pbx.h"
#include "asterisk/options.h"
#include "asterisk/config.h"
#include "asterisk/say.h"
#include "asterisk/module.h"
#include "asterisk/app.h"
#include "asterisk/manager.h"
#include "asterisk/localtime.h"
#include "asterisk/cli.h"
#include "asterisk/utils.h"
#include "asterisk/module.h"
#include "asterisk/translate.h"
static char *tdesc = "Basic Math Functions";
static char *app_math = "Math";
static char *math_synopsis = "Performs Mathematical Functions";
static char *math_descrip =
"Math(returnvar,<number1><op><number 2>\n\n"
"Perform floating point calculation on number 1 to number 2 and \n"
"store the result in returnvar. Valid ops are: \n"
" +,-,/,*,%,<,>,>=,<=,==\n"
"and behave as their C equivalents.\n"
" This application has been deprecated in favor of the MATH function.\n";
#define ADDFUNCTION 0
#define DIVIDEFUNCTION 1
#define MULTIPLYFUNCTION 2
#define SUBTRACTFUNCTION 3
#define MODULUSFUNCTION 4
#define GTFUNCTION 5
#define LTFUNCTION 6
#define GTEFUNCTION 7
#define LTEFUNCTION 8
#define EQFUNCTION 9
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
static int math_exec(struct ast_channel *chan, void *data)
{
float fnum1;
float fnum2;
float ftmp = 0;
char *op;
int iaction=-1;
static int deprecation_warning = 0;
/* dunno, big calulations :D */
char user_result[30];
char *s;
char *mvar, *mvalue1, *mvalue2=NULL;
struct localuser *u;
if (!deprecation_warning) {
ast_log(LOG_WARNING, "Math() is deprecated, please use Set(var=${MATH(...)} instead.\n");
deprecation_warning = 1;
}
if (ast_strlen_zero(data)) {
ast_log(LOG_WARNING, "No parameters passed. !\n");
return -1;
}
LOCAL_USER_ADD(u);
s = ast_strdupa(data);
if (!s) {
ast_log(LOG_ERROR, "Out of memory\n");
LOCAL_USER_REMOVE(u);
return -1;
}
mvar = strsep(&s, "|");
mvalue1 = strsep(&s, "|");
if ((op = strchr(mvalue1, '+'))) {
iaction = ADDFUNCTION;
*op = '\0';
} else if ((op = strchr(mvalue1, '-'))) {
iaction = SUBTRACTFUNCTION;
*op = '\0';
} else if ((op = strchr(mvalue1, '*'))) {
iaction = MULTIPLYFUNCTION;
*op = '\0';
} else if ((op = strchr(mvalue1, '/'))) {
iaction = DIVIDEFUNCTION;
*op = '\0';
} else if ((op = strchr(mvalue1, '>'))) {
iaction = GTFUNCTION;
*op = '\0';
if (*(op+1) == '=') {
op++;
*op = '\0';
iaction = GTEFUNCTION;
}
} else if ((op = strchr(mvalue1, '<'))) {
iaction = LTFUNCTION;
*op = '\0';
if (*(op+1) == '=') {
op++;
*op = '\0';
iaction = LTEFUNCTION;
}
} else if ((op = strchr(mvalue1, '='))) {
iaction = GTFUNCTION;
*op = '\0';
if (*(op+1) == '=') {
op++;
*op = '\0';
iaction = EQFUNCTION;
} else
op = NULL;
}
if (op)
mvalue2 = op + 1;
if (!mvar || !mvalue1 || !mvalue2) {
ast_log(LOG_WARNING, "Supply all the parameters - just this once, please\n");
LOCAL_USER_REMOVE(u);
return -1;
}
if (!strcmp(mvar,"")) {
ast_log(LOG_WARNING, "No return variable set.\n");
LOCAL_USER_REMOVE(u);
return -1;
}
if (sscanf(mvalue1, "%30f", &fnum1) != 1) {
ast_log(LOG_WARNING, "'%s' is not a valid number\n", mvalue1);
LOCAL_USER_REMOVE(u);
return -1;
}
if (sscanf(mvalue2, "%30f", &fnum2) != 1) {
ast_log(LOG_WARNING, "'%s' is not a valid number\n", mvalue2);
LOCAL_USER_REMOVE(u);
return -1;
}
switch (iaction) {
case ADDFUNCTION :
ftmp = fnum1 + fnum2;
break;
case DIVIDEFUNCTION :
if (fnum2 <=0)
ftmp = 0; /* can't do a divide by 0 */
else
ftmp = (fnum1 / fnum2);
break;
case MULTIPLYFUNCTION :
ftmp = (fnum1 * fnum2);
break;
case SUBTRACTFUNCTION :
ftmp = (fnum1 - fnum2);
break;
case MODULUSFUNCTION : {
int inum1 = fnum1;
int inum2 = fnum2;
ftmp = (inum1 % inum2);
break;
}
case GTFUNCTION :
if (fnum1 > fnum2)
strcpy(user_result, "TRUE");
else
strcpy(user_result, "FALSE");
break;
case LTFUNCTION :
if (fnum1 < fnum2)
strcpy(user_result, "TRUE");
else
strcpy(user_result, "FALSE");
break;
case GTEFUNCTION :
if (fnum1 >= fnum2)
strcpy(user_result, "TRUE");
else
strcpy(user_result, "FALSE");
break;
case LTEFUNCTION :
if (fnum1 <= fnum2)
strcpy(user_result, "TRUE");
else
strcpy(user_result, "FALSE");
break;
case EQFUNCTION :
if (fnum1 == fnum2)
strcpy(user_result, "TRUE");
else
strcpy(user_result, "FALSE");
break;
default :
ast_log(LOG_WARNING, "Something happened that neither of us should be proud of %d\n", iaction);
LOCAL_USER_REMOVE(u);
return -1;
}
if (iaction < GTFUNCTION || iaction > EQFUNCTION)
snprintf(user_result,sizeof(user_result),"%f",ftmp);
pbx_builtin_setvar_helper(chan, mvar, user_result);
LOCAL_USER_REMOVE(u);
return 0;
}
int unload_module(void)
{
int res;
res = ast_unregister_application(app_math);
STANDARD_HANGUP_LOCALUSERS;
return res;
}
int load_module(void)
{
return ast_register_application(app_math, math_exec, math_synopsis, math_descrip);
}
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}
/* Fading everything to black and blue... */

205
apps/app_md5.c Normal file
View File

@@ -0,0 +1,205 @@
/*
* Asterisk -- An open source telephony toolkit.
*
* Copyright (C) 2005, Olle E. Johansson, Edvina.net
*
* See http://www.asterisk.org for more information about
* the Asterisk project. Please do not directly contact
* any of the maintainers of this project for assistance;
* the project provides a web site, mailing lists and IRC
* channels for your use.
*
* This program is free software, distributed under the terms of
* the GNU General Public License Version 2. See the LICENSE file
* at the top of the source tree.
*/
/*! \file
*
* \brief MD5 checksum application
*
* \todo Remove this deprecated application in 1.3dev
* \ingroup applications
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/file.h"
#include "asterisk/logger.h"
#include "asterisk/utils.h"
#include "asterisk/options.h"
#include "asterisk/channel.h"
#include "asterisk/pbx.h"
#include "asterisk/module.h"
#include "asterisk/lock.h"
#include "asterisk/app.h"
static char *tdesc_md5 = "MD5 checksum applications";
static char *app_md5 = "MD5";
static char *desc_md5 = "Calculate MD5 checksum";
static char *synopsis_md5 =
" MD5(<var>=<string>): Calculates a MD5 checksum on <string>.\n"
"Returns hash value in a channel variable. \n";
static char *app_md5check = "MD5Check";
static char *desc_md5check = "Check MD5 checksum";
static char *synopsis_md5check =
" MD5Check(<md5hash>|<string>[|options]): Calculates a MD5 checksum on <string>\n"
"and compares it with the hash. Returns 0 if <md5hash> is correct for <string>.\n"
"The option string may contain zero or more of the following characters:\n"
" 'j' -- jump to priority n+101 if the hash and string do not match \n"
"This application sets the following channel variable upon completion:\n"
" CHECKMD5STATUS The status of the MD5 check, one of the following\n"
" MATCH | NOMATCH\n";
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
/*--- md5_exec: Calculate MD5 checksum (hash) on given string and
return it in channel variable ---*/
static int md5_exec(struct ast_channel *chan, void *data)
{
int res=0;
struct localuser *u;
char *varname= NULL; /* Variable to set */
char *string = NULL; /* String to calculate on */
char retvar[50]; /* Return value */
static int dep_warning = 0;
if (!dep_warning) {
ast_log(LOG_WARNING, "This application has been deprecated, please use the MD5 function instead.\n");
dep_warning = 1;
}
if (ast_strlen_zero(data)) {
ast_log(LOG_WARNING, "Syntax: md5(<varname>=<string>) - missing argument!\n");
return -1;
}
LOCAL_USER_ADD(u);
memset(retvar,0, sizeof(retvar));
string = ast_strdupa(data);
varname = strsep(&string,"=");
if (ast_strlen_zero(varname)) {
ast_log(LOG_WARNING, "Syntax: md5(<varname>=<string>) - missing argument!\n");
LOCAL_USER_REMOVE(u);
return -1;
}
ast_md5_hash(retvar, string);
pbx_builtin_setvar_helper(chan, varname, retvar);
LOCAL_USER_REMOVE(u);
return res;
}
/*--- md5check_exec: Calculate MD5 checksum and compare it with
existing checksum. ---*/
static int md5check_exec(struct ast_channel *chan, void *data)
{
int res=0;
struct localuser *u;
char *string = NULL; /* String to calculate on */
char newhash[50]; /* Return value */
static int dep_warning = 0;
int priority_jump = 0;
AST_DECLARE_APP_ARGS(args,
AST_APP_ARG(md5hash);
AST_APP_ARG(string);
AST_APP_ARG(options);
);
if (!dep_warning) {
ast_log(LOG_WARNING, "This application has been deprecated, please use the CHECK_MD5 function instead.\n");
dep_warning = 1;
}
LOCAL_USER_ADD(u);
if (!(string = ast_strdupa(data))) {
ast_log(LOG_WARNING, "Memory Error!\n");
LOCAL_USER_REMOVE(u);
return -1;
}
AST_STANDARD_APP_ARGS(args, string);
if (args.options) {
if (strchr(args.options, 'j'))
priority_jump = 1;
}
if (ast_strlen_zero(args.md5hash) || ast_strlen_zero(args.string)) {
ast_log(LOG_WARNING, "Syntax: MD5Check(<md5hash>|<string>[|options]) - missing argument!\n");
LOCAL_USER_REMOVE(u);
return -1;
}
memset(newhash,0, sizeof(newhash));
ast_md5_hash(newhash, args.string);
if (!strcmp(newhash, args.md5hash)) { /* Verification ok */
if (option_debug > 2)
ast_log(LOG_DEBUG, "MD5 verified ok: %s -- %s\n", args.md5hash, args.string);
pbx_builtin_setvar_helper(chan, "CHECKMD5STATUS", "MATCH");
LOCAL_USER_REMOVE(u);
return 0;
}
if (option_debug > 2)
ast_log(LOG_DEBUG, "ERROR: MD5 not verified: %s -- %s\n", args.md5hash, args.string);
pbx_builtin_setvar_helper(chan, "CHECKMD5STATUS", "NOMATCH");
if (priority_jump || option_priority_jumping) {
if (ast_goto_if_exists(chan, chan->context, chan->exten, chan->priority + 101))
if (option_debug > 2)
ast_log(LOG_DEBUG, "Can't jump to exten+101 (e%s,p%d), sorry\n", chan->exten,chan->priority+101);
}
LOCAL_USER_REMOVE(u);
return res;
}
int unload_module(void)
{
int res;
res = ast_unregister_application(app_md5);
res |= ast_unregister_application(app_md5check);
STANDARD_HANGUP_LOCALUSERS;
return res;
}
int load_module(void)
{
int res;
res = ast_register_application(app_md5check, md5check_exec, desc_md5check, synopsis_md5check);
res |= ast_register_application(app_md5, md5_exec, desc_md5, synopsis_md5);
return res;
}
char *description(void)
{
return tdesc_md5;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

File diff suppressed because it is too large Load Diff

View File

@@ -19,29 +19,28 @@
/*! \file
*
* \brief Digital Milliwatt Test
*
* \author Mark Spencer <markster@digium.com>
*
* \ingroup applications
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/lock.h"
#include "asterisk/file.h"
#include "asterisk/logger.h"
#include "asterisk/channel.h"
#include "asterisk/pbx.h"
#include "asterisk/module.h"
#include "asterisk/utils.h"
static char *tdesc = "Digital Milliwatt (mu-law) Test Application";
static char *app = "Milliwatt";
@@ -50,12 +49,19 @@ static char *synopsis = "Generate a Constant 1000Hz tone at 0dbm (mu-law)";
static char *descrip =
"Milliwatt(): Generate a Constant 1000Hz tone at 0dbm (mu-law)\n";
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
static char digital_milliwatt[] = {0x1e,0x0b,0x0b,0x1e,0x9e,0x8b,0x8b,0x9e} ;
static void *milliwatt_alloc(struct ast_channel *chan, void *params)
{
return ast_calloc(1, sizeof(int));
int *indexp;
indexp = malloc(sizeof(int));
if (indexp == NULL) return(NULL);
*indexp = 0;
return(indexp);
}
static void milliwatt_release(struct ast_channel *chan, void *data)
@@ -66,30 +72,26 @@ static void milliwatt_release(struct ast_channel *chan, void *data)
static int milliwatt_generate(struct ast_channel *chan, void *data, int len, int samples)
{
struct ast_frame wf;
unsigned char buf[AST_FRIENDLY_OFFSET + 640];
const int maxsamples = sizeof (buf) / sizeof (buf[0]);
int i, *indexp = (int *) data;
struct ast_frame wf = {
.frametype = AST_FRAME_VOICE,
.subclass = AST_FORMAT_ULAW,
.offset = AST_FRIENDLY_OFFSET,
.data = buf + AST_FRIENDLY_OFFSET,
.src = __FUNCTION__,
};
int i,*indexp = (int *) data;
/* 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;
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;
}
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 = samples;
wf.samples = wf.datalen;
wf.src = "app_milliwatt";
wf.delivery.tv_sec = 0;
wf.delivery.tv_usec = 0;
wf.prev = wf.next = NULL;
/* create a buffer containing the digital milliwatt pattern */
for(i = 0; i < len; i++)
{
@@ -114,8 +116,8 @@ static struct ast_generator milliwattgen =
static int milliwatt_exec(struct ast_channel *chan, void *data)
{
struct ast_module_user *u;
u = ast_module_user_add(chan);
struct localuser *u;
LOCAL_USER_ADD(u);
ast_set_write_format(chan, AST_FORMAT_ULAW);
ast_set_read_format(chan, AST_FORMAT_ULAW);
if (chan->_state != AST_STATE_UP)
@@ -125,29 +127,44 @@ static int milliwatt_exec(struct ast_channel *chan, void *data)
if (ast_activate_generator(chan,&milliwattgen,"milliwatt") < 0)
{
ast_log(LOG_WARNING,"Failed to activate generator on '%s'\n",chan->name);
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return -1;
}
while(!ast_safe_sleep(chan, 10000));
ast_deactivate_generator(chan);
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return -1;
}
static int unload_module(void)
int unload_module(void)
{
int res;
res = ast_unregister_application(app);
ast_module_user_hangup_all();
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int load_module(void)
{
return ast_register_application(app, milliwatt_exec, synopsis, descrip);
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Digital Milliwatt (mu-law) Test Application");
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

View File

@@ -2,7 +2,7 @@
* Asterisk -- An open source telephony toolkit.
*
* Copyright (C) 2005, Anthony Minessale II
* Copyright (C) 2005 - 2006, Digium, Inc.
* Copyright (C) 2005, Digium, Inc.
*
* Mark Spencer <markster@digium.com>
* Kevin P. Fleming <kpfleming@digium.com>
@@ -22,26 +22,19 @@
*/
/*! \file
*
* \brief MixMonitor() - Record a call and mix the audio during the recording
* \ingroup applications
*
* \author Mark Spencer <markster@digium.com>
* \author Kevin P. Fleming <kpfleming@digium.com>
*
* \note Based on app_muxmon.c provided by
* Anthony Minessale II <anthmct@yahoo.com>
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/file.h"
#include "asterisk/logger.h"
#include "asterisk/channel.h"
@@ -53,10 +46,10 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/options.h"
#include "asterisk/app.h"
#include "asterisk/linkedlists.h"
#include "asterisk/utils.h"
#define get_volfactor(x) x ? ((x > 0) ? (1 << x) : ((1 << abs(x)) * -1)) : 0
static const char *tdesc = "Mixed Audio Monitoring Application";
static const char *app = "MixMonitor";
static const char *synopsis = "Record a call and mix the audio during the recording";
static const char *desc = ""
@@ -80,15 +73,9 @@ static const char *desc = ""
"The variable MIXMONITOR_FILENAME will contain the filename used to record.\n"
"";
static const char *stop_app = "StopMixMonitor";
static const char *stop_synopsis = "Stop recording a call through MixMonitor";
static const char *stop_desc = ""
" StopMixMonitor()\n\n"
"Stops the audio recording that was started with a call to MixMonitor()\n"
"on the current channel.\n"
"";
STANDARD_LOCAL_USER;
struct module_symbols *me;
LOCAL_USER_DECL;
static const char *mixmonitor_spy_type = "MixMonitor";
@@ -131,9 +118,9 @@ static int startmon(struct ast_channel *chan, struct ast_channel_spy *spy)
if (!chan)
return -1;
ast_channel_lock(chan);
ast_mutex_lock(&chan->lock);
res = ast_channel_spy_add(chan, spy);
ast_channel_unlock(chan);
ast_mutex_unlock(&chan->lock);
if (!res && ast_test_flag(chan, AST_FLAG_NBRIDGE) && (peer = ast_bridged_channel(chan)))
ast_softhangup(peer, AST_SOFTHANGUP_UNBRIDGE);
@@ -151,7 +138,10 @@ static void *mixmonitor_thread(void *obj)
unsigned int oflags;
char *ext;
int errflag = 0;
STANDARD_INCREMENT_USECOUNT;
if (option_verbose > 1)
ast_verbose(VERBOSE_PREFIX_2 "Begin MixMonitor Recording %s\n", mixmonitor->name);
@@ -177,7 +167,7 @@ static void *mixmonitor_thread(void *obj)
of frames if a queue flush was necessary, so process them
*/
for (; f; f = next) {
next = AST_LIST_NEXT(f, frame_list);
next = f->next;
if (write && errflag == 0) {
if (!fs) {
/* Determine creation flags and filename plus extension for filestream */
@@ -199,15 +189,15 @@ static void *mixmonitor_thread(void *obj)
if (fs)
ast_writestream(fs, f);
}
ast_frame_free(f, 0);
ast_frfree(f);
}
}
}
ast_mutex_unlock(&mixmonitor->spy.lock);
ast_channel_spy_free(&mixmonitor->spy);
ast_channel_spy_free(&mixmonitor->spy);
if (option_verbose > 1)
ast_verbose(VERBOSE_PREFIX_2 "End MixMonitor Recording %s\n", mixmonitor->name);
@@ -222,6 +212,7 @@ static void *mixmonitor_thread(void *obj)
free(mixmonitor);
STANDARD_DECREMENT_USECOUNT;
return NULL;
}
@@ -255,6 +246,7 @@ static void launch_monitor_thread(struct ast_channel *chan, const char *filename
/* Pre-allocate mixmonitor structure and spy */
if (!(mixmonitor = calloc(1, len))) {
ast_log(LOG_ERROR, "Memory Error!\n");
return;
}
@@ -298,7 +290,7 @@ static void launch_monitor_thread(struct ast_channel *chan, const char *filename
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
ast_pthread_create_background(&thread, &attr, mixmonitor_thread, mixmonitor);
ast_pthread_create(&thread, &attr, mixmonitor_thread, mixmonitor);
pthread_attr_destroy(&attr);
}
@@ -306,7 +298,7 @@ static void launch_monitor_thread(struct ast_channel *chan, const char *filename
static int mixmonitor_exec(struct ast_channel *chan, void *data)
{
int x, readvol = 0, writevol = 0;
struct ast_module_user *u;
struct localuser *u;
struct ast_flags flags = {0};
char *parse;
AST_DECLARE_APP_ARGS(args,
@@ -320,15 +312,19 @@ static int mixmonitor_exec(struct ast_channel *chan, void *data)
return -1;
}
u = ast_module_user_add(chan);
LOCAL_USER_ADD(u);
parse = ast_strdupa(data);
if (!(parse = ast_strdupa(data))) {
ast_log(LOG_WARNING, "Memory Error!\n");
LOCAL_USER_REMOVE(u);
return -1;
}
AST_STANDARD_APP_ARGS(args, parse);
if (ast_strlen_zero(args.filename)) {
ast_log(LOG_WARNING, "MixMonitor requires an argument (filename)\n");
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return -1;
}
@@ -340,7 +336,7 @@ static int mixmonitor_exec(struct ast_channel *chan, void *data)
if (ast_test_flag(&flags, MUXFLAG_READVOLUME)) {
if (ast_strlen_zero(opts[OPT_ARG_READVOLUME])) {
ast_log(LOG_WARNING, "No volume level was provided for the heard volume ('v') option.\n");
} else if ((sscanf(opts[OPT_ARG_READVOLUME], "%d", &x) != 1) || (x < -4) || (x > 4)) {
} else if ((sscanf(opts[OPT_ARG_READVOLUME], "%2d", &x) != 1) || (x < -4) || (x > 4)) {
ast_log(LOG_NOTICE, "Heard volume must be a number between -4 and 4, not '%s'\n", opts[OPT_ARG_READVOLUME]);
} else {
readvol = get_volfactor(x);
@@ -350,7 +346,7 @@ static int mixmonitor_exec(struct ast_channel *chan, void *data)
if (ast_test_flag(&flags, MUXFLAG_WRITEVOLUME)) {
if (ast_strlen_zero(opts[OPT_ARG_WRITEVOLUME])) {
ast_log(LOG_WARNING, "No volume level was provided for the spoken volume ('V') option.\n");
} else if ((sscanf(opts[OPT_ARG_WRITEVOLUME], "%d", &x) != 1) || (x < -4) || (x > 4)) {
} else if ((sscanf(opts[OPT_ARG_WRITEVOLUME], "%2d", &x) != 1) || (x < -4) || (x > 4)) {
ast_log(LOG_NOTICE, "Spoken volume must be a number between -4 and 4, not '%s'\n", opts[OPT_ARG_WRITEVOLUME]);
} else {
writevol = get_volfactor(x);
@@ -360,7 +356,7 @@ static int mixmonitor_exec(struct ast_channel *chan, void *data)
if (ast_test_flag(&flags, MUXFLAG_VOLUME)) {
if (ast_strlen_zero(opts[OPT_ARG_VOLUME])) {
ast_log(LOG_WARNING, "No volume level was provided for the combined volume ('W') option.\n");
} else if ((sscanf(opts[OPT_ARG_VOLUME], "%d", &x) != 1) || (x < -4) || (x > 4)) {
} else if ((sscanf(opts[OPT_ARG_VOLUME], "%2d", &x) != 1) || (x < -4) || (x > 4)) {
ast_log(LOG_NOTICE, "Combined volume must be a number between -4 and 4, not '%s'\n", opts[OPT_ARG_VOLUME]);
} else {
readvol = writevol = get_volfactor(x);
@@ -380,22 +376,7 @@ static int mixmonitor_exec(struct ast_channel *chan, void *data)
pbx_builtin_setvar_helper(chan, "MIXMONITOR_FILENAME", args.filename);
launch_monitor_thread(chan, args.filename, flags.flags, readvol, writevol, args.post_process);
ast_module_user_remove(u);
return 0;
}
static int stop_mixmonitor_exec(struct ast_channel *chan, void *data)
{
struct ast_module_user *u;
u = ast_module_user_add(chan);
ast_channel_lock(chan);
ast_channel_spy_stop_by_type(chan, mixmonitor_spy_type);
ast_channel_unlock(chan);
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return 0;
}
@@ -417,47 +398,57 @@ static int mixmonitor_cli(int fd, int argc, char **argv)
else if (!strcasecmp(argv[1], "stop"))
ast_channel_spy_stop_by_type(chan, mixmonitor_spy_type);
ast_channel_unlock(chan);
ast_mutex_unlock(&chan->lock);
return RESULT_SUCCESS;
}
static char *complete_mixmonitor_cli(const char *line, const char *word, int pos, int state)
{
return ast_complete_channels(line, word, pos, state, 2);
}
static struct ast_cli_entry cli_mixmonitor[] = {
{ { "mixmonitor", NULL, NULL },
mixmonitor_cli, "Execute a MixMonitor command.",
"mixmonitor <start|stop> <chan_name> [args]\n\n"
"The optional arguments are passed to the\n"
"MixMonitor application when the 'start' command is used.\n",
complete_mixmonitor_cli },
static struct ast_cli_entry cli_mixmonitor = {
{ "mixmonitor", NULL, NULL },
mixmonitor_cli,
"Execute a MixMonitor command",
"mixmonitor <start|stop> <chan_name> [<args>]\n"
};
static int unload_module(void)
int unload_module(void)
{
int res;
ast_cli_unregister_multiple(cli_mixmonitor, sizeof(cli_mixmonitor) / sizeof(struct ast_cli_entry));
res = ast_unregister_application(stop_app);
res = ast_cli_unregister(&cli_mixmonitor);
res |= ast_unregister_application(app);
ast_module_user_hangup_all();
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int load_module(void)
{
int res;
ast_cli_register_multiple(cli_mixmonitor, sizeof(cli_mixmonitor) / sizeof(struct ast_cli_entry));
res = ast_register_application(app, mixmonitor_exec, synopsis, desc);
res |= ast_register_application(stop_app, stop_mixmonitor_exec, stop_synopsis, stop_desc);
res = ast_cli_register(&cli_mixmonitor);
res |= ast_register_application(app, mixmonitor_exec, synopsis, desc);
return res;
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Mixed Audio Monitoring Application");
char *description(void)
{
return (char *) tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

View File

@@ -1,179 +0,0 @@
/*
* Asterisk -- An open source telephony toolkit.
*
* Copyright (c) 2006, Tilghman Lesher. All rights reserved.
*
* Tilghman Lesher <app_morsecode__v001@the-tilghman.com>
*
* This code is released by the author with no restrictions on usage.
*
* See http://www.asterisk.org for more information about
* the Asterisk project. Please do not directly contact
* any of the maintainers of this project for assistance;
* the project provides a web site, mailing lists and IRC
* channels for your use.
*
*/
/*! \file
*
* \brief Morsecode application
*
* \author Tilghman Lesher <app_morsecode__v001@the-tilghman.com>
*
* \ingroup applications
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include "asterisk/file.h"
#include "asterisk/logger.h"
#include "asterisk/options.h"
#include "asterisk/channel.h"
#include "asterisk/pbx.h"
#include "asterisk/module.h"
#include "asterisk/indications.h"
static char *app_morsecode = "Morsecode";
static char *morsecode_synopsis = "Plays morse code";
static char *morsecode_descrip =
"Usage: Morsecode(<string>)\n"
"Plays the Morse code equivalent of the passed string. If the variable\n"
"MORSEDITLEN is set, it will use that value for the length (in ms) of the dit\n"
"(defaults to 80). Additionally, if MORSETONE is set, it will use that tone\n"
"(in Hz). The tone default is 800.\n";
static char *morsecode[] = {
"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", /* 0-15 */
"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", /* 16-31 */
" ", /* 32 - <space> */
".-.-.-", /* 33 - ! */
".-..-.", /* 34 - " */
"", /* 35 - # */
"", /* 36 - $ */
"", /* 37 - % */
"", /* 38 - & */
".----.", /* 39 - ' */
"-.--.-", /* 40 - ( */
"-.--.-", /* 41 - ) */
"", /* 42 - * */
"", /* 43 - + */
"--..--", /* 44 - , */
"-....-", /* 45 - - */
".-.-.-", /* 46 - . */
"-..-.", /* 47 - / */
"-----", ".----", "..---", "...--", "....-", ".....", "-....", "--...", "---..", "----.", /* 48-57 - 0-9 */
"---...", /* 58 - : */
"-.-.-.", /* 59 - ; */
"", /* 60 - < */
"-...-", /* 61 - = */
"", /* 62 - > */
"..--..", /* 63 - ? */
".--.-.", /* 64 - @ */
".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--",
"-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--..",
"-.--.-", /* 91 - [ (really '(') */
"-..-.", /* 92 - \ (really '/') */
"-.--.-", /* 93 - ] (really ')') */
"", /* 94 - ^ */
"..--.-", /* 95 - _ */
".----.", /* 96 - ` */
".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--",
"-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--..",
"-.--.-", /* 123 - { (really '(') */
"", /* 124 - | */
"-.--.-", /* 125 - } (really ')') */
"-..-.", /* 126 - ~ (really bar) */
". . .", /* 127 - <del> (error) */
};
static void playtone(struct ast_channel *chan, int tone, int len)
{
char dtmf[20];
snprintf(dtmf, sizeof(dtmf), "%d/%d", tone, len);
ast_playtones_start(chan, 0, dtmf, 0);
ast_safe_sleep(chan, len);
ast_playtones_stop(chan);
}
static int morsecode_exec(struct ast_channel *chan, void *data)
{
int res=0, ditlen, tone;
char *digit;
const char *ditlenc, *tonec;
struct ast_module_user *u;
u = ast_module_user_add(chan);
if (ast_strlen_zero(data)) {
ast_log(LOG_WARNING, "Syntax: Morsecode(<string>) - no argument found\n");
ast_module_user_remove(u);
return 0;
}
/* Use variable MORESEDITLEN, if set (else 80) */
ditlenc = pbx_builtin_getvar_helper(chan, "MORSEDITLEN");
if (ast_strlen_zero(ditlenc) || (sscanf(ditlenc, "%d", &ditlen) != 1)) {
ditlen = 80;
}
/* Use variable MORSETONE, if set (else 800) */
tonec = pbx_builtin_getvar_helper(chan, "MORSETONE");
if (ast_strlen_zero(tonec) || (sscanf(tonec, "%d", &tone) != 1)) {
tone = 800;
}
for (digit = data; *digit; digit++) {
int digit2 = *digit;
char *dahdit;
if (digit2 < 0) {
continue;
}
for (dahdit = morsecode[digit2]; *dahdit; dahdit++) {
if (*dahdit == '-') {
playtone(chan, tone, 3 * ditlen);
} else if (*dahdit == '.') {
playtone(chan, tone, 1 * ditlen);
} else {
/* Account for ditlen of silence immediately following */
playtone(chan, 0, 2 * ditlen);
}
/* Pause slightly between each dit and dah */
playtone(chan, 0, 1 * ditlen);
}
/* Pause between characters */
playtone(chan, 0, 2 * ditlen);
}
ast_module_user_remove(u);
return res;
}
static int unload_module(void)
{
int res;
res = ast_unregister_application(app_morsecode);
ast_module_user_hangup_all();
return res;
}
static int load_module(void)
{
return ast_register_application(app_morsecode, morsecode_exec, morsecode_synopsis, morsecode_descrip);
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Morse code");

View File

@@ -19,16 +19,10 @@
/*! \file
*
* \brief Silly application to play an MP3 file -- uses mpg123
*
* \author Mark Spencer <markster@digium.com>
*
* \ingroup applications
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <string.h>
#include <stdio.h>
#include <signal.h>
@@ -37,6 +31,10 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <fcntl.h>
#include <sys/time.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/lock.h"
#include "asterisk/file.h"
#include "asterisk/logger.h"
@@ -50,6 +48,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#define LOCAL_MPG_123 "/usr/local/bin/mpg123"
#define MPG_123 "/usr/bin/mpg123"
static char *tdesc = "Silly MP3 Application";
static char *app = "MP3Player";
static char *synopsis = "Play an MP3 file or stream";
@@ -59,6 +59,9 @@ static char *descrip =
"which typically would be a filename or a URL. User can exit by pressing\n"
"any key on the dialpad, or by hanging up.";
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
static int mp3play(char *filename, int fd)
{
@@ -76,7 +79,7 @@ static int mp3play(char *filename, int fd)
pthread_sigmask(SIG_SETMASK, &oldset, NULL);
return res;
}
if (ast_opt_high_priority)
if (option_highpriority)
ast_set_priority(0);
signal(SIGPIPE, SIG_DFL);
pthread_sigmask(SIG_UNBLOCK, &fullset, NULL);
@@ -125,7 +128,7 @@ static int timed_read(int fd, void *data, int datalen, int timeout)
static int mp3_exec(struct ast_channel *chan, void *data)
{
int res=0;
struct ast_module_user *u;
struct localuser *u;
int fds[2];
int ms = -1;
int pid = -1;
@@ -144,11 +147,11 @@ static int mp3_exec(struct ast_channel *chan, void *data)
return -1;
}
u = ast_module_user_add(chan);
LOCAL_USER_ADD(u);
if (pipe(fds)) {
ast_log(LOG_WARNING, "Unable to create pipe\n");
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return -1;
}
@@ -158,7 +161,7 @@ static int mp3_exec(struct ast_channel *chan, void *data)
res = ast_set_write_format(chan, AST_FORMAT_SLINEAR);
if (res < 0) {
ast_log(LOG_WARNING, "Unable to set write format to signed linear\n");
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return -1;
}
@@ -231,25 +234,40 @@ static int mp3_exec(struct ast_channel *chan, void *data)
if (!res && owriteformat)
ast_set_write_format(chan, owriteformat);
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return res;
}
static int unload_module(void)
int unload_module(void)
{
int res;
res = ast_unregister_application(app);
ast_module_user_hangup_all();
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int load_module(void)
{
return ast_register_application(app, mp3_exec, synopsis, descrip);
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Silly MP3 Application");
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

View File

@@ -19,16 +19,10 @@
/*! \file
*
* \brief Silly application to play an NBScat file -- uses nbscat8k
*
* \author Mark Spencer <markster@digium.com>
*
*
* \ingroup applications
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <string.h>
#include <stdio.h>
#include <signal.h>
@@ -38,6 +32,10 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <sys/time.h>
#include <sys/socket.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/lock.h"
#include "asterisk/file.h"
#include "asterisk/logger.h"
@@ -55,6 +53,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#define AF_LOCAL AF_UNIX
#endif
static char *tdesc = "Silly NBS Stream Application";
static char *app = "NBScat";
static char *synopsis = "Play an NBS local stream";
@@ -63,6 +63,9 @@ static char *descrip =
" NBScat: Executes nbscat to listen to the local NBS stream.\n"
"User can exit by pressing any key\n.";
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
static int NBScatplay(int fd)
{
@@ -83,7 +86,7 @@ static int NBScatplay(int fd)
signal(SIGPIPE, SIG_DFL);
pthread_sigmask(SIG_UNBLOCK, &fullset, NULL);
if (ast_opt_high_priority)
if (option_highpriority)
ast_set_priority(0);
dup2(fd, STDOUT_FILENO);
@@ -116,7 +119,7 @@ static int timed_read(int fd, void *data, int datalen)
static int NBScat_exec(struct ast_channel *chan, void *data)
{
int res=0;
struct ast_module_user *u;
struct localuser *u;
int fds[2];
int ms = -1;
int pid = -1;
@@ -129,11 +132,11 @@ static int NBScat_exec(struct ast_channel *chan, void *data)
short frdata[160];
} myf;
u = ast_module_user_add(chan);
LOCAL_USER_ADD(u);
if (socketpair(AF_LOCAL, SOCK_STREAM, 0, fds)) {
ast_log(LOG_WARNING, "Unable to create socketpair\n");
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return -1;
}
@@ -143,7 +146,7 @@ static int NBScat_exec(struct ast_channel *chan, void *data)
res = ast_set_write_format(chan, AST_FORMAT_SLINEAR);
if (res < 0) {
ast_log(LOG_WARNING, "Unable to set write format to signed linear\n");
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return -1;
}
@@ -213,25 +216,40 @@ static int NBScat_exec(struct ast_channel *chan, void *data)
if (!res && owriteformat)
ast_set_write_format(chan, owriteformat);
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return res;
}
static int unload_module(void)
int unload_module(void)
{
int res;
res = ast_unregister_application(app);
ast_module_user_hangup_all();
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int load_module(void)
{
return ast_register_application(app, NBScat_exec, synopsis, descrip);
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Silly NBS Stream Application");
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

File diff suppressed because it is too large Load Diff

View File

@@ -20,26 +20,19 @@
*
* \brief page() - Paging application
*
* \author Mark Spencer <markster@digium.com>
*
* \ingroup applications
*/
/*** MODULEINFO
<depend>zaptel</depend>
<depend>app_meetme</depend>
***/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/options.h"
#include "asterisk/logger.h"
#include "asterisk/channel.h"
@@ -48,9 +41,9 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/file.h"
#include "asterisk/app.h"
#include "asterisk/chanvars.h"
#include "asterisk/utils.h"
#include "asterisk/dial.h"
#include "asterisk/devicestate.h"
static const char *tdesc = "Page Multiple Phones";
static const char *app_page= "Page";
@@ -63,48 +56,121 @@ static const char *page_descrip =
"caller is dumped into the conference as a speaker and the room is\n"
"destroyed when the original caller leaves. Valid options are:\n"
" d - full duplex audio\n"
" q - quiet, do not play beep to caller\n"
" r - record the page into a file (see 'r' for app_meetme)\n";
" q - quiet, do not play beep to caller\n";
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
enum {
PAGE_DUPLEX = (1 << 0),
PAGE_QUIET = (1 << 1),
PAGE_RECORD = (1 << 2),
} page_opt_flags;
AST_APP_OPTIONS(page_opts, {
AST_APP_OPTION('d', PAGE_DUPLEX),
AST_APP_OPTION('q', PAGE_QUIET),
AST_APP_OPTION('r', PAGE_RECORD),
});
#define MAX_DIALS 128
struct calloutdata {
char cidnum[64];
char cidname[64];
char tech[64];
char resource[256];
char meetmeopts[64];
struct ast_variable *variables;
};
static void *page_thread(void *data)
{
struct calloutdata *cd = data;
ast_pbx_outgoing_app(cd->tech, AST_FORMAT_SLINEAR, cd->resource, 30000,
"MeetMe", cd->meetmeopts, NULL, 0, cd->cidnum, cd->cidname, cd->variables, NULL, NULL);
free(cd);
return NULL;
}
static void launch_page(struct ast_channel *chan, const char *meetmeopts, const char *tech, const char *resource)
{
struct calloutdata *cd;
const char *varname;
struct ast_variable *lastvar = NULL;
struct ast_var_t *varptr;
pthread_t t;
pthread_attr_t attr;
cd = malloc(sizeof(struct calloutdata));
if (cd) {
memset(cd, 0, sizeof(struct calloutdata));
ast_copy_string(cd->cidnum, chan->cid.cid_num ? chan->cid.cid_num : "", sizeof(cd->cidnum));
ast_copy_string(cd->cidname, chan->cid.cid_name ? chan->cid.cid_name : "", sizeof(cd->cidname));
ast_copy_string(cd->tech, tech, sizeof(cd->tech));
ast_copy_string(cd->resource, resource, sizeof(cd->resource));
ast_copy_string(cd->meetmeopts, meetmeopts, sizeof(cd->meetmeopts));
AST_LIST_TRAVERSE(&chan->varshead, varptr, entries) {
if (!(varname = ast_var_full_name(varptr)))
continue;
if (varname[0] == '_') {
struct ast_variable *newvar = NULL;
if (varname[1] == '_') {
newvar = ast_variable_new(varname, ast_var_value(varptr));
} else {
newvar = ast_variable_new(&varname[1], ast_var_value(varptr));
}
if (newvar) {
if (lastvar)
lastvar->next = newvar;
else
cd->variables = newvar;
lastvar = newvar;
}
}
}
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
if (ast_pthread_create(&t, &attr, page_thread, cd)) {
ast_log(LOG_WARNING, "Unable to create paging thread: %s\n", strerror(errno));
free(cd);
}
pthread_attr_destroy(&attr);
}
}
static int page_exec(struct ast_channel *chan, void *data)
{
struct ast_module_user *u;
char *options, *tech, *resource, *tmp;
char meetmeopts[88], originator[AST_CHANNEL_NAME];
struct localuser *u;
char *options;
char *tech, *resource;
char meetmeopts[80];
struct ast_flags flags = { 0 };
unsigned int confid = ast_random();
unsigned int confid = rand();
struct ast_app *app;
int res = 0, pos = 0, i = 0;
struct ast_dial *dials[MAX_DIALS];
char *tmp;
int res=0;
char originator[AST_CHANNEL_NAME];
if (ast_strlen_zero(data)) {
ast_log(LOG_WARNING, "This application requires at least one argument (destination(s) to page)\n");
return -1;
}
u = ast_module_user_add(chan);
LOCAL_USER_ADD(u);
if (!(app = pbx_findapp("MeetMe"))) {
ast_log(LOG_WARNING, "There is no MeetMe application available!\n");
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return -1;
};
options = ast_strdupa(data);
if (!options) {
ast_log(LOG_ERROR, "Out of memory\n");
LOCAL_USER_REMOVE(u);
return -1;
}
ast_copy_string(originator, chan->name, sizeof(originator));
if ((tmp = strchr(originator, '-')))
@@ -114,42 +180,19 @@ static int page_exec(struct ast_channel *chan, void *data)
if (options)
ast_app_parse_options(page_opts, &flags, NULL, options);
snprintf(meetmeopts, sizeof(meetmeopts), "MeetMe|%ud|%s%sqxdw(5)", confid, (ast_test_flag(&flags, PAGE_DUPLEX) ? "" : "m"),
(ast_test_flag(&flags, PAGE_RECORD) ? "r" : "") );
snprintf(meetmeopts, sizeof(meetmeopts), "%ud|%sqxdw(5)", confid, ast_test_flag(&flags, PAGE_DUPLEX) ? "" : "m");
/* Go through parsing/calling each device */
while ((tech = strsep(&tmp, "&"))) {
struct ast_dial *dial = NULL;
/* don't call the originating device */
if (!strcasecmp(tech, originator))
continue;
/* If no resource is available, continue on */
if (!(resource = strchr(tech, '/'))) {
if ((resource = strchr(tech, '/'))) {
*resource++ = '\0';
launch_page(chan, meetmeopts, tech, resource);
} else {
ast_log(LOG_WARNING, "Incomplete destination '%s' supplied.\n", tech);
continue;
}
*resource++ = '\0';
/* Create a dialing structure */
if (!(dial = ast_dial_create())) {
ast_log(LOG_WARNING, "Failed to create dialing structure.\n");
continue;
}
/* Append technology and resource */
ast_dial_append(dial, tech, resource);
/* Set ANSWER_EXEC as global option */
ast_dial_option_global_enable(dial, AST_DIAL_OPTION_ANSWER_EXEC, meetmeopts);
/* Run this dial in async mode */
ast_dial_run(dial, chan, 1);
/* Put in our dialing array */
dials[pos++] = dial;
}
if (!ast_test_flag(&flags, PAGE_QUIET)) {
@@ -157,47 +200,47 @@ static int page_exec(struct ast_channel *chan, void *data)
if (!res)
res = ast_waitstream(chan, "");
}
if (!res) {
snprintf(meetmeopts, sizeof(meetmeopts), "%ud|A%s%sqxd", confid, (ast_test_flag(&flags, PAGE_DUPLEX) ? "" : "t"),
(ast_test_flag(&flags, PAGE_RECORD) ? "r" : "") );
pbx_exec(chan, app, meetmeopts);
snprintf(meetmeopts, sizeof(meetmeopts), "%ud|A%sqxd", confid, ast_test_flag(&flags, PAGE_DUPLEX) ? "" : "t");
pbx_exec(chan, app, meetmeopts, 1);
}
/* Go through each dial attempt cancelling, joining, and destroying */
for (i = 0; i < pos; i++) {
struct ast_dial *dial = dials[i];
/* We have to wait for the async thread to exit as it's possible Meetme won't throw them out immediately */
ast_dial_join(dial);
/* Hangup all channels */
ast_dial_hangup(dial);
/* Destroy dialing structure */
ast_dial_destroy(dial);
}
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return -1;
}
static int unload_module(void)
int unload_module(void)
{
int res;
res = ast_unregister_application(app_page);
ast_module_user_hangup_all();
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int load_module(void)
{
return ast_register_application(app_page, page_exec, page_synopsis, page_descrip);
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Page Multiple Phones");
char *description(void)
{
return (char *) tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

View File

@@ -1,7 +1,7 @@
/*
* Asterisk -- An open source telephony toolkit.
*
* Copyright (C) 1999 - 2006, Digium, Inc.
* Copyright (C) 1999 - 2005, Digium, Inc.
*
* Mark Spencer <markster@digium.com>
*
@@ -22,23 +22,20 @@
/*! \file
*
* \brief ParkAndAnnounce application for Asterisk
*
* \author Ben Miller <bgmiller@dccinc.com>
* \arg With TONS of help from Mark!
*
*
* \ingroup applications
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/file.h"
#include "asterisk/logger.h"
#include "asterisk/channel.h"
@@ -49,7 +46,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/logger.h"
#include "asterisk/say.h"
#include "asterisk/lock.h"
#include "asterisk/utils.h"
static char *tdesc = "Call Parking and Announce Application";
static char *app = "ParkAndAnnounce";
@@ -57,54 +55,57 @@ static char *synopsis = "Park and Announce";
static char *descrip =
" ParkAndAnnounce(announce:template|timeout|dial|[return_context]):\n"
"Park a call into the parkinglot and announce the call to another channel.\n"
"\n"
"announce template: Colon-separated list of files to announce. The word PARKED\n"
" will be replaced by a say_digits of the extension in which\n"
" the call is parked.\n"
"timeout: Time in seconds before the call returns into the return\n"
" context.\n"
"dial: The app_dial style resource to call to make the\n"
" announcement. Console/dsp calls the console.\n"
"return_context: The goto-style label to jump the call back into after\n"
" timeout. Default <priority+1>.\n"
"\n"
"The variable ${PARKEDAT} will contain the parking extension into which the\n"
"call was placed. Use with the Local channel to allow the dialplan to make\n"
"use of this information.\n";
"Park a call into the parkinglot and announce the call over the console.\n"
"announce template: colon separated list of files to announce, the word PARKED\n"
" will be replaced by a say_digits of the ext the call is parked in\n"
"timeout: time in seconds before the call returns into the return context.\n"
"dial: The app_dial style resource to call to make the announcement. Console/dsp calls the console.\n"
"return_context: the goto style label to jump the call back into after timeout. default=prio+1\n";
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
static int parkandannounce_exec(struct ast_channel *chan, void *data)
{
int res=0;
char *return_context;
int lot, timeout = 0, dres;
int l, lot, timeout = 0, dres;
char *working, *context, *exten, *priority, *dial, *dialtech, *dialstr;
char *template, *tpl_working, *tpl_current;
char *tmp[100];
char buf[13];
int looptemp=0,i=0;
char *s;
char *s,*orig_s;
struct ast_channel *dchan;
struct outgoing_helper oh;
int outstate;
struct ast_module_user *u;
struct localuser *u;
if (ast_strlen_zero(data)) {
ast_log(LOG_WARNING, "ParkAndAnnounce requires arguments: (announce:template|timeout|dial|[return_context])\n");
return -1;
}
u = ast_module_user_add(chan);
LOCAL_USER_ADD(u);
s = ast_strdupa(data);
l=strlen(data)+2;
orig_s=malloc(l);
if(!orig_s) {
ast_log(LOG_WARNING, "Out of memory\n");
LOCAL_USER_REMOVE(u);
return -1;
}
s=orig_s;
strncpy(s,data,l);
template=strsep(&s,"|");
if(! template) {
ast_log(LOG_WARNING, "PARK: An announce template must be defined\n");
ast_module_user_remove(u);
free(orig_s);
LOCAL_USER_REMOVE(u);
return -1;
}
@@ -115,7 +116,8 @@ static int parkandannounce_exec(struct ast_channel *chan, void *data)
dial=strsep(&s, "|");
if(!dial) {
ast_log(LOG_WARNING, "PARK: A dial resource must be specified i.e: Console/dsp or Zap/g1/5551212\n");
ast_module_user_remove(u);
free(orig_s);
LOCAL_USER_REMOVE(u);
return -1;
} else {
dialtech=strsep(&dial, "/");
@@ -147,15 +149,16 @@ static int parkandannounce_exec(struct ast_channel *chan, void *data)
}
if(atoi(priority) < 0) {
ast_log(LOG_WARNING, "Priority '%s' must be a number > 0\n", priority);
ast_module_user_remove(u);
free(orig_s);
LOCAL_USER_REMOVE(u);
return -1;
}
/* At this point we have a priority and maybe an extension and a context */
chan->priority = atoi(priority);
if (exten)
ast_copy_string(chan->exten, exten, sizeof(chan->exten));
if (context)
ast_copy_string(chan->context, context, sizeof(chan->context));
if(exten && strcasecmp(exten, "BYEXTENSION"))
strncpy(chan->exten, exten, sizeof(chan->exten)-1);
if(context)
strncpy(chan->context, context, sizeof(chan->context)-1);
} else { /* increment the priority by default*/
chan->priority++;
}
@@ -178,10 +181,8 @@ static int parkandannounce_exec(struct ast_channel *chan, void *data)
/* Now place the call to the extention */
snprintf(buf, sizeof(buf), "%d", lot);
memset(&oh, 0, sizeof(oh));
oh.parent_channel = chan;
oh.vars = ast_variable_new("_PARKEDAT", buf);
dchan = __ast_request_and_dial(dialtech, AST_FORMAT_SLINEAR, dialstr,30000, &outstate, chan->cid.cid_num, chan->cid.cid_name, &oh);
if(dchan) {
@@ -193,12 +194,14 @@ static int parkandannounce_exec(struct ast_channel *chan, void *data)
ast_verbose(VERBOSE_PREFIX_4 "Channel %s was never answered.\n", dchan->name);
ast_log(LOG_WARNING, "PARK: Channel %s was never answered for the announce.\n", dchan->name);
ast_hangup(dchan);
ast_module_user_remove(u);
free(orig_s);
LOCAL_USER_REMOVE(u);
return -1;
}
} else {
ast_log(LOG_WARNING, "PARK: Unable to allocate announce channel.\n");
ast_module_user_remove(u);
free(orig_s);
LOCAL_USER_REMOVE(u);
return -1;
}
@@ -234,27 +237,45 @@ static int parkandannounce_exec(struct ast_channel *chan, void *data)
ast_stopstream(dchan);
ast_hangup(dchan);
free(orig_s);
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return res;
}
static int unload_module(void)
int unload_module(void)
{
int res;
res = ast_unregister_application(app);
ast_module_user_hangup_all();
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int load_module(void)
{
/* return ast_register_application(app, park_exec); */
return ast_register_application(app, parkandannounce_exec, synopsis, descrip);
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Call Parking and Announce Application");
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

View File

@@ -19,20 +19,18 @@
/*! \file
*
* \brief Trivial application to playback a sound file
*
* \author Mark Spencer <markster@digium.com>
*
* \ingroup applications
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/lock.h"
#include "asterisk/file.h"
#include "asterisk/logger.h"
@@ -43,9 +41,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/utils.h"
#include "asterisk/options.h"
#include "asterisk/app.h"
#include "asterisk/cli.h"
#include "asterisk/localtime.h"
#include "asterisk/say.h"
static char *tdesc = "Sound File Playback Application";
static char *app = "Playback";
@@ -67,325 +64,19 @@ static char *descrip =
" SUCCESS | FAILED\n"
;
STANDARD_LOCAL_USER;
static struct ast_config *say_cfg = NULL;
/* save the say' api calls.
* The first entry is NULL if we have the standard source,
* otherwise we are sourcing from here.
* 'say load [new|old]' will enable the new or old method, or report status
*/
static const void * say_api_buf[40];
static const char *say_old = "old";
static const char *say_new = "new";
static void save_say_mode(const void *arg)
{
int i = 0;
say_api_buf[i++] = arg;
say_api_buf[i++] = ast_say_number_full;
say_api_buf[i++] = ast_say_enumeration_full;
say_api_buf[i++] = ast_say_digit_str_full;
say_api_buf[i++] = ast_say_character_str_full;
say_api_buf[i++] = ast_say_phonetic_str_full;
say_api_buf[i++] = ast_say_datetime;
say_api_buf[i++] = ast_say_time;
say_api_buf[i++] = ast_say_date;
say_api_buf[i++] = ast_say_datetime_from_now;
say_api_buf[i++] = ast_say_date_with_format;
}
static void restore_say_mode(void *arg)
{
int i = 0;
say_api_buf[i++] = arg;
ast_say_number_full = say_api_buf[i++];
ast_say_enumeration_full = say_api_buf[i++];
ast_say_digit_str_full = say_api_buf[i++];
ast_say_character_str_full = say_api_buf[i++];
ast_say_phonetic_str_full = say_api_buf[i++];
ast_say_datetime = say_api_buf[i++];
ast_say_time = say_api_buf[i++];
ast_say_date = say_api_buf[i++];
ast_say_datetime_from_now = say_api_buf[i++];
ast_say_date_with_format = say_api_buf[i++];
}
/*
* Typical 'say' arguments in addition to the date or number or string
* to say. We do not include 'options' because they may be different
* in recursive calls, and so they are better left as an external
* parameter.
*/
typedef struct {
struct ast_channel *chan;
const char *ints;
const char *language;
int audiofd;
int ctrlfd;
} say_args_t;
static int s_streamwait3(const say_args_t *a, const char *fn)
{
int res = ast_streamfile(a->chan, fn, a->language);
if (res) {
ast_log(LOG_WARNING, "Unable to play message %s\n", fn);
return res;
}
res = (a->audiofd > -1 && a->ctrlfd > -1) ?
ast_waitstream_full(a->chan, a->ints, a->audiofd, a->ctrlfd) :
ast_waitstream(a->chan, a->ints);
ast_stopstream(a->chan);
return res;
}
/*
* the string is 'prefix:data' or prefix:fmt:data'
* with ':' being invalid in strings.
*/
static int do_say(say_args_t *a, const char *s, const char *options, int depth)
{
struct ast_variable *v;
char *lang, *x, *rule = NULL;
int ret = 0;
struct varshead head = { .first = NULL, .last = NULL };
struct ast_var_t *n;
ast_log(LOG_WARNING, "string <%s> depth <%d>\n", s, depth);
if (depth++ > 10) {
ast_log(LOG_WARNING, "recursion too deep, exiting\n");
return -1;
} else if (!say_cfg) {
ast_log(LOG_WARNING, "no say.conf, cannot spell '%s'\n", s);
return -1;
}
/* scan languages same as in file.c */
if (a->language == NULL)
a->language = "en"; /* default */
ast_log(LOG_WARNING, "try <%s> in <%s>\n", s, a->language);
lang = ast_strdupa(a->language);
for (;;) {
for (v = ast_variable_browse(say_cfg, lang); v ; v = v->next) {
if (ast_extension_match(v->name, s)) {
rule = ast_strdupa(v->value);
break;
}
}
if (rule)
break;
if ( (x = strchr(lang, '_')) )
*x = '\0'; /* try without suffix */
else if (strcmp(lang, "en"))
lang = "en"; /* last resort, try 'en' if not done yet */
else
break;
}
if (!rule)
return 0;
/* skip up to two prefixes to get the value */
if ( (x = strchr(s, ':')) )
s = x + 1;
if ( (x = strchr(s, ':')) )
s = x + 1;
ast_log(LOG_WARNING, "value is <%s>\n", s);
n = ast_var_assign("SAY", s);
AST_LIST_INSERT_HEAD(&head, n, entries);
/* scan the body, one piece at a time */
while ( ret <= 0 && (x = strsep(&rule, ",")) ) { /* exit on key */
char fn[128];
const char *p, *fmt, *data; /* format and data pointers */
/* prepare a decent file name */
x = ast_skip_blanks(x);
ast_trim_blanks(x);
/* replace variables */
memset(fn, 0, sizeof(fn)); /* XXX why isn't done in pbx_substitute_variables_helper! */
pbx_substitute_variables_varshead(&head, x, fn, sizeof(fn));
ast_log(LOG_WARNING, "doing [%s]\n", fn);
/* locate prefix and data, if any */
fmt = index(fn, ':');
if (!fmt || fmt == fn) { /* regular filename */
ret = s_streamwait3(a, fn);
continue;
}
fmt++;
data = index(fmt, ':'); /* colon before data */
if (!data || data == fmt) { /* simple prefix-fmt */
ret = do_say(a, fn, options, depth);
continue;
}
/* prefix:fmt:data */
for (p = fmt; p < data && ret <= 0; p++) {
char fn2[sizeof(fn)];
if (*p == ' ' || *p == '\t') /* skip blanks */
continue;
if (*p == '\'') {/* file name - we trim them */
char *y;
strcpy(fn2, ast_skip_blanks(p+1)); /* make a full copy */
y = index(fn2, '\'');
if (!y) {
p = data; /* invalid. prepare to end */
break;
}
*y = '\0';
ast_trim_blanks(fn2);
p = index(p+1, '\'');
ret = s_streamwait3(a, fn2);
} else {
int l = fmt-fn;
strcpy(fn2, fn); /* copy everything */
/* after prefix, append the format */
fn2[l++] = *p;
strcpy(fn2 + l, data);
ret = do_say(a, fn2, options, depth);
}
}
}
ast_var_delete(n);
return ret;
}
static int say_full(struct ast_channel *chan, const char *string,
const char *ints, const char *lang, const char *options,
int audiofd, int ctrlfd)
{
say_args_t a = { chan, ints, lang, audiofd, ctrlfd };
return do_say(&a, string, options, 0);
}
static int say_number_full(struct ast_channel *chan, int num,
const char *ints, const char *lang, const char *options,
int audiofd, int ctrlfd)
{
char buf[64];
say_args_t a = { chan, ints, lang, audiofd, ctrlfd };
snprintf(buf, sizeof(buf), "num:%d", num);
return do_say(&a, buf, options, 0);
}
static int say_enumeration_full(struct ast_channel *chan, int num,
const char *ints, const char *lang, const char *options,
int audiofd, int ctrlfd)
{
char buf[64];
say_args_t a = { chan, ints, lang, audiofd, ctrlfd };
snprintf(buf, sizeof(buf), "enum:%d", num);
return do_say(&a, buf, options, 0);
}
static int say_date_generic(struct ast_channel *chan, time_t t,
const char *ints, const char *lang, const char *format, const char *timezone, const char *prefix)
{
char buf[128];
struct tm tm;
say_args_t a = { chan, ints, lang, -1, -1 };
if (format == NULL)
format = "";
ast_localtime(&t, &tm, NULL);
snprintf(buf, sizeof(buf), "%s:%s:%04d%02d%02d%02d%02d.%02d-%d-%3d",
prefix,
format,
tm.tm_year+1900,
tm.tm_mon+1,
tm.tm_mday,
tm.tm_hour,
tm.tm_min,
tm.tm_sec,
tm.tm_wday,
tm.tm_yday);
return do_say(&a, buf, NULL, 0);
}
static int say_date_with_format(struct ast_channel *chan, time_t t,
const char *ints, const char *lang, const char *format, const char *timezone)
{
return say_date_generic(chan, t, ints, lang, format, timezone, "datetime");
}
static int say_date(struct ast_channel *chan, time_t t, const char *ints, const char *lang)
{
return say_date_generic(chan, t, ints, lang, "", NULL, "date");
}
static int say_time(struct ast_channel *chan, time_t t, const char *ints, const char *lang)
{
return say_date_generic(chan, t, ints, lang, "", NULL, "time");
}
static int say_datetime(struct ast_channel *chan, time_t t, const char *ints, const char *lang)
{
return say_date_generic(chan, t, ints, lang, "", NULL, "datetime");
}
/*
* remap the 'say' functions to use those in this file
*/
static int __say_init(int fd, int argc, char *argv[])
{
const char *old_mode = say_api_buf[0] ? say_new : say_old;
char *mode;
if (argc == 2) {
ast_cli(fd, "say mode is [%s]\n", old_mode);
return RESULT_SUCCESS;
} else if (argc != 3)
return RESULT_SHOWUSAGE;
mode = argv[2];
ast_log(LOG_WARNING, "init say.c from %s to %s\n", old_mode, mode);
if (!strcmp(mode, old_mode)) {
ast_log(LOG_WARNING, "say mode is %s already\n", mode);
} else if (!strcmp(mode, say_new)) {
if (say_cfg == NULL)
say_cfg = ast_config_load("say.conf");
save_say_mode(say_new);
ast_say_number_full = say_number_full;
ast_say_enumeration_full = say_enumeration_full;
#if 0
ast_say_digits_full = say_digits_full;
ast_say_digit_str_full = say_digit_str_full;
ast_say_character_str_full = say_character_str_full;
ast_say_phonetic_str_full = say_phonetic_str_full;
ast_say_datetime_from_now = say_datetime_from_now;
#endif
ast_say_datetime = say_datetime;
ast_say_time = say_time;
ast_say_date = say_date;
ast_say_date_with_format = say_date_with_format;
} else if (!strcmp(mode, say_old) && say_api_buf[0] == say_new) {
restore_say_mode(NULL);
} else {
ast_log(LOG_WARNING, "unrecognized mode %s\n", mode);
}
return RESULT_SUCCESS;
}
static struct ast_cli_entry cli_playback[] = {
{ { "say", "load", NULL },
__say_init, "set/show the say mode",
"say load new|old" },
};
LOCAL_USER_DECL;
static int playback_exec(struct ast_channel *chan, void *data)
{
int res = 0;
int mres = 0;
struct ast_module_user *u;
char *tmp;
int res = 0, mres = 0;
struct localuser *u;
char *tmp = NULL;
int option_skip=0;
int option_say=0;
int option_noanswer = 0;
char *front = NULL, *back = NULL;
int priority_jump = 0;
AST_DECLARE_APP_ARGS(args,
AST_APP_ARG(filenames);
AST_APP_ARG(options);
@@ -396,16 +87,20 @@ static int playback_exec(struct ast_channel *chan, void *data)
return -1;
}
tmp = ast_strdupa(data);
LOCAL_USER_ADD(u);
tmp = ast_strdupa(data);
if (!tmp) {
ast_log(LOG_ERROR, "Out of memory!\n");
LOCAL_USER_REMOVE(u);
return -1;
}
u = ast_module_user_add(chan);
AST_STANDARD_APP_ARGS(args, tmp);
if (args.options) {
if (strcasestr(args.options, "skip"))
option_skip = 1;
if (strcasestr(args.options, "say"))
option_say = 1;
if (strcasestr(args.options, "noanswer"))
option_noanswer = 1;
if (strchr(args.options, 'j'))
@@ -415,78 +110,72 @@ static int playback_exec(struct ast_channel *chan, void *data)
if (chan->_state != AST_STATE_UP) {
if (option_skip) {
/* At the user's option, skip if the line is not up */
goto done;
pbx_builtin_setvar_helper(chan, "PLAYBACKSTATUS", "SUCCESS");
LOCAL_USER_REMOVE(u);
return 0;
} else if (!option_noanswer)
/* Otherwise answer unless we're supposed to send this while on-hook */
res = ast_answer(chan);
}
if (!res) {
char *back = args.filenames;
char *front;
ast_stopstream(chan);
while (!res && (front = strsep(&back, "&"))) {
if (option_say)
res = say_full(chan, front, "", chan->language, NULL, -1, -1);
else
res = ast_streamfile(chan, front, chan->language);
front = tmp;
while (!res && front) {
if ((back = strchr(front, '&'))) {
*back = '\0';
back++;
}
res = ast_streamfile(chan, front, chan->language);
if (!res) {
res = ast_waitstream(chan, "");
ast_stopstream(chan);
} else {
ast_log(LOG_WARNING, "ast_streamfile failed on %s for %s\n", chan->name, (char *)data);
if (priority_jump || ast_opt_priority_jumping)
if (priority_jump || option_priority_jumping)
ast_goto_if_exists(chan, chan->context, chan->exten, chan->priority + 101);
res = 0;
mres = 1;
}
front = back;
}
}
done:
pbx_builtin_setvar_helper(chan, "PLAYBACKSTATUS", mres ? "FAILED" : "SUCCESS");
ast_module_user_remove(u);
if (mres)
pbx_builtin_setvar_helper(chan, "PLAYBACKSTATUS", "FAILED");
else
pbx_builtin_setvar_helper(chan, "PLAYBACKSTATUS", "SUCCESS");
LOCAL_USER_REMOVE(u);
return res;
}
static int reload(void)
{
if (say_cfg) {
ast_config_destroy(say_cfg);
ast_log(LOG_NOTICE, "Reloading say.conf\n");
}
say_cfg = ast_config_load("say.conf");
/*
* XXX here we should sort rules according to the same order
* we have in pbx.c so we have the same matching behaviour.
*/
return 0;
}
static int unload_module(void)
int unload_module(void)
{
int res;
res = ast_unregister_application(app);
ast_cli_unregister_multiple(cli_playback, sizeof(cli_playback) / sizeof(struct ast_cli_entry));
ast_module_user_hangup_all();
if (say_cfg)
ast_config_destroy(say_cfg);
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int load_module(void)
{
say_cfg = ast_config_load("say.conf");
ast_cli_register_multiple(cli_playback, sizeof(cli_playback) / sizeof(struct ast_cli_entry));
return ast_register_application(app, playback_exec, synopsis, descrip);
}
AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Sound File Playback Application",
.load = load_module,
.unload = unload_module,
.reload = reload,
);
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

View File

@@ -19,20 +19,18 @@
/*! \file
*
* \brief Block all calls without Caller*ID, require phone # to be entered
*
* \author Mark Spencer <markster@digium.com>
*
* \ingroup applications
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/lock.h"
#include "asterisk/file.h"
#include "asterisk/utils.h"
@@ -49,6 +47,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#define PRIV_CONFIG "privacy.conf"
static char *tdesc = "Require phone number to be entered, if no CallerID sent";
static char *app = "PrivacyManager";
static char *synopsis = "Require phone number to be entered, if no CallerID sent";
@@ -74,6 +74,11 @@ static char *descrip =
" SUCCESS | FAILED \n"
;
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
static int privacy_exec (struct ast_channel *chan, void *data)
{
@@ -82,9 +87,9 @@ static int privacy_exec (struct ast_channel *chan, void *data)
int maxretries = 3;
int minlength = 10;
int x = 0;
const char *s;
char *s;
char phone[30];
struct ast_module_user *u;
struct localuser *u;
struct ast_config *cfg = NULL;
char *parse = NULL;
int priority_jump = 0;
@@ -94,8 +99,7 @@ static int privacy_exec (struct ast_channel *chan, void *data)
AST_APP_ARG(options);
);
u = ast_module_user_add(chan);
LOCAL_USER_ADD (u);
if (!ast_strlen_zero(chan->cid.cid_num)) {
if (option_verbose > 2)
ast_verbose (VERBOSE_PREFIX_3 "CallerID Present: Skipping\n");
@@ -104,24 +108,30 @@ static int privacy_exec (struct ast_channel *chan, void *data)
if (chan->_state != AST_STATE_UP) {
res = ast_answer(chan);
if (res) {
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return -1;
}
}
if (!ast_strlen_zero(data)) {
if (!ast_strlen_zero((char *)data))
{
parse = ast_strdupa(data);
if (!parse) {
ast_log(LOG_ERROR, "Out of memory!\n");
LOCAL_USER_REMOVE(u);
return -1;
}
AST_STANDARD_APP_ARGS(args, parse);
if (args.maxretries) {
if (sscanf(args.maxretries, "%d", &x) == 1)
if (sscanf(args.maxretries, "%30d", &x) == 1)
maxretries = x;
else
ast_log(LOG_WARNING, "Invalid max retries argument\n");
}
if (args.minlength) {
if (sscanf(args.minlength, "%d", &x) == 1)
if (sscanf(args.minlength, "%30d", &x) == 1)
minlength = x;
else
ast_log(LOG_WARNING, "Invalid min length argument\n");
@@ -138,14 +148,14 @@ static int privacy_exec (struct ast_channel *chan, void *data)
cfg = ast_config_load(PRIV_CONFIG);
if (cfg && (s = ast_variable_retrieve(cfg, "general", "maxretries"))) {
if (sscanf(s, "%d", &x) == 1)
if (sscanf(s, "%30d", &x) == 1)
maxretries = x;
else
ast_log(LOG_WARNING, "Invalid max retries argument\n");
}
if (cfg && (s = ast_variable_retrieve(cfg, "general", "minlength"))) {
if (sscanf(s, "%d", &x) == 1)
if (sscanf(s, "%30d", &x) == 1)
minlength = x;
else
ast_log(LOG_WARNING, "Invalid min length argument\n");
@@ -200,7 +210,7 @@ static int privacy_exec (struct ast_channel *chan, void *data)
}
pbx_builtin_setvar_helper(chan, "PRIVACYMGRSTATUS", "SUCCESS");
} else {
if (priority_jump || ast_opt_priority_jumping)
if (priority_jump || option_priority_jumping)
ast_goto_if_exists(chan, chan->context, chan->exten, chan->priority + 101);
pbx_builtin_setvar_helper(chan, "PRIVACYMGRSTATUS", "FAILED");
}
@@ -208,25 +218,45 @@ static int privacy_exec (struct ast_channel *chan, void *data)
ast_config_destroy(cfg);
}
ast_module_user_remove(u);
return 0;
LOCAL_USER_REMOVE (u);
return 0;
}
static int unload_module(void)
int
unload_module (void)
{
int res;
res = ast_unregister_application (app);
ast_module_user_hangup_all();
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int
load_module (void)
{
return ast_register_application (app, privacy_exec, synopsis, descrip);
return ast_register_application (app, privacy_exec, synopsis,
descrip);
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Require phone number to be entered, if no CallerID sent");
char *
description (void)
{
return tdesc;
}
int
usecount (void)
{
int res;
STANDARD_USECOUNT (res);
return res;
}
char *
key ()
{
return ASTERISK_GPL_KEY;
}

File diff suppressed because it is too large Load Diff

View File

@@ -23,15 +23,15 @@
* \ingroup applications
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/file.h"
#include "asterisk/logger.h"
#include "asterisk/options.h"
@@ -39,7 +39,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/pbx.h"
#include "asterisk/module.h"
/*! \todo The Random() app should be removed from trunk following the release of 1.4 */
static char *tdesc = "Random goto";
static char *app_random = "Random";
@@ -47,62 +47,80 @@ static char *random_synopsis = "Conditionally branches, based upon a probability
static char *random_descrip =
"Random([probability]:[[context|]extension|]priority)\n"
" probability := INTEGER in the range 1 to 100\n"
"DEPRECATED: Use GotoIf($[${RAND(1,100)} > <number>]?<label>)\n";
" probability := INTEGER in the range 1 to 100\n";
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
static char random_state[256];
static int random_exec(struct ast_channel *chan, void *data)
{
int res=0;
struct ast_module_user *u;
struct localuser *u;
char *s;
char *prob;
int probint;
static int deprecated = 0;
if (ast_strlen_zero(data)) {
ast_log(LOG_WARNING, "Random requires an argument ([probability]:[[context|]extension|]priority)\n");
return -1;
}
u = ast_module_user_add(chan);
LOCAL_USER_ADD(u);
s = ast_strdupa(data);
prob = strsep(&s,":");
if ((!prob) || (sscanf(prob, "%d", &probint) != 1))
probint = 0;
if (!deprecated) {
deprecated = 1;
ast_log(LOG_WARNING, "Random is deprecated in Asterisk 1.4. Replace with GotoIf($[${RAND(0,99)} + %d >= 100]?%s)\n", probint, s);
if (!s) {
ast_log(LOG_ERROR, "Out of memory!\n");
LOCAL_USER_REMOVE(u);
return -1;
}
if ((ast_random() % 100) + probint >= 100) {
prob = strsep(&s,":");
if ((!prob) || (sscanf(prob, "%3d", &probint) != 1))
probint = 0;
if ((random() % 100) + probint >= 100) {
res = ast_parseable_goto(chan, s);
if (option_verbose > 2)
ast_verbose( VERBOSE_PREFIX_3 "Random branches to (%s,%s,%d)\n",
chan->context,chan->exten, chan->priority+1);
}
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return res;
}
static int unload_module(void)
int unload_module(void)
{
int res;
res = ast_unregister_application(app_random);
ast_module_user_hangup_all();
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int load_module(void)
{
initstate((getppid() * 65535 + getpid()) % RAND_MAX, random_state, 256);
return ast_register_application(app_random, random_exec, random_synopsis, random_descrip);
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Random goto");
char *description(void)
{
return tdesc;
}
int usecount(void)
{
/* Don't allow unload, since rand(3) depends upon this module being here. */
return 1;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

View File

@@ -19,20 +19,18 @@
/*! \file
*
* \brief Trivial application to read a variable
*
* \author Mark Spencer <markster@digium.com>
*
* \ingroup applications
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/lock.h"
#include "asterisk/file.h"
#include "asterisk/logger.h"
@@ -43,19 +41,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/translate.h"
#include "asterisk/options.h"
#include "asterisk/utils.h"
#include "asterisk/indications.h"
enum {
OPT_SKIP = (1 << 0),
OPT_INDICATION = (1 << 1),
OPT_NOANSWER = (1 << 2),
} read_option_flags;
AST_APP_OPTIONS(read_app_options, {
AST_APP_OPTION('s', OPT_SKIP),
AST_APP_OPTION('i', OPT_INDICATION),
AST_APP_OPTION('n', OPT_NOANSWER),
});
static char *tdesc = "Read Variable Application";
static char *app = "Read";
@@ -65,131 +52,131 @@ static char *descrip =
" Read(variable[|filename][|maxdigits][|option][|attempts][|timeout])\n\n"
"Reads a #-terminated string of digits a certain number of times from the\n"
"user in to the given variable.\n"
" filename -- file to play before reading digits or tone with option i\n"
" filename -- file to play before reading digits.\n"
" maxdigits -- maximum acceptable number of digits. Stops reading after\n"
" maxdigits have been entered (without requiring the user to\n"
" press the '#' key).\n"
" Defaults to 0 - no limit - wait for the user press the '#' key.\n"
" Any value below 0 means the same. Max accepted value is 255.\n"
" option -- options are 's' , 'i', 'n'\n"
" 's' to return immediately if the line is not up,\n"
" 'i' to play filename as an indication tone from your indications.conf\n"
" 'n' to read digits even if the line is not up.\n"
" option -- may be 'skip' to return immediately if the line is not up,\n"
" or 'noanswer' to read digits even if the line is not up.\n"
" attempts -- if greater than 1, that many attempts will be made in the \n"
" event no data is entered.\n"
" timeout -- An integer number of seconds to wait for a digit response. If greater\n"
" than 0, that value will override the default timeout.\n\n"
" timeout -- if greater than 0, that value will override the default timeout.\n\n"
"Read should disconnect if the function fails or errors out.\n";
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
#define ast_next_data(instr,ptr,delim) if((ptr=strchr(instr,delim))) { *(ptr) = '\0' ; ptr++;}
static int read_exec(struct ast_channel *chan, void *data)
{
int res = 0;
struct ast_module_user *u;
char tmp[256] = "";
int maxdigits = 255;
int tries = 1, to = 0, x = 0;
struct localuser *u;
char tmp[256];
char *timeout = NULL;
char *varname = NULL;
char *filename = NULL;
char *loops;
char *maxdigitstr=NULL;
char *options=NULL;
int option_skip = 0;
int option_noanswer = 0;
int maxdigits=255;
int tries = 1;
int to = 0;
int x = 0;
char *argcopy = NULL;
struct tone_zone_sound *ts;
struct ast_flags flags = {0};
char *args[8];
AST_DECLARE_APP_ARGS(arglist,
AST_APP_ARG(variable);
AST_APP_ARG(filename);
AST_APP_ARG(maxdigits);
AST_APP_ARG(options);
AST_APP_ARG(attempts);
AST_APP_ARG(timeout);
);
if (ast_strlen_zero(data)) {
ast_log(LOG_WARNING, "Read requires an argument (variable)\n");
return -1;
}
u = ast_module_user_add(chan);
LOCAL_USER_ADD(u);
argcopy = ast_strdupa(data);
AST_STANDARD_APP_ARGS(arglist, argcopy);
if (!ast_strlen_zero(arglist.options)) {
ast_app_parse_options(read_app_options, &flags, NULL, arglist.options);
if (!argcopy) {
ast_log(LOG_ERROR, "Out of memory\n");
LOCAL_USER_REMOVE(u);
return -1;
}
if (ast_app_separate_args(argcopy, '|', args, sizeof(args) / sizeof(args[0])) < 1) {
ast_log(LOG_WARNING, "Cannot Parse Arguments.\n");
LOCAL_USER_REMOVE(u);
return -1;
}
varname = args[x++];
filename = args[x++];
maxdigitstr = args[x++];
options = args[x++];
loops = args[x++];
timeout = args[x++];
if (!ast_strlen_zero(arglist.attempts)) {
tries = atoi(arglist.attempts);
if (tries <= 0)
if (options) {
if (!strcasecmp(options, "skip"))
option_skip = 1;
else if (!strcasecmp(options, "noanswer"))
option_noanswer = 1;
else {
if (strchr(options, 's'))
option_skip = 1;
if (strchr(options, 'n'))
option_noanswer = 1;
}
}
if(loops) {
tries = atoi(loops);
if(tries <= 0)
tries = 1;
}
if (!ast_strlen_zero(arglist.timeout)) {
to = atoi(arglist.timeout);
if(timeout) {
to = atoi(timeout);
if (to <= 0)
to = 0;
else
to *= 1000;
}
if (ast_strlen_zero(arglist.filename)) {
arglist.filename = NULL;
}
if (!ast_strlen_zero(arglist.maxdigits)) {
maxdigits = atoi(arglist.maxdigits);
if (ast_strlen_zero(filename))
filename = NULL;
if (maxdigitstr) {
maxdigits = atoi(maxdigitstr);
if ((maxdigits<1) || (maxdigits>255)) {
maxdigits = 255;
} else if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "Accepting a maximum of %d digits.\n", maxdigits);
}
if (ast_strlen_zero(arglist.variable)) {
if (ast_strlen_zero(varname)) {
ast_log(LOG_WARNING, "Invalid! Usage: Read(variable[|filename][|maxdigits][|option][|attempts][|timeout])\n\n");
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return -1;
}
ts=NULL;
if (ast_test_flag(&flags,OPT_INDICATION)) {
if (!ast_strlen_zero(arglist.filename)) {
ts = ast_get_indication_tone(chan->zone,arglist.filename);
}
}
if (chan->_state != AST_STATE_UP) {
if (ast_test_flag(&flags,OPT_SKIP)) {
if (option_skip) {
/* At the user's option, skip if the line is not up */
pbx_builtin_setvar_helper(chan, arglist.variable, "\0");
ast_module_user_remove(u);
pbx_builtin_setvar_helper(chan, varname, "\0");
LOCAL_USER_REMOVE(u);
return 0;
} else if (!ast_test_flag(&flags,OPT_NOANSWER)) {
} else if (!option_noanswer) {
/* Otherwise answer unless we're supposed to read while on-hook */
res = ast_answer(chan);
}
}
if (!res) {
while (tries && !res) {
while(tries && !res) {
ast_stopstream(chan);
if (ts && ts->data[0]) {
if (!to)
to = chan->pbx ? chan->pbx->rtimeout * 1000 : 6000;
res = ast_playtones_start(chan, 0, ts->data, 0);
for (x = 0; x < maxdigits; ) {
res = ast_waitfordigit(chan, to);
ast_playtones_stop(chan);
if (res < 1) {
tmp[x]='\0';
break;
}
tmp[x++] = res;
if (tmp[x-1] == '#') {
tmp[x-1] = '\0';
break;
}
}
} else {
res = ast_app_getdata(chan, arglist.filename, tmp, maxdigits, to);
}
res = ast_app_getdata(chan, filename, tmp, maxdigits, to);
if (res > -1) {
pbx_builtin_setvar_helper(chan, arglist.variable, tmp);
pbx_builtin_setvar_helper(chan, varname, tmp);
if (!ast_strlen_zero(tmp)) {
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "User entered '%s'\n", tmp);
@@ -205,30 +192,44 @@ static int read_exec(struct ast_channel *chan, void *data)
}
res = 0;
} else {
pbx_builtin_setvar_helper(chan, arglist.variable, tmp);
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "User disconnected\n");
}
}
}
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return res;
}
static int unload_module(void)
int unload_module(void)
{
int res;
res = ast_unregister_application(app);
ast_module_user_hangup_all();
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int load_module(void)
{
return ast_register_application(app, read_exec, synopsis, descrip);
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Read Variable Application");
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

View File

@@ -20,20 +20,18 @@
*
* \brief ReadFile application -- Reads in a File for you.
*
* \author Matt O'Gorman <mogorman@digium.com>
*
* \ingroup applications
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/file.h"
#include "asterisk/logger.h"
#include "asterisk/options.h"
@@ -42,6 +40,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/app.h"
#include "asterisk/module.h"
static char *tdesc = "Stores output of file into a variable";
static char *app_readfile = "ReadFile";
static char *readfile_synopsis = "ReadFile(varname=file,length)";
@@ -52,11 +52,15 @@ static char *readfile_descrip =
" File - The name of the file to read.\n"
" Length - Maximum number of characters to capture.\n";
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
static int readfile_exec(struct ast_channel *chan, void *data)
{
int res=0;
struct ast_module_user *u;
struct localuser *u;
char *s, *varname=NULL, *file=NULL, *length=NULL, *returnvar=NULL;
int len=0;
@@ -65,9 +69,14 @@ static int readfile_exec(struct ast_channel *chan, void *data)
return -1;
}
u = ast_module_user_add(chan);
LOCAL_USER_ADD(u);
s = ast_strdupa(data);
if (!s) {
ast_log(LOG_ERROR, "Out of memory\n");
LOCAL_USER_REMOVE(u);
return -1;
}
varname = strsep(&s, "=");
file = strsep(&s, "|");
@@ -75,12 +84,12 @@ static int readfile_exec(struct ast_channel *chan, void *data)
if (!varname || !file) {
ast_log(LOG_ERROR, "No file or variable specified!\n");
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return -1;
}
if (length) {
if ((sscanf(length, "%d", &len) != 1) || (len < 0)) {
if ((sscanf(length, "%30d", &len) != 1) || (len < 0)) {
ast_log(LOG_WARNING, "%s is not a positive number, defaulting length to max\n", length);
len = 0;
}
@@ -96,25 +105,40 @@ static int readfile_exec(struct ast_channel *chan, void *data)
pbx_builtin_setvar_helper(chan, varname, returnvar);
free(returnvar);
}
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return res;
}
static int unload_module(void)
int unload_module(void)
{
int res;
res = ast_unregister_application(app_readfile);
ast_module_user_hangup_all();
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int load_module(void)
{
return ast_register_application(app_readfile, readfile_exec, readfile_synopsis, readfile_descrip);
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Stores output of file into a variable");
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

View File

@@ -20,22 +20,19 @@
/*! \file
*
* \brief RealTime App
*
* \author Anthony Minessale <anthmct@yahoo.com>
* \author Mark Spencer <markster@digium.com>
*
* \ingroup applications
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/file.h"
#include "asterisk/logger.h"
#include "asterisk/channel.h"
@@ -49,27 +46,25 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#define next_one(var) var = var->next
#define crop_data(str) { *(str) = '\0' ; (str)++; }
static char *tdesc = "Realtime Data Lookup/Rewrite";
static char *app = "RealTime";
static char *uapp = "RealTimeUpdate";
static char *synopsis = "Realtime Data Lookup";
static char *usynopsis = "Realtime Data Rewrite";
static char *USAGE = "RealTime(<family>|<colmatch>|<value>[|<prefix>])";
static char *UUSAGE = "RealTimeUpdate(<family>|<colmatch>|<value>|<newcol>|<newval>)";
static char *desc =
"Use the RealTime config handler system to read data into channel variables.\n"
static char *desc = "Use the RealTime config handler system to read data into channel variables.\n"
"RealTime(<family>|<colmatch>|<value>[|<prefix>])\n\n"
"All unique column names will be set as channel variables with optional prefix\n"
"to the name. For example, a prefix of 'var_' would make the column 'name'\n"
"become the variable ${var_name}. REALTIMECOUNT will be set with the number\n"
"of values read.\n";
"All unique column names will be set as channel variables with optional prefix to the name.\n"
"e.g. prefix of 'var_' would make the column 'name' become the variable ${var_name}\n\n";
static char *udesc = "Use the RealTime config handler system to update a value\n"
"RealTimeUpdate(<family>|<colmatch>|<value>|<newcol>|<newval>)\n\n"
"The column <newcol> in 'family' matching column <colmatch>=<value> will be\n"
"updated to <newval>. REALTIMECOUNT will be set with the number of rows\n"
"updated or -1 if an error occurs.\n";
"The column <newcol> in 'family' matching column <colmatch>=<value> will be updated to <newval>\n";
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
static int cli_realtime_load(int fd, int argc, char **argv)
static int cli_load_realtime(int fd, int argc, char **argv)
{
char *header_format = "%30s %-30s\n";
struct ast_variable *var=NULL;
@@ -94,7 +89,7 @@ static int cli_realtime_load(int fd, int argc, char **argv)
return RESULT_SUCCESS;
}
static int cli_realtime_update(int fd, int argc, char **argv) {
static int cli_update_realtime(int fd, int argc, char **argv) {
int res = 0;
if(argc<7) {
@@ -115,49 +110,45 @@ static int cli_realtime_update(int fd, int argc, char **argv) {
return RESULT_SUCCESS;
}
static char cli_realtime_load_usage[] =
static char cli_load_realtime_usage[] =
"Usage: realtime load <family> <colmatch> <value>\n"
" Prints out a list of variables using the RealTime driver.\n";
static char cli_realtime_update_usage[] =
static struct ast_cli_entry cli_load_realtime_cmd = {
{ "realtime", "load", NULL, NULL }, cli_load_realtime,
"Used to print out RealTime variables.", cli_load_realtime_usage, NULL };
static char cli_update_realtime_usage[] =
"Usage: realtime update <family> <colmatch> <value>\n"
" Update a single variable using the RealTime driver.\n";
static struct ast_cli_entry cli_realtime[] = {
{ { "realtime", "load", NULL, NULL },
cli_realtime_load, "Used to print out RealTime variables.",
cli_realtime_load_usage, NULL },
{ { "realtime", "update", NULL, NULL },
cli_realtime_update, "Used to update RealTime variables.",
cli_realtime_update_usage, NULL },
};
static struct ast_cli_entry cli_update_realtime_cmd = {
{ "realtime", "update", NULL, NULL }, cli_update_realtime,
"Used to update RealTime variables.", cli_update_realtime_usage, NULL };
static int realtime_update_exec(struct ast_channel *chan, void *data)
{
char *family=NULL, *colmatch=NULL, *value=NULL, *newcol=NULL, *newval=NULL;
struct ast_module_user *u;
int res = 0, count = 0;
char countc[13];
ast_log(LOG_WARNING, "The RealTimeUpdate application has been deprecated in favor of the REALTIME dialplan function.\n");
struct localuser *u;
int res = 0;
if (ast_strlen_zero(data)) {
ast_log(LOG_ERROR,"Invalid input: usage %s\n",UUSAGE);
return -1;
}
u = ast_module_user_add(chan);
LOCAL_USER_ADD(u);
family = ast_strdupa(data);
if ((colmatch = strchr(family,'|'))) {
crop_data(colmatch);
if ((value = strchr(colmatch,'|'))) {
crop_data(value);
if ((newcol = strchr(value,'|'))) {
crop_data(newcol);
if ((newval = strchr(newcol,'|')))
crop_data(newval);
if ((family = ast_strdupa(data))) {
if ((colmatch = strchr(family,'|'))) {
crop_data(colmatch);
if ((value = strchr(colmatch,'|'))) {
crop_data(value);
if ((newcol = strchr(value,'|'))) {
crop_data(newcol);
if ((newval = strchr(newcol,'|')))
crop_data(newval);
}
}
}
}
@@ -165,13 +156,10 @@ static int realtime_update_exec(struct ast_channel *chan, void *data)
ast_log(LOG_ERROR,"Invalid input: usage %s\n",UUSAGE);
res = -1;
} else {
count = ast_update_realtime(family,colmatch,value,newcol,newval,NULL);
ast_update_realtime(family,colmatch,value,newcol,newval,NULL);
}
snprintf(countc, sizeof(countc), "%d", count);
pbx_builtin_setvar_helper(chan, "REALTIMECOUNT", countc);
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return res;
}
@@ -179,29 +167,27 @@ static int realtime_update_exec(struct ast_channel *chan, void *data)
static int realtime_exec(struct ast_channel *chan, void *data)
{
int res=0, count=0;
struct ast_module_user *u;
int res=0;
struct localuser *u;
struct ast_variable *var, *itt;
char *family=NULL, *colmatch=NULL, *value=NULL, *prefix=NULL, *vname=NULL;
char countc[13];
size_t len;
ast_log(LOG_WARNING, "The RealTime application has been deprecated in favor of the REALTIME dialplan function.\n");
if (ast_strlen_zero(data)) {
ast_log(LOG_ERROR,"Invalid input: usage %s\n",USAGE);
return -1;
}
u = ast_module_user_add(chan);
LOCAL_USER_ADD(u);
family = ast_strdupa(data);
if ((colmatch = strchr(family,'|'))) {
crop_data(colmatch);
if ((value = strchr(colmatch,'|'))) {
crop_data(value);
if ((prefix = strchr(value,'|')))
crop_data(prefix);
if ((family = ast_strdupa(data))) {
if ((colmatch = strchr(family,'|'))) {
crop_data(colmatch);
if ((value = strchr(colmatch,'|'))) {
crop_data(value);
if ((prefix = strchr(value,'|')))
crop_data(prefix);
}
}
}
if (! (family && value && colmatch) ) {
@@ -221,41 +207,56 @@ static int realtime_exec(struct ast_channel *chan, void *data)
vname = itt->name;
pbx_builtin_setvar_helper(chan, vname, itt->value);
count++;
}
ast_variables_destroy(var);
} else if (option_verbose > 3)
ast_verbose(VERBOSE_PREFIX_4"No Realtime Matches Found.\n");
}
snprintf(countc, sizeof(countc), "%d", count);
pbx_builtin_setvar_helper(chan, "REALTIMECOUNT", countc);
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return res;
}
static int unload_module(void)
int unload_module(void)
{
int res;
ast_cli_unregister_multiple(cli_realtime, sizeof(cli_realtime) / sizeof(struct ast_cli_entry));
res = ast_unregister_application(uapp);
res = ast_cli_unregister(&cli_load_realtime_cmd);
res |= ast_cli_unregister(&cli_update_realtime_cmd);
res |= ast_unregister_application(uapp);
res |= ast_unregister_application(app);
ast_module_user_hangup_all();
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int load_module(void)
{
int res;
ast_cli_register_multiple(cli_realtime, sizeof(cli_realtime) / sizeof(struct ast_cli_entry));
res = ast_register_application(uapp, realtime_update_exec, usynopsis, udesc);
res = ast_cli_register(&cli_load_realtime_cmd);
res |= ast_cli_register(&cli_update_realtime_cmd);
res |= ast_register_application(uapp, realtime_update_exec, usynopsis, udesc);
res |= ast_register_application(app, realtime_exec, synopsis, desc);
return res;
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Realtime Data Lookup/Rewrite");
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

View File

@@ -20,19 +20,17 @@
*
* \brief Trivial application to record a sound file
*
* \author Matthew Fredrickson <creslin@digium.com>
*
* \ingroup applications
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/lock.h"
#include "asterisk/file.h"
#include "asterisk/logger.h"
@@ -45,6 +43,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/options.h"
#include "asterisk/app.h"
static char *tdesc = "Trivial Record Application";
static char *app = "Record";
@@ -63,17 +62,19 @@ static char *descrip =
" 'n' : do not answer, but record anyway if line not yet answered\n"
" 'q' : quiet (do not play a beep tone)\n"
" 's' : skip recording if the line is not yet answered\n"
" 't' : use alternate '*' terminator key (DTMF) instead of default '#'\n"
" 'x' : ignore all terminator keys (DTMF) and keep recording until hangup\n"
" 't' : use alternate '*' terminator key instead of default '#'\n"
"\n"
"If filename contains '%d', these characters will be replaced with a number\n"
"incremented by one each time the file is recorded. A channel variable\n"
"named RECORDED_FILE will also be set, which contains the final filemname.\n\n"
"Use 'core show file formats' to see the available formats on your system\n\n"
"Use 'show file formats' to see the available formats on your system\n\n"
"User can press '#' to terminate the recording and continue to the next priority.\n\n"
"If the user should hangup during a recording, all data will be lost and the\n"
"application will teminate. \n";
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
static int record_exec(struct ast_channel *chan, void *data)
{
@@ -86,7 +87,7 @@ static int record_exec(struct ast_channel *chan, void *data)
char tmp[256];
struct ast_filestream *s = '\0';
struct ast_module_user *u;
struct localuser *u;
struct ast_frame *f = NULL;
struct ast_dsp *sildet = NULL; /* silence detector dsp */
@@ -112,10 +113,15 @@ static int record_exec(struct ast_channel *chan, void *data)
return -1;
}
u = ast_module_user_add(chan);
LOCAL_USER_ADD(u);
/* Yay for strsep being easy */
vdata = ast_strdupa(data);
if (!vdata) {
ast_log(LOG_ERROR, "Out of memory\n");
LOCAL_USER_REMOVE(u);
return -1;
}
p = vdata;
filename = strsep(&p, "|");
@@ -136,11 +142,11 @@ static int record_exec(struct ast_channel *chan, void *data)
}
if (!ext) {
ast_log(LOG_WARNING, "No extension specified to filename!\n");
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return -1;
}
if (silstr) {
if ((sscanf(silstr, "%d", &i) == 1) && (i > -1)) {
if ((sscanf(silstr, "%30d", &i) == 1) && (i > -1)) {
silence = i * 1000;
} else if (!ast_strlen_zero(silstr)) {
ast_log(LOG_WARNING, "'%s' is not a valid silence duration\n", silstr);
@@ -148,7 +154,7 @@ static int record_exec(struct ast_channel *chan, void *data)
}
if (maxstr) {
if ((sscanf(maxstr, "%d", &i) == 1) && (i > -1))
if ((sscanf(maxstr, "%30d", &i) == 1) && (i > -1))
/* Convert duration to milliseconds */
maxduration = i * 1000;
else if (!ast_strlen_zero(maxstr))
@@ -169,8 +175,6 @@ static int record_exec(struct ast_channel *chan, void *data)
option_append = 1;
if (strchr(options, 't'))
terminator = '*';
if (strchr(options, 'x'))
terminator = 0;
if (strchr(options, 'q'))
option_quiet = 1;
}
@@ -189,7 +193,8 @@ static int record_exec(struct ast_channel *chan, void *data)
int i;
/* Separate each piece out by the format specifier */
AST_NONSTANDARD_APP_ARGS(fname, tmp2, '%');
/* AST_NONSTANDARD_APP_ARGS(fname, tmp2, '%'); */
fname.argc = ast_app_separate_args(tmp2, '%', fname.argv, (sizeof(fname) - sizeof(fname.argc)) / sizeof(fname.argv[0]));
do {
int tmplen;
/* First piece has no leading percent, so it's copied verbatim */
@@ -210,10 +215,10 @@ static int record_exec(struct ast_channel *chan, void *data)
ast_copy_string(tmp + tmplen, &(fname.piece[i][1]), sizeof(tmp) - tmplen);
}
count++;
} while (ast_fileexists(tmp, ext, chan->language) > 0);
} while ( ast_fileexists(tmp, ext, chan->language) != -1 );
pbx_builtin_setvar_helper(chan, "RECORDED_FILE", tmp);
} else
ast_copy_string(tmp, filename, sizeof(tmp));
strncpy(tmp, filename, sizeof(tmp)-1);
/* end of routine mentioned */
@@ -221,7 +226,7 @@ static int record_exec(struct ast_channel *chan, void *data)
if (chan->_state != AST_STATE_UP) {
if (option_skip) {
/* At the user's option, skip if the line is not up */
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return 0;
} else if (!option_noanswer) {
/* Otherwise answer unless we're supposed to record while on-hook */
@@ -252,13 +257,13 @@ static int record_exec(struct ast_channel *chan, void *data)
res = ast_set_read_format(chan, AST_FORMAT_SLINEAR);
if (res < 0) {
ast_log(LOG_WARNING, "Unable to set to linear mode, giving up\n");
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return -1;
}
sildet = ast_dsp_new();
if (!sildet) {
ast_log(LOG_WARNING, "Unable to create silence detector :(\n");
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return -1;
}
ast_dsp_set_threshold(sildet, 256);
@@ -273,7 +278,7 @@ static int record_exec(struct ast_channel *chan, void *data)
goto out;
}
if (ast_opt_transmit_silence)
if (option_transmit_silence_during_record)
silgen = ast_channel_start_silence_generator(chan);
/* Request a video update */
@@ -362,25 +367,40 @@ static int record_exec(struct ast_channel *chan, void *data)
ast_dsp_free(sildet);
}
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return res;
}
static int unload_module(void)
int unload_module(void)
{
int res;
res = ast_unregister_application(app);
ast_module_user_hangup_all();
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int load_module(void)
{
return ast_register_application(app, record_exec, synopsis, descrip);
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Trivial Record Application");
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,8 +1,7 @@
/*
* Asterisk -- An open source telephony toolkit.
*
* Copyright (c) 2003, 2006 Tilghman Lesher. All rights reserved.
* Copyright (c) 2006 Digium, Inc.
* Copyright (c) 2003 Tilghman Lesher. All rights reserved.
*
* Tilghman Lesher <app_sayunixtime__200309@the-tilghman.com>
*
@@ -19,21 +18,19 @@
/*! \file
*
* \brief SayUnixTime application
*
* \author Tilghman Lesher <app_sayunixtime__200309@the-tilghman.com>
*
* \ingroup applications
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/file.h"
#include "asterisk/logger.h"
#include "asterisk/options.h"
@@ -41,7 +38,9 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/pbx.h"
#include "asterisk/module.h"
#include "asterisk/say.h"
#include "asterisk/app.h"
static char *tdesc = "Say time";
static char *app_sayunixtime = "SayUnixTime";
static char *app_datetime = "DateTime";
@@ -65,55 +64,78 @@ static char *datetime_descrip =
" format: a format the time is to be said in. See voicemail.conf.\n"
" defaults to \"ABdY 'digits/at' IMp\"\n";
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
static int sayunixtime_exec(struct ast_channel *chan, void *data)
{
AST_DECLARE_APP_ARGS(args,
AST_APP_ARG(timeval);
AST_APP_ARG(timezone);
AST_APP_ARG(format);
);
char *parse;
int res = 0;
struct ast_module_user *u;
int res=0;
struct localuser *u;
char *s,*zone=NULL,*timec,*format;
time_t unixtime;
struct timeval tv;
if (!data)
return 0;
LOCAL_USER_ADD(u);
parse = ast_strdupa(data);
tv = ast_tvnow();
unixtime = (time_t)tv.tv_sec;
u = ast_module_user_add(chan);
if( !strcasecmp(chan->language, "da" ) ) {
format = "A dBY HMS";
} else if ( !strcasecmp(chan->language, "de" ) ) {
format = "A dBY HMS";
} else {
format = "ABdY 'digits/at' IMp";
}
AST_STANDARD_APP_ARGS(args, parse);
if (data) {
s = data;
s = ast_strdupa(s);
if (s) {
timec = strsep(&s,"|");
if ((timec) && (*timec != '\0')) {
long timein;
if (sscanf(timec,"%30ld",&timein) == 1) {
unixtime = (time_t)timein;
}
}
if (s) {
zone = strsep(&s,"|");
if (zone && (*zone == '\0'))
zone = NULL;
if (s) {
format = s;
}
}
} else {
ast_log(LOG_ERROR, "Out of memory error\n");
}
}
ast_get_time_t(args.timeval, &unixtime, time(NULL), NULL);
if (chan->_state != AST_STATE_UP)
if (chan->_state != AST_STATE_UP) {
res = ast_answer(chan);
}
if (!res)
res = ast_say_date_with_format(chan, unixtime, AST_DIGIT_ANY,
chan->language, args.format, args.timezone);
ast_module_user_remove(u);
res = ast_say_date_with_format(chan, unixtime, AST_DIGIT_ANY, chan->language, format, zone);
LOCAL_USER_REMOVE(u);
return res;
}
static int unload_module(void)
int unload_module(void)
{
int res;
res = ast_unregister_application(app_sayunixtime);
res |= ast_unregister_application(app_datetime);
ast_module_user_hangup_all();
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int load_module(void)
{
int res;
@@ -123,4 +145,19 @@ static int load_module(void)
return res;
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Say time");
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

View File

@@ -19,20 +19,18 @@
/*! \file
*
* \brief App to send DTMF digits
*
* \author Mark Spencer <markster@digium.com>
*
* \ingroup applications
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/lock.h"
#include "asterisk/file.h"
#include "asterisk/logger.h"
@@ -43,7 +41,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/options.h"
#include "asterisk/utils.h"
#include "asterisk/app.h"
#include "asterisk/manager.h"
static char *tdesc = "Send DTMF digits Application";
static char *app = "SendDTMF";
@@ -55,11 +54,14 @@ static char *descrip =
" The application will either pass the assigned digits or terminate if it\n"
" encounters an error.\n";
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
static int senddtmf_exec(struct ast_channel *chan, void *data)
{
int res = 0;
struct ast_module_user *u;
struct localuser *u;
char *digits = NULL, *to = NULL;
int timeout = 250;
@@ -68,9 +70,14 @@ static int senddtmf_exec(struct ast_channel *chan, void *data)
return 0;
}
u = ast_module_user_add(chan);
LOCAL_USER_ADD(u);
digits = ast_strdupa(data);
if (!digits) {
ast_log(LOG_ERROR, "Out of Memory!\n");
LOCAL_USER_REMOVE(u);
return -1;
}
if ((to = strchr(digits,'|'))) {
*to = '\0';
@@ -78,66 +85,45 @@ static int senddtmf_exec(struct ast_channel *chan, void *data)
timeout = atoi(to);
}
if (timeout <= 0)
if(timeout <= 0)
timeout = 250;
res = ast_dtmf_stream(chan,NULL,digits,timeout);
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return res;
}
static char mandescr_playdtmf[] =
"Description: Plays a dtmf digit on the specified channel.\n"
"Variables: (all are required)\n"
" Channel: Channel name to send digit to\n"
" Digit: The dtmf digit to play\n";
static int manager_play_dtmf(struct mansession *s, const struct message *m)
{
const char *channel = astman_get_header(m, "Channel");
const char *digit = astman_get_header(m, "Digit");
struct ast_channel *chan = ast_get_channel_by_name_locked(channel);
if (!chan) {
astman_send_error(s, m, "Channel not specified");
return 0;
}
if (!digit) {
astman_send_error(s, m, "No digit specified");
ast_mutex_unlock(&chan->lock);
return 0;
}
ast_senddigit(chan, *digit);
ast_mutex_unlock(&chan->lock);
astman_send_ack(s, m, "DTMF successfully queued");
return 0;
}
static int unload_module(void)
int unload_module(void)
{
int res;
res = ast_unregister_application(app);
res |= ast_manager_unregister("PlayDTMF");
ast_module_user_hangup_all();
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int load_module(void)
{
return ast_register_application(app, senddtmf_exec, synopsis, descrip);
}
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
res = ast_manager_register2( "PlayDTMF", EVENT_FLAG_CALL, manager_play_dtmf, "Play DTMF signal on a specific channel.", mandescr_playdtmf );
res |= ast_register_application(app, senddtmf_exec, synopsis, descrip);
STANDARD_USECOUNT(res);
return res;
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Send DTMF digits Application");
char *key()
{
return ASTERISK_GPL_KEY;
}

View File

@@ -19,22 +19,20 @@
/*! \file
*
* \brief App to transmit a text message
*
* \author Mark Spencer <markster@digium.com>
*
* \note Requires support of sending text messages from channel driver
* Requires support of sending text messages from channel driver
*
* \ingroup applications
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/lock.h"
#include "asterisk/file.h"
#include "asterisk/logger.h"
@@ -46,6 +44,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/options.h"
#include "asterisk/app.h"
static const char *tdesc = "Send Text Applications";
static const char *app = "SendText";
static const char *synopsis = "Send a Text Message";
@@ -63,11 +63,14 @@ static const char *descrip =
"'j' -- jump to n+101 priority if the channel doesn't support\n"
" text transport\n";
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
static int sendtext_exec(struct ast_channel *chan, void *data)
{
int res = 0;
struct ast_module_user *u;
struct localuser *u;
char *status = "UNSUPPORTED";
char *parse = NULL;
int priority_jump = 0;
@@ -76,14 +79,20 @@ static int sendtext_exec(struct ast_channel *chan, void *data)
AST_APP_ARG(options);
);
u = ast_module_user_add(chan);
LOCAL_USER_ADD(u);
if (ast_strlen_zero(data)) {
ast_log(LOG_WARNING, "SendText requires an argument (text[|options])\n");
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return -1;
} else
} else {
parse = ast_strdupa(data);
if (!parse) {
ast_log(LOG_ERROR, "Out of memory!\n");
LOCAL_USER_REMOVE(u);
return -1;
}
}
AST_STANDARD_APP_ARGS(args, parse);
@@ -92,39 +101,56 @@ static int sendtext_exec(struct ast_channel *chan, void *data)
priority_jump = 1;
}
ast_channel_lock(chan);
ast_mutex_lock(&chan->lock);
if (!chan->tech->send_text) {
ast_channel_unlock(chan);
ast_mutex_unlock(&chan->lock);
/* Does not support transport */
if (priority_jump || ast_opt_priority_jumping)
if (priority_jump || option_priority_jumping)
ast_goto_if_exists(chan, chan->context, chan->exten, chan->priority + 101);
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return 0;
}
status = "FAILURE";
ast_channel_unlock(chan);
ast_mutex_unlock(&chan->lock);
res = ast_sendtext(chan, args.text);
if (!res)
status = "SUCCESS";
pbx_builtin_setvar_helper(chan, "SENDTEXTSTATUS", status);
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return 0;
}
static int unload_module(void)
int unload_module(void)
{
int res;
res = ast_unregister_application(app);
ast_module_user_hangup_all();
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int load_module(void)
{
return ast_register_application(app, sendtext_exec, synopsis, descrip);
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Send Text Applications");
char *description(void)
{
return (char *) tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

View File

@@ -19,20 +19,18 @@
/*! \file
*
* \brief App to set callerid
*
* \author Mark Spencer <markster@digium.com>
*
* \ingroup applications
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/lock.h"
#include "asterisk/file.h"
#include "asterisk/logger.h"
@@ -47,6 +45,9 @@ static char *app2 = "SetCallerPres";
static char *synopsis2 = "Set CallerID Presentation";
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
static char *descrip2 =
" SetCallerPres(presentation): Set Caller*ID presentation on a call.\n"
@@ -66,25 +67,29 @@ static char *descrip2 =
static int setcallerid_pres_exec(struct ast_channel *chan, void *data)
{
struct ast_module_user *u;
struct localuser *u;
int pres = -1;
u = ast_module_user_add(chan);
LOCAL_USER_ADD(u);
pres = ast_parse_caller_presentation(data);
if (pres < 0) {
ast_log(LOG_WARNING, "'%s' is not a valid presentation (see 'show application SetCallerPres')\n",
(char *) data);
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return 0;
}
chan->cid.cid_pres = pres;
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return 0;
}
static char *tdesc = "Set CallerID Application";
static char *app = "SetCallerID";
static char *synopsis = "Set CallerID";
@@ -99,24 +104,23 @@ static int setcallerid_exec(struct ast_channel *chan, void *data)
char *tmp = NULL;
char name[256];
char num[256];
struct ast_module_user *u;
struct localuser *u;
char *opt;
int anitoo = 0;
static int dep_warning = 0;
if (ast_strlen_zero(data)) {
ast_log(LOG_WARNING, "SetCallerID requires an argument!\n");
return 0;
}
u = ast_module_user_add(chan);
if (!dep_warning) {
dep_warning = 1;
ast_log(LOG_WARNING, "SetCallerID is deprecated. Please use Set(CALLERID(all)=...) or Set(CALLERID(ani)=...) instead.\n");
}
LOCAL_USER_ADD(u);
tmp = ast_strdupa(data);
if (!tmp) {
ast_log(LOG_ERROR, "Out of memory\n");
LOCAL_USER_REMOVE(u);
return -1;
}
opt = strchr(tmp, '|');
if (opt) {
@@ -129,24 +133,24 @@ static int setcallerid_exec(struct ast_channel *chan, void *data)
ast_callerid_split(tmp, name, sizeof(name), num, sizeof(num));
ast_set_callerid(chan, num, name, anitoo ? num : NULL);
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return res;
}
static int unload_module(void)
int unload_module(void)
{
int res;
res = ast_unregister_application(app2);
res |= ast_unregister_application(app);
ast_module_user_hangup_all();
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int load_module(void)
{
int res;
@@ -156,4 +160,19 @@ static int load_module(void)
return res;
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Set CallerID Application");
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

View File

@@ -19,20 +19,18 @@
/*! \file
*
* \brief Applictions connected with CDR engine
*
* \author Justin Huff <jjhuff@mspin.net>
*
*
* \ingroup applications
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <sys/types.h>
#include <stdlib.h>
#include <string.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/channel.h"
#include "asterisk/cdr.h"
#include "asterisk/module.h"
@@ -43,6 +41,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/utils.h"
static char *tdesc = "CDR user field apps";
static char *setcdruserfield_descrip =
"[Synopsis]\n"
"SetCDRUserField(value)\n\n"
@@ -52,8 +52,7 @@ static char *setcdruserfield_descrip =
" can use for data not stored anywhere else in the record.\n"
" CDR records can be used for billing or storing other arbitrary data\n"
" (I.E. telephone survey responses)\n"
" Also see AppendCDRUserField().\n"
"\nThis application is deprecated in favor of Set(CDR(userfield)=...)\n";
" Also see AppendCDRUserField().\n";
static char *setcdruserfield_app = "SetCDRUserField";
@@ -68,19 +67,21 @@ static char *appendcdruserfield_descrip =
" can use for data not stored anywhere else in the record.\n"
" CDR records can be used for billing or storing other arbitrary data\n"
" (I.E. telephone survey responses)\n"
" Also see SetCDRUserField().\n"
"\nThis application is deprecated in favor of Set(CDR(userfield)=...)\n";
" Also see SetCDRUserField().\n";
static char *appendcdruserfield_app = "AppendCDRUserField";
static char *appendcdruserfield_synopsis = "Append to the CDR user field";
STANDARD_LOCAL_USER;
static int action_setcdruserfield(struct mansession *s, const struct message *m)
LOCAL_USER_DECL;
static int action_setcdruserfield(struct mansession *s, struct message *m)
{
struct ast_channel *c = NULL;
const char *userfield = astman_get_header(m, "UserField");
const char *channel = astman_get_header(m, "Channel");
const char *append = astman_get_header(m, "Append");
char *userfield = astman_get_header(m, "UserField");
char *channel = astman_get_header(m, "Channel");
char *append = astman_get_header(m, "Append");
if (ast_strlen_zero(channel)) {
astman_send_error(s, m, "No Channel specified");
@@ -106,49 +107,37 @@ static int action_setcdruserfield(struct mansession *s, const struct message *m)
static int setcdruserfield_exec(struct ast_channel *chan, void *data)
{
struct ast_module_user *u;
struct localuser *u;
int res = 0;
static int dep_warning = 0;
u = ast_module_user_add(chan);
LOCAL_USER_ADD(u);
if (chan->cdr && data) {
ast_cdr_setuserfield(chan, (char*)data);
}
if (!dep_warning) {
dep_warning = 1;
ast_log(LOG_WARNING, "SetCDRUserField is deprecated. Please use CDR(userfield) instead.\n");
}
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return res;
}
static int appendcdruserfield_exec(struct ast_channel *chan, void *data)
{
struct ast_module_user *u;
struct localuser *u;
int res = 0;
static int dep_warning = 0;
u = ast_module_user_add(chan);
LOCAL_USER_ADD(u);
if (chan->cdr && data) {
ast_cdr_appenduserfield(chan, (char*)data);
}
if (!dep_warning) {
dep_warning = 1;
ast_log(LOG_WARNING, "AppendCDRUserField is deprecated. Please use CDR(userfield) instead.\n");
}
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return res;
}
static int unload_module(void)
int unload_module(void)
{
int res;
@@ -156,12 +145,12 @@ static int unload_module(void)
res |= ast_unregister_application(appendcdruserfield_app);
res |= ast_manager_unregister("SetCDRUserField");
ast_module_user_hangup_all();
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int load_module(void)
{
int res;
@@ -172,4 +161,19 @@ static int load_module(void)
return res;
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "CDR user field apps");
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

132
apps/app_setcidname.c Normal file
View File

@@ -0,0 +1,132 @@
/*
* Asterisk -- An open source telephony toolkit.
*
* Copyright (C) 1999 - 2005, Digium, Inc.
*
* Mark Spencer <markster@digium.com>
*
* See http://www.asterisk.org for more information about
* the Asterisk project. Please do not directly contact
* any of the maintainers of this project for assistance;
* the project provides a web site, mailing lists and IRC
* channels for your use.
*
* This program is free software, distributed under the terms of
* the GNU General Public License Version 2. See the LICENSE file
* at the top of the source tree.
*/
/*! \file
*
* \brief App to set callerid
*
* \ingroup applications
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/lock.h"
#include "asterisk/file.h"
#include "asterisk/logger.h"
#include "asterisk/channel.h"
#include "asterisk/pbx.h"
#include "asterisk/module.h"
#include "asterisk/translate.h"
#include "asterisk/image.h"
#include "asterisk/callerid.h"
#include "asterisk/utils.h"
static char *tdesc = "Set CallerID Name";
static char *app = "SetCIDName";
static char *synopsis = "Set CallerID Name";
static char *descrip =
" SetCIDName(cname[|a]): Set Caller*ID Name on a call to a new\n"
"value, while preserving the original Caller*ID number. This is\n"
"useful for providing additional information to the called\n"
"party. \n"
"SetCIDName has been deprecated in favor of the function\n"
"CALLERID(name)\n";
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
static int setcallerid_exec(struct ast_channel *chan, void *data)
{
char *tmp = NULL;
struct localuser *u;
char *opt;
static int deprecation_warning = 0;
if (!deprecation_warning) {
ast_log(LOG_WARNING, "SetCIDName is deprecated, please use Set(CALLERID(name)=value) instead.\n");
deprecation_warning = 1;
}
if (ast_strlen_zero(data)) {
ast_log(LOG_ERROR, "SetCIDName requires an argument!\n");
return 0;
}
LOCAL_USER_ADD(u);
tmp = ast_strdupa(data);
if (!tmp) {
ast_log(LOG_ERROR, "Out of memory\n");
LOCAL_USER_REMOVE(u);
return -1;
}
opt = strchr(tmp, '|');
if (opt) {
*opt = '\0';
}
ast_set_callerid(chan, NULL, tmp, NULL);
LOCAL_USER_REMOVE(u);
return 0;
}
int unload_module(void)
{
int res;
res = ast_unregister_application(app);
STANDARD_HANGUP_LOCALUSERS;
return res;
}
int load_module(void)
{
return ast_register_application(app, setcallerid_exec, synopsis, descrip);
}
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

131
apps/app_setcidnum.c Normal file
View File

@@ -0,0 +1,131 @@
/*
* Asterisk -- An open source telephony toolkit.
*
* Copyright (C) 1999 - 2005, Digium, Inc.
*
* Mark Spencer <markster@digium.com>
* Oliver Daudey <traveler@xs4all.nl>
*
* See http://www.asterisk.org for more information about
* the Asterisk project. Please do not directly contact
* any of the maintainers of this project for assistance;
* the project provides a web site, mailing lists and IRC
* channels for your use.
*
* This program is free software, distributed under the terms of
* the GNU General Public License Version 2. See the LICENSE file
* at the top of the source tree.
*/
/*! \file
*
* \brief App to set callerid number
*
* \ingroup applications
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/lock.h"
#include "asterisk/file.h"
#include "asterisk/logger.h"
#include "asterisk/channel.h"
#include "asterisk/pbx.h"
#include "asterisk/module.h"
#include "asterisk/translate.h"
#include "asterisk/image.h"
#include "asterisk/callerid.h"
#include "asterisk/utils.h"
static char *tdesc = "Set CallerID Number";
static char *app = "SetCIDNum";
static char *synopsis = "Set CallerID Number";
static char *descrip =
" SetCIDNum(cnum[|a]): Set Caller*ID Number on a call to a new\n"
"value, while preserving the original Caller*ID name. This is\n"
"useful for providing additional information to the called\n"
"party. Sets ANI as well if a flag is used.\n"
"SetCIDNum has been deprecated in favor of the function\n"
"CALLERID(number)\n";
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
static int setcallerid_exec(struct ast_channel *chan, void *data)
{
int res = 0;
struct localuser *u;
char *opt;
int anitoo = 0;
char *tmp = NULL;
static int deprecation_warning = 0;
LOCAL_USER_ADD(u);
if (!deprecation_warning) {
ast_log(LOG_WARNING, "SetCIDNum is deprecated, please use Set(CALLERID(number)=value) instead.\n");
deprecation_warning = 1;
}
if (data)
tmp = ast_strdupa(data);
else
tmp = "";
opt = strchr(tmp, '|');
if (opt) {
*opt = '\0';
opt++;
if (*opt == 'a')
anitoo = 1;
}
ast_set_callerid(chan, tmp, NULL, anitoo ? tmp : NULL);
LOCAL_USER_REMOVE(u);
return res;
}
int unload_module(void)
{
int res;
res = ast_unregister_application(app);
STANDARD_HANGUP_LOCALUSERS;
return res;
}
int load_module(void)
{
return ast_register_application(app, setcallerid_exec, synopsis, descrip);
}
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

132
apps/app_setrdnis.c Normal file
View File

@@ -0,0 +1,132 @@
/*
* Asterisk -- An open source telephony toolkit.
*
* Copyright (C) 1999 - 2005, Digium, Inc.
*
* Mark Spencer <markster@digium.com>
* Oliver Daudey <traveler@xs4all.nl>
*
* See http://www.asterisk.org for more information about
* the Asterisk project. Please do not directly contact
* any of the maintainers of this project for assistance;
* the project provides a web site, mailing lists and IRC
* channels for your use.
*
* This program is free software, distributed under the terms of
* the GNU General Public License Version 2. See the LICENSE file
* at the top of the source tree.
*/
/*! \file
*
* \brief App to set rdnis
*
* \ingroup applications
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/lock.h"
#include "asterisk/file.h"
#include "asterisk/logger.h"
#include "asterisk/channel.h"
#include "asterisk/pbx.h"
#include "asterisk/module.h"
#include "asterisk/translate.h"
#include "asterisk/image.h"
#include "asterisk/callerid.h"
#include "asterisk/utils.h"
static char *tdesc = "Set RDNIS Number";
static char *app = "SetRDNIS";
static char *synopsis = "Set RDNIS Number";
static char *descrip =
" SetRDNIS(cnum): Set RDNIS Number on a call to a new\n"
"value.\n"
"SetRDNIS has been deprecated in favor of the function\n"
"CALLERID(rdnis)\n";
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
static int setrdnis_exec(struct ast_channel *chan, void *data)
{
struct localuser *u;
char *opt, *n, *l;
char *tmp = NULL;
static int deprecation_warning = 0;
LOCAL_USER_ADD(u);
if (!deprecation_warning) {
ast_log(LOG_WARNING, "SetRDNIS is deprecated, please use Set(CALLERID(rdnis)=value) instead.\n");
deprecation_warning = 1;
}
if (data)
tmp = ast_strdupa(data);
else
tmp = "";
opt = strchr(tmp, '|');
if (opt)
*opt = '\0';
n = l = NULL;
ast_callerid_parse(tmp, &n, &l);
if (l) {
ast_shrink_phone_number(l);
ast_mutex_lock(&chan->lock);
if (chan->cid.cid_rdnis)
free(chan->cid.cid_rdnis);
chan->cid.cid_rdnis = (l[0]) ? strdup(l) : NULL;
ast_mutex_unlock(&chan->lock);
}
LOCAL_USER_REMOVE(u);
return 0;
}
int unload_module(void)
{
int res;
res = ast_unregister_application(app);
STANDARD_HANGUP_LOCALUSERS;
return res;
}
int load_module(void)
{
return ast_register_application(app, setrdnis_exec, synopsis, descrip);
}
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

View File

@@ -19,19 +19,17 @@
/*! \file
*
* \brief App to set the ISDN Transfer Capability
*
* \author Frank Sautter - asterisk+at+sautter+dot+com
*
* \ingroup applications
*/
#include <string.h>
#include <stdlib.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <string.h>
#include <stdlib.h>
#include "asterisk/logger.h"
#include "asterisk/channel.h"
#include "asterisk/pbx.h"
@@ -44,6 +42,9 @@ static char *app = "SetTransferCapability";
static char *synopsis = "Set ISDN Transfer Capability";
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
static struct { int val; char *name; } transcaps[] = {
{ AST_TRANS_CAP_SPEECH, "SPEECH" },
@@ -64,27 +65,20 @@ static char *descrip =
" RESTRICTED_DIGITAL : 0x09 - Restricted digital information\n"
" 3K1AUDIO : 0x10 - 3.1kHz Audio (fax calls)\n"
" DIGITAL_W_TONES : 0x11 - Unrestricted digital information with tones/announcements\n"
" VIDEO : 0x18 - Video\n"
" VIDEO : 0x18 - Video:\n"
"\n"
"This application is deprecated in favor of Set(CHANNEL(transfercapability)=...)\n"
;
static int settransfercapability_exec(struct ast_channel *chan, void *data)
{
char *tmp = NULL;
struct ast_module_user *u;
struct localuser *u;
int x;
char *opts;
int transfercapability = -1;
static int dep_warning = 0;
u = ast_module_user_add(chan);
if (!dep_warning) {
dep_warning = 1;
ast_log(LOG_WARNING, "SetTransferCapability is deprecated. Please use CHANNEL(transfercapability) instead.\n");
}
LOCAL_USER_ADD(u);
if (data)
tmp = ast_strdupa(data);
else
@@ -102,7 +96,7 @@ static int settransfercapability_exec(struct ast_channel *chan, void *data)
}
if (transfercapability < 0) {
ast_log(LOG_WARNING, "'%s' is not a valid transfer capability (see 'show application SetTransferCapability')\n", tmp);
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return 0;
}
@@ -111,26 +105,41 @@ static int settransfercapability_exec(struct ast_channel *chan, void *data)
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "Setting transfer capability to: 0x%.2x - %s.\n", transfercapability, tmp);
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return 0;
}
static int unload_module(void)
int unload_module(void)
{
int res;
res = ast_unregister_application(app);
ast_module_user_hangup_all();
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int load_module(void)
{
return ast_register_application(app, settransfercapability_exec, synopsis, descrip);
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Set ISDN Transfer Capability");
char *description(void)
{
return synopsis;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

View File

@@ -19,26 +19,20 @@
/*! \file
*
* \brief Skeleton application
*
* \author <Your Name Here> <<Your Email Here>>
*
* This is a skeleton for development of an Asterisk application
* This is a skeleton for development of an Asterisk application
* \ingroup applications
*/
/*** MODULEINFO
<defaultenabled>no</defaultenabled>
***/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/file.h"
#include "asterisk/logger.h"
#include "asterisk/channel.h"
@@ -47,87 +41,109 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/lock.h"
#include "asterisk/app.h"
static char *tdesc = "Trivial skeleton Application";
static char *app = "Skel";
static char *synopsis =
"Skeleton application.";
static char *descrip = "This application is a template to build other applications from.\n"
" It shows you the basic structure to create your own Asterisk applications.\n";
enum {
OPTION_A = (1 << 0),
OPTION_B = (1 << 1),
OPTION_C = (1 << 2),
} option_flags;
enum {
OPTION_ARG_B = 0,
OPTION_ARG_C = 1,
/* This *must* be the last value in this enum! */
OPTION_ARG_ARRAY_SIZE = 2,
} option_args;
#define OPTION_A (1 << 0) /* Option A */
#define OPTION_B (1 << 1) /* Option B(n) */
#define OPTION_C (1 << 2) /* Option C(str) */
#define OPTION_NULL (1 << 3) /* Dummy Termination */
AST_APP_OPTIONS(app_opts,{
AST_APP_OPTION('a', OPTION_A),
AST_APP_OPTION_ARG('b', OPTION_B, OPTION_ARG_B),
AST_APP_OPTION_ARG('c', OPTION_C, OPTION_ARG_C),
['a'] = { OPTION_A },
['b'] = { OPTION_B, 1 },
['c'] = { OPTION_C, 2 }
});
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
static int app_exec(struct ast_channel *chan, void *data)
{
int res = 0;
struct ast_flags flags;
struct ast_module_user *u;
char *parse, *opts[OPTION_ARG_ARRAY_SIZE];
AST_DECLARE_APP_ARGS(args,
AST_APP_ARG(dummy);
AST_APP_ARG(options);
);
struct localuser *u;
char *options=NULL;
char *dummy = NULL;
char *args;
int argc = 0;
char *opts[2];
char *argv[2];
if (ast_strlen_zero(data)) {
ast_log(LOG_WARNING, "%s requires an argument (dummy|[options])\n", app);
ast_log(LOG_WARNING, "%s requires an argument (dummy|[options])\n",app);
return -1;
}
u = ast_module_user_add(chan);
LOCAL_USER_ADD(u);
/* Do our thing here */
/* We need to make a copy of the input string if we are going to modify it! */
parse = ast_strdupa(data);
args = ast_strdupa(data);
if (!args) {
ast_log(LOG_ERROR, "Out of memory!\n");
LOCAL_USER_REMOVE(u);
return -1;
}
if ((argc = ast_app_separate_args(args, '|', argv, sizeof(argv) / sizeof(argv[0])))) {
dummy = argv[0];
options = argv[1];
ast_app_parse_options(app_opts, &flags, opts, options);
}
AST_STANDARD_APP_ARGS(args, parse);
if (args.argc == 2)
ast_app_parse_options(app_opts, &flags, opts, args.options);
if (!ast_strlen_zero(args.dummy))
ast_log(LOG_NOTICE, "Dummy value is : %s\n", args.dummy);
if (!ast_strlen_zero(dummy))
ast_log(LOG_NOTICE, "Dummy value is : %s\n", dummy);
if (ast_test_flag(&flags, OPTION_A))
ast_log(LOG_NOTICE, "Option A is set\n");
if (ast_test_flag(&flags, OPTION_B))
ast_log(LOG_NOTICE, "Option B is set with : %s\n", opts[OPTION_ARG_B] ? opts[OPTION_ARG_B] : "<unspecified>");
ast_log(LOG_NOTICE,"Option B is set with : %s\n", opts[0] ? opts[0] : "<unspecified>");
if (ast_test_flag(&flags, OPTION_C))
ast_log(LOG_NOTICE, "Option C is set with : %s\n", opts[OPTION_ARG_C] ? opts[OPTION_ARG_C] : "<unspecified>");
ast_module_user_remove(u);
ast_log(LOG_NOTICE,"Option C is set with : %s\n", opts[1] ? opts[1] : "<unspecified>");
LOCAL_USER_REMOVE(u);
return res;
}
static int unload_module(void)
int unload_module(void)
{
int res;
res = ast_unregister_application(app);
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int load_module(void)
{
return ast_register_application(app, app_exec, synopsis, descrip);
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Skeleton (sample) Application");
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

View File

@@ -18,14 +18,9 @@
*
* \brief SMS application - ETSI ES 201 912 protocol 1 implimentation
* \ingroup applications
*
* \author Adrian Kennard
*
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
@@ -36,6 +31,10 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <sys/types.h>
#include <sys/stat.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/lock.h"
#include "asterisk/file.h"
#include "asterisk/logger.h"
@@ -61,6 +60,8 @@ static volatile unsigned int seq; /* arbitrary message sequence number for
static char log_file[255];
static char spool_dir[255];
static char *tdesc = "SMS/PSTN handler";
static char *app = "SMS";
static char *synopsis = "Communicates with SMS service centres and SMS capable analogue phones";
@@ -93,6 +94,9 @@ static signed short wave[] = {
static unsigned char wavea[80];
#endif
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
/* SMS 7 bit character mapping to UCS-2 */
static const unsigned short defaultalphabet[] = {
@@ -193,7 +197,7 @@ static void sms_release (struct ast_channel *chan, void *data)
static void sms_messagetx (sms_t * h);
/*! \brief copy number, skipping non digits apart from leading + */
/*--- numcpy: copy number, skipping non digits apart from leading + */
static void numcpy (char *d, char *s)
{
if (*s == '+')
@@ -206,7 +210,7 @@ static void numcpy (char *d, char *s)
*d = 0;
}
/*! \brief static, return a date/time in ISO format */
/*--- isodate: static, return a date/time in ISO format */
static char * isodate (time_t t)
{
static char date[20];
@@ -214,7 +218,7 @@ static char * isodate (time_t t)
return date;
}
/*! \brief reads next UCS character from null terminated UTF-8 string and advanced pointer */
/*--- utf8decode: reads next UCS character from null terminated UTF-8 string and advanced pointer */
/* for non valid UTF-8 sequences, returns character as is */
/* Does not advance pointer for null termination */
static long utf8decode (unsigned char **pp)
@@ -260,7 +264,7 @@ static long utf8decode (unsigned char **pp)
return *p; /* not sensible */
}
/*! \brief takes a binary header (udhl bytes at udh) and UCS-2 message (udl characters at ud) and packs in to o using SMS 7 bit character codes */
/*--- packsms7: takes a binary header (udhl bytes at udh) and UCS-2 message (udl characters at ud) and packs in to o using SMS 7 bit character codes */
/* The return value is the number of septets packed in to o, which is internally limited to SMSLEN */
/* o can be null, in which case this is used to validate or count only */
/* if the input contains invalid characters then the return value is -1 */
@@ -330,7 +334,7 @@ static int packsms7 (unsigned char *o, int udhl, unsigned char *udh, int udl, un
return n;
}
/*! \brief takes a binary header (udhl bytes at udh) and UCS-2 message (udl characters at ud) and packs in to o using 8 bit character codes */
/*--- packsms8: takes a binary header (udhl bytes at udh) and UCS-2 message (udl characters at ud) and packs in to o using 8 bit character codes */
/* The return value is the number of bytes packed in to o, which is internally limited to 140 */
/* o can be null, in which case this is used to validate or count only */
/* if the input contains invalid characters then the return value is -1 */
@@ -362,7 +366,7 @@ static int packsms8 (unsigned char *o, int udhl, unsigned char *udh, int udl, un
return p;
}
/*! \brief takes a binary header (udhl bytes at udh) and UCS-2
/*--- packsms16: takes a binary header (udhl bytes at udh) and UCS-2
message (udl characters at ud) and packs in to o using 16 bit
UCS-2 character codes
The return value is the number of bytes packed in to o, which is
@@ -399,7 +403,7 @@ static int packsms16 (unsigned char *o, int udhl, unsigned char *udh, int udl, u
return p;
}
/*! \brief general pack, with length and data,
/*--- packsms: general pack, with length and data,
returns number of bytes of target used */
static int packsms (unsigned char dcs, unsigned char *base, unsigned int udhl, unsigned char *udh, int udl, unsigned short *ud)
{
@@ -431,7 +435,7 @@ static int packsms (unsigned char dcs, unsigned char *base, unsigned int udhl, u
}
/*! \brief pack a date and return */
/*--- packdate: pack a date and return */
static void packdate (unsigned char *o, time_t w)
{
struct tm *t = localtime (&w);
@@ -452,7 +456,7 @@ static void packdate (unsigned char *o, time_t w)
*o++ = ((z % 10) << 4) + z / 10;
}
/*! \brief unpack a date and return */
/*--- unpackdate: unpack a date and return */
static time_t unpackdate (unsigned char *i)
{
struct tm t;
@@ -470,7 +474,7 @@ static time_t unpackdate (unsigned char *i)
return mktime (&t);
}
/*! \brief unpacks bytes (7 bit encoding) at i, len l septets,
/*--- unpacksms7: unpacks bytes (7 bit encoding) at i, len l septets,
and places in udh and ud setting udhl and udl. udh not used
if udhi not set */
static void unpacksms7 (unsigned char *i, unsigned char l, unsigned char *udh, int *udhl, unsigned short *ud, int *udl, char udhi)
@@ -521,7 +525,7 @@ static void unpacksms7 (unsigned char *i, unsigned char l, unsigned char *udh, i
*udl = (o - ud);
}
/*! \brief unpacks bytes (8 bit encoding) at i, len l septets,
/*--- unpacksms8: unpacks bytes (8 bit encoding) at i, len l septets,
and places in udh and ud setting udhl and udl. udh not used
if udhi not set */
static void unpacksms8 (unsigned char *i, unsigned char l, unsigned char *udh, int *udhl, unsigned short *ud, int *udl, char udhi)
@@ -546,7 +550,7 @@ static void unpacksms8 (unsigned char *i, unsigned char l, unsigned char *udh, i
*udl = (o - ud);
}
/*! \brief unpacks bytes (16 bit encoding) at i, len l septets,
/*--- unpacksms16: unpacks bytes (16 bit encoding) at i, len l septets,
and places in udh and ud setting udhl and udl.
udh not used if udhi not set */
static void unpacksms16 (unsigned char *i, unsigned char l, unsigned char *udh, int *udhl, unsigned short *ud, int *udl, char udhi)
@@ -575,7 +579,7 @@ static void unpacksms16 (unsigned char *i, unsigned char l, unsigned char *udh,
*udl = (o - ud);
}
/*! \brief general unpack - starts with length byte (octet or septet) and returns number of bytes used, inc length */
/*--- unpacksms: general unpack - starts with length byte (octet or septet) and returns number of bytes used, inc length */
static int unpacksms (unsigned char dcs, unsigned char *i, unsigned char *udh, int *udhl, unsigned short *ud, int *udl, char udhi)
{
int l = *i++;
@@ -589,7 +593,7 @@ static int unpacksms (unsigned char dcs, unsigned char *i, unsigned char *udh, i
return l + 1;
}
/*! \brief unpack an address from i, return byte length, unpack to o */
/*--- unpackaddress: unpack an address from i, return byte length, unpack to o */
static unsigned char unpackaddress (char *o, unsigned char *i)
{
unsigned char l = i[0],
@@ -606,7 +610,7 @@ static unsigned char unpackaddress (char *o, unsigned char *i)
return (l + 5) / 2;
}
/*! \brief store an address at o, and return number of bytes used */
/*--- packaddress: store an address at o, and return number of bytes used */
static unsigned char packaddress (unsigned char *o, char *i)
{
unsigned char p = 2;
@@ -631,7 +635,7 @@ static unsigned char packaddress (unsigned char *o, char *i)
return p;
}
/*! \brief Log the output, and remove file */
/*--- sms_log: Log the output, and remove file */
static void sms_log (sms_t * h, char status)
{
if (*h->oa || *h->da) {
@@ -669,7 +673,7 @@ static void sms_log (sms_t * h, char status)
}
}
/*! \brief parse and delete a file */
/*--- sms_readfile: parse and delete a file */
static void sms_readfile (sms_t * h, char *fn)
{
char line[1000];
@@ -690,8 +694,7 @@ static void sms_readfile (sms_t * h, char *fn)
}
while (fgets (line, sizeof (line), s))
{ /* process line in file */
char *p;
void *pp = &p;
unsigned char *p;
for (p = line; *p && *p != '\n' && *p != '\r'; p++);
*p = 0; /* strip eoln */
p = line;
@@ -711,7 +714,7 @@ static void sms_readfile (sms_t * h, char *fn)
{ /* parse message (UTF-8) */
unsigned char o = 0;
while (*p && o < SMSLEN)
h->ud[o++] = utf8decode(pp);
h->ud[o++] = utf8decode((unsigned char **)&p);
h->udl = o;
if (*p)
ast_log (LOG_WARNING, "UD too long in %s\n", fn);
@@ -745,7 +748,7 @@ static void sms_readfile (sms_t * h, char *fn)
H,
M,
S;
if (sscanf (p, "%d-%d-%dT%d:%d:%d", &Y, &m, &d, &H, &M, &S) == 6)
if (sscanf (p, "%4d-%2d-%2dT%2d:%2d:%2d", &Y, &m, &d, &H, &M, &S) == 6)
{
struct tm t;
t.tm_year = Y - 1900;
@@ -852,7 +855,7 @@ static void sms_readfile (sms_t * h, char *fn)
}
}
/*! \brief white a received text message to a file */
/*--- sms_writefile: white a received text message to a file */
static void sms_writefile (sms_t * h)
{
char fn[200] = "", fn2[200] = "";
@@ -939,7 +942,7 @@ static void sms_writefile (sms_t * h)
}
}
/*! \brief read dir skipping dot files... */
/*--- readdirqueue: read dir skipping dot files... */
static struct dirent *readdirqueue (DIR * d, char *queue)
{
struct dirent *f;
@@ -949,7 +952,7 @@ static struct dirent *readdirqueue (DIR * d, char *queue)
return f;
}
/*! \brief handle the incoming message */
/*--- sms_handleincoming: handle the incoming message */
static unsigned char sms_handleincoming (sms_t * h)
{
unsigned char p = 3;
@@ -1020,7 +1023,8 @@ static unsigned char sms_handleincoming (sms_t * h)
#define NAME_MAX 1024
#endif
/*! \brief find and fill in next message, or send a REL if none waiting */
/*--- sms_nextoutgoing: find and fill in next message,
or send a REL if none waiting */
static void sms_nextoutgoing (sms_t * h)
{
char fn[100 + NAME_MAX] = "";
@@ -1174,7 +1178,7 @@ static void sms_messagetx(sms_t * h)
static int sms_generate (struct ast_channel *chan, void *data, int len, int samples)
{
struct ast_frame f = { 0 };
#define MAXSAMPLES (800)
#define MAXSAMPLES 800
#ifdef OUTALAW
unsigned char *buf;
#else
@@ -1195,10 +1199,11 @@ static int sms_generate (struct ast_channel *chan, void *data, int len, int samp
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 = samples * SAMPLE2LEN;
f.offset = AST_FRIENDLY_OFFSET;
f.mallocd = 0;
f.data = buf;
@@ -1250,8 +1255,6 @@ static int sms_generate (struct ast_channel *chan, void *data, int len, int samp
return -1;
}
return 0;
#undef SAMPLE2LEN
#undef MAXSAMPLES
}
static void sms_process (sms_t * h, int samples, signed short *data)
@@ -1357,17 +1360,17 @@ static struct ast_generator smsgen = {
static int sms_exec (struct ast_channel *chan, void *data)
{
int res = -1;
struct ast_module_user *u;
struct localuser *u;
struct ast_frame *f;
sms_t h = { 0 };
u = ast_module_user_add(chan);
LOCAL_USER_ADD(u);
h.ipc0 = h.ipc1 = 20; /* phase for cosine */
h.dcs = 0xF1; /* default */
if (!data) {
ast_log (LOG_ERROR, "Requires queue name at least\n");
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return -1;
}
@@ -1380,20 +1383,20 @@ static int sms_exec (struct ast_channel *chan, void *data)
answer = 0;
if (!*d || *d == '|') {
ast_log (LOG_ERROR, "Requires queue name\n");
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return -1;
}
for (p = d; *p && *p != '|'; p++);
if (p - d >= sizeof (h.queue)) {
ast_log (LOG_ERROR, "Queue name too long\n");
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return -1;
}
strncpy(h.queue, (char *)d, p - d);
strncpy (h.queue, d, p - d);
if (*p == '|')
p++;
d = p;
for (p = (unsigned char *)h.queue; *p; p++)
for (p = h.queue; *p; p++)
if (!isalnum (*p))
*p = '-'; /* make very safe for filenames */
while (*d && *d != '|') {
@@ -1425,20 +1428,20 @@ static int sms_exec (struct ast_channel *chan, void *data)
}
if (*d == '|') {
/* submitting a message, not taking call. */
/* deprecated, use smsq instead */
/* depricated, use smsq instead */
d++;
h.scts = time (0);
for (p = d; *p && *p != '|'; p++);
if (*p)
*p++ = 0;
if (strlen ((char *)d) >= sizeof (h.oa)) {
if (strlen (d) >= sizeof (h.oa)) {
ast_log (LOG_ERROR, "Address too long %s\n", d);
return 0;
}
if (h.smsc) {
ast_copy_string (h.oa, (char *)d, sizeof (h.oa));
ast_copy_string (h.oa, d, sizeof (h.oa));
} else {
ast_copy_string (h.da, (char *)d, sizeof (h.da));
ast_copy_string (h.da, d, sizeof (h.da));
}
if (!h.smsc)
ast_copy_string (h.oa, h.cli, sizeof (h.oa));
@@ -1455,7 +1458,7 @@ static int sms_exec (struct ast_channel *chan, void *data)
h.rx = 0; /* sent message */
h.mr = -1;
sms_writefile (&h);
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return 0;
}
@@ -1479,13 +1482,13 @@ static int sms_exec (struct ast_channel *chan, void *data)
res = ast_set_read_format (chan, AST_FORMAT_SLINEAR);
if (res < 0) {
ast_log (LOG_ERROR, "Unable to set to linear mode, giving up\n");
ast_module_user_remove(u);
LOCAL_USER_REMOVE (u);
return -1;
}
if (ast_activate_generator (chan, &smsgen, &h) < 0) {
ast_log (LOG_ERROR, "Failed to activate generator on '%s'\n", chan->name);
ast_module_user_remove(u);
LOCAL_USER_REMOVE (u);
return -1;
}
@@ -1504,22 +1507,22 @@ static int sms_exec (struct ast_channel *chan, void *data)
sms_log (&h, '?'); /* log incomplete message */
ast_module_user_remove(u);
LOCAL_USER_REMOVE (u);
return (h.err);
}
static int unload_module(void)
int unload_module (void)
{
int res;
res = ast_unregister_application (app);
ast_module_user_hangup_all();
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int load_module (void)
{
#ifdef OUTALAW
{
@@ -1533,4 +1536,19 @@ static int load_module(void)
return ast_register_application (app, sms_exec, synopsis, descrip);
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "SMS/PSTN handler");
char *description (void)
{
return tdesc;
}
int usecount (void)
{
int res;
STANDARD_USECOUNT (res);
return res;
}
char *key ()
{
return ASTERISK_GPL_KEY;
}

View File

@@ -19,22 +19,20 @@
/*! \file
*
* \brief SoftHangup application
*
* \author Mark Spencer <markster@digium.com>
*
* \ingroup applications
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/file.h"
#include "asterisk/logger.h"
#include "asterisk/channel.h"
@@ -44,6 +42,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
static char *synopsis = "Soft Hangup Application";
static char *tdesc = "Hangs up the requested channel";
static char *desc = " SoftHangup(Technology/resource|options)\n"
"Hangs up the requested channel. If there are no channels to hangup,\n"
"the application will report it.\n"
@@ -52,10 +52,13 @@ static char *desc = " SoftHangup(Technology/resource|options)\n"
static char *app = "SoftHangup";
STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
static int softhangup_exec(struct ast_channel *chan, void *data)
{
struct ast_module_user *u;
struct localuser *u;
struct ast_channel *c=NULL;
char *options, *cut, *cdata, *match;
char name[AST_CHANNEL_NAME] = "";
@@ -66,7 +69,7 @@ static int softhangup_exec(struct ast_channel *chan, void *data)
return 0;
}
u = ast_module_user_add(chan);
LOCAL_USER_ADD(u);
cdata = ast_strdupa(data);
match = strsep(&cdata, "|");
@@ -74,12 +77,12 @@ static int softhangup_exec(struct ast_channel *chan, void *data)
all = options && strchr(options,'a');
c = ast_channel_walk_locked(NULL);
while (c) {
ast_copy_string(name, c->name, sizeof(name));
strncpy(name, c->name, sizeof(name)-1);
ast_mutex_unlock(&c->lock);
/* XXX watch out, i think it is wrong to access c-> after unlocking! */
if (all) {
/* CAPI is set up like CAPI[foo/bar]/clcnt */
if (!strcmp(c->tech->type, "CAPI"))
if (!strcmp(c->type,"CAPI"))
cut = strrchr(name,'/');
/* Basically everything else is Foo/Bar-Z */
else
@@ -97,25 +100,40 @@ static int softhangup_exec(struct ast_channel *chan, void *data)
c = ast_channel_walk_locked(c);
}
ast_module_user_remove(u);
LOCAL_USER_REMOVE(u);
return 0;
}
static int unload_module(void)
int unload_module(void)
{
int res;
res = ast_unregister_application(app);
ast_module_user_hangup_all();
STANDARD_HANGUP_LOCALUSERS;
return res;
}
static int load_module(void)
int load_module(void)
{
return ast_register_application(app, softhangup_exec, synopsis, desc);
}
AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Hangs up the requested channel");
char *description(void)
{
return tdesc;
}
int usecount(void)
{
int res;
STANDARD_USECOUNT(res);
return res;
}
char *key()
{
return ASTERISK_GPL_KEY;
}

Some files were not shown because too many files have changed in this diff Show More