Compare commits

..

734 Commits

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



git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/1.2.25-netsec@212958 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-08-18 20:42:51 +00:00
Russell Bryant
5162e5d425 importing files for 1.2.25-netsec release
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/1.2.25-netsec@90179 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-11-29 21:41:32 +00:00
Russell Bryant
c247ee8720 Creating tag for the release of asterisk-1.2.25-netsec
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/1.2.25-netsec@90178 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-11-29 21:40:33 +00:00
Russell Bryant
ca81e571ae sync with 1.2 branch
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@90175 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-11-29 21:36:31 +00:00
Automerge script
c357e38925 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@82455 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-09-14 21:21:56 +00:00
Automerge Script
a97c27fc27 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@78412 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-08-07 18:44:16 +00:00
Automerge Script
53e28cba18 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@77992 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-08-02 20:11:13 +00:00
Automerge Script
09d0b6be60 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@77937 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-08-02 16:03:57 +00:00
Automerge Script
220d01134a automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@76982 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-25 00:09:53 +00:00
Automerge Script
611c08e453 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@76957 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-24 22:22:33 +00:00
Automerge Script
08e42004f4 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@76850 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-24 17:27:41 +00:00
Automerge Script
46cb5961ea automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@76702 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-23 19:30:11 +00:00
Automerge Script
307d4cea91 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@76609 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-23 15:30:57 +00:00
Automerge Script
6f745b034e automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@76456 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-22 22:29:15 +00:00
Automerge Script
8915e3a3af automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@76277 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-21 06:32:33 +00:00
Automerge Script
ad320254c8 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@76101 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-20 17:26:48 +00:00
Automerge Script
98e4e37123 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@75976 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-19 16:29:34 +00:00
Automerge Script
51c1456d6b automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@75797 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-18 21:29:47 +00:00
Automerge Script
309f89e5cb automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@75704 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-18 18:32:40 +00:00
Russell Bryant
40ef94cfe6 get branch up to date to include ASA fixes
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@75462 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-17 21:09:39 +00:00
Automerge Script
6f0882b296 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@75350 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-16 21:30:49 +00:00
Automerge Script
0b7104eaa0 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@75303 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-16 19:33:26 +00:00
Automerge Script
8872e64252 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@75155 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-13 21:29:00 +00:00
Automerge Script
28c632b1c4 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@75106 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-13 20:29:46 +00:00
Automerge Script
3c7d002b0b automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@74863 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-12 16:27:50 +00:00
Automerge Script
6cf12e669e automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@74811 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-11 23:27:32 +00:00
Automerge Script
e5bf71bed5 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@74742 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-11 21:24:40 +00:00
Automerge Script
c6fa0ff3f4 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@74702 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-11 19:31:14 +00:00
Automerge Script
14dd3b2f1a automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@74615 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-11 17:31:25 +00:00
Automerge Script
15355af8ac automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@74473 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-10 20:30:13 +00:00
Automerge Script
88ef48486e automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@74424 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-10 19:32:41 +00:00
Russell Bryant
bb95ee53b0 sync with 1.2 branch
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@74320 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-10 15:45:46 +00:00
Automerge Script
9419406541 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@74312 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-10 15:28:47 +00:00
Automerge Script
e3388c0ac3 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@74210 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-09 21:28:52 +00:00
Automerge Script
9f83205714 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@73812 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-06 23:26:12 +00:00
Automerge Script
ff0b4e97a1 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@73725 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-06 16:27:34 +00:00
Automerge Script
badfa8a03e automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@73597 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-05 23:27:07 +00:00
Automerge Script
6aa25ce9bc automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@73511 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-05 20:27:16 +00:00
Automerge Script
bd82c72a14 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@73366 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-05 14:26:28 +00:00
Automerge Script
2e87b185eb automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@73296 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-04 15:25:49 +00:00
Automerge Script
471f3c9d00 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@73251 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-04 09:25:30 +00:00
Automerge Script
e50a47efdb automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@73096 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-03 13:26:27 +00:00
Automerge Script
1379057370 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@73051 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-03 12:24:58 +00:00
Automerge Script
09213b43a2 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@72983 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-02 22:28:05 +00:00
Automerge Script
3c25796afa automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@72847 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-02 00:29:41 +00:00
Automerge Script
09088bc7cc automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@72662 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-29 17:17:36 +00:00
Automerge Script
38b6686e31 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@72596 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-29 14:10:42 +00:00
Automerge Script
15c88aba92 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@72380 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-27 23:25:08 +00:00
Automerge Script
df950e24ee automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@72303 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-27 21:27:00 +00:00
Automerge Script
bd917ea9f4 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@72231 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-27 19:25:45 +00:00
Automerge Script
ba8c3da0bc automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@72110 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-27 14:10:46 +00:00
Automerge Script
bf645cc37f automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@72098 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-27 10:10:30 +00:00
Automerge Script
d52d223fa4 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@72073 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-27 08:19:10 +00:00
Automerge Script
ecf72b84c8 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@71875 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-26 18:18:19 +00:00
Automerge Script
70c1717a10 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@71795 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-26 13:26:53 +00:00
Automerge Script
c3c2b96ef7 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@71703 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-25 19:27:59 +00:00
Automerge Script
3b367afabf automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@71462 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-25 01:26:23 +00:00
Automerge Script
c887c5bad7 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@71370 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-24 20:09:44 +00:00
Automerge Script
586aa67aff automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@71337 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-24 18:26:00 +00:00
Automerge Script
61f0a56fb9 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@71173 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-22 16:27:30 +00:00
Automerge Script
8cec922b04 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@71119 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-22 15:27:54 +00:00
Automerge Script
891600bfdf automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@70998 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-21 23:25:50 +00:00
Automerge Script
0efd501d6b automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@70946 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-21 22:25:55 +00:00
Automerge Script
3519216fb1 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@70805 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-21 19:13:44 +00:00
Automerge Script
f64c485a1c automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@70675 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-21 13:12:43 +00:00
Automerge Script
4a623ce514 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@70609 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-20 23:26:55 +00:00
Automerge Script
a65fcc6950 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@70492 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-20 20:26:16 +00:00
Automerge Script
d391cd13e9 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@70443 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-20 19:25:30 +00:00
Automerge Script
8cd0f0afe1 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@70353 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-20 16:10:16 +00:00
Automerge Script
632070eda1 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@70340 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-20 15:18:19 +00:00
Automerge Script
aae179ee5f automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@70061 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-19 18:12:44 +00:00
Automerge Script
dd4f8ab9bd automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@70043 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-19 17:29:28 +00:00
Automerge Script
abe5474fae automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@69941 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-19 14:25:35 +00:00
Automerge Script
a06cd4d098 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@69893 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-19 13:25:59 +00:00
Automerge Script
4cd913f575 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@69793 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-18 18:27:36 +00:00
Automerge Script
d36f734cca automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@69515 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-15 00:25:07 +00:00
Automerge Script
91a9884b7a automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@69391 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-14 21:30:45 +00:00
Automerge Script
db56721c38 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@69307 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-14 16:34:48 +00:00
Automerge Script
42e9e81c21 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@69180 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-13 19:28:07 +00:00
Automerge Script
e956a271f4 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@69065 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-13 10:10:30 +00:00
Automerge Script
d839836db9 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@68969 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-12 15:27:09 +00:00
Automerge Script
b9eb88b5f1 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@68899 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-12 09:10:08 +00:00
Automerge Script
eec5ae4566 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@68886 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-12 08:10:38 +00:00
Automerge Script
ec4df45550 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@68773 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-11 17:23:01 +00:00
Automerge Script
b1e34e49e1 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@68731 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-11 15:25:48 +00:00
Automerge Script
ebfa098f5e automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@68643 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-11 10:10:21 +00:00
Automerge Script
a7efc714a3 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@68574 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-08 23:25:52 +00:00
Automerge Script
513c40ddc1 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@68419 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-08 00:25:46 +00:00
Automerge Script
1f30a0a0f2 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@68367 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-07 23:20:58 +00:00
Automerge Script
3fb70a640c automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@68252 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-07 20:26:12 +00:00
Automerge Script
d5fd3ada2e automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@68117 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-07 15:25:21 +00:00
Automerge Script
39f997c3b6 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@67969 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-07 00:26:56 +00:00
Automerge Script
4a5df3824d automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@67769 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-06 17:27:55 +00:00
Automerge Script
56944e5dfc automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@67696 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-06 14:25:31 +00:00
Automerge Script
d3a4f7091a automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@67648 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-06 13:26:20 +00:00
Automerge Script
8e9529a8ac automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@67358 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-05 16:25:27 +00:00
Automerge Script
4797a33efc automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@67269 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-05 12:17:36 +00:00
Automerge Script
6e2816fbea automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@67238 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-05 11:17:13 +00:00
Automerge Script
7699bb25d7 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@67208 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-05 00:24:22 +00:00
Automerge Script
8120d0bb68 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@67118 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-04 22:28:38 +00:00
Automerge Script
5645d79958 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@66767 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-31 16:14:18 +00:00
Automerge Script
4e357e2d87 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@66584 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-29 22:24:55 +00:00
Automerge Script
114c74d647 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@66362 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-29 08:10:24 +00:00
Automerge Script
67ae4be5de automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@66156 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-25 14:16:47 +00:00
Automerge Script
f008f7914d automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@65900 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-24 15:24:07 +00:00
Automerge Script
f370c578e7 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@65813 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-24 10:23:53 +00:00
Automerge Script
43d3d20de0 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@65730 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-23 21:23:10 +00:00
Automerge Script
ded0401bdf automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@65636 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-23 14:22:34 +00:00
Automerge Script
7aa91a5a20 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@65393 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-22 13:09:03 +00:00
Automerge Script
3588aa6808 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@65341 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-22 08:08:59 +00:00
Automerge Script
e94c895d68 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@65199 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-18 21:14:50 +00:00
Automerge Script
30a1360663 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@65167 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-18 19:21:46 +00:00
Automerge Script
133c75b2c7 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@65120 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-18 16:24:42 +00:00
Automerge Script
b44549660f automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@65038 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-18 12:19:14 +00:00
Automerge Script
e6e9e6d65a automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@64950 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-18 09:24:59 +00:00
Automerge Script
244d4723de automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@64867 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-17 22:22:24 +00:00
Automerge Script
468bc9d600 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@64807 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-17 17:23:29 +00:00
Automerge Script
05330a8979 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@64648 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-16 11:21:30 +00:00
Automerge Script
cc9be2b488 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@64562 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-16 09:22:26 +00:00
Automerge Script
7198591adf automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@64321 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-14 19:20:38 +00:00
Automerge Script
5f242f10f3 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@63945 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-11 17:19:05 +00:00
Automerge Script
9898fcd5b8 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@63836 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-10 23:19:20 +00:00
Automerge Script
97762cc682 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@63791 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-10 21:28:39 +00:00
Automerge Script
7afe67bd95 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@63696 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-09 18:18:21 +00:00
Automerge Script
ce63f274ae automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@63652 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-09 17:18:48 +00:00
Automerge Script
af42b7d2ed automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@63607 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-09 15:17:30 +00:00
Automerge Script
e2b988cb13 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@63531 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-09 12:05:41 +00:00
Automerge Script
ff4fd44751 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@63518 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-08 23:17:50 +00:00
Automerge Script
e567c36080 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@63444 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-08 16:19:14 +00:00
Automerge Script
5518268ad7 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@63399 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-08 07:17:28 +00:00
Automerge Script
948f8837ce automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@63328 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-07 22:18:20 +00:00
Automerge Script
34a23ed281 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@63223 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-07 15:12:42 +00:00
Automerge Script
328f25d8df automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@63029 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-03 17:17:45 +00:00
Automerge Script
790e031070 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@62985 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-03 16:17:41 +00:00
Automerge Script
cf88fd1109 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@62910 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-03 14:11:27 +00:00
Automerge Script
c45d0c0b54 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@62882 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-03 01:17:11 +00:00
Automerge Script
2b4aac55ff automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@62840 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-03 00:18:05 +00:00
Automerge Script
6d9fe8c8a5 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@62782 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-02 21:18:33 +00:00
Automerge Script
fa0aba61e8 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@62733 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-02 18:18:44 +00:00
Automerge Script
da66cc3c63 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@62592 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-01 22:18:10 +00:00
Automerge Script
76291fdcfe automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@62538 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-01 17:18:36 +00:00
Automerge Script
9d01c89d54 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@62461 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-30 16:18:42 +00:00
Automerge Script
99c9f6c477 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@62413 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-30 15:18:32 +00:00
Automerge Script
aef2e33196 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@62216 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-27 17:18:32 +00:00
Automerge Script
7a793c9201 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@62139 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-27 14:05:20 +00:00
Automerge Script
0ce8de0404 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@62081 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-26 17:21:20 +00:00
Automerge Script
57f9282134 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@62004 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-26 02:17:37 +00:00
Automerge Script
c1c3b2d9f2 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@61957 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-26 00:18:36 +00:00
Automerge Script
09bf2e006f automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@61912 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-25 22:18:28 +00:00
Automerge Script
969e276b1e automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@61861 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-25 20:26:05 +00:00
Automerge Script
a66029756b automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@61752 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-21 14:23:55 +00:00
Automerge Script
0c81d2e046 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@61521 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-11 16:56:45 +00:00
Automerge Script
9c2c0004a8 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@61475 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-11 15:56:57 +00:00
Automerge Script
242a90d01f automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@61425 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-11 14:58:05 +00:00
Automerge Script
b850893d6c automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@61371 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-11 12:40:12 +00:00
Automerge Script
31a1692162 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@61182 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-10 12:38:39 +00:00
Automerge Script
0401150187 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@61069 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-09 19:52:12 +00:00
Automerge Script
e278c92503 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@60983 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-09 17:54:55 +00:00
Automerge Script
d691fa4d17 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@60897 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-09 03:54:41 +00:00
Automerge Script
d5b4a6c3c0 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@60845 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-09 01:54:24 +00:00
Automerge Script
2f76122f9a automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@60761 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-08 14:54:53 +00:00
Automerge Script
6e2e94e498 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@60708 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-08 02:56:53 +00:00
Automerge Script
dc14a89f78 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@60483 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-06 17:44:10 +00:00
Automerge Script
3dbf6e09a7 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@60447 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-06 15:54:39 +00:00
Automerge Script
bf5b3a7fca automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@60318 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-05 16:53:46 +00:00
Automerge Script
4f9d0e28e4 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@60261 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-05 13:54:18 +00:00
Automerge Script
aca1adfe03 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@60166 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-04 17:53:11 +00:00
Automerge Script
6e8d96fcd1 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@60117 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-04 16:51:41 +00:00
Automerge Script
e70e937cb1 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@60062 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-03 23:52:51 +00:00
Automerge Script
7a1390a0c6 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@59989 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-03 19:53:08 +00:00
Automerge Script
624988bd1e automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@59935 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-03 18:53:24 +00:00
Automerge Script
e668aad746 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@59850 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-03 11:52:19 +00:00
Automerge Script
48e2d876ff automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@59802 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-03 10:38:41 +00:00
Automerge Script
5901452ecb automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@59771 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-02 19:53:36 +00:00
Automerge Script
5b029cfcb6 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@59653 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-02 12:38:35 +00:00
Automerge Script
faa652eeb4 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@59638 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-02 07:38:38 +00:00
Automerge Script
e421382a07 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@59622 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-01 23:39:01 +00:00
Automerge Script
f309e69638 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@59413 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-29 18:54:38 +00:00
Automerge Script
c23816ba19 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@59354 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-29 17:04:00 +00:00
Automerge Script
58500a4c7f automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@59137 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-21 21:56:42 +00:00
Automerge Script
28d60b864c automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@59007 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-16 16:22:58 +00:00
Automerge Script
70c96b9bc6 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@58603 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-09 20:59:16 +00:00
Automerge Script
f525f6de36 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@58571 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-09 14:55:56 +00:00
Automerge Script
902b16bdda automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@58432 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-08 17:06:27 +00:00
Automerge Script
3951e4addf automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@58284 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-07 19:05:38 +00:00
Automerge Script
c52232f4f4 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@58207 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-07 01:05:32 +00:00
Automerge Script
be2a021189 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@58118 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-06 22:54:26 +00:00
Automerge Script
39605fc510 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@58095 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-06 21:05:51 +00:00
Automerge Script
c590b397ea automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@58022 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-06 15:54:14 +00:00
Automerge Script
b7f5c1ddf4 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@57976 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-05 23:54:12 +00:00
Automerge Script
b38e464dd3 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@57913 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-05 19:05:34 +00:00
Automerge Script
97942ba44c automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@57867 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-05 16:07:47 +00:00
Automerge Script
2673fcd2d2 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@57767 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-04 10:54:07 +00:00
Automerge Script
224316634a automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@57690 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-03 07:05:14 +00:00
Automerge Script
a85da9ebec automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@57552 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-02 19:00:51 +00:00
Automerge Script
44ebb34bee automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@57522 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-02 18:06:59 +00:00
Automerge Script
4423ae672e automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@57472 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-02 16:54:02 +00:00
Automerge Script
c3a5b0d8e1 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@57362 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-01 23:07:54 +00:00
Automerge Script
3f98583e26 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@57138 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-28 19:22:31 +00:00
Automerge Script
df5009b564 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@57048 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-28 17:11:28 +00:00
Automerge Script
e16cd7369d automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@56883 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-26 20:21:25 +00:00
Automerge Script
3b6d2f2633 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@56777 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-26 01:20:36 +00:00
Automerge Script
c31b4a6a2e automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@56728 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-25 15:21:12 +00:00
Automerge Script
518d9c6dd1 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@56547 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-24 00:20:55 +00:00
Automerge Script
131fcf61e6 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@56455 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-23 21:26:04 +00:00
Automerge Script
2954de75bb automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@56322 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-23 00:21:13 +00:00
Automerge Script
33ec4fecf5 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@56275 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-22 19:21:50 +00:00
Automerge Script
870af81ca1 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@56054 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-22 01:23:41 +00:00
Automerge Script
17679c25cf automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@56003 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-21 21:22:51 +00:00
Automerge Script
96300341b9 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@55913 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-21 15:21:36 +00:00
Automerge Script
229aed7457 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@55796 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-21 01:21:39 +00:00
Automerge Script
48b43e1a92 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@55715 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-20 23:21:22 +00:00
Automerge Script
dc1836f854 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@55633 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-20 20:22:54 +00:00
Automerge Script
b507853850 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@55478 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-19 19:22:08 +00:00
Automerge Script
a7bd9aec9c automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@55322 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-18 13:20:26 +00:00
Automerge Script
7c6c6a0d7b automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@55273 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-18 11:12:51 +00:00
Automerge Script
23c17817ae automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@55196 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-17 04:19:41 +00:00
Automerge Script
57122c46c5 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@55085 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-17 01:15:23 +00:00
Automerge Script
b7765f3783 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@55049 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-16 23:21:15 +00:00
Automerge Script
c1063541e5 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@55001 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-16 22:14:32 +00:00
Automerge Script
be9e3c0778 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@54968 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-16 21:07:50 +00:00
Automerge Script
93d501e3b3 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@54821 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-16 12:21:47 +00:00
Automerge Script
d55ae8cc0e automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@54671 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-15 17:21:50 +00:00
Automerge Script
6bfe3a4244 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@54463 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-14 19:12:21 +00:00
Automerge Script
a88490a68c automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@54422 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-14 17:23:39 +00:00
Automerge Script
155aee0b84 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@54203 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-13 19:37:42 +00:00
Kevin P. Fleming
dd0edc0f9c merge up to branch 1.2 and re-enable automerge
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@53671 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-08 22:48:47 +00:00
Automerge Script
03161d7a82 automerge cancel
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@53199 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-05 21:53:01 +00:00
Automerge Script
e9b9632fef automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@52995 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-30 20:13:10 +00:00
Automerge Script
1308ebf409 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@52949 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-30 18:14:52 +00:00
Automerge Script
20b69b892a automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@52902 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-30 16:13:24 +00:00
Automerge Script
f29eee96ec automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@52855 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-30 14:59:43 +00:00
Automerge Script
ff730c46b0 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@52806 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-30 01:13:13 +00:00
Automerge Script
33228042e7 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@52761 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-30 00:13:10 +00:00
Automerge Script
c58c4e83a2 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@52521 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-29 17:02:13 +00:00
Automerge Script
2911d1ab26 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@52459 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-27 03:17:51 +00:00
Automerge Script
263d1100fd automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@52369 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-27 00:07:40 +00:00
Automerge Script
fb41b21e01 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@52307 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-25 20:17:14 +00:00
Automerge Script
29a132d611 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@52202 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-25 02:15:23 +00:00
Automerge Script
1c9163443a automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@52157 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-25 01:04:30 +00:00
Automerge Script
3f1a198f45 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@52048 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-24 18:19:06 +00:00
Automerge Script
ff2ae14a9b automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@51978 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-24 11:00:29 +00:00
Automerge Script
260eccbb03 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@51880 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-24 01:19:59 +00:00
Automerge Script
a94d625209 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@51557 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-23 02:12:58 +00:00
Automerge Script
5030563084 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@51455 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-22 20:27:07 +00:00
Automerge Script
a4e9dffea0 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@51403 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-22 17:22:37 +00:00
Automerge Script
ab1111631a automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@51118 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-16 06:09:57 +00:00
Automerge Script
80da8dcaac automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@51029 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-16 00:11:13 +00:00
Automerge Script
a552b8298c automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@50956 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-15 21:00:41 +00:00
Automerge Script
f80eaea4ee automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@50819 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-14 06:13:36 +00:00
Automerge Script
075c32cbb9 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@50599 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-12 15:18:07 +00:00
Automerge Script
a05d42a3ef automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@50529 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-11 19:00:39 +00:00
Automerge Script
0517ed834e automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@50516 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-11 14:59:58 +00:00
Automerge Script
fa061fa339 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@50505 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-11 14:00:15 +00:00
Automerge Script
a20330b393 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@50345 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-10 10:02:43 +00:00
Automerge Script
b8612623a2 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@50330 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-10 05:10:20 +00:00
Automerge Script
28de5dbaa9 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@50265 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-10 03:10:55 +00:00
Automerge Script
97f57029d5 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@50185 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-09 14:09:37 +00:00
Automerge Script
272ff651de automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@49944 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-08 09:04:16 +00:00
Automerge Script
325d362076 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@49921 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-08 06:08:16 +00:00
Automerge Script
ac96ab8b01 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@49865 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-07 22:09:13 +00:00
Automerge Script
f7e49a14fd automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@49667 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-05 18:09:06 +00:00
Automerge Script
b99c6b0329 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@49456 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-04 17:58:59 +00:00
Automerge Script
8672b596af automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@49446 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-04 17:09:25 +00:00
Automerge Script
e42fdeeea1 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@49387 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-04 00:09:00 +00:00
Automerge Script
84041c2b8b automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@49312 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-03 08:58:33 +00:00
Automerge Script
9dbe6ac46e automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@49144 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-02 10:59:16 +00:00
Automerge Script
6459d34ade automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@49131 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-02 01:15:10 +00:00
Automerge Script
8866f912c1 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@48812 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-12-21 21:14:02 +00:00
Automerge Script
8e36da5699 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@48657 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-12-20 20:11:07 +00:00
Kevin P. Fleming
32ef26d652 manual update
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@48469 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-12-14 13:18:15 +00:00
Kevin P. Fleming
05f6188c69 manual update, since automerge is not running at this time
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@48421 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-12-12 22:58:49 +00:00
Automerge script
3bb733a7c7 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@46990 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-02 18:05:19 +00:00
Automerge script
74c70148ac automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@46927 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-02 16:03:21 +00:00
Automerge script
e993f73211 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@46882 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-02 14:01:53 +00:00
Automerge script
ace0f74f27 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@46844 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-01 22:01:12 +00:00
Automerge script
30448e4bac automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@46821 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-01 20:03:05 +00:00
Automerge script
e41860927e automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@46800 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-01 19:03:30 +00:00
Automerge script
830d07c933 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@46680 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-31 16:02:51 +00:00
Automerge script
9a6cfc6866 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@46627 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-31 10:21:42 +00:00
Automerge script
026b3a3fc7 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@46602 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-31 09:04:28 +00:00
Automerge script
088684b275 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@46581 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-31 07:03:05 +00:00
Automerge script
4a00839358 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@46456 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-30 17:05:38 +00:00
Automerge script
5c99f456a9 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@46427 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-30 15:03:50 +00:00
Automerge script
cc1353522f automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@46274 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-25 20:02:43 +00:00
Automerge script
5d49b657f6 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@46232 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-25 16:02:50 +00:00
Automerge script
bea7528f5e automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@46182 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-25 09:02:09 +00:00
Automerge script
d7a7695b91 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@45944 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-23 01:04:59 +00:00
Automerge script
ab1188c1f2 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@45814 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-21 13:01:41 +00:00
Automerge script
2a0b7672d2 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@45711 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-19 18:02:35 +00:00
Automerge script
6c4758530a automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@45397 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-17 21:02:28 +00:00
Automerge script
83852bc8c1 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@45350 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-17 18:02:33 +00:00
Automerge script
225c4931fa automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@45312 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-17 16:01:39 +00:00
Automerge script
e3a3e8377d automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@45279 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-16 20:04:13 +00:00
Automerge script
1a0892dbeb automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@45139 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-14 01:00:59 +00:00
Automerge script
2489f46365 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@45124 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-13 23:01:13 +00:00
Automerge script
dfafe2f958 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@45102 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-13 20:02:02 +00:00
Automerge script
0485f6b149 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@45065 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-13 17:02:15 +00:00
Automerge script
2097c7e87d automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@45046 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-13 16:02:27 +00:00
Automerge script
eacb11ad56 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@45025 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-13 14:01:03 +00:00
Automerge script
d70d558bef automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@44999 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-13 08:02:20 +00:00
Automerge script
bf9aaf7beb automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@44970 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-12 19:02:56 +00:00
Automerge script
2c9a7acf54 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@44804 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-10 16:03:06 +00:00
Automerge script
3dfd319062 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@44594 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-06 17:02:27 +00:00
Automerge script
d2cbfe3d21 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@44515 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-05 20:02:26 +00:00
Automerge script
b45cbc48f2 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@44464 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-05 11:00:47 +00:00
Automerge script
213c6afa9b automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@44449 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-05 02:02:12 +00:00
Automerge script
50841b3a96 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@44406 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-04 22:02:08 +00:00
Automerge script
029b67fd32 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@44351 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-04 16:05:59 +00:00
Automerge script
41c63cf7f5 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@44311 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-03 21:02:12 +00:00
Automerge script
e1fbeb0c7f automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@44230 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-02 21:02:14 +00:00
Automerge script
e609b4070c automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@44212 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-02 20:02:11 +00:00
Automerge script
1db6355b21 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@44184 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-02 18:01:57 +00:00
Automerge script
b628bed1c3 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@44165 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-02 17:05:27 +00:00
Automerge script
d81ec738b2 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@44124 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-10-01 16:01:57 +00:00
Automerge script
b2d3f68e87 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@43991 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-29 14:01:57 +00:00
Automerge script
ae1a27ae61 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@43931 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-28 18:01:52 +00:00
Automerge script
93efe68235 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@43911 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-28 17:01:35 +00:00
Automerge script
3da0f0e59d automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@43887 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-28 16:01:36 +00:00
Automerge script
2b76e9e216 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@43826 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-27 21:01:34 +00:00
Automerge script
854e0369df automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@43813 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-27 20:01:41 +00:00
Automerge script
97834bbed9 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@43791 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-27 17:02:12 +00:00
Automerge script
7502860910 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@43773 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-27 13:01:41 +00:00
Automerge script
4c6fb3dd37 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@43720 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-26 21:01:50 +00:00
Automerge script
1de86fd7fc automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@43639 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-25 22:00:50 +00:00
Automerge script
d4026a11b1 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@43563 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-24 14:01:51 +00:00
Automerge script
c5056e1736 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@43516 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-22 22:01:20 +00:00
Automerge script
bb63a367e3 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@43421 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-21 17:01:53 +00:00
Automerge script
24279ed40d automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@43321 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-20 06:01:11 +00:00
Automerge script
e2354a5244 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@43280 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-19 17:01:01 +00:00
Automerge script
9ae33412c5 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@43255 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-19 13:01:18 +00:00
Automerge script
daeb228bb3 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@43229 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-18 21:00:57 +00:00
Automerge script
8911aced89 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@43181 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-18 16:02:39 +00:00
Automerge script
1e4fd6f9b5 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@43087 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-17 14:02:31 +00:00
Automerge script
60b84e7a31 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@43023 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-16 08:01:02 +00:00
Automerge script
0d4e8df3d6 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@43007 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-16 05:00:50 +00:00
Automerge script
0eb84ea1b0 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@42963 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-14 23:03:37 +00:00
Automerge script
3f4ef02de2 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@42909 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-13 20:02:40 +00:00
Automerge script
cb1e08addc automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@42787 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-11 22:00:50 +00:00
Automerge script
e1f5e8e583 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@42736 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-11 17:02:51 +00:00
Automerge script
a270e65e11 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@42714 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-11 15:02:39 +00:00
Automerge script
b2b2ea5901 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@42620 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-09 21:02:51 +00:00
Automerge script
558c7ade17 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@42554 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-09 13:03:03 +00:00
Automerge script
380d8d80ba automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@42470 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-08 19:02:43 +00:00
Automerge script
1134ad9412 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@42440 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-08 17:03:06 +00:00
Automerge script
0b7de19b00 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@42419 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-08 05:02:32 +00:00
Automerge script
6f41dcb8a3 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@42372 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-08 00:02:42 +00:00
Automerge script
67f0bd0d79 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@42282 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-07 17:03:13 +00:00
Automerge script
fe6193c75b automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@42207 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-07 03:00:58 +00:00
Automerge script
8bb17660d7 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@42169 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-06 21:03:10 +00:00
Automerge script
cfb503c6a7 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@42147 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-06 19:02:18 +00:00
Automerge script
a4beaa7dc7 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@42132 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-06 18:03:25 +00:00
Automerge script
942974c8df automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@42107 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-06 16:06:48 +00:00
Joshua Colp
6480d28862 Merged revisions 41768,41827,41830,41880,41882,41989,42014,42054 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.2

........
r41768 | file | 2006-09-01 18:49:07 -0400 (Fri, 01 Sep 2006) | 2 lines

Only wipe the redirected audio & video IP/port if it's specified, and trigger a reinvite.

........
r41827 | bweschke | 2006-09-03 10:16:08 -0400 (Sun, 03 Sep 2006) | 3 lines

 Setting a retry of 0 is generally not a good idea and shouldn't be allowed. (#7574 - reported by regin)


........
r41830 | bweschke | 2006-09-03 10:50:59 -0400 (Sun, 03 Sep 2006) | 3 lines

 Let's NOT spy on Zap/psuedo channels, mmmmmmmmk? 


........
r41880 | bweschke | 2006-09-03 13:13:38 -0400 (Sun, 03 Sep 2006) | 3 lines

 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!


........
r41882 | bweschke | 2006-09-03 13:38:22 -0400 (Sun, 03 Sep 2006) | 3 lines

 Make sure the forwarded channel inherits variables appropriately when we receive a call forward in the queue. (#7867 - raarts reported and patched)


........
r41989 | oej | 2006-09-04 11:46:07 -0400 (Mon, 04 Sep 2006) | 2 lines

Don't kill the pvt before we have sent ACK on CANCEL (needs more testing before making a release)

........
r42014 | qwell | 2006-09-05 12:27:46 -0400 (Tue, 05 Sep 2006) | 4 lines

Small typo in zapata.conf.sample

Reported by ppyy in 7881

........
r42054 | file | 2006-09-05 16:02:48 -0400 (Tue, 05 Sep 2006) | 2 lines

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-netsec@42081 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-05 23:48:48 +00:00
Automerge script
e9cce1551a automerge cancel
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@41787 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-01 23:03:07 +00:00
Automerge script
aee92d097a automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@41734 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-01 18:02:51 +00:00
Automerge script
ecfce7b643 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@41714 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-01 17:03:18 +00:00
Automerge script
aada1f902b automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@41432 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-30 19:03:07 +00:00
Automerge script
008cf36d00 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@41410 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-30 18:03:00 +00:00
Automerge script
5d95ba629c automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@41356 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-30 15:03:12 +00:00
Automerge script
37f7d1e3f0 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@41301 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-30 00:03:06 +00:00
Automerge script
d4b10c9036 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@41266 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-29 06:00:50 +00:00
Automerge script
a37739a0d9 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@41258 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-28 21:02:56 +00:00
Automerge script
53a30e84eb automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@41085 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-25 16:02:33 +00:00
Automerge script
a8350ac22f automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@41003 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-24 20:01:23 +00:00
Automerge script
26eba15ec8 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@40987 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-24 18:01:06 +00:00
Automerge script
38990b3d2c automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@40978 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-24 17:01:04 +00:00
Automerge script
c05bc793fe automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@40920 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-23 17:06:32 +00:00
Automerge script
65d8d50962 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@40825 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-22 03:00:53 +00:00
Automerge script
e51b44628a automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@40806 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-21 23:01:24 +00:00
Automerge script
672df19a39 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@40720 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-20 23:04:09 +00:00
Automerge script
d8220c853c automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@40629 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-20 05:04:37 +00:00
Automerge script
38504cba52 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@40451 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-19 01:04:07 +00:00
Automerge script
c45aa02c13 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@40423 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-18 20:04:23 +00:00
Automerge script
3e1daa8f94 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@40332 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-17 22:04:22 +00:00
Automerge script
1e38d97c40 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@40253 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-17 17:04:18 +00:00
Automerge script
e6906d738b automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@40083 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-16 19:04:10 +00:00
Automerge script
8c1e784711 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@39962 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-15 23:04:36 +00:00
Automerge script
02e6c4f9f3 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@39397 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-08 19:02:51 +00:00
Automerge script
e7e8d3d4a2 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@39377 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-08 18:03:57 +00:00
Automerge script
e4c08a03c8 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@39104 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-07 02:03:39 +00:00
Automerge script
3cafe77949 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@39080 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-07 01:03:45 +00:00
Automerge script
76f5300793 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@38995 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-05 09:03:31 +00:00
Automerge script
d5061be770 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@38971 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-05 08:04:05 +00:00
Automerge script
e91c55a99d automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@38949 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-05 07:03:24 +00:00
Automerge script
ee2918d783 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@38927 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-05 06:04:09 +00:00
Automerge script
06352345c1 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@38849 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-03 20:03:36 +00:00
Automerge script
03a63f510a automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@38784 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-03 06:03:31 +00:00
Automerge script
809a32c851 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@38754 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-02 20:04:16 +00:00
Automerge script
561838ab6a automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@38709 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-02 00:03:25 +00:00
Automerge script
c535882053 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@38675 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-01 20:03:13 +00:00
Automerge script
1f18490cdd automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@38631 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-31 22:03:05 +00:00
Automerge script
3a4688c5ba automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@38605 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-31 18:03:36 +00:00
Automerge script
6088318e55 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@38568 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-31 05:02:43 +00:00
Automerge script
0e601bac9b automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@38520 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-30 00:02:52 +00:00
Automerge script
ac9938f84a automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@38438 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-28 19:02:55 +00:00
Automerge script
e076d9d41f automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@38388 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-27 23:02:39 +00:00
Automerge script
109237c04f automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@38364 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-27 16:02:48 +00:00
Automerge script
4dc5c42b30 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@38346 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-27 05:02:49 +00:00
Automerge script
0375e58b2f automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@38327 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-27 03:02:35 +00:00
Automerge script
f8bb8d5eab automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@38307 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-27 02:03:01 +00:00
Automerge script
7211dd853e automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@38249 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-26 16:03:00 +00:00
Automerge script
6342e0c54a automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@38215 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-25 20:02:30 +00:00
Automerge script
38b6e7dd94 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@38185 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-24 18:02:36 +00:00
Automerge script
ebdb3d95b2 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@37972 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-19 18:03:16 +00:00
Automerge script
2d035ab9a4 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@37875 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-18 01:02:23 +00:00
Automerge script
861ecb091a automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@37851 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-18 00:02:33 +00:00
Automerge script
7d70ecfe81 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@37826 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-17 23:02:47 +00:00
Automerge script
95e2fd1571 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@37783 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-17 16:02:46 +00:00
Automerge script
0b482e3f1c automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@37714 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-16 00:02:36 +00:00
Automerge script
0aaae9f118 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@37628 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-14 14:02:33 +00:00
Automerge script
a2be0f0c4a automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@37585 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-13 22:02:15 +00:00
Automerge script
25ba50fb8f automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@37560 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-13 19:02:05 +00:00
Automerge script
4469bcc1a2 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@37545 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-13 17:02:17 +00:00
Automerge script
13c52205fb automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@37530 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-13 16:02:53 +00:00
Automerge script
51c1fc4c90 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@37472 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-12 19:02:06 +00:00
Automerge script
afb25c2c40 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@37455 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-12 16:02:19 +00:00
Automerge script
94755549d7 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@37432 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-12 14:02:32 +00:00
Automerge script
fac0ba002f automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@37416 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-12 04:02:08 +00:00
Automerge script
9fe475f0df automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@37395 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-11 20:02:43 +00:00
Automerge script
36f56a5e9e automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@37375 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-10 22:02:08 +00:00
Automerge script
424b3fd4eb automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@37317 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-08 00:01:47 +00:00
Automerge script
a07938ea7e automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@37253 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-06 22:04:42 +00:00
Automerge script
da8d720b2a automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@37221 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-06 21:01:31 +00:00
Automerge script
2fb94832b5 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@37200 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-06 16:04:31 +00:00
Automerge script
e11ef6ebe9 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@37170 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-06 14:04:30 +00:00
Automerge script
aa3c2d5acb automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@37026 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-05 16:04:30 +00:00
Automerge script
c6e79104a3 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@36939 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-04 15:04:52 +00:00
Automerge script
0fb5b6dcf2 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@36863 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-03 16:04:11 +00:00
Automerge script
b051dd6899 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@36776 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-03 06:03:44 +00:00
Automerge script
fd757fcf51 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@36750 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-03 05:04:12 +00:00
Automerge script
ec42b4f2b1 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@36724 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-03 04:04:11 +00:00
Automerge script
77d5bacce8 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@36405 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-30 15:04:39 +00:00
Automerge script
603eaab120 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@36297 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-29 20:01:30 +00:00
Automerge script
402cef20d8 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@36283 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-29 08:04:58 +00:00
Automerge script
d7b1425124 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@36225 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-28 20:05:10 +00:00
Automerge script
47b80cf742 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@36108 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-26 18:04:18 +00:00
Automerge script
6f9b26b7e3 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@36050 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-26 16:01:40 +00:00
Automerge script
5a25b96143 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@35942 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-25 16:04:25 +00:00
Automerge script
031b53f451 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@35695 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-23 12:04:14 +00:00
Automerge script
12ebb1d7b4 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@35364 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-21 20:04:35 +00:00
Automerge script
59a4279fb5 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@35158 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-20 16:05:25 +00:00
Automerge script
e1583210e7 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@35092 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-20 11:05:33 +00:00
Automerge script
1386fb291b automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@34950 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-19 21:05:53 +00:00
Automerge script
d9cfa818c4 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@34909 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-19 19:04:53 +00:00
Automerge script
0af302cf60 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@34661 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-18 21:04:55 +00:00
Automerge script
5b7b71ebc9 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@34432 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-16 04:07:04 +00:00
Automerge script
c6323087fc automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@34336 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-15 15:04:55 +00:00
Automerge script
a98f0bf56d automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@34304 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-15 14:04:55 +00:00
Automerge script
36fbb43884 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@34273 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-15 13:05:40 +00:00
Automerge script
4d1ed8bde0 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@34192 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-14 23:11:07 +00:00
Automerge script
05c3bd0de5 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@34125 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-14 15:06:38 +00:00
Automerge script
36cacf788f automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@34021 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-14 03:04:51 +00:00
Automerge script
641ab6d1bc automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@33868 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-13 14:03:54 +00:00
Automerge script
c364c5efdd automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@33840 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-13 13:04:08 +00:00
Automerge script
279b842888 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@33812 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-13 05:04:22 +00:00
Automerge script
e7648cca42 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@33780 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-13 04:03:56 +00:00
Automerge script
449c9c191f automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@33750 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-12 22:04:00 +00:00
Automerge script
bfae89ea9e automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@33723 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-12 21:04:26 +00:00
Automerge script
20fe40f872 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@33642 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-12 16:04:02 +00:00
Automerge script
8aa9a0e17f automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@33575 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-11 22:04:09 +00:00
Automerge script
9de1f31bbc automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@33544 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-11 21:04:25 +00:00
Automerge script
fae968612e automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@33509 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-11 16:04:09 +00:00
Automerge script
d21d275cc3 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@33478 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-11 15:04:26 +00:00
Automerge script
62866c9fda automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@33327 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-09 19:04:18 +00:00
Automerge script
f6a39fbcc2 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@33292 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-09 17:04:09 +00:00
Automerge script
e7e0030d6b automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@33262 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-09 16:04:26 +00:00
Automerge script
6fcb0a1a43 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@33062 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-08 17:04:02 +00:00
Automerge script
ec8919adcf automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@32844 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-07 18:04:56 +00:00
Automerge script
cbf462c3c7 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@32632 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-06 17:05:29 +00:00
Automerge script
e89976c879 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@32595 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-06 16:05:13 +00:00
Automerge script
bc79efe36f automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@32400 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-05 20:04:59 +00:00
Automerge script
b54594651c automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@31951 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-04 04:05:13 +00:00
Automerge script
e655848772 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@31807 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-03 18:05:16 +00:00
Automerge script
0de3815b2a automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@31769 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-03 15:05:26 +00:00
Automerge script
214df108f8 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@31585 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-01 22:05:50 +00:00
Automerge script
e5d6dfc0b9 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@31551 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-01 21:05:20 +00:00
Automerge script
6b24a23364 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@31352 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-01 13:05:15 +00:00
Automerge script
fc18e3a448 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@31224 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-01 00:05:30 +00:00
Automerge script
c7a667391b automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@31192 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-31 23:05:21 +00:00
Automerge script
98b7b027be automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@31157 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-31 21:05:23 +00:00
Automerge script
9b23589112 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@30905 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-30 20:05:55 +00:00
Automerge script
99cf427def automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@30834 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-30 17:05:14 +00:00
Automerge script
f16891f03f automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@30799 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-30 15:07:02 +00:00
Automerge script
b2fb09bd73 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@30577 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-26 18:06:03 +00:00
Automerge script
b752fe2fb0 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@30462 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-25 22:05:58 +00:00
Automerge script
ad5a410b70 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@30385 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-25 20:05:54 +00:00
Automerge script
bc94429e8c automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@30358 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-25 19:05:14 +00:00
Automerge script
4f6e1f4878 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@30327 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-25 18:05:26 +00:00
Automerge script
a5cfea7f28 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@30270 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-25 16:05:31 +00:00
Automerge script
aa4d7f8df9 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@30127 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-24 22:04:41 +00:00
Automerge script
b5b89d732c automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@30097 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-24 21:05:13 +00:00
Automerge script
a71ff914c6 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@30067 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-24 20:05:12 +00:00
Automerge script
b30db14404 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@30001 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-24 17:05:22 +00:00
Automerge script
0d1e7be6ea automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@29966 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-24 13:01:36 +00:00
Automerge script
4bcedb93cc automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@29934 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-24 04:05:45 +00:00
Automerge script
0a4881b51f automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@29877 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-23 22:05:06 +00:00
Automerge script
c96816d287 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@29798 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-23 19:05:12 +00:00
Automerge script
ca89b4e76c automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@29762 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-23 18:05:13 +00:00
Automerge script
cfd6e75c53 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@29702 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-23 16:01:16 +00:00
Automerge script
ebfd515ca7 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@29591 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-22 22:06:43 +00:00
Automerge script
db4f8886bd automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@29551 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-22 21:05:40 +00:00
Automerge script
1683b50452 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@29502 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-22 17:06:30 +00:00
Automerge script
49be813673 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@29433 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-22 15:06:09 +00:00
Automerge script
bb59b231d3 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@29233 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-21 16:06:29 +00:00
Automerge script
c8d73b95a0 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@29092 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-20 20:07:15 +00:00
Automerge script
dac92a6182 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@29006 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-20 03:06:40 +00:00
Automerge script
142165cb92 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@28933 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-20 01:07:21 +00:00
Automerge script
3e6f1fe864 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@28831 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-19 20:06:50 +00:00
Automerge script
134eb7c8f6 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@28788 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-19 19:07:56 +00:00
Automerge script
7633ebabe8 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@28702 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-19 17:04:55 +00:00
Automerge script
a2ebf8a0fb automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@28674 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-19 16:07:43 +00:00
Automerge script
54282f4e4b automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@28392 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-18 21:01:36 +00:00
Automerge script
f360986593 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@28379 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-18 20:07:21 +00:00
Automerge script
7f5e1b4abe automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@28299 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-18 18:07:34 +00:00
Automerge script
1da1f4e939 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@28256 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-18 17:08:06 +00:00
Automerge script
f209b6fe9b automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@28211 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-18 15:07:38 +00:00
Automerge script
1dea733878 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@28167 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-18 13:06:54 +00:00
Automerge script
7b5e3d8fd5 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@28015 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-17 23:08:25 +00:00
Automerge script
2c8f7e39f6 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@27969 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-17 20:07:31 +00:00
Automerge script
64fa2ed07a automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@27890 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-17 18:07:31 +00:00
Automerge script
2a3e4e3a38 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@27811 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-17 16:07:08 +00:00
Automerge script
8c111c6a6c automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@27765 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-17 10:07:11 +00:00
Automerge script
f16c918188 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@27677 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-17 03:07:25 +00:00
Automerge script
c161ad3074 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@27635 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-17 00:06:52 +00:00
Automerge script
fcdf61c4b3 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@27475 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-16 20:06:30 +00:00
Automerge script
2e4c3cac8a automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@27127 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-13 05:07:32 +00:00
Automerge script
a84ea4f014 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@27085 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-12 00:05:45 +00:00
Automerge script
e9ee611581 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@26798 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-11 09:10:58 +00:00
Automerge script
d83e489d61 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@26130 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-09 15:07:09 +00:00
Automerge script
269783fdff automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@26089 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-09 14:06:34 +00:00
Automerge script
c43ec5a1bc automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@25650 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-08 16:07:44 +00:00
Automerge script
407350f13d automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@25607 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-08 15:07:01 +00:00
Automerge script
626a5228e3 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@25561 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-08 14:07:31 +00:00
Automerge script
d4b1647374 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@25486 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-08 12:06:46 +00:00
Automerge script
151fc69ffc automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@25355 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-07 14:05:27 +00:00
Automerge script
fcdcbf879a automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@25321 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-07 13:05:43 +00:00
Automerge script
91096b7368 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@25200 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-06 03:06:16 +00:00
Automerge script
034337fb07 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@25158 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-06 01:06:20 +00:00
Automerge script
0d352c2e09 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@25055 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-05 21:07:01 +00:00
Automerge script
f923e2c1b8 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@24949 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-05 18:06:18 +00:00
Automerge script
5c40f5053f automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@24875 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-05 15:08:18 +00:00
Automerge script
b4c09a0b95 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@24742 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-04 17:05:55 +00:00
Automerge script
218672370e automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@24705 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-04 12:05:58 +00:00
Automerge script
696ef06866 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@24603 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-03 21:06:33 +00:00
Automerge script
fa4103cc3b automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@24533 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-03 19:06:04 +00:00
Automerge script
ef55cff62a automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@24420 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-03 13:08:48 +00:00
Automerge script
95c0040574 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@24338 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-02 20:07:59 +00:00
Automerge script
d46854d378 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@24128 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-02 03:06:29 +00:00
Automerge script
622352f2c9 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@24049 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-01 21:05:01 +00:00
Automerge script
1a02e1b9c1 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@24018 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-01 20:05:24 +00:00
Automerge script
8cb576b993 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@23981 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-01 16:05:04 +00:00
Automerge script
ab900f7fad automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@23927 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-05-01 11:04:46 +00:00
Automerge script
8192165970 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@23734 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-30 16:05:12 +00:00
Automerge script
5e0ea8da27 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@23703 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-30 15:05:31 +00:00
Automerge script
a8798960dd automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@23668 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-30 14:05:02 +00:00
Automerge script
ac5119e455 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@23610 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-30 12:04:51 +00:00
Automerge script
c67540d87b automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@23333 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-29 12:04:34 +00:00
Automerge script
49e844c0e6 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@23206 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-28 17:05:06 +00:00
Automerge script
b51560eaa1 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@22987 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-27 20:05:17 +00:00
Automerge script
3190fe1c57 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@22899 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-27 17:06:05 +00:00
Automerge script
0529a7f84a automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@22629 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-26 20:05:58 +00:00
Automerge script
c292909f2e automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@22123 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-21 23:02:41 +00:00
Automerge script
37a6092b27 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@21678 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-19 22:05:55 +00:00
Automerge script
f73cbceaf6 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@21635 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-19 19:06:20 +00:00
Automerge script
940c220642 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@21274 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-19 00:06:11 +00:00
Automerge script
ccc668b5d6 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@21076 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-18 07:06:21 +00:00
Automerge script
dd12cba9d0 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@21001 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-17 17:06:46 +00:00
Automerge script
6e6a00609d automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@20074 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-14 18:05:52 +00:00
Automerge script
ee263ee87e automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@19929 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-13 21:06:44 +00:00
Kevin P. Fleming
63566eac42 Merged revisions 19812 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.2

........
r19812 | kpfleming | 2006-04-13 12:40:21 -0500 (Thu, 13 Apr 2006) | 2 lines

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-netsec@19818 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-13 17:52:23 +00:00
Automerge script
b64b6ef1f7 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@19808 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-13 16:06:43 +00:00
Automerge script
54e190dacb automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@19435 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-11 23:06:48 +00:00
Automerge script
27b633c817 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@19391 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-11 22:06:47 +00:00
Automerge script
4099114189 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@19344 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-11 21:06:53 +00:00
Automerge script
2c897a8b8c automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@19055 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-11 02:06:45 +00:00
Automerge script
2aac61e6ad automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@18903 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-10 18:06:02 +00:00
Automerge script
1db17b168a automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@18532 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-08 20:06:31 +00:00
Automerge script
24298e447c automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@18478 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-07 23:05:40 +00:00
Automerge script
d3a87c1f69 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@18297 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-07 15:06:19 +00:00
Automerge script
c72b1b15c4 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@18259 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-07 14:01:46 +00:00
Automerge script
09609b0510 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@18125 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-06 23:05:57 +00:00
Automerge script
63bd37a91e automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@17985 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-06 18:06:57 +00:00
Automerge script
760352a196 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@17942 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-06 17:06:45 +00:00
Automerge script
1fce77dc68 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@17734 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-05 20:06:32 +00:00
Automerge script
bde8fa877f automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@17529 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-05 07:06:34 +00:00
Automerge script
08aecbb1ed automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@17403 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-04 19:05:53 +00:00
Automerge script
6f8262c9b4 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@17362 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-04 18:04:52 +00:00
Automerge script
f7feba82bc automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@17310 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-04 16:04:23 +00:00
Automerge script
c0bff2ac09 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@17177 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-03 21:04:38 +00:00
Automerge script
8839755956 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@17102 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-04-03 18:04:56 +00:00
Automerge script
2648e9f039 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@16797 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-31 20:03:56 +00:00
Automerge script
15e7ec94e1 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@16770 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-31 19:04:28 +00:00
Automerge script
b877a5b0f7 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@16599 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-30 23:02:42 +00:00
Automerge script
27405fac27 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@16577 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-30 22:02:13 +00:00
Automerge script
d2f451ef0c automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@16545 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-30 18:01:47 +00:00
Automerge script
b4d9cb0418 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@16385 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-30 02:06:27 +00:00
Automerge script
c116009930 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@16343 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-30 01:06:54 +00:00
Automerge script
99a4cd1de2 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@16233 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-29 20:06:56 +00:00
Automerge script
9a26882461 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@16123 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-29 15:06:30 +00:00
Automerge script
e167a9a350 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@16050 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-29 05:06:52 +00:00
Automerge script
f86140a213 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@15937 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-29 01:06:53 +00:00
Automerge script
b4589618c4 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@15783 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-28 21:06:54 +00:00
Automerge script
fd1d8cdf10 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@15742 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-28 20:06:56 +00:00
Automerge script
7a879ed598 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@15698 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-28 19:06:50 +00:00
Automerge script
2764568353 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@15657 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-28 18:06:51 +00:00
Automerge script
e8862556fd automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@15423 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-28 00:07:31 +00:00
Automerge script
1e59a857ae automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@15374 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-27 23:01:43 +00:00
Automerge script
b705a62dc5 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@14914 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-25 06:07:49 +00:00
Automerge script
98ba3160e7 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@14867 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-25 05:07:29 +00:00
Automerge script
0345a25e6a automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@14751 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-24 15:07:22 +00:00
Automerge script
ce930f8e2d automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@14703 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-24 05:07:41 +00:00
Automerge script
0314e5efc6 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@14655 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-24 01:07:12 +00:00
Automerge script
c1d5aad112 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@14566 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-23 22:07:47 +00:00
Automerge script
7cae785261 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@14515 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-23 21:07:45 +00:00
Automerge script
de670a217d automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@14319 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-22 23:06:30 +00:00
Automerge script
78104df395 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@14274 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-22 22:06:45 +00:00
Automerge script
ba4b234d34 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@14229 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-22 21:07:01 +00:00
Kevin P. Fleming
97b3a1c5a4 use proper email address for merge failures
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@14182 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-22 20:06:03 +00:00
Automerge script
2a14dad0f0 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@14178 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-22 10:10:37 +00:00
Automerge script
c614f4d869 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@13999 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-21 19:06:07 +00:00
Automerge script
e2ad8bd804 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@13960 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-21 18:05:42 +00:00
Automerge script
f06bd477c0 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@13924 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-21 17:05:44 +00:00
Automerge script
a0e595febf automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@13886 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-21 16:06:13 +00:00
Automerge script
2395b09fef automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@13849 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-21 15:05:43 +00:00
Automerge script
e3bc797a82 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@13784 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-21 07:06:15 +00:00
Automerge script
00461229c2 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@13747 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-21 06:06:20 +00:00
Automerge script
c9d7d267cd automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@13673 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-20 19:07:11 +00:00
Automerge script
380d8cfcc4 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@13586 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-19 10:10:38 +00:00
Automerge script
fe83f9421b automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@13318 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-16 21:05:36 +00:00
Automerge script
2b3941fcbf automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@13274 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-16 18:06:16 +00:00
Automerge script
aad583ff1d automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@13204 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-16 07:01:26 +00:00
Automerge script
9b1e1fe199 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@13196 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-15 23:05:42 +00:00
Automerge script
ca6ae319c7 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@13130 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-15 19:05:45 +00:00
Automerge script
5e338e72ba automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@13062 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-15 14:06:15 +00:00
Automerge script
10fe0e9c67 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@12959 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-14 19:05:40 +00:00
Automerge script
f1fade4fa6 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@12825 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-13 16:05:25 +00:00
Automerge script
00e45fc396 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@12686 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-12 20:05:47 +00:00
Automerge script
0e3f10b86f automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@12644 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-12 19:05:14 +00:00
Automerge script
d008cda808 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@12609 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-12 18:05:51 +00:00
Automerge script
ba70bebc38 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@12538 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-12 16:08:23 +00:00
Automerge script
eb6fc20dc8 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@12231 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-07 01:05:29 +00:00
Automerge script
db6920d628 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@12196 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-07 00:05:29 +00:00
Automerge script
0fcae43d36 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@12103 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-06 15:05:03 +00:00
Automerge script
8d808bd9d3 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@12040 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-06 11:04:25 +00:00
Automerge script
c0763951ba automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@11975 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-06 03:04:43 +00:00
Automerge script
e483c1945d automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@11879 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-05 13:05:27 +00:00
Automerge script
0397dba5a4 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@11804 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-04 12:04:16 +00:00
Automerge script
c19212f8d0 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@11745 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-03 18:04:19 +00:00
Automerge script
d848cb43b3 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@11683 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-03 09:04:18 +00:00
Automerge script
50464af8c2 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@11658 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-03 01:03:41 +00:00
Automerge script
7f9c385052 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@11633 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-02 23:03:50 +00:00
Automerge script
0840844421 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@11585 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-02 20:03:53 +00:00
Automerge script
924be1c3b9 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@11553 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-02 07:03:41 +00:00
Automerge script
b2b717e61f automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@11527 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-01 18:04:00 +00:00
Automerge script
2f6c81bbc5 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@11502 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-03-01 07:03:42 +00:00
Automerge script
490cd4ada5 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@11434 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-28 20:04:13 +00:00
Automerge script
ee69978cdc automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@11406 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-28 19:03:52 +00:00
Automerge script
0a4506d0dd automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@11306 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-27 16:04:08 +00:00
Automerge script
b7ad6d8c2d automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@11275 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-27 03:04:02 +00:00
Automerge script
6f665a50e0 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@11191 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-26 17:04:15 +00:00
Automerge script
0bc176e6b8 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@11145 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-25 20:04:12 +00:00
Automerge script
b9b4ae4c34 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@11115 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-25 06:04:09 +00:00
Automerge script
2719e0aa02 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@11088 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-25 05:04:25 +00:00
Automerge script
2dc3679b6e automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@10986 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-24 00:04:40 +00:00
Automerge script
74879cff5b automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@10870 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-23 15:01:21 +00:00
Automerge script
d58f08a1a9 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@10760 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-22 18:03:52 +00:00
Automerge script
2d948fe31e automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@10601 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-21 00:03:56 +00:00
Automerge script
5efaf11018 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@10558 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-20 07:03:44 +00:00
Automerge script
b055431b5c automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@10534 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-20 06:03:40 +00:00
Automerge script
e3bf4c14dc automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@10509 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-19 19:03:29 +00:00
Automerge script
d291491eb6 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@10486 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-19 18:03:48 +00:00
Automerge script
e098adeaf7 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@10430 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-18 01:03:27 +00:00
Automerge script
304e39b8ec automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@10389 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-17 02:03:24 +00:00
Automerge script
d075508cf0 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@10322 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-16 19:03:22 +00:00
Automerge script
bf7f1e75da automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@10162 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-15 02:03:35 +00:00
Automerge script
72e192fc42 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@10136 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-15 01:04:13 +00:00
Automerge script
86a106023b automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@10044 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-14 21:05:23 +00:00
Automerge script
3a0ec4568d automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@10017 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-14 20:11:19 +00:00
Automerge script
13d5513465 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@9987 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-14 19:04:48 +00:00
Automerge script
b670fe8554 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@9879 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-14 05:01:18 +00:00
Automerge script
beff9bb972 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@9868 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-14 04:01:20 +00:00
Automerge script
19c52a797b automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@9842 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-14 01:03:47 +00:00
Automerge script
edbaad38fc automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@9782 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-13 18:04:04 +00:00
Automerge script
266010c7f2 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@9627 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-11 20:03:02 +00:00
Automerge script
9bfab982fd automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@9606 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-11 19:03:03 +00:00
Automerge script
18dbcd321d automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@9547 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-11 16:03:16 +00:00
Automerge script
744ec2c02e automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@9505 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-11 07:00:53 +00:00
Automerge script
c0dce52a12 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@9422 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-10 21:03:04 +00:00
Automerge script
cfe7565123 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@9346 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-09 22:03:14 +00:00
Automerge script
a6d8e03be5 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@9273 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-09 03:01:45 +00:00
Automerge script
5fc4e0d280 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@9258 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-09 02:01:45 +00:00
Automerge script
1c4e84f888 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@9237 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-08 23:00:44 +00:00
Kevin P. Fleming
f6d4da1706 simplify automerge setup
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@9169 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-06 20:47:11 +00:00
Automerge script
f5bbba29fb automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@9159 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-05 18:00:23 +00:00
Kevin P. Fleming
4f44b40d33 update to current 1.2 branch
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@9131 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-02 23:47:35 +00:00
Kevin P. Fleming
08e0a56f32 setup for new automerge process
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@9130 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-02 23:45:00 +00:00
Automerge script
a0b6fe01f4 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@9097 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-02 19:01:36 +00:00
Automerge script
a03cf25014 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@9083 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-02-02 17:01:37 +00:00
Automerge script
9acbdbcc6d automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@8916 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-30 18:01:34 +00:00
Automerge script
06765cc9d1 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@8818 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-28 14:01:17 +00:00
Automerge script
2cfee72f8e automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@8795 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-27 09:01:17 +00:00
Automerge script
8ff712f50f automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@8767 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-27 01:01:17 +00:00
Automerge script
6a02d8a8d9 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@8740 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-26 20:01:20 +00:00
Automerge script
02e4d63d7e automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@8721 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-26 15:01:17 +00:00
Automerge script
6f4c9d5739 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@8686 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-25 20:01:00 +00:00
Automerge script
0bd1631812 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@8675 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-25 19:01:09 +00:00
Automerge script
edfe61308b automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@8641 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-25 10:01:13 +00:00
Automerge script
9d4b0ced46 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@8627 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-25 06:00:59 +00:00
Automerge script
9a8533488e automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@8617 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-25 02:01:00 +00:00
Automerge script
d7812f6634 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@8607 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-24 23:00:59 +00:00
Automerge script
2e10d5244e automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@8581 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-24 21:01:03 +00:00
Automerge script
e295ae92f3 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@8570 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-24 20:00:59 +00:00
Automerge script
0ca5e4125e automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@8546 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-24 14:01:00 +00:00
Automerge script
86f0c7bfcc automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@8449 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-22 20:00:19 +00:00
Automerge script
30c9cea332 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@8440 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-22 18:00:19 +00:00
Automerge script
ea091271c8 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@8435 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-22 16:00:19 +00:00
Automerge script
bea37cf37b automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@8431 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-22 09:00:21 +00:00
Automerge script
b2d320b259 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@8425 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-22 03:00:19 +00:00
Automerge script
749b766a8c automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@8415 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-22 00:00:10 +00:00
Automerge script
6fae615794 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@8396 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-21 19:00:20 +00:00
Automerge script
abcbea02c1 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@8355 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-20 19:01:00 +00:00
Automerge script
65850c0467 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@8322 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-20 01:00:57 +00:00
Automerge script
413b215b6c automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@8288 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-19 20:00:55 +00:00
Automerge script
30185fdff4 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@8247 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-19 05:00:39 +00:00
Kevin P. Fleming
8cedcec2bc add README note to the proper place for future releases
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@8216 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-18 23:14:04 +00:00
Automerge script
1cc6f6d3bb automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@8202 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-18 22:00:37 +00:00
Automerge script
ca0a371996 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@8176 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-18 03:00:42 +00:00
Automerge script
b0fd9f9b74 automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@8172 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-18 02:00:34 +00:00
Kevin P. Fleming
396f6561a4 set up for automerge
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@8159 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-17 23:58:15 +00:00
Kevin P. Fleming
f16619507a updating to current 1.2
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@8046 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-13 03:52:45 +00:00
Kevin P. Fleming
69ac155838 initial import of Asterisk SIP support for network security devices
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@7927 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-10 03:10:34 +00:00
Kevin P. Fleming
a6bae85952 prepare for merging changes from main 1.2 branch
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@7926 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-10 03:05:18 +00:00
Kevin P. Fleming
494b9c486e create branch to hold network security device code
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@7925 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-01-10 03:03:29 +00:00
80 changed files with 14045 additions and 2287 deletions

1
.lastclean Normal file
View File

@@ -0,0 +1 @@
9

1
.version Normal file
View File

@@ -0,0 +1 @@
1.2.25-netsec

View File

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

6495
ChangeLog Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -58,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/pbx.digium.com (via IAX2)
IAX2/misery.digium.com/6000 (via IAX2)
licensing@digium.com (via email)
Digium, Inc.

View File

@@ -110,6 +110,9 @@ BUSYDETECT+= #-DBUSYDETECT_TONEONLY
# Don't use together with -DBUSYDETECT_TONEONLY
BUSYDETECT+= #-DBUSYDETECT_COMPARE_TONE_AND_SILENCE
# Comment this if you want to disable MIDCOM
MIDCOM = -DMIDCOM
ifneq ($(OSARCH),SunOS)
ASTLIBDIR=$(INSTALL_PREFIX)/usr/lib/asterisk
ASTVARLIBDIR=$(INSTALL_PREFIX)/var/lib/asterisk
@@ -340,6 +343,7 @@ ASTCFLAGS+= $(DEBUG_THREADS)
ASTCFLAGS+= $(TRACE_FRAMES)
ASTCFLAGS+= $(MALLOC_DEBUG)
ASTCFLAGS+= $(BUSYDETECT)
ASTCFLAGS+= $(MIDCOM)
ASTCFLAGS+= $(OPTIONS)
ifneq ($(findstring dont-optimize,$(MAKECMDGOALS)),dont-optimize)
ASTCFLAGS+= -fomit-frame-pointer
@@ -354,7 +358,7 @@ OBJS=io.o sched.o logger.o frame.o loader.o config.o channel.o \
astmm.o enum.o srv.o dns.o aescrypt.o aestab.o aeskey.o \
utils.o plc.o jitterbuf.o dnsmgr.o devicestate.o \
netsock.o slinfactory.o ast_expr2.o ast_expr2f.o \
cryptostub.o astobj2.o
cryptostub.o
ifeq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/include/sys/poll.h),)
OBJS+= poll.o

8
README
View File

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

View File

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

22
README.opsound Normal file
View File

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

View File

@@ -203,15 +203,3 @@ GetVar Manager Action:
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.

722
astobj2.c
View File

@@ -1,722 +0,0 @@
/*
* astobj2 - replacement containers for asterisk data structures.
*
* Copyright (C) 2006 Marta Carbone, Luigi Rizzo - Univ. di Pisa, Italy
*
* 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.
*/
/*
* Function implementing astobj2 objects.
*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include <stdlib.h>
#include "asterisk/astobj2.h"
#include "asterisk/utils.h"
#include "asterisk/cli.h"
#include "asterisk/linkedlists.h"
/*!
* astobj2 objects are always prepended this data structure,
* which contains a lock, a reference counter,
* the flags and a pointer to a destructor.
* The refcount is used to decide when it is time to
* invoke the destructor.
* The magic number is used for consistency check.
* XXX the lock is not always needed, and its initialization may be
* expensive. Consider making it external.
*/
struct __priv_data {
ast_mutex_t lock;
int ref_counter;
ao2_destructor_fn destructor_fn;
/*! for stats */
size_t data_size;
/*! magic number. This is used to verify that a pointer passed in is a
* valid astobj2 */
uint32_t magic;
};
#define AO2_MAGIC 0xa570b123
/*!
* What an astobj2 object looks like: fixed-size private data
* followed by variable-size user data.
*/
struct astobj2 {
struct __priv_data priv_data;
void *user_data[0];
};
#ifdef AST_DEVMODE
#define AO2_DEBUG 1
#endif
#ifdef AO2_DEBUG
struct ao2_stats {
volatile int total_objects;
volatile int total_mem;
volatile int total_containers;
volatile int total_refs;
volatile int total_locked;
};
static struct ao2_stats ao2;
#endif
#ifndef HAVE_BKTR /* backtrace support */
void ao2_bt(void) {}
#else
#include <execinfo.h> /* for backtrace */
void ao2_bt(void)
{
int c, i;
#define N1 20
void *addresses[N1];
char **strings;
c = backtrace(addresses, N1);
strings = backtrace_symbols(addresses,c);
ast_verbose("backtrace returned: %d\n", c);
for(i = 0; i < c; i++) {
ast_verbose("%d: %p %s\n", i, addresses[i], strings[i]);
}
free(strings);
}
#endif
/*!
* \brief convert from a pointer _p to a user-defined object
*
* \return the pointer to the astobj2 structure
*/
static inline struct astobj2 *INTERNAL_OBJ(void *user_data)
{
struct astobj2 *p;
if (!user_data) {
ast_log(LOG_ERROR, "user_data is NULL\n");
return NULL;
}
p = (struct astobj2 *) ((char *) user_data - sizeof(*p));
if (AO2_MAGIC != (p->priv_data.magic) ) {
ast_log(LOG_ERROR, "bad magic number 0x%x for %p\n", p->priv_data.magic, p);
p = NULL;
}
return p;
}
/*!
* \brief convert from a pointer _p to an astobj2 object
*
* \return the pointer to the user-defined portion.
*/
#define EXTERNAL_OBJ(_p) ((_p) == NULL ? NULL : (_p)->user_data)
int ao2_lock(void *user_data)
{
struct astobj2 *p = INTERNAL_OBJ(user_data);
if (p == NULL)
return -1;
#ifdef AO2_DEBUG
ast_atomic_fetchadd_int(&ao2.total_locked, 1);
#endif
return ast_mutex_lock(&p->priv_data.lock);
}
int ao2_unlock(void *user_data)
{
struct astobj2 *p = INTERNAL_OBJ(user_data);
if (p == NULL)
return -1;
#ifdef AO2_DEBUG
ast_atomic_fetchadd_int(&ao2.total_locked, -1);
#endif
return ast_mutex_unlock(&p->priv_data.lock);
}
/*
* The argument is a pointer to the user portion.
*/
int ao2_ref(void *user_data, const int delta)
{
int current_value;
int ret;
struct astobj2 *obj = INTERNAL_OBJ(user_data);
if (obj == NULL)
return -1;
/* if delta is 0, just return the refcount */
if (delta == 0)
return (obj->priv_data.ref_counter);
/* we modify with an atomic operation the reference counter */
ret = ast_atomic_fetchadd_int(&obj->priv_data.ref_counter, delta);
current_value = ret + delta;
#ifdef AO2_DEBUG
ast_atomic_fetchadd_int(&ao2.total_refs, delta);
#endif
/* this case must never happen */
if (current_value < 0)
ast_log(LOG_ERROR, "refcount %d on object %p\n", current_value, user_data);
if (current_value <= 0) { /* last reference, destroy the object */
if (obj->priv_data.destructor_fn != NULL)
obj->priv_data.destructor_fn(user_data);
ast_mutex_destroy(&obj->priv_data.lock);
#ifdef AO2_DEBUG
ast_atomic_fetchadd_int(&ao2.total_mem, - obj->priv_data.data_size);
ast_atomic_fetchadd_int(&ao2.total_objects, -1);
#endif
/* for safety, zero-out the astobj2 header and also the
* first word of the user-data, which we make sure is always
* allocated. */
bzero(obj, sizeof(struct astobj2 *) + sizeof(void *) );
free(obj);
}
return ret;
}
/*
* We always alloc at least the size of a void *,
* for debugging purposes.
*/
void *ao2_alloc(size_t data_size, ao2_destructor_fn destructor_fn)
{
/* allocation */
struct astobj2 *obj;
if (data_size < sizeof(void *))
data_size = sizeof(void *);
obj = calloc(1, sizeof(*obj) + data_size);
if (obj == NULL)
return NULL;
ast_mutex_init(&obj->priv_data.lock);
obj->priv_data.magic = AO2_MAGIC;
obj->priv_data.data_size = data_size;
obj->priv_data.ref_counter = 1;
obj->priv_data.destructor_fn = destructor_fn; /* can be NULL */
#ifdef AO2_DEBUG
ast_atomic_fetchadd_int(&ao2.total_objects, 1);
ast_atomic_fetchadd_int(&ao2.total_mem, data_size);
ast_atomic_fetchadd_int(&ao2.total_refs, 1);
#endif
/* return a pointer to the user data */
return EXTERNAL_OBJ(obj);
}
/* internal callback to destroy a container. */
static void container_destruct(void *c);
/* each bucket in the container is a tailq. */
AST_LIST_HEAD_NOLOCK(bucket, bucket_list);
/*!
* A container; stores the hash and callback functions, information on
* the size, the hash bucket heads, and a version number, starting at 0
* (for a newly created, empty container)
* and incremented every time an object is inserted or deleted.
* The assumption is that an object is never moved in a container,
* but removed and readded with the new number.
* The version number is especially useful when implementing iterators.
* In fact, we can associate a unique, monotonically increasing number to
* each object, which means that, within an iterator, we can store the
* version number of the current object, and easily look for the next one,
* which is the next one in the list with a higher number.
* Since all objects have a version >0, we can use 0 as a marker for
* 'we need the first object in the bucket'.
*
* \todo Linking and unlink objects is typically expensive, as it
* involves a malloc() of a small object which is very inefficient.
* To optimize this, we allocate larger arrays of bucket_list's
* when we run out of them, and then manage our own freelist.
* This will be more efficient as we can do the freelist management while
* we hold the lock (that we need anyways).
*/
struct ao2_container {
ao2_hash_fn hash_fn;
ao2_callback_fn cmp_fn;
int n_buckets;
/*! Number of elements in the container */
int elements;
/*! described above */
int version;
/*! variable size */
struct bucket buckets[0];
};
/*!
* \brief always zero hash function
*
* it is convenient to have a hash function that always returns 0.
* This is basically used when we want to have a container that is
* a simple linked list.
*
* \returns 0
*/
static int hash_zero(const void *user_obj, const int flags)
{
return 0;
}
/*
* A container is just an object, after all!
*/
struct ao2_container *
ao2_container_alloc(const unsigned int n_buckets, ao2_hash_fn hash_fn,
ao2_callback_fn cmp_fn)
{
/* XXX maybe consistency check on arguments ? */
/* compute the container size */
size_t container_size = sizeof(struct ao2_container) + n_buckets * sizeof(struct bucket);
struct ao2_container *c = ao2_alloc(container_size, container_destruct);
if (!c)
return NULL;
c->version = 1; /* 0 is a reserved value here */
c->n_buckets = n_buckets;
c->hash_fn = hash_fn ? hash_fn : hash_zero;
c->cmp_fn = cmp_fn;
#ifdef AO2_DEBUG
ast_atomic_fetchadd_int(&ao2.total_containers, 1);
#endif
return c;
}
/*!
* return the number of elements in the container
*/
int ao2_container_count(struct ao2_container *c)
{
return c->elements;
}
/*!
* A structure to create a linked list of entries,
* used within a bucket.
* XXX \todo this should be private to the container code
*/
struct bucket_list {
AST_LIST_ENTRY(bucket_list) entry;
int version;
struct astobj2 *astobj; /* pointer to internal data */
};
/*
* link an object to a container
*/
void *__ao2_link(struct ao2_container *c, void *user_data, int iax2_hack)
{
int i;
/* create a new list entry */
struct bucket_list *p;
struct astobj2 *obj = INTERNAL_OBJ(user_data);
if (!obj)
return NULL;
if (INTERNAL_OBJ(c) == NULL)
return NULL;
p = calloc(1, sizeof(*p));
if (!p)
return NULL;
i = c->hash_fn(user_data, OBJ_POINTER);
ao2_lock(c);
i %= c->n_buckets;
p->astobj = obj;
p->version = ast_atomic_fetchadd_int(&c->version, 1);
if (iax2_hack)
AST_LIST_INSERT_HEAD(&c->buckets[i], p, entry);
else
AST_LIST_INSERT_TAIL(&c->buckets[i], p, entry);
ast_atomic_fetchadd_int(&c->elements, 1);
ao2_ref(user_data, +1);
ao2_unlock(c);
return p;
}
/*!
* \brief another convenience function is a callback that matches on address
*/
int ao2_match_by_addr(void *user_data, void *arg, int flags)
{
return (user_data == arg) ? (CMP_MATCH | CMP_STOP) : 0;
}
/*
* Unlink an object from the container
* and destroy the associated * ao2_bucket_list structure.
*/
void *ao2_unlink(struct ao2_container *c, void *user_data)
{
if (INTERNAL_OBJ(user_data) == NULL) /* safety check on the argument */
return NULL;
ao2_callback(c, OBJ_UNLINK | OBJ_POINTER | OBJ_NODATA, ao2_match_by_addr, user_data);
return NULL;
}
/*!
* \brief special callback that matches all
*/
static int cb_true(void *user_data, void *arg, int flags)
{
return CMP_MATCH;
}
/*!
* Browse the container using different stategies accoding the flags.
* \return Is a pointer to an object or to a list of object if OBJ_MULTIPLE is
* specified.
*/
void *ao2_callback(struct ao2_container *c,
const enum search_flags flags,
ao2_callback_fn cb_fn, void *arg)
{
int i, last; /* search boundaries */
void *ret = NULL;
if (INTERNAL_OBJ(c) == NULL) /* safety check on the argument */
return NULL;
if ((flags & (OBJ_MULTIPLE | OBJ_NODATA)) == OBJ_MULTIPLE) {
ast_log(LOG_WARNING, "multiple data return not implemented yet (flags %x)\n", flags);
return NULL;
}
/* override the match function if necessary */
#if 0
/* Removing this slightly changes the meaning of OBJ_POINTER, but makes it
* do what I want it to. I'd like to hint to ao2_callback that the arg is
* of the same object type, so it can be passed to the hash function.
* However, I don't want to imply that this is the object being searched for. */
if (flags & OBJ_POINTER)
cb_fn = match_by_addr;
else
#endif
if (cb_fn == NULL) /* if NULL, match everything */
cb_fn = cb_true;
/*
* XXX this can be optimized.
* If we have a hash function and lookup by pointer,
* run the hash function. Otherwise, scan the whole container
* (this only for the time being. We need to optimize this.)
*/
if ((flags & OBJ_POINTER)) /* we know hash can handle this case */
i = c->hash_fn(arg, flags & OBJ_POINTER) % c->n_buckets;
else /* don't know, let's scan all buckets */
i = -1; /* XXX this must be fixed later. */
/* determine the search boundaries: i..last-1 */
if (i < 0) {
i = 0;
last = c->n_buckets;
} else {
last = i + 1;
}
ao2_lock(c); /* avoid modifications to the content */
for (; i < last ; i++) {
/* scan the list with prev-cur pointers */
struct bucket_list *cur;
AST_LIST_TRAVERSE_SAFE_BEGIN(&c->buckets[i], cur, entry) {
int match = cb_fn(EXTERNAL_OBJ(cur->astobj), arg, flags) & (CMP_MATCH | CMP_STOP);
/* we found the object, performing operations according flags */
if (match == 0) { /* no match, no stop, continue */
continue;
} else if (match == CMP_STOP) { /* no match but stop, we are done */
i = last;
break;
}
/* we have a match (CMP_MATCH) here */
if (!(flags & OBJ_NODATA)) { /* if must return the object, record the value */
/* it is important to handle this case before the unlink */
ret = EXTERNAL_OBJ(cur->astobj);
ao2_ref(ret, 1);
}
if (flags & OBJ_UNLINK) { /* must unlink */
struct bucket_list *x = cur;
/* we are going to modify the container, so update version */
ast_atomic_fetchadd_int(&c->version, 1);
AST_LIST_REMOVE_CURRENT(&c->buckets[i], entry);
/* update number of elements and version */
ast_atomic_fetchadd_int(&c->elements, -1);
ao2_ref(EXTERNAL_OBJ(x->astobj), -1);
free(x); /* free the link record */
}
if ((match & CMP_STOP) || (flags & OBJ_MULTIPLE) == 0) {
/* We found the only match we need */
i = last; /* force exit from outer loop */
break;
}
if (!(flags & OBJ_NODATA)) {
#if 0 /* XXX to be completed */
/*
* This is the multiple-return case. We need to link
* the object in a list. The refcount is already increased.
*/
#endif
}
}
AST_LIST_TRAVERSE_SAFE_END
}
ao2_unlock(c);
return ret;
}
/*!
* the find function just invokes the default callback with some reasonable flags.
*/
void *ao2_find(struct ao2_container *c, void *arg, enum search_flags flags)
{
return ao2_callback(c, flags, c->cmp_fn, arg);
}
/*!
* initialize an iterator so we start from the first object
*/
struct ao2_iterator ao2_iterator_init(struct ao2_container *c, int flags)
{
struct ao2_iterator a = {
.c = c,
.flags = flags
};
return a;
}
/*
* move to the next element in the container.
*/
void * ao2_iterator_next(struct ao2_iterator *a)
{
int lim;
struct bucket_list *p = NULL;
void *ret = NULL;
if (INTERNAL_OBJ(a->c) == NULL)
return NULL;
if (!(a->flags & F_AO2I_DONTLOCK))
ao2_lock(a->c);
/* optimization. If the container is unchanged and
* we have a pointer, try follow it
*/
if (a->c->version == a->c_version && (p = a->obj) ) {
if ( (p = AST_LIST_NEXT(p, entry)) )
goto found;
/* nope, start from the next bucket */
a->bucket++;
a->version = 0;
a->obj = NULL;
}
lim = a->c->n_buckets;
/* Browse the buckets array, moving to the next
* buckets if we don't find the entry in the current one.
* Stop when we find an element with version number greater
* than the current one (we reset the version to 0 when we
* switch buckets).
*/
for (; a->bucket < lim; a->bucket++, a->version = 0) {
/* scan the current bucket */
AST_LIST_TRAVERSE(&a->c->buckets[a->bucket], p, entry) {
if (p->version > a->version)
goto found;
}
}
found:
if (p) {
a->version = p->version;
a->obj = p;
a->c_version = a->c->version;
ret = EXTERNAL_OBJ(p->astobj);
/* inc refcount of returned object */
ao2_ref(ret, 1);
}
if (!(a->flags & F_AO2I_DONTLOCK))
ao2_unlock(a->c);
return ret;
}
/* callback for destroying container.
* we can make it simple as we know what it does
*/
static int cd_cb(void *obj, void *arg, int flag)
{
ao2_ref(obj, -1);
return 0;
}
static void container_destruct(void *_c)
{
struct ao2_container *c = _c;
ao2_callback(c, OBJ_UNLINK, cd_cb, NULL);
#ifdef AO2_DEBUG
ast_atomic_fetchadd_int(&ao2.total_containers, -1);
#endif
}
#ifdef AO2_DEBUG
static int print_cb(void *obj, void *arg, int flag)
{
int *fd = arg;
char *s = (char *)obj;
ast_cli(*fd, "string <%s>\n", s);
return 0;
}
/*
* Print stats
*/
static int handle_astobj2_stats(int fd, int argc, char *argv[])
{
ast_cli(fd, "Objects : %d\n", ao2.total_objects);
ast_cli(fd, "Containers : %d\n", ao2.total_containers);
ast_cli(fd, "Memory : %d\n", ao2.total_mem);
ast_cli(fd, "Locked : %d\n", ao2.total_locked);
ast_cli(fd, "Refs : %d\n", ao2.total_refs);
return 0;
}
/*
* This is testing code for astobj
*/
static int handle_astobj2_test(int fd, int argc, char *argv[])
{
struct ao2_container *c1;
int i, lim;
char *obj;
static int prof_id = -1;
if (prof_id == -1)
prof_id = ast_add_profile("ao2_alloc", 0);
ast_cli(fd, "argc %d argv %s %s %s\n", argc, argv[0], argv[1], argv[2]);
lim = atoi(argv[2]);
ast_cli(fd, "called astobj_test\n");
handle_astobj2_stats(fd, 0, NULL);
/*
* allocate a container with no default callback, and no hash function.
* No hash means everything goes in the same bucket.
*/
c1 = ao2_container_alloc(100, NULL /* no callback */, NULL /* no hash */);
ast_cli(fd, "container allocated as %p\n", c1);
/*
* fill the container with objects.
* ao2_alloc() gives us a reference which we pass to the
* container when we do the insert.
*/
for (i = 0; i < lim; i++) {
ast_mark(prof_id, 1 /* start */);
obj = ao2_alloc(80, NULL);
ast_mark(prof_id, 0 /* stop */);
ast_cli(fd, "object %d allocated as %p\n", i, obj);
sprintf(obj, "-- this is obj %d --", i);
ao2_link(c1, obj);
}
ast_cli(fd, "testing callbacks\n");
ao2_callback(c1, 0, print_cb, &fd);
ast_cli(fd, "testing iterators, remove every second object\n");
{
struct ao2_iterator ai;
int x = 0;
ai = ao2_iterator_init(c1, 0);
while ( (obj = ao2_iterator_next(&ai)) ) {
ast_cli(fd, "iterator on <%s>\n", obj);
if (x++ & 1)
ao2_unlink(c1, obj);
ao2_ref(obj, -1);
}
ast_cli(fd, "testing iterators again\n");
ai = ao2_iterator_init(c1, 0);
while ( (obj = ao2_iterator_next(&ai)) ) {
ast_cli(fd, "iterator on <%s>\n", obj);
ao2_ref(obj, -1);
}
}
ast_cli(fd, "testing callbacks again\n");
ao2_callback(c1, 0, print_cb, &fd);
ast_verbose("now you should see an error message:\n");
ao2_ref(&i, -1); /* i is not a valid object so we print an error here */
ast_cli(fd, "destroy container\n");
ao2_ref(c1, -1); /* destroy container */
handle_astobj2_stats(fd, 0, NULL);
return 0;
}
static struct ast_cli_entry cli_astobj2[] = {
{ { "astobj2", "stats", NULL },
handle_astobj2_stats, "Print astobj2 statistics", },
{ { "astobj2", "test", NULL } , handle_astobj2_test, "Test astobj2", },
};
#endif /* AO2_DEBUG */
int astobj2_init(void)
{
#ifdef AO2_DEBUG
ast_cli_register_multiple(cli_astobj2, ARRAY_LEN(cli_astobj2));
#endif
return 0;
}

View File

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

File diff suppressed because it is too large Load Diff

View File

@@ -78,6 +78,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/utils.h"
#include "asterisk/file.h"
#include "asterisk/astobj.h"
#include "asterisk/dnsmgr.h"
#include "asterisk/devicestate.h"
#include "asterisk/linkedlists.h"
@@ -85,6 +86,10 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/astosp.h"
#endif
#ifdef SIP_MIDCOM
#include "asterisk/res_netsec.h"
#endif
#ifndef DEFAULT_USERAGENT
#define DEFAULT_USERAGENT "Asterisk PBX"
#endif
@@ -689,6 +694,10 @@ static struct sip_pvt {
struct ast_dsp *vad; /*!< Voice Activation Detection dsp */
#ifdef SIP_MIDCOM
void *r;
#endif
struct sip_peer *peerpoke; /*!< If this calls is to poke a peer, which one */
struct sip_registry *registry; /*!< If this is a REGISTER call, to which registry */
struct ast_rtp *rtp; /*!< RTP Session */
@@ -787,6 +796,7 @@ struct sip_peer {
int rtpkeepalive; /*!< Send RTP packets for keepalive */
ast_group_t callgroup; /*!< Call group */
ast_group_t pickupgroup; /*!< Pickup group */
struct ast_dnsmgr_entry *dnsmgr;/*!< DNS refresh manager for peer */
struct sockaddr_in addr; /*!< IP address of peer */
/* Qualification */
@@ -931,6 +941,25 @@ static const struct cfsubscription_types *find_subscription_type(enum subscripti
static int transmit_state_notify(struct sip_pvt *p, int state, int full, int substate, int timeout);
static char *gettag(struct sip_request *req, char *header, char *tagbuf, int tagbufsize);
#ifdef SIP_MIDCOM
static void sip_rtp_get_peer_audio_helper(void *p, struct sockaddr_in *them);
static void sip_rtp_get_peer_video_helper(void *p, struct sockaddr_in *them);
static void sip_rtp_get_us_audio_helper(void *p, struct sockaddr_in *sin);
static void sip_rtp_get_us_video_helper(void *p, struct sockaddr_in *vsin);
static void sip_map_hook_struct(void *p, void *r);
static void *sip_get_hook_struct(void *p);
static int sip_get_flag_novideo(void *p);
static int sip_cmp_sa_addr(void *p, struct sockaddr_in *addr);
static void sip_get_recv_addr(void *p, struct in_addr *addr);
static char *sip_get_username(void *p);
static struct ast_channel *sip_channel_helper(void *p);
static struct ast_channel *sip_bridged_channel_helper(void *p);
static int sip_get_capability_helper(void *p);
static void sip_softhangup_helper(void *p);
extern struct ast_sip_hook_cb *m_cb;
#endif
/*! \brief Definition of this channel for PBX channel registration */
static const struct ast_channel_tech sip_tech = {
.type = channeltype,
@@ -1669,6 +1698,8 @@ static void sip_destroy_peer(struct sip_peer *peer)
speerobjs--;
clear_realm_authentication(peer->auth);
peer->auth = (struct sip_auth *) NULL;
if (peer->dnsmgr)
ast_dnsmgr_release(peer->dnsmgr);
free(peer);
}
@@ -1688,47 +1719,22 @@ static void update_peer(struct sip_peer *p, int expiry)
static struct sip_peer *realtime_peer(const char *peername, struct sockaddr_in *sin)
{
struct sip_peer *peer=NULL;
struct ast_variable *var = NULL;
struct ast_variable *var;
struct ast_variable *tmp;
char *newpeername = (char *) peername;
char iabuf[80];
/* First check on peer name */
if (newpeername) {
var = ast_load_realtime("sippeers", "name", newpeername, "host", "dynamic", NULL);
if (!var && sin)
var = ast_load_realtime("sippeers", "name", newpeername, "host", ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr), NULL);
if (!var) {
var = ast_load_realtime("sippeers", "name", newpeername, NULL);
/*!\note
* If this one loaded something, then we need to ensure that the host
* field matched. The only reason why we can't have this as a criteria
* is because we only have the IP address and the host field might be
* set as a name (and the reverse PTR might not match).
*/
if (var) {
for (tmp = var; tmp; tmp = tmp->next) {
if (!strcasecmp(var->name, "host")) {
struct hostent *hp;
struct ast_hostent ahp;
if (!(hp = ast_gethostbyname(tmp->value, &ahp)) || (memcmp(&hp->h_addr, &sin->sin_addr, sizeof(hp->h_addr)))) {
/* No match */
ast_variables_destroy(var);
var = NULL;
}
break;
}
}
}
}
}
if (!var && sin) { /* Then check on IP address */
if (newpeername)
var = ast_load_realtime("sippeers", "name", peername, NULL);
else if (sin) { /* Then check on IP address */
ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr);
var = ast_load_realtime("sippeers", "host", iabuf, NULL); /* First check for fixed IP hosts */
if (!var)
var = ast_load_realtime("sippeers", "ipaddr", iabuf, NULL); /* Then check for registred hosts */
}
} else
return NULL;
if (!var)
return NULL;
@@ -2148,6 +2154,11 @@ static void __sip_destroy(struct sip_pvt *p, int lockowner)
if (sip_debug_test_pvt(p))
ast_verbose("Destroying call '%s'\n", p->callid);
#ifdef SIP_MIDCOM
if (m_cb)
m_cb->__sip_destroy_hook(p);
#endif
if (ast_test_flag(p, SIP_INC_COUNT)) {
update_call_counter(p, DEC_CALL_LIMIT);
if (option_debug)
@@ -2480,6 +2491,12 @@ static int sip_hangup(struct ast_channel *ast)
if (ast->_state != AST_STATE_UP)
needcancel = 1;
#ifdef SIP_MIDCOM
/* For callee to shutdown, send "BYE" instead of "CANCEL"
-- this needs to be verified */
if (m_cb && ast_test_flag(p, SIP_OUTGOING)) needcancel = 0;
#endif
/* Disconnect */
if (p->vad) {
ast_dsp_free(p->vad);
@@ -4594,8 +4611,22 @@ static int add_sdp(struct sip_request *resp, struct sip_pvt *p)
ast_rtp_get_us(p->vrtp, &vsin);
if (p->redirip.sin_addr.s_addr) {
#ifdef SIP_MIDCOM
if (m_cb && p->r) {
struct sockaddr_in redirip_hook;
char iabuf2[INET_ADDRSTRLEN];
m_cb->ast_get_redirip_audio_hook(p->r, &redirip_hook);
ast_log(LOG_DEBUG, "Replacing %s:%d by %s:%d in SDP before sending to %s\n", ast_inet_ntoa(iabuf, sizeof(iabuf), p->redirip.sin_addr), ntohs(p->redirip.sin_port), ast_inet_ntoa(iabuf2, sizeof(iabuf2), redirip_hook.sin_addr), ntohs(redirip_hook.sin_port), p->username);
dest.sin_port = redirip_hook.sin_port;
dest.sin_addr = redirip_hook.sin_addr;
} else {
dest.sin_port = p->redirip.sin_port;
dest.sin_addr = p->redirip.sin_addr;
}
#else
dest.sin_port = p->redirip.sin_port;
dest.sin_addr = p->redirip.sin_addr;
#endif
if (p->redircodecs)
capability = p->redircodecs;
} else {
@@ -4606,8 +4637,22 @@ static int add_sdp(struct sip_request *resp, struct sip_pvt *p)
/* Determine video destination */
if (p->vrtp) {
if (p->vredirip.sin_addr.s_addr) {
#ifdef SIP_MIDCOM
if (m_cb && p->r) {
struct sockaddr_in vredirip_hook;
char iabuf2[INET_ADDRSTRLEN];
m_cb->ast_get_vredirip_video_hook(p->r, &vredirip_hook);
ast_log(LOG_DEBUG, "Replacing %s:%d by %s:%d in video SDP before sending to %s\n", ast_inet_ntoa(iabuf, sizeof(iabuf), p->vredirip.sin_addr), ntohs(p->vredirip.sin_port), ast_inet_ntoa(iabuf2, sizeof(iabuf2), vredirip_hook.sin_addr), ntohs(vredirip_hook.sin_port), p->username);
vdest.sin_port = vredirip_hook.sin_port;
vdest.sin_addr = vredirip_hook.sin_addr;
} else {
vdest.sin_port = p->vredirip.sin_port;
vdest.sin_addr = p->vredirip.sin_addr;
}
#else
vdest.sin_port = p->vredirip.sin_port;
vdest.sin_addr = p->vredirip.sin_addr;
#endif
} else {
vdest.sin_addr = p->ourip;
vdest.sin_port = vsin.sin_port;
@@ -4767,6 +4812,14 @@ static int transmit_response_with_sdp(struct sip_pvt *p, char *msg, struct sip_r
} else {
ast_log(LOG_ERROR, "Can't add SDP to response, since we have no RTP session allocated. Call-ID %s\n", p->callid);
}
#ifdef SIP_MIDCOM
if (m_cb) {
if (!m_cb->transmit_response_with_sdp_hook(p)) {
ast_log(LOG_NOTICE, "Failed transmit_response_with_sdp_hook()\n");
return -1;
}
}
#endif
return send_response(p, &resp, retrans, seqno);
}
@@ -4828,6 +4881,19 @@ static int determine_firstline_parts( struct sip_request *req )
static int transmit_reinvite_with_sdp(struct sip_pvt *p)
{
struct sip_request req;
#ifdef SIP_MIDCOM
if (m_cb) {
if (!m_cb->transmit_reinvite_with_sdp_hook(p)) {
ast_log(LOG_NOTICE, "Failed transmit_reinvite_with_sdp_hook()\n");
if (p->owner)
ast_queue_hangup(p->owner);
else
ast_set_flag(p, SIP_NEEDDESTROY);
}
}
#endif
if (ast_test_flag(p, SIP_REINVITE_UPDATE))
reqprep(&req, p, SIP_UPDATE, 0, 1);
else
@@ -6611,81 +6677,10 @@ static int cb_extensionstate(char *context, char* exten, int state, void *data)
/*! \brief Send a fake 401 Unauthorized response when the administrator
wants to hide the names of local users/peers from fishers
*/
static void transmit_fake_auth_response(struct sip_pvt *p, int sipmethod, struct sip_request *req, char *randdata, int randlen, int reliable, int ignore)
static void transmit_fake_auth_response(struct sip_pvt *p, struct sip_request *req, char *randdata, int randlen, int reliable)
{
/* We have to emulate EXACTLY what we'd get with a good peer
* and a bad password, or else we leak information. */
char *response = "407 Proxy Authentication Required";
char *reqheader = "Proxy-Authorization";
char *respheader = "Proxy-Authenticate";
const char *authtoken;
if (sipmethod == SIP_REGISTER || sipmethod == SIP_SUBSCRIBE) {
response = "401 Unauthorized";
reqheader = "Authorization";
respheader = "WWW-Authenticate";
}
authtoken = get_header(req, reqheader);
if (ignore && !ast_strlen_zero(p->randdata) && ast_strlen_zero(authtoken)) {
/* This is a retransmitted invite/register/etc, don't reconstruct authentication
* information */
if (!reliable) {
/* Resend message if this was NOT a reliable delivery. Otherwise the
retransmission should get it */
transmit_response_with_auth(p, response, req, randdata, reliable, respheader, 0);
/* Schedule auto destroy in 15 seconds */
sip_scheddestroy(p, 15000);
}
} else if (ast_strlen_zero(p->randdata) || ast_strlen_zero(authtoken)) {
/* We have no auth, so issue challenge and request authentication */
snprintf(p->randdata, sizeof(p->randdata), "%08x", thread_safe_rand());
transmit_response_with_auth(p, response, req, p->randdata, 0, respheader, 0);
sip_scheddestroy(p, 15000);
} else {
char tmp[256], *c = tmp, *z, *nonce = "";
/* Find their response among the mess that we'r sent for comparison */
ast_copy_string(tmp, authtoken, sizeof(tmp));
while (c) {
c = ast_skip_blanks(c);
if (!*c) {
break;
}
if (!strncasecmp(c, "nonce=", strlen("nonce="))) {
c += strlen("nonce=");
if ((*c == '\"')) {
nonce = ++c;
if ((c = strchr(c,'\"'))) {
*c = '\0';
}
} else {
nonce = c;
if ((c = strchr(c,','))) {
*c = '\0';
}
}
/* Don't need anything beyond the nonce sent. */
break;
} else if ((z = strchr(c, ' ')) || (z = strchr(c, ','))) {
c = z;
}
if (c) {
c++;
}
}
/* Verify nonce from request matches our nonce. If not, send 401 with new nonce */
if (strncasecmp(randdata, nonce, randlen)) {
snprintf(randdata, randlen, "%08x", thread_safe_rand());
transmit_response_with_auth(p, response, req, randdata, reliable, respheader, 0);
/* Schedule auto destroy in 15 seconds */
sip_scheddestroy(p, 15000);
} else {
transmit_response(p, "403 Forbidden (Bad auth)", &p->initreq);
}
}
snprintf(randdata, randlen, "%08x", thread_safe_rand());
transmit_response_with_auth(p, "401 Unauthorized", req, randdata, reliable, "WWW-Authenticate", 0);
}
/*! \brief register_verify: Verify registration of user */
@@ -6807,14 +6802,6 @@ static int register_verify(struct sip_pvt *p, struct sockaddr_in *sin, struct si
}
}
}
if (!peer && global_alwaysauthreject) {
/* If we found a peer, we transmit a 100 Trying. Therefore, if we're
* trying to avoid leaking information, we MUST also transmit the same
* response when we DON'T find a peer. */
transmit_response(p, "100 Trying", req);
/* Insert a fake delay between the 100 and the subsequent failure. */
sched_yield();
}
if (!res) {
ast_device_state_changed("SIP/%s", peer->name);
}
@@ -6835,7 +6822,7 @@ static int register_verify(struct sip_pvt *p, struct sockaddr_in *sin, struct si
case -4: /* ACL error */
case -5: /* Peer is not supposed to register with us at all */
if (global_alwaysauthreject) {
transmit_fake_auth_response(p, SIP_REGISTER, &p->initreq, p->randdata, sizeof(p->randdata), 1, ignore);
transmit_fake_auth_response(p, &p->initreq, p->randdata, sizeof(p->randdata), 1);
} else {
/* URI not found */
if (res == -5)
@@ -6910,14 +6897,12 @@ static int get_destination(struct sip_pvt *p, struct sip_request *oreq)
return -1;
}
from += 4;
if (pedanticsipchecking) {
ast_uri_decode(from);
}
} else
from = NULL;
if (pedanticsipchecking) {
ast_uri_decode(uri);
ast_uri_decode(from);
}
/* Get the target domain first and user */
@@ -7342,10 +7327,11 @@ static int check_user_full(struct sip_pvt *p, struct sip_request *req, int sipme
while(*t && (*t > 32) && (*t != ';'))
t++;
*t = '\0';
ast_copy_string(from, get_header(req, "From"), sizeof(from));
of = get_header(req, "From");
if (pedanticsipchecking)
ast_uri_decode(from);
ast_uri_decode(of);
ast_copy_string(from, of, sizeof(from));
memset(calleridname,0,sizeof(calleridname));
get_calleridname(from, calleridname, sizeof(calleridname));
@@ -7383,6 +7369,8 @@ static int check_user_full(struct sip_pvt *p, struct sip_request *req, int sipme
ast_copy_string(p->cid_num, of, sizeof(p->cid_num));
ast_shrink_phone_number(p->cid_num);
}
if (ast_strlen_zero(of))
return 0;
if (!mailbox) /* If it's a mailbox SUBSCRIBE, don't check users */
user = find_user(of, 1);
@@ -9908,6 +9896,16 @@ static void handle_response_invite(struct sip_pvt *p, int resp, char *rest, stru
p->authtries = 0;
if (find_sdp(req)) {
process_sdp(p, req);
#ifdef SIP_MIDCOM
if (m_cb) {
if (!m_cb->handle_response_invite_hook(p)) {
if (p->owner)
ast_queue_hangup(p->owner);
else
ast_set_flag(p, SIP_NEEDDESTROY);
}
}
#endif
}
/* Parse contact header for continued conversation */
@@ -10778,7 +10776,7 @@ static int handle_request_invite(struct sip_pvt *p, struct sip_request *req, int
if (res < 0) {
if (res == -4) {
ast_log(LOG_NOTICE, "Sending fake auth rejection for user %s\n", get_header(req, "From"));
transmit_fake_auth_response(p, SIP_INVITE, req, p->randdata, sizeof(p->randdata), 1, ignore);
transmit_fake_auth_response(p, req, p->randdata, sizeof(p->randdata), 1);
} else {
ast_log(LOG_NOTICE, "Failed to authenticate user %s\n", get_header(req, "From"));
transmit_response_reliable(p, "403 Forbidden", req, 1);
@@ -10794,6 +10792,19 @@ static int handle_request_invite(struct sip_pvt *p, struct sip_request *req, int
ast_set_flag(p, SIP_NEEDDESTROY);
return -1;
}
#ifdef SIP_MIDCOM
if (m_cb) {
if (!m_cb->handle_request_invite_hook((void *)p)) {
ast_log(LOG_NOTICE, "Failed to NAT for (%s)\n", get_header(req, "From"));
if (ignore)
transmit_response(p, "403 Forbidden", req);
else
transmit_response_reliable(p, "403 Forbidden", req, 1);
ast_set_flag(p, SIP_NEEDDESTROY);
return 0;
}
}
#endif
} else {
p->jointcapability = p->capability;
ast_log(LOG_DEBUG, "Hm.... No sdp for the moment\n");
@@ -11184,7 +11195,7 @@ static int handle_request_subscribe(struct sip_pvt *p, struct sip_request *req,
if (res < 0) {
if (res == -4) {
ast_log(LOG_NOTICE, "Sending fake auth rejection for user %s\n", get_header(req, "From"));
transmit_fake_auth_response(p, SIP_SUBSCRIBE, req, p->randdata, sizeof(p->randdata), 1, ignore);
transmit_fake_auth_response(p, req, p->randdata, sizeof(p->randdata), 1);
} else {
ast_log(LOG_NOTICE, "Failed to authenticate user %s for SUBSCRIBE\n", get_header(req, "From"));
if (ignore)
@@ -13247,8 +13258,13 @@ static struct ast_rtp *sip_get_rtp_peer(struct ast_channel *chan)
if (!p)
return NULL;
ast_mutex_lock(&p->lock);
if (p->rtp && ast_test_flag(p, SIP_CAN_REINVITE))
if (p->rtp && ast_test_flag(p, SIP_CAN_REINVITE)) {
rtp = p->rtp;
#ifdef SIP_MIDCOM
if (m_cb)
m_cb->ast_rtp_nat_us_audio_hook(rtp, p->r); /* change the ip port in rtp */
#endif
}
ast_mutex_unlock(&p->lock);
return rtp;
}
@@ -13263,8 +13279,13 @@ static struct ast_rtp *sip_get_vrtp_peer(struct ast_channel *chan)
return NULL;
ast_mutex_lock(&p->lock);
if (p->vrtp && ast_test_flag(p, SIP_CAN_REINVITE))
if (p->vrtp && ast_test_flag(p, SIP_CAN_REINVITE)) {
rtp = p->vrtp;
#ifdef SIP_MIDCOM
if (m_cb)
m_cb->ast_rtp_nat_us_video_hook(rtp, p->r); /* change the ip port in rtp */
#endif
}
ast_mutex_unlock(&p->lock);
return rtp;
}
@@ -13281,12 +13302,20 @@ static int sip_set_rtp_peer(struct ast_channel *chan, struct ast_rtp *rtp, struc
ast_mutex_lock(&p->lock);
if (rtp) {
changed |= ast_rtp_get_peer(rtp, &p->redirip);
#ifdef SIP_MIDCOM
if (m_cb)
m_cb->ast_rtp_get_their_nat_audio_hook(rtp, p->r);
#endif
} else if (p->redirip.sin_addr.s_addr || ntohs(p->redirip.sin_port) != 0) {
memset(&p->redirip, 0, sizeof(p->redirip));
changed = 1;
}
if (vrtp) {
changed |= ast_rtp_get_peer(vrtp, &p->vredirip);
#ifdef SIP_MIDCOM
if (m_cb)
m_cb->ast_rtp_get_their_nat_video_hook(vrtp, p->r);
#endif
} else if (p->vredirip.sin_addr.s_addr || ntohs(p->vredirip.sin_port) != 0) {
memset(&p->vredirip, 0, sizeof(p->vredirip));
changed = 1;
@@ -13576,6 +13605,26 @@ static struct ast_rtp_protocol sip_rtp = {
get_codec: sip_get_codec,
};
#ifdef SIP_MIDCOM
/*! \brief sip_helper: Interface structure with callbacks used to connect to midcom module --*/
static struct ast_sip_helper_cb sip_helper = {
ast_rtp_get_peer_audio_helper: sip_rtp_get_peer_audio_helper,
ast_rtp_get_peer_video_helper: sip_rtp_get_peer_video_helper,
ast_rtp_get_us_audio_helper: sip_rtp_get_us_audio_helper,
ast_rtp_get_us_video_helper: sip_rtp_get_us_video_helper,
ast_map_hook_struct: sip_map_hook_struct,
ast_get_hook_struct: sip_get_hook_struct,
ast_get_flag_novideo: sip_get_flag_novideo,
ast_cmp_sa_addr: sip_cmp_sa_addr,
ast_get_recv_addr: sip_get_recv_addr,
ast_get_username: sip_get_username,
ast_channel_helper: sip_channel_helper,
ast_bridged_channel_helper: sip_bridged_channel_helper,
ast_get_capability_helper: sip_get_capability_helper,
ast_softhangup_helper: sip_softhangup_helper,
};
#endif
/*! \brief sip_poke_all_peers: Send a poke to all known peers */
static void sip_poke_all_peers(void)
{
@@ -13726,6 +13775,12 @@ int load_module()
/* Tell the RTP subdriver that we're here */
ast_rtp_proto_register(&sip_rtp);
#ifdef SIP_MIDCOM
/* Register the sip helper functions */
if (m_cb)
m_cb->ast_sip_helper_register(&sip_helper);
#endif
/* Register dialplan applications */
ast_register_application(app_dtmfmode, sip_dtmfmode, synopsis_dtmfmode, descrip_dtmfmode);
@@ -13774,6 +13829,12 @@ int unload_module()
ast_rtp_proto_unregister(&sip_rtp);
#ifdef SIP_MIDCOM
/* Unregister the sip helper functions */
if (m_cb)
m_cb->ast_sip_helper_unregister();
#endif
ast_manager_unregister("SIPpeers");
ast_manager_unregister("SIPshowpeer");
@@ -13852,4 +13913,78 @@ char *description()
return (char *) desc;
}
#ifdef SIP_MIDCOM
static void sip_rtp_get_peer_audio_helper(void *p, struct sockaddr_in *them)
{
ast_rtp_get_peer(((struct sip_pvt*)p)->rtp, them);
}
static void sip_rtp_get_peer_video_helper(void *p, struct sockaddr_in *them)
{
ast_rtp_get_peer(((struct sip_pvt*)p)->vrtp, them);
}
static void sip_rtp_get_us_audio_helper(void *p, struct sockaddr_in *sin)
{
ast_rtp_get_us(((struct sip_pvt*)p)->rtp, sin);
sin->sin_addr = ((struct sip_pvt*)p)->ourip;
}
static void sip_rtp_get_us_video_helper(void *p, struct sockaddr_in *vsin)
{
ast_rtp_get_us(((struct sip_pvt*)p)->vrtp, vsin);
vsin->sin_addr = ((struct sip_pvt*)p)->ourip;
}
static void sip_map_hook_struct(void *p, void *r)
{
((struct sip_pvt*)p)->r = r;
}
static void *sip_get_hook_struct(void *p)
{
return ((struct sip_pvt*)p)->r;
}
static int sip_get_flag_novideo(void *p)
{
return ast_test_flag((struct sip_pvt*)p, SIP_NOVIDEO);
}
static int sip_cmp_sa_addr(void *p, struct sockaddr_in *addr)
{
return (((struct sip_pvt*)p)->sa.sin_addr.s_addr == addr->sin_addr.s_addr);
}
static void sip_get_recv_addr(void *p, struct in_addr *addr)
{
memcpy(addr, &((struct sip_pvt *)p)->recv.sin_addr, sizeof(struct in_addr));
}
static char *sip_get_username(void *p)
{
return ((struct sip_pvt*)p)->username;
}
static struct ast_channel *sip_channel_helper(void *p)
{
return ((struct sip_pvt*)p)->owner;
}
static struct ast_channel *sip_bridged_channel_helper(void *p)
{
return ast_bridged_channel(((struct sip_pvt*)p)->owner);
}
static int sip_get_capability_helper(void *p)
{
return ((struct sip_pvt*)p)->jointcapability;
}
static void sip_softhangup_helper(void *p)
{
if (p && ((struct sip_pvt *)p)->owner)
ast_softhangup(((struct sip_pvt *)p)->owner, AST_SOFTHANGUP_APPUNLOAD);
}
#endif

110
codecs/ilbc/FrameClassify.c Normal file
View File

@@ -0,0 +1,110 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
FrameClassify.c
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#include "iLBC_define.h"
#include "FrameClassify.h"
/*---------------------------------------------------------------*
* Classification of subframes to localize start state
*--------------------------------------------------------------*/
int FrameClassify( /* index to the max-energy sub-frame */
iLBC_Enc_Inst_t *iLBCenc_inst,
/* (i/o) the encoder state structure */
float *residual /* (i) lpc residual signal */
) {
float max_ssqEn, fssqEn[NSUB_MAX], bssqEn[NSUB_MAX], *pp;
int n, l, max_ssqEn_n;
const float ssqEn_win[NSUB_MAX-1]={(float)0.8,(float)0.9,
(float)1.0,(float)0.9,(float)0.8};
const float sampEn_win[5]={(float)1.0/(float)6.0,
(float)2.0/(float)6.0, (float)3.0/(float)6.0,
(float)4.0/(float)6.0, (float)5.0/(float)6.0};
/* init the front and back energies to zero */
memset(fssqEn, 0, NSUB_MAX*sizeof(float));
memset(bssqEn, 0, NSUB_MAX*sizeof(float));
/* Calculate front of first seqence */
n=0;
pp=residual;
for (l=0; l<5; l++) {
fssqEn[n] += sampEn_win[l] * (*pp) * (*pp);
pp++;
}
for (l=5; l<SUBL; l++) {
fssqEn[n] += (*pp) * (*pp);
pp++;
}
/* Calculate front and back of all middle sequences */
for (n=1; n<iLBCenc_inst->nsub-1; n++) {
pp=residual+n*SUBL;
for (l=0; l<5; l++) {
fssqEn[n] += sampEn_win[l] * (*pp) * (*pp);
bssqEn[n] += (*pp) * (*pp);
pp++;
}
for (l=5; l<SUBL-5; l++) {
fssqEn[n] += (*pp) * (*pp);
bssqEn[n] += (*pp) * (*pp);
pp++;
}
for (l=SUBL-5; l<SUBL; l++) {
fssqEn[n] += (*pp) * (*pp);
bssqEn[n] += sampEn_win[SUBL-l-1] * (*pp) * (*pp);
pp++;
}
}
/* Calculate back of last seqence */
n=iLBCenc_inst->nsub-1;
pp=residual+n*SUBL;
for (l=0; l<SUBL-5; l++) {
bssqEn[n] += (*pp) * (*pp);
pp++;
}
for (l=SUBL-5; l<SUBL; l++) {
bssqEn[n] += sampEn_win[SUBL-l-1] * (*pp) * (*pp);
pp++;
}
/* find the index to the weighted 80 sample with
most energy */
if (iLBCenc_inst->mode==20) l=1;
else l=0;
max_ssqEn=(fssqEn[0]+bssqEn[1])*ssqEn_win[l];
max_ssqEn_n=1;
for (n=2; n<iLBCenc_inst->nsub; n++) {
l++;
if ((fssqEn[n-1]+bssqEn[n])*ssqEn_win[l] > max_ssqEn) {
max_ssqEn=(fssqEn[n-1]+bssqEn[n]) *
ssqEn_win[l];
max_ssqEn_n=n;
}
}
return max_ssqEn_n;
}

View File

@@ -0,0 +1,26 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
FrameClassify.h
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#ifndef __iLBC_FRAMECLASSIFY_H
#define __iLBC_FRAMECLASSIFY_H
int FrameClassify( /* index to the max-energy sub-frame */
iLBC_Enc_Inst_t *iLBCenc_inst,
/* (i/o) the encoder state structure */
float *residual /* (i) lpc residual signal */
);
#endif

152
codecs/ilbc/LPCdecode.c Normal file
View File

@@ -0,0 +1,152 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
LPC_decode.c
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#include <math.h>
#include <string.h>
#include "helpfun.h"
#include "lsf.h"
#include "iLBC_define.h"
#include "LPCdecode.h"
#include "constants.h"
/*---------------------------------------------------------------*
* interpolation of lsf coefficients for the decoder
*--------------------------------------------------------------*/
void LSFinterpolate2a_dec(
float *a, /* (o) lpc coefficients for a sub-frame */
float *lsf1, /* (i) first lsf coefficient vector */
float *lsf2, /* (i) second lsf coefficient vector */
float coef, /* (i) interpolation weight */
int length /* (i) length of lsf vectors */
){
float lsftmp[LPC_FILTERORDER];
interpolate(lsftmp, lsf1, lsf2, coef, length);
lsf2a(a, lsftmp);
}
/*---------------------------------------------------------------*
* obtain dequantized lsf coefficients from quantization index
*--------------------------------------------------------------*/
void SimplelsfDEQ(
float *lsfdeq, /* (o) dequantized lsf coefficients */
int *index, /* (i) quantization index */
int lpc_n /* (i) number of LPCs */
){
int i, j, pos, cb_pos;
/* decode first LSF */
pos = 0;
cb_pos = 0;
for (i = 0; i < LSF_NSPLIT; i++) {
for (j = 0; j < dim_lsfCbTbl[i]; j++) {
lsfdeq[pos + j] = lsfCbTbl[cb_pos +
(long)(index[i])*dim_lsfCbTbl[i] + j];
}
pos += dim_lsfCbTbl[i];
cb_pos += size_lsfCbTbl[i]*dim_lsfCbTbl[i];
}
if (lpc_n>1) {
/* decode last LSF */
pos = 0;
cb_pos = 0;
for (i = 0; i < LSF_NSPLIT; i++) {
for (j = 0; j < dim_lsfCbTbl[i]; j++) {
lsfdeq[LPC_FILTERORDER + pos + j] =
lsfCbTbl[cb_pos +
(long)(index[LSF_NSPLIT + i])*
dim_lsfCbTbl[i] + j];
}
pos += dim_lsfCbTbl[i];
cb_pos += size_lsfCbTbl[i]*dim_lsfCbTbl[i];
}
}
}
/*----------------------------------------------------------------*
* obtain synthesis and weighting filters form lsf coefficients
*---------------------------------------------------------------*/
void DecoderInterpolateLSF(
float *syntdenum, /* (o) synthesis filter coefficients */
float *weightdenum, /* (o) weighting denumerator
coefficients */
float *lsfdeq, /* (i) dequantized lsf coefficients */
int length, /* (i) length of lsf coefficient vector */
iLBC_Dec_Inst_t *iLBCdec_inst
/* (i) the decoder state structure */
){
int i, pos, lp_length;
float lp[LPC_FILTERORDER + 1], *lsfdeq2;
lsfdeq2 = lsfdeq + length;
lp_length = length + 1;
if (iLBCdec_inst->mode==30) {
/* sub-frame 1: Interpolation between old and first */
LSFinterpolate2a_dec(lp, iLBCdec_inst->lsfdeqold, lsfdeq,
lsf_weightTbl_30ms[0], length);
memcpy(syntdenum,lp,lp_length*sizeof(float));
bwexpand(weightdenum, lp, LPC_CHIRP_WEIGHTDENUM,
lp_length);
/* sub-frames 2 to 6: interpolation between first
and last LSF */
pos = lp_length;
for (i = 1; i < 6; i++) {
LSFinterpolate2a_dec(lp, lsfdeq, lsfdeq2,
lsf_weightTbl_30ms[i], length);
memcpy(syntdenum + pos,lp,lp_length*sizeof(float));
bwexpand(weightdenum + pos, lp,
LPC_CHIRP_WEIGHTDENUM, lp_length);
pos += lp_length;
}
}
else {
pos = 0;
for (i = 0; i < iLBCdec_inst->nsub; i++) {
LSFinterpolate2a_dec(lp, iLBCdec_inst->lsfdeqold,
lsfdeq, lsf_weightTbl_20ms[i], length);
memcpy(syntdenum+pos,lp,lp_length*sizeof(float));
bwexpand(weightdenum+pos, lp, LPC_CHIRP_WEIGHTDENUM,
lp_length);
pos += lp_length;
}
}
/* update memory */
if (iLBCdec_inst->mode==30)
memcpy(iLBCdec_inst->lsfdeqold, lsfdeq2,
length*sizeof(float));
else
memcpy(iLBCdec_inst->lsfdeqold, lsfdeq,
length*sizeof(float));
}

44
codecs/ilbc/LPCdecode.h Normal file
View File

@@ -0,0 +1,44 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
LPC_decode.h
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#ifndef __iLBC_LPC_DECODE_H
#define __iLBC_LPC_DECODE_H
void LSFinterpolate2a_dec(
float *a, /* (o) lpc coefficients for a sub-frame */
float *lsf1, /* (i) first lsf coefficient vector */
float *lsf2, /* (i) second lsf coefficient vector */
float coef, /* (i) interpolation weight */
int length /* (i) length of lsf vectors */
);
void SimplelsfDEQ(
float *lsfdeq, /* (o) dequantized lsf coefficients */
int *index, /* (i) quantization index */
int lpc_n /* (i) number of LPCs */
);
void DecoderInterpolateLSF(
float *syntdenum, /* (o) synthesis filter coefficients */
float *weightdenum, /* (o) weighting denumerator
coefficients */
float *lsfdeq, /* (i) dequantized lsf coefficients */
int length, /* (i) length of lsf coefficient vector */
iLBC_Dec_Inst_t *iLBCdec_inst
/* (i) the decoder state structure */
);
#endif

228
codecs/ilbc/LPCencode.c Normal file
View File

@@ -0,0 +1,228 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
LPCencode.c
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#include <string.h>
#include "iLBC_define.h"
#include "LPCencode.h"
#include "helpfun.h"
#include "lsf.h"
#include "constants.h"
/*----------------------------------------------------------------*
* lpc analysis (subrutine to LPCencode)
*---------------------------------------------------------------*/
static void SimpleAnalysis(
float *lsf, /* (o) lsf coefficients */
float *data, /* (i) new data vector */
iLBC_Enc_Inst_t *iLBCenc_inst
/* (i/o) the encoder state structure */
){
int k, is;
float temp[BLOCKL_MAX], lp[LPC_FILTERORDER + 1];
float lp2[LPC_FILTERORDER + 1];
float r[LPC_FILTERORDER + 1];
is=LPC_LOOKBACK+BLOCKL_MAX-iLBCenc_inst->blockl;
memcpy(iLBCenc_inst->lpc_buffer+is,data,
iLBCenc_inst->blockl*sizeof(float));
/* No lookahead, last window is asymmetric */
for (k = 0; k < iLBCenc_inst->lpc_n; k++) {
is = LPC_LOOKBACK;
if (k < (iLBCenc_inst->lpc_n - 1)) {
window(temp, lpc_winTbl,
iLBCenc_inst->lpc_buffer, BLOCKL_MAX);
} else {
window(temp, lpc_asymwinTbl,
iLBCenc_inst->lpc_buffer + is, BLOCKL_MAX);
}
autocorr(r, temp, BLOCKL_MAX, LPC_FILTERORDER);
window(r, r, lpc_lagwinTbl, LPC_FILTERORDER + 1);
levdurb(lp, temp, r, LPC_FILTERORDER);
bwexpand(lp2, lp, LPC_CHIRP_SYNTDENUM, LPC_FILTERORDER+1);
a2lsf(lsf + k*LPC_FILTERORDER, lp2);
}
is=LPC_LOOKBACK+BLOCKL_MAX-iLBCenc_inst->blockl;
memmove(iLBCenc_inst->lpc_buffer,
iLBCenc_inst->lpc_buffer+LPC_LOOKBACK+BLOCKL_MAX-is,
is*sizeof(float));
}
/*----------------------------------------------------------------*
* lsf interpolator and conversion from lsf to a coefficients
* (subrutine to SimpleInterpolateLSF)
*---------------------------------------------------------------*/
static void LSFinterpolate2a_enc(
float *a, /* (o) lpc coefficients */
float *lsf1,/* (i) first set of lsf coefficients */
float *lsf2,/* (i) second set of lsf coefficients */
float coef, /* (i) weighting coefficient to use between
lsf1 and lsf2 */
long length /* (i) length of coefficient vectors */
){
float lsftmp[LPC_FILTERORDER];
interpolate(lsftmp, lsf1, lsf2, coef, length);
lsf2a(a, lsftmp);
}
/*----------------------------------------------------------------*
* lsf interpolator (subrutine to LPCencode)
*---------------------------------------------------------------*/
static void SimpleInterpolateLSF(
float *syntdenum, /* (o) the synthesis filter denominator
resulting from the quantized
interpolated lsf */
float *weightdenum, /* (o) the weighting filter denominator
resulting from the unquantized
interpolated lsf */
float *lsf, /* (i) the unquantized lsf coefficients */
float *lsfdeq, /* (i) the dequantized lsf coefficients */
float *lsfold, /* (i) the unquantized lsf coefficients of
the previous signal frame */
float *lsfdeqold, /* (i) the dequantized lsf coefficients of
the previous signal frame */
int length, /* (i) should equate LPC_FILTERORDER */
iLBC_Enc_Inst_t *iLBCenc_inst
/* (i/o) the encoder state structure */
){
int i, pos, lp_length;
float lp[LPC_FILTERORDER + 1], *lsf2, *lsfdeq2;
lsf2 = lsf + length;
lsfdeq2 = lsfdeq + length;
lp_length = length + 1;
if (iLBCenc_inst->mode==30) {
/* sub-frame 1: Interpolation between old and first
set of lsf coefficients */
LSFinterpolate2a_enc(lp, lsfdeqold, lsfdeq,
lsf_weightTbl_30ms[0], length);
memcpy(syntdenum,lp,lp_length*sizeof(float));
LSFinterpolate2a_enc(lp, lsfold, lsf,
lsf_weightTbl_30ms[0], length);
bwexpand(weightdenum, lp, LPC_CHIRP_WEIGHTDENUM, lp_length);
/* sub-frame 2 to 6: Interpolation between first
and second set of lsf coefficients */
pos = lp_length;
for (i = 1; i < iLBCenc_inst->nsub; i++) {
LSFinterpolate2a_enc(lp, lsfdeq, lsfdeq2,
lsf_weightTbl_30ms[i], length);
memcpy(syntdenum + pos,lp,lp_length*sizeof(float));
LSFinterpolate2a_enc(lp, lsf, lsf2,
lsf_weightTbl_30ms[i], length);
bwexpand(weightdenum + pos, lp,
LPC_CHIRP_WEIGHTDENUM, lp_length);
pos += lp_length;
}
}
else {
pos = 0;
for (i = 0; i < iLBCenc_inst->nsub; i++) {
LSFinterpolate2a_enc(lp, lsfdeqold, lsfdeq,
lsf_weightTbl_20ms[i], length);
memcpy(syntdenum+pos,lp,lp_length*sizeof(float));
LSFinterpolate2a_enc(lp, lsfold, lsf,
lsf_weightTbl_20ms[i], length);
bwexpand(weightdenum+pos, lp,
LPC_CHIRP_WEIGHTDENUM, lp_length);
pos += lp_length;
}
}
/* update memory */
if (iLBCenc_inst->mode==30) {
memcpy(lsfold, lsf2, length*sizeof(float));
memcpy(lsfdeqold, lsfdeq2, length*sizeof(float));
}
else {
memcpy(lsfold, lsf, length*sizeof(float));
memcpy(lsfdeqold, lsfdeq, length*sizeof(float));
}
}
/*----------------------------------------------------------------*
* lsf quantizer (subrutine to LPCencode)
*---------------------------------------------------------------*/
static void SimplelsfQ(
float *lsfdeq, /* (o) dequantized lsf coefficients
(dimension FILTERORDER) */
int *index, /* (o) quantization index */
float *lsf, /* (i) the lsf coefficient vector to be
quantized (dimension FILTERORDER ) */
int lpc_n /* (i) number of lsf sets to quantize */
){
/* Quantize first LSF with memoryless split VQ */
SplitVQ(lsfdeq, index, lsf, lsfCbTbl, LSF_NSPLIT,
dim_lsfCbTbl, size_lsfCbTbl);
if (lpc_n==2) {
/* Quantize second LSF with memoryless split VQ */
SplitVQ(lsfdeq + LPC_FILTERORDER, index + LSF_NSPLIT,
lsf + LPC_FILTERORDER, lsfCbTbl, LSF_NSPLIT,
dim_lsfCbTbl, size_lsfCbTbl);
}
}
/*----------------------------------------------------------------*
* lpc encoder
*---------------------------------------------------------------*/
void LPCencode(
float *syntdenum, /* (i/o) synthesis filter coefficients
before/after encoding */
float *weightdenum, /* (i/o) weighting denumerator
coefficients before/after
encoding */
int *lsf_index, /* (o) lsf quantization index */
float *data, /* (i) lsf coefficients to quantize */
iLBC_Enc_Inst_t *iLBCenc_inst
/* (i/o) the encoder state structure */
){
float lsf[LPC_FILTERORDER * LPC_N_MAX];
float lsfdeq[LPC_FILTERORDER * LPC_N_MAX];
int change=0;
SimpleAnalysis(lsf, data, iLBCenc_inst);
SimplelsfQ(lsfdeq, lsf_index, lsf, iLBCenc_inst->lpc_n);
change=LSF_check(lsfdeq, LPC_FILTERORDER, iLBCenc_inst->lpc_n);
SimpleInterpolateLSF(syntdenum, weightdenum,
lsf, lsfdeq, iLBCenc_inst->lsfold,
iLBCenc_inst->lsfdeqold, LPC_FILTERORDER, iLBCenc_inst);
}

29
codecs/ilbc/LPCencode.h Normal file
View File

@@ -0,0 +1,29 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
LPCencode.h
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#ifndef __iLBC_LPCENCOD_H
#define __iLBC_LPCENCOD_H
void LPCencode(
float *syntdenum, /* (i/o) synthesis filter coefficients
before/after encoding */
float *weightdenum, /* (i/o) weighting denumerator coefficients
before/after encoding */
int *lsf_index, /* (o) lsf quantization index */
float *data, /* (i) lsf coefficients to quantize */
iLBC_Enc_Inst_t *iLBCenc_inst
/* (i/o) the encoder state structure */
);
#endif

View File

@@ -0,0 +1,76 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
StateConstructW.c
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#include <math.h>
#include <string.h>
#include "iLBC_define.h"
#include "StateConstructW.h"
#include "constants.h"
#include "filter.h"
/*----------------------------------------------------------------*
* decoding of the start state
*---------------------------------------------------------------*/
void StateConstructW(
int idxForMax, /* (i) 6-bit index for the quantization of
max amplitude */
int *idxVec, /* (i) vector of quantization indexes */
float *syntDenum, /* (i) synthesis filter denumerator */
float *out, /* (o) the decoded state vector */
int len /* (i) length of a state vector */
){
float maxVal, tmpbuf[LPC_FILTERORDER+2*STATE_LEN], *tmp,
numerator[LPC_FILTERORDER+1];
float foutbuf[LPC_FILTERORDER+2*STATE_LEN], *fout;
int k,tmpi;
/* decoding of the maximum value */
maxVal = state_frgqTbl[idxForMax];
maxVal = (float)pow(10,maxVal)/(float)4.5;
/* initialization of buffers and coefficients */
memset(tmpbuf, 0, LPC_FILTERORDER*sizeof(float));
memset(foutbuf, 0, LPC_FILTERORDER*sizeof(float));
for (k=0; k<LPC_FILTERORDER; k++) {
numerator[k]=syntDenum[LPC_FILTERORDER-k];
}
numerator[LPC_FILTERORDER]=syntDenum[0];
tmp = &tmpbuf[LPC_FILTERORDER];
fout = &foutbuf[LPC_FILTERORDER];
/* decoding of the sample values */
for (k=0; k<len; k++) {
tmpi = len-1-k;
/* maxVal = 1/scal */
tmp[k] = maxVal*state_sq3Tbl[idxVec[tmpi]];
}
/* circular convolution with all-pass filter */
memset(tmp+len, 0, len*sizeof(float));
ZeroPoleFilter(tmp, numerator, syntDenum, 2*len,
LPC_FILTERORDER, fout);
for (k=0;k<len;k++) {
out[k] = fout[len-1-k]+fout[2*len-1-k];
}
}

View File

@@ -0,0 +1,27 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
StateConstructW.h
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#ifndef __iLBC_STATECONSTRUCTW_H
#define __iLBC_STATECONSTRUCTW_H
void StateConstructW(
int idxForMax, /* (i) 6-bit index for the quantization of
max amplitude */
int *idxVec, /* (i) vector of quantization indexes */
float *syntDenum, /* (i) synthesis filter denumerator */
float *out, /* (o) the decoded state vector */
int len /* (i) length of a state vector */
);
#endif

194
codecs/ilbc/StateSearchW.c Normal file
View File

@@ -0,0 +1,194 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
StateSearchW.c
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#include <math.h>
#include <string.h>
#include "iLBC_define.h"
#include "StateSearchW.h"
#include "constants.h"
#include "filter.h"
#include "helpfun.h"
/*----------------------------------------------------------------*
* predictive noise shaping encoding of scaled start state
* (subrutine for StateSearchW)
*---------------------------------------------------------------*/
void AbsQuantW(
iLBC_Enc_Inst_t *iLBCenc_inst,
/* (i) Encoder instance */
float *in, /* (i) vector to encode */
float *syntDenum, /* (i) denominator of synthesis filter */
float *weightDenum, /* (i) denominator of weighting filter */
int *out, /* (o) vector of quantizer indexes */
int len, /* (i) length of vector to encode and
vector of quantizer indexes */
int state_first /* (i) position of start state in the
80 vec */
){
float *syntOut;
float syntOutBuf[LPC_FILTERORDER+STATE_SHORT_LEN_30MS];
float toQ, xq;
int n;
int index;
/* initialization of buffer for filtering */
memset(syntOutBuf, 0, LPC_FILTERORDER*sizeof(float));
/* initialization of pointer for filtering */
syntOut = &syntOutBuf[LPC_FILTERORDER];
/* synthesis and weighting filters on input */
if (state_first) {
AllPoleFilter (in, weightDenum, SUBL, LPC_FILTERORDER);
} else {
AllPoleFilter (in, weightDenum,
iLBCenc_inst->state_short_len-SUBL,
LPC_FILTERORDER);
}
/* encoding loop */
for (n=0; n<len; n++) {
/* time update of filter coefficients */
if ((state_first)&&(n==SUBL)){
syntDenum += (LPC_FILTERORDER+1);
weightDenum += (LPC_FILTERORDER+1);
/* synthesis and weighting filters on input */
AllPoleFilter (&in[n], weightDenum, len-n,
LPC_FILTERORDER);
} else if ((state_first==0)&&
(n==(iLBCenc_inst->state_short_len-SUBL))) {
syntDenum += (LPC_FILTERORDER+1);
weightDenum += (LPC_FILTERORDER+1);
/* synthesis and weighting filters on input */
AllPoleFilter (&in[n], weightDenum, len-n,
LPC_FILTERORDER);
}
/* prediction of synthesized and weighted input */
syntOut[n] = 0.0;
AllPoleFilter (&syntOut[n], weightDenum, 1,
LPC_FILTERORDER);
/* quantization */
toQ = in[n]-syntOut[n];
sort_sq(&xq, &index, toQ, state_sq3Tbl, 8);
out[n]=index;
syntOut[n] = state_sq3Tbl[out[n]];
/* update of the prediction filter */
AllPoleFilter(&syntOut[n], weightDenum, 1,
LPC_FILTERORDER);
}
}
/*----------------------------------------------------------------*
* encoding of start state
*---------------------------------------------------------------*/
void StateSearchW(
iLBC_Enc_Inst_t *iLBCenc_inst,
/* (i) Encoder instance */
float *residual,/* (i) target residual vector */
float *syntDenum, /* (i) lpc synthesis filter */
float *weightDenum, /* (i) weighting filter denuminator */
int *idxForMax, /* (o) quantizer index for maximum
amplitude */
int *idxVec, /* (o) vector of quantization indexes */
int len, /* (i) length of all vectors */
int state_first /* (i) position of start state in the
80 vec */
){
float dtmp, maxVal;
float tmpbuf[LPC_FILTERORDER+2*STATE_SHORT_LEN_30MS];
float *tmp, numerator[1+LPC_FILTERORDER];
float foutbuf[LPC_FILTERORDER+2*STATE_SHORT_LEN_30MS], *fout;
int k;
float qmax, scal;
/* initialization of buffers and filter coefficients */
memset(tmpbuf, 0, LPC_FILTERORDER*sizeof(float));
memset(foutbuf, 0, LPC_FILTERORDER*sizeof(float));
for (k=0; k<LPC_FILTERORDER; k++) {
numerator[k]=syntDenum[LPC_FILTERORDER-k];
}
numerator[LPC_FILTERORDER]=syntDenum[0];
tmp = &tmpbuf[LPC_FILTERORDER];
fout = &foutbuf[LPC_FILTERORDER];
/* circular convolution with the all-pass filter */
memcpy(tmp, residual, len*sizeof(float));
memset(tmp+len, 0, len*sizeof(float));
ZeroPoleFilter(tmp, numerator, syntDenum, 2*len,
LPC_FILTERORDER, fout);
for (k=0; k<len; k++) {
fout[k] += fout[k+len];
}
/* identification of the maximum amplitude value */
maxVal = fout[0];
for (k=1; k<len; k++) {
if (fout[k]*fout[k] > maxVal*maxVal){
maxVal = fout[k];
}
}
maxVal=(float)fabs(maxVal);
/* encoding of the maximum amplitude value */
if (maxVal < 10.0) {
maxVal = 10.0;
}
maxVal = (float)log10(maxVal);
sort_sq(&dtmp, idxForMax, maxVal, state_frgqTbl, 64);
/* decoding of the maximum amplitude representation value,
and corresponding scaling of start state */
maxVal=state_frgqTbl[*idxForMax];
qmax = (float)pow(10,maxVal);
scal = (float)(4.5)/qmax;
for (k=0; k<len; k++){
fout[k] *= scal;
}
/* predictive noise shaping encoding of scaled start state */
AbsQuantW(iLBCenc_inst, fout,syntDenum,
weightDenum,idxVec, len, state_first);
}

View File

@@ -0,0 +1,48 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
StateSearchW.h
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#ifndef __iLBC_STATESEARCHW_H
#define __iLBC_STATESEARCHW_H
void AbsQuantW(
iLBC_Enc_Inst_t *iLBCenc_inst,
/* (i) Encoder instance */
float *in, /* (i) vector to encode */
float *syntDenum, /* (i) denominator of synthesis filter */
float *weightDenum, /* (i) denominator of weighting filter */
int *out, /* (o) vector of quantizer indexes */
int len, /* (i) length of vector to encode and
vector of quantizer indexes */
int state_first /* (i) position of start state in the
80 vec */
);
void StateSearchW(
iLBC_Enc_Inst_t *iLBCenc_inst,
/* (i) Encoder instance */
float *residual,/* (i) target residual vector */
float *syntDenum, /* (i) lpc synthesis filter */
float *weightDenum, /* (i) weighting filter denuminator */
int *idxForMax, /* (o) quantizer index for maximum
amplitude */
int *idxVec, /* (o) vector of quantization indexes */
int len, /* (i) length of all vectors */
int state_first /* (i) position of start state in the
80 vec */
);
#endif

71
codecs/ilbc/anaFilter.c Normal file
View File

@@ -0,0 +1,71 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
anaFilter.c
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#include <string.h>
#include "anaFilter.h"
#include "iLBC_define.h"
/*----------------------------------------------------------------*
* LP analysis filter.
*---------------------------------------------------------------*/
void anaFilter(
float *In, /* (i) Signal to be filtered */
float *a, /* (i) LP parameters */
int len,/* (i) Length of signal */
float *Out, /* (o) Filtered signal */
float *mem /* (i/o) Filter state */
){
int i, j;
float *po, *pi, *pm, *pa;
po = Out;
/* Filter first part using memory from past */
for (i=0; i<LPC_FILTERORDER; i++) {
pi = &In[i];
pm = &mem[LPC_FILTERORDER-1];
pa = a;
*po=0.0;
for (j=0; j<=i; j++) {
*po+=(*pa++)*(*pi--);
}
for (j=i+1; j<LPC_FILTERORDER+1; j++) {
*po+=(*pa++)*(*pm--);
}
po++;
}
/* Filter last part where the state is entierly
in the input vector */
for (i=LPC_FILTERORDER; i<len; i++) {
pi = &In[i];
pa = a;
*po=0.0;
for (j=0; j<LPC_FILTERORDER+1; j++) {
*po+=(*pa++)*(*pi--);
}
po++;
}
/* Update state vector */
memcpy(mem, &In[len-LPC_FILTERORDER],
LPC_FILTERORDER*sizeof(float));
}

26
codecs/ilbc/anaFilter.h Normal file
View File

@@ -0,0 +1,26 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
anaFilter.h
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#ifndef __iLBC_ANAFILTER_H
#define __iLBC_ANAFILTER_H
void anaFilter(
float *In, /* (i) Signal to be filtered */
float *a, /* (i) LP parameters */
int len,/* (i) Length of signal */
float *Out, /* (o) Filtered signal */
float *mem /* (i/o) Filter state */
);
#endif

729
codecs/ilbc/constants.c Normal file
View File

@@ -0,0 +1,729 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
constants.c
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#include "iLBC_define.h"
/* ULP bit allocation */
/* 20 ms frame */
const iLBC_ULP_Inst_t ULP_20msTbl = {
/* LSF */
{ {6,0,0,0,0}, {7,0,0,0,0}, {7,0,0,0,0},
{0,0,0,0,0}, {0,0,0,0,0}, {0,0,0,0,0}},
/* Start state location, gain and samples */
{2,0,0,0,0},
{1,0,0,0,0},
{6,0,0,0,0},
{0,1,2,0,0},
/* extra CB index and extra CB gain */
{{6,0,1,0,0}, {0,0,7,0,0}, {0,0,7,0,0}},
{{2,0,3,0,0}, {1,1,2,0,0}, {0,0,3,0,0}},
/* CB index and CB gain */
{ {{7,0,1,0,0}, {0,0,7,0,0}, {0,0,7,0,0}},
{{0,0,8,0,0}, {0,0,8,0,0}, {0,0,8,0,0}},
{{0,0,0,0,0}, {0,0,0,0,0}, {0,0,0,0,0}},
{{0,0,0,0,0}, {0,0,0,0,0}, {0,0,0,0,0}}},
{ {{1,2,2,0,0}, {1,1,2,0,0}, {0,0,3,0,0}},
{{1,1,3,0,0}, {0,2,2,0,0}, {0,0,3,0,0}},
{{0,0,0,0,0}, {0,0,0,0,0}, {0,0,0,0,0}},
{{0,0,0,0,0}, {0,0,0,0,0}, {0,0,0,0,0}}}
};
/* 30 ms frame */
const iLBC_ULP_Inst_t ULP_30msTbl = {
/* LSF */
{ {6,0,0,0,0}, {7,0,0,0,0}, {7,0,0,0,0},
{6,0,0,0,0}, {7,0,0,0,0}, {7,0,0,0,0}},
/* Start state location, gain and samples */
{3,0,0,0,0},
{1,0,0,0,0},
{6,0,0,0,0},
{0,1,2,0,0},
/* extra CB index and extra CB gain */
{{4,2,1,0,0}, {0,0,7,0,0}, {0,0,7,0,0}},
{{1,1,3,0,0}, {1,1,2,0,0}, {0,0,3,0,0}},
/* CB index and CB gain */
{ {{6,1,1,0,0}, {0,0,7,0,0}, {0,0,7,0,0}},
{{0,7,1,0,0}, {0,0,8,0,0}, {0,0,8,0,0}},
{{0,7,1,0,0}, {0,0,8,0,0}, {0,0,8,0,0}},
{{0,7,1,0,0}, {0,0,8,0,0}, {0,0,8,0,0}}},
{ {{1,2,2,0,0}, {1,2,1,0,0}, {0,0,3,0,0}},
{{0,2,3,0,0}, {0,2,2,0,0}, {0,0,3,0,0}},
{{0,1,4,0,0}, {0,1,3,0,0}, {0,0,3,0,0}},
{{0,1,4,0,0}, {0,1,3,0,0}, {0,0,3,0,0}}}
};
/* HP Filters */
float hpi_zero_coefsTbl[3] = {
(float)0.92727436, (float)-1.8544941, (float)0.92727436
};
float hpi_pole_coefsTbl[3] = {
(float)1.0, (float)-1.9059465, (float)0.9114024
};
float hpo_zero_coefsTbl[3] = {
(float)0.93980581, (float)-1.8795834, (float)0.93980581
};
float hpo_pole_coefsTbl[3] = {
(float)1.0, (float)-1.9330735, (float)0.93589199
};
/* LP Filter */
float lpFilt_coefsTbl[FILTERORDER_DS]={
(float)-0.066650, (float)0.125000, (float)0.316650,
(float)0.414063, (float)0.316650,
(float)0.125000, (float)-0.066650
};
/* State quantization tables */
float state_sq3Tbl[8] = {
(float)-3.719849, (float)-2.177490, (float)-1.130005,
(float)-0.309692, (float)0.444214, (float)1.329712,
(float)2.436279, (float)3.983887
};
float state_frgqTbl[64] = {
(float)1.000085, (float)1.071695, (float)1.140395,
(float)1.206868, (float)1.277188, (float)1.351503,
(float)1.429380, (float)1.500727, (float)1.569049,
(float)1.639599, (float)1.707071, (float)1.781531,
(float)1.840799, (float)1.901550, (float)1.956695,
(float)2.006750, (float)2.055474, (float)2.102787,
(float)2.142819, (float)2.183592, (float)2.217962,
(float)2.257177, (float)2.295739, (float)2.332967,
(float)2.369248, (float)2.402792, (float)2.435080,
(float)2.468598, (float)2.503394, (float)2.539284,
(float)2.572944, (float)2.605036, (float)2.636331,
(float)2.668939, (float)2.698780, (float)2.729101,
(float)2.759786, (float)2.789834, (float)2.818679,
(float)2.848074, (float)2.877470, (float)2.906899,
(float)2.936655, (float)2.967804, (float)3.000115,
(float)3.033367, (float)3.066355, (float)3.104231,
(float)3.141499, (float)3.183012, (float)3.222952,
(float)3.265433, (float)3.308441, (float)3.350823,
(float)3.395275, (float)3.442793, (float)3.490801,
(float)3.542514, (float)3.604064, (float)3.666050,
(float)3.740994, (float)3.830749, (float)3.938770,
(float)4.101764
};
/* CB tables */
int search_rangeTbl[5][CB_NSTAGES]={{58,58,58}, {108,44,44},
{108,108,108}, {108,108,108}, {108,108,108}};
int stMemLTbl=85;
int memLfTbl[NASUB_MAX]={147,147,147,147};
/* expansion filter(s) */
float cbfiltersTbl[CB_FILTERLEN]={
(float)-0.034180, (float)0.108887, (float)-0.184326,
(float)0.806152, (float)0.713379, (float)-0.144043,
(float)0.083740, (float)-0.033691
};
/* Gain Quantization */
float gain_sq3Tbl[8]={
(float)-1.000000, (float)-0.659973, (float)-0.330017,
(float)0.000000, (float)0.250000, (float)0.500000,
(float)0.750000, (float)1.00000};
float gain_sq4Tbl[16]={
(float)-1.049988, (float)-0.900024, (float)-0.750000,
(float)-0.599976, (float)-0.450012, (float)-0.299988,
(float)-0.150024, (float)0.000000, (float)0.150024,
(float)0.299988, (float)0.450012, (float)0.599976,
(float)0.750000, (float)0.900024, (float)1.049988,
(float)1.200012};
float gain_sq5Tbl[32]={
(float)0.037476, (float)0.075012, (float)0.112488,
(float)0.150024, (float)0.187500, (float)0.224976,
(float)0.262512, (float)0.299988, (float)0.337524,
(float)0.375000, (float)0.412476, (float)0.450012,
(float)0.487488, (float)0.525024, (float)0.562500,
(float)0.599976, (float)0.637512, (float)0.674988,
(float)0.712524, (float)0.750000, (float)0.787476,
(float)0.825012, (float)0.862488, (float)0.900024,
(float)0.937500, (float)0.974976, (float)1.012512,
(float)1.049988, (float)1.087524, (float)1.125000,
(float)1.162476, (float)1.200012};
/* Enhancer - Upsamling a factor 4 (ENH_UPS0 = 4) */
float polyphaserTbl[ENH_UPS0*(2*ENH_FL0+1)]={
(float)0.000000, (float)0.000000, (float)0.000000,
(float)1.000000,
(float)0.000000, (float)0.000000, (float)0.000000,
(float)0.015625, (float)-0.076904, (float)0.288330,
(float)0.862061,
(float)-0.106445, (float)0.018799, (float)-0.015625,
(float)0.023682, (float)-0.124268, (float)0.601563,
(float)0.601563,
(float)-0.124268, (float)0.023682, (float)-0.023682,
(float)0.018799, (float)-0.106445, (float)0.862061,
(float)0.288330,
(float)-0.076904, (float)0.015625, (float)-0.018799};
float enh_plocsTbl[ENH_NBLOCKS_TOT] = {(float)40.0, (float)120.0,
(float)200.0, (float)280.0, (float)360.0,
(float)440.0, (float)520.0, (float)600.0};
/* LPC analysis and quantization */
int dim_lsfCbTbl[LSF_NSPLIT] = {3, 3, 4};
int size_lsfCbTbl[LSF_NSPLIT] = {64,128,128};
float lsfmeanTbl[LPC_FILTERORDER] = {
(float)0.281738, (float)0.445801, (float)0.663330,
(float)0.962524, (float)1.251831, (float)1.533081,
(float)1.850586, (float)2.137817, (float)2.481445,
(float)2.777344};
float lsf_weightTbl_30ms[6] = {(float)(1.0/2.0), (float)1.0,
(float)(2.0/3.0),
(float)(1.0/3.0), (float)0.0, (float)0.0};
float lsf_weightTbl_20ms[4] = {(float)(3.0/4.0), (float)(2.0/4.0),
(float)(1.0/4.0), (float)(0.0)};
/* Hanning LPC window */
float lpc_winTbl[BLOCKL_MAX]={
(float)0.000183, (float)0.000671, (float)0.001526,
(float)0.002716, (float)0.004242, (float)0.006104,
(float)0.008301, (float)0.010834, (float)0.013702,
(float)0.016907, (float)0.020416, (float)0.024261,
(float)0.028442, (float)0.032928, (float)0.037750,
(float)0.042877, (float)0.048309, (float)0.054047,
(float)0.060089, (float)0.066437, (float)0.073090,
(float)0.080017, (float)0.087219, (float)0.094727,
(float)0.102509, (float)0.110535, (float)0.118835,
(float)0.127411, (float)0.136230, (float)0.145294,
(float)0.154602, (float)0.164154, (float)0.173920,
(float)0.183899, (float)0.194122, (float)0.204529,
(float)0.215149, (float)0.225952, (float)0.236938,
(float)0.248108, (float)0.259460, (float)0.270966,
(float)0.282654, (float)0.294464, (float)0.306396,
(float)0.318481, (float)0.330688, (float)0.343018,
(float)0.355438, (float)0.367981, (float)0.380585,
(float)0.393280, (float)0.406067, (float)0.418884,
(float)0.431763, (float)0.444702, (float)0.457672,
(float)0.470673, (float)0.483704, (float)0.496735,
(float)0.509766, (float)0.522797, (float)0.535828,
(float)0.548798, (float)0.561768, (float)0.574677,
(float)0.587524, (float)0.600342, (float)0.613068,
(float)0.625732, (float)0.638306, (float)0.650787,
(float)0.663147, (float)0.675415, (float)0.687561,
(float)0.699585, (float)0.711487, (float)0.723206,
(float)0.734802, (float)0.746216, (float)0.757477,
(float)0.768585, (float)0.779480, (float)0.790192,
(float)0.800720, (float)0.811005, (float)0.821106,
(float)0.830994, (float)0.840668, (float)0.850067,
(float)0.859253, (float)0.868225, (float)0.876892,
(float)0.885345, (float)0.893524, (float)0.901428,
(float)0.909058, (float)0.916412, (float)0.923492,
(float)0.930267, (float)0.936768, (float)0.942963,
(float)0.948853, (float)0.954437, (float)0.959717,
(float)0.964691, (float)0.969360, (float)0.973694,
(float)0.977692, (float)0.981384, (float)0.984741,
(float)0.987762, (float)0.990479, (float)0.992828,
(float)0.994873, (float)0.996552, (float)0.997925,
(float)0.998932, (float)0.999603, (float)0.999969,
(float)0.999969, (float)0.999603, (float)0.998932,
(float)0.997925, (float)0.996552, (float)0.994873,
(float)0.992828, (float)0.990479, (float)0.987762,
(float)0.984741, (float)0.981384, (float)0.977692,
(float)0.973694, (float)0.969360, (float)0.964691,
(float)0.959717, (float)0.954437, (float)0.948853,
(float)0.942963, (float)0.936768, (float)0.930267,
(float)0.923492, (float)0.916412, (float)0.909058,
(float)0.901428, (float)0.893524, (float)0.885345,
(float)0.876892, (float)0.868225, (float)0.859253,
(float)0.850067, (float)0.840668, (float)0.830994,
(float)0.821106, (float)0.811005, (float)0.800720,
(float)0.790192, (float)0.779480, (float)0.768585,
(float)0.757477, (float)0.746216, (float)0.734802,
(float)0.723206, (float)0.711487, (float)0.699585,
(float)0.687561, (float)0.675415, (float)0.663147,
(float)0.650787, (float)0.638306, (float)0.625732,
(float)0.613068, (float)0.600342, (float)0.587524,
(float)0.574677, (float)0.561768, (float)0.548798,
(float)0.535828, (float)0.522797, (float)0.509766,
(float)0.496735, (float)0.483704, (float)0.470673,
(float)0.457672, (float)0.444702, (float)0.431763,
(float)0.418884, (float)0.406067, (float)0.393280,
(float)0.380585, (float)0.367981, (float)0.355438,
(float)0.343018, (float)0.330688, (float)0.318481,
(float)0.306396, (float)0.294464, (float)0.282654,
(float)0.270966, (float)0.259460, (float)0.248108,
(float)0.236938, (float)0.225952, (float)0.215149,
(float)0.204529, (float)0.194122, (float)0.183899,
(float)0.173920, (float)0.164154, (float)0.154602,
(float)0.145294, (float)0.136230, (float)0.127411,
(float)0.118835, (float)0.110535, (float)0.102509,
(float)0.094727, (float)0.087219, (float)0.080017,
(float)0.073090, (float)0.066437, (float)0.060089,
(float)0.054047, (float)0.048309, (float)0.042877,
(float)0.037750, (float)0.032928, (float)0.028442,
(float)0.024261, (float)0.020416, (float)0.016907,
(float)0.013702, (float)0.010834, (float)0.008301,
(float)0.006104, (float)0.004242, (float)0.002716,
(float)0.001526, (float)0.000671, (float)0.000183
};
/* Asymmetric LPC window */
float lpc_asymwinTbl[BLOCKL_MAX]={
(float)0.000061, (float)0.000214, (float)0.000458,
(float)0.000824, (float)0.001282, (float)0.001831,
(float)0.002472, (float)0.003235, (float)0.004120,
(float)0.005066, (float)0.006134, (float)0.007294,
(float)0.008545, (float)0.009918, (float)0.011383,
(float)0.012939, (float)0.014587, (float)0.016357,
(float)0.018219, (float)0.020172, (float)0.022217,
(float)0.024353, (float)0.026611, (float)0.028961,
(float)0.031372, (float)0.033905, (float)0.036530,
(float)0.039276, (float)0.042084, (float)0.044983,
(float)0.047974, (float)0.051086, (float)0.054260,
(float)0.057526, (float)0.060883, (float)0.064331,
(float)0.067871, (float)0.071503, (float)0.075226,
(float)0.079010, (float)0.082916, (float)0.086884,
(float)0.090942, (float)0.095062, (float)0.099304,
(float)0.103607, (float)0.107971, (float)0.112427,
(float)0.116974, (float)0.121582, (float)0.126282,
(float)0.131073, (float)0.135895, (float)0.140839,
(float)0.145813, (float)0.150879, (float)0.156006,
(float)0.161224, (float)0.166504, (float)0.171844,
(float)0.177246, (float)0.182709, (float)0.188263,
(float)0.193848, (float)0.199524, (float)0.205231,
(float)0.211029, (float)0.216858, (float)0.222778,
(float)0.228729, (float)0.234741, (float)0.240814,
(float)0.246918, (float)0.253082, (float)0.259308,
(float)0.265564, (float)0.271881, (float)0.278259,
(float)0.284668, (float)0.291107, (float)0.297607,
(float)0.304138, (float)0.310730, (float)0.317322,
(float)0.323975, (float)0.330658, (float)0.337372,
(float)0.344147, (float)0.350922, (float)0.357727,
(float)0.364594, (float)0.371460, (float)0.378357,
(float)0.385284, (float)0.392212, (float)0.399170,
(float)0.406158, (float)0.413177, (float)0.420197,
(float)0.427246, (float)0.434296, (float)0.441376,
(float)0.448456, (float)0.455536, (float)0.462646,
(float)0.469757, (float)0.476868, (float)0.483978,
(float)0.491089, (float)0.498230, (float)0.505341,
(float)0.512451, (float)0.519592, (float)0.526703,
(float)0.533813, (float)0.540924, (float)0.548004,
(float)0.555084, (float)0.562164, (float)0.569244,
(float)0.576294, (float)0.583313, (float)0.590332,
(float)0.597321, (float)0.604309, (float)0.611267,
(float)0.618195, (float)0.625092, (float)0.631989,
(float)0.638855, (float)0.645660, (float)0.652466,
(float)0.659241, (float)0.665985, (float)0.672668,
(float)0.679352, (float)0.685974, (float)0.692566,
(float)0.699127, (float)0.705658, (float)0.712128,
(float)0.718536, (float)0.724945, (float)0.731262,
(float)0.737549, (float)0.743805, (float)0.750000,
(float)0.756134, (float)0.762238, (float)0.768280,
(float)0.774261, (float)0.780182, (float)0.786072,
(float)0.791870, (float)0.797638, (float)0.803314,
(float)0.808960, (float)0.814514, (float)0.820038,
(float)0.825470, (float)0.830841, (float)0.836151,
(float)0.841400, (float)0.846558, (float)0.851654,
(float)0.856689, (float)0.861633, (float)0.866516,
(float)0.871338, (float)0.876068, (float)0.880737,
(float)0.885315, (float)0.889801, (float)0.894226,
(float)0.898560, (float)0.902832, (float)0.907013,
(float)0.911102, (float)0.915100, (float)0.919037,
(float)0.922882, (float)0.926636, (float)0.930328,
(float)0.933899, (float)0.937408, (float)0.940796,
(float)0.944122, (float)0.947357, (float)0.950470,
(float)0.953522, (float)0.956482, (float)0.959351,
(float)0.962097, (float)0.964783, (float)0.967377,
(float)0.969849, (float)0.972229, (float)0.974518,
(float)0.976715, (float)0.978821, (float)0.980835,
(float)0.982727, (float)0.984528, (float)0.986237,
(float)0.987854, (float)0.989380, (float)0.990784,
(float)0.992096, (float)0.993317, (float)0.994415,
(float)0.995422, (float)0.996338, (float)0.997162,
(float)0.997864, (float)0.998474, (float)0.998962,
(float)0.999390, (float)0.999695, (float)0.999878,
(float)0.999969, (float)0.999969, (float)0.996918,
(float)0.987701, (float)0.972382, (float)0.951050,
(float)0.923889, (float)0.891022, (float)0.852631,
(float)0.809021, (float)0.760406, (float)0.707092,
(float)0.649445, (float)0.587799, (float)0.522491,
(float)0.453979, (float)0.382690, (float)0.309021,
(float)0.233459, (float)0.156433, (float)0.078461
};
/* Lag window for LPC */
float lpc_lagwinTbl[LPC_FILTERORDER + 1]={
(float)1.000100, (float)0.998890, (float)0.995569,
(float)0.990057, (float)0.982392,
(float)0.972623, (float)0.960816, (float)0.947047,
(float)0.931405, (float)0.913989, (float)0.894909};
/* LSF quantization*/
float lsfCbTbl[64 * 3 + 128 * 3 + 128 * 4] = {
(float)0.155396, (float)0.273193, (float)0.451172,
(float)0.390503, (float)0.648071, (float)1.002075,
(float)0.440186, (float)0.692261, (float)0.955688,
(float)0.343628, (float)0.642334, (float)1.071533,
(float)0.318359, (float)0.491577, (float)0.670532,
(float)0.193115, (float)0.375488, (float)0.725708,
(float)0.364136, (float)0.510376, (float)0.658691,
(float)0.297485, (float)0.527588, (float)0.842529,
(float)0.227173, (float)0.365967, (float)0.563110,
(float)0.244995, (float)0.396729, (float)0.636475,
(float)0.169434, (float)0.300171, (float)0.520264,
(float)0.312866, (float)0.464478, (float)0.643188,
(float)0.248535, (float)0.429932, (float)0.626099,
(float)0.236206, (float)0.491333, (float)0.817139,
(float)0.334961, (float)0.625122, (float)0.895752,
(float)0.343018, (float)0.518555, (float)0.698608,
(float)0.372803, (float)0.659790, (float)0.945435,
(float)0.176880, (float)0.316528, (float)0.581421,
(float)0.416382, (float)0.625977, (float)0.805176,
(float)0.303223, (float)0.568726, (float)0.915039,
(float)0.203613, (float)0.351440, (float)0.588135,
(float)0.221191, (float)0.375000, (float)0.614746,
(float)0.199951, (float)0.323364, (float)0.476074,
(float)0.300781, (float)0.433350, (float)0.566895,
(float)0.226196, (float)0.354004, (float)0.507568,
(float)0.300049, (float)0.508179, (float)0.711670,
(float)0.312012, (float)0.492676, (float)0.763428,
(float)0.329956, (float)0.541016, (float)0.795776,
(float)0.373779, (float)0.604614, (float)0.928833,
(float)0.210571, (float)0.452026, (float)0.755249,
(float)0.271118, (float)0.473267, (float)0.662476,
(float)0.285522, (float)0.436890, (float)0.634399,
(float)0.246704, (float)0.565552, (float)0.859009,
(float)0.270508, (float)0.406250, (float)0.553589,
(float)0.361450, (float)0.578491, (float)0.813843,
(float)0.342651, (float)0.482788, (float)0.622437,
(float)0.340332, (float)0.549438, (float)0.743164,
(float)0.200439, (float)0.336304, (float)0.540894,
(float)0.407837, (float)0.644775, (float)0.895142,
(float)0.294678, (float)0.454834, (float)0.699097,
(float)0.193115, (float)0.344482, (float)0.643188,
(float)0.275757, (float)0.420776, (float)0.598755,
(float)0.380493, (float)0.608643, (float)0.861084,
(float)0.222778, (float)0.426147, (float)0.676514,
(float)0.407471, (float)0.700195, (float)1.053101,
(float)0.218384, (float)0.377197, (float)0.669922,
(float)0.313232, (float)0.454102, (float)0.600952,
(float)0.347412, (float)0.571533, (float)0.874146,
(float)0.238037, (float)0.405396, (float)0.729492,
(float)0.223877, (float)0.412964, (float)0.822021,
(float)0.395264, (float)0.582153, (float)0.743896,
(float)0.247925, (float)0.485596, (float)0.720581,
(float)0.229126, (float)0.496582, (float)0.907715,
(float)0.260132, (float)0.566895, (float)1.012695,
(float)0.337402, (float)0.611572, (float)0.978149,
(float)0.267822, (float)0.447632, (float)0.769287,
(float)0.250610, (float)0.381714, (float)0.530029,
(float)0.430054, (float)0.805054, (float)1.221924,
(float)0.382568, (float)0.544067, (float)0.701660,
(float)0.383545, (float)0.710327, (float)1.149170,
(float)0.271362, (float)0.529053, (float)0.775513,
(float)0.246826, (float)0.393555, (float)0.588623,
(float)0.266846, (float)0.422119, (float)0.676758,
(float)0.311523, (float)0.580688, (float)0.838623,
(float)1.331177, (float)1.576782, (float)1.779541,
(float)1.160034, (float)1.401978, (float)1.768188,
(float)1.161865, (float)1.525146, (float)1.715332,
(float)0.759521, (float)0.913940, (float)1.119873,
(float)0.947144, (float)1.121338, (float)1.282471,
(float)1.015015, (float)1.557007, (float)1.804932,
(float)1.172974, (float)1.402100, (float)1.692627,
(float)1.087524, (float)1.474243, (float)1.665405,
(float)0.899536, (float)1.105225, (float)1.406250,
(float)1.148438, (float)1.484741, (float)1.796265,
(float)0.785645, (float)1.209839, (float)1.567749,
(float)0.867798, (float)1.166504, (float)1.450684,
(float)0.922485, (float)1.229858, (float)1.420898,
(float)0.791260, (float)1.123291, (float)1.409546,
(float)0.788940, (float)0.966064, (float)1.340332,
(float)1.051147, (float)1.272827, (float)1.556641,
(float)0.866821, (float)1.181152, (float)1.538818,
(float)0.906738, (float)1.373535, (float)1.607910,
(float)1.244751, (float)1.581421, (float)1.933838,
(float)0.913940, (float)1.337280, (float)1.539673,
(float)0.680542, (float)0.959229, (float)1.662720,
(float)0.887207, (float)1.430542, (float)1.800781,
(float)0.912598, (float)1.433594, (float)1.683960,
(float)0.860474, (float)1.060303, (float)1.455322,
(float)1.005127, (float)1.381104, (float)1.706909,
(float)0.800781, (float)1.363892, (float)1.829102,
(float)0.781860, (float)1.124390, (float)1.505981,
(float)1.003662, (float)1.471436, (float)1.684692,
(float)0.981323, (float)1.309570, (float)1.618042,
(float)1.228760, (float)1.554321, (float)1.756470,
(float)0.734375, (float)0.895752, (float)1.225586,
(float)0.841797, (float)1.055664, (float)1.249268,
(float)0.920166, (float)1.119385, (float)1.486206,
(float)0.894409, (float)1.539063, (float)1.828979,
(float)1.283691, (float)1.543335, (float)1.858276,
(float)0.676025, (float)0.933105, (float)1.490845,
(float)0.821289, (float)1.491821, (float)1.739868,
(float)0.923218, (float)1.144653, (float)1.580566,
(float)1.057251, (float)1.345581, (float)1.635864,
(float)0.888672, (float)1.074951, (float)1.353149,
(float)0.942749, (float)1.195435, (float)1.505493,
(float)1.492310, (float)1.788086, (float)2.039673,
(float)1.070313, (float)1.634399, (float)1.860962,
(float)1.253296, (float)1.488892, (float)1.686035,
(float)0.647095, (float)0.864014, (float)1.401855,
(float)0.866699, (float)1.254883, (float)1.453369,
(float)1.063965, (float)1.532593, (float)1.731323,
(float)1.167847, (float)1.521484, (float)1.884033,
(float)0.956055, (float)1.502075, (float)1.745605,
(float)0.928711, (float)1.288574, (float)1.479614,
(float)1.088013, (float)1.380737, (float)1.570801,
(float)0.905029, (float)1.186768, (float)1.371948,
(float)1.057861, (float)1.421021, (float)1.617432,
(float)1.108276, (float)1.312500, (float)1.501465,
(float)0.979492, (float)1.416992, (float)1.624268,
(float)1.276001, (float)1.661011, (float)2.007935,
(float)0.993042, (float)1.168579, (float)1.331665,
(float)0.778198, (float)0.944946, (float)1.235962,
(float)1.223755, (float)1.491333, (float)1.815674,
(float)0.852661, (float)1.350464, (float)1.722290,
(float)1.134766, (float)1.593140, (float)1.787354,
(float)1.051392, (float)1.339722, (float)1.531006,
(float)0.803589, (float)1.271240, (float)1.652100,
(float)0.755737, (float)1.143555, (float)1.639404,
(float)0.700928, (float)0.837280, (float)1.130371,
(float)0.942749, (float)1.197876, (float)1.669800,
(float)0.993286, (float)1.378296, (float)1.566528,
(float)0.801025, (float)1.095337, (float)1.298950,
(float)0.739990, (float)1.032959, (float)1.383667,
(float)0.845703, (float)1.072266, (float)1.543823,
(float)0.915649, (float)1.072266, (float)1.224487,
(float)1.021973, (float)1.226196, (float)1.481323,
(float)0.999878, (float)1.204102, (float)1.555908,
(float)0.722290, (float)0.913940, (float)1.340210,
(float)0.673340, (float)0.835938, (float)1.259521,
(float)0.832397, (float)1.208374, (float)1.394165,
(float)0.962158, (float)1.576172, (float)1.912842,
(float)1.166748, (float)1.370850, (float)1.556763,
(float)0.946289, (float)1.138550, (float)1.400391,
(float)1.035034, (float)1.218262, (float)1.386475,
(float)1.393799, (float)1.717773, (float)2.000244,
(float)0.972656, (float)1.260986, (float)1.760620,
(float)1.028198, (float)1.288452, (float)1.484619,
(float)0.773560, (float)1.258057, (float)1.756714,
(float)1.080322, (float)1.328003, (float)1.742676,
(float)0.823975, (float)1.450806, (float)1.917725,
(float)0.859009, (float)1.016602, (float)1.191895,
(float)0.843994, (float)1.131104, (float)1.645020,
(float)1.189697, (float)1.702759, (float)1.894409,
(float)1.346680, (float)1.763184, (float)2.066040,
(float)0.980469, (float)1.253784, (float)1.441650,
(float)1.338135, (float)1.641968, (float)1.932739,
(float)1.223267, (float)1.424194, (float)1.626465,
(float)0.765747, (float)1.004150, (float)1.579102,
(float)1.042847, (float)1.269165, (float)1.647461,
(float)0.968750, (float)1.257568, (float)1.555786,
(float)0.826294, (float)0.993408, (float)1.275146,
(float)0.742310, (float)0.950439, (float)1.430542,
(float)1.054321, (float)1.439819, (float)1.828003,
(float)1.072998, (float)1.261719, (float)1.441895,
(float)0.859375, (float)1.036377, (float)1.314819,
(float)0.895752, (float)1.267212, (float)1.605591,
(float)0.805420, (float)0.962891, (float)1.142334,
(float)0.795654, (float)1.005493, (float)1.468506,
(float)1.105347, (float)1.313843, (float)1.584839,
(float)0.792236, (float)1.221802, (float)1.465698,
(float)1.170532, (float)1.467651, (float)1.664063,
(float)0.838257, (float)1.153198, (float)1.342163,
(float)0.968018, (float)1.198242, (float)1.391235,
(float)1.250122, (float)1.623535, (float)1.823608,
(float)0.711670, (float)1.058350, (float)1.512085,
(float)1.204834, (float)1.454468, (float)1.739136,
(float)1.137451, (float)1.421753, (float)1.620117,
(float)0.820435, (float)1.322754, (float)1.578247,
(float)0.798706, (float)1.005005, (float)1.213867,
(float)0.980713, (float)1.324951, (float)1.512939,
(float)1.112305, (float)1.438843, (float)1.735596,
(float)1.135498, (float)1.356689, (float)1.635742,
(float)1.101318, (float)1.387451, (float)1.686523,
(float)0.849854, (float)1.276978, (float)1.523438,
(float)1.377930, (float)1.627563, (float)1.858154,
(float)0.884888, (float)1.095459, (float)1.287476,
(float)1.289795, (float)1.505859, (float)1.756592,
(float)0.817505, (float)1.384155, (float)1.650513,
(float)1.446655, (float)1.702148, (float)1.931885,
(float)0.835815, (float)1.023071, (float)1.385376,
(float)0.916626, (float)1.139038, (float)1.335327,
(float)0.980103, (float)1.174072, (float)1.453735,
(float)1.705688, (float)2.153809, (float)2.398315, (float)2.743408,
(float)1.797119, (float)2.016846, (float)2.445679, (float)2.701904,
(float)1.990356, (float)2.219116, (float)2.576416, (float)2.813477,
(float)1.849365, (float)2.190918, (float)2.611572, (float)2.835083,
(float)1.657959, (float)1.854370, (float)2.159058, (float)2.726196,
(float)1.437744, (float)1.897705, (float)2.253174, (float)2.655396,
(float)2.028687, (float)2.247314, (float)2.542358, (float)2.875854,
(float)1.736938, (float)1.922119, (float)2.185913, (float)2.743408,
(float)1.521606, (float)1.870972, (float)2.526855, (float)2.786987,
(float)1.841431, (float)2.050659, (float)2.463623, (float)2.857666,
(float)1.590088, (float)2.067261, (float)2.427979, (float)2.794434,
(float)1.746826, (float)2.057373, (float)2.320190, (float)2.800781,
(float)1.734619, (float)1.940552, (float)2.306030, (float)2.826416,
(float)1.786255, (float)2.204468, (float)2.457520, (float)2.795288,
(float)1.861084, (float)2.170532, (float)2.414551, (float)2.763672,
(float)2.001465, (float)2.307617, (float)2.552734, (float)2.811890,
(float)1.784424, (float)2.124146, (float)2.381592, (float)2.645508,
(float)1.888794, (float)2.135864, (float)2.418579, (float)2.861206,
(float)2.301147, (float)2.531250, (float)2.724976, (float)2.913086,
(float)1.837769, (float)2.051270, (float)2.261963, (float)2.553223,
(float)2.012939, (float)2.221191, (float)2.440186, (float)2.678101,
(float)1.429565, (float)1.858276, (float)2.582275, (float)2.845703,
(float)1.622803, (float)1.897705, (float)2.367310, (float)2.621094,
(float)1.581543, (float)1.960449, (float)2.515869, (float)2.736450,
(float)1.419434, (float)1.933960, (float)2.394653, (float)2.746704,
(float)1.721924, (float)2.059570, (float)2.421753, (float)2.769653,
(float)1.911011, (float)2.220703, (float)2.461060, (float)2.740723,
(float)1.581177, (float)1.860840, (float)2.516968, (float)2.874634,
(float)1.870361, (float)2.098755, (float)2.432373, (float)2.656494,
(float)2.059692, (float)2.279785, (float)2.495605, (float)2.729370,
(float)1.815674, (float)2.181519, (float)2.451538, (float)2.680542,
(float)1.407959, (float)1.768311, (float)2.343018, (float)2.668091,
(float)2.168701, (float)2.394653, (float)2.604736, (float)2.829346,
(float)1.636230, (float)1.865723, (float)2.329102, (float)2.824219,
(float)1.878906, (float)2.139526, (float)2.376709, (float)2.679810,
(float)1.765381, (float)1.971802, (float)2.195435, (float)2.586914,
(float)2.164795, (float)2.410889, (float)2.673706, (float)2.903198,
(float)2.071899, (float)2.331055, (float)2.645874, (float)2.907104,
(float)2.026001, (float)2.311523, (float)2.594849, (float)2.863892,
(float)1.948975, (float)2.180786, (float)2.514893, (float)2.797852,
(float)1.881836, (float)2.130859, (float)2.478149, (float)2.804199,
(float)2.238159, (float)2.452759, (float)2.652832, (float)2.868286,
(float)1.897949, (float)2.101685, (float)2.524292, (float)2.880127,
(float)1.856445, (float)2.074585, (float)2.541016, (float)2.791748,
(float)1.695557, (float)2.199097, (float)2.506226, (float)2.742676,
(float)1.612671, (float)1.877075, (float)2.435425, (float)2.732910,
(float)1.568848, (float)1.786499, (float)2.194580, (float)2.768555,
(float)1.953369, (float)2.164551, (float)2.486938, (float)2.874023,
(float)1.388306, (float)1.725342, (float)2.384521, (float)2.771851,
(float)2.115356, (float)2.337769, (float)2.592896, (float)2.864014,
(float)1.905762, (float)2.111328, (float)2.363525, (float)2.789307,
(float)1.882568, (float)2.332031, (float)2.598267, (float)2.827637,
(float)1.683594, (float)2.088745, (float)2.361938, (float)2.608643,
(float)1.874023, (float)2.182129, (float)2.536133, (float)2.766968,
(float)1.861938, (float)2.070435, (float)2.309692, (float)2.700562,
(float)1.722168, (float)2.107422, (float)2.477295, (float)2.837646,
(float)1.926880, (float)2.184692, (float)2.442627, (float)2.663818,
(float)2.123901, (float)2.337280, (float)2.553101, (float)2.777466,
(float)1.588135, (float)1.911499, (float)2.212769, (float)2.543945,
(float)2.053955, (float)2.370850, (float)2.712158, (float)2.939941,
(float)2.210449, (float)2.519653, (float)2.770386, (float)2.958618,
(float)2.199463, (float)2.474731, (float)2.718262, (float)2.919922,
(float)1.960083, (float)2.175415, (float)2.608032, (float)2.888794,
(float)1.953735, (float)2.185181, (float)2.428223, (float)2.809570,
(float)1.615234, (float)2.036499, (float)2.576538, (float)2.834595,
(float)1.621094, (float)2.028198, (float)2.431030, (float)2.664673,
(float)1.824951, (float)2.267456, (float)2.514526, (float)2.747925,
(float)1.994263, (float)2.229126, (float)2.475220, (float)2.833984,
(float)1.746338, (float)2.011353, (float)2.588257, (float)2.826904,
(float)1.562866, (float)2.135986, (float)2.471680, (float)2.687256,
(float)1.748901, (float)2.083496, (float)2.460938, (float)2.686279,
(float)1.758057, (float)2.131470, (float)2.636597, (float)2.891602,
(float)2.071289, (float)2.299072, (float)2.550781, (float)2.814331,
(float)1.839600, (float)2.094360, (float)2.496460, (float)2.723999,
(float)1.882202, (float)2.088257, (float)2.636841, (float)2.923096,
(float)1.957886, (float)2.153198, (float)2.384399, (float)2.615234,
(float)1.992920, (float)2.351196, (float)2.654419, (float)2.889771,
(float)2.012817, (float)2.262451, (float)2.643799, (float)2.903076,
(float)2.025635, (float)2.254761, (float)2.508423, (float)2.784058,
(float)2.316040, (float)2.589355, (float)2.794189, (float)2.963623,
(float)1.741211, (float)2.279541, (float)2.578491, (float)2.816284,
(float)1.845337, (float)2.055786, (float)2.348511, (float)2.822021,
(float)1.679932, (float)1.926514, (float)2.499756, (float)2.835693,
(float)1.722534, (float)1.946899, (float)2.448486, (float)2.728760,
(float)1.829834, (float)2.043213, (float)2.580444, (float)2.867676,
(float)1.676636, (float)2.071655, (float)2.322510, (float)2.704834,
(float)1.791504, (float)2.113525, (float)2.469727, (float)2.784058,
(float)1.977051, (float)2.215088, (float)2.497437, (float)2.726929,
(float)1.800171, (float)2.106689, (float)2.357788, (float)2.738892,
(float)1.827759, (float)2.170166, (float)2.525879, (float)2.852417,
(float)1.918335, (float)2.132813, (float)2.488403, (float)2.728149,
(float)1.916748, (float)2.225098, (float)2.542603, (float)2.857666,
(float)1.761230, (float)1.976074, (float)2.507446, (float)2.884521,
(float)2.053711, (float)2.367432, (float)2.608032, (float)2.837646,
(float)1.595337, (float)2.000977, (float)2.307129, (float)2.578247,
(float)1.470581, (float)2.031250, (float)2.375854, (float)2.647583,
(float)1.801392, (float)2.128052, (float)2.399780, (float)2.822876,
(float)1.853638, (float)2.066650, (float)2.429199, (float)2.751465,
(float)1.956299, (float)2.163696, (float)2.394775, (float)2.734253,
(float)1.963623, (float)2.275757, (float)2.585327, (float)2.865234,
(float)1.887451, (float)2.105469, (float)2.331787, (float)2.587402,
(float)2.120117, (float)2.443359, (float)2.733887, (float)2.941406,
(float)1.506348, (float)1.766968, (float)2.400513, (float)2.851807,
(float)1.664551, (float)1.981079, (float)2.375732, (float)2.774414,
(float)1.720703, (float)1.978882, (float)2.391479, (float)2.640991,
(float)1.483398, (float)1.814819, (float)2.434448, (float)2.722290,
(float)1.769043, (float)2.136597, (float)2.563721, (float)2.774414,
(float)1.810791, (float)2.049316, (float)2.373901, (float)2.613647,
(float)1.788330, (float)2.005981, (float)2.359131, (float)2.723145,
(float)1.785156, (float)1.993164, (float)2.399780, (float)2.832520,
(float)1.695313, (float)2.022949, (float)2.522583, (float)2.745117,
(float)1.584106, (float)1.965576, (float)2.299927, (float)2.715576,
(float)1.894897, (float)2.249878, (float)2.655884, (float)2.897705,
(float)1.720581, (float)1.995728, (float)2.299438, (float)2.557007,
(float)1.619385, (float)2.173950, (float)2.574219, (float)2.787964,
(float)1.883179, (float)2.220459, (float)2.474365, (float)2.825073,
(float)1.447632, (float)2.045044, (float)2.555542, (float)2.744873,
(float)1.502686, (float)2.156616, (float)2.653320, (float)2.846558,
(float)1.711548, (float)1.944092, (float)2.282959, (float)2.685791,
(float)1.499756, (float)1.867554, (float)2.341064, (float)2.578857,
(float)1.916870, (float)2.135132, (float)2.568237, (float)2.826050,
(float)1.498047, (float)1.711182, (float)2.223267, (float)2.755127,
(float)1.808716, (float)1.997559, (float)2.256470, (float)2.758545,
(float)2.088501, (float)2.402710, (float)2.667358, (float)2.890259,
(float)1.545044, (float)1.819214, (float)2.324097, (float)2.692993,
(float)1.796021, (float)2.012573, (float)2.505737, (float)2.784912,
(float)1.786499, (float)2.041748, (float)2.290405, (float)2.650757,
(float)1.938232, (float)2.264404, (float)2.529053, (float)2.796143
};

74
codecs/ilbc/constants.h Normal file
View File

@@ -0,0 +1,74 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
constants.h
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#ifndef __iLBC_CONSTANTS_H
#define __iLBC_CONSTANTS_H
#include "iLBC_define.h"
/* ULP bit allocation */
extern const iLBC_ULP_Inst_t ULP_20msTbl;
extern const iLBC_ULP_Inst_t ULP_30msTbl;
/* high pass filters */
extern float hpi_zero_coefsTbl[];
extern float hpi_pole_coefsTbl[];
extern float hpo_zero_coefsTbl[];
extern float hpo_pole_coefsTbl[];
/* low pass filters */
extern float lpFilt_coefsTbl[];
/* LPC analysis and quantization */
extern float lpc_winTbl[];
extern float lpc_asymwinTbl[];
extern float lpc_lagwinTbl[];
extern float lsfCbTbl[];
extern float lsfmeanTbl[];
extern int dim_lsfCbTbl[];
extern int size_lsfCbTbl[];
extern float lsf_weightTbl_30ms[];
extern float lsf_weightTbl_20ms[];
/* state quantization tables */
extern float state_sq3Tbl[];
extern float state_frgqTbl[];
/* gain quantization tables */
extern float gain_sq3Tbl[];
extern float gain_sq4Tbl[];
extern float gain_sq5Tbl[];
/* adaptive codebook definitions */
extern int search_rangeTbl[5][CB_NSTAGES];
extern int memLfTbl[];
extern int stMemLTbl;
extern float cbfiltersTbl[CB_FILTERLEN];
/* enhancer definitions */
extern float polyphaserTbl[];
extern float enh_plocsTbl[];
#endif

216
codecs/ilbc/createCB.c Normal file
View File

@@ -0,0 +1,216 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
createCB.c
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#include "iLBC_define.h"
#include "createCB.h"
#include "constants.h"
#include <string.h>
#include <math.h>
/*----------------------------------------------------------------*
* Construct an additional codebook vector by filtering the
* initial codebook buffer. This vector is then used to expand
* the codebook with an additional section.
*---------------------------------------------------------------*/
void filteredCBvecs(
float *cbvectors, /* (o) Codebook vectors for the
higher section */
float *mem, /* (i) Buffer to create codebook
vector from */
int lMem /* (i) Length of buffer */
){
int j, k;
float *pp, *pp1;
float tempbuff2[CB_MEML+CB_FILTERLEN];
float *pos;
memset(tempbuff2, 0, (CB_HALFFILTERLEN-1)*sizeof(float));
memcpy(&tempbuff2[CB_HALFFILTERLEN-1], mem, lMem*sizeof(float));
memset(&tempbuff2[lMem+CB_HALFFILTERLEN-1], 0,
(CB_HALFFILTERLEN+1)*sizeof(float));
/* Create codebook vector for higher section by filtering */
/* do filtering */
pos=cbvectors;
memset(pos, 0, lMem*sizeof(float));
for (k=0; k<lMem; k++) {
pp=&tempbuff2[k];
pp1=&cbfiltersTbl[CB_FILTERLEN-1];
for (j=0;j<CB_FILTERLEN;j++) {
(*pos)+=(*pp++)*(*pp1--);
}
pos++;
}
}
/*----------------------------------------------------------------*
* Search the augmented part of the codebook to find the best
* measure.
*----------------------------------------------------------------*/
void searchAugmentedCB(
int low, /* (i) Start index for the search */
int high, /* (i) End index for the search */
int stage, /* (i) Current stage */
int startIndex, /* (i) Codebook index for the first
aug vector */
float *target, /* (i) Target vector for encoding */
float *buffer, /* (i) Pointer to the end of the buffer for
augmented codebook construction */
float *max_measure, /* (i/o) Currently maximum measure */
int *best_index,/* (o) Currently the best index */
float *gain, /* (o) Currently the best gain */
float *energy, /* (o) Energy of augmented codebook
vectors */
float *invenergy/* (o) Inv energy of augmented codebook
vectors */
) {
int icount, ilow, j, tmpIndex;
float *pp, *ppo, *ppi, *ppe, crossDot, alfa;
float weighted, measure, nrjRecursive;
float ftmp;
/* Compute the energy for the first (low-5)
noninterpolated samples */
nrjRecursive = (float) 0.0;
pp = buffer - low + 1;
for (j=0; j<(low-5); j++) {
nrjRecursive += ( (*pp)*(*pp) );
pp++;
}
ppe = buffer - low;
for (icount=low; icount<=high; icount++) {
/* Index of the codebook vector used for retrieving
energy values */
tmpIndex = startIndex+icount-20;
ilow = icount-4;
/* Update the energy recursively to save complexity */
nrjRecursive = nrjRecursive + (*ppe)*(*ppe);
ppe--;
energy[tmpIndex] = nrjRecursive;
/* Compute cross dot product for the first (low-5)
samples */
crossDot = (float) 0.0;
pp = buffer-icount;
for (j=0; j<ilow; j++) {
crossDot += target[j]*(*pp++);
}
/* interpolation */
alfa = (float) 0.2;
ppo = buffer-4;
ppi = buffer-icount-4;
for (j=ilow; j<icount; j++) {
weighted = ((float)1.0-alfa)*(*ppo)+alfa*(*ppi);
ppo++;
ppi++;
energy[tmpIndex] += weighted*weighted;
crossDot += target[j]*weighted;
alfa += (float)0.2;
}
/* Compute energy and cross dot product for the
remaining samples */
pp = buffer - icount;
for (j=icount; j<SUBL; j++) {
energy[tmpIndex] += (*pp)*(*pp);
crossDot += target[j]*(*pp++);
}
if (energy[tmpIndex]>0.0) {
invenergy[tmpIndex]=(float)1.0/(energy[tmpIndex]+EPS);
} else {
invenergy[tmpIndex] = (float) 0.0;
}
if (stage==0) {
measure = (float)-10000000.0;
if (crossDot > 0.0) {
measure = crossDot*crossDot*invenergy[tmpIndex];
}
}
else {
measure = crossDot*crossDot*invenergy[tmpIndex];
}
/* check if measure is better */
ftmp = crossDot*invenergy[tmpIndex];
if ((measure>*max_measure) && (fabs(ftmp)<CB_MAXGAIN)) {
*best_index = tmpIndex;
*max_measure = measure;
*gain = ftmp;
}
}
}
/*----------------------------------------------------------------*
* Recreate a specific codebook vector from the augmented part.
*
*----------------------------------------------------------------*/
void createAugmentedVec(
int index, /* (i) Index for the augmented vector
to be created */
float *buffer, /* (i) Pointer to the end of the buffer for
augmented codebook construction */
float *cbVec/* (o) The construced codebook vector */
) {
int ilow, j;
float *pp, *ppo, *ppi, alfa, alfa1, weighted;
ilow = index-5;
/* copy the first noninterpolated part */
pp = buffer-index;
memcpy(cbVec,pp,sizeof(float)*index);
/* interpolation */
alfa1 = (float)0.2;
alfa = 0.0;
ppo = buffer-5;
ppi = buffer-index-5;
for (j=ilow; j<index; j++) {
weighted = ((float)1.0-alfa)*(*ppo)+alfa*(*ppi);
ppo++;
ppi++;
cbVec[j] = weighted;
alfa += alfa1;
}
/* copy the second noninterpolated part */
pp = buffer - index;
memcpy(cbVec+index,pp,sizeof(float)*(SUBL-index));
}

56
codecs/ilbc/createCB.h Normal file
View File

@@ -0,0 +1,56 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
createCB.h
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#ifndef __iLBC_CREATECB_H
#define __iLBC_CREATECB_H
void filteredCBvecs(
float *cbvectors, /* (o) Codebook vector for the
higher section */
float *mem, /* (i) Buffer to create codebook
vectors from */
int lMem /* (i) Length of buffer */
);
void searchAugmentedCB(
int low, /* (i) Start index for the search */
int high, /* (i) End index for the search */
int stage, /* (i) Current stage */
int startIndex, /* (i) CB index for the first
augmented vector */
float *target, /* (i) Target vector for encoding */
float *buffer, /* (i) Pointer to the end of the
buffer for augmented codebook
construction */
float *max_measure, /* (i/o) Currently maximum measure */
int *best_index,/* (o) Currently the best index */
float *gain, /* (o) Currently the best gain */
float *energy, /* (o) Energy of augmented
codebook vectors */
float *invenergy/* (o) Inv energy of aug codebook
vectors */
);
void createAugmentedVec(
int index, /* (i) Index for the aug vector
to be created */
float *buffer, /* (i) Pointer to the end of the
buffer for augmented codebook
construction */
float *cbVec /* (o) The construced codebook vector */
);
#endif

259
codecs/ilbc/doCPLC.c Normal file
View File

@@ -0,0 +1,259 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
doCPLC.c
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#include <math.h>
#include <string.h>
#include <stdio.h>
#include "iLBC_define.h"
#include "doCPLC.h"
/*----------------------------------------------------------------*
* Compute cross correlation and pitch gain for pitch prediction
* of last subframe at given lag.
*---------------------------------------------------------------*/
static void compCorr(
float *cc, /* (o) cross correlation coefficient */
float *gc, /* (o) gain */
float *pm,
float *buffer, /* (i) signal buffer */
int lag, /* (i) pitch lag */
int bLen, /* (i) length of buffer */
int sRange /* (i) correlation search length */
){
int i;
float ftmp1, ftmp2, ftmp3;
/* Guard against getting outside buffer */
if ((bLen-sRange-lag)<0) {
sRange=bLen-lag;
}
ftmp1 = 0.0;
ftmp2 = 0.0;
ftmp3 = 0.0;
for (i=0; i<sRange; i++) {
ftmp1 += buffer[bLen-sRange+i] *
buffer[bLen-sRange+i-lag];
ftmp2 += buffer[bLen-sRange+i-lag] *
buffer[bLen-sRange+i-lag];
ftmp3 += buffer[bLen-sRange+i] *
buffer[bLen-sRange+i];
}
if (ftmp2 > 0.0) {
*cc = ftmp1*ftmp1/ftmp2;
*gc = (float)fabs(ftmp1/ftmp2);
*pm=(float)fabs(ftmp1)/
((float)sqrt(ftmp2)*(float)sqrt(ftmp3));
}
else {
*cc = 0.0;
*gc = 0.0;
*pm=0.0;
}
}
/*----------------------------------------------------------------*
* Packet loss concealment routine. Conceals a residual signal
* and LP parameters. If no packet loss, update state.
*---------------------------------------------------------------*/
void doThePLC(
float *PLCresidual, /* (o) concealed residual */
float *PLClpc, /* (o) concealed LP parameters */
int PLI, /* (i) packet loss indicator
0 - no PL, 1 = PL */
float *decresidual, /* (i) decoded residual */
float *lpc, /* (i) decoded LPC (only used for no PL) */
int inlag, /* (i) pitch lag */
iLBC_Dec_Inst_t *iLBCdec_inst
/* (i/o) decoder instance */
){
int lag=20, randlag;
float gain, maxcc;
float use_gain;
float gain_comp, maxcc_comp, per, max_per;
int i, pick, use_lag;
float ftmp, randvec[BLOCKL_MAX], pitchfact, energy;
/* Packet Loss */
if (PLI == 1) {
iLBCdec_inst->consPLICount += 1;
/* if previous frame not lost,
determine pitch pred. gain */
if (iLBCdec_inst->prevPLI != 1) {
/* Search around the previous lag to find the
best pitch period */
lag=inlag-3;
compCorr(&maxcc, &gain, &max_per,
iLBCdec_inst->prevResidual,
lag, iLBCdec_inst->blockl, 60);
for (i=inlag-2;i<=inlag+3;i++) {
compCorr(&maxcc_comp, &gain_comp, &per,
iLBCdec_inst->prevResidual,
i, iLBCdec_inst->blockl, 60);
if (maxcc_comp>maxcc) {
maxcc=maxcc_comp;
gain=gain_comp;
lag=i;
max_per=per;
}
}
}
/* previous frame lost, use recorded lag and periodicity */
else {
lag=iLBCdec_inst->prevLag;
max_per=iLBCdec_inst->per;
}
/* downscaling */
use_gain=1.0;
if (iLBCdec_inst->consPLICount*iLBCdec_inst->blockl>320)
use_gain=(float)0.9;
else if (iLBCdec_inst->consPLICount*
iLBCdec_inst->blockl>2*320)
use_gain=(float)0.7;
else if (iLBCdec_inst->consPLICount*
iLBCdec_inst->blockl>3*320)
use_gain=(float)0.5;
else if (iLBCdec_inst->consPLICount*
iLBCdec_inst->blockl>4*320)
use_gain=(float)0.0;
/* mix noise and pitch repeatition */
ftmp=(float)sqrt(max_per);
if (ftmp>(float)0.7)
pitchfact=(float)1.0;
else if (ftmp>(float)0.4)
pitchfact=(ftmp-(float)0.4)/((float)0.7-(float)0.4);
else
pitchfact=0.0;
/* avoid repetition of same pitch cycle */
use_lag=lag;
if (lag<80) {
use_lag=2*lag;
}
/* compute concealed residual */
energy = 0.0;
for (i=0; i<iLBCdec_inst->blockl; i++) {
/* noise component */
iLBCdec_inst->seed=(iLBCdec_inst->seed*69069L+1) &
(0x80000000L-1);
randlag = 50 + ((signed long) iLBCdec_inst->seed)%70;
pick = i - randlag;
if (pick < 0) {
randvec[i] =
iLBCdec_inst->prevResidual[
iLBCdec_inst->blockl+pick];
} else {
randvec[i] = randvec[pick];
}
/* pitch repeatition component */
pick = i - use_lag;
if (pick < 0) {
PLCresidual[i] =
iLBCdec_inst->prevResidual[
iLBCdec_inst->blockl+pick];
} else {
PLCresidual[i] = PLCresidual[pick];
}
/* mix random and periodicity component */
if (i<80)
PLCresidual[i] = use_gain*(pitchfact *
PLCresidual[i] +
((float)1.0 - pitchfact) * randvec[i]);
else if (i<160)
PLCresidual[i] = (float)0.95*use_gain*(pitchfact *
PLCresidual[i] +
((float)1.0 - pitchfact) * randvec[i]);
else
PLCresidual[i] = (float)0.9*use_gain*(pitchfact *
PLCresidual[i] +
((float)1.0 - pitchfact) * randvec[i]);
energy += PLCresidual[i] * PLCresidual[i];
}
/* less than 30 dB, use only noise */
if (sqrt(energy/(float)iLBCdec_inst->blockl) < 30.0) {
gain=0.0;
for (i=0; i<iLBCdec_inst->blockl; i++) {
PLCresidual[i] = randvec[i];
}
}
/* use old LPC */
memcpy(PLClpc,iLBCdec_inst->prevLpc,
(LPC_FILTERORDER+1)*sizeof(float));
}
/* no packet loss, copy input */
else {
memcpy(PLCresidual, decresidual,
iLBCdec_inst->blockl*sizeof(float));
memcpy(PLClpc, lpc, (LPC_FILTERORDER+1)*sizeof(float));
iLBCdec_inst->consPLICount = 0;
}
/* update state */
if (PLI) {
iLBCdec_inst->prevLag = lag;
iLBCdec_inst->per=max_per;
}
iLBCdec_inst->prevPLI = PLI;
memcpy(iLBCdec_inst->prevLpc, PLClpc,
(LPC_FILTERORDER+1)*sizeof(float));
memcpy(iLBCdec_inst->prevResidual, PLCresidual,
iLBCdec_inst->blockl*sizeof(float));
}

32
codecs/ilbc/doCPLC.h Normal file
View File

@@ -0,0 +1,32 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
doCPLC.h
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#ifndef __iLBC_DOLPC_H
#define __iLBC_DOLPC_H
void doThePLC(
float *PLCresidual, /* (o) concealed residual */
float *PLClpc, /* (o) concealed LP parameters */
int PLI, /* (i) packet loss indicator
0 - no PL, 1 = PL */
float *decresidual, /* (i) decoded residual */
float *lpc, /* (i) decoded LPC (only used for no PL) */
int inlag, /* (i) pitch lag */
iLBC_Dec_Inst_t *iLBCdec_inst
/* (i/o) decoder instance */
);
#endif

665
codecs/ilbc/enhancer.c Normal file
View File

@@ -0,0 +1,665 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
enhancer.c
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#include <math.h>
#include <string.h>
#include "iLBC_define.h"
#include "enhancer.h"
#include "constants.h"
#include "filter.h"
/*----------------------------------------------------------------*
* Find index in array such that the array element with said
* index is the element of said array closest to "value"
* according to the squared-error criterion
*---------------------------------------------------------------*/
static void NearestNeighbor(
int *index, /* (o) index of array element closest
to value */
float *array, /* (i) data array */
float value,/* (i) value */
int arlength/* (i) dimension of data array */
){
int i;
float bestcrit,crit;
crit=array[0]-value;
bestcrit=crit*crit;
*index=0;
for (i=1; i<arlength; i++) {
crit=array[i]-value;
crit=crit*crit;
if (crit<bestcrit) {
bestcrit=crit;
*index=i;
}
}
}
/*----------------------------------------------------------------*
* compute cross correlation between sequences
*---------------------------------------------------------------*/
static void mycorr1(
float* corr, /* (o) correlation of seq1 and seq2 */
float* seq1, /* (i) first sequence */
int dim1, /* (i) dimension first seq1 */
const float *seq2, /* (i) second sequence */
int dim2 /* (i) dimension seq2 */
){
int i,j;
for (i=0; i<=dim1-dim2; i++) {
corr[i]=0.0;
for (j=0; j<dim2; j++) {
corr[i] += seq1[i+j] * seq2[j];
}
}
}
/*----------------------------------------------------------------*
* upsample finite array assuming zeros outside bounds
*---------------------------------------------------------------*/
static void enh_upsample(
float* useq1, /* (o) upsampled output sequence */
float* seq1,/* (i) unupsampled sequence */
int dim1, /* (i) dimension seq1 */
int hfl /* (i) polyphase filter length=2*hfl+1 */
){
float *pu,*ps;
int i,j,k,q,filterlength,hfl2;
const float *polyp[ENH_UPS0]; /* pointers to
polyphase columns */
const float *pp;
/* define pointers for filter */
filterlength=2*hfl+1;
if ( filterlength > dim1 ) {
hfl2=(int) (dim1/2);
for (j=0; j<ENH_UPS0; j++) {
polyp[j]=polyphaserTbl+j*filterlength+hfl-hfl2;
}
hfl=hfl2;
filterlength=2*hfl+1;
}
else {
for (j=0; j<ENH_UPS0; j++) {
polyp[j]=polyphaserTbl+j*filterlength;
}
}
/* filtering: filter overhangs left side of sequence */
pu=useq1;
for (i=hfl; i<filterlength; i++) {
for (j=0; j<ENH_UPS0; j++) {
*pu=0.0;
pp = polyp[j];
ps = seq1+i;
for (k=0; k<=i; k++) {
*pu += *ps-- * *pp++;
}
pu++;
}
}
/* filtering: simple convolution=inner products */
for (i=filterlength; i<dim1; i++) {
for (j=0;j<ENH_UPS0; j++){
*pu=0.0;
pp = polyp[j];
ps = seq1+i;
for (k=0; k<filterlength; k++) {
*pu += *ps-- * *pp++;
}
pu++;
}
}
/* filtering: filter overhangs right side of sequence */
for (q=1; q<=hfl; q++) {
for (j=0; j<ENH_UPS0; j++) {
*pu=0.0;
pp = polyp[j]+q;
ps = seq1+dim1-1;
for (k=0; k<filterlength-q; k++) {
*pu += *ps-- * *pp++;
}
pu++;
}
}
}
/*----------------------------------------------------------------*
* find segment starting near idata+estSegPos that has highest
* correlation with idata+centerStartPos through
* idata+centerStartPos+ENH_BLOCKL-1 segment is found at a
* resolution of ENH_UPSO times the original of the original
* sampling rate
*---------------------------------------------------------------*/
static void refiner(
float *seg, /* (o) segment array */
float *updStartPos, /* (o) updated start point */
float* idata, /* (i) original data buffer */
int idatal, /* (i) dimension of idata */
int centerStartPos, /* (i) beginning center segment */
float estSegPos,/* (i) estimated beginning other segment */
float period /* (i) estimated pitch period */
){
int estSegPosRounded,searchSegStartPos,searchSegEndPos,corrdim;
int tloc,tloc2,i,st,en,fraction;
float vect[ENH_VECTL],corrVec[ENH_CORRDIM],maxv;
float corrVecUps[ENH_CORRDIM*ENH_UPS0];
/* defining array bounds */
estSegPosRounded=(int)(estSegPos - 0.5);
searchSegStartPos=estSegPosRounded-ENH_SLOP;
if (searchSegStartPos<0) {
searchSegStartPos=0;
}
searchSegEndPos=estSegPosRounded+ENH_SLOP;
if (searchSegEndPos+ENH_BLOCKL >= idatal) {
searchSegEndPos=idatal-ENH_BLOCKL-1;
}
corrdim=searchSegEndPos-searchSegStartPos+1;
/* compute upsampled correlation (corr33) and find
location of max */
mycorr1(corrVec,idata+searchSegStartPos,
corrdim+ENH_BLOCKL-1,idata+centerStartPos,ENH_BLOCKL);
enh_upsample(corrVecUps,corrVec,corrdim,ENH_FL0);
tloc=0; maxv=corrVecUps[0];
for (i=1; i<ENH_UPS0*corrdim; i++) {
if (corrVecUps[i]>maxv) {
tloc=i;
maxv=corrVecUps[i];
}
}
/* make vector can be upsampled without ever running outside
bounds */
*updStartPos= (float)searchSegStartPos +
(float)tloc/(float)ENH_UPS0+(float)1.0;
tloc2=(int)(tloc/ENH_UPS0);
if (tloc>tloc2*ENH_UPS0) {
tloc2++;
}
st=searchSegStartPos+tloc2-ENH_FL0;
if (st<0) {
memset(vect,0,-st*sizeof(float));
memcpy(&vect[-st],idata, (ENH_VECTL+st)*sizeof(float));
}
else {
en=st+ENH_VECTL;
if (en>idatal) {
memcpy(vect, &idata[st],
(ENH_VECTL-(en-idatal))*sizeof(float));
memset(&vect[ENH_VECTL-(en-idatal)], 0,
(en-idatal)*sizeof(float));
}
else {
memcpy(vect, &idata[st], ENH_VECTL*sizeof(float));
}
}
fraction=tloc2*ENH_UPS0-tloc;
/* compute the segment (this is actually a convolution) */
mycorr1(seg,vect,ENH_VECTL,polyphaserTbl+(2*ENH_FL0+1)*fraction,
2*ENH_FL0+1);
}
/*----------------------------------------------------------------*
* find the smoothed output data
*---------------------------------------------------------------*/
static void smath(
float *odata, /* (o) smoothed output */
float *sseq,/* (i) said second sequence of waveforms */
int hl, /* (i) 2*hl+1 is sseq dimension */
float alpha0/* (i) max smoothing energy fraction */
){
int i,k;
float w00,w10,w11,A,B,C,*psseq,err,errs;
float surround[BLOCKL_MAX]; /* shape contributed by other than
current */
float wt[2*ENH_HL+1]; /* waveform weighting to get
surround shape */
float denom;
/* create shape of contribution from all waveforms except the
current one */
for (i=1; i<=2*hl+1; i++) {
wt[i-1] = (float)0.5*(1 - (float)cos(2*PI*i/(2*hl+2)));
}
wt[hl]=0.0; /* for clarity, not used */
for (i=0; i<ENH_BLOCKL; i++) {
surround[i]=sseq[i]*wt[0];
}
for (k=1; k<hl; k++) {
psseq=sseq+k*ENH_BLOCKL;
for(i=0;i<ENH_BLOCKL; i++) {
surround[i]+=psseq[i]*wt[k];
}
}
for (k=hl+1; k<=2*hl; k++) {
psseq=sseq+k*ENH_BLOCKL;
for(i=0;i<ENH_BLOCKL; i++) {
surround[i]+=psseq[i]*wt[k];
}
}
/* compute some inner products */
w00 = w10 = w11 = 0.0;
psseq=sseq+hl*ENH_BLOCKL; /* current block */
for (i=0; i<ENH_BLOCKL;i++) {
w00+=psseq[i]*psseq[i];
w11+=surround[i]*surround[i];
w10+=surround[i]*psseq[i];
}
if (fabs(w11) < 1.0) {
w11=1.0;
}
C = (float)sqrt( w00/w11);
/* first try enhancement without power-constraint */
errs=0.0;
psseq=sseq+hl*ENH_BLOCKL;
for (i=0; i<ENH_BLOCKL; i++) {
odata[i]=C*surround[i];
err=psseq[i]-odata[i];
errs+=err*err;
}
/* if constraint violated by first try, add constraint */
if (errs > alpha0 * w00) {
if ( w00 < 1) {
w00=1;
}
denom = (w11*w00-w10*w10)/(w00*w00);
if (denom > 0.0001) { /* eliminates numerical problems
for if smooth */
A = (float)sqrt( (alpha0- alpha0*alpha0/4)/denom);
B = -alpha0/2 - A * w10/w00;
B = B+1;
}
else { /* essentially no difference between cycles;
smoothing not needed */
A= 0.0;
B= 1.0;
}
/* create smoothed sequence */
psseq=sseq+hl*ENH_BLOCKL;
for (i=0; i<ENH_BLOCKL; i++) {
odata[i]=A*surround[i]+B*psseq[i];
}
}
}
/*----------------------------------------------------------------*
* get the pitch-synchronous sample sequence
*---------------------------------------------------------------*/
static void getsseq(
float *sseq, /* (o) the pitch-synchronous sequence */
float *idata, /* (i) original data */
int idatal, /* (i) dimension of data */
int centerStartPos, /* (i) where current block starts */
float *period, /* (i) rough-pitch-period array */
float *plocs, /* (i) where periods of period array
are taken */
int periodl, /* (i) dimension period array */
int hl /* (i) 2*hl+1 is the number of sequences */
){
int i,centerEndPos,q;
float blockStartPos[2*ENH_HL+1];
int lagBlock[2*ENH_HL+1];
float plocs2[ENH_PLOCSL];
float *psseq;
centerEndPos=centerStartPos+ENH_BLOCKL-1;
/* present */
NearestNeighbor(lagBlock+hl,plocs,
(float)0.5*(centerStartPos+centerEndPos),periodl);
blockStartPos[hl]=(float)centerStartPos;
psseq=sseq+ENH_BLOCKL*hl;
memcpy(psseq, idata+centerStartPos, ENH_BLOCKL*sizeof(float));
/* past */
for (q=hl-1; q>=0; q--) {
blockStartPos[q]=blockStartPos[q+1]-period[lagBlock[q+1]];
NearestNeighbor(lagBlock+q,plocs,
blockStartPos[q]+
ENH_BLOCKL_HALF-period[lagBlock[q+1]], periodl);
if (blockStartPos[q]-ENH_OVERHANG>=0) {
refiner(sseq+q*ENH_BLOCKL, blockStartPos+q, idata,
idatal, centerStartPos, blockStartPos[q],
period[lagBlock[q+1]]);
} else {
psseq=sseq+q*ENH_BLOCKL;
memset(psseq, 0, ENH_BLOCKL*sizeof(float));
}
}
/* future */
for (i=0; i<periodl; i++) {
plocs2[i]=plocs[i]-period[i];
}
for (q=hl+1; q<=2*hl; q++) {
NearestNeighbor(lagBlock+q,plocs2,
blockStartPos[q-1]+ENH_BLOCKL_HALF,periodl);
blockStartPos[q]=blockStartPos[q-1]+period[lagBlock[q]];
if (blockStartPos[q]+ENH_BLOCKL+ENH_OVERHANG<idatal) {
refiner(sseq+ENH_BLOCKL*q, blockStartPos+q, idata,
idatal, centerStartPos, blockStartPos[q],
period[lagBlock[q]]);
}
else {
psseq=sseq+q*ENH_BLOCKL;
memset(psseq, 0, ENH_BLOCKL*sizeof(float));
}
}
}
/*----------------------------------------------------------------*
* perform enhancement on idata+centerStartPos through
* idata+centerStartPos+ENH_BLOCKL-1
*---------------------------------------------------------------*/
static void enhancer(
float *odata, /* (o) smoothed block, dimension blockl */
float *idata, /* (i) data buffer used for enhancing */
int idatal, /* (i) dimension idata */
int centerStartPos, /* (i) first sample current block
within idata */
float alpha0, /* (i) max correction-energy-fraction
(in [0,1]) */
float *period, /* (i) pitch period array */
float *plocs, /* (i) locations where period array
values valid */
int periodl /* (i) dimension of period and plocs */
){
float sseq[(2*ENH_HL+1)*ENH_BLOCKL];
/* get said second sequence of segments */
getsseq(sseq,idata,idatal,centerStartPos,period,
plocs,periodl,ENH_HL);
/* compute the smoothed output from said second sequence */
smath(odata,sseq,ENH_HL,alpha0);
}
/*----------------------------------------------------------------*
* cross correlation
*---------------------------------------------------------------*/
float xCorrCoef(
float *target, /* (i) first array */
float *regressor, /* (i) second array */
int subl /* (i) dimension arrays */
){
int i;
float ftmp1, ftmp2;
ftmp1 = 0.0;
ftmp2 = 0.0;
for (i=0; i<subl; i++) {
ftmp1 += target[i]*regressor[i];
ftmp2 += regressor[i]*regressor[i];
}
if (ftmp1 > 0.0) {
return (float)(ftmp1*ftmp1/ftmp2);
}
else {
return (float)0.0;
}
}
/*----------------------------------------------------------------*
* interface for enhancer
*---------------------------------------------------------------*/
int enhancerInterface(
float *out, /* (o) enhanced signal */
float *in, /* (i) unenhanced signal */
iLBC_Dec_Inst_t *iLBCdec_inst /* (i) buffers etc */
){
float *enh_buf, *enh_period;
int iblock, isample;
int lag=0, ilag, i, ioffset;
float cc, maxcc;
float ftmp1, ftmp2;
float *inPtr, *enh_bufPtr1, *enh_bufPtr2;
float plc_pred[ENH_BLOCKL];
float lpState[6], downsampled[(ENH_NBLOCKS*ENH_BLOCKL+120)/2];
int inLen=ENH_NBLOCKS*ENH_BLOCKL+120;
int start, plc_blockl, inlag;
enh_buf=iLBCdec_inst->enh_buf;
enh_period=iLBCdec_inst->enh_period;
memmove(enh_buf, &enh_buf[iLBCdec_inst->blockl],
(ENH_BUFL-iLBCdec_inst->blockl)*sizeof(float));
memcpy(&enh_buf[ENH_BUFL-iLBCdec_inst->blockl], in,
iLBCdec_inst->blockl*sizeof(float));
if (iLBCdec_inst->mode==30)
plc_blockl=ENH_BLOCKL;
else
plc_blockl=40;
/* when 20 ms frame, move processing one block */
ioffset=0;
if (iLBCdec_inst->mode==20) ioffset=1;
i=3-ioffset;
memmove(enh_period, &enh_period[i],
(ENH_NBLOCKS_TOT-i)*sizeof(float));
/* Set state information to the 6 samples right before
the samples to be downsampled. */
memcpy(lpState,
enh_buf+(ENH_NBLOCKS_EXTRA+ioffset)*ENH_BLOCKL-126,
6*sizeof(float));
/* Down sample a factor 2 to save computations */
DownSample(enh_buf+(ENH_NBLOCKS_EXTRA+ioffset)*ENH_BLOCKL-120,
lpFilt_coefsTbl, inLen-ioffset*ENH_BLOCKL,
lpState, downsampled);
/* Estimate the pitch in the down sampled domain. */
for (iblock = 0; iblock<ENH_NBLOCKS-ioffset; iblock++) {
lag = 10;
maxcc = xCorrCoef(downsampled+60+iblock*
ENH_BLOCKL_HALF, downsampled+60+iblock*
ENH_BLOCKL_HALF-lag, ENH_BLOCKL_HALF);
for (ilag=11; ilag<60; ilag++) {
cc = xCorrCoef(downsampled+60+iblock*
ENH_BLOCKL_HALF, downsampled+60+iblock*
ENH_BLOCKL_HALF-ilag, ENH_BLOCKL_HALF);
if (cc > maxcc) {
maxcc = cc;
lag = ilag;
}
}
/* Store the estimated lag in the non-downsampled domain */
enh_period[iblock+ENH_NBLOCKS_EXTRA+ioffset] = (float)lag*2;
}
/* PLC was performed on the previous packet */
if (iLBCdec_inst->prev_enh_pl==1) {
inlag=(int)enh_period[ENH_NBLOCKS_EXTRA+ioffset];
lag = inlag-1;
maxcc = xCorrCoef(in, in+lag, plc_blockl);
for (ilag=inlag; ilag<=inlag+1; ilag++) {
cc = xCorrCoef(in, in+ilag, plc_blockl);
if (cc > maxcc) {
maxcc = cc;
lag = ilag;
}
}
enh_period[ENH_NBLOCKS_EXTRA+ioffset-1]=(float)lag;
/* compute new concealed residual for the old lookahead,
mix the forward PLC with a backward PLC from
the new frame */
inPtr=&in[lag-1];
enh_bufPtr1=&plc_pred[plc_blockl-1];
if (lag>plc_blockl) {
start=plc_blockl;
} else {
start=lag;
}
for (isample = start; isample>0; isample--) {
*enh_bufPtr1-- = *inPtr--;
}
enh_bufPtr2=&enh_buf[ENH_BUFL-1-iLBCdec_inst->blockl];
for (isample = (plc_blockl-1-lag); isample>=0; isample--)
{
*enh_bufPtr1-- = *enh_bufPtr2--;
}
/* limit energy change */
ftmp2=0.0;
ftmp1=0.0;
for (i=0;i<plc_blockl;i++) {
ftmp2+=enh_buf[ENH_BUFL-1-iLBCdec_inst->blockl-i]*
enh_buf[ENH_BUFL-1-iLBCdec_inst->blockl-i];
ftmp1+=plc_pred[i]*plc_pred[i];
}
ftmp1=(float)sqrt(ftmp1/(float)plc_blockl);
ftmp2=(float)sqrt(ftmp2/(float)plc_blockl);
if (ftmp1>(float)2.0*ftmp2 && ftmp1>0.0) {
for (i=0;i<plc_blockl-10;i++) {
plc_pred[i]*=(float)2.0*ftmp2/ftmp1;
}
for (i=plc_blockl-10;i<plc_blockl;i++) {
plc_pred[i]*=(float)(i-plc_blockl+10)*
((float)1.0-(float)2.0*ftmp2/ftmp1)/(float)(10)+
(float)2.0*ftmp2/ftmp1;
}
}
enh_bufPtr1=&enh_buf[ENH_BUFL-1-iLBCdec_inst->blockl];
for (i=0; i<plc_blockl; i++) {
ftmp1 = (float) (i+1) / (float) (plc_blockl+1);
*enh_bufPtr1 *= ftmp1;
*enh_bufPtr1 += ((float)1.0-ftmp1)*
plc_pred[plc_blockl-1-i];
enh_bufPtr1--;
}
}
if (iLBCdec_inst->mode==20) {
/* Enhancer with 40 samples delay */
for (iblock = 0; iblock<2; iblock++) {
enhancer(out+iblock*ENH_BLOCKL, enh_buf,
ENH_BUFL, (5+iblock)*ENH_BLOCKL+40,
ENH_ALPHA0, enh_period, enh_plocsTbl,
ENH_NBLOCKS_TOT);
}
} else if (iLBCdec_inst->mode==30) {
/* Enhancer with 80 samples delay */
for (iblock = 0; iblock<3; iblock++) {
enhancer(out+iblock*ENH_BLOCKL, enh_buf,
ENH_BUFL, (4+iblock)*ENH_BLOCKL,
ENH_ALPHA0, enh_period, enh_plocsTbl,
ENH_NBLOCKS_TOT);
}
}
return (lag*2);
}

33
codecs/ilbc/enhancer.h Normal file
View File

@@ -0,0 +1,33 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
enhancer.h
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#ifndef __ENHANCER_H
#define __ENHANCER_H
#include "iLBC_define.h"
float xCorrCoef(
float *target, /* (i) first array */
float *regressor, /* (i) second array */
int subl /* (i) dimension arrays */
);
int enhancerInterface(
float *out, /* (o) the enhanced recidual signal */
float *in, /* (i) the recidual signal to enhance */
iLBC_Dec_Inst_t *iLBCdec_inst
/* (i/o) the decoder state structure */
);
#endif

168
codecs/ilbc/filter.c Normal file
View File

@@ -0,0 +1,168 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
filter.c
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#include "iLBC_define.h"
#include "filter.h"
/*----------------------------------------------------------------*
* all-pole filter
*---------------------------------------------------------------*/
void AllPoleFilter(
float *InOut, /* (i/o) on entrance InOut[-orderCoef] to
InOut[-1] contain the state of the
filter (delayed samples). InOut[0] to
InOut[lengthInOut-1] contain the filter
input, on en exit InOut[-orderCoef] to
InOut[-1] is unchanged and InOut[0] to
InOut[lengthInOut-1] contain filtered
samples */
float *Coef,/* (i) filter coefficients, Coef[0] is assumed
to be 1.0 */
int lengthInOut,/* (i) number of input/output samples */
int orderCoef /* (i) number of filter coefficients */
){
int n,k;
for(n=0;n<lengthInOut;n++){
for(k=1;k<=orderCoef;k++){
*InOut -= Coef[k]*InOut[-k];
}
InOut++;
}
}
/*----------------------------------------------------------------*
* all-zero filter
*---------------------------------------------------------------*/
void AllZeroFilter(
float *In, /* (i) In[0] to In[lengthInOut-1] contain
filter input samples */
float *Coef,/* (i) filter coefficients (Coef[0] is assumed
to be 1.0) */
int lengthInOut,/* (i) number of input/output samples */
int orderCoef, /* (i) number of filter coefficients */
float *Out /* (i/o) on entrance Out[-orderCoef] to Out[-1]
contain the filter state, on exit Out[0]
to Out[lengthInOut-1] contain filtered
samples */
){
int n,k;
for(n=0;n<lengthInOut;n++){
*Out = Coef[0]*In[0];
for(k=1;k<=orderCoef;k++){
*Out += Coef[k]*In[-k];
}
Out++;
In++;
}
}
/*----------------------------------------------------------------*
* pole-zero filter
*---------------------------------------------------------------*/
void ZeroPoleFilter(
float *In, /* (i) In[0] to In[lengthInOut-1] contain
filter input samples In[-orderCoef] to
In[-1] contain state of all-zero
section */
float *ZeroCoef,/* (i) filter coefficients for all-zero
section (ZeroCoef[0] is assumed to
be 1.0) */
float *PoleCoef,/* (i) filter coefficients for all-pole section
(ZeroCoef[0] is assumed to be 1.0) */
int lengthInOut,/* (i) number of input/output samples */
int orderCoef, /* (i) number of filter coefficients */
float *Out /* (i/o) on entrance Out[-orderCoef] to Out[-1]
contain state of all-pole section. On
exit Out[0] to Out[lengthInOut-1]
contain filtered samples */
){
AllZeroFilter(In,ZeroCoef,lengthInOut,orderCoef,Out);
AllPoleFilter(Out,PoleCoef,lengthInOut,orderCoef);
}
/*----------------------------------------------------------------*
* downsample (LP filter and decimation)
*---------------------------------------------------------------*/
void DownSample (
float *In, /* (i) input samples */
float *Coef, /* (i) filter coefficients */
int lengthIn, /* (i) number of input samples */
float *state, /* (i) filter state */
float *Out /* (o) downsampled output */
){
float o;
float *Out_ptr = Out;
float *Coef_ptr, *In_ptr;
float *state_ptr;
int i, j, stop;
/* LP filter and decimate at the same time */
for (i = DELAY_DS; i < lengthIn; i+=FACTOR_DS)
{
Coef_ptr = &Coef[0];
In_ptr = &In[i];
state_ptr = &state[FILTERORDER_DS-2];
o = (float)0.0;
stop = (i < FILTERORDER_DS) ? i + 1 : FILTERORDER_DS;
for (j = 0; j < stop; j++)
{
o += *Coef_ptr++ * (*In_ptr--);
}
for (j = i + 1; j < FILTERORDER_DS; j++)
{
o += *Coef_ptr++ * (*state_ptr--);
}
*Out_ptr++ = o;
}
/* Get the last part (use zeros as input for the future) */
for (i=(lengthIn+FACTOR_DS); i<(lengthIn+DELAY_DS);
i+=FACTOR_DS) {
o=(float)0.0;
if (i<lengthIn) {
Coef_ptr = &Coef[0];
In_ptr = &In[i];
for (j=0; j<FILTERORDER_DS; j++) {
o += *Coef_ptr++ * (*Out_ptr--);
}
} else {
Coef_ptr = &Coef[i-lengthIn];
In_ptr = &In[lengthIn-1];
for (j=0; j<FILTERORDER_DS-(i-lengthIn); j++) {
o += *Coef_ptr++ * (*In_ptr--);
}
}
*Out_ptr++ = o;
}
}

73
codecs/ilbc/filter.h Normal file
View File

@@ -0,0 +1,73 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
filter.h
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#ifndef __iLBC_FILTER_H
#define __iLBC_FILTER_H
void AllPoleFilter(
float *InOut, /* (i/o) on entrance InOut[-orderCoef] to
InOut[-1] contain the state of the
filter (delayed samples). InOut[0] to
InOut[lengthInOut-1] contain the filter
input, on en exit InOut[-orderCoef] to
InOut[-1] is unchanged and InOut[0] to
InOut[lengthInOut-1] contain filtered
samples */
float *Coef,/* (i) filter coefficients, Coef[0] is assumed
to be 1.0 */
int lengthInOut,/* (i) number of input/output samples */
int orderCoef /* (i) number of filter coefficients */
);
void AllZeroFilter(
float *In, /* (i) In[0] to In[lengthInOut-1] contain
filter input samples */
float *Coef,/* (i) filter coefficients (Coef[0] is assumed
to be 1.0) */
int lengthInOut,/* (i) number of input/output samples */
int orderCoef, /* (i) number of filter coefficients */
float *Out /* (i/o) on entrance Out[-orderCoef] to Out[-1]
contain the filter state, on exit Out[0]
to Out[lengthInOut-1] contain filtered
samples */
);
void ZeroPoleFilter(
float *In, /* (i) In[0] to In[lengthInOut-1] contain filter
input samples In[-orderCoef] to In[-1]
contain state of all-zero section */
float *ZeroCoef,/* (i) filter coefficients for all-zero
section (ZeroCoef[0] is assumed to
be 1.0) */
float *PoleCoef,/* (i) filter coefficients for all-pole section
(ZeroCoef[0] is assumed to be 1.0) */
int lengthInOut,/* (i) number of input/output samples */
int orderCoef, /* (i) number of filter coefficients */
float *Out /* (i/o) on entrance Out[-orderCoef] to Out[-1]
contain state of all-pole section. On
exit Out[0] to Out[lengthInOut-1]
contain filtered samples */
);
void DownSample (
float *In, /* (i) input samples */
float *Coef, /* (i) filter coefficients */
int lengthIn, /* (i) number of input samples */
float *state, /* (i) filter state */
float *Out /* (o) downsampled output */
);
#endif

107
codecs/ilbc/gainquant.c Normal file
View File

@@ -0,0 +1,107 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
gainquant.c
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#include <string.h>
#include <math.h>
#include "constants.h"
#include "gainquant.h"
#include "filter.h"
/*----------------------------------------------------------------*
* quantizer for the gain in the gain-shape coding of residual
*---------------------------------------------------------------*/
float gainquant(/* (o) quantized gain value */
float in, /* (i) gain value */
float maxIn,/* (i) maximum of gain value */
int cblen, /* (i) number of quantization indices */
int *index /* (o) quantization index */
){
int i, tindex;
float minmeasure,measure, *cb, scale;
/* ensure a lower bound on the scaling factor */
scale=maxIn;
if (scale<0.1) {
scale=(float)0.1;
}
/* select the quantization table */
if (cblen == 8) {
cb = gain_sq3Tbl;
} else if (cblen == 16) {
cb = gain_sq4Tbl;
} else {
cb = gain_sq5Tbl;
}
/* select the best index in the quantization table */
minmeasure=10000000.0;
tindex=0;
for (i=0; i<cblen; i++) {
measure=(in-scale*cb[i])*(in-scale*cb[i]);
if (measure<minmeasure) {
tindex=i;
minmeasure=measure;
}
}
*index=tindex;
/* return the quantized value */
return scale*cb[tindex];
}
/*----------------------------------------------------------------*
* decoder for quantized gains in the gain-shape coding of
* residual
*---------------------------------------------------------------*/
float gaindequant( /* (o) quantized gain value */
int index, /* (i) quantization index */
float maxIn,/* (i) maximum of unquantized gain */
int cblen /* (i) number of quantization indices */
){
float scale;
/* obtain correct scale factor */
scale=(float)fabs(maxIn);
if (scale<0.1) {
scale=(float)0.1;
}
/* select the quantization table and return the decoded value */
if (cblen==8) {
return scale*gain_sq3Tbl[index];
} else if (cblen==16) {
return scale*gain_sq4Tbl[index];
}
else if (cblen==32) {
return scale*gain_sq5Tbl[index];
}
return 0.0;
}

31
codecs/ilbc/gainquant.h Normal file
View File

@@ -0,0 +1,31 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
gainquant.h
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#ifndef __iLBC_GAINQUANT_H
#define __iLBC_GAINQUANT_H
float gainquant(/* (o) quantized gain value */
float in, /* (i) gain value */
float maxIn,/* (i) maximum of gain value */
int cblen, /* (i) number of quantization indices */
int *index /* (o) quantization index */
);
float gaindequant( /* (o) quantized gain value */
int index, /* (i) quantization index */
float maxIn,/* (i) maximum of unquantized gain */
int cblen /* (i) number of quantization indices */
);
#endif

181
codecs/ilbc/getCBvec.c Normal file
View File

@@ -0,0 +1,181 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
getCBvec.c
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#include "iLBC_define.h"
#include "getCBvec.h"
#include "constants.h"
#include <string.h>
/*----------------------------------------------------------------*
* Construct codebook vector for given index.
*---------------------------------------------------------------*/
void getCBvec(
float *cbvec, /* (o) Constructed codebook vector */
float *mem, /* (i) Codebook buffer */
int index, /* (i) Codebook index */
int lMem, /* (i) Length of codebook buffer */
int cbveclen/* (i) Codebook vector length */
){
int j, k, n, memInd, sFilt;
float tmpbuf[CB_MEML];
int base_size;
int ilow, ihigh;
float alfa, alfa1;
/* Determine size of codebook sections */
base_size=lMem-cbveclen+1;
if (cbveclen==SUBL) {
base_size+=cbveclen/2;
}
/* No filter -> First codebook section */
if (index<lMem-cbveclen+1) {
/* first non-interpolated vectors */
k=index+cbveclen;
/* get vector */
memcpy(cbvec, mem+lMem-k, cbveclen*sizeof(float));
} else if (index < base_size) {
k=2*(index-(lMem-cbveclen+1))+cbveclen;
ihigh=k/2;
ilow=ihigh-5;
/* Copy first noninterpolated part */
memcpy(cbvec, mem+lMem-k/2, ilow*sizeof(float));
/* interpolation */
alfa1=(float)0.2;
alfa=0.0;
for (j=ilow; j<ihigh; j++) {
cbvec[j]=((float)1.0-alfa)*mem[lMem-k/2+j]+
alfa*mem[lMem-k+j];
alfa+=alfa1;
}
/* Copy second noninterpolated part */
memcpy(cbvec+ihigh, mem+lMem-k+ihigh,
(cbveclen-ihigh)*sizeof(float));
}
/* Higher codebbok section based on filtering */
else {
/* first non-interpolated vectors */
if (index-base_size<lMem-cbveclen+1) {
float tempbuff2[CB_MEML+CB_FILTERLEN+1];
float *pos;
float *pp, *pp1;
memset(tempbuff2, 0,
CB_HALFFILTERLEN*sizeof(float));
memcpy(&tempbuff2[CB_HALFFILTERLEN], mem,
lMem*sizeof(float));
memset(&tempbuff2[lMem+CB_HALFFILTERLEN], 0,
(CB_HALFFILTERLEN+1)*sizeof(float));
k=index-base_size+cbveclen;
sFilt=lMem-k;
memInd=sFilt+1-CB_HALFFILTERLEN;
/* do filtering */
pos=cbvec;
memset(pos, 0, cbveclen*sizeof(float));
for (n=0; n<cbveclen; n++) {
pp=&tempbuff2[memInd+n+CB_HALFFILTERLEN];
pp1=&cbfiltersTbl[CB_FILTERLEN-1];
for (j=0; j<CB_FILTERLEN; j++) {
(*pos)+=(*pp++)*(*pp1--);
}
pos++;
}
}
/* interpolated vectors */
else {
float tempbuff2[CB_MEML+CB_FILTERLEN+1];
float *pos;
float *pp, *pp1;
int i;
memset(tempbuff2, 0,
CB_HALFFILTERLEN*sizeof(float));
memcpy(&tempbuff2[CB_HALFFILTERLEN], mem,
lMem*sizeof(float));
memset(&tempbuff2[lMem+CB_HALFFILTERLEN], 0,
(CB_HALFFILTERLEN+1)*sizeof(float));
k=2*(index-base_size-
(lMem-cbveclen+1))+cbveclen;
sFilt=lMem-k;
memInd=sFilt+1-CB_HALFFILTERLEN;
/* do filtering */
pos=&tmpbuf[sFilt];
memset(pos, 0, k*sizeof(float));
for (i=0; i<k; i++) {
pp=&tempbuff2[memInd+i+CB_HALFFILTERLEN];
pp1=&cbfiltersTbl[CB_FILTERLEN-1];
for (j=0; j<CB_FILTERLEN; j++) {
(*pos)+=(*pp++)*(*pp1--);
}
pos++;
}
ihigh=k/2;
ilow=ihigh-5;
/* Copy first noninterpolated part */
memcpy(cbvec, tmpbuf+lMem-k/2,
ilow*sizeof(float));
/* interpolation */
alfa1=(float)0.2;
alfa=0.0;
for (j=ilow; j<ihigh; j++) {
cbvec[j]=((float)1.0-alfa)*
tmpbuf[lMem-k/2+j]+alfa*tmpbuf[lMem-k+j];
alfa+=alfa1;
}
/* Copy second noninterpolated part */
memcpy(cbvec+ihigh, tmpbuf+lMem-k+ihigh,
(cbveclen-ihigh)*sizeof(float));
}
}
}

28
codecs/ilbc/getCBvec.h Normal file
View File

@@ -0,0 +1,28 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
getCBvec.h
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#ifndef __iLBC_GETCBVEC_H
#define __iLBC_GETCBVEC_H
void getCBvec(
float *cbvec, /* (o) Constructed codebook vector */
float *mem, /* (i) Codebook buffer */
int index, /* (i) Codebook index */
int lMem, /* (i) Length of codebook buffer */
int cbveclen/* (i) Codebook vector length */
);
#endif

308
codecs/ilbc/helpfun.c Normal file
View File

@@ -0,0 +1,308 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
helpfun.c
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#include <math.h>
#include "iLBC_define.h"
#include "helpfun.h"
#include "constants.h"
/*----------------------------------------------------------------*
* calculation of auto correlation
*---------------------------------------------------------------*/
void autocorr(
float *r, /* (o) autocorrelation vector */
const float *x, /* (i) data vector */
int N, /* (i) length of data vector */
int order /* largest lag for calculated
autocorrelations */
){
int lag, n;
float sum;
for (lag = 0; lag <= order; lag++) {
sum = 0;
for (n = 0; n < N - lag; n++) {
sum += x[n] * x[n+lag];
}
r[lag] = sum;
}
}
/*----------------------------------------------------------------*
* window multiplication
*---------------------------------------------------------------*/
void window(
float *z, /* (o) the windowed data */
const float *x, /* (i) the original data vector */
const float *y, /* (i) the window */
int N /* (i) length of all vectors */
){
int i;
for (i = 0; i < N; i++) {
z[i] = x[i] * y[i];
}
}
/*----------------------------------------------------------------*
* levinson-durbin solution for lpc coefficients
*---------------------------------------------------------------*/
void levdurb(
float *a, /* (o) lpc coefficient vector starting
with 1.0 */
float *k, /* (o) reflection coefficients */
float *r, /* (i) autocorrelation vector */
int order /* (i) order of lpc filter */
){
float sum, alpha;
int m, m_h, i;
a[0] = 1.0;
if (r[0] < EPS) { /* if r[0] <= 0, set LPC coeff. to zero */
for (i = 0; i < order; i++) {
k[i] = 0;
a[i+1] = 0;
}
} else {
a[1] = k[0] = -r[1]/r[0];
alpha = r[0] + r[1] * k[0];
for (m = 1; m < order; m++){
sum = r[m + 1];
for (i = 0; i < m; i++){
sum += a[i+1] * r[m - i];
}
k[m] = -sum / alpha;
alpha += k[m] * sum;
m_h = (m + 1) >> 1;
for (i = 0; i < m_h; i++){
sum = a[i+1] + k[m] * a[m - i];
a[m - i] += k[m] * a[i+1];
a[i+1] = sum;
}
a[m+1] = k[m];
}
}
}
/*----------------------------------------------------------------*
* interpolation between vectors
*---------------------------------------------------------------*/
void interpolate(
float *out, /* (o) the interpolated vector */
float *in1, /* (i) the first vector for the
interpolation */
float *in2, /* (i) the second vector for the
interpolation */
float coef, /* (i) interpolation weights */
int length /* (i) length of all vectors */
){
int i;
float invcoef;
invcoef = (float)1.0 - coef;
for (i = 0; i < length; i++) {
out[i] = coef * in1[i] + invcoef * in2[i];
}
}
/*----------------------------------------------------------------*
* lpc bandwidth expansion
*---------------------------------------------------------------*/
void bwexpand(
float *out, /* (o) the bandwidth expanded lpc
coefficients */
float *in, /* (i) the lpc coefficients before bandwidth
expansion */
float coef, /* (i) the bandwidth expansion factor */
int length /* (i) the length of lpc coefficient vectors */
){
int i;
float chirp;
chirp = coef;
out[0] = in[0];
for (i = 1; i < length; i++) {
out[i] = chirp * in[i];
chirp *= coef;
}
}
/*----------------------------------------------------------------*
* vector quantization
*---------------------------------------------------------------*/
void vq(
float *Xq, /* (o) the quantized vector */
int *index, /* (o) the quantization index */
const float *CB,/* (i) the vector quantization codebook */
float *X, /* (i) the vector to quantize */
int n_cb, /* (i) the number of vectors in the codebook */
int dim /* (i) the dimension of all vectors */
){
int i, j;
int pos, minindex;
float dist, tmp, mindist;
pos = 0;
mindist = FLOAT_MAX;
minindex = 0;
for (j = 0; j < n_cb; j++) {
dist = X[0] - CB[pos];
dist *= dist;
for (i = 1; i < dim; i++) {
tmp = X[i] - CB[pos + i];
dist += tmp*tmp;
}
if (dist < mindist) {
mindist = dist;
minindex = j;
}
pos += dim;
}
for (i = 0; i < dim; i++) {
Xq[i] = CB[minindex*dim + i];
}
*index = minindex;
}
/*----------------------------------------------------------------*
* split vector quantization
*---------------------------------------------------------------*/
void SplitVQ(
float *qX, /* (o) the quantized vector */
int *index, /* (o) a vector of indexes for all vector
codebooks in the split */
float *X, /* (i) the vector to quantize */
const float *CB,/* (i) the quantizer codebook */
int nsplit, /* the number of vector splits */
const int *dim, /* the dimension of X and qX */
const int *cbsize /* the number of vectors in the codebook */
){
int cb_pos, X_pos, i;
cb_pos = 0;
X_pos= 0;
for (i = 0; i < nsplit; i++) {
vq(qX + X_pos, index + i, CB + cb_pos, X + X_pos,
cbsize[i], dim[i]);
X_pos += dim[i];
cb_pos += dim[i] * cbsize[i];
}
}
/*----------------------------------------------------------------*
* scalar quantization
*---------------------------------------------------------------*/
void sort_sq(
float *xq, /* (o) the quantized value */
int *index, /* (o) the quantization index */
float x, /* (i) the value to quantize */
const float *cb,/* (i) the quantization codebook */
int cb_size /* (i) the size of the quantization codebook */
){
int i;
if (x <= cb[0]) {
*index = 0;
*xq = cb[0];
} else {
i = 0;
while ((x > cb[i]) && i < cb_size - 1) {
i++;
}
if (x > ((cb[i] + cb[i - 1])/2)) {
*index = i;
*xq = cb[i];
} else {
*index = i - 1;
*xq = cb[i - 1];
}
}
}
/*----------------------------------------------------------------*
* check for stability of lsf coefficients
*---------------------------------------------------------------*/
int LSF_check( /* (o) 1 for stable lsf vectors and 0 for
nonstable ones */
float *lsf, /* (i) a table of lsf vectors */
int dim, /* (i) the dimension of each lsf vector */
int NoAn /* (i) the number of lsf vectors in the
table */
){
int k,n,m, Nit=2, change=0,pos;
float tmp;
static float eps=(float)0.039; /* 50 Hz */
static float eps2=(float)0.0195;
static float maxlsf=(float)3.14; /* 4000 Hz */
static float minlsf=(float)0.01; /* 0 Hz */
/* LSF separation check*/
for (n=0; n<Nit; n++) { /* Run through a couple of times */
for (m=0; m<NoAn; m++) { /* Number of analyses per frame */
for (k=0; k<(dim-1); k++) {
pos=m*dim+k;
if ((lsf[pos+1]-lsf[pos])<eps) {
if (lsf[pos+1]<lsf[pos]) {
tmp=lsf[pos+1];
lsf[pos+1]= lsf[pos]+eps2;
lsf[pos]= lsf[pos+1]-eps2;
} else {
lsf[pos]-=eps2;
lsf[pos+1]+=eps2;
}
change=1;
}
if (lsf[pos]<minlsf) {
lsf[pos]=minlsf;
change=1;
}
if (lsf[pos]>maxlsf) {
lsf[pos]=maxlsf;
change=1;
}
}
}
}
return change;
}

101
codecs/ilbc/helpfun.h Normal file
View File

@@ -0,0 +1,101 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
helpfun.h
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#ifndef __iLBC_HELPFUN_H
#define __iLBC_HELPFUN_H
void autocorr(
float *r, /* (o) autocorrelation vector */
const float *x, /* (i) data vector */
int N, /* (i) length of data vector */
int order /* largest lag for calculated
autocorrelations */
);
void window(
float *z, /* (o) the windowed data */
const float *x, /* (i) the original data vector */
const float *y, /* (i) the window */
int N /* (i) length of all vectors */
);
void levdurb(
float *a, /* (o) lpc coefficient vector starting
with 1.0 */
float *k, /* (o) reflection coefficients */
float *r, /* (i) autocorrelation vector */
int order /* (i) order of lpc filter */
);
void interpolate(
float *out, /* (o) the interpolated vector */
float *in1, /* (i) the first vector for the
interpolation */
float *in2, /* (i) the second vector for the
interpolation */
float coef, /* (i) interpolation weights */
int length /* (i) length of all vectors */
);
void bwexpand(
float *out, /* (o) the bandwidth expanded lpc
coefficients */
float *in, /* (i) the lpc coefficients before bandwidth
expansion */
float coef, /* (i) the bandwidth expansion factor */
int length /* (i) the length of lpc coefficient vectors */
);
void vq(
float *Xq, /* (o) the quantized vector */
int *index, /* (o) the quantization index */
const float *CB,/* (i) the vector quantization codebook */
float *X, /* (i) the vector to quantize */
int n_cb, /* (i) the number of vectors in the codebook */
int dim /* (i) the dimension of all vectors */
);
void SplitVQ(
float *qX, /* (o) the quantized vector */
int *index, /* (o) a vector of indexes for all vector
codebooks in the split */
float *X, /* (i) the vector to quantize */
const float *CB,/* (i) the quantizer codebook */
int nsplit, /* the number of vector splits */
const int *dim, /* the dimension of X and qX */
const int *cbsize /* the number of vectors in the codebook */
);
void sort_sq(
float *xq, /* (o) the quantized value */
int *index, /* (o) the quantization index */
float x, /* (i) the value to quantize */
const float *cb,/* (i) the quantization codebook */
int cb_size /* (i) the size of the quantization codebook */
);
int LSF_check( /* (o) 1 for stable lsf vectors and 0 for
nonstable ones */
float *lsf, /* (i) a table of lsf vectors */
int dim, /* (i) the dimension of each lsf vector */
int NoAn /* (i) the number of lsf vectors in the
table */
);
#endif

60
codecs/ilbc/hpInput.c Normal file
View File

@@ -0,0 +1,60 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
hpInput.c
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#include "constants.h"
#include "hpInput.h"
/*----------------------------------------------------------------*
* Input high-pass filter
*---------------------------------------------------------------*/
void hpInput(
float *In, /* (i) vector to filter */
int len, /* (i) length of vector to filter */
float *Out, /* (o) the resulting filtered vector */
float *mem /* (i/o) the filter state */
){
int i;
float *pi, *po;
/* all-zero section*/
pi = &In[0];
po = &Out[0];
for (i=0; i<len; i++) {
*po = hpi_zero_coefsTbl[0] * (*pi);
*po += hpi_zero_coefsTbl[1] * mem[0];
*po += hpi_zero_coefsTbl[2] * mem[1];
mem[1] = mem[0];
mem[0] = *pi;
po++;
pi++;
}
/* all-pole section*/
po = &Out[0];
for (i=0; i<len; i++) {
*po -= hpi_pole_coefsTbl[1] * mem[2];
*po -= hpi_pole_coefsTbl[2] * mem[3];
mem[3] = mem[2];
mem[2] = *po;
po++;
}
}

27
codecs/ilbc/hpInput.h Normal file
View File

@@ -0,0 +1,27 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
hpInput.h
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#ifndef __iLBC_HPINPUT_H
#define __iLBC_HPINPUT_H
void hpInput(
float *In, /* (i) vector to filter */
int len, /* (i) length of vector to filter */
float *Out, /* (o) the resulting filtered vector */
float *mem /* (i/o) the filter state */
);
#endif

59
codecs/ilbc/hpOutput.c Normal file
View File

@@ -0,0 +1,59 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
hpOutput.c
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#include "constants.h"
#include "hpOutput.h"
/*----------------------------------------------------------------*
* Output high-pass filter
*---------------------------------------------------------------*/
void hpOutput(
float *In, /* (i) vector to filter */
int len,/* (i) length of vector to filter */
float *Out, /* (o) the resulting filtered vector */
float *mem /* (i/o) the filter state */
){
int i;
float *pi, *po;
/* all-zero section*/
pi = &In[0];
po = &Out[0];
for (i=0; i<len; i++) {
*po = hpo_zero_coefsTbl[0] * (*pi);
*po += hpo_zero_coefsTbl[1] * mem[0];
*po += hpo_zero_coefsTbl[2] * mem[1];
mem[1] = mem[0];
mem[0] = *pi;
po++;
pi++;
}
/* all-pole section*/
po = &Out[0];
for (i=0; i<len; i++) {
*po -= hpo_pole_coefsTbl[1] * mem[2];
*po -= hpo_pole_coefsTbl[2] * mem[3];
mem[3] = mem[2];
mem[2] = *po;
po++;
}
}

25
codecs/ilbc/hpOutput.h Normal file
View File

@@ -0,0 +1,25 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
hpOutput.h
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#ifndef __iLBC_HPOUTPUT_H
#define __iLBC_HPOUTPUT_H
void hpOutput(
float *In, /* (i) vector to filter */
int len,/* (i) length of vector to filter */
float *Out, /* (o) the resulting filtered vector */
float *mem /* (i/o) the filter state */
);
#endif

108
codecs/ilbc/iCBConstruct.c Normal file
View File

@@ -0,0 +1,108 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
iCBConstruct.c
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#include <math.h>
#include "iLBC_define.h"
#include "iCBConstruct.h"
#include "gainquant.h"
#include "getCBvec.h"
/*----------------------------------------------------------------*
* Convert the codebook indexes to make the search easier
*---------------------------------------------------------------*/
void index_conv_enc(
int *index /* (i/o) Codebook indexes */
){
int k;
for (k=1; k<CB_NSTAGES; k++) {
if ((index[k]>=108)&&(index[k]<172)) {
index[k]-=64;
} else if (index[k]>=236) {
index[k]-=128;
} else {
/* ERROR */
}
}
}
void index_conv_dec(
int *index /* (i/o) Codebook indexes */
){
int k;
for (k=1; k<CB_NSTAGES; k++) {
if ((index[k]>=44)&&(index[k]<108)) {
index[k]+=64;
} else if ((index[k]>=108)&&(index[k]<128)) {
index[k]+=128;
} else {
/* ERROR */
}
}
}
/*----------------------------------------------------------------*
* Construct decoded vector from codebook and gains.
*---------------------------------------------------------------*/
void iCBConstruct(
float *decvector, /* (o) Decoded vector */
int *index, /* (i) Codebook indices */
int *gain_index,/* (i) Gain quantization indices */
float *mem, /* (i) Buffer for codevector construction */
int lMem, /* (i) Length of buffer */
int veclen, /* (i) Length of vector */
int nStages /* (i) Number of codebook stages */
){
int j,k;
float gain[CB_NSTAGES];
float cbvec[SUBL];
/* gain de-quantization */
gain[0] = gaindequant(gain_index[0], 1.0, 32);
if (nStages > 1) {
gain[1] = gaindequant(gain_index[1],
(float)fabs(gain[0]), 16);
}
if (nStages > 2) {
gain[2] = gaindequant(gain_index[2],
(float)fabs(gain[1]), 8);
}
/* codebook vector construction and construction of
total vector */
getCBvec(cbvec, mem, index[0], lMem, veclen);
for (j=0;j<veclen;j++){
decvector[j] = gain[0]*cbvec[j];
}
if (nStages > 1) {
for (k=1; k<nStages; k++) {
getCBvec(cbvec, mem, index[k], lMem, veclen);
for (j=0;j<veclen;j++) {
decvector[j] += gain[k]*cbvec[j];
}
}
}
}

View File

@@ -0,0 +1,38 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
iCBConstruct.h
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#ifndef __iLBC_ICBCONSTRUCT_H
#define __iLBC_ICBCONSTRUCT_H
void index_conv_enc(
int *index /* (i/o) Codebook indexes */
);
void index_conv_dec(
int *index /* (i/o) Codebook indexes */
);
void iCBConstruct(
float *decvector, /* (o) Decoded vector */
int *index, /* (i) Codebook indices */
int *gain_index,/* (i) Gain quantization indices */
float *mem, /* (i) Buffer for codevector construction */
int lMem, /* (i) Length of buffer */
int veclen, /* (i) Length of vector */
int nStages /* (i) Number of codebook stages */
);
#endif

480
codecs/ilbc/iCBSearch.c Normal file
View File

@@ -0,0 +1,480 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
iCBSearch.c
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#include <math.h>
#include <string.h>
#include "iLBC_define.h"
#include "iCBSearch.h"
#include "gainquant.h"
#include "createCB.h"
#include "filter.h"
#include "constants.h"
/*----------------------------------------------------------------*
* Search routine for codebook encoding and gain quantization.
*---------------------------------------------------------------*/
void iCBSearch(
iLBC_Enc_Inst_t *iLBCenc_inst,
/* (i) the encoder state structure */
int *index, /* (o) Codebook indices */
int *gain_index,/* (o) Gain quantization indices */
float *intarget,/* (i) Target vector for encoding */
float *mem, /* (i) Buffer for codebook construction */
int lMem, /* (i) Length of buffer */
int lTarget, /* (i) Length of vector */
int nStages, /* (i) Number of codebook stages */
float *weightDenum, /* (i) weighting filter coefficients */
float *weightState, /* (i) weighting filter state */
int block /* (i) the sub-block number */
){
int i, j, icount, stage, best_index, range, counter;
float max_measure, gain, measure, crossDot, ftmp;
float gains[CB_NSTAGES];
float target[SUBL];
int base_index, sInd, eInd, base_size;
int sIndAug=0, eIndAug=0;
float buf[CB_MEML+SUBL+2*LPC_FILTERORDER];
float invenergy[CB_EXPAND*128], energy[CB_EXPAND*128];
float *pp, *ppi=0, *ppo=0, *ppe=0;
float cbvectors[CB_MEML];
float tene, cene, cvec[SUBL];
float aug_vec[SUBL];
memset(cvec,0,SUBL*sizeof(float));
/* Determine size of codebook sections */
base_size=lMem-lTarget+1;
if (lTarget==SUBL) {
base_size=lMem-lTarget+1+lTarget/2;
}
/* setup buffer for weighting */
memcpy(buf,weightState,sizeof(float)*LPC_FILTERORDER);
memcpy(buf+LPC_FILTERORDER,mem,lMem*sizeof(float));
memcpy(buf+LPC_FILTERORDER+lMem,intarget,lTarget*sizeof(float));
/* weighting */
AllPoleFilter(buf+LPC_FILTERORDER, weightDenum,
lMem+lTarget, LPC_FILTERORDER);
/* Construct the codebook and target needed */
memcpy(target, buf+LPC_FILTERORDER+lMem, lTarget*sizeof(float));
tene=0.0;
for (i=0; i<lTarget; i++) {
tene+=target[i]*target[i];
}
/* Prepare search over one more codebook section. This section
is created by filtering the original buffer with a filter. */
filteredCBvecs(cbvectors, buf+LPC_FILTERORDER, lMem);
/* The Main Loop over stages */
for (stage=0; stage<nStages; stage++) {
range = search_rangeTbl[block][stage];
/* initialize search measure */
max_measure = (float)-10000000.0;
gain = (float)0.0;
best_index = 0;
/* Compute cross dot product between the target
and the CB memory */
crossDot=0.0;
pp=buf+LPC_FILTERORDER+lMem-lTarget;
for (j=0; j<lTarget; j++) {
crossDot += target[j]*(*pp++);
}
if (stage==0) {
/* Calculate energy in the first block of
'lTarget' sampels. */
ppe = energy;
ppi = buf+LPC_FILTERORDER+lMem-lTarget-1;
ppo = buf+LPC_FILTERORDER+lMem-1;
*ppe=0.0;
pp=buf+LPC_FILTERORDER+lMem-lTarget;
for (j=0; j<lTarget; j++) {
*ppe+=(*pp)*(*pp);
pp++;
}
if (*ppe>0.0) {
invenergy[0] = (float) 1.0 / (*ppe + EPS);
} else {
invenergy[0] = (float) 0.0;
}
ppe++;
measure=(float)-10000000.0;
if (crossDot > 0.0) {
measure = crossDot*crossDot*invenergy[0];
}
}
else {
measure = crossDot*crossDot*invenergy[0];
}
/* check if measure is better */
ftmp = crossDot*invenergy[0];
if ((measure>max_measure) && (fabs(ftmp)<CB_MAXGAIN)) {
best_index = 0;
max_measure = measure;
gain = ftmp;
}
/* loop over the main first codebook section,
full search */
for (icount=1; icount<range; icount++) {
/* calculate measure */
crossDot=0.0;
pp = buf+LPC_FILTERORDER+lMem-lTarget-icount;
for (j=0; j<lTarget; j++) {
crossDot += target[j]*(*pp++);
}
if (stage==0) {
*ppe++ = energy[icount-1] + (*ppi)*(*ppi) -
(*ppo)*(*ppo);
ppo--;
ppi--;
if (energy[icount]>0.0) {
invenergy[icount] =
(float)1.0/(energy[icount]+EPS);
} else {
invenergy[icount] = (float) 0.0;
}
measure=(float)-10000000.0;
if (crossDot > 0.0) {
measure = crossDot*crossDot*invenergy[icount];
}
}
else {
measure = crossDot*crossDot*invenergy[icount];
}
/* check if measure is better */
ftmp = crossDot*invenergy[icount];
if ((measure>max_measure) && (fabs(ftmp)<CB_MAXGAIN)) {
best_index = icount;
max_measure = measure;
gain = ftmp;
}
}
/* Loop over augmented part in the first codebook
* section, full search.
* The vectors are interpolated.
*/
if (lTarget==SUBL) {
/* Search for best possible cb vector and
compute the CB-vectors' energy. */
searchAugmentedCB(20, 39, stage, base_size-lTarget/2,
target, buf+LPC_FILTERORDER+lMem,
&max_measure, &best_index, &gain, energy,
invenergy);
}
/* set search range for following codebook sections */
base_index=best_index;
/* unrestricted search */
if (CB_RESRANGE == -1) {
sInd=0;
eInd=range-1;
sIndAug=20;
eIndAug=39;
}
/* restriced search around best index from first
codebook section */
else {
/* Initialize search indices */
sIndAug=0;
eIndAug=0;
sInd=base_index-CB_RESRANGE/2;
eInd=sInd+CB_RESRANGE;
if (lTarget==SUBL) {
if (sInd<0) {
sIndAug = 40 + sInd;
eIndAug = 39;
sInd=0;
} else if ( base_index < (base_size-20) ) {
if (eInd > range) {
sInd -= (eInd-range);
eInd = range;
}
} else { /* base_index >= (base_size-20) */
if (sInd < (base_size-20)) {
sIndAug = 20;
sInd = 0;
eInd = 0;
eIndAug = 19 + CB_RESRANGE;
if(eIndAug > 39) {
eInd = eIndAug-39;
eIndAug = 39;
}
} else {
sIndAug = 20 + sInd - (base_size-20);
eIndAug = 39;
sInd = 0;
eInd = CB_RESRANGE - (eIndAug-sIndAug+1);
}
}
} else { /* lTarget = 22 or 23 */
if (sInd < 0) {
eInd -= sInd;
sInd = 0;
}
if(eInd > range) {
sInd -= (eInd - range);
eInd = range;
}
}
}
/* search of higher codebook section */
/* index search range */
counter = sInd;
sInd += base_size;
eInd += base_size;
if (stage==0) {
ppe = energy+base_size;
*ppe=0.0;
pp=cbvectors+lMem-lTarget;
for (j=0; j<lTarget; j++) {
*ppe+=(*pp)*(*pp);
pp++;
}
ppi = cbvectors + lMem - 1 - lTarget;
ppo = cbvectors + lMem - 1;
for (j=0; j<(range-1); j++) {
*(ppe+1) = *ppe + (*ppi)*(*ppi) - (*ppo)*(*ppo);
ppo--;
ppi--;
ppe++;
}
}
/* loop over search range */
for (icount=sInd; icount<eInd; icount++) {
/* calculate measure */
crossDot=0.0;
pp=cbvectors + lMem - (counter++) - lTarget;
for (j=0;j<lTarget;j++) {
crossDot += target[j]*(*pp++);
}
if (energy[icount]>0.0) {
invenergy[icount] =(float)1.0/(energy[icount]+EPS);
} else {
invenergy[icount] =(float)0.0;
}
if (stage==0) {
measure=(float)-10000000.0;
if (crossDot > 0.0) {
measure = crossDot*crossDot*
invenergy[icount];
}
}
else {
measure = crossDot*crossDot*invenergy[icount];
}
/* check if measure is better */
ftmp = crossDot*invenergy[icount];
if ((measure>max_measure) && (fabs(ftmp)<CB_MAXGAIN)) {
best_index = icount;
max_measure = measure;
gain = ftmp;
}
}
/* Search the augmented CB inside the limited range. */
if ((lTarget==SUBL)&&(sIndAug!=0)) {
searchAugmentedCB(sIndAug, eIndAug, stage,
2*base_size-20, target, cbvectors+lMem,
&max_measure, &best_index, &gain, energy,
invenergy);
}
/* record best index */
index[stage] = best_index;
/* gain quantization */
if (stage==0){
if (gain<0.0){
gain = 0.0;
}
if (gain>CB_MAXGAIN) {
gain = (float)CB_MAXGAIN;
}
gain = gainquant(gain, 1.0, 32, &gain_index[stage]);
}
else {
if (stage==1) {
gain = gainquant(gain, (float)fabs(gains[stage-1]),
16, &gain_index[stage]);
} else {
gain = gainquant(gain, (float)fabs(gains[stage-1]),
8, &gain_index[stage]);
}
}
/* Extract the best (according to measure)
codebook vector */
if (lTarget==(STATE_LEN-iLBCenc_inst->state_short_len)) {
if (index[stage]<base_size) {
pp=buf+LPC_FILTERORDER+lMem-lTarget-index[stage];
} else {
pp=cbvectors+lMem-lTarget-
index[stage]+base_size;
}
} else {
if (index[stage]<base_size) {
if (index[stage]<(base_size-20)) {
pp=buf+LPC_FILTERORDER+lMem-
lTarget-index[stage];
} else {
createAugmentedVec(index[stage]-base_size+40,
buf+LPC_FILTERORDER+lMem,aug_vec);
pp=aug_vec;
}
} else {
int filterno, position;
filterno=index[stage]/base_size;
position=index[stage]-filterno*base_size;
if (position<(base_size-20)) {
pp=cbvectors+filterno*lMem-lTarget-
index[stage]+filterno*base_size;
} else {
createAugmentedVec(
index[stage]-(filterno+1)*base_size+40,
cbvectors+filterno*lMem,aug_vec);
pp=aug_vec;
}
}
}
/* Subtract the best codebook vector, according
to measure, from the target vector */
for (j=0;j<lTarget;j++) {
cvec[j] += gain*(*pp);
target[j] -= gain*(*pp++);
}
/* record quantized gain */
gains[stage]=gain;
}/* end of Main Loop. for (stage=0;... */
/* Gain adjustment for energy matching */
cene=0.0;
for (i=0; i<lTarget; i++) {
cene+=cvec[i]*cvec[i];
}
j=gain_index[0];
for (i=gain_index[0]; i<32; i++) {
ftmp=cene*gain_sq5Tbl[i]*gain_sq5Tbl[i];
if ((ftmp<(tene*gains[0]*gains[0])) &&
(gain_sq5Tbl[j]<(2.0*gains[0]))) {
j=i;
}
}
gain_index[0]=j;
}

35
codecs/ilbc/iCBSearch.h Normal file
View File

@@ -0,0 +1,35 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
iCBSearch.h
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#ifndef __iLBC_ICBSEARCH_H
#define __iLBC_ICBSEARCH_H
void iCBSearch(
iLBC_Enc_Inst_t *iLBCenc_inst,
/* (i) the encoder state structure */
int *index, /* (o) Codebook indices */
int *gain_index,/* (o) Gain quantization indices */
float *intarget,/* (i) Target vector for encoding */
float *mem, /* (i) Buffer for codebook construction */
int lMem, /* (i) Length of buffer */
int lTarget, /* (i) Length of vector */
int nStages, /* (i) Number of codebook stages */
float *weightDenum, /* (i) weighting filter coefficients */
float *weightState, /* (i) weighting filter state */
int block /* (i) the sub-block number */
);
#endif

619
codecs/ilbc/iLBC_decode.c Normal file
View File

@@ -0,0 +1,619 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
iLBC_decode.c
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#include <math.h>
#include <stdlib.h>
#include "iLBC_define.h"
#include "iLBC_decode.h"
#include "StateConstructW.h"
#include "LPCdecode.h"
#include "iCBConstruct.h"
#include "doCPLC.h"
#include "helpfun.h"
#include "constants.h"
#include "packing.h"
#include "string.h"
#include "enhancer.h"
#include "hpOutput.h"
#include "syntFilter.h"
/*----------------------------------------------------------------*
* Initiation of decoder instance.
*---------------------------------------------------------------*/
short initDecode( /* (o) Number of decoded
samples */
iLBC_Dec_Inst_t *iLBCdec_inst, /* (i/o) Decoder instance */
int mode, /* (i) frame size mode */
int use_enhancer /* (i) 1 to use enhancer
0 to run without
enhancer */
){
int i;
iLBCdec_inst->mode = mode;
if (mode==30) {
iLBCdec_inst->blockl = BLOCKL_30MS;
iLBCdec_inst->nsub = NSUB_30MS;
iLBCdec_inst->nasub = NASUB_30MS;
iLBCdec_inst->lpc_n = LPC_N_30MS;
iLBCdec_inst->no_of_bytes = NO_OF_BYTES_30MS;
iLBCdec_inst->no_of_words = NO_OF_WORDS_30MS;
iLBCdec_inst->state_short_len=STATE_SHORT_LEN_30MS;
/* ULP init */
iLBCdec_inst->ULP_inst=&ULP_30msTbl;
}
else if (mode==20) {
iLBCdec_inst->blockl = BLOCKL_20MS;
iLBCdec_inst->nsub = NSUB_20MS;
iLBCdec_inst->nasub = NASUB_20MS;
iLBCdec_inst->lpc_n = LPC_N_20MS;
iLBCdec_inst->no_of_bytes = NO_OF_BYTES_20MS;
iLBCdec_inst->no_of_words = NO_OF_WORDS_20MS;
iLBCdec_inst->state_short_len=STATE_SHORT_LEN_20MS;
/* ULP init */
iLBCdec_inst->ULP_inst=&ULP_20msTbl;
}
else {
exit(2);
}
memset(iLBCdec_inst->syntMem, 0,
LPC_FILTERORDER*sizeof(float));
memcpy((*iLBCdec_inst).lsfdeqold, lsfmeanTbl,
LPC_FILTERORDER*sizeof(float));
memset(iLBCdec_inst->old_syntdenum, 0,
((LPC_FILTERORDER + 1)*NSUB_MAX)*sizeof(float));
for (i=0; i<NSUB_MAX; i++)
iLBCdec_inst->old_syntdenum[i*(LPC_FILTERORDER+1)]=1.0;
iLBCdec_inst->last_lag = 20;
iLBCdec_inst->prevLag = 120;
iLBCdec_inst->per = 0.0;
iLBCdec_inst->consPLICount = 0;
iLBCdec_inst->prevPLI = 0;
iLBCdec_inst->prevLpc[0] = 1.0;
memset(iLBCdec_inst->prevLpc+1,0,
LPC_FILTERORDER*sizeof(float));
memset(iLBCdec_inst->prevResidual, 0, BLOCKL_MAX*sizeof(float));
iLBCdec_inst->seed=777;
memset(iLBCdec_inst->hpomem, 0, 4*sizeof(float));
iLBCdec_inst->use_enhancer = use_enhancer;
memset(iLBCdec_inst->enh_buf, 0, ENH_BUFL*sizeof(float));
for (i=0;i<ENH_NBLOCKS_TOT;i++)
iLBCdec_inst->enh_period[i]=(float)40.0;
iLBCdec_inst->prev_enh_pl = 0;
return (iLBCdec_inst->blockl);
}
/*----------------------------------------------------------------*
* frame residual decoder function (subrutine to iLBC_decode)
*---------------------------------------------------------------*/
static void Decode(
iLBC_Dec_Inst_t *iLBCdec_inst, /* (i/o) the decoder state
structure */
float *decresidual, /* (o) decoded residual frame */
int start, /* (i) location of start
state */
int idxForMax, /* (i) codebook index for the
maximum value */
int *idxVec, /* (i) codebook indexes for the
samples in the start
state */
float *syntdenum, /* (i) the decoded synthesis
filter coefficients */
int *cb_index, /* (i) the indexes for the
adaptive codebook */
int *gain_index, /* (i) the indexes for the
corresponding gains */
int *extra_cb_index, /* (i) the indexes for the
adaptive codebook part
of start state */
int *extra_gain_index, /* (i) the indexes for the
corresponding gains */
int state_first /* (i) 1 if non adaptive part
of start state comes
first 0 if that part
comes last */
){
float reverseDecresidual[BLOCKL_MAX], mem[CB_MEML];
int k, meml_gotten, Nfor, Nback, i;
int diff, start_pos;
int subcount, subframe;
diff = STATE_LEN - iLBCdec_inst->state_short_len;
if (state_first == 1) {
start_pos = (start-1)*SUBL;
} else {
start_pos = (start-1)*SUBL + diff;
}
/* decode scalar part of start state */
StateConstructW(idxForMax, idxVec,
&syntdenum[(start-1)*(LPC_FILTERORDER+1)],
&decresidual[start_pos], iLBCdec_inst->state_short_len);
if (state_first) { /* put adaptive part in the end */
/* setup memory */
memset(mem, 0,
(CB_MEML-iLBCdec_inst->state_short_len)*sizeof(float));
memcpy(mem+CB_MEML-iLBCdec_inst->state_short_len,
decresidual+start_pos,
iLBCdec_inst->state_short_len*sizeof(float));
/* construct decoded vector */
iCBConstruct(
&decresidual[start_pos+iLBCdec_inst->state_short_len],
extra_cb_index, extra_gain_index, mem+CB_MEML-stMemLTbl,
stMemLTbl, diff, CB_NSTAGES);
}
else {/* put adaptive part in the beginning */
/* create reversed vectors for prediction */
for (k=0; k<diff; k++) {
reverseDecresidual[k] =
decresidual[(start+1)*SUBL-1-
(k+iLBCdec_inst->state_short_len)];
}
/* setup memory */
meml_gotten = iLBCdec_inst->state_short_len;
for (k=0; k<meml_gotten; k++){
mem[CB_MEML-1-k] = decresidual[start_pos + k];
}
memset(mem, 0, (CB_MEML-k)*sizeof(float));
/* construct decoded vector */
iCBConstruct(reverseDecresidual, extra_cb_index,
extra_gain_index, mem+CB_MEML-stMemLTbl, stMemLTbl,
diff, CB_NSTAGES);
/* get decoded residual from reversed vector */
for (k=0; k<diff; k++) {
decresidual[start_pos-1-k] = reverseDecresidual[k];
}
}
/* counter for predicted sub-frames */
subcount=0;
/* forward prediction of sub-frames */
Nfor = iLBCdec_inst->nsub-start-1;
if ( Nfor > 0 ){
/* setup memory */
memset(mem, 0, (CB_MEML-STATE_LEN)*sizeof(float));
memcpy(mem+CB_MEML-STATE_LEN, decresidual+(start-1)*SUBL,
STATE_LEN*sizeof(float));
/* loop over sub-frames to encode */
for (subframe=0; subframe<Nfor; subframe++) {
/* construct decoded vector */
iCBConstruct(&decresidual[(start+1+subframe)*SUBL],
cb_index+subcount*CB_NSTAGES,
gain_index+subcount*CB_NSTAGES,
mem+CB_MEML-memLfTbl[subcount],
memLfTbl[subcount], SUBL, CB_NSTAGES);
/* update memory */
memmove(mem, mem+SUBL, (CB_MEML-SUBL)*sizeof(float));
memcpy(mem+CB_MEML-SUBL,
&decresidual[(start+1+subframe)*SUBL],
SUBL*sizeof(float));
subcount++;
}
}
/* backward prediction of sub-frames */
Nback = start-1;
if ( Nback > 0 ) {
/* setup memory */
meml_gotten = SUBL*(iLBCdec_inst->nsub+1-start);
if ( meml_gotten > CB_MEML ) {
meml_gotten=CB_MEML;
}
for (k=0; k<meml_gotten; k++) {
mem[CB_MEML-1-k] = decresidual[(start-1)*SUBL + k];
}
memset(mem, 0, (CB_MEML-k)*sizeof(float));
/* loop over subframes to decode */
for (subframe=0; subframe<Nback; subframe++) {
/* construct decoded vector */
iCBConstruct(&reverseDecresidual[subframe*SUBL],
cb_index+subcount*CB_NSTAGES,
gain_index+subcount*CB_NSTAGES,
mem+CB_MEML-memLfTbl[subcount], memLfTbl[subcount],
SUBL, CB_NSTAGES);
/* update memory */
memmove(mem, mem+SUBL, (CB_MEML-SUBL)*sizeof(float));
memcpy(mem+CB_MEML-SUBL,
&reverseDecresidual[subframe*SUBL],
SUBL*sizeof(float));
subcount++;
}
/* get decoded residual from reversed vector */
for (i=0; i<SUBL*Nback; i++)
decresidual[SUBL*Nback - i - 1] =
reverseDecresidual[i];
}
}
/*----------------------------------------------------------------*
* main decoder function
*---------------------------------------------------------------*/
void iLBC_decode(
float *decblock, /* (o) decoded signal block */
unsigned char *bytes, /* (i) encoded signal bits */
iLBC_Dec_Inst_t *iLBCdec_inst, /* (i/o) the decoder state
structure */
int mode /* (i) 0: bad packet, PLC,
1: normal */
){
float data[BLOCKL_MAX];
float lsfdeq[LPC_FILTERORDER*LPC_N_MAX];
float PLCresidual[BLOCKL_MAX], PLClpc[LPC_FILTERORDER + 1];
float zeros[BLOCKL_MAX], one[LPC_FILTERORDER + 1];
int k, i, start, idxForMax, pos, lastpart, ulp;
int lag, ilag;
float cc, maxcc;
int idxVec[STATE_LEN];
int check;
int gain_index[NASUB_MAX*CB_NSTAGES],
extra_gain_index[CB_NSTAGES];
int cb_index[CB_NSTAGES*NASUB_MAX], extra_cb_index[CB_NSTAGES];
int lsf_i[LSF_NSPLIT*LPC_N_MAX];
int state_first;
int last_bit;
unsigned char *pbytes;
float weightdenum[(LPC_FILTERORDER + 1)*NSUB_MAX];
int order_plus_one;
float syntdenum[NSUB_MAX*(LPC_FILTERORDER+1)];
float decresidual[BLOCKL_MAX];
if (mode>0) { /* the data are good */
/* decode data */
pbytes=bytes;
pos=0;
/* Set everything to zero before decoding */
for (k=0; k<LSF_NSPLIT*LPC_N_MAX; k++) {
lsf_i[k]=0;
}
start=0;
state_first=0;
idxForMax=0;
for (k=0; k<iLBCdec_inst->state_short_len; k++) {
idxVec[k]=0;
}
for (k=0; k<CB_NSTAGES; k++) {
extra_cb_index[k]=0;
}
for (k=0; k<CB_NSTAGES; k++) {
extra_gain_index[k]=0;
}
for (i=0; i<iLBCdec_inst->nasub; i++) {
for (k=0; k<CB_NSTAGES; k++) {
cb_index[i*CB_NSTAGES+k]=0;
}
}
for (i=0; i<iLBCdec_inst->nasub; i++) {
for (k=0; k<CB_NSTAGES; k++) {
gain_index[i*CB_NSTAGES+k]=0;
}
}
/* loop over ULP classes */
for (ulp=0; ulp<3; ulp++) {
/* LSF */
for (k=0; k<LSF_NSPLIT*iLBCdec_inst->lpc_n; k++){
unpack( &pbytes, &lastpart,
iLBCdec_inst->ULP_inst->lsf_bits[k][ulp], &pos);
packcombine(&lsf_i[k], lastpart,
iLBCdec_inst->ULP_inst->lsf_bits[k][ulp]);
}
/* Start block info */
unpack( &pbytes, &lastpart,
iLBCdec_inst->ULP_inst->start_bits[ulp], &pos);
packcombine(&start, lastpart,
iLBCdec_inst->ULP_inst->start_bits[ulp]);
unpack( &pbytes, &lastpart,
iLBCdec_inst->ULP_inst->startfirst_bits[ulp], &pos);
packcombine(&state_first, lastpart,
iLBCdec_inst->ULP_inst->startfirst_bits[ulp]);
unpack( &pbytes, &lastpart,
iLBCdec_inst->ULP_inst->scale_bits[ulp], &pos);
packcombine(&idxForMax, lastpart,
iLBCdec_inst->ULP_inst->scale_bits[ulp]);
for (k=0; k<iLBCdec_inst->state_short_len; k++) {
unpack( &pbytes, &lastpart,
iLBCdec_inst->ULP_inst->state_bits[ulp], &pos);
packcombine(idxVec+k, lastpart,
iLBCdec_inst->ULP_inst->state_bits[ulp]);
}
/* 23/22 (20ms/30ms) sample block */
for (k=0; k<CB_NSTAGES; k++) {
unpack( &pbytes, &lastpart,
iLBCdec_inst->ULP_inst->extra_cb_index[k][ulp],
&pos);
packcombine(extra_cb_index+k, lastpart,
iLBCdec_inst->ULP_inst->extra_cb_index[k][ulp]);
}
for (k=0; k<CB_NSTAGES; k++) {
unpack( &pbytes, &lastpart,
iLBCdec_inst->ULP_inst->extra_cb_gain[k][ulp],
&pos);
packcombine(extra_gain_index+k, lastpart,
iLBCdec_inst->ULP_inst->extra_cb_gain[k][ulp]);
}
/* The two/four (20ms/30ms) 40 sample sub-blocks */
for (i=0; i<iLBCdec_inst->nasub; i++) {
for (k=0; k<CB_NSTAGES; k++) {
unpack( &pbytes, &lastpart,
iLBCdec_inst->ULP_inst->cb_index[i][k][ulp],
&pos);
packcombine(cb_index+i*CB_NSTAGES+k, lastpart,
iLBCdec_inst->ULP_inst->cb_index[i][k][ulp]);
}
}
for (i=0; i<iLBCdec_inst->nasub; i++) {
for (k=0; k<CB_NSTAGES; k++) {
unpack( &pbytes, &lastpart,
iLBCdec_inst->ULP_inst->cb_gain[i][k][ulp],
&pos);
packcombine(gain_index+i*CB_NSTAGES+k, lastpart,
iLBCdec_inst->ULP_inst->cb_gain[i][k][ulp]);
}
}
}
/* Extract last bit. If it is 1 this indicates an
empty/lost frame */
unpack( &pbytes, &last_bit, 1, &pos);
/* Check for bit errors or empty/lost frames */
if (start<1)
mode = 0;
if (iLBCdec_inst->mode==20 && start>3)
mode = 0;
if (iLBCdec_inst->mode==30 && start>5)
mode = 0;
if (last_bit==1)
mode = 0;
if (mode==1) { /* No bit errors was detected,
continue decoding */
/* adjust index */
index_conv_dec(cb_index);
/* decode the lsf */
SimplelsfDEQ(lsfdeq, lsf_i, iLBCdec_inst->lpc_n);
check=LSF_check(lsfdeq, LPC_FILTERORDER,
iLBCdec_inst->lpc_n);
DecoderInterpolateLSF(syntdenum, weightdenum,
lsfdeq, LPC_FILTERORDER, iLBCdec_inst);
Decode(iLBCdec_inst, decresidual, start, idxForMax,
idxVec, syntdenum, cb_index, gain_index,
extra_cb_index, extra_gain_index,
state_first);
/* preparing the plc for a future loss! */
doThePLC(PLCresidual, PLClpc, 0, decresidual,
syntdenum +
(LPC_FILTERORDER + 1)*(iLBCdec_inst->nsub - 1),
(*iLBCdec_inst).last_lag, iLBCdec_inst);
memcpy(decresidual, PLCresidual,
iLBCdec_inst->blockl*sizeof(float));
}
}
if (mode == 0) {
/* the data is bad (either a PLC call
* was made or a severe bit error was detected)
*/
/* packet loss conceal */
memset(zeros, 0, BLOCKL_MAX*sizeof(float));
one[0] = 1;
memset(one+1, 0, LPC_FILTERORDER*sizeof(float));
start=0;
doThePLC(PLCresidual, PLClpc, 1, zeros, one,
(*iLBCdec_inst).last_lag, iLBCdec_inst);
memcpy(decresidual, PLCresidual,
iLBCdec_inst->blockl*sizeof(float));
order_plus_one = LPC_FILTERORDER + 1;
for (i = 0; i < iLBCdec_inst->nsub; i++) {
memcpy(syntdenum+(i*order_plus_one), PLClpc,
order_plus_one*sizeof(float));
}
}
if (iLBCdec_inst->use_enhancer == 1) {
/* post filtering */
iLBCdec_inst->last_lag =
enhancerInterface(data, decresidual, iLBCdec_inst);
/* synthesis filtering */
if (iLBCdec_inst->mode==20) {
/* Enhancer has 40 samples delay */
i=0;
syntFilter(data + i*SUBL,
iLBCdec_inst->old_syntdenum +
(i+iLBCdec_inst->nsub-1)*(LPC_FILTERORDER+1),
SUBL, iLBCdec_inst->syntMem);
for (i=1; i < iLBCdec_inst->nsub; i++) {
syntFilter(data + i*SUBL,
syntdenum + (i-1)*(LPC_FILTERORDER+1),
SUBL, iLBCdec_inst->syntMem);
}
} else if (iLBCdec_inst->mode==30) {
/* Enhancer has 80 samples delay */
for (i=0; i < 2; i++) {
syntFilter(data + i*SUBL,
iLBCdec_inst->old_syntdenum +
(i+iLBCdec_inst->nsub-2)*(LPC_FILTERORDER+1),
SUBL, iLBCdec_inst->syntMem);
}
for (i=2; i < iLBCdec_inst->nsub; i++) {
syntFilter(data + i*SUBL,
syntdenum + (i-2)*(LPC_FILTERORDER+1), SUBL,
iLBCdec_inst->syntMem);
}
}
} else {
/* Find last lag */
lag = 20;
maxcc = xCorrCoef(&decresidual[BLOCKL_MAX-ENH_BLOCKL],
&decresidual[BLOCKL_MAX-ENH_BLOCKL-lag], ENH_BLOCKL);
for (ilag=21; ilag<120; ilag++) {
cc = xCorrCoef(&decresidual[BLOCKL_MAX-ENH_BLOCKL],
&decresidual[BLOCKL_MAX-ENH_BLOCKL-ilag],
ENH_BLOCKL);
if (cc > maxcc) {
maxcc = cc;
lag = ilag;
}
}
iLBCdec_inst->last_lag = lag;
/* copy data and run synthesis filter */
memcpy(data, decresidual,
iLBCdec_inst->blockl*sizeof(float));
for (i=0; i < iLBCdec_inst->nsub; i++) {
syntFilter(data + i*SUBL,
syntdenum + i*(LPC_FILTERORDER+1), SUBL,
iLBCdec_inst->syntMem);
}
}
/* high pass filtering on output if desired, otherwise
copy to out */
hpOutput(data, iLBCdec_inst->blockl,
decblock,iLBCdec_inst->hpomem);
/* memcpy(decblock,data,iLBCdec_inst->blockl*sizeof(float));*/
memcpy(iLBCdec_inst->old_syntdenum, syntdenum,
iLBCdec_inst->nsub*(LPC_FILTERORDER+1)*sizeof(float));
iLBCdec_inst->prev_enh_pl=0;
if (mode==0) { /* PLC was used */
iLBCdec_inst->prev_enh_pl=1;
}
}

40
codecs/ilbc/iLBC_decode.h Normal file
View File

@@ -0,0 +1,40 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
iLBC_decode.h
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#ifndef __iLBC_ILBCDECODE_H
#define __iLBC_ILBCDECODE_H
#include "iLBC_define.h"
short initDecode( /* (o) Number of decoded
samples */
iLBC_Dec_Inst_t *iLBCdec_inst, /* (i/o) Decoder instance */
int mode, /* (i) frame size mode */
int use_enhancer /* (i) 1 to use enhancer
0 to run without
enhancer */
);
void iLBC_decode(
float *decblock, /* (o) decoded signal block */
unsigned char *bytes, /* (i) encoded signal bits */
iLBC_Dec_Inst_t *iLBCdec_inst, /* (i/o) the decoder state
structure */
int mode /* (i) 0: bad packet, PLC,
1: normal */
);
#endif

201
codecs/ilbc/iLBC_define.h Normal file
View File

@@ -0,0 +1,201 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
iLBC_define.h
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#include <string.h>
#ifndef __iLBC_ILBCDEFINE_H
#define __iLBC_ILBCDEFINE_H
/* general codec settings */
#define FS (float)8000.0
#define BLOCKL_20MS 160
#define BLOCKL_30MS 240
#define BLOCKL_MAX 240
#define NSUB_20MS 4
#define NSUB_30MS 6
#define NSUB_MAX 6
#define NASUB_20MS 2
#define NASUB_30MS 4
#define NASUB_MAX 4
#define SUBL 40
#define STATE_LEN 80
#define STATE_SHORT_LEN_30MS 58
#define STATE_SHORT_LEN_20MS 57
/* LPC settings */
#define LPC_FILTERORDER 10
#define LPC_CHIRP_SYNTDENUM (float)0.9025
#define LPC_CHIRP_WEIGHTDENUM (float)0.4222
#define LPC_LOOKBACK 60
#define LPC_N_20MS 1
#define LPC_N_30MS 2
#define LPC_N_MAX 2
#define LPC_ASYMDIFF 20
#define LPC_BW (float)60.0
#define LPC_WN (float)1.0001
#define LSF_NSPLIT 3
#define LSF_NUMBER_OF_STEPS 4
#define LPC_HALFORDER (LPC_FILTERORDER/2)
/* cb settings */
#define CB_NSTAGES 3
#define CB_EXPAND 2
#define CB_MEML 147
#define CB_FILTERLEN 2*4
#define CB_HALFFILTERLEN 4
#define CB_RESRANGE 34
#define CB_MAXGAIN (float)1.3
/* enhancer */
#define ENH_BLOCKL 80 /* block length */
#define ENH_BLOCKL_HALF (ENH_BLOCKL/2)
#define ENH_HL 3 /* 2*ENH_HL+1 is number blocks
in said second sequence */
#define ENH_SLOP 2 /* max difference estimated and
correct pitch period */
#define ENH_PLOCSL 20 /* pitch-estimates and pitch-
locations buffer length */
#define ENH_OVERHANG 2
#define ENH_UPS0 4 /* upsampling rate */
#define ENH_FL0 3 /* 2*FLO+1 is the length of
each filter */
#define ENH_VECTL (ENH_BLOCKL+2*ENH_FL0)
#define ENH_CORRDIM (2*ENH_SLOP+1)
#define ENH_NBLOCKS (BLOCKL_MAX/ENH_BLOCKL)
#define ENH_NBLOCKS_EXTRA 5
#define ENH_NBLOCKS_TOT 8 /* ENH_NBLOCKS +
ENH_NBLOCKS_EXTRA */
#define ENH_BUFL (ENH_NBLOCKS_TOT)*ENH_BLOCKL
#define ENH_ALPHA0 (float)0.05
/* Down sampling */
#define FILTERORDER_DS 7
#define DELAY_DS 3
#define FACTOR_DS 2
/* bit stream defs */
#define NO_OF_BYTES_20MS 38
#define NO_OF_BYTES_30MS 50
#define NO_OF_WORDS_20MS 19
#define NO_OF_WORDS_30MS 25
#define STATE_BITS 3
#define BYTE_LEN 8
#define ULP_CLASSES 3
/* help parameters */
#define FLOAT_MAX (float)1.0e37
#define EPS (float)2.220446049250313e-016
#define PI (float)3.14159265358979323846
#define MIN_SAMPLE -32768
#define MAX_SAMPLE 32767
#define TWO_PI (float)6.283185307
#define PI2 (float)0.159154943
/* type definition encoder instance */
typedef struct iLBC_ULP_Inst_t_ {
int lsf_bits[6][ULP_CLASSES+2];
int start_bits[ULP_CLASSES+2];
int startfirst_bits[ULP_CLASSES+2];
int scale_bits[ULP_CLASSES+2];
int state_bits[ULP_CLASSES+2];
int extra_cb_index[CB_NSTAGES][ULP_CLASSES+2];
int extra_cb_gain[CB_NSTAGES][ULP_CLASSES+2];
int cb_index[NSUB_MAX][CB_NSTAGES][ULP_CLASSES+2];
int cb_gain[NSUB_MAX][CB_NSTAGES][ULP_CLASSES+2];
} iLBC_ULP_Inst_t;
/* type definition encoder instance */
typedef struct iLBC_Enc_Inst_t_ {
/* flag for frame size mode */
int mode;
/* basic parameters for different frame sizes */
int blockl;
int nsub;
int nasub;
int no_of_bytes, no_of_words;
int lpc_n;
int state_short_len;
const iLBC_ULP_Inst_t *ULP_inst;
/* analysis filter state */
float anaMem[LPC_FILTERORDER];
/* old lsf parameters for interpolation */
float lsfold[LPC_FILTERORDER];
float lsfdeqold[LPC_FILTERORDER];
/* signal buffer for LP analysis */
float lpc_buffer[LPC_LOOKBACK + BLOCKL_MAX];
/* state of input HP filter */
float hpimem[4];
} iLBC_Enc_Inst_t;
/* type definition decoder instance */
typedef struct iLBC_Dec_Inst_t_ {
/* flag for frame size mode */
int mode;
/* basic parameters for different frame sizes */
int blockl;
int nsub;
int nasub;
int no_of_bytes, no_of_words;
int lpc_n;
int state_short_len;
const iLBC_ULP_Inst_t *ULP_inst;
/* synthesis filter state */
float syntMem[LPC_FILTERORDER];
/* old LSF for interpolation */
float lsfdeqold[LPC_FILTERORDER];
/* pitch lag estimated in enhancer and used in PLC */
int last_lag;
/* PLC state information */
int prevLag, consPLICount, prevPLI, prev_enh_pl;
float prevLpc[LPC_FILTERORDER+1];
float prevResidual[NSUB_MAX*SUBL];
float per;
unsigned long seed;
/* previous synthesis filter parameters */
float old_syntdenum[(LPC_FILTERORDER + 1)*NSUB_MAX];
/* state of output HP filter */
float hpomem[4];
/* enhancer state information */
int use_enhancer;
float enh_buf[ENH_BUFL];
float enh_period[ENH_NBLOCKS_TOT];
} iLBC_Dec_Inst_t;
#endif

514
codecs/ilbc/iLBC_encode.c Normal file
View File

@@ -0,0 +1,514 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
iLBC_encode.c
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include "iLBC_define.h"
#include "iLBC_encode.h"
#include "LPCencode.h"
#include "FrameClassify.h"
#include "StateSearchW.h"
#include "StateConstructW.h"
#include "helpfun.h"
#include "constants.h"
#include "packing.h"
#include "iCBSearch.h"
#include "iCBConstruct.h"
#include "hpInput.h"
#include "anaFilter.h"
#include "syntFilter.h"
/*----------------------------------------------------------------*
* Initiation of encoder instance.
*---------------------------------------------------------------*/
short initEncode( /* (o) Number of bytes
encoded */
iLBC_Enc_Inst_t *iLBCenc_inst, /* (i/o) Encoder instance */
int mode /* (i) frame size mode */
){
iLBCenc_inst->mode = mode;
if (mode==30) {
iLBCenc_inst->blockl = BLOCKL_30MS;
iLBCenc_inst->nsub = NSUB_30MS;
iLBCenc_inst->nasub = NASUB_30MS;
iLBCenc_inst->lpc_n = LPC_N_30MS;
iLBCenc_inst->no_of_bytes = NO_OF_BYTES_30MS;
iLBCenc_inst->no_of_words = NO_OF_WORDS_30MS;
iLBCenc_inst->state_short_len=STATE_SHORT_LEN_30MS;
/* ULP init */
iLBCenc_inst->ULP_inst=&ULP_30msTbl;
}
else if (mode==20) {
iLBCenc_inst->blockl = BLOCKL_20MS;
iLBCenc_inst->nsub = NSUB_20MS;
iLBCenc_inst->nasub = NASUB_20MS;
iLBCenc_inst->lpc_n = LPC_N_20MS;
iLBCenc_inst->no_of_bytes = NO_OF_BYTES_20MS;
iLBCenc_inst->no_of_words = NO_OF_WORDS_20MS;
iLBCenc_inst->state_short_len=STATE_SHORT_LEN_20MS;
/* ULP init */
iLBCenc_inst->ULP_inst=&ULP_20msTbl;
}
else {
exit(2);
}
memset((*iLBCenc_inst).anaMem, 0,
LPC_FILTERORDER*sizeof(float));
memcpy((*iLBCenc_inst).lsfold, lsfmeanTbl,
LPC_FILTERORDER*sizeof(float));
memcpy((*iLBCenc_inst).lsfdeqold, lsfmeanTbl,
LPC_FILTERORDER*sizeof(float));
memset((*iLBCenc_inst).lpc_buffer, 0,
(LPC_LOOKBACK+BLOCKL_MAX)*sizeof(float));
memset((*iLBCenc_inst).hpimem, 0, 4*sizeof(float));
return (iLBCenc_inst->no_of_bytes);
}
/*----------------------------------------------------------------*
* main encoder function
*---------------------------------------------------------------*/
void iLBC_encode(
unsigned char *bytes, /* (o) encoded data bits iLBC */
float *block, /* (o) speech vector to
encode */
iLBC_Enc_Inst_t *iLBCenc_inst /* (i/o) the general encoder
state */
){
float data[BLOCKL_MAX];
float residual[BLOCKL_MAX], reverseResidual[BLOCKL_MAX];
int start, idxForMax, idxVec[STATE_LEN];
float reverseDecresidual[BLOCKL_MAX], mem[CB_MEML];
int n, k, meml_gotten, Nfor, Nback, i, pos;
int gain_index[CB_NSTAGES*NASUB_MAX],
extra_gain_index[CB_NSTAGES];
int cb_index[CB_NSTAGES*NASUB_MAX],extra_cb_index[CB_NSTAGES];
int lsf_i[LSF_NSPLIT*LPC_N_MAX];
unsigned char *pbytes;
int diff, start_pos, state_first;
float en1, en2;
int index, ulp, firstpart;
int subcount, subframe;
float weightState[LPC_FILTERORDER];
float syntdenum[NSUB_MAX*(LPC_FILTERORDER+1)];
float weightdenum[NSUB_MAX*(LPC_FILTERORDER+1)];
float decresidual[BLOCKL_MAX];
/* high pass filtering of input signal if such is not done
prior to calling this function */
hpInput(block, iLBCenc_inst->blockl,
data, (*iLBCenc_inst).hpimem);
/* otherwise simply copy */
/*memcpy(data,block,iLBCenc_inst->blockl*sizeof(float));*/
/* LPC of hp filtered input data */
LPCencode(syntdenum, weightdenum, lsf_i, data, iLBCenc_inst);
/* inverse filter to get residual */
for (n=0; n<iLBCenc_inst->nsub; n++) {
anaFilter(&data[n*SUBL], &syntdenum[n*(LPC_FILTERORDER+1)],
SUBL, &residual[n*SUBL], iLBCenc_inst->anaMem);
}
/* find state location */
start = FrameClassify(iLBCenc_inst, residual);
/* check if state should be in first or last part of the
two subframes */
diff = STATE_LEN - iLBCenc_inst->state_short_len;
en1 = 0;
index = (start-1)*SUBL;
for (i = 0; i < iLBCenc_inst->state_short_len; i++) {
en1 += residual[index+i]*residual[index+i];
}
en2 = 0;
index = (start-1)*SUBL+diff;
for (i = 0; i < iLBCenc_inst->state_short_len; i++) {
en2 += residual[index+i]*residual[index+i];
}
if (en1 > en2) {
state_first = 1;
start_pos = (start-1)*SUBL;
} else {
state_first = 0;
start_pos = (start-1)*SUBL + diff;
}
/* scalar quantization of state */
StateSearchW(iLBCenc_inst, &residual[start_pos],
&syntdenum[(start-1)*(LPC_FILTERORDER+1)],
&weightdenum[(start-1)*(LPC_FILTERORDER+1)], &idxForMax,
idxVec, iLBCenc_inst->state_short_len, state_first);
StateConstructW(idxForMax, idxVec,
&syntdenum[(start-1)*(LPC_FILTERORDER+1)],
&decresidual[start_pos], iLBCenc_inst->state_short_len);
/* predictive quantization in state */
if (state_first) { /* put adaptive part in the end */
/* setup memory */
memset(mem, 0,
(CB_MEML-iLBCenc_inst->state_short_len)*sizeof(float));
memcpy(mem+CB_MEML-iLBCenc_inst->state_short_len,
decresidual+start_pos,
iLBCenc_inst->state_short_len*sizeof(float));
memset(weightState, 0, LPC_FILTERORDER*sizeof(float));
/* encode sub-frames */
iCBSearch(iLBCenc_inst, extra_cb_index, extra_gain_index,
&residual[start_pos+iLBCenc_inst->state_short_len],
mem+CB_MEML-stMemLTbl,
stMemLTbl, diff, CB_NSTAGES,
&weightdenum[start*(LPC_FILTERORDER+1)],
weightState, 0);
/* construct decoded vector */
iCBConstruct(
&decresidual[start_pos+iLBCenc_inst->state_short_len],
extra_cb_index, extra_gain_index,
mem+CB_MEML-stMemLTbl,
stMemLTbl, diff, CB_NSTAGES);
}
else { /* put adaptive part in the beginning */
/* create reversed vectors for prediction */
for (k=0; k<diff; k++) {
reverseResidual[k] = residual[(start+1)*SUBL-1
-(k+iLBCenc_inst->state_short_len)];
}
/* setup memory */
meml_gotten = iLBCenc_inst->state_short_len;
for (k=0; k<meml_gotten; k++) {
mem[CB_MEML-1-k] = decresidual[start_pos + k];
}
memset(mem, 0, (CB_MEML-k)*sizeof(float));
memset(weightState, 0, LPC_FILTERORDER*sizeof(float));
/* encode sub-frames */
iCBSearch(iLBCenc_inst, extra_cb_index, extra_gain_index,
reverseResidual, mem+CB_MEML-stMemLTbl, stMemLTbl,
diff, CB_NSTAGES,
&weightdenum[(start-1)*(LPC_FILTERORDER+1)],
weightState, 0);
/* construct decoded vector */
iCBConstruct(reverseDecresidual, extra_cb_index,
extra_gain_index, mem+CB_MEML-stMemLTbl, stMemLTbl,
diff, CB_NSTAGES);
/* get decoded residual from reversed vector */
for (k=0; k<diff; k++) {
decresidual[start_pos-1-k] = reverseDecresidual[k];
}
}
/* counter for predicted sub-frames */
subcount=0;
/* forward prediction of sub-frames */
Nfor = iLBCenc_inst->nsub-start-1;
if ( Nfor > 0 ) {
/* setup memory */
memset(mem, 0, (CB_MEML-STATE_LEN)*sizeof(float));
memcpy(mem+CB_MEML-STATE_LEN, decresidual+(start-1)*SUBL,
STATE_LEN*sizeof(float));
memset(weightState, 0, LPC_FILTERORDER*sizeof(float));
/* loop over sub-frames to encode */
for (subframe=0; subframe<Nfor; subframe++) {
/* encode sub-frame */
iCBSearch(iLBCenc_inst, cb_index+subcount*CB_NSTAGES,
gain_index+subcount*CB_NSTAGES,
&residual[(start+1+subframe)*SUBL],
mem+CB_MEML-memLfTbl[subcount],
memLfTbl[subcount], SUBL, CB_NSTAGES,
&weightdenum[(start+1+subframe)*
(LPC_FILTERORDER+1)],
weightState, subcount+1);
/* construct decoded vector */
iCBConstruct(&decresidual[(start+1+subframe)*SUBL],
cb_index+subcount*CB_NSTAGES,
gain_index+subcount*CB_NSTAGES,
mem+CB_MEML-memLfTbl[subcount],
memLfTbl[subcount], SUBL, CB_NSTAGES);
/* update memory */
memmove(mem, mem+SUBL, (CB_MEML-SUBL)*sizeof(float));
memcpy(mem+CB_MEML-SUBL,
&decresidual[(start+1+subframe)*SUBL],
SUBL*sizeof(float));
memset(weightState, 0, LPC_FILTERORDER*sizeof(float));
subcount++;
}
}
/* backward prediction of sub-frames */
Nback = start-1;
if ( Nback > 0 ) {
/* create reverse order vectors */
for (n=0; n<Nback; n++) {
for (k=0; k<SUBL; k++) {
reverseResidual[n*SUBL+k] =
residual[(start-1)*SUBL-1-n*SUBL-k];
reverseDecresidual[n*SUBL+k] =
decresidual[(start-1)*SUBL-1-n*SUBL-k];
}
}
/* setup memory */
meml_gotten = SUBL*(iLBCenc_inst->nsub+1-start);
if ( meml_gotten > CB_MEML ) {
meml_gotten=CB_MEML;
}
for (k=0; k<meml_gotten; k++) {
mem[CB_MEML-1-k] = decresidual[(start-1)*SUBL + k];
}
memset(mem, 0, (CB_MEML-k)*sizeof(float));
memset(weightState, 0, LPC_FILTERORDER*sizeof(float));
/* loop over sub-frames to encode */
for (subframe=0; subframe<Nback; subframe++) {
/* encode sub-frame */
iCBSearch(iLBCenc_inst, cb_index+subcount*CB_NSTAGES,
gain_index+subcount*CB_NSTAGES,
&reverseResidual[subframe*SUBL],
mem+CB_MEML-memLfTbl[subcount],
memLfTbl[subcount], SUBL, CB_NSTAGES,
&weightdenum[(start-2-subframe)*
(LPC_FILTERORDER+1)],
weightState, subcount+1);
/* construct decoded vector */
iCBConstruct(&reverseDecresidual[subframe*SUBL],
cb_index+subcount*CB_NSTAGES,
gain_index+subcount*CB_NSTAGES,
mem+CB_MEML-memLfTbl[subcount],
memLfTbl[subcount], SUBL, CB_NSTAGES);
/* update memory */
memmove(mem, mem+SUBL, (CB_MEML-SUBL)*sizeof(float));
memcpy(mem+CB_MEML-SUBL,
&reverseDecresidual[subframe*SUBL],
SUBL*sizeof(float));
memset(weightState, 0, LPC_FILTERORDER*sizeof(float));
subcount++;
}
/* get decoded residual from reversed vector */
for (i=0; i<SUBL*Nback; i++) {
decresidual[SUBL*Nback - i - 1] =
reverseDecresidual[i];
}
}
/* end encoding part */
/* adjust index */
index_conv_enc(cb_index);
/* pack bytes */
pbytes=bytes;
pos=0;
/* loop over the 3 ULP classes */
for (ulp=0; ulp<3; ulp++) {
/* LSF */
for (k=0; k<LSF_NSPLIT*iLBCenc_inst->lpc_n; k++) {
packsplit(&lsf_i[k], &firstpart, &lsf_i[k],
iLBCenc_inst->ULP_inst->lsf_bits[k][ulp],
iLBCenc_inst->ULP_inst->lsf_bits[k][ulp]+
iLBCenc_inst->ULP_inst->lsf_bits[k][ulp+1]+
iLBCenc_inst->ULP_inst->lsf_bits[k][ulp+2]);
dopack( &pbytes, firstpart,
iLBCenc_inst->ULP_inst->lsf_bits[k][ulp], &pos);
}
/* Start block info */
packsplit(&start, &firstpart, &start,
iLBCenc_inst->ULP_inst->start_bits[ulp],
iLBCenc_inst->ULP_inst->start_bits[ulp]+
iLBCenc_inst->ULP_inst->start_bits[ulp+1]+
iLBCenc_inst->ULP_inst->start_bits[ulp+2]);
dopack( &pbytes, firstpart,
iLBCenc_inst->ULP_inst->start_bits[ulp], &pos);
packsplit(&state_first, &firstpart, &state_first,
iLBCenc_inst->ULP_inst->startfirst_bits[ulp],
iLBCenc_inst->ULP_inst->startfirst_bits[ulp]+
iLBCenc_inst->ULP_inst->startfirst_bits[ulp+1]+
iLBCenc_inst->ULP_inst->startfirst_bits[ulp+2]);
dopack( &pbytes, firstpart,
iLBCenc_inst->ULP_inst->startfirst_bits[ulp], &pos);
packsplit(&idxForMax, &firstpart, &idxForMax,
iLBCenc_inst->ULP_inst->scale_bits[ulp],
iLBCenc_inst->ULP_inst->scale_bits[ulp]+
iLBCenc_inst->ULP_inst->scale_bits[ulp+1]+
iLBCenc_inst->ULP_inst->scale_bits[ulp+2]);
dopack( &pbytes, firstpart,
iLBCenc_inst->ULP_inst->scale_bits[ulp], &pos);
for (k=0; k<iLBCenc_inst->state_short_len; k++) {
packsplit(idxVec+k, &firstpart, idxVec+k,
iLBCenc_inst->ULP_inst->state_bits[ulp],
iLBCenc_inst->ULP_inst->state_bits[ulp]+
iLBCenc_inst->ULP_inst->state_bits[ulp+1]+
iLBCenc_inst->ULP_inst->state_bits[ulp+2]);
dopack( &pbytes, firstpart,
iLBCenc_inst->ULP_inst->state_bits[ulp], &pos);
}
/* 23/22 (20ms/30ms) sample block */
for (k=0;k<CB_NSTAGES;k++) {
packsplit(extra_cb_index+k, &firstpart,
extra_cb_index+k,
iLBCenc_inst->ULP_inst->extra_cb_index[k][ulp],
iLBCenc_inst->ULP_inst->extra_cb_index[k][ulp]+
iLBCenc_inst->ULP_inst->extra_cb_index[k][ulp+1]+
iLBCenc_inst->ULP_inst->extra_cb_index[k][ulp+2]);
dopack( &pbytes, firstpart,
iLBCenc_inst->ULP_inst->extra_cb_index[k][ulp],
&pos);
}
for (k=0;k<CB_NSTAGES;k++) {
packsplit(extra_gain_index+k, &firstpart,
extra_gain_index+k,
iLBCenc_inst->ULP_inst->extra_cb_gain[k][ulp],
iLBCenc_inst->ULP_inst->extra_cb_gain[k][ulp]+
iLBCenc_inst->ULP_inst->extra_cb_gain[k][ulp+1]+
iLBCenc_inst->ULP_inst->extra_cb_gain[k][ulp+2]);
dopack( &pbytes, firstpart,
iLBCenc_inst->ULP_inst->extra_cb_gain[k][ulp],
&pos);
}
/* The two/four (20ms/30ms) 40 sample sub-blocks */
for (i=0; i<iLBCenc_inst->nasub; i++) {
for (k=0; k<CB_NSTAGES; k++) {
packsplit(cb_index+i*CB_NSTAGES+k, &firstpart,
cb_index+i*CB_NSTAGES+k,
iLBCenc_inst->ULP_inst->cb_index[i][k][ulp],
iLBCenc_inst->ULP_inst->cb_index[i][k][ulp]+
iLBCenc_inst->ULP_inst->cb_index[i][k][ulp+1]+
iLBCenc_inst->ULP_inst->cb_index[i][k][ulp+2]);
dopack( &pbytes, firstpart,
iLBCenc_inst->ULP_inst->cb_index[i][k][ulp],
&pos);
}
}
for (i=0; i<iLBCenc_inst->nasub; i++) {
for (k=0; k<CB_NSTAGES; k++) {
packsplit(gain_index+i*CB_NSTAGES+k, &firstpart,
gain_index+i*CB_NSTAGES+k,
iLBCenc_inst->ULP_inst->cb_gain[i][k][ulp],
iLBCenc_inst->ULP_inst->cb_gain[i][k][ulp]+
iLBCenc_inst->ULP_inst->cb_gain[i][k][ulp+1]+
iLBCenc_inst->ULP_inst->cb_gain[i][k][ulp+2]);
dopack( &pbytes, firstpart,
iLBCenc_inst->ULP_inst->cb_gain[i][k][ulp],
&pos);
}
}
}
/* set the last bit to zero (otherwise the decoder
will treat it as a lost frame) */
dopack( &pbytes, 0, 1, &pos);
}

37
codecs/ilbc/iLBC_encode.h Normal file
View File

@@ -0,0 +1,37 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
iLBC_encode.h
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#ifndef __iLBC_ILBCENCODE_H
#define __iLBC_ILBCENCODE_H
#include "iLBC_define.h"
short initEncode( /* (o) Number of bytes
encoded */
iLBC_Enc_Inst_t *iLBCenc_inst, /* (i/o) Encoder instance */
int mode /* (i) frame size mode */
);
void iLBC_encode(
unsigned char *bytes, /* (o) encoded data bits iLBC */
float *block, /* (o) speech vector to
encode */
iLBC_Enc_Inst_t *iLBCenc_inst /* (i/o) the general encoder
state */
);
#endif

264
codecs/ilbc/lsf.c Normal file
View File

@@ -0,0 +1,264 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
lsf.c
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#include <string.h>
#include <math.h>
#include "iLBC_define.h"
#include "lsf.h"
/*----------------------------------------------------------------*
* conversion from lpc coefficients to lsf coefficients
*---------------------------------------------------------------*/
void a2lsf(
float *freq,/* (o) lsf coefficients */
float *a /* (i) lpc coefficients */
){
float steps[LSF_NUMBER_OF_STEPS] =
{(float)0.00635, (float)0.003175, (float)0.0015875,
(float)0.00079375};
float step;
int step_idx;
int lsp_index;
float p[LPC_HALFORDER];
float q[LPC_HALFORDER];
float p_pre[LPC_HALFORDER];
float q_pre[LPC_HALFORDER];
float old_p, old_q, *old;
float *pq_coef;
float omega, old_omega;
int i;
float hlp, hlp1, hlp2, hlp3, hlp4, hlp5;
for (i=0; i<LPC_HALFORDER; i++) {
p[i] = (float)-1.0 * (a[i + 1] + a[LPC_FILTERORDER - i]);
q[i] = a[LPC_FILTERORDER - i] - a[i + 1];
}
p_pre[0] = (float)-1.0 - p[0];
p_pre[1] = - p_pre[0] - p[1];
p_pre[2] = - p_pre[1] - p[2];
p_pre[3] = - p_pre[2] - p[3];
p_pre[4] = - p_pre[3] - p[4];
p_pre[4] = p_pre[4] / 2;
q_pre[0] = (float)1.0 - q[0];
q_pre[1] = q_pre[0] - q[1];
q_pre[2] = q_pre[1] - q[2];
q_pre[3] = q_pre[2] - q[3];
q_pre[4] = q_pre[3] - q[4];
q_pre[4] = q_pre[4] / 2;
omega = 0.0;
old_omega = 0.0;
old_p = FLOAT_MAX;
old_q = FLOAT_MAX;
/* Here we loop through lsp_index to find all the
LPC_FILTERORDER roots for omega. */
for (lsp_index = 0; lsp_index<LPC_FILTERORDER; lsp_index++) {
/* Depending on lsp_index being even or odd, we
alternatively solve the roots for the two LSP equations. */
if ((lsp_index & 0x1) == 0) {
pq_coef = p_pre;
old = &old_p;
} else {
pq_coef = q_pre;
old = &old_q;
}
/* Start with low resolution grid */
for (step_idx = 0, step = steps[step_idx];
step_idx < LSF_NUMBER_OF_STEPS;){
/* cos(10piw) + pq(0)cos(8piw) + pq(1)cos(6piw) +
pq(2)cos(4piw) + pq(3)cod(2piw) + pq(4) */
hlp = (float)cos(omega * TWO_PI);
hlp1 = (float)2.0 * hlp + pq_coef[0];
hlp2 = (float)2.0 * hlp * hlp1 - (float)1.0 +
pq_coef[1];
hlp3 = (float)2.0 * hlp * hlp2 - hlp1 + pq_coef[2];
hlp4 = (float)2.0 * hlp * hlp3 - hlp2 + pq_coef[3];
hlp5 = hlp * hlp4 - hlp3 + pq_coef[4];
if (((hlp5 * (*old)) <= 0.0) || (omega >= 0.5)){
if (step_idx == (LSF_NUMBER_OF_STEPS - 1)){
if (fabs(hlp5) >= fabs(*old)) {
freq[lsp_index] = omega - step;
} else {
freq[lsp_index] = omega;
}
if ((*old) >= 0.0){
*old = (float)-1.0 * FLOAT_MAX;
} else {
*old = FLOAT_MAX;
}
omega = old_omega;
step_idx = 0;
step_idx = LSF_NUMBER_OF_STEPS;
} else {
if (step_idx == 0) {
old_omega = omega;
}
step_idx++;
omega -= steps[step_idx];
/* Go back one grid step */
step = steps[step_idx];
}
} else {
/* increment omega until they are of different sign,
and we know there is at least one root between omega
and old_omega */
*old = hlp5;
omega += step;
}
}
}
for (i = 0; i<LPC_FILTERORDER; i++) {
freq[i] = freq[i] * TWO_PI;
}
}
/*----------------------------------------------------------------*
* conversion from lsf coefficients to lpc coefficients
*---------------------------------------------------------------*/
void lsf2a(
float *a_coef, /* (o) lpc coefficients */
float *freq /* (i) lsf coefficients */
){
int i, j;
float hlp;
float p[LPC_HALFORDER], q[LPC_HALFORDER];
float a[LPC_HALFORDER + 1], a1[LPC_HALFORDER],
a2[LPC_HALFORDER];
float b[LPC_HALFORDER + 1], b1[LPC_HALFORDER],
b2[LPC_HALFORDER];
for (i=0; i<LPC_FILTERORDER; i++) {
freq[i] = freq[i] * PI2;
}
/* Check input for ill-conditioned cases. This part is not
found in the TIA standard. It involves the following 2 IF
blocks. If "freq" is judged ill-conditioned, then we first
modify freq[0] and freq[LPC_HALFORDER-1] (normally
LPC_HALFORDER = 10 for LPC applications), then we adjust
the other "freq" values slightly */
if ((freq[0] <= 0.0) || (freq[LPC_FILTERORDER - 1] >= 0.5)){
if (freq[0] <= 0.0) {
freq[0] = (float)0.022;
}
if (freq[LPC_FILTERORDER - 1] >= 0.5) {
freq[LPC_FILTERORDER - 1] = (float)0.499;
}
hlp = (freq[LPC_FILTERORDER - 1] - freq[0]) /
(float) (LPC_FILTERORDER - 1);
for (i=1; i<LPC_FILTERORDER; i++) {
freq[i] = freq[i - 1] + hlp;
}
}
memset(a1, 0, LPC_HALFORDER*sizeof(float));
memset(a2, 0, LPC_HALFORDER*sizeof(float));
memset(b1, 0, LPC_HALFORDER*sizeof(float));
memset(b2, 0, LPC_HALFORDER*sizeof(float));
memset(a, 0, (LPC_HALFORDER+1)*sizeof(float));
memset(b, 0, (LPC_HALFORDER+1)*sizeof(float));
/* p[i] and q[i] compute cos(2*pi*omega_{2j}) and
cos(2*pi*omega_{2j-1} in eqs. 4.2.2.2-1 and 4.2.2.2-2.
Note that for this code p[i] specifies the coefficients
used in .Q_A(z) while q[i] specifies the coefficients used
in .P_A(z) */
for (i=0; i<LPC_HALFORDER; i++) {
p[i] = (float)cos(TWO_PI * freq[2 * i]);
q[i] = (float)cos(TWO_PI * freq[2 * i + 1]);
}
a[0] = 0.25;
b[0] = 0.25;
for (i= 0; i<LPC_HALFORDER; i++) {
a[i + 1] = a[i] - 2 * p[i] * a1[i] + a2[i];
b[i + 1] = b[i] - 2 * q[i] * b1[i] + b2[i];
a2[i] = a1[i];
a1[i] = a[i];
b2[i] = b1[i];
b1[i] = b[i];
}
for (j=0; j<LPC_FILTERORDER; j++) {
if (j == 0) {
a[0] = 0.25;
b[0] = -0.25;
} else {
a[0] = b[0] = 0.0;
}
for (i=0; i<LPC_HALFORDER; i++) {
a[i + 1] = a[i] - 2 * p[i] * a1[i] + a2[i];
b[i + 1] = b[i] - 2 * q[i] * b1[i] + b2[i];
a2[i] = a1[i];
a1[i] = a[i];
b2[i] = b1[i];
b1[i] = b[i];
}
a_coef[j + 1] = 2 * (a[LPC_HALFORDER] + b[LPC_HALFORDER]);
}
a_coef[0] = 1.0;
}

30
codecs/ilbc/lsf.h Normal file
View File

@@ -0,0 +1,30 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
lsf.h
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#ifndef __iLBC_LSF_H
#define __iLBC_LSF_H
void a2lsf(
float *freq,/* (o) lsf coefficients */
float *a /* (i) lpc coefficients */
);
void lsf2a(
float *a_coef, /* (o) lpc coefficients */
float *freq /* (i) lsf coefficients */
);
#endif

175
codecs/ilbc/packing.c Normal file
View File

@@ -0,0 +1,175 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
packing.c
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#include <math.h>
#include <stdlib.h>
#include "iLBC_define.h"
#include "constants.h"
#include "helpfun.h"
#include "packing.h"
#include "string.h"
/*----------------------------------------------------------------*
* splitting an integer into first most significant bits and
* remaining least significant bits
*---------------------------------------------------------------*/
void packsplit(
int *index, /* (i) the value to split */
int *firstpart, /* (o) the value specified by most
significant bits */
int *rest, /* (o) the value specified by least
significant bits */
int bitno_firstpart, /* (i) number of bits in most
significant part */
int bitno_total /* (i) number of bits in full range
of value */
){
int bitno_rest = bitno_total-bitno_firstpart;
*firstpart = *index>>(bitno_rest);
*rest = *index-(*firstpart<<(bitno_rest));
}
/*----------------------------------------------------------------*
* combining a value corresponding to msb's with a value
* corresponding to lsb's
*---------------------------------------------------------------*/
void packcombine(
int *index, /* (i/o) the msb value in the
combined value out */
int rest, /* (i) the lsb value */
int bitno_rest /* (i) the number of bits in the
lsb part */
){
*index = *index<<bitno_rest;
*index += rest;
}
/*----------------------------------------------------------------*
* packing of bits into bitstream, i.e., vector of bytes
*---------------------------------------------------------------*/
void dopack(
unsigned char **bitstream, /* (i/o) on entrance pointer to
place in bitstream to pack
new data, on exit pointer
to place in bitstream to
pack future data */
int index, /* (i) the value to pack */
int bitno, /* (i) the number of bits that the
value will fit within */
int *pos /* (i/o) write position in the
current byte */
){
int posLeft;
/* Clear the bits before starting in a new byte */
if ((*pos)==0) {
**bitstream=0;
}
while (bitno>0) {
/* Jump to the next byte if end of this byte is reached*/
if (*pos==8) {
*pos=0;
(*bitstream)++;
**bitstream=0;
}
posLeft=8-(*pos);
/* Insert index into the bitstream */
if (bitno <= posLeft) {
**bitstream |= (unsigned char)(index<<(posLeft-bitno));
*pos+=bitno;
bitno=0;
} else {
**bitstream |= (unsigned char)(index>>(bitno-posLeft));
*pos=8;
index-=((index>>(bitno-posLeft))<<(bitno-posLeft));
bitno-=posLeft;
}
}
}
/*----------------------------------------------------------------*
* unpacking of bits from bitstream, i.e., vector of bytes
*---------------------------------------------------------------*/
void unpack(
unsigned char **bitstream, /* (i/o) on entrance pointer to
place in bitstream to
unpack new data from, on
exit pointer to place in
bitstream to unpack future
data from */
int *index, /* (o) resulting value */
int bitno, /* (i) number of bits used to
represent the value */
int *pos /* (i/o) read position in the
current byte */
){
int BitsLeft;
*index=0;
while (bitno>0) {
/* move forward in bitstream when the end of the
byte is reached */
if (*pos==8) {
*pos=0;
(*bitstream)++;
}
BitsLeft=8-(*pos);
/* Extract bits to index */
if (BitsLeft>=bitno) {
*index+=((((**bitstream)<<(*pos)) & 0xFF)>>(8-bitno));
*pos+=bitno;
bitno=0;
} else {
if ((8-bitno)>0) {
*index+=((((**bitstream)<<(*pos)) & 0xFF)>>
(8-bitno));
*pos=8;
} else {
*index+=(((int)(((**bitstream)<<(*pos)) & 0xFF))<<
(bitno-8));
*pos=8;
}
bitno-=BitsLeft;
}
}
}

67
codecs/ilbc/packing.h Normal file
View File

@@ -0,0 +1,67 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
packing.h
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#ifndef __PACKING_H
#define __PACKING_H
void packsplit(
int *index, /* (i) the value to split */
int *firstpart, /* (o) the value specified by most
significant bits */
int *rest, /* (o) the value specified by least
significant bits */
int bitno_firstpart, /* (i) number of bits in most
significant part */
int bitno_total /* (i) number of bits in full range
of value */
);
void packcombine(
int *index, /* (i/o) the msb value in the
combined value out */
int rest, /* (i) the lsb value */
int bitno_rest /* (i) the number of bits in the
lsb part */
);
void dopack(
unsigned char **bitstream, /* (i/o) on entrance pointer to
place in bitstream to pack
new data, on exit pointer
to place in bitstream to
pack future data */
int index, /* (i) the value to pack */
int bitno, /* (i) the number of bits that the
value will fit within */
int *pos /* (i/o) write position in the
current byte */
);
void unpack(
unsigned char **bitstream, /* (i/o) on entrance pointer to
place in bitstream to
unpack new data from, on
exit pointer to place in
bitstream to unpack future
data from */
int *index, /* (o) resulting value */
int bitno, /* (i) number of bits used to
represent the value */
int *pos /* (i/o) read position in the
current byte */
);
#endif

108
codecs/ilbc/syntFilter.c Normal file
View File

@@ -0,0 +1,108 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
syntFilter.c
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#include "iLBC_define.h"
#include "syntFilter.h"
/*----------------------------------------------------------------*
* LP synthesis filter.
*---------------------------------------------------------------*/
void syntFilter(
float *Out, /* (i/o) Signal to be filtered */
float *a, /* (i) LP parameters */
int len, /* (i) Length of signal */
float *mem /* (i/o) Filter state */
){
int i, j;
float *po, *pi, *pa, *pm;
po=Out;
/* Filter first part using memory from past */
for (i=0; i<LPC_FILTERORDER; i++) {
pi=&Out[i-1];
pa=&a[1];
pm=&mem[LPC_FILTERORDER-1];
for (j=1; j<=i; j++) {
*po-=(*pa++)*(*pi--);
}
for (j=i+1; j<LPC_FILTERORDER+1; j++) {
*po-=(*pa++)*(*pm--);
}
po++;
}
/* Filter last part where the state is entierly in
the output vector */
for (i=LPC_FILTERORDER; i<len; i++) {
pi=&Out[i-1];
pa=&a[1];
for (j=1; j<LPC_FILTERORDER+1; j++) {
*po-=(*pa++)*(*pi--);
}
po++;
}
/* Update state vector */
memcpy(mem, &Out[len-LPC_FILTERORDER],
LPC_FILTERORDER*sizeof(float));
}

27
codecs/ilbc/syntFilter.h Normal file
View File

@@ -0,0 +1,27 @@
/******************************************************************
iLBC Speech Coder ANSI-C Source Code
syntFilter.h
Copyright (C) The Internet Society (2004).
All Rights Reserved.
******************************************************************/
#ifndef __iLBC_SYNTFILTER_H
#define __iLBC_SYNTFILTER_H
void syntFilter(
float *Out, /* (i/o) Signal to be filtered */
float *a, /* (i) LP parameters */
int len, /* (i) Length of signal */
float *mem /* (i/o) Filter state */
);
#endif

View File

@@ -392,7 +392,7 @@ exten => i,1,Playback(invalid) ; "That's not valid, try again"
; Asterisk demo.
;
exten => 500,1,Playback(demo-abouttotry); Let them know what's going on
exten => 500,n,Dial(IAX2/guest@pbx.digium.com/s@default) ; Call the Asterisk demo
exten => 500,n,Dial(IAX2/guest@misery.digium.com/s@default) ; Call the Asterisk demo
exten => 500,n,Playback(demo-nogo) ; Couldn't connect to the demo site
exten => 500,n,Goto(s,6) ; Return to the start over message.

View File

@@ -255,16 +255,6 @@ autokill=yes
; The default value is 'host'
;
;codecpriority=host
;
; allowfwdownload controls whether this host will serve out firmware to
; IAX clients which request it. This has only been used for the IAXy,
; and it has been recently proven that this firmware distribution method
; can be used as a source of traffic amplification attacks. Also, the
; IAXy firmware has not been updated for at least 18 months, so unless
; you are provisioning IAXys in a secure network, we recommend that you
; leave this option to the default, off.
;
;allowfwdownload=yes
;rtcachefriends=yes ; Cache realtime friends by adding them to the internal list
; just like friends added from the config file only on a

View File

@@ -108,12 +108,10 @@ srvlookup=yes ; Enable DNS SRV lookups on outbound calls
; Useful to limit subscriptions to local extensions
; Settable per peer/user also
;notifyringing = yes ; Notify subscriptions on RINGING state
;alwaysauthreject = yes ; When an incoming INVITE or REGISTER is to be rejected,
; for any reason, always reject with an identical response
; equivalent to valid username and invalid password/hash
; instead of letting the requester know whether there was
; a matching user or peer for their request. This reduces
; the ability of an attacker to scan for valid SIP usernames.
;alwaysauthreject = yes ; When an incoming INVITE or REGISTER is to be rejected,
; for any reason, always reject with '401 Unauthorized'
; instead of letting the requester know whether there was
; a matching user or peer for their request
;
; If regcontext is specified, Asterisk will dynamically create and destroy a
; NoOp priority 1 extension for a given peer who registers or unregisters with

View File

@@ -1,33 +0,0 @@
#!/bin/sh -e
if [ -f codecs/ilbc/iLBC_define.h ]; then
echo "***"
echo "The iLBC source code appears to already be present and does not"
echo "need to be downloaded."
echo "***"
exit 1
fi
echo "***"
echo "This script will download the Global IP Solutions iLBC encoder/decoder"
echo "source code from http://ilbcfreeware.org. Use of this code requires"
echo "agreeing to the license agreement present at that site."
echo ""
echo "This script assumes that you have already agreed to the license agreement."
echo "If you have not done so, you can abort the script now."
echo "***"
read tmp
wget -P codecs/ilbc http://www.ietf.org/rfc/rfc3951.txt
wget -P codecs/ilbc http://www.ilbcfreeware.org/documentation/extract-cfile.awk
(cd codecs/ilbc && awk -f extract-cfile.awk rfc3951.txt)
echo "***"
echo "The iLBC source code download is complete."
echo "***"
exit 0

View File

@@ -743,7 +743,7 @@ extern "C" {
* descriptor.
*/
#define ASTOBJ_CONTAINER_DUMP(fd,s,slen,container) \
ASTOBJ_CONTAINER_TRAVERSE(container, 1, do { ASTOBJ_DUMP(s,slen,iterator); ast_cli(fd, "%s", s); } while(0))
ASTOBJ_CONTAINER_TRAVERSE(container, 1, do { ASTOBJ_DUMP(s,slen,iterator); ast_cli(fd, s); } while(0))
#if defined(__cplusplus) || defined(c_plusplus)
}

View File

@@ -1,543 +0,0 @@
/*
* astobj2 - replacement containers for asterisk data structures.
*
* Copyright (C) 2006 Marta Carbone, Luigi Rizzo - Univ. di Pisa, Italy
*
* 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.
*/
#ifndef _ASTERISK_ASTOBJ2_H
#define _ASTERISK_ASTOBJ2_H
#include "asterisk/compat.h"
/*! \file
*
* \brief Object Model implementing objects and containers.
These functions implement an abstraction for objects (with
locks and reference counts) and containers for these user-defined objects,
supporting locking, reference counting and callbacks.
The internal implementation of the container is opaque to the user,
so we can use different data structures as needs arise.
At the moment, however, the only internal data structure is a hash
table. When other structures will be implemented, the initialization
function may change.
USAGE - OBJECTS
An object is a block of memory that must be allocated with the
function ao2_alloc(), and for which the system keeps track (with
abit of help from the programmer) of the number of references around.
When an object has no more references, it is destroyed, by first
invoking whatever 'destructor' function the programmer specifies
(it can be NULL), and then freeing the memory.
This way objects can be shared without worrying who is in charge
of freeing them.
Basically, creating an object requires the size of the object and
and a pointer to the destructor function:
struct foo *o;
o = ao2_alloc(sizeof(struct foo), my_destructor_fn);
The object returned has a refcount = 1.
Note that the memory for the object is allocated and zeroed.
- We cannot realloc() the object itself.
- We cannot call free(o) to dispose of the object; rather we
tell the system that we do not need the reference anymore:
ao2_ref(o, -1)
causing the destructor to be called (and then memory freed) when
the refcount goes to 0. This is also available as ao2_unref(o),
and returns NULL as a convenience, so you can do things like
o = ao2_unref(o);
and clean the original pointer to prevent errors.
- ao2_ref(o, +1) can be used to modify the refcount on the
object in case we want to pass it around.
- other calls on the object are ao2_lock(obj), ao2_unlock(),
ao2_trylock(), to manipulate the lock.
USAGE - CONTAINERS
A containers is an abstract data structure where we can store
objects, search them (hopefully in an efficient way), and iterate
or apply a callback function to them. A container is just an object
itself.
A container must first be allocated, specifying the initial
parameters. At the moment, this is done as follows:
<b>Sample Usage:</b>
\code
struct ao2_container *c;
c = ao2_container_alloc(MAX_BUCKETS, my_hash_fn, my_cmp_fn);
where
- MAX_BUCKETS is the number of buckets in the hash table,
- my_hash_fn() is the (user-supplied) function that returns a
hash key for the object (further reduced moduly MAX_BUCKETS
by the container's code);
- my_cmp_fn() is the default comparison function used when doing
searches on the container,
A container knows little or nothing about the object itself,
other than the fact that it has been created by ao2_alloc()
All knowledge of the (user-defined) internals of the object
is left to the (user-supplied) functions passed as arguments
to ao2_container_alloc().
If we want to insert the object in the container, we should
initialize its fields -- especially, those used by my_hash_fn() --
to compute the bucket to use.
Once done, we can link an object to a container with
ao2_link(c, o);
The function returns NULL in case of errors (and the object
is not inserted in the container). Other values mean success
(we are not supposed to use the value as a pointer to anything).
\note While an object o is in a container, we expect that
my_hash_fn(o) will always return the same value. The function
does not lock the object to be computed, so modifications of
those fields that affect the computation of the hash should
be done by extractiong the object from the container, and
reinserting it after the change (this is not terribly expensive).
\note A container with a single buckets is effectively a linked
list. However there is no ordering among elements.
Objects implement a reference counter keeping the count
of the number of references that reference an object.
When this number becomes zero the destructor will be
called and the object will be free'd.
*/
/*!
* Invoked just before freeing the memory for the object.
* It is passed a pointer to user data.
*/
typedef void (*ao2_destructor_fn)(void *);
void ao2_bt(void); /* backtrace */
/*!
* Allocate and initialize an object.
*
* \param data_size The sizeof() of user-defined structure.
* \param destructor_fn The function destructor (can be NULL)
* \return A pointer to user data.
*
* Allocates a struct astobj2 with sufficient space for the
* user-defined structure.
* \notes:
* - storage is zeroed; XXX maybe we want a flag to enable/disable this.
* - the refcount of the object just created is 1
* - the returned pointer cannot be free()'d or realloc()'ed;
* rather, we just call ao2_ref(o, -1);
*/
void *ao2_alloc(const size_t data_size, ao2_destructor_fn destructor_fn);
/*!
* Reference/unreference an object and return the old refcount.
*
* \param o A pointer to the object
* \param delta Value to add to the reference counter.
* \return The value of the reference counter before the operation.
*
* Increase/decrease the reference counter according
* the value of delta.
*
* If the refcount goes to zero, the object is destroyed.
*
* \note The object must not be locked by the caller of this function, as
* it is invalid to try to unlock it after releasing the reference.
*
* \note if we know the pointer to an object, it is because we
* have a reference count to it, so the only case when the object
* can go away is when we release our reference, and it is
* the last one in existence.
*/
int ao2_ref(void *o, int delta);
/*!
* Lock an object.
*
* \param a A pointer to the object we want lock.
* \return 0 on success, other values on error.
*/
int ao2_lock(void *a);
/*!
* Unlock an object.
*
* \param a A pointer to the object we want unlock.
* \return 0 on success, other values on error.
*/
int ao2_unlock(void *a);
/*!
*
* Containers
containers are data structures meant to store several objects,
and perform various operations on them.
Internally, objects are stored in lists, hash tables or other
data structures depending on the needs.
NOTA BENE: at the moment the only container we support is the
hash table and its degenerate form, the list.
Operations on container include:
c = ao2_container_alloc(size, cmp_fn, hash_fn)
allocate a container with desired size and default compare
and hash function
ao2_find(c, arg, flags)
returns zero or more element matching a given criteria
(specified as arg). Flags indicate how many results we
want (only one or all matching entries), and whether we
should unlink the object from the container.
ao2_callback(c, flags, fn, arg)
apply fn(obj, arg) to all objects in the container.
Similar to find. fn() can tell when to stop, and
do anything with the object including unlinking it.
Note that the entire operation is run with the container
locked, so noone else can change its content while we work on it.
However, we pay this with the fact that doing
anything blocking in the callback keeps the container
blocked.
The mechanism is very flexible because the callback function fn()
can do basically anything e.g. counting, deleting records, etc.
possibly using arg to store the results.
iterate on a container
this is done with the following sequence
struct ao2_container *c = ... // our container
struct ao2_iterator i;
void *o;
i = ao2_iterator_init(c, flags);
while ( (o = ao2_iterator_next(&i)) ) {
... do something on o ...
ao2_ref(o, -1);
}
The difference with the callback is that the control
on how to iterate is left to us.
ao2_ref(c, -1)
dropping a reference to a container destroys it, very simple!
Containers are astobj2 object themselves, and this is why their
implementation is simple too.
*/
/*!
* We can perform different operation on an object. We do this
* according the following flags.
*/
enum search_flags {
/*! unlink the object found */
OBJ_UNLINK = (1 << 0),
/*! on match, don't return the object or increase its reference count. */
OBJ_NODATA = (1 << 1),
/*! don't stop at the first match
* \note This is not fully implemented. */
OBJ_MULTIPLE = (1 << 2),
/*! obj is an object of the same type as the one being searched for.
* This implies that it can be passed to the object's hash function
* for optimized searching. */
OBJ_POINTER = (1 << 3),
};
/*!
* Type of a generic function to generate a hash value from an object.
*
*/
typedef int (*ao2_hash_fn)(const void *obj, const int flags);
/*!
* valid callback results:
* We return a combination of
* CMP_MATCH when the object matches the request,
* and CMP_STOP when we should not continue the search further.
*/
enum _cb_results {
CMP_MATCH = 0x1,
CMP_STOP = 0x2,
};
/*!
* generic function to compare objects.
* This, as other callbacks, should return a combination of
* _cb_results as described above.
*
* \param o object from container
* \param arg search parameters (directly from ao2_find)
* \param flags passed directly from ao2_find
* XXX explain.
*/
/*!
* Type of a generic callback function
* \param obj pointer to the (user-defined part) of an object.
* \param arg callback argument from ao2_callback()
* \param flags flags from ao2_callback()
* The return values are the same as a compare function.
* In fact, they are the same thing.
*/
typedef int (*ao2_callback_fn)(void *obj, void *arg, int flags);
/*!
* Here start declarations of containers.
*/
struct ao2_container;
/*!
* Allocate and initialize a container
* with the desired number of buckets.
*
* We allocate space for a struct astobj_container, struct container
* and the buckets[] array.
*
* \param my_hash_fn Pointer to a function computing a hash value.
* \param my_cmp_fn Pointer to a function comparating key-value
* with a string. (can be NULL)
* \return A pointer to a struct container.
*
* destructor is set implicitly.
*/
struct ao2_container *ao2_container_alloc(const unsigned int n_buckets,
ao2_hash_fn hash_fn, ao2_callback_fn cmp_fn);
/*!
* Returns the number of elements in a container.
*/
int ao2_container_count(struct ao2_container *c);
/*
* Here we have functions to manage objects.
*
* We can use the functions below on any kind of
* object defined by the user.
*/
/*!
* \brief Add an object to a container.
*
* \param c the container to operate on.
* \param newobj the object to be added.
*
* \return NULL on errors, other values on success.
*
* This function inserts an object in a container according its key.
*
* \note Remember to set the key before calling this function.
*
* \note This function automatically increases the reference count to
* account for the reference to the object that the container now holds.
*
* For Asterisk 1.4 only, there is a dirty hack here to ensure that chan_iax2
* can have objects linked in to the container at the head instead of tail
* when it is just a linked list. This is to maintain some existing behavior
* where the order must be maintained as it was before this conversion so that
* matching behavior doesn't change.
*/
#define ao2_link(c, o) __ao2_link(c, o, 0)
void *__ao2_link(struct ao2_container *c, void *newobj, int iax2_hack);
/*!
* \brief Remove an object from the container
*
* \arg c the container
* \arg obj the object to unlink
*
* \retval NULL, always
*
* \note The object requested to be unlinked must be valid. However, if it turns
* out that it is not in the container, this function is still safe to
* be called.
*
* \note If the object gets unlinked from the container, the container's
* reference to the object will be automatically released.
*/
void *ao2_unlink(struct ao2_container *c, void *obj);
/*! \struct Used as return value if the flag OBJ_MULTIPLE is set */
struct ao2_list {
struct ao2_list *next;
void *obj; /* pointer to the user portion of the object */
};
/*!
* ao2_callback() and astob2_find() are the same thing with only one difference:
* the latter uses as a callback the function passed as my_cmp_f() at
* the time of the creation of the container.
*
* \param c A pointer to the container to operate on.
* \param arg passed to the callback.
* \param flags A set of flags specifying the operation to perform,
partially used by the container code, but also passed to
the callback.
* \return A pointer to the object found/marked,
* a pointer to a list of objects matching comparison function,
* NULL if not found.
* If the function returns any objects, their refcount is incremented,
* and the caller is in charge of decrementing them once done.
* Also, in case of multiple values returned, the list used
* to store the objects must be freed by the caller.
*
* This function searches through a container and performs operations
* on objects according on flags passed.
* XXX describe better
* The comparison is done calling the compare function set implicitly.
* The p pointer can be a pointer to an object or to a key,
* we can say this looking at flags value.
* If p points to an object we will search for the object pointed
* by this value, otherwise we serch for a key value.
* If the key is not uniq we only find the first matching valued.
* If we use the OBJ_MARK flags, we mark all the objects matching
* the condition.
*
* The use of flags argument is the follow:
*
* OBJ_UNLINK unlinks the object found
* OBJ_NODATA on match, do return an object
* Callbacks use OBJ_NODATA as a default
* functions such as find() do
* OBJ_MULTIPLE return multiple matches
* Default for _find() is no.
* to a key (not yet supported)
* OBJ_POINTER the pointer is an object pointer
*
* In case we return a list, the callee must take care to destroy
* that list when no longer used.
*
* \note When the returned object is no longer in use, ao2_ref() should
* be used to free the additional reference possibly created by this function.
*/
/* XXX order of arguments to find */
void *ao2_find(struct ao2_container *c, void *arg, enum search_flags flags);
void *ao2_callback(struct ao2_container *c,
enum search_flags flags,
ao2_callback_fn cb_fn, void *arg);
int ao2_match_by_addr(void *user_data, void *arg, int flags);
/*!
*
*
* When we need to walk through a container, we use
* ao2_iterator to keep track of the current position.
*
* Because the navigation is typically done without holding the
* lock on the container across the loop,
* objects can be inserted or deleted or moved
* while we work. As a consequence, there is no guarantee that
* the we manage to touch all the elements on the list, or it
* is possible that we touch the same object multiple times.
* However, within the current hash table container, the following is true:
* - It is not possible to miss an object in the container while iterating
* unless it gets added after the iteration begins and is added to a bucket
* that is before the one the current object is in. In this case, even if
* you locked the container around the entire iteration loop, you still would
* not see this object, because it would still be waiting on the container
* lock so that it can be added.
* - It would be extremely rare to see an object twice. The only way this can
* happen is if an object got unlinked from the container and added again
* during the same iteration. Furthermore, when the object gets added back,
* it has to be in the current or later bucket for it to be seen again.
*
* An iterator must be first initialized with ao2_iterator_init(),
* then we can use o = ao2_iterator_next() to move from one
* element to the next. Remember that the object returned by
* ao2_iterator_next() has its refcount incremented,
* and the reference must be explicitly released when done with it.
*
* Example:
*
* \code
*
* struct ao2_container *c = ... // the container we want to iterate on
* struct ao2_iterator i;
* struct my_obj *o;
*
* i = ao2_iterator_init(c, flags);
*
* while ( (o = ao2_iterator_next(&i)) ) {
* ... do something on o ...
* ao2_ref(o, -1);
* }
*
* \endcode
*
*/
/*!
* You are not supposed to know the internals of an iterator!
* We would like the iterator to be opaque, unfortunately
* its size needs to be known if we want to store it around
* without too much trouble.
* Anyways...
* The iterator has a pointer to the container, and a flags
* field specifying various things e.g. whether the container
* should be locked or not while navigating on it.
* The iterator "points" to the current object, which is identified
* by three values:
* - a bucket number;
* - the object_id, which is also the container version number
* when the object was inserted. This identifies the object
* univoquely, however reaching the desired object requires
* scanning a list.
* - a pointer, and a container version when we saved the pointer.
* If the container has not changed its version number, then we
* can safely follow the pointer to reach the object in constant time.
* Details are in the implementation of ao2_iterator_next()
* A freshly-initialized iterator has bucket=0, version = 0.
*/
struct ao2_iterator {
/*! the container */
struct ao2_container *c;
/*! operation flags */
int flags;
#define F_AO2I_DONTLOCK 1 /*!< don't lock when iterating */
/*! current bucket */
int bucket;
/*! container version */
unsigned int c_version;
/*! pointer to the current object */
void *obj;
/*! container version when the object was created */
unsigned int version;
};
struct ao2_iterator ao2_iterator_init(struct ao2_container *c, int flags);
void *ao2_iterator_next(struct ao2_iterator *a);
#endif /* _ASTERISK_ASTOBJ2_H */

View File

@@ -54,7 +54,6 @@
typedef unsigned char u_int8_t;
typedef unsigned short u_int16_t;
typedef unsigned int u_int32_t;
typedef unsigned int uint;
#endif
char* strsep(char** str, const char* delims);

View File

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

23
rtp.c
View File

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

View File

@@ -1,310 +0,0 @@
LICENSE FOR VOICE PROMPT FILES
------------------------------
The voice prompt files distributed herewith are Copyright (C) 2003-2008
Allison Smith, and provided under terms of the following License. For
more information, or to purchase custom voice prompt files, please
visit:
http://www.digium.com/ivr or http://www.theasteriskvoice.com
LICENSE
-------
THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS
CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS
PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE
WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS
PROHIBITED.
BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND
AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS
LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU
THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH
TERMS AND CONDITIONS.
1. Definitions.
a. "Collective Work" means a work, such as a periodical issue,
anthology or encyclopedia, in which the Work in its entirety in
unmodified form, along with one or more other contributions,
constituting separate and independent works in themselves, are
assembled into a collective whole. A work that constitutes a
Collective Work will not be considered a Derivative Work (as defined
below) for the purposes of this License.
b. "Creative Commons Compatible License" means a license that is
listed at http://creativecommons.org/compatiblelicenses that has been
approved by Creative Commons as being essentially equivalent to this
License, including, at a minimum, because that license: (i) contains
terms that have the same purpose, meaning and effect as the License
Elements of this License; and, (ii) explicitly permits the relicensing
of derivatives of works made available under that license under this
License or either a Creative Commons unported license or a Creative
Commons jurisdiction license with the same License Elements as this
License.
c. "Derivative Work" means a work based upon the Work or upon the Work
and other pre-existing works, such as a translation, musical
arrangement, dramatization, fictionalization, motion picture version,
sound recording, art reproduction, abridgment, condensation, or any
other form in which the Work may be recast, transformed, or adapted,
except that a work that constitutes a Collective Work will not be
considered a Derivative Work for the purpose of this License. For the
avoidance of doubt, where the Work is a musical composition or sound
recording, the synchronization of the Work in timed-relation with a
moving image ("synching") will be considered a Derivative Work for the
purpose of this License.
d. "License Elements" means the following high-level license
attributes as selected by Licensor and indicated in the title of this
License: Attribution, ShareAlike.
e. "Licensor" means the individual, individuals, entity or entities
that offers the Work under the terms of this License.
f. "Original Author" means the individual, individuals, entity or
entities who created the Work.
g. "Work" means the copyrighted voice prompt files recorded by Allison
Smith for Asterisk and distributed with this License.
h. "You" means an individual or entity exercising rights under this
License who has not previously violated the terms of this License with
respect to the Work, or who has received express permission from the
Licensor to exercise rights under this License despite a previous
violation.
2. Fair Use Rights.
Nothing in this license is intended to reduce, limit, or restrict any
rights arising from fair use, first sale or other limitations on the
exclusive rights of the copyright owner under copyright law or other
applicable laws.
3. License Grant.
Subject to the terms and conditions of this License, Licensor hereby
grants You a worldwide, royalty-free, non-exclusive, perpetual (for
the duration of the applicable copyright) license to exercise the
rights in the Work as stated below:
a. to reproduce the Work, to incorporate the Work into one or more
Collective Works, and to reproduce the Work as incorporated in the
Collective Works;
b. to create and reproduce Derivative Works provided that any such
Derivative Work, including any translation in any medium, takes
reasonable steps to clearly label, demarcate or otherwise identify
that changes were made to the original Work. For example, a
translation could be marked "The original work was translated from
English to Spanish," or a modification could indicate "The original
work has been modified.";
c. to distribute copies or phonorecords of, display publicly, perform
publicly, and perform publicly by means of a digital audio
transmission the Work including as incorporated in Collective Works;
d. to distribute copies or phonorecords of, display publicly, perform
publicly, and perform publicly by means of a digital audio
transmission Derivative Works.
e. For the avoidance of doubt, where the Work is a musical
composition:
i. Performance Royalties Under Blanket Licenses. Licensor waives the
exclusive right to collect, whether individually or, in the event
that Licensor is a member of a performance rights society
(e.g. ASCAP, BMI, SESAC), via that society, royalties for the public
performance or public digital performance e.g. webcast) of the Work.
ii.Mechanical Rights and Statutory Royalties. Licensor waives the
exclusive right to collect, whether individually or via a music
rights agency or designated agent (e.g. Harry Fox Agency), royalties
for any phonorecord You create from the Work ("cover version") and
distribute, subject to the compulsory license created by 17 USC
Section 115 of the US Copyright Act (or the equivalent in other
jurisdictions).
f. Webcasting Rights and Statutory Royalties. For the avoidance of
doubt, where the Work is a sound recording, Licensor waives the
exclusive right to collect, whether individually or via a
performance-rights society (e.g. SoundExchange), royalties for the
public digital performance (e.g. webcast) of the Work, subject to the
compulsory license created by 17 USC Section 114 of the US Copyright
Act (or the equivalent in other jurisdictions).
The above rights may be exercised in all media and formats whether now
known or hereafter devised. The above rights include the right to make
such modifications as are technically necessary to exercise the rights
in other media and formats. All rights not expressly granted by
Licensor are hereby reserved.
4. Restrictions.
The license granted in Section 3 above is expressly made subject to
and limited by the following restrictions:
a. You may distribute, publicly display, publicly perform, or publicly
digitally perform the Work only under the terms of this License, and
You must include a copy of, or the Uniform Resource Identifier for,
this License with every copy or phonorecord of the Work You
distribute, publicly display, publicly perform, or publicly digitally
perform. You may not offer or impose any terms on the Work that
restrict the terms of this License or the ability of a recipient of
the Work to exercise of the rights granted to that recipient under the
terms of the License. You may not sublicense the Work. You must keep
intact all notices that refer to this License and to the disclaimer of
warranties. When You distribute, publicly display, publicly perform,
or publicly digitally perform the Work, You may not impose any
technological measures on the Work that restrict the ability of a
recipient of the Work from You to exercise of the rights granted to
that recipient under the terms of the License. This Section 4(a)
applies to the Work as incorporated in a Collective Work, but this
does not require the Collective Work apart from the Work itself to be
made subject to the terms of this License. If You create a Collective
Work, upon notice from any Licensor You must, to the extent
practicable, remove from the Collective Work any credit as required by
Section 4(c), as requested. If You create a Derivative Work, upon
notice from any Licensor You must, to the extent practicable, remove
from the Derivative Work any credit as required by Section 4(c), as
requested.
b. You may distribute, publicly display, publicly perform, or publicly
digitally perform a Derivative Work only under: (i) the terms of this
License; (ii) a later version of this License with the same License
Elements as this License; (iii) either the Creative Commons (Unported)
license or a Creative Commons jurisdiction license (either this or a
later license version) that contains the same License Elements as this
License (e.g. Attribution-ShareAlike 3.0 (Unported)); (iv) a Creative
Commons Compatible License. If you license the Derivative Work under
one of the licenses mentioned in (iv), you must comply with the terms
of that license. If you license the Derivative Work under the terms of
any of the licenses mentioned in (i), (ii) or (iii) (the "Applicable
License"), you must comply with the terms of the Applicable License
generally and with the following provisions: (I) You must include a
copy of, or the Uniform Resource Identifier for, the Applicable
License with every copy or phonorecord of each Derivative Work You
distribute, publicly display, publicly perform, or publicly digitally
perform; (II) You may not offer or impose any terms on the Derivative
Works that restrict the terms of the Applicable License or the ability
of a recipient of the Work to exercise the rights granted to that
recipient under the terms of the Applicable License; (III) You must
keep intact all notices that refer to the Applicable License and to
the disclaimer of warranties; and, (IV) when You distribute, publicly
display, publicly perform, or publicly digitally perform the Work, You
may not impose any technological measures on the Derivative Work that
restrict the ability of a recipient of the Derivative Work from You to
exercise the rights granted to that recipient under the terms of the
Applicable License. This Section 4(b) applies to the Derivative Work
as incorporated in a Collective Work, but this does not require the
Collective Work apart from the Derivative Work itself to be made
subject to the terms of the Applicable License.
c. If You distribute, publicly display, publicly perform, or publicly
digitally perform the Work (as defined in Section 1 above) or any
Derivative Works (as defined in Section 1 above) or Collective Works
(as defined in Section 1 above), You must, unless a request has been
made pursuant to Section 4(a), keep intact all copyright notices for
the Work and provide, reasonable to the medium or means You are
utilizing: (i) the name of the Original Author (or pseudonym, if
applicable) if supplied, and/or (ii) if the Original Author and/or
Licensor designate another party or parties (e.g. a sponsor institute,
publishing entity, journal) for attribution ("Attribution Parties") in
Licensor's copyright notice, terms of service or by other reasonable
means, the name of such party or parties; the title of the Work if
supplied; to the extent reasonably practicable, the Uniform Resource
Identifier, if any, that Licensor specifies to be associated with the
Work, unless such URI does not refer to the copyright notice or
licensing information for the Work; and, consistent with Section 3(b)
in the case of a Derivative Work, a credit identifying the use of the
Work in the Derivative Work (e.g., "French translation of the Work by
Original Author," or "Screenplay based on original Work by Original
Author"). The credit required by this Section 4(c) may be implemented
in any reasonable manner; provided, however, that in the case of a
Derivative Work or Collective Work, at a minimum such credit will
appear, if a credit for all contributing authors of the Derivative
Work or Collective Work appears, then as part of these credits and in
a manner at least as prominent as the credits for the other
contributing authors. For the avoidance of doubt, You may only use the
credit required by this Section for the purpose of attribution in the
manner set out above and, by exercising Your rights under this
License, You may not implicitly or explicitly assert or imply any
connection with, sponsorship or endorsement by the Original Author,
Licensor and/or Attribution Parties, as appropriate, of You or Your
use of the Work, without the separate, express prior written
permission of the Original Author, Licensor and/or Attribution
Parties.
5. Representations, Warranties and Disclaimer.
UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING,
LICENSOR OFFERS THE WORK AS-IS AND ONLY TO THE EXTENT OF ANY RIGHTS
HELD IN THE LICENSED WORK BY THE LICENSOR. THE LICENSOR MAKES NO
REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK,
EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT
LIMITATION, WARRANTIES OF TITLE, MARKETABILITY, MERCHANTIBILITY,
FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF
LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF
ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW
THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY
TO YOU.
6. Limitation on Liability.
EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL
LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL,
INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT
OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN
ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
7. Termination.
a. This License and the rights granted hereunder will terminate
automatically upon any breach by You of the terms of this
License. Individuals or entities who have received Derivative Works or
Collective Works from You under this License, however, will not have
their licenses terminated provided such individuals or entities remain
in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8
will survive any termination of this License.
b. Subject to the above terms and conditions, the license granted here
is perpetual (for the duration of the applicable copyright in the
Work). Notwithstanding the above, Licensor reserves the right to
release the Work under different license terms or to stop distributing
the Work at any time; provided, however that any such election will
not serve to withdraw this License (or any other license that has
been, or is required to be, granted under the terms of this License),
and this License will continue in full force and effect unless
terminated as stated above.
8. Miscellaneous.
a. Each time You distribute or publicly digitally perform the Work (as
defined in Section 1 above) or a Collective Work (as defined in
Section 1 above), the Licensor offers to the recipient a license to
the Work on the same terms and conditions as the license granted to
You under this License.
b. Each time You distribute or publicly digitally perform a Derivative
Work, Licensor offers to the recipient a license to the original Work
on the same terms and conditions as the license granted to You under
this License.
c. If any provision of this License is invalid or unenforceable under
applicable law, it shall not affect the validity or enforceability of
the remainder of the terms of this License, and without further action
by the parties to this agreement, such provision shall be reformed to
the minimum extent necessary to make such provision valid and
enforceable.
d. No term or provision of this License shall be deemed waived and no
breach consented to unless such waiver or consent shall be in writing
and signed by the party to be charged with such waiver or consent.
e. This License constitutes the entire agreement between the parties
with respect to the Work licensed here. There are no understandings,
agreements or representations with respect to the Work not specified
here. Licensor shall not be bound by any additional provisions that
may appear in any communication from You. This License may not be
modified without the mutual written agreement of the Licensor and You.

View File

@@ -1,3 +1,7 @@
Music Provided By www.freeplaymusic.com. These sound files are provided by
Digium under license from Freeplay Music Corporation for use in conjunction
with the Asterisk software only.
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.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.