mirror of
https://github.com/asterisk/asterisk.git
synced 2026-03-23 14:24:29 +00:00
Compare commits
415 Commits
20.18.2
...
1.2.8-nets
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
72c0b62282 | ||
|
|
784c0f301c | ||
|
|
58a099d01c | ||
|
|
9b23589112 | ||
|
|
99cf427def | ||
|
|
f16891f03f | ||
|
|
b2fb09bd73 | ||
|
|
b752fe2fb0 | ||
|
|
ad5a410b70 | ||
|
|
bc94429e8c | ||
|
|
4f6e1f4878 | ||
|
|
a5cfea7f28 | ||
|
|
aa4d7f8df9 | ||
|
|
b5b89d732c | ||
|
|
a71ff914c6 | ||
|
|
b30db14404 | ||
|
|
0d1e7be6ea | ||
|
|
4bcedb93cc | ||
|
|
0a4881b51f | ||
|
|
c96816d287 | ||
|
|
ca89b4e76c | ||
|
|
cfd6e75c53 | ||
|
|
ebfd515ca7 | ||
|
|
db4f8886bd | ||
|
|
1683b50452 | ||
|
|
49be813673 | ||
|
|
bb59b231d3 | ||
|
|
c8d73b95a0 | ||
|
|
dac92a6182 | ||
|
|
142165cb92 | ||
|
|
3e6f1fe864 | ||
|
|
134eb7c8f6 | ||
|
|
7633ebabe8 | ||
|
|
a2ebf8a0fb | ||
|
|
54282f4e4b | ||
|
|
f360986593 | ||
|
|
7f5e1b4abe | ||
|
|
1da1f4e939 | ||
|
|
f209b6fe9b | ||
|
|
1dea733878 | ||
|
|
7b5e3d8fd5 | ||
|
|
2c8f7e39f6 | ||
|
|
64fa2ed07a | ||
|
|
2a3e4e3a38 | ||
|
|
8c111c6a6c | ||
|
|
f16c918188 | ||
|
|
c161ad3074 | ||
|
|
fcdf61c4b3 | ||
|
|
1c3ab305ce | ||
|
|
b844bc5e43 | ||
|
|
2e4c3cac8a | ||
|
|
a84ea4f014 | ||
|
|
e9ee611581 | ||
|
|
d83e489d61 | ||
|
|
269783fdff | ||
|
|
c43ec5a1bc | ||
|
|
407350f13d | ||
|
|
626a5228e3 | ||
|
|
d4b1647374 | ||
|
|
151fc69ffc | ||
|
|
fcdcbf879a | ||
|
|
91096b7368 | ||
|
|
034337fb07 | ||
|
|
0d352c2e09 | ||
|
|
f923e2c1b8 | ||
|
|
5c40f5053f | ||
|
|
b4c09a0b95 | ||
|
|
218672370e | ||
|
|
696ef06866 | ||
|
|
fa4103cc3b | ||
|
|
ef55cff62a | ||
|
|
95c0040574 | ||
|
|
d46854d378 | ||
|
|
622352f2c9 | ||
|
|
1a02e1b9c1 | ||
|
|
8cb576b993 | ||
|
|
ab900f7fad | ||
|
|
8192165970 | ||
|
|
5e0ea8da27 | ||
|
|
a8798960dd | ||
|
|
ac5119e455 | ||
|
|
c67540d87b | ||
|
|
49e844c0e6 | ||
|
|
b51560eaa1 | ||
|
|
3190fe1c57 | ||
|
|
0529a7f84a | ||
|
|
c292909f2e | ||
|
|
37a6092b27 | ||
|
|
f73cbceaf6 | ||
|
|
940c220642 | ||
|
|
ccc668b5d6 | ||
|
|
dd12cba9d0 | ||
|
|
6e6a00609d | ||
|
|
ee263ee87e | ||
|
|
63566eac42 | ||
|
|
b64b6ef1f7 | ||
|
|
54e190dacb | ||
|
|
27b633c817 | ||
|
|
4099114189 | ||
|
|
2c897a8b8c | ||
|
|
2aac61e6ad | ||
|
|
1db17b168a | ||
|
|
24298e447c | ||
|
|
d3a87c1f69 | ||
|
|
c72b1b15c4 | ||
|
|
09609b0510 | ||
|
|
63bd37a91e | ||
|
|
760352a196 | ||
|
|
1fce77dc68 | ||
|
|
bde8fa877f | ||
|
|
08aecbb1ed | ||
|
|
6f8262c9b4 | ||
|
|
f7feba82bc | ||
|
|
c0bff2ac09 | ||
|
|
8839755956 | ||
|
|
2648e9f039 | ||
|
|
15e7ec94e1 | ||
|
|
b877a5b0f7 | ||
|
|
27405fac27 | ||
|
|
d2f451ef0c | ||
|
|
b4d9cb0418 | ||
|
|
c116009930 | ||
|
|
99a4cd1de2 | ||
|
|
9a26882461 | ||
|
|
e167a9a350 | ||
|
|
f86140a213 | ||
|
|
b4589618c4 | ||
|
|
fd1d8cdf10 | ||
|
|
7a879ed598 | ||
|
|
2764568353 | ||
|
|
e8862556fd | ||
|
|
1e59a857ae | ||
|
|
b705a62dc5 | ||
|
|
98ba3160e7 | ||
|
|
0345a25e6a | ||
|
|
ce930f8e2d | ||
|
|
0314e5efc6 | ||
|
|
c1d5aad112 | ||
|
|
7cae785261 | ||
|
|
de670a217d | ||
|
|
78104df395 | ||
|
|
ba4b234d34 | ||
|
|
97b3a1c5a4 | ||
|
|
2a14dad0f0 | ||
|
|
c614f4d869 | ||
|
|
e2ad8bd804 | ||
|
|
f06bd477c0 | ||
|
|
a0e595febf | ||
|
|
2395b09fef | ||
|
|
e3bc797a82 | ||
|
|
00461229c2 | ||
|
|
c9d7d267cd | ||
|
|
380d8cfcc4 | ||
|
|
fe83f9421b | ||
|
|
2b3941fcbf | ||
|
|
aad583ff1d | ||
|
|
9b1e1fe199 | ||
|
|
ca6ae319c7 | ||
|
|
5e338e72ba | ||
|
|
10fe0e9c67 | ||
|
|
f1fade4fa6 | ||
|
|
00e45fc396 | ||
|
|
0e3f10b86f | ||
|
|
d008cda808 | ||
|
|
ba70bebc38 | ||
|
|
eb6fc20dc8 | ||
|
|
db6920d628 | ||
|
|
0fcae43d36 | ||
|
|
8d808bd9d3 | ||
|
|
c0763951ba | ||
|
|
e483c1945d | ||
|
|
0397dba5a4 | ||
|
|
c19212f8d0 | ||
|
|
d848cb43b3 | ||
|
|
50464af8c2 | ||
|
|
7f9c385052 | ||
|
|
0840844421 | ||
|
|
924be1c3b9 | ||
|
|
b2b717e61f | ||
|
|
2f6c81bbc5 | ||
|
|
490cd4ada5 | ||
|
|
ee69978cdc | ||
|
|
0a4506d0dd | ||
|
|
b7ad6d8c2d | ||
|
|
6f665a50e0 | ||
|
|
0bc176e6b8 | ||
|
|
b9b4ae4c34 | ||
|
|
2719e0aa02 | ||
|
|
2dc3679b6e | ||
|
|
74879cff5b | ||
|
|
d58f08a1a9 | ||
|
|
2d948fe31e | ||
|
|
5efaf11018 | ||
|
|
b055431b5c | ||
|
|
e3bf4c14dc | ||
|
|
d291491eb6 | ||
|
|
e098adeaf7 | ||
|
|
304e39b8ec | ||
|
|
d075508cf0 | ||
|
|
bf7f1e75da | ||
|
|
72e192fc42 | ||
|
|
86a106023b | ||
|
|
3a0ec4568d | ||
|
|
13d5513465 | ||
|
|
b670fe8554 | ||
|
|
beff9bb972 | ||
|
|
19c52a797b | ||
|
|
edbaad38fc | ||
|
|
266010c7f2 | ||
|
|
9bfab982fd | ||
|
|
18dbcd321d | ||
|
|
744ec2c02e | ||
|
|
c0dce52a12 | ||
|
|
cfe7565123 | ||
|
|
a6d8e03be5 | ||
|
|
5fc4e0d280 | ||
|
|
1c4e84f888 | ||
|
|
f6d4da1706 | ||
|
|
f5bbba29fb | ||
|
|
4f44b40d33 | ||
|
|
08e0a56f32 | ||
|
|
a0b6fe01f4 | ||
|
|
a03cf25014 | ||
|
|
9acbdbcc6d | ||
|
|
06765cc9d1 | ||
|
|
2cfee72f8e | ||
|
|
8ff712f50f | ||
|
|
6a02d8a8d9 | ||
|
|
02e4d63d7e | ||
|
|
6f4c9d5739 | ||
|
|
0bd1631812 | ||
|
|
edfe61308b | ||
|
|
9d4b0ced46 | ||
|
|
9a8533488e | ||
|
|
d7812f6634 | ||
|
|
2e10d5244e | ||
|
|
e295ae92f3 | ||
|
|
0ca5e4125e | ||
|
|
86f0c7bfcc | ||
|
|
30c9cea332 | ||
|
|
ea091271c8 | ||
|
|
bea37cf37b | ||
|
|
b2d320b259 | ||
|
|
749b766a8c | ||
|
|
6fae615794 | ||
|
|
abcbea02c1 | ||
|
|
65850c0467 | ||
|
|
413b215b6c | ||
|
|
30185fdff4 | ||
|
|
8cedcec2bc | ||
|
|
1cc6f6d3bb | ||
|
|
ca0a371996 | ||
|
|
b0fd9f9b74 | ||
|
|
396f6561a4 | ||
|
|
f16619507a | ||
|
|
69ac155838 | ||
|
|
a6bae85952 | ||
|
|
494b9c486e | ||
|
|
d8c5d338cb | ||
|
|
417438fea0 | ||
|
|
5488ffb6d4 | ||
|
|
e8725ce940 | ||
|
|
0e734920e8 | ||
|
|
ad598a2060 | ||
|
|
bb47f95262 | ||
|
|
a7a2115b9c | ||
|
|
18429f2a69 | ||
|
|
7e6430787c | ||
|
|
dc3ba8c223 | ||
|
|
2fd6520a7e | ||
|
|
7a61b36104 | ||
|
|
2f4783a770 | ||
|
|
6056391a78 | ||
|
|
213b3575ce | ||
|
|
3821e18d08 | ||
|
|
224c6e3f7c | ||
|
|
18ab6f429c | ||
|
|
07f8542ce7 | ||
|
|
cf293c224d | ||
|
|
e234ad0011 | ||
|
|
229b778b0b | ||
|
|
66f484defe | ||
|
|
ed523e248a | ||
|
|
3c49f27bf4 | ||
|
|
226d146b25 | ||
|
|
1892289329 | ||
|
|
5529fc0355 | ||
|
|
73ef559240 | ||
|
|
b59a63c8cd | ||
|
|
c36927137f | ||
|
|
649aaad100 | ||
|
|
ea4c262482 | ||
|
|
89de6c9df6 | ||
|
|
4578bc3b0c | ||
|
|
8df1e4866a | ||
|
|
9f92220a9c | ||
|
|
09a9e7bcb7 | ||
|
|
a434f8877a | ||
|
|
ef891dc0a7 | ||
|
|
3ebe29c983 | ||
|
|
1028e43464 | ||
|
|
4979f66f28 | ||
|
|
a5e9fe97c8 | ||
|
|
2293cfaf84 | ||
|
|
d252dde933 | ||
|
|
37a49a5992 | ||
|
|
2783801610 | ||
|
|
82f19c9a91 | ||
|
|
71d9531e45 | ||
|
|
3bbeaefa57 | ||
|
|
4611be805a | ||
|
|
587493fdfc | ||
|
|
50079144e3 | ||
|
|
2ca80e76a0 | ||
|
|
68e6502484 | ||
|
|
1e91dfa5df | ||
|
|
e4e5f7c65b | ||
|
|
8ef66261f1 | ||
|
|
90812b536c | ||
|
|
2b880d3ef8 | ||
|
|
6ab729aeb3 | ||
|
|
c9f97f49c5 | ||
|
|
8b352fcb94 | ||
|
|
5a06af4d57 | ||
|
|
2ede900bfd | ||
|
|
fb0ffc7784 | ||
|
|
e69171dc06 | ||
|
|
8452f6b494 | ||
|
|
f9bc6f8afc | ||
|
|
f9f44d7d9b | ||
|
|
86bb1472cc | ||
|
|
ef09c506c8 | ||
|
|
af7b3b420e | ||
|
|
3b80a35a66 | ||
|
|
f59b27258c | ||
|
|
d38fff38f9 | ||
|
|
91c5b12f25 | ||
|
|
894bdd5cda | ||
|
|
d8c58ca6c8 | ||
|
|
43f7956422 | ||
|
|
96fcc02900 | ||
|
|
2e8b6e7f20 | ||
|
|
3ed93398e9 | ||
|
|
d84e0caea8 | ||
|
|
5c1da58b90 | ||
|
|
018c617199 | ||
|
|
a49f954f6a | ||
|
|
03a8791440 | ||
|
|
78ad17381e | ||
|
|
5b03803e2f | ||
|
|
ee1e461a57 | ||
|
|
a543725311 | ||
|
|
8c701a0861 | ||
|
|
5fbe566524 | ||
|
|
e14cf31bc9 | ||
|
|
0042c03c7e | ||
|
|
41023ecb9c | ||
|
|
fb8d0a544d | ||
|
|
acaf8c9cc9 | ||
|
|
0d3fc8d103 | ||
|
|
9bbfbacacc | ||
|
|
8e301c629f | ||
|
|
9576d8a081 | ||
|
|
7db96672bf | ||
|
|
0d8f099ca2 | ||
|
|
0a4d7e5068 | ||
|
|
a32f75b800 | ||
|
|
78f37c51ef | ||
|
|
d6e5eb75ee | ||
|
|
6f433a7e7b | ||
|
|
ce2ecb5582 | ||
|
|
45c15e8561 | ||
|
|
5e3f4186da | ||
|
|
d03694df19 | ||
|
|
d52e8fa7d2 | ||
|
|
77c6cd0bff | ||
|
|
463ebe8b4b | ||
|
|
a563eab49a | ||
|
|
bf9d4b103d | ||
|
|
7dc2449f3a | ||
|
|
27cc20db11 | ||
|
|
4e04f5f731 | ||
|
|
5ec3844077 | ||
|
|
f641c7cd0d | ||
|
|
49aa54cafc | ||
|
|
e3b81e66a1 | ||
|
|
7bb6b928b5 | ||
|
|
ad4dc7c4a9 | ||
|
|
feb9764721 | ||
|
|
8c74501001 | ||
|
|
5861d3fd64 | ||
|
|
08acdc6a86 | ||
|
|
3b50570c9b | ||
|
|
00d7e962a7 | ||
|
|
192f7413c2 | ||
|
|
5bdb8074aa | ||
|
|
6abe5e1b23 | ||
|
|
4612b4ccca | ||
|
|
3245bf61a1 | ||
|
|
9ee13167bb | ||
|
|
ca9633ca9b | ||
|
|
e04884545c | ||
|
|
aa2239a050 | ||
|
|
40a1b60cbd | ||
|
|
cccb11916f | ||
|
|
49641825eb | ||
|
|
c14c078405 | ||
|
|
f2af073588 | ||
|
|
b9a5eddb6d | ||
|
|
bffc815375 | ||
|
|
5c3f322364 | ||
|
|
3a6fae817c | ||
|
|
d8f74ecb94 | ||
|
|
f7f2b1b033 | ||
|
|
601ab7ff82 |
@@ -1 +1 @@
|
||||
40
|
||||
8
|
||||
|
||||
87
.github/ISSUE_TEMPLATE/bug-report.yml
vendored
87
.github/ISSUE_TEMPLATE/bug-report.yml
vendored
@@ -1,87 +0,0 @@
|
||||
name: Bug
|
||||
description: File a bug report
|
||||
title: "[bug]: "
|
||||
labels: ["bug", "triage"]
|
||||
#assignees:
|
||||
# - octocat
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thanks for creating a report! The issue has entered the triage process. That means the issue will wait in this status until a Bug Marshal has an opportunity to review the issue. Once the issue has been reviewed you will receive comments regarding the next steps towards resolution. Please note that log messages and other files should not be sent to the Sangoma Asterisk Team unless explicitly asked for. All files should be placed on this issue in a sanitized fashion as needed.
|
||||
|
||||
A good first step is for you to review the Asterisk Issue Guidelines if you haven't already. The guidelines detail what is expected from an Asterisk issue report.
|
||||
|
||||
Then, if you are submitting a patch, please review the Patch Contribution Process.
|
||||
|
||||
Please note that once your issue enters an open state it has been accepted. As Asterisk is an open source project there is no guarantee or timeframe on when your issue will be looked into. If you need expedient resolution you will need to find and pay a suitable developer. Asking for an update on your issue will not yield any progress on it and will not result in a response. All updates are posted to the issue when they occur.
|
||||
|
||||
Please note that by submitting data, code, or documentation to Sangoma through GitHub, you accept the Terms of Use present at
|
||||
https://www.asterisk.org/terms-of-use/.
|
||||
Thanks for taking the time to fill out this bug report!
|
||||
- type: dropdown
|
||||
id: severity
|
||||
attributes:
|
||||
label: Severity
|
||||
options:
|
||||
- Trivial
|
||||
- Minor
|
||||
- Major
|
||||
- Critical
|
||||
- Blocker
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
id: versions
|
||||
attributes:
|
||||
label: Versions
|
||||
description: Enter one or more versions separated by commas.
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
id: components
|
||||
attributes:
|
||||
label: Components/Modules
|
||||
description: Enter one or more components or modules separated by commas.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: environment
|
||||
attributes:
|
||||
label: Operating Environment
|
||||
description: OS, Disribution, Version, etc.
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
id: frequency
|
||||
attributes:
|
||||
label: Frequency of Occurrence
|
||||
options:
|
||||
- "Never"
|
||||
- "One Time"
|
||||
- "Occasional"
|
||||
- "Frequent"
|
||||
- "Constant"
|
||||
- type: textarea
|
||||
id: description
|
||||
attributes:
|
||||
label: Issue Description
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: logs
|
||||
attributes:
|
||||
label: Relevant log output
|
||||
description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks.
|
||||
render: shell
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
[Asterisk Issue Guidelines](https://wiki.asterisk.org/wiki/display/AST/Asterisk+Issue+Guidelines)
|
||||
- type: checkboxes
|
||||
id: guidelines
|
||||
attributes:
|
||||
label: Asterisk Issue Guidelines
|
||||
options:
|
||||
- label: Yes, I have read the Asterisk Issue Guidelines
|
||||
required: true
|
||||
11
.github/ISSUE_TEMPLATE/config.yml
vendored
11
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -1,11 +0,0 @@
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: Asterisk Community Support
|
||||
url: https://community.asterisk.org
|
||||
about: Please ask and answer questions here.
|
||||
- name: Feature Requests (Without Code)
|
||||
url: https://github.com/asterisk/asterisk-feature-requests/issues
|
||||
about: Please submit feature requests (without code) here.
|
||||
- name: Improvement Requests (Without Code)
|
||||
url: https://github.com/asterisk/asterisk-feature-requests/issues
|
||||
about: Please submit improvement requests (without code) here.
|
||||
27
.github/ISSUE_TEMPLATE/improvement.yml
vendored
27
.github/ISSUE_TEMPLATE/improvement.yml
vendored
@@ -1,27 +0,0 @@
|
||||
name: Improvement
|
||||
description: Submit an improvement to existing functionality
|
||||
title: "[improvement]: "
|
||||
labels: ["improvement", "triage"]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thanks for creating a report! The issue has entered the triage process. That means the issue will wait in this status until a Bug Marshal has an opportunity to review the issue. Once the issue has been reviewed you will receive comments regarding the next steps towards resolution. Please note that log messages and other files should not be sent to the Sangoma Asterisk Team unless explicitly asked for. All files should be placed on this issue in a sanitized fashion as needed.
|
||||
|
||||
A good first step is for you to review the Asterisk Issue Guidelines if you haven't already. The guidelines detail what is expected from an Asterisk issue report.
|
||||
|
||||
Then, if you are submitting a patch, please review the Patch Contribution Process.
|
||||
|
||||
Please note that once your issue enters an open state it has been accepted. As Asterisk is an open source project there is no guarantee or timeframe on when your issue will be looked into. If you need expedient resolution you will need to find and pay a suitable developer. Asking for an update on your issue will not yield any progress on it and will not result in a response. All updates are posted to the issue when they occur.
|
||||
|
||||
Please note that by submitting data, code, or documentation to Sangoma through GitHub, you accept the Terms of Use present at
|
||||
https://www.asterisk.org/terms-of-use/.
|
||||
Thanks for taking the time to fill out this bug report!
|
||||
- type: textarea
|
||||
id: description
|
||||
attributes:
|
||||
label: Improvement Description
|
||||
description: Describe the improvement in as much detail as possible
|
||||
validations:
|
||||
required: true
|
||||
|
||||
27
.github/ISSUE_TEMPLATE/new-feature.yml
vendored
27
.github/ISSUE_TEMPLATE/new-feature.yml
vendored
@@ -1,27 +0,0 @@
|
||||
name: New Feature Submission
|
||||
description: Submit a New Feature
|
||||
title: "[new-feature]: "
|
||||
labels: ["new-feature", "triage"]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thanks for creating a report! The issue has entered the triage process. That means the issue will wait in this status until a Bug Marshal has an opportunity to review the issue. Once the issue has been reviewed you will receive comments regarding the next steps towards resolution. Please note that log messages and other files should not be sent to the Sangoma Asterisk Team unless explicitly asked for. All files should be placed on this issue in a sanitized fashion as needed.
|
||||
|
||||
A good first step is for you to review the Asterisk Issue Guidelines if you haven't already. The guidelines detail what is expected from an Asterisk issue report.
|
||||
|
||||
Then, if you are submitting a patch, please review the Patch Contribution Process.
|
||||
|
||||
Please note that once your issue enters an open state it has been accepted. As Asterisk is an open source project there is no guarantee or timeframe on when your issue will be looked into. If you need expedient resolution you will need to find and pay a suitable developer. Asking for an update on your issue will not yield any progress on it and will not result in a response. All updates are posted to the issue when they occur.
|
||||
|
||||
Please note that by submitting data, code, or documentation to Sangoma through GitHub, you accept the Terms of Use present at
|
||||
https://www.asterisk.org/terms-of-use/.
|
||||
Thanks for taking the time to fill out this bug report!
|
||||
- type: textarea
|
||||
id: description
|
||||
attributes:
|
||||
label: Feature Description
|
||||
description: Describe the new feature in as much detail as possible
|
||||
validations:
|
||||
required: true
|
||||
|
||||
24
.github/workflows/CreateDocs.yml
vendored
24
.github/workflows/CreateDocs.yml
vendored
@@ -1,24 +0,0 @@
|
||||
name: CreateDocs
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
branches:
|
||||
description: "JSON array of branches: ['18','20'] (no spaces) or leave blank for all current branches."
|
||||
required: false
|
||||
type: string
|
||||
schedule:
|
||||
# Times are UTC
|
||||
- cron: '0 04 * * *'
|
||||
|
||||
jobs:
|
||||
CreateDocs:
|
||||
if: ${{ ( github.event_name == 'schedule' && fromJSON(vars.WIKIDOCS_ENABLE) ) || github.event_name == 'workflow_dispatch' }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
branch: ${{ fromJSON(inputs.branches || vars.WIKIDOC_BRANCHES) }}
|
||||
uses: asterisk/asterisk-ci-actions/.github/workflows/AsteriskCreateDocs.yml@main
|
||||
with:
|
||||
asterisk_repo: ${{ github.repository }}
|
||||
base_branch: ${{ matrix.branch }}
|
||||
|
||||
15
.github/workflows/IssueOpened.yml
vendored
15
.github/workflows/IssueOpened.yml
vendored
@@ -1,15 +0,0 @@
|
||||
name: Issue Opened
|
||||
run-name: "Issue ${{github.event.number}} ${{github.event.action}} by ${{github.actor}}"
|
||||
on:
|
||||
issues:
|
||||
types: opened
|
||||
|
||||
jobs:
|
||||
triage:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: initial labeling
|
||||
uses: andymckay/labeler@master
|
||||
with:
|
||||
add-labels: "triage"
|
||||
ignore-if-labeled: true
|
||||
11
.github/workflows/NightlyAdmin.yml
vendored
11
.github/workflows/NightlyAdmin.yml
vendored
@@ -1,11 +0,0 @@
|
||||
name: NightlyAdmin
|
||||
on:
|
||||
schedule:
|
||||
- cron: '30 1 * * *'
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
NightlyAdmin:
|
||||
uses: asterisk/asterisk-ci-actions/.github/workflows/AsteriskNightlyAdmin.yml@main
|
||||
secrets:
|
||||
ASTERISKTEAM_PAT: ${{ secrets.ASTERISKTEAM_PAT }}
|
||||
25
.github/workflows/NightlyTests.yml
vendored
25
.github/workflows/NightlyTests.yml
vendored
@@ -1,25 +0,0 @@
|
||||
name: NightlyTests
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
branches:
|
||||
required: false
|
||||
type: string
|
||||
description: "Array of branches to run: ['21','master']. Defaults to NIGHTLYTEST_BRANCHES"
|
||||
group_list:
|
||||
required: false
|
||||
type: string
|
||||
description: "Array of test groups to run: ['ari1','channels']. Defaults to NIGHTLYTEST_LIST"
|
||||
|
||||
schedule:
|
||||
# Monday-Saturday 2am
|
||||
- cron: '0 2 * * 1-6'
|
||||
|
||||
jobs:
|
||||
NightlyTests:
|
||||
name: NightlyTests
|
||||
uses: asterisk/asterisk-ci-actions/.github/workflows/AsteriskNightlyTest.yml@main
|
||||
with:
|
||||
branches: ${{ inputs.branches || vars.NIGHTLYTEST_BRANCHES }}
|
||||
group_list: ${{ inputs.group_list || vars.NIGHTLYTEST_LIST }}
|
||||
realtime: false
|
||||
14
.github/workflows/OnPRCPCheck.yml
vendored
14
.github/workflows/OnPRCPCheck.yml
vendored
@@ -1,14 +0,0 @@
|
||||
name: PRCPCheck
|
||||
run-name: "PR ${{ github.event.number }} CPCheck by ${{ github.actor }}"
|
||||
on:
|
||||
pull_request_target:
|
||||
types: [ labeled ]
|
||||
|
||||
jobs:
|
||||
PRCPCheck:
|
||||
name: "run-cpcheck"
|
||||
if: ${{ github.event.label.name == vars.CHERRY_PICK_TEST_LABEL }}
|
||||
concurrency:
|
||||
group: cpcheck-${{ github.triggering_actor }}-${{ github.head_ref }}
|
||||
cancel-in-progress: true
|
||||
uses: asterisk/asterisk-ci-actions/.github/workflows/AsteriskPRCPCheck.yml@main
|
||||
14
.github/workflows/OnPRCheck.yml
vendored
14
.github/workflows/OnPRCheck.yml
vendored
@@ -1,14 +0,0 @@
|
||||
name: PRCheck
|
||||
run-name: "PR ${{ github.event.number }} Check(${{github.event.action}}) by ${{ github.actor }}"
|
||||
on:
|
||||
pull_request_target:
|
||||
types: [ opened, reopened, synchronize, labeled ]
|
||||
|
||||
jobs:
|
||||
PRCheck:
|
||||
name: "run-check"
|
||||
if: ${{ (github.event.action != 'labeled') || (github.event.action == 'labeled' && github.event.label.name == vars.RECHECKPR_LABEL) }}
|
||||
concurrency:
|
||||
group: check-${{ github.triggering_actor }}-${{ github.head_ref }}
|
||||
cancel-in-progress: true
|
||||
uses: asterisk/asterisk-ci-actions/.github/workflows/AsteriskPRCheck.yml@main
|
||||
14
.github/workflows/OnPRMergeApproved.yml
vendored
14
.github/workflows/OnPRMergeApproved.yml
vendored
@@ -1,14 +0,0 @@
|
||||
name: PRMerge
|
||||
run-name: "PR ${{ github.event.number }} Merge by ${{ github.actor }}"
|
||||
on:
|
||||
pull_request_target:
|
||||
types: [ labeled ]
|
||||
|
||||
jobs:
|
||||
PRMerge:
|
||||
name: "run-merge"
|
||||
if: contains(fromJSON(vars.MERGE_APPROVED_LABELS), github.event.label.name)
|
||||
concurrency:
|
||||
group: merge-${{ github.triggering_actor }}-${{ github.head_ref }}
|
||||
cancel-in-progress: true
|
||||
uses: asterisk/asterisk-ci-actions/.github/workflows/AsteriskPRMerge.yml@main
|
||||
94
.github/workflows/Releaser.yml
vendored
94
.github/workflows/Releaser.yml
vendored
@@ -1,94 +0,0 @@
|
||||
name: Releaser
|
||||
run-name: ${{ github.actor }} is creating ${{vars.PRODUCT_NAME}} release ${{inputs.new_version}}
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
release_type:
|
||||
description: |
|
||||
Release Type:
|
||||
required: true
|
||||
type: choice
|
||||
options:
|
||||
- STANDARD
|
||||
- SECURITY
|
||||
- HOTFIX
|
||||
default: STANDARD
|
||||
new_version:
|
||||
description: |
|
||||
New Version:
|
||||
Examples:
|
||||
20.4.0-rc1, 20.4.0-rc2, 20.4.0, 20.4.1
|
||||
certified-20.4-cert1-rc1, certified-20.4-cert1
|
||||
required: true
|
||||
type: string
|
||||
advisories:
|
||||
description: |
|
||||
Comma separated list of advisories for SECURITY releases.
|
||||
NO SPACES
|
||||
Example: GHSA-4xjp-22g4-9fxm,GHSA-4xjp-22g4-zzzz
|
||||
required: false
|
||||
type: string
|
||||
skip_cherry_pick:
|
||||
description: |
|
||||
Skip automatic cherry-pick for regular RC1 releases? USE WITH CAUTION!
|
||||
required: true
|
||||
type: boolean
|
||||
default: false
|
||||
force_cherry_pick:
|
||||
description: |
|
||||
Force cherry-pick for non-RC1 releases? USE WITH CAUTION!
|
||||
required: true
|
||||
type: boolean
|
||||
default: false
|
||||
skip_test_builds:
|
||||
description: |
|
||||
Skip test builds? USE WITH CAUTION!
|
||||
required: true
|
||||
type: boolean
|
||||
default: false
|
||||
push_release_branches:
|
||||
description: |
|
||||
Push release branches live?
|
||||
required: true
|
||||
type: boolean
|
||||
default: false
|
||||
create_github_release:
|
||||
description: |
|
||||
Create the GitHub release?
|
||||
required: true
|
||||
type: boolean
|
||||
default: false
|
||||
push_tarballs:
|
||||
description: |
|
||||
Push tarballs to downloads server?
|
||||
required: true
|
||||
type: boolean
|
||||
default: false
|
||||
send_email:
|
||||
description: |
|
||||
Send announcement emails?
|
||||
required: true
|
||||
type: boolean
|
||||
default: false
|
||||
|
||||
jobs:
|
||||
Releaser:
|
||||
uses: asterisk/asterisk-ci-actions/.github/workflows/AsteriskRelease.yml@main
|
||||
with:
|
||||
release_type: ${{inputs.release_type}}
|
||||
new_version: ${{inputs.new_version}}
|
||||
advisories: ${{inputs.advisories}}
|
||||
skip_cherry_pick: ${{inputs.skip_cherry_pick}}
|
||||
force_cherry_pick: ${{inputs.force_cherry_pick}}
|
||||
skip_test_builds: ${{inputs.skip_test_builds}}
|
||||
push_release_branches: ${{inputs.push_release_branches}}
|
||||
create_github_release: ${{inputs.create_github_release}}
|
||||
push_tarballs: ${{inputs.push_tarballs}}
|
||||
send_email: ${{inputs.send_email}}
|
||||
secrets:
|
||||
gpg_private_key: ${{secrets.ASTDEV_GPG_PRIV_KEY}}
|
||||
asteriskteam_gh_token: ${{secrets.ASTERISKTEAM_PAT}}
|
||||
asteriskteam_email_username: ${{secrets.ASTERISKTEAM_SES_KEY_ID}}
|
||||
asteriskteam_email_secret: ${{secrets.ASTERISKTEAM_SES_KEY_SECRET}}
|
||||
deploy_ssh_priv_key: ${{secrets.DOWNLOADS_DEPLOY_SSH_PRIV_KEY}}
|
||||
deploy_ssh_username: ${{secrets.DOWNLOADS_DEPLOY_SSH_USERNAME}}
|
||||
25
.github/workflows/WeeklyTests.yml
vendored
25
.github/workflows/WeeklyTests.yml
vendored
@@ -1,25 +0,0 @@
|
||||
name: WeeklyTests
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
branches:
|
||||
required: false
|
||||
type: string
|
||||
description: "Array of branches to run: ['21','master']. Defaults to NIGHTLYTEST_BRANCHES"
|
||||
group_list:
|
||||
required: false
|
||||
type: string
|
||||
description: "Array of test groups to run: ['ari1','channels']. Defaults to NIGHTLYTEST_LIST"
|
||||
|
||||
schedule:
|
||||
# Sunday 2am
|
||||
- cron: '0 2 * * 0'
|
||||
|
||||
jobs:
|
||||
WeeklyTests:
|
||||
name: WeeklyTests
|
||||
uses: asterisk/asterisk-ci-actions/.github/workflows/AsteriskNightlyTest.yml@main
|
||||
with:
|
||||
branches: ${{ inputs.branches || vars.NIGHTLYTEST_BRANCHES }}
|
||||
group_list: ${{ inputs.group_list || vars.NIGHTLYTEST_LIST }}
|
||||
realtime: true
|
||||
40
.gitignore
vendored
40
.gitignore
vendored
@@ -1,40 +0,0 @@
|
||||
# git ls-files --others --exclude-from=.git/info/exclude
|
||||
# Lines that start with '#' are comments.
|
||||
# For a project mostly in C, the following would be a good set of
|
||||
# exclude patterns (uncomment them if you want to use them):
|
||||
# *.[oa]
|
||||
# *~
|
||||
|
||||
# See .gitignore in subdirectories for more ignored files
|
||||
|
||||
*~
|
||||
*.[oadi]
|
||||
*.gz
|
||||
*.ii
|
||||
*.oo
|
||||
*.eo
|
||||
*.so
|
||||
*.exports
|
||||
*.moduleinfo
|
||||
*.makeopts
|
||||
*.makedeps
|
||||
.lastclean
|
||||
/.pc
|
||||
aclocal.m4
|
||||
autom4te.cache
|
||||
config.log
|
||||
config.status
|
||||
defaults.h
|
||||
makeopts
|
||||
makeopts.embed_rules
|
||||
menuselect-tree
|
||||
*.sha1
|
||||
*.pyc
|
||||
*.gcno
|
||||
*.gcda
|
||||
latex
|
||||
doxygen.log
|
||||
out/
|
||||
*.orig
|
||||
tests/CI/output
|
||||
.develvars
|
||||
1
.lastclean
Normal file
1
.lastclean
Normal file
@@ -0,0 +1 @@
|
||||
8
|
||||
11
BSDmakefile
11
BSDmakefile
@@ -1,11 +0,0 @@
|
||||
# This is a convenience script for systems on which BSD make is the default,
|
||||
# such that typing 'make' will do what people expect, instead of producing an
|
||||
# error (due to incompatibilities between BSD make and GNU make).
|
||||
|
||||
.include "makeopts"
|
||||
|
||||
all::
|
||||
$(MAKE)
|
||||
|
||||
$(.TARGETS)::
|
||||
$(MAKE) $(.TARGETS)
|
||||
12
BUGS
12
BUGS
@@ -1,22 +1,22 @@
|
||||
Asterisk Bug Tracking Information
|
||||
=================================
|
||||
|
||||
To learn about and report Asterisk bugs, please visit
|
||||
To learn about and report Asterisk bugs, please visit
|
||||
the official Asterisk Bug Tracker at:
|
||||
|
||||
https://github.com/asterisk/asterisk/issues/
|
||||
http://bugs.digium.com
|
||||
|
||||
For more information on using the bug tracker, or to
|
||||
learn how you can contribute by acting as a bug marshal
|
||||
For more information on using the bug tracker, or to
|
||||
learn how you can contribute by acting as a bug marshall
|
||||
please see:
|
||||
|
||||
https://docs.asterisk.org/Asterisk-Community/Asterisk-Issue-Guidelines/
|
||||
http://www.digium.com/index.php?menu=bugguidelines
|
||||
|
||||
If you would like to submit a feature request, please
|
||||
resist the temptation to post it to the bug tracker.
|
||||
Feature requests should be posted to the asterisk-dev
|
||||
mailing list, located at:
|
||||
|
||||
http://lists.digium.com
|
||||
http://lists.digium.com
|
||||
|
||||
Thank you!
|
||||
|
||||
127
CHANGES
Normal file
127
CHANGES
Normal file
@@ -0,0 +1,127 @@
|
||||
Changes since Asterisk 1.2.0-beta2:
|
||||
|
||||
* Cygwin build system portability
|
||||
* Optional generation of outbound silence during channel recording
|
||||
|
||||
Changes since Asterisk 1.2.0-beta1:
|
||||
|
||||
* Many, many bug fixes
|
||||
* Documentation and sample configuration updates
|
||||
* Vastly improved presence/subscription support in the SIP channel driver
|
||||
* A new (experimental) mISDN channel driver
|
||||
* A new monitoring application (MixMonitor)
|
||||
* More portability fixes for non-Linux platforms
|
||||
* New dialplan functions replacing old applications
|
||||
* Significant deadlock and performance upgrades for the Manager interface
|
||||
* An upgrade to the 'new' dialplan expression parser for all users
|
||||
* New Zaptel echo cancellers with improved performance
|
||||
* Support for the latest OSP toolkit from TransNexus
|
||||
* Support user-controlled volume adjustment in MeetMe application
|
||||
* More dialplan applications now return status variables instead of priority jumping
|
||||
* Much more powerful ENUM support in the dialplan
|
||||
* SIP domain support for authentication and virtual hosting
|
||||
* Many PRI protocol updates and fixes, including more complete Q.SIG support
|
||||
* New applications: Pickup() and Page()
|
||||
|
||||
Changes since Asterisk 1.0:
|
||||
|
||||
This list currently only containts changes made from the end of November until
|
||||
March 26, 2005.
|
||||
|
||||
* Add new applications:
|
||||
-- AgentMonitorOutgoing
|
||||
-- Curl
|
||||
-- ExecIf
|
||||
-- ExecIfTime
|
||||
-- IAX2Provision
|
||||
-- MacroExit
|
||||
-- MacroIf
|
||||
-- PauseQueueMember
|
||||
-- ReadFile
|
||||
-- SetRDNIS
|
||||
-- SIPAddHeader
|
||||
-- SIPGetHeader
|
||||
-- StartMusicOnHold
|
||||
-- StopMusicOnHold
|
||||
-- UnpauseQueueMember
|
||||
-- WaitForSilence
|
||||
-- While / EndWhile
|
||||
* app Answer
|
||||
-- added delay option
|
||||
* app ChanIsAvail
|
||||
-- added 's' option
|
||||
* app Dial
|
||||
-- add option to specify the class for musiconhold with m option
|
||||
* app EnumLookup
|
||||
-- added "reload enum" for configuration
|
||||
* app Goto
|
||||
-- added relative priorities
|
||||
* app GotoIf
|
||||
-- added relative priorities
|
||||
* app MeetMe
|
||||
-- added 'i' option
|
||||
-- added 'r' option
|
||||
-- added 'T' option
|
||||
-- added 'P' option
|
||||
-- added 'c' option
|
||||
-- added adminpin to meetme.conf
|
||||
-- added reload command
|
||||
* app PrivacyManager
|
||||
-- add config file privacy.conf
|
||||
* app queue
|
||||
-- queues.conf
|
||||
-- added persistentmembers option to queues.conf
|
||||
-- changed music option to musiconhold
|
||||
-- added weight option
|
||||
-- added note about why agent groups probably shouldn't be used
|
||||
-- added timeoutrestart option
|
||||
* app Read
|
||||
-- added attempts parameter
|
||||
-- added timeout parameter
|
||||
* app Record
|
||||
-- added 'q' option
|
||||
* app SendDTMF
|
||||
-- add timeout option
|
||||
* app SMS
|
||||
-- document alternative syntax for queueing messages
|
||||
* app Voicemail
|
||||
-- add info about VM_CATEGORY
|
||||
-- voicemail.conf
|
||||
-- added usedirectory option
|
||||
-- added VM_CIDNUM and VM_CIDNAME in message config
|
||||
* chan IAX2
|
||||
-- new jitterbuffer
|
||||
-- added setvar option
|
||||
-- added regex to iax2 show peers/users
|
||||
-- allow multiple bindaddr lines in iax.conf
|
||||
-- added reload command
|
||||
-- added forcejitterbuffer option
|
||||
-- added note about specifying bindport before bindaddr
|
||||
-- added trunktimestamps option
|
||||
* chan Agent
|
||||
-- added agent logoff CLI command
|
||||
* chan OSS
|
||||
-- added Flash CLI command
|
||||
* chan SIP
|
||||
-- added setvar option
|
||||
-- added compactheaders option
|
||||
-- added usereqphone option
|
||||
-- added registertimeout option
|
||||
-- added externhost option
|
||||
-- added sip notify CLI command
|
||||
-- added sip_notify.conf
|
||||
-- added allowguest option
|
||||
* chan Zap
|
||||
-- added hanguponplarityswitch option
|
||||
-- added sendcalleridafter option
|
||||
-- added priresetinterval option
|
||||
-- added TON/NPI config options (the ones right above the resetinterval option)
|
||||
-- added answeronpolarityswitch option
|
||||
-- added "never" for resetinterval
|
||||
* extensions
|
||||
-- allow '*' when including files (#include "sip-*.conf")
|
||||
-- added eswitch
|
||||
* General
|
||||
-- added #exec syntax for including output from a command
|
||||
-- added show features CLI command
|
||||
-- added configuration templates for category inheritance
|
||||
@@ -1 +0,0 @@
|
||||
ChangeLogs/ChangeLog-20.18.2.html
|
||||
@@ -1 +0,0 @@
|
||||
ChangeLogs/ChangeLog-20.18.2.md
|
||||
373
CREDITS
373
CREDITS
@@ -1,322 +1,101 @@
|
||||
|
||||
=== DEVELOPMENT SUPPORT ===
|
||||
We'd like to thank the following companies for helping fund development of
|
||||
Asterisk:
|
||||
|
||||
We'd like to thank the following companies for helping fund development of
|
||||
Asterisk.
|
||||
Pilosoft, Inc. - for supporting ADSI development in Asterisk
|
||||
|
||||
* Pilosoft, Inc. - for supporting ADSI development in Asterisk
|
||||
Asterlink, Inc. - for supporting broad Asterisk development
|
||||
|
||||
* Asterlink, Inc. - for supporting broad Asterisk development
|
||||
GFS - for supporting ALSA development
|
||||
|
||||
* GFS - for supporting ALSA development
|
||||
Telesthetic - for supporting SIP development
|
||||
|
||||
* Telesthetic - for supporting SIP development
|
||||
Christos Ricudis - for substantial code contributions
|
||||
|
||||
* Christos Ricudis - for substantial code contributions
|
||||
nic.at - ENUM support in Asterisk
|
||||
|
||||
* nic.at - ENUM support in Asterisk
|
||||
Paul Bagyenda, Digital Solutions - for initial Voicetronix driver development
|
||||
|
||||
* Paul Bagyenda, Digital Solutions - for initial Voicetronix driver
|
||||
development.
|
||||
|
||||
* John Todd, TalkPlus, Inc. and JR Richardson, Ntegrated Solutions.
|
||||
for funding the development of SIP Session Timers support.
|
||||
|
||||
* Omnitor AB, Gunnar Hellström, for funding work with videocaps,
|
||||
T.140 RED, originate with video/text and many more
|
||||
contributions.
|
||||
|
||||
* ClearIT AB for work with meetme, res_mutestream, RTCP, manager and
|
||||
tonezones.
|
||||
|
||||
* NetNation Communications (www.netnation.com)
|
||||
Kevin Lindsay <kevinl@netnation.com>
|
||||
Persistent Dynamic Queue Members
|
||||
|
||||
* inAccess Networks (work funded by Hellas On Line (HOL) www.hol.gr)
|
||||
Priorities in queues
|
||||
|
||||
* Voop AS, Nuvio Inc, Inotel S.A and Foniris Telecom A/S - funding for
|
||||
rewrite of SIP transfers
|
||||
|
||||
|
||||
=== WISHLIST CONTRIBUTORS ===
|
||||
|
||||
We'd like to thank the following for contributing to our wishlist
|
||||
|
||||
* Jeremy McNamara - SpeeX support
|
||||
|
||||
* Nick Seraphin - RDNIS support
|
||||
|
||||
* Gary - Phonejack ADSI (in progress)
|
||||
|
||||
* Wasim - Hangup detect
|
||||
=== WISHLIST CONTRIBUTERS ===
|
||||
Jeremy McNamara - SpeeX support
|
||||
Nick Seraphin - RDNIS support
|
||||
Gary - Phonejack ADSI (in progress)
|
||||
Wasim - Hangup detect
|
||||
|
||||
=== HARDWARE DONORS ===
|
||||
|
||||
We'd like to thank the following for granting access to hardware for testing.
|
||||
|
||||
* Thanks to QuickNet Technologies for their donation of an Internet
|
||||
PhoneJack and Linejack card to the project.
|
||||
(http://www.quicknet.net)
|
||||
|
||||
* Thanks to VoipSupply for their donation of Sipura ATAs to the project
|
||||
for T.38 testing. (http://www.voipsupply.com)
|
||||
|
||||
* Thanks to Grandstream for their donation of ATAs to the project for
|
||||
T.38 testing. (http://www.grandstream.com)
|
||||
* Thanks to QuickNet Technologies for their donation of an Internet
|
||||
PhoneJack and Linejack card to the project. (http://www.quicknet.net)
|
||||
|
||||
=== MISCELLANEOUS PATCHES ===
|
||||
|
||||
We'd like to thank the following for their patches
|
||||
|
||||
* Jim Dixon - Zapata Telephony and app_rpt
|
||||
http://www.zapatatelephony.org/app_rpt.html
|
||||
|
||||
* Russell Bryant - Asterisk release manager and countless enhancements
|
||||
and bug fixes. russell(AT)digium.com
|
||||
|
||||
* Anthony Minessale II - Countless big and small fixes, and relentless
|
||||
forward push. ChanSpy, ForkCDR, ControlPlayback, While/EndWhile,
|
||||
DumpChan, Dictate, MacroIf, ExecIf, ExecIfTime, RetryDial,
|
||||
MixMonitor applications; many realtime concepts and
|
||||
implementation pieces, including res_config_odbc; format_slin;
|
||||
cdr_custom; several features in Dial including L(), G() and
|
||||
enhancements to M() and D(); several CDR enhancements including
|
||||
CDR variables; attended transfer; one touch record; native MOH;
|
||||
manager eventmask; command line '-t' flag to allow
|
||||
recording/voicemail on nfs shares; #exec command and multiline
|
||||
comments in config files; setvar in iax and sip configs.
|
||||
anthm(AT)signalwire.com http://www.signalwire.com
|
||||
|
||||
* James Golovich - Innumerable contributions, including SIP TCP and TLS
|
||||
support. You can find him and asterisk-perl at
|
||||
http://asterisk.gnuinter.net
|
||||
|
||||
* Andre Bierwirth - Extension hints and status
|
||||
|
||||
* Jean-Denis Girard - Various contributions from the South Pacific
|
||||
Islands jd-girard(AT)sysnux.pf http://www.sysnux.pf
|
||||
|
||||
* William Jordan / Vonage - MySQL enhancements to Voicemail
|
||||
wjordan(AT)vonage.com
|
||||
|
||||
* Jac Kersing - Various fixes
|
||||
|
||||
* Steven Critchfield - Seek and Trunc functions for playback and
|
||||
recording critch(AT)basesys.com
|
||||
|
||||
* Jefferson Noxon - app_lookupcidname, app_db, and various other
|
||||
contributions
|
||||
|
||||
* Klaus-Peter Junghanns - in-band DTMF on SIP and MGCP
|
||||
|
||||
* Ross Finlayson - Dynamic RTP payload support
|
||||
|
||||
* Mahmut Fettahlioglu - Audio recording, music-on-hold changes, alaw
|
||||
file format, and various fixes. Can be contacted at
|
||||
mahmut(AT)oa.com.au
|
||||
|
||||
* James Dennis - Cisco SIP compatibility patches to work with SIP
|
||||
service providers. Can be contacted at asterisk(AT)jdennis.net
|
||||
|
||||
* Tilghman Lesher - ast_localtime(); ast_say_date_with_format();
|
||||
GotoIfTime, SayUnixTime, HasNewVoicemail applications;
|
||||
CUT, SORT, EVAL, CURL, FIELDQTY, STRFTIME, some QUEUE*
|
||||
functions; func_odbc, cdr_adaptive_odbc, and other innumerable
|
||||
bug fixes. tilghman(AT)digium.com
|
||||
http://asterisk.drunkcoder.com
|
||||
|
||||
* Jayson Vantuyl - Manager protocol changes, various other bugs.
|
||||
jvantuyl(AT)computingedge.net
|
||||
|
||||
* Thorsten Lockert - OpenBSD, FreeBSD ports, making MacOS X port run on
|
||||
10.3, dialplan include verification, route lookup on OpenBSD,
|
||||
SNMP agent support (res_snmp), various other bugs.
|
||||
tholo(AT)sigmasoft.com
|
||||
|
||||
* Josh Roberson - chan_zap reload support, Advanced Voicemail Features,
|
||||
& other misc. patches. josh(AT)asteriasgi.com
|
||||
http://www.asteriasgi.com
|
||||
|
||||
* William Waites - syslog support, SIP NAT traversal for SIP-UA.
|
||||
ww(AT)styx.org
|
||||
|
||||
* Rich Murphey - Porting to FreeBSD, NetBSD, OpenBSD, and Darwin.
|
||||
rich(AT)whiteoaklabs.com http://whiteoaklabs.com
|
||||
|
||||
* Simon Lockhart - Porting to Solaris (based on work of Logan ???)
|
||||
simon(AT)slimey.org
|
||||
|
||||
* Olle E. Johansson - SIP RFC compliance, documentation and testing,
|
||||
testing, SIP outbound proxy support, Manager 1.1 update, SIP
|
||||
transfer support, SIP presence support, SIP call state updates
|
||||
(dialog-info), QUEUE_EXISTS function, device state provider
|
||||
architecture, multiparking (together with mvanbaak), meetme and
|
||||
parking device states, MiniVM - the small voicemail system,
|
||||
RTP improvements, RTCP enhancements, DTMF timing fixes,
|
||||
many documentation updates/corrections, and many bug fixes.
|
||||
oej(AT)edvina.net, http://edvina.net
|
||||
|
||||
* Steve Kann - new jitter buffer for IAX2
|
||||
stevek(AT)stevek.com
|
||||
|
||||
* Constantine Filin - major contributions to the Asterisk Realtime
|
||||
Architecture
|
||||
|
||||
* Steve Murphy - privacy support, $[ ] parser upgrade, AEL2 parser
|
||||
upgrade. murf(AT)digium.com
|
||||
|
||||
* Claude Patry - bug fixes, feature enhancements, and bug marshalling
|
||||
cpatry(AT)gmail.com
|
||||
|
||||
* Miroslav Nachev, miro(AT)space-comm.com
|
||||
COSMOS Software Enterprises, Ltd.
|
||||
Variable for No Answer Timeout for Attended Transfer
|
||||
|
||||
* Slav Klenov & Vanheuverzwijn Joachim - development of the generic
|
||||
jitterbuffer Securax Ltd. info(AT)securax.be
|
||||
|
||||
* Roy Sigurd Karlsbakk - providing funding for generic jitterbuffer
|
||||
development roy(AT)karlsbakk.net, Briiz Telecom AS
|
||||
|
||||
* Voop AS, Nuvio Inc, Inotel S.A and Foniris Telecom A/S - rewrite
|
||||
of SIP transfers
|
||||
|
||||
* Philippe Sultan - RADIUS CDR module, many fixes to res_jabber and
|
||||
gtalk/jingle channel drivers. INRIA, http://www.inria.fr/
|
||||
|
||||
* John Martin, Aupix - Improved video support in the SIP channel
|
||||
T.140 text support in RTP/SIP
|
||||
|
||||
* Steve Underwood - Provided T.38 pass through support.
|
||||
|
||||
* George Konstantoulakis - Support for Greek in voicemail added by
|
||||
InAccess Networks (work funded by HOL, www.hol.gr)
|
||||
gkon(AT)inaccessnetworks.com
|
||||
|
||||
* Daniel Nylander - Support for Swedish and Norwegian languages in
|
||||
voicemail. http://www.danielnylander.se/
|
||||
|
||||
* Stojan Sljivic - An option for maximum number of messsages per
|
||||
mailbox in voicemail. Also an issue with voicemail
|
||||
synchronization has been fixed. GDS Partners
|
||||
www.gdspartners.com stojan.sljivic(AT)gdspartners.com
|
||||
|
||||
* Bartosz Supczinski - Support for Polish added by DIR (www.dir.pl)
|
||||
Bartosz.Supczinski(AT)dir.pl
|
||||
|
||||
* James Rothenberger - Support for IMAP storage integration added by
|
||||
OneBizTone LLC Work funded by University of Pennsylvania
|
||||
jar(AT)onebiztone.com
|
||||
|
||||
* Paul Cadach - Bringing chan_h323 up to date, bug fixes, and more!
|
||||
|
||||
* Voop AS - Financial support for a lot of work with the SIP driver
|
||||
and the IAX trunk MTU patch
|
||||
|
||||
* Cedric Hans - Development of chan_unistim cedric.hans(AT)mlkj.net
|
||||
|
||||
* Takao Takahashi & Mina Naguib - chan_unistim improvements for
|
||||
smaller devices
|
||||
|
||||
* Sergio Fadda - console_video: video support for chan_oss and
|
||||
chan_alsa
|
||||
|
||||
* Marta Carbone - console_video and the astobj2 framework
|
||||
|
||||
* Luigi Rizzo - astobj2, console_video, windows build, chan_oss cleanup,
|
||||
and a bunch of infrastructure work (loader, new_cli, ...)
|
||||
|
||||
* Brett Bryant - digit option for musiconhold selection, ENUMQUERY and
|
||||
ENUMRESULT functions, feature group configuration for
|
||||
features.conf, per-file CLI debug and verbose settings, TCP and
|
||||
TLS support for SIP, and various bug fixes.
|
||||
brettbryant(AT)gmail.com
|
||||
|
||||
* Sergey Tamkovich - Realtime support for MusicOnHold, store and destroy
|
||||
realtime methods and implementations for odbc, sqlite, and pgsql
|
||||
realtime drivers, attended transfer updates, multiple speeds for
|
||||
ControlPlayback, and multiple bug fixes See
|
||||
http://voip-info.org/users/view/sergee serg(AT)voipsolutions.ru
|
||||
|
||||
* Klaus Darillon - the SIPremoveHeader function in chan_sip and SIP Path
|
||||
Support.
|
||||
|
||||
* Moises Silva (moy) - for writing LibOpenR2, and providing support for
|
||||
it in chan_dahdi moises.silva(AT)gmail.com
|
||||
|
||||
* Eliel C. Sardanons - XML documentation implementation, and various
|
||||
other contributions eliels(AT)gmail.com
|
||||
|
||||
* Sean Bright - Snom call pickup, newt interface for menuselect,
|
||||
cdr_tds rewrite, countless other improvements, fixes, and good
|
||||
ideas. sean(AT)malleable.com
|
||||
|
||||
* Jan Kaláb - Calendaring support for Exchange Server 2007+ via
|
||||
Exchange Web Services.
|
||||
|
||||
* University of Oslo (uio.no), Norway - SIP Max-Forwards setting
|
||||
support (developed by oej)
|
||||
|
||||
* FCCN, Lissabon, Portugal - SIP show channels CLI command
|
||||
(developed by oej)
|
||||
|
||||
* Viagenie, Canada - IPv6 support in socket layers and SIP
|
||||
implementation Developers: Marc Blanchet, Simon Perreault and
|
||||
Jean-Philippe Dionne
|
||||
|
||||
* ClearIT AB, Sweden - res_mutestream, queue_exists and various other
|
||||
patches (developed by oej)
|
||||
|
||||
* Despegar.com, Argentina - AstData API implementation, also sponsored
|
||||
by Google as part of the gsoc/2009 program (developed by Eliel)
|
||||
|
||||
* Philippe Lindheimer - DEV_STATE additions to CCSS
|
||||
|
||||
* Andrew "lathama" Latham <lathama at gmail dot com>
|
||||
Doxygen, HTTP-Static, Phoneprov, make update
|
||||
|
||||
* George Joseph - PJSIP CLI commands, PJSIP_HEADER dialplan function
|
||||
Jim Dixon - Zapata Telephony and app_rpt
|
||||
http://www.zapatatelephony.org/app_rpt.html
|
||||
Russell Bryant - Asterisk 1.0 maintainer and misc. enhancements
|
||||
russelb@clemson.edu
|
||||
Anthony Minessale II - Countless big and small fixes, and relentless forward push
|
||||
anthmct@yahoo.com http://www.asterlink.com
|
||||
James Golovich - Innumerable contributions
|
||||
You can find him and asterisk-perl at http://asterisk.gnuinter.net
|
||||
Andre Bierwirth - Extension hints and status
|
||||
Oliver Daudey - ISDN4Linux fixes
|
||||
Pauline Middelink - ISDN4Linux patches and some general patches.
|
||||
She can be found at http://www.polyware.nl/~middelink/En/
|
||||
Jean-Denis Girard - Various contributions from the South Pacific Islands
|
||||
jd-girard@esoft.pf http://www.esoft.pf
|
||||
William Jordan / Vonage - MySQL enhancements to Voicemail
|
||||
wjordan@vonage.com
|
||||
Jac Kersing - Various fixes
|
||||
Steven Critchfield - Seek and Trunc functions for playback and recording
|
||||
critch@basesys.com
|
||||
Jefferson Noxon - app_lookupcidname, app_db, and various other contributions
|
||||
Klaus-Peter Junghanns - in-band DTMF on SIP and MGCP
|
||||
Ross Finlayson - Dynamic RTP payload support
|
||||
Mahmut Fettahlioglu - Audio recording, music-on-hold changes, alaw file
|
||||
format, and various fixes. Can be contacted at mahmut@oa.com.au
|
||||
James Dennis - Cisco SIP compatibility patches to work with SIP service
|
||||
providers. Can be contacted at asterisk@jdennis.net
|
||||
Tilghman Lesher - ast_localtime(); ast_say_date_with_format();
|
||||
GotoIfTime, Random, SayUnixTime, HasNewVoicemail applications;
|
||||
CUT, SORT, EVAL, CURL, FIELDQTY, STRFTIME, QUEUEAGENT* functions;
|
||||
and other innumerable bug fixes. http://asterisk.drunkcoder.com/
|
||||
Jayson Vantuyl - Manager protocol changes, various other bugs.
|
||||
jvantuyl@computingedge.net
|
||||
Thorsten Lockert - OpenBSD, FreeBSD ports, making MacOS X port run on 10.3,
|
||||
dialplan include verification, route lookup on OpenBSD, various other
|
||||
bugs. tholo@sigmasoft.com
|
||||
Brian West - ODBC support and Bug Marshaling
|
||||
Josh Roberson - chan_zap reload support, Advanced Voicemail Features, other misc. patches,
|
||||
and Bug Marshalling. - josh@asteriasgi.com, http://www.asteriasgi.com
|
||||
William Waites - syslog support, SIP NAT traversal for SIP-UA. ww@styx.org
|
||||
Rich Murphey - Porting to FreeBSD, NetBSD, OpenBSD, and Darwin.
|
||||
rich@whiteoaklabs.com http://whiteoaklabs.com
|
||||
Simon Lockhart - Porting to Solaris (based on work of Logan ???)
|
||||
simon@slimey.org
|
||||
Olle E. Johansson - SIP RFC compliance, documentation and testing, testing, testing
|
||||
oej@edvina.net, http://edvina.net
|
||||
Steve Kann - new jitter buffer for IAX2
|
||||
stevek@stevek.com
|
||||
Constantine Filin - major contributions to the Asterisk Realtime Architecture
|
||||
Steve Murphy - privacy support
|
||||
Claude Patry - bug fixes, feature enhancements, and bug marshalling
|
||||
cpatry@gmail.com
|
||||
|
||||
=== OTHER CONTRIBUTIONS ===
|
||||
|
||||
We'd like to thank the following for their listed contributions.
|
||||
|
||||
* John Todd - Monkey sounds and associated teletorture prompt
|
||||
|
||||
* Michael Jerris - bug marshaling
|
||||
|
||||
* Leif Madsen, Jared Smith and Jim van Meggelen - the Asterisk book
|
||||
available under a Creative Commons License at
|
||||
http://www.asteriskdocs.org
|
||||
|
||||
* Brian M. Clapper - poll.c emulation
|
||||
This product includes software developed by
|
||||
Brian M. Clapper <bmc(AT)clapper.org>
|
||||
John Todd - Monkey sounds and associated teletorture prompt
|
||||
Michael Jerris - bug marshaling
|
||||
Leif Madsen, Jared Smith and Jim van Meggelen - the Asterisk book
|
||||
available under a Creative Commons License at http://www.asteriskdocs.org
|
||||
|
||||
=== HOLD MUSIC ===
|
||||
|
||||
We'd like to thank the following for hold music
|
||||
|
||||
* Music provided by www.opsound.org
|
||||
Music provided by www.opsound.org
|
||||
|
||||
=== OTHER SOURCE CODE IN ASTERISK ===
|
||||
|
||||
We'd like to thank the following for their code use
|
||||
Digium did not implement the codecs in Asterisk. Here is the copyright on the
|
||||
GSM source:
|
||||
|
||||
* Asterisk uses libedit, the lightweight readline replacement from
|
||||
NetBSD.
|
||||
* The cdr_radius module uses libradiusclient-ng, which is also from
|
||||
NetBSD.
|
||||
* They are BSD-licensed and require the following statement:
|
||||
This product includes software developed by the NetBSD
|
||||
Foundation, Inc. and its contributors.
|
||||
|
||||
* Digium did not implement the codecs in Asterisk.
|
||||
Here is the copyright on the GSM source:
|
||||
Copyright 1992, 1993, 1994 by Jutta Degener and Carsten Bormann,
|
||||
Technische Universitaet Berlin
|
||||
Copyright 1992, 1993, 1994 by Jutta Degener and Carsten Bormann,
|
||||
Technische Universitaet Berlin
|
||||
|
||||
Any use of this software is permitted provided that this notice is not
|
||||
removed and that neither the authors nor the Technische Universitaet Berlin
|
||||
|
||||
@@ -1,562 +0,0 @@
|
||||
|
||||
## Change Log for Release asterisk-20.10.0
|
||||
|
||||
### Links:
|
||||
|
||||
- [Full ChangeLog](https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-20.10.0.md)
|
||||
- [GitHub Diff](https://github.com/asterisk/asterisk/compare/20.9.3...20.10.0)
|
||||
- [Tarball](https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20.10.0.tar.gz)
|
||||
- [Downloads](https://downloads.asterisk.org/pub/telephony/asterisk)
|
||||
|
||||
### Summary:
|
||||
|
||||
- Commits: 24
|
||||
- Commit Authors: 9
|
||||
- Issues Resolved: 18
|
||||
- Security Advisories Resolved: 0
|
||||
|
||||
### User Notes:
|
||||
|
||||
- #### res_pjsip_notify: add dialplan application
|
||||
A new dialplan application PJSIPNotify is now available
|
||||
which can send SIP NOTIFY requests from the dialplan.
|
||||
The pjsip send notify CLI command has also been enhanced to allow
|
||||
sending NOTIFY messages to a specific channel. Syntax:
|
||||
pjsip send notify <option> channel <channel>
|
||||
|
||||
- #### channel: Add multi-tenant identifier.
|
||||
tenantid has been added to channels. It can be read in
|
||||
dialplan via CHANNEL(tenantid), and it can be set using
|
||||
Set(CHANNEL(tenantid)=My tenant ID). In pjsip.conf, it is recommended to
|
||||
use the new tenantid option for pjsip endpoints (e.g., tenantid=My
|
||||
tenant ID) so that it will show up in Newchannel events. You can set it
|
||||
like any other channel variable using set_var in pjsip.conf as well, but
|
||||
note that this will NOT show up in Newchannel events. Tenant ID is also
|
||||
available in CDR and can be accessed with CDR(tenantid). The peer tenant
|
||||
ID can also be accessed with CDR(peertenantid). CEL includes tenant ID
|
||||
as well if it has been set.
|
||||
|
||||
- #### res_pjsip_config_wizard.c: Refactor load process
|
||||
The res_pjsip_config_wizard.so module can now be reloaded.
|
||||
|
||||
|
||||
### Upgrade Notes:
|
||||
|
||||
- #### channel: Add multi-tenant identifier.
|
||||
A new versioned struct (ast_channel_initializers) has been
|
||||
added that gets passed to __ast_channel_alloc_ap. The new function
|
||||
ast_channel_alloc_with_initializers should be used when creating
|
||||
channels that require the use of this struct. Currently the only value
|
||||
in the struct is for tenantid, but now more fields can be added to the
|
||||
struct as necessary rather than the __ast_channel_alloc_ap function. A
|
||||
new option (tenantid) has been added to endpoints in pjsip.conf as well.
|
||||
CEL has had its version bumped to include tenant ID.
|
||||
|
||||
|
||||
### Commit Authors:
|
||||
|
||||
- Alexei Gradinari: (2)
|
||||
- Ben Ford: (1)
|
||||
- Cade Parker: (1)
|
||||
- George Joseph: (10)
|
||||
- Jaco Kroon: (1)
|
||||
- Jean-Denis Girard: (1)
|
||||
- Mike Bradeen: (3)
|
||||
- Sean Bright: (2)
|
||||
- Tinet-Mucw: (3)
|
||||
|
||||
## Issue and Commit Detail:
|
||||
|
||||
### Closed Issues:
|
||||
|
||||
- 740: [new-feature]: Add multi-tenant identifier to chan_pjsip
|
||||
- 763: [bug]: autoservice thread stuck in an endless sleep
|
||||
- 780: [bug]: Infinite loop of "Indicated Video Update", max CPU usage
|
||||
- 799: [improvement]: Add PJSIPNOTIFY dialplan application
|
||||
- 801: [bug]: res_stasis: Occasional 200ms delay adding channel to a bridge
|
||||
- 809: [bug]: CLI stir_shaken show verification kills asterisk
|
||||
- 816: [bug]: res_pjsip_config_wizard doesn't load properly if res_pjsip is loaded first
|
||||
- 831: [bug]: app_voicemail ODBC
|
||||
- 845: [bug]: Buffer overflow in handling of security mechanisms in res_pjsip
|
||||
- 847: [bug]: Asterisk not using negotiated fall-back 8K digits
|
||||
- 854: [bug]: wrong properties in stir_shaken.conf.sample
|
||||
- 856: [bug]: res_pjsip_sdp_rtp leaks astobj2 ast_format
|
||||
- 861: [bug]: ChanSpy unable to read audiohook read direction frame when no packet lost on both side of the call
|
||||
- 876: [bug]: ChanSpy unable to write whisper_audiohook when set flag OPTION_READONLY
|
||||
- 879: [bug]: res_stir_shaken/verification.c: Getting verification errors when global_disable=yes
|
||||
- 884: [bug]: A ':' at the top of in stir_shaken.conf make Asterisk producing a core file when starting
|
||||
- 889: [bug]: res_stir_shaken/verification.c has a stale include for jansson.h that can cause compilation to fail
|
||||
- 904: [bug]: stir_shaken: attest_level isn't being propagated correctly from attestation to profile to tn
|
||||
|
||||
### Commits By Author:
|
||||
|
||||
- #### Alexei Gradinari (2):
|
||||
- res_pjsip_sdp_rtp fix leaking astobj2 ast_format
|
||||
- autoservice: Do not sleep if autoservice_stop is called within autoservice thr..
|
||||
|
||||
- #### Ben Ford (1):
|
||||
- channel: Add multi-tenant identifier.
|
||||
|
||||
- #### Cade Parker (1):
|
||||
- chan_mobile: decrease CHANNEL_FRAME_SIZE to prevent delay
|
||||
|
||||
- #### George Joseph (10):
|
||||
- bridge_softmix: Fix queueing VIDUPDATE control frames
|
||||
- res_pjsip_config_wizard.c: Refactor load process
|
||||
- stir_shaken: CRL fixes and a new CLI command
|
||||
- manager.c: Fix FRACK when doing CoreShowChannelMap in DEVMODE
|
||||
- stir_shaken.conf.sample: Fix bad references to private_key_path
|
||||
- security_agreements.c: Refactor the to_str functions and fix a few other bugs
|
||||
- res_stir_shaken: Check for disabled before param validation
|
||||
- res_stir_shaken.c: Fix crash when stir_shaken.conf is invalid
|
||||
- res_stir_shaken: Remove stale include for jansson.h in verification.c
|
||||
- stir_shaken: Fix propagation of attest_level and a few other values
|
||||
|
||||
- #### Jaco Kroon (1):
|
||||
- configure: Use . file rather than source file.
|
||||
|
||||
- #### Jean-Denis Girard (1):
|
||||
- app_voicemail: Fix sql insert mismatch caused by cherry-pick
|
||||
|
||||
- #### Mike Bradeen (3):
|
||||
- res_stasis: fix intermittent delays on adding channel to bridge
|
||||
- res_pjsip_notify: add dialplan application
|
||||
- res_pjsip_sdp_rtp: Use negotiated DTMF Payload types on bitrate mismatch
|
||||
|
||||
- #### Sean Bright (2):
|
||||
- alembic: Make 'revises' header comment match reality.
|
||||
- res_pjsip_logger.c: Fix 'OPTIONS' tab completion.
|
||||
|
||||
- #### Tinet-mucw (3):
|
||||
- res_pjsip_sdp_rtp.c: Fix DTMF Handling in Re-INVITE with dtmf_mode set to auto
|
||||
- app_chanspy.c: resolving the issue with audiohook direction read
|
||||
- app_chanspy.c: resolving the issue writing frame to whisper audiohook.
|
||||
|
||||
|
||||
### Commit List:
|
||||
|
||||
- stir_shaken: Fix propagation of attest_level and a few other values
|
||||
- res_stir_shaken: Remove stale include for jansson.h in verification.c
|
||||
- res_stir_shaken.c: Fix crash when stir_shaken.conf is invalid
|
||||
- res_stir_shaken: Check for disabled before param validation
|
||||
- app_chanspy.c: resolving the issue writing frame to whisper audiohook.
|
||||
- app_voicemail: Fix sql insert mismatch caused by cherry-pick
|
||||
- res_pjsip_sdp_rtp: Use negotiated DTMF Payload types on bitrate mismatch
|
||||
- app_chanspy.c: resolving the issue with audiohook direction read
|
||||
- security_agreements.c: Refactor the to_str functions and fix a few other bugs
|
||||
- res_pjsip_sdp_rtp fix leaking astobj2 ast_format
|
||||
- stir_shaken.conf.sample: Fix bad references to private_key_path
|
||||
- res_pjsip_logger.c: Fix 'OPTIONS' tab completion.
|
||||
- alembic: Make 'revises' header comment match reality.
|
||||
- chan_mobile: decrease CHANNEL_FRAME_SIZE to prevent delay
|
||||
- res_pjsip_notify: add dialplan application
|
||||
- manager.c: Fix FRACK when doing CoreShowChannelMap in DEVMODE
|
||||
- channel: Add multi-tenant identifier.
|
||||
- configure: Use . file rather than source file.
|
||||
- res_stasis: fix intermittent delays on adding channel to bridge
|
||||
- res_pjsip_sdp_rtp.c: Fix DTMF Handling in Re-INVITE with dtmf_mode set to auto
|
||||
- stir_shaken: CRL fixes and a new CLI command
|
||||
- res_pjsip_config_wizard.c: Refactor load process
|
||||
- bridge_softmix: Fix queueing VIDUPDATE control frames
|
||||
|
||||
### Commit Details:
|
||||
|
||||
#### stir_shaken: Fix propagation of attest_level and a few other values
|
||||
Author: George Joseph
|
||||
Date: 2024-09-24
|
||||
|
||||
attest_level, send_mky and check_tn_cert_public_url weren't
|
||||
propagating correctly from the attestation object to the profile
|
||||
and tn.
|
||||
|
||||
* In the case of attest_level, the enum needed to be changed
|
||||
so the "0" value (the default) was "NOT_SET" instead of "A". This
|
||||
now allows the merging of the attestation object, profile and tn
|
||||
to detect when a value isn't set and use the higher level value.
|
||||
|
||||
* For send_mky and check_tn_cert_public_url, the tn default was
|
||||
forced to "NO" which always overrode the profile and attestation
|
||||
objects. Their defaults are now "NOT_SET" so the propagation
|
||||
happens correctly.
|
||||
|
||||
* Just to remove some redundant code in tn_config.c, a bunch of calls to
|
||||
generate_sorcery_enum_from_str() and generate_sorcery_enum_to_str() were
|
||||
replaced with a single call to generate_acfg_common_sorcery_handlers().
|
||||
|
||||
Resolves: #904
|
||||
|
||||
#### res_stir_shaken: Remove stale include for jansson.h in verification.c
|
||||
Author: George Joseph
|
||||
Date: 2024-09-17
|
||||
|
||||
verification.c had an include for jansson.h left over from previous
|
||||
versions of the module. Since res_stir_shaken no longer has a
|
||||
dependency on jansson, the bundled version wasn't added to GCC's
|
||||
include path so if you didn't also have a jansson development package
|
||||
installed, the compile would fail. Removing the stale include
|
||||
was the only thing needed.
|
||||
|
||||
Resolves: #889
|
||||
|
||||
#### res_stir_shaken.c: Fix crash when stir_shaken.conf is invalid
|
||||
Author: George Joseph
|
||||
Date: 2024-09-13
|
||||
|
||||
* If the call to ast_config_load() returns CONFIG_STATUS_FILEINVALID,
|
||||
check_for_old_config() now returns LOAD_DECLINE instead of continuing
|
||||
on with a bad pointer.
|
||||
|
||||
* If CONFIG_STATUS_FILEMISSING is returned, check_for_old_config()
|
||||
assumes the config is being loaded from realtime and now returns
|
||||
LOAD_SUCCESS. If it's actually not being loaded from realtime,
|
||||
sorcery will catch that later on.
|
||||
|
||||
* Also refactored the error handling in load_module() a bit.
|
||||
|
||||
Resolves: #884
|
||||
|
||||
#### res_stir_shaken: Check for disabled before param validation
|
||||
Author: George Joseph
|
||||
Date: 2024-09-11
|
||||
|
||||
For both attestation and verification, we now check whether they've
|
||||
been disabled either globally or by the profile before validating
|
||||
things like callerid, orig_tn, dest_tn, etc. This prevents useless
|
||||
error messages.
|
||||
|
||||
Resolves: #879
|
||||
|
||||
#### app_chanspy.c: resolving the issue writing frame to whisper audiohook.
|
||||
Author: Tinet-mucw
|
||||
Date: 2024-09-10
|
||||
|
||||
ChanSpy(${channel}, qEoSw): because flags set o, ast_audiohook_set_frame_feed_direction(audiohook, AST_AUDIOHOOK_DIRECTION_READ); this will effect whisper audiohook and spy audiohook, this makes writing frame to whisper audiohook impossible. So add function start_whispering to starting whisper audiohook.
|
||||
|
||||
Resolves: #876
|
||||
|
||||
#### autoservice: Do not sleep if autoservice_stop is called within autoservice thr..
|
||||
Author: Alexei Gradinari
|
||||
Date: 2024-09-04
|
||||
|
||||
It's possible that ast_autoservice_stop is called within the autoservice thread.
|
||||
In this case the autoservice thread is stuck in an endless sleep.
|
||||
|
||||
To avoid endless sleep ast_autoservice_stop must check that it's not called
|
||||
within the autoservice thread.
|
||||
|
||||
Fixes: #763
|
||||
|
||||
#### app_voicemail: Fix sql insert mismatch caused by cherry-pick
|
||||
Author: Jean-Denis Girard
|
||||
Date: 2024-08-07
|
||||
|
||||
When commit e8c9cb80 was cherry-picked in from master, the
|
||||
fact that the 20 and 18 branches still had the old "macrocontext"
|
||||
column wasn't taken into account so the number of named parameters
|
||||
didn't match the number of '?' placeholders. They do now.
|
||||
|
||||
We also now use ast_asprintf to create the full mailbox query SQL
|
||||
statement instead of trying to calculate the proper length ourselves.
|
||||
|
||||
Resolves: #831
|
||||
|
||||
#### res_pjsip_sdp_rtp: Use negotiated DTMF Payload types on bitrate mismatch
|
||||
Author: Mike Bradeen
|
||||
Date: 2024-08-21
|
||||
|
||||
When Asterisk sends an offer to Bob that includes 48K and 8K codecs with
|
||||
matching 4733 offers, Bob may want to use the 48K audio codec but can not
|
||||
accept 48K digits and so negotiates for a mixed set.
|
||||
|
||||
Asterisk will now check Bob's offer to make sure Bob has indicated this is
|
||||
acceptible and if not, will use Bob's preference.
|
||||
|
||||
Fixes: #847
|
||||
|
||||
#### app_chanspy.c: resolving the issue with audiohook direction read
|
||||
Author: Tinet-mucw
|
||||
Date: 2024-08-30
|
||||
|
||||
ChanSpy(${channel}, qEoS): When chanspy spy the direction read, reading frame is often failed when reading direction read audiohook. because chanspy only read audiohook direction read; write_factory_ms will greater than 100ms soon, then ast_slinfactory_flush will being called, then direction read will fail.
|
||||
|
||||
Resolves: #861
|
||||
|
||||
#### security_agreements.c: Refactor the to_str functions and fix a few other bugs
|
||||
Author: George Joseph
|
||||
Date: 2024-08-17
|
||||
|
||||
* A static array of security mechanism type names was created.
|
||||
|
||||
* ast_sip_str_to_security_mechanism_type() was refactored to do
|
||||
a lookup in the new array instead of using fixed "if/else if"
|
||||
statments.
|
||||
|
||||
* security_mechanism_to_str() and ast_sip_security_mechanisms_to_str()
|
||||
were refactored to use ast_str instead of a fixed length buffer
|
||||
to store the result.
|
||||
|
||||
* ast_sip_security_mechanism_type_to_str was removed in favor of
|
||||
just referencing the new type name array. Despite starting with
|
||||
"ast_sip_", it was a static function so removing it doesn't affect
|
||||
ABI.
|
||||
|
||||
* Speaking of "ast_sip_", several other static functions that
|
||||
started with "ast_sip_" were renamed to avoid confusion about
|
||||
their public availability.
|
||||
|
||||
* A few VECTOR free loops were replaced with AST_VECTOR_RESET().
|
||||
|
||||
* Fixed a meomry leak in pjsip_configuration.c endpoint_destructor
|
||||
caused by not calling ast_sip_security_mechanisms_vector_destroy().
|
||||
|
||||
* Fixed a memory leak in res_pjsip_outbound_registration.c
|
||||
add_security_headers() caused by not specifying OBJ_NODATA in
|
||||
an ao2_callback.
|
||||
|
||||
* Fixed a few ao2_callback return code misuses.
|
||||
|
||||
Resolves: #845
|
||||
|
||||
#### res_pjsip_sdp_rtp fix leaking astobj2 ast_format
|
||||
Author: Alexei Gradinari
|
||||
Date: 2024-08-23
|
||||
|
||||
PR #700 added a preferred_format for the struct ast_rtp_codecs,
|
||||
but when set the preferred_format it leaks an astobj2 ast_format.
|
||||
In the next code
|
||||
ast_rtp_codecs_set_preferred_format(&codecs, ast_format_cap_get_format(joint, 0));
|
||||
both functions ast_rtp_codecs_set_preferred_format
|
||||
and ast_format_cap_get_format increases the ao2 reference count.
|
||||
|
||||
Fixes: #856
|
||||
|
||||
#### stir_shaken.conf.sample: Fix bad references to private_key_path
|
||||
Author: George Joseph
|
||||
Date: 2024-08-22
|
||||
|
||||
They should be private_key_file.
|
||||
|
||||
Resolves: #854
|
||||
|
||||
#### res_pjsip_logger.c: Fix 'OPTIONS' tab completion.
|
||||
Author: Sean Bright
|
||||
Date: 2024-08-19
|
||||
|
||||
Fixes #843
|
||||
|
||||
|
||||
#### alembic: Make 'revises' header comment match reality.
|
||||
Author: Sean Bright
|
||||
Date: 2024-08-17
|
||||
|
||||
|
||||
#### chan_mobile: decrease CHANNEL_FRAME_SIZE to prevent delay
|
||||
Author: Cade Parker
|
||||
Date: 2024-08-07
|
||||
|
||||
On modern Bluetooth devices or lower-powered asterisk servers, decreasing the channel frame size significantly improves latency and delay on outbound calls with only a mild sacrifice to the quality of the call (the frame size before was massive overkill to begin with)
|
||||
|
||||
|
||||
#### res_pjsip_notify: add dialplan application
|
||||
Author: Mike Bradeen
|
||||
Date: 2024-07-09
|
||||
|
||||
Add dialplan application PJSIPNOTIFY to send either pre-configured
|
||||
NOTIFY messages from pjsip_notify.conf or with headers defined in
|
||||
dialplan.
|
||||
|
||||
Also adds the ability to send pre-configured NOTIFY commands to a
|
||||
channel via the CLI.
|
||||
|
||||
Resolves: #799
|
||||
|
||||
UserNote: A new dialplan application PJSIPNotify is now available
|
||||
which can send SIP NOTIFY requests from the dialplan.
|
||||
|
||||
The pjsip send notify CLI command has also been enhanced to allow
|
||||
sending NOTIFY messages to a specific channel. Syntax:
|
||||
|
||||
pjsip send notify <option> channel <channel>
|
||||
|
||||
|
||||
#### manager.c: Fix FRACK when doing CoreShowChannelMap in DEVMODE
|
||||
Author: George Joseph
|
||||
Date: 2024-08-08
|
||||
|
||||
If you run an AMI CoreShowChannelMap on a channel that isn't in a
|
||||
bridge and you're in DEVMODE, you can get a FRACK because the
|
||||
bridge id is empty. We now simply return an empty list for that
|
||||
request.
|
||||
|
||||
|
||||
#### channel: Add multi-tenant identifier.
|
||||
Author: Ben Ford
|
||||
Date: 2024-05-21
|
||||
|
||||
This patch introduces a new identifier for channels: tenantid. It's
|
||||
a stringfield on the channel that can be used for general purposes. It
|
||||
will be inherited by other channels the same way that linkedid is.
|
||||
|
||||
You can set tenantid in a few ways. The first is to set it in the
|
||||
dialplan with the Set and CHANNEL functions:
|
||||
|
||||
exten => example,1,Set(CHANNEL(tenantid)=My tenant ID)
|
||||
|
||||
It can also be accessed via CHANNEL:
|
||||
|
||||
exten => example,2,NoOp(CHANNEL(tenantid))
|
||||
|
||||
Another method is to use the new tenantid option for pjsip endpoints in
|
||||
pjsip.conf:
|
||||
|
||||
[my_endpoint]
|
||||
type=endpoint
|
||||
tenantid=My tenant ID
|
||||
|
||||
This is considered the best approach since you will be able to see the
|
||||
tenant ID as early as the Newchannel event.
|
||||
|
||||
It can also be set using set_var in pjsip.conf on the endpoint like
|
||||
setting other channel variable:
|
||||
|
||||
set_var=CHANNEL(tenantid)=My tenant ID
|
||||
|
||||
Note that set_var will not show tenant ID on the Newchannel event,
|
||||
however.
|
||||
|
||||
Tenant ID has also been added to CDR. It's read-only and can be accessed
|
||||
via CDR(tenantid). You can also get the tenant ID of the last channel
|
||||
communicated with via CDR(peertenantid).
|
||||
|
||||
Tenant ID will also show up in CEL records if it has been set, and the
|
||||
version number has been bumped accordingly.
|
||||
|
||||
Fixes: #740
|
||||
|
||||
UserNote: tenantid has been added to channels. It can be read in
|
||||
dialplan via CHANNEL(tenantid), and it can be set using
|
||||
Set(CHANNEL(tenantid)=My tenant ID). In pjsip.conf, it is recommended to
|
||||
use the new tenantid option for pjsip endpoints (e.g., tenantid=My
|
||||
tenant ID) so that it will show up in Newchannel events. You can set it
|
||||
like any other channel variable using set_var in pjsip.conf as well, but
|
||||
note that this will NOT show up in Newchannel events. Tenant ID is also
|
||||
available in CDR and can be accessed with CDR(tenantid). The peer tenant
|
||||
ID can also be accessed with CDR(peertenantid). CEL includes tenant ID
|
||||
as well if it has been set.
|
||||
|
||||
UpgradeNote: A new versioned struct (ast_channel_initializers) has been
|
||||
added that gets passed to __ast_channel_alloc_ap. The new function
|
||||
ast_channel_alloc_with_initializers should be used when creating
|
||||
channels that require the use of this struct. Currently the only value
|
||||
in the struct is for tenantid, but now more fields can be added to the
|
||||
struct as necessary rather than the __ast_channel_alloc_ap function. A
|
||||
new option (tenantid) has been added to endpoints in pjsip.conf as well.
|
||||
CEL has had its version bumped to include tenant ID.
|
||||
|
||||
|
||||
#### configure: Use . file rather than source file.
|
||||
Author: Jaco Kroon
|
||||
Date: 2024-08-05
|
||||
|
||||
source is a bash concept, so when /bin/sh points to another shell the
|
||||
existing construct won't work.
|
||||
|
||||
Reference: https://bugs.gentoo.org/927055
|
||||
Signed-off-by: Jaco Kroon <jaco@uls.co.za>
|
||||
|
||||
#### res_stasis: fix intermittent delays on adding channel to bridge
|
||||
Author: Mike Bradeen
|
||||
Date: 2024-07-10
|
||||
|
||||
Previously, on command execution, the control thread was awoken by
|
||||
sending a SIGURG. It was found that this still resulted in some
|
||||
instances where the thread was not immediately awoken.
|
||||
|
||||
This change instead sends a null frame to awaken the control thread,
|
||||
which awakens the thread more consistently.
|
||||
|
||||
Resolves: #801
|
||||
|
||||
#### res_pjsip_sdp_rtp.c: Fix DTMF Handling in Re-INVITE with dtmf_mode set to auto
|
||||
Author: Tinet-mucw
|
||||
Date: 2024-08-02
|
||||
|
||||
When the endpoint dtmf_mode is set to auto, a SIP request is sent to the UAC, and the SIP SDP from the UAC does not include the telephone-event. Later, the UAC sends an INVITE, and the SIP SDP includes the telephone-event. In this case, DTMF should be sent by RFC2833 rather than using inband signaling.
|
||||
|
||||
Resolves: asterisk#826
|
||||
|
||||
#### stir_shaken: CRL fixes and a new CLI command
|
||||
Author: George Joseph
|
||||
Date: 2024-07-19
|
||||
|
||||
* Fixed a bug in crypto_show_cli_store that was causing asterisk
|
||||
to crash if there were certificate revocation lists in the
|
||||
verification certificate store. We're also now prefixing
|
||||
certificates with "Cert:" and CRLs with "CRL:" to distinguish them
|
||||
in the list.
|
||||
|
||||
* Added 'untrusted_cert_file' and 'untrusted_cert_path' options
|
||||
to both verification and profile objects. If you have CRLs that
|
||||
are signed by a different CA than the incoming X5U certificate
|
||||
(indirect CRL), you'll need to provide the certificate of the
|
||||
CRL signer here. Thse will show up as 'Untrusted" when showing
|
||||
the verification or profile objects.
|
||||
|
||||
* Fixed loading of crl_path. The OpenSSL API we were using to
|
||||
load CRLs won't actually load them from a directory, only a file.
|
||||
We now scan the directory ourselves and load the files one-by-one.
|
||||
|
||||
* Fixed the verification flags being set on the certificate store.
|
||||
- Removed the CRL_CHECK_ALL flag as this was causing all certificates
|
||||
to be checked for CRL extensions and failing to verify the cert if
|
||||
there was none. This basically caused all certs to fail when a CRL
|
||||
was provided via crl_file or crl_path.
|
||||
- Added the EXTENDED_CRL_SUPPORT flag as it is required to handle
|
||||
indirect CRLs.
|
||||
|
||||
* Added a new CLI command...
|
||||
`stir_shaken verify certificate_file <certificate_file> [ <profile> ]`
|
||||
which will assist troubleshooting certificate problems by allowing
|
||||
the user to manually verify a certificate file against either the
|
||||
global verification certificate store or the store for a specific
|
||||
profile.
|
||||
|
||||
* Updated the XML documentation and the sample config file.
|
||||
|
||||
Resolves: #809
|
||||
|
||||
#### res_pjsip_config_wizard.c: Refactor load process
|
||||
Author: George Joseph
|
||||
Date: 2024-07-23
|
||||
|
||||
The way we have been initializing the config wizard prevented it
|
||||
from registering its objects if res_pjsip happened to load
|
||||
before it.
|
||||
|
||||
* We now use the object_type_registered sorcery observer to kick
|
||||
things off instead of the wizard_mapped observer.
|
||||
|
||||
* The load_module function now checks if res_pjsip has been loaded
|
||||
already and if it was it fires the proper observers so the objects
|
||||
load correctly.
|
||||
|
||||
Resolves: #816
|
||||
|
||||
UserNote: The res_pjsip_config_wizard.so module can now be reloaded.
|
||||
|
||||
#### bridge_softmix: Fix queueing VIDUPDATE control frames
|
||||
Author: George Joseph
|
||||
Date: 2024-07-17
|
||||
|
||||
softmix_bridge_write_control() now calls ast_bridge_queue_everyone_else()
|
||||
with the bridge_channel so the VIDUPDATE control frame isn't echoed back.
|
||||
|
||||
softmix_bridge_write_control() was setting bridge_channel to NULL
|
||||
when calling ast_bridge_queue_everyone_else() for VIDUPDATE control
|
||||
frames. This was causing the frame to be echoed back to the
|
||||
channel it came from. In certain cases, like when two channels or
|
||||
bridges are being recorded, this can cause a ping-pong effect that
|
||||
floods the system with VIDUPDATE control frames.
|
||||
|
||||
Resolves: #780
|
||||
|
||||
@@ -1,766 +0,0 @@
|
||||
|
||||
## Change Log for Release asterisk-20.11.0
|
||||
|
||||
### Links:
|
||||
|
||||
- [Full ChangeLog](https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-20.11.0.md)
|
||||
- [GitHub Diff](https://github.com/asterisk/asterisk/compare/20.10.0...20.11.0)
|
||||
- [Tarball](https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20.11.0.tar.gz)
|
||||
- [Downloads](https://downloads.asterisk.org/pub/telephony/asterisk)
|
||||
|
||||
### Summary:
|
||||
|
||||
- Commits: 40
|
||||
- Commit Authors: 9
|
||||
- Issues Resolved: 22
|
||||
- Security Advisories Resolved: 0
|
||||
|
||||
### User Notes:
|
||||
|
||||
- #### res_pjsip: Add new endpoint option "suppress_moh_on_sendonly"
|
||||
The new "suppress_moh_on_sendonly" endpoint option
|
||||
can be used to prevent playing MOH back to a caller if the remote
|
||||
end sends "sendonly" or "inactive" (hold) to Asterisk in an SDP.
|
||||
|
||||
- #### app_mixmonitor: Add 'D' option for dual-channel audio.
|
||||
The MixMonitor application now has a new 'D' option which
|
||||
interleaves the recorded audio in the output frames. This allows for
|
||||
stereo recording output with one channel being the transmitted audio and
|
||||
the other being the received audio. The 't' and 't' options are
|
||||
compatible with this.
|
||||
|
||||
- #### manager.c: Restrict ModuleLoad to the configured modules directory.
|
||||
The ModuleLoad AMI action now restricts modules to the
|
||||
configured modules directory.
|
||||
|
||||
- #### manager: Enhance event filtering for performance
|
||||
You can now perform more granular filtering on events
|
||||
in manager.conf using expressions like
|
||||
`eventfilter(name(Newchannel),header(Channel),method(starts_with)) = PJSIP/`
|
||||
This is much more efficient than
|
||||
`eventfilter = Event: Newchannel.*Channel: PJSIP/`
|
||||
Full syntax guide is in configs/samples/manager.conf.sample.
|
||||
|
||||
- #### db.c: Remove limit on family/key length
|
||||
The `ast_db_*()` APIs have had the 253 byte limit on
|
||||
"/family/key" removed and will now accept families and keys with a
|
||||
total length of up to SQLITE_MAX_LENGTH (currently 1e9!). This
|
||||
affects the `DB*` dialplan applications, dialplan functions,
|
||||
manager actions and `databse` CLI commands. Since the
|
||||
media_cache also uses the `ast_db_*()` APIs, you can now store
|
||||
resources with URIs longer than 253 bytes.
|
||||
|
||||
|
||||
### Upgrade Notes:
|
||||
|
||||
|
||||
### Commit Authors:
|
||||
|
||||
- Allan Nathanson: (1)
|
||||
- Ben Ford: (3)
|
||||
- Chrsmj: (1)
|
||||
- George Joseph: (15)
|
||||
- Jiangxc: (1)
|
||||
- Naveen Albert: (7)
|
||||
- Peter Jannesen: (2)
|
||||
- Sean Bright: (8)
|
||||
- Thomas Guebels: (2)
|
||||
|
||||
## Issue and Commit Detail:
|
||||
|
||||
### Closed Issues:
|
||||
|
||||
- 487: [bug]: Segfault possibly in ast_rtp_stop
|
||||
- 821: [bug]: app_dial: The progress timeout doesn't cause Dial to exit
|
||||
- 881: [bug]: Long URLs are being rejected by the media cache because of an astdb key length limit
|
||||
- 882: [bug]: Value CHANNEL(userfield) is lost by BRIDGE_ENTER
|
||||
- 897: [improvement]: Restrict ModuleLoad AMI action to the modules directory
|
||||
- 900: [bug]: astfd.c: NULL pointer passed to fclose with nonnull attribute causes compilation failure
|
||||
- 902: [bug]: app_voicemail: Pager emails are ill-formatted when custom subject is used
|
||||
- 916: [bug]: Compilation errors on FreeBSD
|
||||
- 923: [bug]: Transport monitor shutdown callback only works on the first disconnection
|
||||
- 924: [bug]: dnsmgr.c: dnsmgr_refresh() should not flag change if IP address order changes
|
||||
- 928: [bug]: chan_dahdi: MWI while off-hook when hung up on after recall ring
|
||||
- 932: [bug]: When connected to multiple IP addresses the transport monitor is only set on the first one
|
||||
- 937: [bug]: Wrong format for sample config file 'geolocation.conf.sample'
|
||||
- 938: [bug]: memory leak - CBAnn leaks a small amount format_cap related memory for every confbridge
|
||||
- 945: [improvement]: Add stereo recording support for app_mixmonitor
|
||||
- 951: [new-feature]: func_evalexten: Add `EVAL_SUB` function
|
||||
- 974: [improvement]: change and/or remove some wiki mentions to docs mentions in the sample configs
|
||||
- 979: [improvement]: Add ability to suppress MOH when a remote endpoint sends "sendonly" or "inactive"
|
||||
- 982: [bug]: The addition of tenantid to the ast_sip_endpoint structure broke ABI compatibility
|
||||
- 990: [improvement]: The help for PJSIP_AOR should indicate that you need to call PJSIP_CONTACT to get contact details
|
||||
- 995: [bug]: suppress_moh_on_sendonly should use AST_BOOL_VALUES instead of YESNO_VALUES in alembic script
|
||||
|
||||
### Commits By Author:
|
||||
|
||||
- #### Allan Nathanson (1):
|
||||
- dnsmgr.c: dnsmgr_refresh() incorrectly flags change with DNS round-robin
|
||||
|
||||
- #### Ben Ford (3):
|
||||
- manager.c: Restrict ModuleLoad to the configured modules directory.
|
||||
- app_mixmonitor: Add 'D' option for dual-channel audio.
|
||||
- Add res_pjsip_config_sangoma external module.
|
||||
|
||||
- #### George Joseph (15):
|
||||
- db.c: Remove limit on family/key length
|
||||
- manager.c: Split XML documentation to manager_doc.xml
|
||||
- manager: Enhance event filtering for performance
|
||||
- manager.conf.sample: Fix mathcing typo
|
||||
- Fix application references to Background
|
||||
- res_rtp_asterisk: Fix dtls timer issues causing FRACKs and SEGVs
|
||||
- manager.c: Add unit test for Originate app and appdata permissions
|
||||
- geolocation.sample.conf: Fix comment marker at end of file
|
||||
- core_unreal.c: Fix memory leak in ast_unreal_new_channels()
|
||||
- pjproject_bundled: Tweaks to support out-of-tree development
|
||||
- res_srtp: Change Unsupported crypto suite msg from verbose to debug
|
||||
- res_pjsip: Move tenantid to end of ast_sip_endpoint
|
||||
- func_pjsip_aor/contact: Fix documentation for contact ID
|
||||
- res_pjsip: Add new endpoint option "suppress_moh_on_sendonly"
|
||||
- res_pjsip: Change suppress_moh_on_sendonly to OPT_BOOL_T
|
||||
|
||||
- #### Naveen Albert (7):
|
||||
- app_voicemail: Fix ill-formatted pager emails with custom subject.
|
||||
- astfd.c: Avoid calling fclose with NULL argument.
|
||||
- main, res, tests: Fix compilation errors on FreeBSD.
|
||||
- chan_dahdi: Never send MWI while off-hook.
|
||||
- app_dial: Fix progress timeout.
|
||||
- app_dial: Fix progress timeout calculation with no answer timeout.
|
||||
- func_evalexten: Add EVAL_SUB function.
|
||||
|
||||
- #### Peter Jannesen (2):
|
||||
- cel_custom: Allow absolute filenames.
|
||||
- channel: Preserve CHANNEL(userfield) on masquerade.
|
||||
|
||||
- #### Sean Bright (8):
|
||||
- res_pjsip_pubsub: Persist subscription 'generator_data' in sorcery
|
||||
- cdr_custom: Allow absolute filenames.
|
||||
- res_agi.c: Ensure SIGCHLD handler functions are properly balanced.
|
||||
- alembic: Drop redundant voicemail_messages index.
|
||||
- func_base64.c: Ensure we set aside enough room for base64 encoded data.
|
||||
- Revert "res_rtp_asterisk: Count a roll-over of the sequence number even on los..
|
||||
- chan_sip.c: Fix __sip_reliable_xmit build error
|
||||
- res_pjsip.c: Fix Contact header rendering for IPv6 addresses.
|
||||
|
||||
- #### Thomas Guebels (2):
|
||||
- pjsip_transport_events: Avoid monitor destruction
|
||||
- pjsip_transport_events: handle multiple addresses for a domain
|
||||
|
||||
- #### chrsmj (1):
|
||||
- samples: remove and/or change some wiki mentions
|
||||
|
||||
- #### jiangxc (1):
|
||||
- res_agi.c: Prevent possible double free during `SPEECH RECOGNIZE`
|
||||
|
||||
|
||||
### Commit List:
|
||||
|
||||
- res_pjsip: Change suppress_moh_on_sendonly to OPT_BOOL_T
|
||||
- res_pjsip: Add new endpoint option "suppress_moh_on_sendonly"
|
||||
- res_pjsip.c: Fix Contact header rendering for IPv6 addresses.
|
||||
- samples: remove and/or change some wiki mentions
|
||||
- func_pjsip_aor/contact: Fix documentation for contact ID
|
||||
- res_pjsip: Move tenantid to end of ast_sip_endpoint
|
||||
- pjsip_transport_events: handle multiple addresses for a domain
|
||||
- func_evalexten: Add EVAL_SUB function.
|
||||
- res_srtp: Change Unsupported crypto suite msg from verbose to debug
|
||||
- Add res_pjsip_config_sangoma external module.
|
||||
- app_mixmonitor: Add 'D' option for dual-channel audio.
|
||||
- pjsip_transport_events: Avoid monitor destruction
|
||||
- app_dial: Fix progress timeout calculation with no answer timeout.
|
||||
- pjproject_bundled: Tweaks to support out-of-tree development
|
||||
- chan_sip.c: Fix __sip_reliable_xmit build error
|
||||
- core_unreal.c: Fix memory leak in ast_unreal_new_channels()
|
||||
- dnsmgr.c: dnsmgr_refresh() incorrectly flags change with DNS round-robin
|
||||
- geolocation.sample.conf: Fix comment marker at end of file
|
||||
- func_base64.c: Ensure we set aside enough room for base64 encoded data.
|
||||
- app_dial: Fix progress timeout.
|
||||
- chan_dahdi: Never send MWI while off-hook.
|
||||
- manager.c: Add unit test for Originate app and appdata permissions
|
||||
- alembic: Drop redundant voicemail_messages index.
|
||||
- res_agi.c: Ensure SIGCHLD handler functions are properly balanced.
|
||||
- main, res, tests: Fix compilation errors on FreeBSD.
|
||||
- res_rtp_asterisk: Fix dtls timer issues causing FRACKs and SEGVs
|
||||
- manager.c: Restrict ModuleLoad to the configured modules directory.
|
||||
- res_agi.c: Prevent possible double free during `SPEECH RECOGNIZE`
|
||||
- cdr_custom: Allow absolute filenames.
|
||||
- astfd.c: Avoid calling fclose with NULL argument.
|
||||
- channel: Preserve CHANNEL(userfield) on masquerade.
|
||||
- cel_custom: Allow absolute filenames.
|
||||
- app_voicemail: Fix ill-formatted pager emails with custom subject.
|
||||
- res_pjsip_pubsub: Persist subscription 'generator_data' in sorcery
|
||||
- Fix application references to Background
|
||||
- manager.conf.sample: Fix mathcing typo
|
||||
- manager: Enhance event filtering for performance
|
||||
- manager.c: Split XML documentation to manager_doc.xml
|
||||
- db.c: Remove limit on family/key length
|
||||
|
||||
### Commit Details:
|
||||
|
||||
#### res_pjsip: Change suppress_moh_on_sendonly to OPT_BOOL_T
|
||||
Author: George Joseph
|
||||
Date: 2024-11-15
|
||||
|
||||
The suppress_moh_on_sendonly endpoint option should have been
|
||||
defined as OPT_BOOL_T in pjsip_configuration.c and AST_BOOL_VALUES
|
||||
in the alembic script instead of OPT_YESNO_T and YESNO_VALUES.
|
||||
|
||||
Also updated contrib/ast-db-manage/README.md to indicate that
|
||||
AST_BOOL_VALUES should always be used and provided an example.
|
||||
|
||||
Resolves: #995
|
||||
|
||||
#### res_pjsip: Add new endpoint option "suppress_moh_on_sendonly"
|
||||
Author: George Joseph
|
||||
Date: 2024-11-05
|
||||
|
||||
Normally, when one party in a call sends Asterisk an SDP with
|
||||
a "sendonly" or "inactive" attribute it means "hold" and causes
|
||||
Asterisk to start playing MOH back to the other party. This can be
|
||||
problematic if it happens at certain times, such as in a 183
|
||||
Progress message, because the MOH will replace any early media you
|
||||
may be playing to the calling party. If you set this option
|
||||
to "yes" on an endpoint and the endpoint receives an SDP
|
||||
with "sendonly" or "inactive", Asterisk will NOT play MOH back to
|
||||
the other party.
|
||||
|
||||
Resolves: #979
|
||||
|
||||
UserNote: The new "suppress_moh_on_sendonly" endpoint option
|
||||
can be used to prevent playing MOH back to a caller if the remote
|
||||
end sends "sendonly" or "inactive" (hold) to Asterisk in an SDP.
|
||||
|
||||
|
||||
#### res_pjsip.c: Fix Contact header rendering for IPv6 addresses.
|
||||
Author: Sean Bright
|
||||
Date: 2024-11-08
|
||||
|
||||
Fix suggested by @nvsystems.
|
||||
|
||||
Fixes #985
|
||||
|
||||
|
||||
#### samples: remove and/or change some wiki mentions
|
||||
Author: chrsmj
|
||||
Date: 2024-11-01
|
||||
|
||||
Cleaned some dead links. Replaced word wiki with
|
||||
either docs or link to https://docs.asterisk.org/
|
||||
|
||||
Resolves: #974
|
||||
|
||||
#### func_pjsip_aor/contact: Fix documentation for contact ID
|
||||
Author: George Joseph
|
||||
Date: 2024-11-09
|
||||
|
||||
Clarified the use of the contact ID returned from PJSIP_AOR.
|
||||
|
||||
Resolves: #990
|
||||
|
||||
#### res_pjsip: Move tenantid to end of ast_sip_endpoint
|
||||
Author: George Joseph
|
||||
Date: 2024-11-06
|
||||
|
||||
The tenantid field was originally added to the ast_sip_endpoint
|
||||
structure at the end of the AST_DECLARE_STRING_FIELDS block. This
|
||||
caused everything after it in the structure to move down in memory
|
||||
and break ABI compatibility. It's now at the end of the structure
|
||||
as an AST_STRING_FIELD_EXTENDED. Given the number of string fields
|
||||
in the structure now, the initial string field allocation was
|
||||
also increased from 64 to 128 bytes.
|
||||
|
||||
Resolves: #982
|
||||
|
||||
#### pjsip_transport_events: handle multiple addresses for a domain
|
||||
Author: Thomas Guebels
|
||||
Date: 2024-10-29
|
||||
|
||||
The key used for transport monitors was the remote host name for the
|
||||
transport and not the remote address resolved for this domain.
|
||||
|
||||
This was problematic for domains returning multiple addresses as several
|
||||
transport monitors were created with the same key.
|
||||
|
||||
Whenever a subsystem wanted to register a callback it would always end
|
||||
up attached to the first transport monitor with a matching key.
|
||||
|
||||
The key used for transport monitors is now the remote address and port
|
||||
the transport actually connected to.
|
||||
|
||||
Fixes: #932
|
||||
|
||||
#### func_evalexten: Add EVAL_SUB function.
|
||||
Author: Naveen Albert
|
||||
Date: 2024-10-17
|
||||
|
||||
This adds an EVAL_SUB function, which is similar to the existing
|
||||
EVAL_EXTEN function but significantly more powerful, as it allows
|
||||
executing arbitrary dialplan and capturing its return value as
|
||||
the function's output. While EVAL_EXTEN should be preferred if it
|
||||
is possible to use it, EVAL_SUB can be used in a wider variety
|
||||
of cases and allows arbitrary computation to be performed in
|
||||
a dialplan function call, leveraging the dialplan.
|
||||
|
||||
Resolves: #951
|
||||
|
||||
#### res_srtp: Change Unsupported crypto suite msg from verbose to debug
|
||||
Author: George Joseph
|
||||
Date: 2024-11-01
|
||||
|
||||
There's really no point in spamming logs with a verbose message
|
||||
for every unsupported crypto suite an older client may send
|
||||
in an SDP. If none are supported, there will be an error or
|
||||
warning.
|
||||
|
||||
|
||||
#### Add res_pjsip_config_sangoma external module.
|
||||
Author: Ben Ford
|
||||
Date: 2024-11-01
|
||||
|
||||
Adds res_pjsip_config_sangoma as an external module that can be
|
||||
downloaded via menuselect. It lives under the Resource Modules section.
|
||||
|
||||
|
||||
#### app_mixmonitor: Add 'D' option for dual-channel audio.
|
||||
Author: Ben Ford
|
||||
Date: 2024-10-28
|
||||
|
||||
Adds the 'D' option to app_mixmonitor that interleaves the input and
|
||||
output frames of the channel being recorded in the monitor output frame.
|
||||
This allows for two streams in the recording: the transmitted audio and
|
||||
the received audio. The 't' and 'r' options are compatible with this.
|
||||
|
||||
Fixes: #945
|
||||
|
||||
UserNote: The MixMonitor application now has a new 'D' option which
|
||||
interleaves the recorded audio in the output frames. This allows for
|
||||
stereo recording output with one channel being the transmitted audio and
|
||||
the other being the received audio. The 't' and 't' options are
|
||||
compatible with this.
|
||||
|
||||
|
||||
#### pjsip_transport_events: Avoid monitor destruction
|
||||
Author: Thomas Guebels
|
||||
Date: 2024-10-28
|
||||
|
||||
When a transport is disconnected, several events can arrive following
|
||||
each other. The first event will be PJSIP_TP_STATE_DISCONNECT and it
|
||||
will trigger the destruction of the transport monitor object. The lookup
|
||||
for the transport monitor to destroy is done using the transport key,
|
||||
that contains the transport destination host:port.
|
||||
|
||||
A reconnect attempt by pjsip will be triggered as soon something needs to
|
||||
send a packet using that transport. This can happen directly after a
|
||||
disconnect since ca
|
||||
|
||||
Subsequent events can arrive later like PJSIP_TP_STATE_DESTROY and will
|
||||
also try to trigger the destruction of the transport monitor if not
|
||||
already done. Since the lookup for the transport monitor to destroy is
|
||||
done using the transport key, it can match newly created transports
|
||||
towards the same destination and destroy their monitor object.
|
||||
|
||||
Because of this, it was sometimes not possible to monitor a transport
|
||||
after one or more disconnections.
|
||||
|
||||
This fix adds an additional check on the transport pointer to ensure
|
||||
only a monitor for that specific transport is removed.
|
||||
|
||||
Fixes: #923
|
||||
|
||||
#### app_dial: Fix progress timeout calculation with no answer timeout.
|
||||
Author: Naveen Albert
|
||||
Date: 2024-10-16
|
||||
|
||||
If to_answer is -1, simply comparing to see if the progress timeout
|
||||
is smaller than the answer timeout to prefer it will fail. Add
|
||||
an additional check that chooses the progress timeout if there is
|
||||
no answer timeout (or as before, if the progress timeout is smaller).
|
||||
|
||||
Resolves: #821
|
||||
|
||||
#### pjproject_bundled: Tweaks to support out-of-tree development
|
||||
Author: George Joseph
|
||||
Date: 2024-10-17
|
||||
|
||||
* pjproject is now configured with --disable-libsrtp so it will
|
||||
build correctly when doing "out-of-tree" development. Asterisk
|
||||
doesn't use pjproject for handling media so pjproject doesn't
|
||||
need libsrtp itself.
|
||||
|
||||
* The pjsua app (which we used to use for the testsuite) no longer
|
||||
builds in pjproject's master branch so we just skip it. The
|
||||
testsuite no longer needs it anyway.
|
||||
|
||||
See third-party/pjproject/README-hacking.md for more info on building
|
||||
pjproject "out-of-tree".
|
||||
|
||||
|
||||
#### chan_sip.c: Fix __sip_reliable_xmit build error
|
||||
Author: Sean Bright
|
||||
Date: 2024-10-17
|
||||
|
||||
Fixes #954
|
||||
|
||||
|
||||
#### Revert "res_rtp_asterisk: Count a roll-over of the sequence number even on los..
|
||||
Author: Sean Bright
|
||||
Date: 2024-10-07
|
||||
|
||||
This reverts commit cb5e3445be6c55517c8d05aca601b648341f8ae9.
|
||||
|
||||
The original change from 16 to 15 bit sequence numbers was predicated
|
||||
on the following from the now-defunct libSRTP FAQ on sourceforge.net:
|
||||
|
||||
> *Q6. The use of implicit synchronization via ROC seems
|
||||
> dangerous. Can senders and receivers lose ROC synchronization?*
|
||||
>
|
||||
> **A.** It is possible to lose ROC synchronization between sender and
|
||||
> receiver(s), though it is not likely in practice, and practical
|
||||
> steps can be taken to avoid it. A burst loss of 2^16 packets or more
|
||||
> will always break synchronization. For example, a conversational
|
||||
> voice codec that sends 50 packets per second will have its ROC
|
||||
> increment about every 22 minutes. A network with a burst of packet
|
||||
> loss that long has problems other than ROC synchronization.
|
||||
>
|
||||
> There is a higher sensitivity to loss at the very outset of an SRTP
|
||||
> stream. If the sender's initial sequence number is close to the
|
||||
> maximum value of 2^16-1, and all packets are lost from the initial
|
||||
> packet until the sequence number cycles back to zero, the sender
|
||||
> will increment its ROC, but the receiver will not. The receiver
|
||||
> cannot determine that the initial packets were lost and that
|
||||
> sequence-number rollover has occurred. In this case, the receiver's
|
||||
> ROC would be zero whereas the sender's ROC would be one, while their
|
||||
> sequence numbers would be so close that the ROC-guessing algorithm
|
||||
> could not detect this fact.
|
||||
>
|
||||
> There is a simple solution to this problem: the SRTP sender should
|
||||
> randomly select an initial sequence number that is always less than
|
||||
> 2^15. This ensures correct SRTP operation so long as fewer than 2^15
|
||||
> initial packets are lost in succession, which is within the maximum
|
||||
> tolerance of SRTP packet-index determination (see Appendix A and
|
||||
> page 14, first paragraph of RFC 3711). An SRTP receiver should
|
||||
> carefully implement the index-guessing algorithm. A naive
|
||||
> implementation can unintentionally guess the value of
|
||||
> 0xffffffffffffLL whenever the SEQ in the packet is greater than 2^15
|
||||
> and the locally stored SEQ and ROC are zero. (This can happen when
|
||||
> the implementation fails to treat those zero values as a special
|
||||
> case.)
|
||||
>
|
||||
> When ROC synchronization is lost, the receiver will not be able to
|
||||
> properly process the packets. If anti-replay protection is turned
|
||||
> on, then the desynchronization will appear as a burst of replay
|
||||
> check failures. Otherwise, if authentication is being checked, then
|
||||
> it will appear as a burst of authentication failures. Otherwise, if
|
||||
> encryption is being used, the desynchronization may not be detected
|
||||
> by the SRTP layer, and the packets may be improperly decrypted.
|
||||
|
||||
However, modern libSRTP (as of 1.0.1[1]) now mentions the following in
|
||||
their README.md[2]:
|
||||
|
||||
> The sequence number in the rtp packet is used as the low 16 bits of
|
||||
> the sender's local packet index. Note that RTP will start its
|
||||
> sequence number in a random place, and the SRTP layer just jumps
|
||||
> forward to that number at its first invocation. An earlier version
|
||||
> of this library used initial sequence numbers that are less than
|
||||
> 32,768; this trick is no longer required as the
|
||||
> rdbx_estimate_index(...) function has been made smarter.
|
||||
|
||||
So truncating our initial sequence number to 15 bit is no longer
|
||||
necessary.
|
||||
|
||||
1. https://github.com/cisco/libsrtp/blob/0eb007f0dc611f27cbfe0bf9855ed85182496cec/CHANGES#L271-L289
|
||||
2. https://github.com/cisco/libsrtp/blob/2de20dd9e9c8afbaf02fcf5d4048ce1ec9ddc0ae/README.md#implementation-notes
|
||||
|
||||
|
||||
#### core_unreal.c: Fix memory leak in ast_unreal_new_channels()
|
||||
Author: George Joseph
|
||||
Date: 2024-10-15
|
||||
|
||||
When the channel tech is multistream capable, the reference to
|
||||
chan_topology was passed to the new channel. When the channel tech
|
||||
isn't multistream capable, the reference to chan_topology was never
|
||||
released. "Local" channels are multistream capable so it didn't
|
||||
affect them but the confbridge "CBAnn" and the bridge_media
|
||||
"Recorder" channels are not so they caused a leak every time one
|
||||
of them was created.
|
||||
|
||||
Also added tracing to ast_stream_topology_alloc() and
|
||||
stream_topology_destroy() to assist with debugging.
|
||||
|
||||
Resolves: #938
|
||||
|
||||
#### dnsmgr.c: dnsmgr_refresh() incorrectly flags change with DNS round-robin
|
||||
Author: Allan Nathanson
|
||||
Date: 2024-09-29
|
||||
|
||||
The dnsmgr_refresh() function checks to see if the IP address associated
|
||||
with a name/service has changed. The gotcha is that the ast_get_ip_or_srv()
|
||||
function only returns the first IP address returned by the DNS query. If
|
||||
there are multiple IPs associated with the name and the returned order is
|
||||
not consistent (e.g. with DNS round-robin) then the other IP addresses are
|
||||
not included in the comparison and the entry is flagged as changed even
|
||||
though the IP is still valid.
|
||||
|
||||
Updated the code to check all IP addresses and flag a change only if the
|
||||
original IP is no longer valid.
|
||||
|
||||
Resolves: #924
|
||||
|
||||
#### geolocation.sample.conf: Fix comment marker at end of file
|
||||
Author: George Joseph
|
||||
Date: 2024-10-08
|
||||
|
||||
Resolves: #937
|
||||
|
||||
#### func_base64.c: Ensure we set aside enough room for base64 encoded data.
|
||||
Author: Sean Bright
|
||||
Date: 2024-10-08
|
||||
|
||||
Reported by SingularTricycle on IRC.
|
||||
|
||||
Fixes #940
|
||||
|
||||
|
||||
#### app_dial: Fix progress timeout.
|
||||
Author: Naveen Albert
|
||||
Date: 2024-10-03
|
||||
|
||||
Under some circumstances, the progress timeout feature added in commit
|
||||
320c98eec87c473bfa814f76188a37603ea65ddd does not work as expected,
|
||||
such as if there is no media flowing. Adjust the waitfor call to
|
||||
explicitly use the progress timeout if it would be reached sooner than
|
||||
the answer timeout to ensure we handle the timers properly.
|
||||
|
||||
Resolves: #821
|
||||
|
||||
#### chan_dahdi: Never send MWI while off-hook.
|
||||
Author: Naveen Albert
|
||||
Date: 2024-10-01
|
||||
|
||||
In some circumstances, it is possible for the do_monitor thread to
|
||||
erroneously think that a line is on-hook and send an MWI FSK spill
|
||||
to it when the line is really off-hook and no MWI should be sent.
|
||||
Commit 0a8b3d34673277b70be6b0e8ac50191b1f3c72c6 previously fixed this
|
||||
issue in a more readily encountered scenario, but it has still been
|
||||
possible for MWI to be sent when it shouldn't be. To robustly fix
|
||||
this issue, query DAHDI for the hook status to ensure we don't send
|
||||
MWI on a line that is actually still off hook.
|
||||
|
||||
Resolves: #928
|
||||
|
||||
#### manager.c: Add unit test for Originate app and appdata permissions
|
||||
Author: George Joseph
|
||||
Date: 2024-10-03
|
||||
|
||||
This unit test checks that dialplan apps and app data specified
|
||||
as parameters for the Originate action are allowed with the
|
||||
permissions the user has.
|
||||
|
||||
|
||||
#### alembic: Drop redundant voicemail_messages index.
|
||||
Author: Sean Bright
|
||||
Date: 2024-09-26
|
||||
|
||||
The `voicemail_messages_dir` index is a left prefix of the table's
|
||||
primary key and therefore unnecessary.
|
||||
|
||||
|
||||
#### res_agi.c: Ensure SIGCHLD handler functions are properly balanced.
|
||||
Author: Sean Bright
|
||||
Date: 2024-09-30
|
||||
|
||||
Calls to `ast_replace_sigchld()` and `ast_unreplace_sigchld()` must be
|
||||
balanced to ensure that we can capture the exit status of child
|
||||
processes when we need to. This extends to functions that call
|
||||
`ast_replace_sigchld()` and `ast_unreplace_sigchld()` such as
|
||||
`ast_safe_fork()` and `ast_safe_fork_cleanup()`.
|
||||
|
||||
The primary change here is ensuring that we do not call
|
||||
`ast_safe_fork_cleanup()` in `res_agi.c` if we have not previously
|
||||
called `ast_safe_fork()`.
|
||||
|
||||
Additionally we reinforce some of the documentation and add an
|
||||
assertion to, ideally, catch this sooner were this to happen again.
|
||||
|
||||
Fixes #922
|
||||
|
||||
|
||||
#### main, res, tests: Fix compilation errors on FreeBSD.
|
||||
Author: Naveen Albert
|
||||
Date: 2024-09-29
|
||||
|
||||
asterisk.c, manager.c: Increase buffer sizes to avoid truncation warnings.
|
||||
config.c: Include header file for WIFEXITED/WEXITSTATUS macros.
|
||||
res_timing_kqueue: Use more portable format specifier.
|
||||
test_crypto: Use non-linux limits.h header file.
|
||||
|
||||
Resolves: #916
|
||||
|
||||
#### res_rtp_asterisk: Fix dtls timer issues causing FRACKs and SEGVs
|
||||
Author: George Joseph
|
||||
Date: 2024-09-16
|
||||
|
||||
In dtls_srtp_handle_timeout(), when DTLSv1_get_timeout() returned
|
||||
success but with a timeout of 0, we were stopping the timer and
|
||||
decrementing the refcount on instance but not resetting the
|
||||
timeout_timer to -1. When dtls_srtp_stop_timeout_timer()
|
||||
was later called, it was atempting to stop a stale timer and could
|
||||
decrement the refcount on instance again which would then cause
|
||||
the instance destructor to run early. This would result in either
|
||||
a FRACK or a SEGV when ast_rtp_stop(0 was called.
|
||||
|
||||
According to the OpenSSL docs, we shouldn't have been stopping the
|
||||
timer when DTLSv1_get_timeout() returned success and the new timeout
|
||||
was 0 anyway. We should have been calling DTLSv1_handle_timeout()
|
||||
again immediately so we now reschedule the timer callback for
|
||||
1ms (almost immediately).
|
||||
|
||||
Additionally, instead of scheduling the timer callback at a fixed
|
||||
interval returned by the initial call to DTLSv1_get_timeout()
|
||||
(usually 999 ms), we now reschedule the next callback based on
|
||||
the last call to DTLSv1_get_timeout().
|
||||
|
||||
Resolves: #487
|
||||
|
||||
#### manager.c: Restrict ModuleLoad to the configured modules directory.
|
||||
Author: Ben Ford
|
||||
Date: 2024-09-25
|
||||
|
||||
When using the ModuleLoad AMI action, it was possible to traverse
|
||||
upwards through the directories to files outside of the configured
|
||||
modules directory. We decided it would be best to restrict access to
|
||||
modules exclusively in the configured directory. You will now get an
|
||||
error when the specified module is outside of this limitation.
|
||||
|
||||
Fixes: #897
|
||||
|
||||
UserNote: The ModuleLoad AMI action now restricts modules to the
|
||||
configured modules directory.
|
||||
|
||||
|
||||
#### res_agi.c: Prevent possible double free during `SPEECH RECOGNIZE`
|
||||
Author: jiangxc
|
||||
Date: 2024-07-17
|
||||
|
||||
When using the speech recognition module, crashes can occur
|
||||
sporadically due to a "double free or corruption (out)" error. Now, in
|
||||
the section where the audio stream is being captured in a loop, each
|
||||
time after releasing fr, it is set to NULL to prevent repeated
|
||||
deallocation.
|
||||
|
||||
Fixes #772
|
||||
|
||||
|
||||
#### cdr_custom: Allow absolute filenames.
|
||||
Author: Sean Bright
|
||||
Date: 2024-09-26
|
||||
|
||||
A follow up to #893 that brings the same functionality to
|
||||
cdr_custom. Also update the sample configuration files to note support
|
||||
for absolute paths.
|
||||
|
||||
|
||||
#### astfd.c: Avoid calling fclose with NULL argument.
|
||||
Author: Naveen Albert
|
||||
Date: 2024-09-24
|
||||
|
||||
Don't pass through a NULL argument to fclose, which is undefined
|
||||
behavior, and instead return -1 and set errno appropriately. This
|
||||
also avoids a compiler warning with glibc 2.38 and newer, as glibc
|
||||
commit 71d9e0fe766a3c22a730995b9d024960970670af
|
||||
added the nonnull attribute to this argument.
|
||||
|
||||
Resolves: #900
|
||||
|
||||
#### channel: Preserve CHANNEL(userfield) on masquerade.
|
||||
Author: Peter Jannesen
|
||||
Date: 2024-09-20
|
||||
|
||||
In certain circumstances a channel may undergo an operation
|
||||
referred to as a masquerade. If this occurs the CHANNEL(userfield)
|
||||
value was not preserved causing it to get lost. This change makes
|
||||
it so that this field is now preserved.
|
||||
|
||||
Fixes: #882
|
||||
|
||||
#### cel_custom: Allow absolute filenames.
|
||||
Author: Peter Jannesen
|
||||
Date: 2024-09-20
|
||||
|
||||
If a filename starts with a '/' in cel_custom [mappings] assume it is
|
||||
a absolute file path and not relative filename/path to
|
||||
AST_LOG_DIR/cel_custom/
|
||||
|
||||
|
||||
#### app_voicemail: Fix ill-formatted pager emails with custom subject.
|
||||
Author: Naveen Albert
|
||||
Date: 2024-09-24
|
||||
|
||||
Add missing end-of-headers newline to pager emails with custom
|
||||
subjects, since this was missing from this code path.
|
||||
|
||||
Resolves: #902
|
||||
|
||||
#### res_pjsip_pubsub: Persist subscription 'generator_data' in sorcery
|
||||
Author: Sean Bright
|
||||
Date: 2024-09-23
|
||||
|
||||
Fixes #895
|
||||
|
||||
|
||||
#### Fix application references to Background
|
||||
Author: George Joseph
|
||||
Date: 2024-09-20
|
||||
|
||||
The app is actually named "BackGround" but several references
|
||||
in XML documentation were spelled "Background" with the lower
|
||||
case "g". This was causing documentation links to return
|
||||
"not found" messages.
|
||||
|
||||
|
||||
#### manager.conf.sample: Fix mathcing typo
|
||||
Author: George Joseph
|
||||
Date: 2024-09-24
|
||||
|
||||
|
||||
#### manager: Enhance event filtering for performance
|
||||
Author: George Joseph
|
||||
Date: 2024-07-31
|
||||
|
||||
UserNote: You can now perform more granular filtering on events
|
||||
in manager.conf using expressions like
|
||||
`eventfilter(name(Newchannel),header(Channel),method(starts_with)) = PJSIP/`
|
||||
This is much more efficient than
|
||||
`eventfilter = Event: Newchannel.*Channel: PJSIP/`
|
||||
Full syntax guide is in configs/samples/manager.conf.sample.
|
||||
|
||||
|
||||
#### manager.c: Split XML documentation to manager_doc.xml
|
||||
Author: George Joseph
|
||||
Date: 2024-08-01
|
||||
|
||||
|
||||
#### db.c: Remove limit on family/key length
|
||||
Author: George Joseph
|
||||
Date: 2024-09-11
|
||||
|
||||
Consumers like media_cache have been running into issues with
|
||||
the previous astdb "/family/key" limit of 253 bytes when needing
|
||||
to store things like long URIs. An Amazon S3 URI is a good example
|
||||
of this. Now, instead of using a static 256 byte buffer for
|
||||
"/family/key", we use ast_asprintf() to dynamically create it.
|
||||
|
||||
Both test_db.c and test_media_cache.c were also updated to use
|
||||
keys/URIs over the old 253 character limit.
|
||||
|
||||
Resolves: #881
|
||||
|
||||
UserNote: The `ast_db_*()` APIs have had the 253 byte limit on
|
||||
"/family/key" removed and will now accept families and keys with a
|
||||
total length of up to SQLITE_MAX_LENGTH (currently 1e9!). This
|
||||
affects the `DB*` dialplan applications, dialplan functions,
|
||||
manager actions and `databse` CLI commands. Since the
|
||||
media_cache also uses the `ast_db_*()` APIs, you can now store
|
||||
resources with URIs longer than 253 bytes.
|
||||
|
||||
|
||||
@@ -1,65 +0,0 @@
|
||||
|
||||
## Change Log for Release asterisk-20.11.1
|
||||
|
||||
### Links:
|
||||
|
||||
- [Full ChangeLog](https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-20.11.1.md)
|
||||
- [GitHub Diff](https://github.com/asterisk/asterisk/compare/20.11.0...20.11.1)
|
||||
- [Tarball](https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20.11.1.tar.gz)
|
||||
- [Downloads](https://downloads.asterisk.org/pub/telephony/asterisk)
|
||||
|
||||
### Summary:
|
||||
|
||||
- Commits: 1
|
||||
- Commit Authors: 1
|
||||
- Issues Resolved: 0
|
||||
- Security Advisories Resolved: 1
|
||||
- [GHSA-33x6-fj46-6rfh](https://github.com/asterisk/asterisk/security/advisories/GHSA-33x6-fj46-6rfh): Path traversal via AMI ListCategories allows access to outside files
|
||||
|
||||
### User Notes:
|
||||
|
||||
- #### manager.c: Restrict ListCategories to the configuration directory.
|
||||
The ListCategories AMI action now restricts files to the
|
||||
configured configuration directory.
|
||||
|
||||
|
||||
### Upgrade Notes:
|
||||
|
||||
|
||||
### Commit Authors:
|
||||
|
||||
- Ben Ford: (1)
|
||||
|
||||
## Issue and Commit Detail:
|
||||
|
||||
### Closed Issues:
|
||||
|
||||
- !GHSA-33x6-fj46-6rfh: Path traversal via AMI ListCategories allows access to outside files
|
||||
|
||||
### Commits By Author:
|
||||
|
||||
- #### Ben Ford (1):
|
||||
- manager.c: Restrict ListCategories to the configuration directory.
|
||||
|
||||
|
||||
### Commit List:
|
||||
|
||||
- manager.c: Restrict ListCategories to the configuration directory.
|
||||
|
||||
### Commit Details:
|
||||
|
||||
#### manager.c: Restrict ListCategories to the configuration directory.
|
||||
Author: Ben Ford
|
||||
Date: 2024-12-17
|
||||
|
||||
When using the ListCategories AMI action, it was possible to traverse
|
||||
upwards through the directories to files outside of the configured
|
||||
configuration directory. This action is now restricted to the configured
|
||||
directory and an error will now be returned if the specified file is
|
||||
outside of this limitation.
|
||||
|
||||
Resolves: #GHSA-33x6-fj46-6rfh
|
||||
|
||||
UserNote: The ListCategories AMI action now restricts files to the
|
||||
configured configuration directory.
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,575 +0,0 @@
|
||||
<html><head><title>ChangeLog for asterisk-20.13.0</title></head><body>
|
||||
<h2>Change Log for Release asterisk-20.13.0</h2>
|
||||
<h3>Links:</h3>
|
||||
<ul>
|
||||
<li><a href="https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-20.13.0.html">Full ChangeLog</a> </li>
|
||||
<li><a href="https://github.com/asterisk/asterisk/compare/20.12.0...20.13.0">GitHub Diff</a> </li>
|
||||
<li><a href="https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20.13.0.tar.gz">Tarball</a> </li>
|
||||
<li><a href="https://downloads.asterisk.org/pub/telephony/asterisk">Downloads</a> </li>
|
||||
</ul>
|
||||
<h3>Summary:</h3>
|
||||
<ul>
|
||||
<li>Commits: 29</li>
|
||||
<li>Commit Authors: 12</li>
|
||||
<li>Issues Resolved: 12</li>
|
||||
<li>Security Advisories Resolved: 0</li>
|
||||
</ul>
|
||||
<h3>User Notes:</h3>
|
||||
<ul>
|
||||
<li>
|
||||
<h4>ari/pjsip: Make it possible to control transfers through ARI</h4>
|
||||
Call transfers on the PJSIP channel can now be controlled by
|
||||
ARI. This can be enabled by using the PJSIP_TRANSFER_HANDLING(ari-only)
|
||||
dialplan function.</li>
|
||||
</ul>
|
||||
<h3>Upgrade Notes:</h3>
|
||||
<h3>Commit Authors:</h3>
|
||||
<ul>
|
||||
<li>Allan Nathanson: (1)</li>
|
||||
<li>Ben Ford: (1)</li>
|
||||
<li>Fabriziopicconi: (1)</li>
|
||||
<li>George Joseph: (11)</li>
|
||||
<li>Holger Hans Peter Freyther: (1)</li>
|
||||
<li>Jeremy Lainé: (1)</li>
|
||||
<li>Joshua Elson: (1)</li>
|
||||
<li>Luz Paz: (3)</li>
|
||||
<li>Maximilian Fridrich: (1)</li>
|
||||
<li>Mike Bradeen: (1)</li>
|
||||
<li>Naveen Albert: (1)</li>
|
||||
<li>Sean Bright: (6)</li>
|
||||
</ul>
|
||||
<h2>Issue and Commit Detail:</h2>
|
||||
<h3>Closed Issues:</h3>
|
||||
<ul>
|
||||
<li>211: [bug]: stasis: Off-nominal channel leave causes bridge to be destroyed</li>
|
||||
<li>1085: [bug]: utils: Compilation failure with DEVMODE due to old-style definitions</li>
|
||||
<li>1101: [bug]: when setting a var with a double quotes and using Set(HASH)</li>
|
||||
<li>1109: [bug]: Off nominal memory leak in res/ari/resource_channels.c</li>
|
||||
<li>1112: [bug]: STIR/SHAKEN verification doesn't allow anonymous callerid to be passed to the dialplan.</li>
|
||||
<li>1119: [bug]: Realtime database not working after upgrade from 22.0.0 to 22.2.0</li>
|
||||
<li>1122: Need status on CVE-2024-57520 claim.</li>
|
||||
<li>1124: [bug]: Race condition between bridge and channel delete can over-write cause code set in hangup.</li>
|
||||
<li>1131: [bug]: CHANGES link broken in README.md</li>
|
||||
<li>1135: [bug]: Problems with video decoding due to RTP marker bit set</li>
|
||||
<li>1149: [bug]: res_pjsip: Mismatch in tcp_keepalive_enable causes not to enable</li>
|
||||
<li>1164: [bug]: WARNING Message in messages.log for res_curl.conf [globals]</li>
|
||||
</ul>
|
||||
<h3>Commits By Author:</h3>
|
||||
<ul>
|
||||
<li>
|
||||
<h4>Allan Nathanson (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<p>config.c: #include of non-existent file should not crash</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Ben Ford (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<p>documentation: Update Gosub, Goto, and add new documentationtype.</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>George Joseph (11):</h4>
|
||||
</li>
|
||||
<li>docs: Add version information to ARI resources and methods.</li>
|
||||
<li>docs: Add version information to AGI command XML elements.</li>
|
||||
<li>func_strings.c: Prevent SEGV in HASH single-argument mode.</li>
|
||||
<li>resource_channels.c: Fix memory leak in ast_ari_channels_external_media.</li>
|
||||
<li>res_stir_shaken: Allow missing or anonymous CID to continue to the dialplan.</li>
|
||||
<li>res_config_pgsql: Fix regression that removed dbname config.</li>
|
||||
<li>bridging: Fix multiple bridging issues causing SEGVs and FRACKs.</li>
|
||||
<li>swagger_model.py: Fix invalid escape sequence in get_list_parameter_type().</li>
|
||||
<li>manager.c: Check for restricted file in action_createconfig.</li>
|
||||
<li>README.md: Updates and Fixes</li>
|
||||
<li>
|
||||
<p>res_pjsip_outbound_registration.c: Remove xpointer reference to user_agent.</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Holger Hans Peter Freyther (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<p>ari/pjsip: Make it possible to control transfers through ARI</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Jeremy Lainé (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<p>docs: Fix minor typo in MixMonitor AMI action</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Joshua Elson (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<p>fix: Correct default flag for tcp_keepalive_enable option</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Luz Paz (3):</h4>
|
||||
</li>
|
||||
<li>docs: Fix various typos in main/ Found via `codespell -q 3 -S "./CREDITS" -L a..</li>
|
||||
<li>docs: Fix various typos in channels/ Found via `codespell -q 3 -S "./CREDITS,*..</li>
|
||||
<li>
|
||||
<p>docs: Fix typos in cdr/ Found via codespell</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Maximilian Fridrich (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<p>Revert "res_rtp_asterisk.c: Set Mark on rtp when timestamp skew is too big"</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Mike Bradeen (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<p>bridge_channel: don't set cause code on channel during bridge delete if alread..</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Naveen Albert (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<p>utils: Disable old style definition warnings for libdb.</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Sean Bright (6):</h4>
|
||||
</li>
|
||||
<li>docs: Indent <since> tags.</li>
|
||||
<li>channel.c: Remove dead AST_GENERATOR_FD code.</li>
|
||||
<li>res_rtp_asterisk.c: Use correct timeout value for T.140 RED timer.</li>
|
||||
<li>docs: AMI documentation fixes.</li>
|
||||
<li>res_rtp_asterisk.c: Don't truncate spec-compliant <code>ice-ufrag</code> or <code>ice-pwd</code>.</li>
|
||||
<li>
|
||||
<p>res_config_curl.c: Remove unnecessary warnings.</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>fabriziopicconi (1):</h4>
|
||||
</li>
|
||||
<li>rtp.conf.sample: Correct stunaddr example.</li>
|
||||
</ul>
|
||||
<h3>Commit List:</h3>
|
||||
<ul>
|
||||
<li>documentation: Update Gosub, Goto, and add new documentationtype.</li>
|
||||
<li>res_config_curl.c: Remove unnecessary warnings.</li>
|
||||
<li>res_pjsip_outbound_registration.c: Remove xpointer reference to user_agent.</li>
|
||||
<li>README.md: Updates and Fixes</li>
|
||||
<li>res_rtp_asterisk.c: Don't truncate spec-compliant <code>ice-ufrag</code> or <code>ice-pwd</code>.</li>
|
||||
<li>fix: Correct default flag for tcp_keepalive_enable option</li>
|
||||
<li>docs: AMI documentation fixes.</li>
|
||||
<li>config.c: #include of non-existent file should not crash</li>
|
||||
<li>manager.c: Check for restricted file in action_createconfig.</li>
|
||||
<li>swagger_model.py: Fix invalid escape sequence in get_list_parameter_type().</li>
|
||||
<li>Revert "res_rtp_asterisk.c: Set Mark on rtp when timestamp skew is too big"</li>
|
||||
<li>res_rtp_asterisk.c: Use correct timeout value for T.140 RED timer.</li>
|
||||
<li>docs: Fix typos in cdr/ Found via codespell</li>
|
||||
<li>bridging: Fix multiple bridging issues causing SEGVs and FRACKs.</li>
|
||||
<li>res_config_pgsql: Fix regression that removed dbname config.</li>
|
||||
<li>res_stir_shaken: Allow missing or anonymous CID to continue to the dialplan.</li>
|
||||
<li>resource_channels.c: Fix memory leak in ast_ari_channels_external_media.</li>
|
||||
<li>ari/pjsip: Make it possible to control transfers through ARI</li>
|
||||
<li>channel.c: Remove dead AST_GENERATOR_FD code.</li>
|
||||
<li>func_strings.c: Prevent SEGV in HASH single-argument mode.</li>
|
||||
<li>docs: Add version information to AGI command XML elements.</li>
|
||||
<li>docs: Fix minor typo in MixMonitor AMI action</li>
|
||||
<li>utils: Disable old style definition warnings for libdb.</li>
|
||||
<li>rtp.conf.sample: Correct stunaddr example.</li>
|
||||
<li>docs: Add version information to ARI resources and methods.</li>
|
||||
<li>docs: Indent <since> tags.</li>
|
||||
</ul>
|
||||
<h3>Commit Details:</h3>
|
||||
<h4>documentation: Update Gosub, Goto, and add new documentationtype.</h4>
|
||||
<p>Author: Ben Ford
|
||||
Date: 2025-03-14</p>
|
||||
<p>Gosub and Goto were not displaying their syntax correctly on the docs
|
||||
site. This change adds a new way to specify an optional context, an
|
||||
optional extension, and a required priority that the xml stylesheet can
|
||||
parse without having to know which optional parameters come in which
|
||||
order. In Asterisk, it looks like this:</p>
|
||||
<pre><code>parameter name="context" documentationtype="dialplan_context"
|
||||
parameter name="extension" documentationtype="dialplan_extension"
|
||||
parameter name="priority" documentationtype="dialplan_priority" required="true"
|
||||
</code></pre>
|
||||
<p>The stylesheet will ignore the context and extension parameters, but for
|
||||
priority, it will automatically inject the following:</p>
|
||||
<pre><code>[[context,]extension,]priority
|
||||
</code></pre>
|
||||
<p>This is the correct oder for applications such as Gosub and Goto.</p>
|
||||
<h4>res_config_curl.c: Remove unnecessary warnings.</h4>
|
||||
<p>Author: Sean Bright
|
||||
Date: 2025-03-17</p>
|
||||
<p>Resolves: #1164</p>
|
||||
<h4>res_pjsip_outbound_registration.c: Remove xpointer reference to user_agent.</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2025-03-14</p>
|
||||
<p>Commit e86f937e added AMI documentation to the module but the cherry-pick
|
||||
from master to the 20 branch pulled in an xpointer reference to the
|
||||
<code>user_agent</code> config option which doesn't actually exist in 20. This causes
|
||||
asterisk to fail to start because it can't load the core-en_US.xml
|
||||
documentation file. The CI cherry-pick tests should have caught this but
|
||||
there was bug in the cherry-picker that was causing the commits to be
|
||||
cherry-picked to the wrong branch. Just removing the xpointer reference
|
||||
resolves the issue.</p>
|
||||
<h4>README.md: Updates and Fixes</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2025-03-05</p>
|
||||
<ul>
|
||||
<li>Outdated information has been removed.</li>
|
||||
<li>New links added.</li>
|
||||
<li>Placeholder added for link to change logs.</li>
|
||||
</ul>
|
||||
<p>Going forward, the release process will create HTML versions of the README
|
||||
and change log and will update the link in the README to the current
|
||||
change log for the branch...</p>
|
||||
<ul>
|
||||
<li>In the development branches, the link will always point to the current
|
||||
release on GitHub.</li>
|
||||
<li>In the "releases/*" branches and the tarballs, the link will point to the
|
||||
ChangeLogs/ChangeLog-<version>.html file in the source directory.</li>
|
||||
<li>On the downloads website, the link will point to the
|
||||
ChangeLog-<version>.html file in the same directory.</li>
|
||||
</ul>
|
||||
<p>Resolves: #1131</p>
|
||||
<h4>res_rtp_asterisk.c: Don't truncate spec-compliant <code>ice-ufrag</code> or <code>ice-pwd</code>.</h4>
|
||||
<p>Author: Sean Bright
|
||||
Date: 2025-03-07</p>
|
||||
<p>RFC 8839[1] indicates that the <code>ice-ufrag</code> and <code>ice-pwd</code> attributes
|
||||
can be up to 256 bytes long. While we don't generate values of that
|
||||
size, we should be able to accomodate them without truncating.</p>
|
||||
<ol>
|
||||
<li>https://www.rfc-editor.org/rfc/rfc8839#name-ice-ufrag-and-ice-pwd-attri</li>
|
||||
</ol>
|
||||
<h4>fix: Correct default flag for tcp_keepalive_enable option</h4>
|
||||
<p>Author: Joshua Elson
|
||||
Date: 2025-03-06</p>
|
||||
<p>Resolves an issue where the tcp_keepalive_enable option was not properly enabled in the sample configuration due to an incorrect default flag setting.</p>
|
||||
<p>Fixes: #1149</p>
|
||||
<h4>docs: AMI documentation fixes.</h4>
|
||||
<p>Author: Sean Bright
|
||||
Date: 2025-02-18</p>
|
||||
<p>Most of this patch is adding missing PJSIP-related event
|
||||
documentation, but the one functional change was adding a sorcery
|
||||
to-string handler for endpoint's <code>redirect_method</code> which was not
|
||||
showing up in the AMI event details or <code>pjsip show endpoint
|
||||
<endpoint></code> output.</p>
|
||||
<p>The rest of the changes are summarized below:</p>
|
||||
<ul>
|
||||
<li>app_agent_pool.c: Typo fix Epoche -> Epoch.</li>
|
||||
<li>stasis_bridges.c: Add missing AttendedTransfer properties.</li>
|
||||
<li>stasis_channels.c: Add missing AgentLogoff properties.</li>
|
||||
<li>pjsip_manager.xml:<ul>
|
||||
<li>Add missing AorList properties.</li>
|
||||
<li>Add missing AorDetail properties.</li>
|
||||
<li>Add missing ContactList properties.</li>
|
||||
<li>Add missing ContactStatusDetail properties.</li>
|
||||
<li>Add missing EventDetail properties.</li>
|
||||
<li>Add missing AuthList properties.</li>
|
||||
<li>Add missing AuthDetail properties.</li>
|
||||
<li>Add missing TransportDetail properties.</li>
|
||||
<li>Add missing EndpointList properties.</li>
|
||||
<li>Add missing IdentifyDetail properties.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>res_pjsip_registrar.c: Add missing InboundRegistrationDetail documentation.</li>
|
||||
<li>res_pjsip_pubsub.c:<ul>
|
||||
<li>Add missing ResourceListDetail documentation.</li>
|
||||
<li>Add missing InboundSubscriptionDetail documentation.</li>
|
||||
<li>Add missing OutboundSubscriptionDetail documentation.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>res_pjsip_outbound_registration.c: Add missing OutboundRegistrationDetail documentation.</li>
|
||||
</ul>
|
||||
<h4>config.c: #include of non-existent file should not crash</h4>
|
||||
<p>Author: Allan Nathanson
|
||||
Date: 2025-03-03</p>
|
||||
<p>Corrects a segmentation fault when a configuration file has a #include
|
||||
statement that referenced a file that does not exist.</p>
|
||||
<p>Resolves: https://github.com/asterisk/asterisk/issues/1139</p>
|
||||
<h4>manager.c: Check for restricted file in action_createconfig.</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2025-03-03</p>
|
||||
<p>The <code>CreateConfig</code> manager action now ensures that a config file can
|
||||
only be created in the AST_CONFIG_DIR unless <code>live_dangerously</code> is set.</p>
|
||||
<p>Resolves: #1122</p>
|
||||
<h4>swagger_model.py: Fix invalid escape sequence in get_list_parameter_type().</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2025-03-04</p>
|
||||
<p>Recent python versions complain when backslashes in strings create invalid
|
||||
escape sequences. This causes issues for strings used as regex patterns like
|
||||
<code>'^List\[(.*)\]$'</code> where you want the regex parser to treat <code>[</code> and <code>]</code>
|
||||
as literals. Double-backslashing is one way to fix it but simply converting
|
||||
the string to a raw string <code>re.match(r'^List\[(.*)\]$', text)</code> is easier
|
||||
and less error prone.</p>
|
||||
<h4>Revert "res_rtp_asterisk.c: Set Mark on rtp when timestamp skew is too big"</h4>
|
||||
<p>Author: Maximilian Fridrich
|
||||
Date: 2025-02-28</p>
|
||||
<p>This reverts commit f30ad96b3f467739c38ff415e80bffc4afff1da7.</p>
|
||||
<p>The original change was not RFC compliant and caused issues because it
|
||||
set the RTP marker bit in cases when it shouldn't be set. See the
|
||||
linked issue #1135 for a detailed explanation.</p>
|
||||
<p>Fixes: #1135.</p>
|
||||
<h4>res_rtp_asterisk.c: Use correct timeout value for T.140 RED timer.</h4>
|
||||
<p>Author: Sean Bright
|
||||
Date: 2025-02-24</p>
|
||||
<p>Found while reviewing #1128</p>
|
||||
<h4>docs: Fix typos in cdr/ Found via codespell</h4>
|
||||
<p>Author: Luz Paz
|
||||
Date: 2025-02-12</p>
|
||||
<h4>docs: Fix various typos in channels/ Found via `codespell -q 3 -S "./CREDITS,*..</h4>
|
||||
<p>Author: Luz Paz
|
||||
Date: 2025-02-04</p>
|
||||
<h4>docs: Fix various typos in main/ Found via `codespell -q 3 -S "./CREDITS" -L a..</h4>
|
||||
<p>Author: Luz Paz
|
||||
Date: 2025-02-04</p>
|
||||
<h4>bridging: Fix multiple bridging issues causing SEGVs and FRACKs.</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2025-01-22</p>
|
||||
<p>Issues:</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>The bridging core allowed multiple bridges to be created with the same
|
||||
unique bridgeId at the same time. Only the last bridge created with the
|
||||
duplicate name was actually saved to the core bridges container.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The bridging core was creating a stasis topic for the bridge and saving it
|
||||
in the bridge->topic field but not increasing its reference count. In the
|
||||
case where two bridges were created with the same uniqueid (which is also
|
||||
the topic name), the second bridge would get the <em>existing</em> topic the first
|
||||
bridge created. When the first bridge was destroyed, it would take the
|
||||
topic with it so when the second bridge attempted to publish a message to
|
||||
it it either FRACKed or SEGVd.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The bridge destructor, which also destroys the bridge topic, is run from the
|
||||
bridge manager thread not the caller's thread. This makes it possible for
|
||||
an ARI developer to create a new one with the same uniqueid believing the
|
||||
old one was destroyed when, in fact, the old one's destructor hadn't
|
||||
completed. This could cause the new bridge to get the old one's topic just
|
||||
before the topic was destroyed. When the new bridge attempted to publish
|
||||
a message on that topic, asterisk could either FRACK or SEGV.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The ARI bridges resource also allowed multiple bridges to be created with
|
||||
the same uniqueid but it kept the duplicate bridges in its app_bridges
|
||||
container. This created a situation where if you added two bridges with
|
||||
the same "bridge1" uniqueid, all operations on "bridge1" were performed on
|
||||
the first bridge created and the second was basically orphaned. If you
|
||||
attempted to delete what you thought was the second bridge, you actually
|
||||
deleted the first one created.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>Changes:</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>A new API <code>ast_bridge_topic_exists(uniqueid)</code> was created to determine if
|
||||
a topic already exists for a bridge.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><code>bridge_base_init()</code> in bridge.c and <code>ast_ari_bridges_create()</code> in
|
||||
resource_bridges.c now call <code>ast_bridge_topic_exists(uniqueid)</code> to check
|
||||
if a bridge with the requested uniqueid already exists and will fail if it
|
||||
does.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><code>bridge_register()</code> in bridges.c now checks the core bridges container to
|
||||
make sure a bridge doesn't already exist with the requested uniqueid.
|
||||
Although most callers of <code>bridge_register()</code> will have already called
|
||||
<code>bridge_base_init()</code>, which will now fail on duplicate bridges, there
|
||||
is no guarantee of this so we must check again.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The core bridges container allocation was changed to reject duplicate
|
||||
uniqueids instead of silently replacing an existing one. This is a "belt
|
||||
and suspenders" check.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>A global mutex was added to bridge.c to prevent concurrent calls to
|
||||
<code>bridge_base_init()</code> and <code>bridge_register()</code>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Even though you can no longer create multiple bridges with the same uniqueid
|
||||
at the same time, it's still possible that the bridge topic might be
|
||||
destroyed while a second bridge with the same uniqueid was trying to use
|
||||
it. To address this, the bridging core now increments the reference count
|
||||
on bridge->topic when a bridge is created and decrements it when the
|
||||
bridge is destroyed.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><code>bridge_create_common()</code> in res_stasis.c now checks the stasis app_bridges
|
||||
container to make sure a bridge with the requested uniqueid doesn't already
|
||||
exist. This may seem like overkill but there are so many entrypoints to
|
||||
bridge creation that we need to be safe and catch issues as soon in the
|
||||
process as possible.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The stasis app_bridges container allocation was changed to reject duplicate
|
||||
uniqueids instead of adding them. This is a "belt and suspenders" check.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The <code>bridge show all</code> CLI command now shows the bridge name as well as the
|
||||
bridge id.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Response code 409 "Conflict" was added as a possible response from the ARI
|
||||
bridge create resources to signal that a bridge with the requested uniqueid
|
||||
already exists.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Additional debugging was added to multiple bridging and stasis files.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>Resolves: #211</p>
|
||||
<h4>bridge_channel: don't set cause code on channel during bridge delete if alread..</h4>
|
||||
<p>Author: Mike Bradeen
|
||||
Date: 2025-02-18</p>
|
||||
<p>Due to a potential race condition via ARI when hanging up a channel hangup with cause
|
||||
while also deleting a bridge containing that channel, the bridge delete can over-write
|
||||
the hangup cause code resulting in Normal Call Clearing instead of the set value.</p>
|
||||
<p>With this change, bridge deletion will only set the hangup code if it hasn't been
|
||||
previously set.</p>
|
||||
<p>Resolves: #1124</p>
|
||||
<h4>res_config_pgsql: Fix regression that removed dbname config.</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2025-02-11</p>
|
||||
<p>A recent commit accidentally removed the code that sets dbname.
|
||||
This commit adds it back in.</p>
|
||||
<p>Resolves: #1119</p>
|
||||
<h4>res_stir_shaken: Allow missing or anonymous CID to continue to the dialplan.</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2025-02-05</p>
|
||||
<p>The verification check for missing or anonymous callerid was happening before
|
||||
the endpoint's profile was retrieved which meant that the failure_action
|
||||
parameter wasn't available. Therefore, if verification was enabled and there
|
||||
was no callerid or it was "anonymous", the call was immediately terminated
|
||||
instead of giving the dialplan the ability to decide what to do with the call.</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>The callerid check now happens after the verification context is created and
|
||||
the endpoint's stir_shaken_profile is available.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The check now processes the callerid failure just as it does for other
|
||||
verification failures and respects the failure_action parameter. If set
|
||||
to "continue" or "continue_return_reason", <code>STIR_SHAKEN(0,verify_result)</code>
|
||||
in the dialplan will return "invalid_or_no_callerid".</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>If the endpoint's failure_action is "reject_request", the call will be
|
||||
rejected with <code>433 "Anonymity Disallowed"</code>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>If the endpoint's failure_action is "continue_return_reason", the call will
|
||||
continue but a <code>Reason: STIR; cause=433; text="Anonymity Disallowed"</code>
|
||||
header will be added to the next provisional or final response.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>Resolves: #1112</p>
|
||||
<h4>resource_channels.c: Fix memory leak in ast_ari_channels_external_media.</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2025-02-04</p>
|
||||
<p>Between ast_ari_channels_external_media(), external_media_rtp_udp(),
|
||||
and external_media_audiosocket_tcp(), the <code>variables</code> structure being passed
|
||||
around wasn't being cleaned up properly when there was a failure.</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>In ast_ari_channels_external_media(), the <code>variables</code> structure is now
|
||||
defined with RAII_VAR to ensure it always gets cleaned up.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The ast_variables_destroy() call was removed from external_media_rtp_udp().</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The ast_variables_destroy() call was removed from
|
||||
external_media_audiosocket_tcp(), its <code>endpoint</code> allocation was changed to
|
||||
to use ast_asprintf() as external_media_rtp_udp() does, and it now
|
||||
returns an error on failure.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>ast_ari_channels_external_media() now checks the new return code from
|
||||
external_media_audiosocket_tcp() and sets the appropriate error response.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>Resolves: #1109</p>
|
||||
<h4>ari/pjsip: Make it possible to control transfers through ARI</h4>
|
||||
<p>Author: Holger Hans Peter Freyther
|
||||
Date: 2024-06-15</p>
|
||||
<p>Introduce a ChannelTransfer event and the ability to notify progress to
|
||||
ARI. Implement emitting this event from the PJSIP channel instead of
|
||||
handling the transfer in Asterisk when configured.</p>
|
||||
<p>Introduce a dialplan function to the PJSIP channel to switch between the
|
||||
"core" and "ari-only" behavior.</p>
|
||||
<p>UserNote: Call transfers on the PJSIP channel can now be controlled by
|
||||
ARI. This can be enabled by using the PJSIP_TRANSFER_HANDLING(ari-only)
|
||||
dialplan function.</p>
|
||||
<h4>channel.c: Remove dead AST_GENERATOR_FD code.</h4>
|
||||
<p>Author: Sean Bright
|
||||
Date: 2025-02-06</p>
|
||||
<p>Nothing ever sets the <code>AST_GENERATOR_FD</code>, so this block of code will
|
||||
never execute. It also is the only place where the <code>generate</code> callback
|
||||
is called with the channel lock held which made it difficult to reason
|
||||
about the thread safety of <code>ast_generator</code>s.</p>
|
||||
<p>In passing, also note that <code>AST_AGENT_FD</code> isn't used either.</p>
|
||||
<h4>func_strings.c: Prevent SEGV in HASH single-argument mode.</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2025-01-30</p>
|
||||
<p>When in single-argument mode (very rarely used), a malformation of a column
|
||||
name (also very rare) could cause a NULL to be returned when retrieving the
|
||||
channel variable for that column. Passing that to strncat causes a SEGV. We
|
||||
now check for the NULL and print a warning message.</p>
|
||||
<p>Resolves: #1101</p>
|
||||
<h4>docs: Add version information to AGI command XML elements.</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2025-01-24</p>
|
||||
<p>This process was a bit different than the others because everything
|
||||
is in the same file, there's an array that contains the command
|
||||
names and their handler functions, and the last command was created
|
||||
over 15 years ago.</p>
|
||||
<ul>
|
||||
<li>Dump a <code>git blame</code> of res/res_agi.c from BEFORE the handle_* prototypes
|
||||
were changed.</li>
|
||||
<li>Create a command <> handler function xref by parsing the the agi_command
|
||||
array.</li>
|
||||
<li>For each entry, grep the function definition line "static int handle_*"
|
||||
from the git blame output and capture the commit. This will be the
|
||||
commit the command was created in.</li>
|
||||
<li>Do a <code>git tag --contains <commit> | sort -V | head -1</code> to get the
|
||||
tag the function was created in.</li>
|
||||
<li>Add a single since/version element to the command XML. Multiple versions
|
||||
aren't supported here because the branching and tagging scheme changed
|
||||
several times in the 2000's.</li>
|
||||
</ul>
|
||||
<h4>docs: Fix minor typo in MixMonitor AMI action</h4>
|
||||
<p>Author: Jeremy Lainé
|
||||
Date: 2025-01-28</p>
|
||||
<p>The <code>Options</code> argument was erroneously documented as lowercase
|
||||
<code>options</code>.</p>
|
||||
<h4>utils: Disable old style definition warnings for libdb.</h4>
|
||||
<p>Author: Naveen Albert
|
||||
Date: 2025-01-23</p>
|
||||
<p>Newer versions of gcc now warn about old style definitions, such
|
||||
as those in libdb, which causes compilation failure with DEVMODE
|
||||
enabled. Ignore these warnings for libdb.</p>
|
||||
<p>Resolves: #1085</p>
|
||||
<h4>rtp.conf.sample: Correct stunaddr example.</h4>
|
||||
<p>Author: fabriziopicconi
|
||||
Date: 2024-09-25</p>
|
||||
<h4>docs: Add version information to ARI resources and methods.</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2025-01-27</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>Dump a git blame of each file in rest-api/api-docs.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Get the commit for each "resourcePath" and "httpMethod" entry.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Find the tags for each commit (same as other processes).</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Insert a "since" array after each "resourcePath" and "httpMethod" entry.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<h4>docs: Indent <since> tags.</h4>
|
||||
<p>Author: Sean Bright
|
||||
Date: 2025-01-23</p>
|
||||
<p>Also updates the 'since' of applications/functions that existed before
|
||||
XML documentation was introduced (1.6.2.0).</p>
|
||||
</body></html>
|
||||
@@ -1,589 +0,0 @@
|
||||
|
||||
## Change Log for Release asterisk-20.13.0
|
||||
|
||||
### Links:
|
||||
|
||||
- [Full ChangeLog](https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-20.13.0.html)
|
||||
- [GitHub Diff](https://github.com/asterisk/asterisk/compare/20.12.0...20.13.0)
|
||||
- [Tarball](https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20.13.0.tar.gz)
|
||||
- [Downloads](https://downloads.asterisk.org/pub/telephony/asterisk)
|
||||
|
||||
### Summary:
|
||||
|
||||
- Commits: 29
|
||||
- Commit Authors: 12
|
||||
- Issues Resolved: 12
|
||||
- Security Advisories Resolved: 0
|
||||
|
||||
### User Notes:
|
||||
|
||||
- #### ari/pjsip: Make it possible to control transfers through ARI
|
||||
Call transfers on the PJSIP channel can now be controlled by
|
||||
ARI. This can be enabled by using the PJSIP_TRANSFER_HANDLING(ari-only)
|
||||
dialplan function.
|
||||
|
||||
|
||||
### Upgrade Notes:
|
||||
|
||||
|
||||
### Commit Authors:
|
||||
|
||||
- Allan Nathanson: (1)
|
||||
- Ben Ford: (1)
|
||||
- Fabriziopicconi: (1)
|
||||
- George Joseph: (11)
|
||||
- Holger Hans Peter Freyther: (1)
|
||||
- Jeremy Lainé: (1)
|
||||
- Joshua Elson: (1)
|
||||
- Luz Paz: (3)
|
||||
- Maximilian Fridrich: (1)
|
||||
- Mike Bradeen: (1)
|
||||
- Naveen Albert: (1)
|
||||
- Sean Bright: (6)
|
||||
|
||||
## Issue and Commit Detail:
|
||||
|
||||
### Closed Issues:
|
||||
|
||||
- 211: [bug]: stasis: Off-nominal channel leave causes bridge to be destroyed
|
||||
- 1085: [bug]: utils: Compilation failure with DEVMODE due to old-style definitions
|
||||
- 1101: [bug]: when setting a var with a double quotes and using Set(HASH)
|
||||
- 1109: [bug]: Off nominal memory leak in res/ari/resource_channels.c
|
||||
- 1112: [bug]: STIR/SHAKEN verification doesn't allow anonymous callerid to be passed to the dialplan.
|
||||
- 1119: [bug]: Realtime database not working after upgrade from 22.0.0 to 22.2.0
|
||||
- 1122: Need status on CVE-2024-57520 claim.
|
||||
- 1124: [bug]: Race condition between bridge and channel delete can over-write cause code set in hangup.
|
||||
- 1131: [bug]: CHANGES link broken in README.md
|
||||
- 1135: [bug]: Problems with video decoding due to RTP marker bit set
|
||||
- 1149: [bug]: res_pjsip: Mismatch in tcp_keepalive_enable causes not to enable
|
||||
- 1164: [bug]: WARNING Message in messages.log for res_curl.conf [globals]
|
||||
|
||||
### Commits By Author:
|
||||
|
||||
- #### Allan Nathanson (1):
|
||||
- config.c: #include of non-existent file should not crash
|
||||
|
||||
- #### Ben Ford (1):
|
||||
- documentation: Update Gosub, Goto, and add new documentationtype.
|
||||
|
||||
- #### George Joseph (11):
|
||||
- docs: Add version information to ARI resources and methods.
|
||||
- docs: Add version information to AGI command XML elements.
|
||||
- func_strings.c: Prevent SEGV in HASH single-argument mode.
|
||||
- resource_channels.c: Fix memory leak in ast_ari_channels_external_media.
|
||||
- res_stir_shaken: Allow missing or anonymous CID to continue to the dialplan.
|
||||
- res_config_pgsql: Fix regression that removed dbname config.
|
||||
- bridging: Fix multiple bridging issues causing SEGVs and FRACKs.
|
||||
- swagger_model.py: Fix invalid escape sequence in get_list_parameter_type().
|
||||
- manager.c: Check for restricted file in action_createconfig.
|
||||
- README.md: Updates and Fixes
|
||||
- res_pjsip_outbound_registration.c: Remove xpointer reference to user_agent.
|
||||
|
||||
- #### Holger Hans Peter Freyther (1):
|
||||
- ari/pjsip: Make it possible to control transfers through ARI
|
||||
|
||||
- #### Jeremy Lainé (1):
|
||||
- docs: Fix minor typo in MixMonitor AMI action
|
||||
|
||||
- #### Joshua Elson (1):
|
||||
- fix: Correct default flag for tcp_keepalive_enable option
|
||||
|
||||
- #### Luz Paz (3):
|
||||
- docs: Fix various typos in main/ Found via `codespell -q 3 -S "./CREDITS" -L a..
|
||||
- docs: Fix various typos in channels/ Found via `codespell -q 3 -S "./CREDITS,*..
|
||||
- docs: Fix typos in cdr/ Found via codespell
|
||||
|
||||
- #### Maximilian Fridrich (1):
|
||||
- Revert "res_rtp_asterisk.c: Set Mark on rtp when timestamp skew is too big"
|
||||
|
||||
- #### Mike Bradeen (1):
|
||||
- bridge_channel: don't set cause code on channel during bridge delete if alread..
|
||||
|
||||
- #### Naveen Albert (1):
|
||||
- utils: Disable old style definition warnings for libdb.
|
||||
|
||||
- #### Sean Bright (6):
|
||||
- docs: Indent <since> tags.
|
||||
- channel.c: Remove dead AST_GENERATOR_FD code.
|
||||
- res_rtp_asterisk.c: Use correct timeout value for T.140 RED timer.
|
||||
- docs: AMI documentation fixes.
|
||||
- res_rtp_asterisk.c: Don't truncate spec-compliant `ice-ufrag` or `ice-pwd`.
|
||||
- res_config_curl.c: Remove unnecessary warnings.
|
||||
|
||||
- #### fabriziopicconi (1):
|
||||
- rtp.conf.sample: Correct stunaddr example.
|
||||
|
||||
|
||||
### Commit List:
|
||||
|
||||
- documentation: Update Gosub, Goto, and add new documentationtype.
|
||||
- res_config_curl.c: Remove unnecessary warnings.
|
||||
- res_pjsip_outbound_registration.c: Remove xpointer reference to user_agent.
|
||||
- README.md: Updates and Fixes
|
||||
- res_rtp_asterisk.c: Don't truncate spec-compliant `ice-ufrag` or `ice-pwd`.
|
||||
- fix: Correct default flag for tcp_keepalive_enable option
|
||||
- docs: AMI documentation fixes.
|
||||
- config.c: #include of non-existent file should not crash
|
||||
- manager.c: Check for restricted file in action_createconfig.
|
||||
- swagger_model.py: Fix invalid escape sequence in get_list_parameter_type().
|
||||
- Revert "res_rtp_asterisk.c: Set Mark on rtp when timestamp skew is too big"
|
||||
- res_rtp_asterisk.c: Use correct timeout value for T.140 RED timer.
|
||||
- docs: Fix typos in cdr/ Found via codespell
|
||||
- bridging: Fix multiple bridging issues causing SEGVs and FRACKs.
|
||||
- res_config_pgsql: Fix regression that removed dbname config.
|
||||
- res_stir_shaken: Allow missing or anonymous CID to continue to the dialplan.
|
||||
- resource_channels.c: Fix memory leak in ast_ari_channels_external_media.
|
||||
- ari/pjsip: Make it possible to control transfers through ARI
|
||||
- channel.c: Remove dead AST_GENERATOR_FD code.
|
||||
- func_strings.c: Prevent SEGV in HASH single-argument mode.
|
||||
- docs: Add version information to AGI command XML elements.
|
||||
- docs: Fix minor typo in MixMonitor AMI action
|
||||
- utils: Disable old style definition warnings for libdb.
|
||||
- rtp.conf.sample: Correct stunaddr example.
|
||||
- docs: Add version information to ARI resources and methods.
|
||||
- docs: Indent <since> tags.
|
||||
|
||||
### Commit Details:
|
||||
|
||||
#### documentation: Update Gosub, Goto, and add new documentationtype.
|
||||
Author: Ben Ford
|
||||
Date: 2025-03-14
|
||||
|
||||
Gosub and Goto were not displaying their syntax correctly on the docs
|
||||
site. This change adds a new way to specify an optional context, an
|
||||
optional extension, and a required priority that the xml stylesheet can
|
||||
parse without having to know which optional parameters come in which
|
||||
order. In Asterisk, it looks like this:
|
||||
|
||||
parameter name="context" documentationtype="dialplan_context"
|
||||
parameter name="extension" documentationtype="dialplan_extension"
|
||||
parameter name="priority" documentationtype="dialplan_priority" required="true"
|
||||
|
||||
The stylesheet will ignore the context and extension parameters, but for
|
||||
priority, it will automatically inject the following:
|
||||
|
||||
[[context,]extension,]priority
|
||||
|
||||
This is the correct oder for applications such as Gosub and Goto.
|
||||
|
||||
|
||||
#### res_config_curl.c: Remove unnecessary warnings.
|
||||
Author: Sean Bright
|
||||
Date: 2025-03-17
|
||||
|
||||
Resolves: #1164
|
||||
|
||||
#### res_pjsip_outbound_registration.c: Remove xpointer reference to user_agent.
|
||||
Author: George Joseph
|
||||
Date: 2025-03-14
|
||||
|
||||
Commit e86f937e added AMI documentation to the module but the cherry-pick
|
||||
from master to the 20 branch pulled in an xpointer reference to the
|
||||
`user_agent` config option which doesn't actually exist in 20. This causes
|
||||
asterisk to fail to start because it can't load the core-en_US.xml
|
||||
documentation file. The CI cherry-pick tests should have caught this but
|
||||
there was bug in the cherry-picker that was causing the commits to be
|
||||
cherry-picked to the wrong branch. Just removing the xpointer reference
|
||||
resolves the issue.
|
||||
|
||||
|
||||
#### README.md: Updates and Fixes
|
||||
Author: George Joseph
|
||||
Date: 2025-03-05
|
||||
|
||||
* Outdated information has been removed.
|
||||
* New links added.
|
||||
* Placeholder added for link to change logs.
|
||||
|
||||
Going forward, the release process will create HTML versions of the README
|
||||
and change log and will update the link in the README to the current
|
||||
change log for the branch...
|
||||
|
||||
* In the development branches, the link will always point to the current
|
||||
release on GitHub.
|
||||
* In the "releases/*" branches and the tarballs, the link will point to the
|
||||
ChangeLogs/ChangeLog-<version>.html file in the source directory.
|
||||
* On the downloads website, the link will point to the
|
||||
ChangeLog-<version>.html file in the same directory.
|
||||
|
||||
Resolves: #1131
|
||||
|
||||
#### res_rtp_asterisk.c: Don't truncate spec-compliant `ice-ufrag` or `ice-pwd`.
|
||||
Author: Sean Bright
|
||||
Date: 2025-03-07
|
||||
|
||||
RFC 8839[1] indicates that the `ice-ufrag` and `ice-pwd` attributes
|
||||
can be up to 256 bytes long. While we don't generate values of that
|
||||
size, we should be able to accomodate them without truncating.
|
||||
|
||||
1. https://www.rfc-editor.org/rfc/rfc8839#name-ice-ufrag-and-ice-pwd-attri
|
||||
|
||||
|
||||
#### fix: Correct default flag for tcp_keepalive_enable option
|
||||
Author: Joshua Elson
|
||||
Date: 2025-03-06
|
||||
|
||||
Resolves an issue where the tcp_keepalive_enable option was not properly enabled in the sample configuration due to an incorrect default flag setting.
|
||||
|
||||
Fixes: #1149
|
||||
|
||||
#### docs: AMI documentation fixes.
|
||||
Author: Sean Bright
|
||||
Date: 2025-02-18
|
||||
|
||||
Most of this patch is adding missing PJSIP-related event
|
||||
documentation, but the one functional change was adding a sorcery
|
||||
to-string handler for endpoint's `redirect_method` which was not
|
||||
showing up in the AMI event details or `pjsip show endpoint
|
||||
<endpoint>` output.
|
||||
|
||||
The rest of the changes are summarized below:
|
||||
|
||||
* app_agent_pool.c: Typo fix Epoche -> Epoch.
|
||||
* stasis_bridges.c: Add missing AttendedTransfer properties.
|
||||
* stasis_channels.c: Add missing AgentLogoff properties.
|
||||
* pjsip_manager.xml:
|
||||
- Add missing AorList properties.
|
||||
- Add missing AorDetail properties.
|
||||
- Add missing ContactList properties.
|
||||
- Add missing ContactStatusDetail properties.
|
||||
- Add missing EventDetail properties.
|
||||
- Add missing AuthList properties.
|
||||
- Add missing AuthDetail properties.
|
||||
- Add missing TransportDetail properties.
|
||||
- Add missing EndpointList properties.
|
||||
- Add missing IdentifyDetail properties.
|
||||
* res_pjsip_registrar.c: Add missing InboundRegistrationDetail documentation.
|
||||
* res_pjsip_pubsub.c:
|
||||
- Add missing ResourceListDetail documentation.
|
||||
- Add missing InboundSubscriptionDetail documentation.
|
||||
- Add missing OutboundSubscriptionDetail documentation.
|
||||
* res_pjsip_outbound_registration.c: Add missing OutboundRegistrationDetail documentation.
|
||||
|
||||
|
||||
#### config.c: #include of non-existent file should not crash
|
||||
Author: Allan Nathanson
|
||||
Date: 2025-03-03
|
||||
|
||||
Corrects a segmentation fault when a configuration file has a #include
|
||||
statement that referenced a file that does not exist.
|
||||
|
||||
Resolves: https://github.com/asterisk/asterisk/issues/1139
|
||||
|
||||
#### manager.c: Check for restricted file in action_createconfig.
|
||||
Author: George Joseph
|
||||
Date: 2025-03-03
|
||||
|
||||
The `CreateConfig` manager action now ensures that a config file can
|
||||
only be created in the AST_CONFIG_DIR unless `live_dangerously` is set.
|
||||
|
||||
Resolves: #1122
|
||||
|
||||
#### swagger_model.py: Fix invalid escape sequence in get_list_parameter_type().
|
||||
Author: George Joseph
|
||||
Date: 2025-03-04
|
||||
|
||||
Recent python versions complain when backslashes in strings create invalid
|
||||
escape sequences. This causes issues for strings used as regex patterns like
|
||||
`'^List\[(.*)\]$'` where you want the regex parser to treat `[` and `]`
|
||||
as literals. Double-backslashing is one way to fix it but simply converting
|
||||
the string to a raw string `re.match(r'^List\[(.*)\]$', text)` is easier
|
||||
and less error prone.
|
||||
|
||||
|
||||
#### Revert "res_rtp_asterisk.c: Set Mark on rtp when timestamp skew is too big"
|
||||
Author: Maximilian Fridrich
|
||||
Date: 2025-02-28
|
||||
|
||||
This reverts commit f30ad96b3f467739c38ff415e80bffc4afff1da7.
|
||||
|
||||
The original change was not RFC compliant and caused issues because it
|
||||
set the RTP marker bit in cases when it shouldn't be set. See the
|
||||
linked issue #1135 for a detailed explanation.
|
||||
|
||||
Fixes: #1135.
|
||||
|
||||
#### res_rtp_asterisk.c: Use correct timeout value for T.140 RED timer.
|
||||
Author: Sean Bright
|
||||
Date: 2025-02-24
|
||||
|
||||
Found while reviewing #1128
|
||||
|
||||
|
||||
#### docs: Fix typos in cdr/ Found via codespell
|
||||
Author: Luz Paz
|
||||
Date: 2025-02-12
|
||||
|
||||
|
||||
#### docs: Fix various typos in channels/ Found via `codespell -q 3 -S "./CREDITS,*..
|
||||
Author: Luz Paz
|
||||
Date: 2025-02-04
|
||||
|
||||
|
||||
#### docs: Fix various typos in main/ Found via `codespell -q 3 -S "./CREDITS" -L a..
|
||||
Author: Luz Paz
|
||||
Date: 2025-02-04
|
||||
|
||||
|
||||
#### bridging: Fix multiple bridging issues causing SEGVs and FRACKs.
|
||||
Author: George Joseph
|
||||
Date: 2025-01-22
|
||||
|
||||
Issues:
|
||||
|
||||
* The bridging core allowed multiple bridges to be created with the same
|
||||
unique bridgeId at the same time. Only the last bridge created with the
|
||||
duplicate name was actually saved to the core bridges container.
|
||||
|
||||
* The bridging core was creating a stasis topic for the bridge and saving it
|
||||
in the bridge->topic field but not increasing its reference count. In the
|
||||
case where two bridges were created with the same uniqueid (which is also
|
||||
the topic name), the second bridge would get the _existing_ topic the first
|
||||
bridge created. When the first bridge was destroyed, it would take the
|
||||
topic with it so when the second bridge attempted to publish a message to
|
||||
it it either FRACKed or SEGVd.
|
||||
|
||||
* The bridge destructor, which also destroys the bridge topic, is run from the
|
||||
bridge manager thread not the caller's thread. This makes it possible for
|
||||
an ARI developer to create a new one with the same uniqueid believing the
|
||||
old one was destroyed when, in fact, the old one's destructor hadn't
|
||||
completed. This could cause the new bridge to get the old one's topic just
|
||||
before the topic was destroyed. When the new bridge attempted to publish
|
||||
a message on that topic, asterisk could either FRACK or SEGV.
|
||||
|
||||
* The ARI bridges resource also allowed multiple bridges to be created with
|
||||
the same uniqueid but it kept the duplicate bridges in its app_bridges
|
||||
container. This created a situation where if you added two bridges with
|
||||
the same "bridge1" uniqueid, all operations on "bridge1" were performed on
|
||||
the first bridge created and the second was basically orphaned. If you
|
||||
attempted to delete what you thought was the second bridge, you actually
|
||||
deleted the first one created.
|
||||
|
||||
Changes:
|
||||
|
||||
* A new API `ast_bridge_topic_exists(uniqueid)` was created to determine if
|
||||
a topic already exists for a bridge.
|
||||
|
||||
* `bridge_base_init()` in bridge.c and `ast_ari_bridges_create()` in
|
||||
resource_bridges.c now call `ast_bridge_topic_exists(uniqueid)` to check
|
||||
if a bridge with the requested uniqueid already exists and will fail if it
|
||||
does.
|
||||
|
||||
* `bridge_register()` in bridges.c now checks the core bridges container to
|
||||
make sure a bridge doesn't already exist with the requested uniqueid.
|
||||
Although most callers of `bridge_register()` will have already called
|
||||
`bridge_base_init()`, which will now fail on duplicate bridges, there
|
||||
is no guarantee of this so we must check again.
|
||||
|
||||
* The core bridges container allocation was changed to reject duplicate
|
||||
uniqueids instead of silently replacing an existing one. This is a "belt
|
||||
and suspenders" check.
|
||||
|
||||
* A global mutex was added to bridge.c to prevent concurrent calls to
|
||||
`bridge_base_init()` and `bridge_register()`.
|
||||
|
||||
* Even though you can no longer create multiple bridges with the same uniqueid
|
||||
at the same time, it's still possible that the bridge topic might be
|
||||
destroyed while a second bridge with the same uniqueid was trying to use
|
||||
it. To address this, the bridging core now increments the reference count
|
||||
on bridge->topic when a bridge is created and decrements it when the
|
||||
bridge is destroyed.
|
||||
|
||||
* `bridge_create_common()` in res_stasis.c now checks the stasis app_bridges
|
||||
container to make sure a bridge with the requested uniqueid doesn't already
|
||||
exist. This may seem like overkill but there are so many entrypoints to
|
||||
bridge creation that we need to be safe and catch issues as soon in the
|
||||
process as possible.
|
||||
|
||||
* The stasis app_bridges container allocation was changed to reject duplicate
|
||||
uniqueids instead of adding them. This is a "belt and suspenders" check.
|
||||
|
||||
* The `bridge show all` CLI command now shows the bridge name as well as the
|
||||
bridge id.
|
||||
|
||||
* Response code 409 "Conflict" was added as a possible response from the ARI
|
||||
bridge create resources to signal that a bridge with the requested uniqueid
|
||||
already exists.
|
||||
|
||||
* Additional debugging was added to multiple bridging and stasis files.
|
||||
|
||||
Resolves: #211
|
||||
|
||||
#### bridge_channel: don't set cause code on channel during bridge delete if alread..
|
||||
Author: Mike Bradeen
|
||||
Date: 2025-02-18
|
||||
|
||||
Due to a potential race condition via ARI when hanging up a channel hangup with cause
|
||||
while also deleting a bridge containing that channel, the bridge delete can over-write
|
||||
the hangup cause code resulting in Normal Call Clearing instead of the set value.
|
||||
|
||||
With this change, bridge deletion will only set the hangup code if it hasn't been
|
||||
previously set.
|
||||
|
||||
Resolves: #1124
|
||||
|
||||
#### res_config_pgsql: Fix regression that removed dbname config.
|
||||
Author: George Joseph
|
||||
Date: 2025-02-11
|
||||
|
||||
A recent commit accidentally removed the code that sets dbname.
|
||||
This commit adds it back in.
|
||||
|
||||
Resolves: #1119
|
||||
|
||||
#### res_stir_shaken: Allow missing or anonymous CID to continue to the dialplan.
|
||||
Author: George Joseph
|
||||
Date: 2025-02-05
|
||||
|
||||
The verification check for missing or anonymous callerid was happening before
|
||||
the endpoint's profile was retrieved which meant that the failure_action
|
||||
parameter wasn't available. Therefore, if verification was enabled and there
|
||||
was no callerid or it was "anonymous", the call was immediately terminated
|
||||
instead of giving the dialplan the ability to decide what to do with the call.
|
||||
|
||||
* The callerid check now happens after the verification context is created and
|
||||
the endpoint's stir_shaken_profile is available.
|
||||
|
||||
* The check now processes the callerid failure just as it does for other
|
||||
verification failures and respects the failure_action parameter. If set
|
||||
to "continue" or "continue_return_reason", `STIR_SHAKEN(0,verify_result)`
|
||||
in the dialplan will return "invalid_or_no_callerid".
|
||||
|
||||
* If the endpoint's failure_action is "reject_request", the call will be
|
||||
rejected with `433 "Anonymity Disallowed"`.
|
||||
|
||||
* If the endpoint's failure_action is "continue_return_reason", the call will
|
||||
continue but a `Reason: STIR; cause=433; text="Anonymity Disallowed"`
|
||||
header will be added to the next provisional or final response.
|
||||
|
||||
Resolves: #1112
|
||||
|
||||
#### resource_channels.c: Fix memory leak in ast_ari_channels_external_media.
|
||||
Author: George Joseph
|
||||
Date: 2025-02-04
|
||||
|
||||
Between ast_ari_channels_external_media(), external_media_rtp_udp(),
|
||||
and external_media_audiosocket_tcp(), the `variables` structure being passed
|
||||
around wasn't being cleaned up properly when there was a failure.
|
||||
|
||||
* In ast_ari_channels_external_media(), the `variables` structure is now
|
||||
defined with RAII_VAR to ensure it always gets cleaned up.
|
||||
|
||||
* The ast_variables_destroy() call was removed from external_media_rtp_udp().
|
||||
|
||||
* The ast_variables_destroy() call was removed from
|
||||
external_media_audiosocket_tcp(), its `endpoint` allocation was changed to
|
||||
to use ast_asprintf() as external_media_rtp_udp() does, and it now
|
||||
returns an error on failure.
|
||||
|
||||
* ast_ari_channels_external_media() now checks the new return code from
|
||||
external_media_audiosocket_tcp() and sets the appropriate error response.
|
||||
|
||||
Resolves: #1109
|
||||
|
||||
#### ari/pjsip: Make it possible to control transfers through ARI
|
||||
Author: Holger Hans Peter Freyther
|
||||
Date: 2024-06-15
|
||||
|
||||
Introduce a ChannelTransfer event and the ability to notify progress to
|
||||
ARI. Implement emitting this event from the PJSIP channel instead of
|
||||
handling the transfer in Asterisk when configured.
|
||||
|
||||
Introduce a dialplan function to the PJSIP channel to switch between the
|
||||
"core" and "ari-only" behavior.
|
||||
|
||||
UserNote: Call transfers on the PJSIP channel can now be controlled by
|
||||
ARI. This can be enabled by using the PJSIP_TRANSFER_HANDLING(ari-only)
|
||||
dialplan function.
|
||||
|
||||
|
||||
#### channel.c: Remove dead AST_GENERATOR_FD code.
|
||||
Author: Sean Bright
|
||||
Date: 2025-02-06
|
||||
|
||||
Nothing ever sets the `AST_GENERATOR_FD`, so this block of code will
|
||||
never execute. It also is the only place where the `generate` callback
|
||||
is called with the channel lock held which made it difficult to reason
|
||||
about the thread safety of `ast_generator`s.
|
||||
|
||||
In passing, also note that `AST_AGENT_FD` isn't used either.
|
||||
|
||||
|
||||
#### func_strings.c: Prevent SEGV in HASH single-argument mode.
|
||||
Author: George Joseph
|
||||
Date: 2025-01-30
|
||||
|
||||
When in single-argument mode (very rarely used), a malformation of a column
|
||||
name (also very rare) could cause a NULL to be returned when retrieving the
|
||||
channel variable for that column. Passing that to strncat causes a SEGV. We
|
||||
now check for the NULL and print a warning message.
|
||||
|
||||
Resolves: #1101
|
||||
|
||||
#### docs: Add version information to AGI command XML elements.
|
||||
Author: George Joseph
|
||||
Date: 2025-01-24
|
||||
|
||||
This process was a bit different than the others because everything
|
||||
is in the same file, there's an array that contains the command
|
||||
names and their handler functions, and the last command was created
|
||||
over 15 years ago.
|
||||
|
||||
* Dump a `git blame` of res/res_agi.c from BEFORE the handle_* prototypes
|
||||
were changed.
|
||||
* Create a command <> handler function xref by parsing the the agi_command
|
||||
array.
|
||||
* For each entry, grep the function definition line "static int handle_*"
|
||||
from the git blame output and capture the commit. This will be the
|
||||
commit the command was created in.
|
||||
* Do a `git tag --contains <commit> | sort -V | head -1` to get the
|
||||
tag the function was created in.
|
||||
* Add a single since/version element to the command XML. Multiple versions
|
||||
aren't supported here because the branching and tagging scheme changed
|
||||
several times in the 2000's.
|
||||
|
||||
|
||||
#### docs: Fix minor typo in MixMonitor AMI action
|
||||
Author: Jeremy Lainé
|
||||
Date: 2025-01-28
|
||||
|
||||
The `Options` argument was erroneously documented as lowercase
|
||||
`options`.
|
||||
|
||||
|
||||
#### utils: Disable old style definition warnings for libdb.
|
||||
Author: Naveen Albert
|
||||
Date: 2025-01-23
|
||||
|
||||
Newer versions of gcc now warn about old style definitions, such
|
||||
as those in libdb, which causes compilation failure with DEVMODE
|
||||
enabled. Ignore these warnings for libdb.
|
||||
|
||||
Resolves: #1085
|
||||
|
||||
#### rtp.conf.sample: Correct stunaddr example.
|
||||
Author: fabriziopicconi
|
||||
Date: 2024-09-25
|
||||
|
||||
|
||||
#### docs: Add version information to ARI resources and methods.
|
||||
Author: George Joseph
|
||||
Date: 2025-01-27
|
||||
|
||||
* Dump a git blame of each file in rest-api/api-docs.
|
||||
|
||||
* Get the commit for each "resourcePath" and "httpMethod" entry.
|
||||
|
||||
* Find the tags for each commit (same as other processes).
|
||||
|
||||
* Insert a "since" array after each "resourcePath" and "httpMethod" entry.
|
||||
|
||||
|
||||
#### docs: Indent <since> tags.
|
||||
Author: Sean Bright
|
||||
Date: 2025-01-23
|
||||
|
||||
Also updates the 'since' of applications/functions that existed before
|
||||
XML documentation was introduced (1.6.2.0).
|
||||
|
||||
|
||||
@@ -1,537 +0,0 @@
|
||||
<html><head><title>ChangeLog for asterisk-20.14.0</title></head><body>
|
||||
<h2>Change Log for Release asterisk-20.14.0</h2>
|
||||
<h3>Links:</h3>
|
||||
<ul>
|
||||
<li><a href="https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-20.14.0.html">Full ChangeLog</a> </li>
|
||||
<li><a href="https://github.com/asterisk/asterisk/compare/20.13.0...20.14.0">GitHub Diff</a> </li>
|
||||
<li><a href="https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20.14.0.tar.gz">Tarball</a> </li>
|
||||
<li><a href="https://downloads.asterisk.org/pub/telephony/asterisk">Downloads</a> </li>
|
||||
</ul>
|
||||
<h3>Summary:</h3>
|
||||
<ul>
|
||||
<li>Commits: 24</li>
|
||||
<li>Commit Authors: 18</li>
|
||||
<li>Issues Resolved: 12</li>
|
||||
<li>Security Advisories Resolved: 0</li>
|
||||
</ul>
|
||||
<h3>User Notes:</h3>
|
||||
<ul>
|
||||
<li>
|
||||
<h4>stasis/control.c: Set Hangup Cause to No Answer on Dial timeout</h4>
|
||||
<p>A Dial timeout on POST /channels/{channelId}/dial will now result in a
|
||||
CANCEL and ChannelDestroyed with cause 19 / User alerting, no answer. Previously
|
||||
no explicit cause was set, resulting in a cause of 16 / Normal Call Clearing.</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>contrib: Add systemd service and timer files for malloc trim.</h4>
|
||||
<p>Service and timer files for systemd have been added to the
|
||||
contrib/systemd/ directory. If you are experiencing memory issues,
|
||||
install these files to have "malloc trim" periodically run on the
|
||||
system.</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Add log-caller-id-name option to log Caller ID Name in queue log</h4>
|
||||
<p>This patch adds a global configuration option, log-caller-id-name, to queues.conf
|
||||
to control whether the Caller ID name is logged as parameter 4 when a call enters a queue.
|
||||
When log-caller-id-name=yes, the Caller ID name is included in the queue log,
|
||||
Any '|' characters in the caller ID name will be replaced with '_'.
|
||||
(provided it’s allowed by the existing log_restricted_caller_id rules).
|
||||
When log-caller-id-name=no (the default), the Caller ID name is omitted.</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>asterisk.c: Add "pre-init" and "pre-module" capability to cli.conf.</h4>
|
||||
<p>In cli.conf, you can now define startup commands that run before
|
||||
core initialization and before module initialization.</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>audiosocket: added support for DTMF frames</h4>
|
||||
<p>The AudioSocket protocol now forwards DTMF frames with
|
||||
payload type 0x03. The payload is a 1-byte ascii representing the DTMF
|
||||
digit (0-9,*,#...).</p>
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Upgrade Notes:</h3>
|
||||
<ul>
|
||||
<li>
|
||||
<h4>ARI: REST over Websocket</h4>
|
||||
This commit adds the ability to make ARI REST requests over the same
|
||||
websocket used to receive events.
|
||||
See https://docs.asterisk.org/Configuration/Interfaces/Asterisk-REST-Interface-ARI/ARI-REST-over-WebSocket/</li>
|
||||
</ul>
|
||||
<h3>Commit Authors:</h3>
|
||||
<ul>
|
||||
<li>Albrecht Oster: (1)</li>
|
||||
<li>Alexei Gradinari: (1)</li>
|
||||
<li>Allan Nathanson: (1)</li>
|
||||
<li>Andreas Wehrmann: (1)</li>
|
||||
<li>Ben Ford: (1)</li>
|
||||
<li>Florent CHAUVEAU: (1)</li>
|
||||
<li>George Joseph: (4)</li>
|
||||
<li>Joshua C. Colp: (1)</li>
|
||||
<li>Luz Paz: (1)</li>
|
||||
<li>Mark Murawski: (1)</li>
|
||||
<li>Mike Bradeen: (1)</li>
|
||||
<li>Mkmer: (1)</li>
|
||||
<li>Naveen Albert: (3)</li>
|
||||
<li>Norm Harrison: (2)</li>
|
||||
<li>Peter Jannesen: (1)</li>
|
||||
<li>Phoneben: (1)</li>
|
||||
<li>Sean Bright: (1)</li>
|
||||
<li>Zhai Liangliang: (1)</li>
|
||||
</ul>
|
||||
<h2>Issue and Commit Detail:</h2>
|
||||
<h3>Closed Issues:</h3>
|
||||
<ul>
|
||||
<li>505: [bug]: res_pjproject: ast_sockaddr_cmp() always fails on sockaddrs created by ast_sockaddr_from_pj_sockaddr()</li>
|
||||
<li>643: [new-feature]: pjsip show contact -- show all details same as AMI PJSIPShowContacts</li>
|
||||
<li>963: [bug]: missing hangup cause for ARI ChannelDestroyed when Dial times out</li>
|
||||
<li>1091: [improvement]: app queue :add to queue log callerid name</li>
|
||||
<li>1144: [bug]: action_redirect don't remove bridge_after_goto data</li>
|
||||
<li>1171: [improvement]: Need the capability in audiohook.c for fractional (float) type volume adjustments.</li>
|
||||
<li>1181: [bug]: Incorrect PJSIP Endpoint Device States on Multiple Channels</li>
|
||||
<li>1190: [bug]: Crash when starting ConfBridge recording over CLI and AMI</li>
|
||||
<li>1197: [bug]: ChannelHangupRequest does not show cause code in all cases</li>
|
||||
<li>1206: [improvement]: chan_iax2: Minor improvements to documentation and warning messages.</li>
|
||||
<li>1220: [bug]: res_pjsip_caller_id: OLI is not parsed if contained in a URI parameter</li>
|
||||
<li>1224: [improvement]: app_meetme: Removal version is incorrect</li>
|
||||
</ul>
|
||||
<h3>Commits By Author:</h3>
|
||||
<ul>
|
||||
<li>
|
||||
<h4>Albrecht Oster (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<p>res_pjproject: Fix DTLS client check failing on some platforms</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Alexei Gradinari (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<p>chan_pjsip: set correct Endpoint Device State on multiple channels</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Allan Nathanson (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<p>file.c: missing "custom" sound files should not generate warning logs</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Andreas Wehrmann (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<p>pbx_ael: unregister AELSub application and CLI commands on module load failure</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Ben Ford (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<p>contrib: Add systemd service and timer files for malloc trim.</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Florent CHAUVEAU (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<p>audiosocket: added support for DTMF frames</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>George Joseph (4):</h4>
|
||||
</li>
|
||||
<li>ARI: REST over Websocket</li>
|
||||
<li>ari_websockets: Fix frack if ARI config fails to load.</li>
|
||||
<li>asterisk.c: Add "pre-init" and "pre-module" capability to cli.conf.</li>
|
||||
<li>
|
||||
<p>Prequisites for ARI Outbound Websockets</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Joshua C. Colp (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<p>channel: Always provide cause code in ChannelHangupRequest.</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Luz Paz (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<p>docs: Fix typos in apps/</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Mark Murawski (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<p>chan_pjsip: Add the same details as PJSIPShowContacts to the CLI via 'pjsip s..</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Mike Bradeen (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<p>stasis/control.c: Set Hangup Cause to No Answer on Dial timeout</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Naveen Albert (3):</h4>
|
||||
</li>
|
||||
<li>chan_iax2: Minor improvements to documentation and warning messages.</li>
|
||||
<li>app_meetme: Remove inaccurate removal version from xmldocs.</li>
|
||||
<li>
|
||||
<p>res_pjsip_caller_id: Also parse URI parameters for ANI2.</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Norm Harrison (2):</h4>
|
||||
</li>
|
||||
<li>audiosocket: fix timeout, fix dialplan app exit, server address in logs</li>
|
||||
<li>
|
||||
<p>asterisk/channel.h: fix documentation for 'ast_waitfor_nandfds()'</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Peter Jannesen (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<p>action_redirect: remove after_bridge_goto_info</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Sean Bright (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<p>app_confbridge: Prevent crash when publishing channel-less event.</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Zhai Liangliang (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<p>Update config.guess and config.sub</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>mkmer (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<p>audiohook.c: Add ability to adjust volume with float</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>phoneben (1):</h4>
|
||||
</li>
|
||||
<li>Add log-caller-id-name option to log Caller ID Name in queue log</li>
|
||||
</ul>
|
||||
<h3>Commit List:</h3>
|
||||
<ul>
|
||||
<li>res_pjsip_caller_id: Also parse URI parameters for ANI2.</li>
|
||||
<li>app_meetme: Remove inaccurate removal version from xmldocs.</li>
|
||||
<li>docs: Fix typos in apps/</li>
|
||||
<li>stasis/control.c: Set Hangup Cause to No Answer on Dial timeout</li>
|
||||
<li>chan_iax2: Minor improvements to documentation and warning messages.</li>
|
||||
<li>pbx_ael: unregister AELSub application and CLI commands on module load failure</li>
|
||||
<li>res_pjproject: Fix DTLS client check failing on some platforms</li>
|
||||
<li>Prequisites for ARI Outbound Websockets</li>
|
||||
<li>contrib: Add systemd service and timer files for malloc trim.</li>
|
||||
<li>action_redirect: remove after_bridge_goto_info</li>
|
||||
<li>channel: Always provide cause code in ChannelHangupRequest.</li>
|
||||
<li>Add log-caller-id-name option to log Caller ID Name in queue log</li>
|
||||
<li>asterisk.c: Add "pre-init" and "pre-module" capability to cli.conf.</li>
|
||||
<li>app_confbridge: Prevent crash when publishing channel-less event.</li>
|
||||
<li>ari_websockets: Fix frack if ARI config fails to load.</li>
|
||||
<li>ARI: REST over Websocket</li>
|
||||
<li>audiohook.c: Add ability to adjust volume with float</li>
|
||||
<li>audiosocket: added support for DTMF frames</li>
|
||||
<li>asterisk/channel.h: fix documentation for 'ast_waitfor_nandfds()'</li>
|
||||
<li>audiosocket: fix timeout, fix dialplan app exit, server address in logs</li>
|
||||
<li>Update config.guess and config.sub</li>
|
||||
<li>chan_pjsip: set correct Endpoint Device State on multiple channels</li>
|
||||
<li>file.c: missing "custom" sound files should not generate warning logs</li>
|
||||
</ul>
|
||||
<h3>Commit Details:</h3>
|
||||
<h4>res_pjsip_caller_id: Also parse URI parameters for ANI2.</h4>
|
||||
<p>Author: Naveen Albert
|
||||
Date: 2025-04-26</p>
|
||||
<p>If the isup-oli was sent as a URI parameter, rather than a header
|
||||
parameter, it was not being parsed. Make sure we parse both if
|
||||
needed so the ANI2 is set regardless of which type of parameter
|
||||
the isup-oli is sent as.</p>
|
||||
<p>Resolves: #1220</p>
|
||||
<h4>app_meetme: Remove inaccurate removal version from xmldocs.</h4>
|
||||
<p>Author: Naveen Albert
|
||||
Date: 2025-04-26</p>
|
||||
<p>app_meetme is deprecated but wasn't removed as planned in 21,
|
||||
so remove the inaccurate removal version.</p>
|
||||
<p>Resolves: #1224</p>
|
||||
<h4>docs: Fix typos in apps/</h4>
|
||||
<p>Author: Luz Paz
|
||||
Date: 2025-04-09</p>
|
||||
<p>Found via codespell</p>
|
||||
<h4>stasis/control.c: Set Hangup Cause to No Answer on Dial timeout</h4>
|
||||
<p>Author: Mike Bradeen
|
||||
Date: 2025-04-17</p>
|
||||
<p>Other Dial operations (dial, app_dial) use Q.850 cause 19 when a dial timeout occurs,
|
||||
but the Dial command via ARI did not set an explicit reason. This resulted in a
|
||||
CANCEL with Normal Call Clearing and corresponding ChannelDestroyed.</p>
|
||||
<p>This change sets the hangup cause to AST_CAUSE_NO_ANSWER to be consistent with the
|
||||
other operations.</p>
|
||||
<p>Fixes: #963</p>
|
||||
<p>UserNote: A Dial timeout on POST /channels/{channelId}/dial will now result in a
|
||||
CANCEL and ChannelDestroyed with cause 19 / User alerting, no answer. Previously
|
||||
no explicit cause was set, resulting in a cause of 16 / Normal Call Clearing.</p>
|
||||
<h4>chan_iax2: Minor improvements to documentation and warning messages.</h4>
|
||||
<p>Author: Naveen Albert
|
||||
Date: 2025-04-18</p>
|
||||
<ul>
|
||||
<li>Update Dial() documentation for IAX2 to include syntax for RSA
|
||||
public key names.</li>
|
||||
<li>Add additional details to a couple warnings to provide more context
|
||||
when an undecodable frame is received.</li>
|
||||
</ul>
|
||||
<p>Resolves: #1206</p>
|
||||
<h4>pbx_ael: unregister AELSub application and CLI commands on module load failure</h4>
|
||||
<p>Author: Andreas Wehrmann
|
||||
Date: 2025-04-18</p>
|
||||
<p>This fixes crashes/hangs I noticed with Asterisk 20.3.0 and 20.13.0 and quickly found out,
|
||||
that the AEL module doesn't do proper cleanup when it fails to load.
|
||||
This happens for example when there are syntax errors and AEL fails to compile in which case pbx_load_module()
|
||||
returns an error but load_module() doesn't then unregister CLI cmds and the application.</p>
|
||||
<h4>res_pjproject: Fix DTLS client check failing on some platforms</h4>
|
||||
<p>Author: Albrecht Oster
|
||||
Date: 2025-04-10</p>
|
||||
<p>Certain platforms (mainly BSD derivatives) have an additional length
|
||||
field in <code>sockaddr_in6</code> and <code>sockaddr_in</code>.
|
||||
<code>ast_sockaddr_from_pj_sockaddr()</code> does not take this field into account
|
||||
when copying over values from the <code>pj_sockaddr</code> into the <code>ast_sockaddr</code>.
|
||||
The resulting <code>ast_sockaddr</code> will have an uninitialized value for
|
||||
<code>sin6_len</code>/<code>sin_len</code> while the other <code>ast_sockaddr</code> (not converted from
|
||||
a <code>pj_sockaddr</code>) to check against in <code>ast_sockaddr_pj_sockaddr_cmp()</code>
|
||||
has the correct length value set.</p>
|
||||
<p>This has the effect that <code>ast_sockaddr_cmp()</code> will always indicate
|
||||
an address mismatch, because it does a bitwise comparison, and all DTLS
|
||||
packets are dropped even if addresses and ports match.</p>
|
||||
<p><code>ast_sockaddr_from_pj_sockaddr()</code> now checks whether the length fields
|
||||
are available on the current platform and sets the values accordingly.</p>
|
||||
<p>Resolves: #505</p>
|
||||
<h4>Prequisites for ARI Outbound Websockets</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2025-04-16</p>
|
||||
<p>stasis:
|
||||
* Added stasis_app_is_registered().
|
||||
* Added stasis_app_control_mark_failed().
|
||||
* Added stasis_app_control_is_failed().
|
||||
* Fixed res_stasis_device_state so unsubscribe all works properly.
|
||||
* Modified stasis_app_unregister() to unsubscribe from all event sources.
|
||||
* Modified stasis_app_exec to return -1 if stasis_app_control_is_failed()
|
||||
returns true.</p>
|
||||
<p>http:
|
||||
* Added ast_http_create_basic_auth_header().</p>
|
||||
<p>md5:
|
||||
* Added define for MD5_DIGEST_LENGTH.</p>
|
||||
<p>tcptls:
|
||||
* Added flag to ast_tcptls_session_args to suppress connection log messages
|
||||
to give callers more control over logging.</p>
|
||||
<p>http_websocket:
|
||||
* Add flag to ast_websocket_client_options to suppress connection log messages
|
||||
to give callers more control over logging.
|
||||
* Added username and password to ast_websocket_client_options to support
|
||||
outbound basic authentication.
|
||||
* Added ast_websocket_result_to_str().</p>
|
||||
<h4>contrib: Add systemd service and timer files for malloc trim.</h4>
|
||||
<p>Author: Ben Ford
|
||||
Date: 2025-04-16</p>
|
||||
<p>Adds two files to the contrib/systemd/ directory that can be installed
|
||||
to periodically run "malloc trim" on Asterisk. These files do nothing
|
||||
unless they are explicitly moved to the correct location on the system.
|
||||
Users who are experiencing Asterisk memory issues can use this service
|
||||
to potentially help combat the problem. These files can also be
|
||||
configured to change the start time and interval. See systemd.timer(5)
|
||||
and systemd.time(7) for more information.</p>
|
||||
<p>UserNote: Service and timer files for systemd have been added to the
|
||||
contrib/systemd/ directory. If you are experiencing memory issues,
|
||||
install these files to have "malloc trim" periodically run on the
|
||||
system.</p>
|
||||
<h4>action_redirect: remove after_bridge_goto_info</h4>
|
||||
<p>Author: Peter Jannesen
|
||||
Date: 2025-03-13</p>
|
||||
<p>Under certain circumstances the context/extens/prio are stored in the
|
||||
after_bridge_goto_info. This info is used when the bridge is broken by
|
||||
for hangup of the other party. In the situation that the bridge is
|
||||
broken by an AMI Redirect this info is not used but also not removed.
|
||||
With the result that when the channel is put back in a bridge and the
|
||||
bridge is broken the execution continues at the wrong
|
||||
context/extens/prio.</p>
|
||||
<p>Resolves: #1144</p>
|
||||
<h4>channel: Always provide cause code in ChannelHangupRequest.</h4>
|
||||
<p>Author: Joshua C. Colp
|
||||
Date: 2025-04-16</p>
|
||||
<p>When queueing a channel to be hung up a cause code can be
|
||||
specified in one of two ways:</p>
|
||||
<ol>
|
||||
<li>
|
||||
<p>ast_queue_hangup_with_cause
|
||||
This function takes in a cause code and queues it as part
|
||||
of the hangup request, which ultimately results in it being
|
||||
set on the channel.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>ast_channel_hangupcause_set + ast_queue_hangup
|
||||
This combination sets the hangup cause on the channel before
|
||||
queueing the hangup instead of as part of that process.</p>
|
||||
</li>
|
||||
</ol>
|
||||
<p>In the #2 case the ChannelHangupRequest event would not contain
|
||||
the cause code. For consistency if a cause code has been set
|
||||
on the channel it will now be added to the event.</p>
|
||||
<p>Resolves: #1197</p>
|
||||
<h4>Add log-caller-id-name option to log Caller ID Name in queue log</h4>
|
||||
<p>Author: phoneben
|
||||
Date: 2025-02-28</p>
|
||||
<p>Add log-caller-id-name option to log Caller ID Name in queue log</p>
|
||||
<p>This patch introduces a new global configuration option, log-caller-id-name,
|
||||
to queues.conf to control whether the Caller ID name is logged when a call enters a queue.</p>
|
||||
<p>When log-caller-id-name=yes, the Caller ID name is logged
|
||||
as parameter 4 in the queue log, provided it’s allowed by the
|
||||
existing log_restricted_caller_id rules. If log-caller-id-name=no (the default),
|
||||
the Caller ID name is omitted from the logs.</p>
|
||||
<p>Fixes: #1091</p>
|
||||
<p>UserNote: This patch adds a global configuration option, log-caller-id-name, to queues.conf
|
||||
to control whether the Caller ID name is logged as parameter 4 when a call enters a queue.
|
||||
When log-caller-id-name=yes, the Caller ID name is included in the queue log,
|
||||
Any '|' characters in the caller ID name will be replaced with '_'.
|
||||
(provided it’s allowed by the existing log_restricted_caller_id rules).
|
||||
When log-caller-id-name=no (the default), the Caller ID name is omitted.</p>
|
||||
<h4>asterisk.c: Add "pre-init" and "pre-module" capability to cli.conf.</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2025-04-10</p>
|
||||
<p>Commands in the "[startup_commands]" section of cli.conf have historically run
|
||||
after all core and module initialization has been completed and just before
|
||||
"Asterisk Ready" is printed on the console. This meant that if you
|
||||
wanted to debug initialization of a specific module, your only option
|
||||
was to turn on debug for everything by setting "debug" in asterisk.conf.</p>
|
||||
<p>This commit introduces options to allow you to run CLI commands earlier in
|
||||
the asterisk startup process.</p>
|
||||
<p>A command with a value of "pre-init" will run just after logger initialization
|
||||
but before most core, and all module, initialization.</p>
|
||||
<p>A command with a value of "pre-module" will run just after all core
|
||||
initialization but before all module initialization.</p>
|
||||
<p>A command with a value of "fully-booted" (or "yes" for backwards
|
||||
compatibility) will run as they always have been...after all
|
||||
initialization and just before "Asterisk Ready" is printed on the console.</p>
|
||||
<p>This means you could do this...</p>
|
||||
<p><code>[startup_commands]
|
||||
core set debug 3 res_pjsip.so = pre-module
|
||||
core set debug 0 res_pjsip.so = fully-booted</code></p>
|
||||
<p>This would turn debugging on for res_pjsip.so to catch any module
|
||||
initialization debug messages then turn it off again after the module is
|
||||
loaded.</p>
|
||||
<p>UserNote: In cli.conf, you can now define startup commands that run before
|
||||
core initialization and before module initialization.</p>
|
||||
<h4>app_confbridge: Prevent crash when publishing channel-less event.</h4>
|
||||
<p>Author: Sean Bright
|
||||
Date: 2025-04-07</p>
|
||||
<p>Resolves: #1190</p>
|
||||
<h4>ari_websockets: Fix frack if ARI config fails to load.</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2025-04-02</p>
|
||||
<p>ari_ws_session_registry_dtor() wasn't checking that the container was valid
|
||||
before running ao2_callback on it to shutdown registered sessions.</p>
|
||||
<h4>ARI: REST over Websocket</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2025-03-12</p>
|
||||
<p>This commit adds the ability to make ARI REST requests over the same
|
||||
websocket used to receive events.</p>
|
||||
<p>For full details on how to use the new capability, visit...</p>
|
||||
<p>https://docs.asterisk.org/Configuration/Interfaces/Asterisk-REST-Interface-ARI/ARI-REST-over-WebSocket/</p>
|
||||
<p>Changes:</p>
|
||||
<ul>
|
||||
<li>Added utilities to http.c:<ul>
|
||||
<li>ast_get_http_method_from_string().</li>
|
||||
<li>ast_http_parse_post_form().</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Added utilities to json.c:<ul>
|
||||
<li>ast_json_nvp_array_to_ast_variables().</li>
|
||||
<li>ast_variables_to_json_nvp_array().</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Added definitions for new events to carry REST responses.</li>
|
||||
<li>Created res/ari/ari_websocket_requests.c to house the new request handlers.</li>
|
||||
<li>Moved non-event specific code out of res/ari/resource_events.c into
|
||||
res/ari/ari_websockets.c</li>
|
||||
<li>Refactored res/res_ari.c to move non-http code out of ast_ari_callback()
|
||||
(which is http specific) and into ast_ari_invoke() so it can be shared
|
||||
between both the http and websocket transports.</li>
|
||||
</ul>
|
||||
<p>UpgradeNote: This commit adds the ability to make ARI REST requests over the same
|
||||
websocket used to receive events.
|
||||
See https://docs.asterisk.org/Configuration/Interfaces/Asterisk-REST-Interface-ARI/ARI-REST-over-WebSocket/</p>
|
||||
<h4>audiohook.c: Add ability to adjust volume with float</h4>
|
||||
<p>Author: mkmer
|
||||
Date: 2025-03-18</p>
|
||||
<p>Add the capability to audiohook for float type volume adjustments. This allows for adjustments to volume smaller than 6dB. With INT adjustments, the first step is 2 which converts to ~6dB (or 1/2 volume / double volume depending on adjustment sign). 3dB is a typical adjustment level which can now be accommodated with an adjustment value of 1.41.</p>
|
||||
<p>This is accomplished by the following:
|
||||
Convert internal variables to type float.
|
||||
Always use ast_frame_adjust_volume_float() for adjustments.
|
||||
Cast int to float in original functions ast_audiohook_volume_set(), and ast_volume_adjust().
|
||||
Cast float to int in ast_audiohook_volume_get()
|
||||
Add functions ast_audiohook_volume_get_float, ast_audiohook_volume_set_float, and ast_audiohook_volume_adjust_float.</p>
|
||||
<p>This update maintains 100% backward compatibility.</p>
|
||||
<p>Resolves: #1171</p>
|
||||
<h4>audiosocket: added support for DTMF frames</h4>
|
||||
<p>Author: Florent CHAUVEAU
|
||||
Date: 2025-02-28</p>
|
||||
<p>Updated the AudioSocket protocol to allow sending DTMF frames.
|
||||
AST_FRAME_DTMF frames are now forwarded to the server, in addition to
|
||||
AST_FRAME_AUDIO frames. A new payload type AST_AUDIOSOCKET_KIND_DTMF
|
||||
with value 0x03 was added to the protocol. The payload is a 1-byte
|
||||
ascii representing the DTMF digit (0-9,*,#...).</p>
|
||||
<p>UserNote: The AudioSocket protocol now forwards DTMF frames with
|
||||
payload type 0x03. The payload is a 1-byte ascii representing the DTMF
|
||||
digit (0-9,*,#...).</p>
|
||||
<h4>asterisk/channel.h: fix documentation for 'ast_waitfor_nandfds()'</h4>
|
||||
<p>Author: Norm Harrison
|
||||
Date: 2023-04-03</p>
|
||||
<p>Co-authored-by: Florent CHAUVEAU <a href="mailto:florentch@pm.me">florentch@pm.me</a></p>
|
||||
<h4>audiosocket: fix timeout, fix dialplan app exit, server address in logs</h4>
|
||||
<p>Author: Norm Harrison
|
||||
Date: 2023-04-03</p>
|
||||
<ul>
|
||||
<li>Correct wait timeout logic in the dialplan application.</li>
|
||||
<li>Include server address in log messages for better traceability.</li>
|
||||
<li>Allow dialplan app to exit gracefully on hangup messages and socket closure.</li>
|
||||
<li>Optimize I/O by reducing redundant read()/write() operations.</li>
|
||||
</ul>
|
||||
<p>Co-authored-by: Florent CHAUVEAU <a href="mailto:florentch@pm.me">florentch@pm.me</a></p>
|
||||
<h4>chan_pjsip: Add the same details as PJSIPShowContacts to the CLI via 'pjsip s..</h4>
|
||||
<p>Author: Mark Murawski
|
||||
Date: 2025-03-23</p>
|
||||
<p>CLI 'pjsip show contact' does not show enough information.
|
||||
One must telnet to AMI or write a script to ask Asterisk for example what the User-Agent is on a Contact
|
||||
This feature adds the same details as PJSIPShowContacts to the CLI</p>
|
||||
<p>Resolves: #643</p>
|
||||
<h4>Update config.guess and config.sub</h4>
|
||||
<p>Author: Zhai Liangliang
|
||||
Date: 2025-03-26</p>
|
||||
<h4>chan_pjsip: set correct Endpoint Device State on multiple channels</h4>
|
||||
<p>Author: Alexei Gradinari
|
||||
Date: 2025-03-25</p>
|
||||
<ol>
|
||||
<li>
|
||||
<p>When one channel is placed on hold, the device state is set to ONHOLD
|
||||
without checking other channels states.
|
||||
In case of AST_CONTROL_HOLD set the device state as AST_DEVICE_UNKNOWN
|
||||
to calculate aggregate device state of all active channels.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The current implementation incorrectly classifies channels in use.
|
||||
The only channels that has the states: UP, RING and BUSY are considered as "in use".
|
||||
A channel should be considered "in use" if its state is anything other than
|
||||
DOWN or RESERVED.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Currently, if the number of channels "in use" is greater than device_state_busy_at,
|
||||
the system does not set the state to BUSY. Instead, it incorrectly assigns an aggregate
|
||||
device state.
|
||||
The endpoint device state should be BUSY if the number of channels "in use" is greater
|
||||
than or equal to device_state_busy_at.</p>
|
||||
</li>
|
||||
</ol>
|
||||
<p>Fixes: #1181</p>
|
||||
<h4>file.c: missing "custom" sound files should not generate warning logs</h4>
|
||||
<p>Author: Allan Nathanson
|
||||
Date: 2025-03-18</p>
|
||||
<p>With <code>sounds_search_custom_dir = yes</code> we first look to see if a sound file
|
||||
is present in the "custom" sound directory before looking in the standard
|
||||
sound directories. We should not be issuing a WARNING log message if a
|
||||
sound cannot be found in the "custom" directory.</p>
|
||||
<p>Resolves: https://github.com/asterisk/asterisk/issues/1170</p>
|
||||
</body></html>
|
||||
@@ -1,564 +0,0 @@
|
||||
|
||||
## Change Log for Release asterisk-20.14.0
|
||||
|
||||
### Links:
|
||||
|
||||
- [Full ChangeLog](https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-20.14.0.html)
|
||||
- [GitHub Diff](https://github.com/asterisk/asterisk/compare/20.13.0...20.14.0)
|
||||
- [Tarball](https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20.14.0.tar.gz)
|
||||
- [Downloads](https://downloads.asterisk.org/pub/telephony/asterisk)
|
||||
|
||||
### Summary:
|
||||
|
||||
- Commits: 24
|
||||
- Commit Authors: 18
|
||||
- Issues Resolved: 12
|
||||
- Security Advisories Resolved: 0
|
||||
|
||||
### User Notes:
|
||||
|
||||
- #### stasis/control.c: Set Hangup Cause to No Answer on Dial timeout
|
||||
A Dial timeout on POST /channels/{channelId}/dial will now result in a
|
||||
CANCEL and ChannelDestroyed with cause 19 / User alerting, no answer. Previously
|
||||
no explicit cause was set, resulting in a cause of 16 / Normal Call Clearing.
|
||||
|
||||
- #### contrib: Add systemd service and timer files for malloc trim.
|
||||
Service and timer files for systemd have been added to the
|
||||
contrib/systemd/ directory. If you are experiencing memory issues,
|
||||
install these files to have "malloc trim" periodically run on the
|
||||
system.
|
||||
|
||||
- #### Add log-caller-id-name option to log Caller ID Name in queue log
|
||||
This patch adds a global configuration option, log-caller-id-name, to queues.conf
|
||||
to control whether the Caller ID name is logged as parameter 4 when a call enters a queue.
|
||||
When log-caller-id-name=yes, the Caller ID name is included in the queue log,
|
||||
Any '|' characters in the caller ID name will be replaced with '_'.
|
||||
(provided it’s allowed by the existing log_restricted_caller_id rules).
|
||||
When log-caller-id-name=no (the default), the Caller ID name is omitted.
|
||||
|
||||
- #### asterisk.c: Add "pre-init" and "pre-module" capability to cli.conf.
|
||||
In cli.conf, you can now define startup commands that run before
|
||||
core initialization and before module initialization.
|
||||
|
||||
- #### audiosocket: added support for DTMF frames
|
||||
The AudioSocket protocol now forwards DTMF frames with
|
||||
payload type 0x03. The payload is a 1-byte ascii representing the DTMF
|
||||
digit (0-9,*,#...).
|
||||
|
||||
|
||||
### Upgrade Notes:
|
||||
|
||||
- #### ARI: REST over Websocket
|
||||
This commit adds the ability to make ARI REST requests over the same
|
||||
websocket used to receive events.
|
||||
See https://docs.asterisk.org/Configuration/Interfaces/Asterisk-REST-Interface-ARI/ARI-REST-over-WebSocket/
|
||||
|
||||
|
||||
### Commit Authors:
|
||||
|
||||
- Albrecht Oster: (1)
|
||||
- Alexei Gradinari: (1)
|
||||
- Allan Nathanson: (1)
|
||||
- Andreas Wehrmann: (1)
|
||||
- Ben Ford: (1)
|
||||
- Florent CHAUVEAU: (1)
|
||||
- George Joseph: (4)
|
||||
- Joshua C. Colp: (1)
|
||||
- Luz Paz: (1)
|
||||
- Mark Murawski: (1)
|
||||
- Mike Bradeen: (1)
|
||||
- Mkmer: (1)
|
||||
- Naveen Albert: (3)
|
||||
- Norm Harrison: (2)
|
||||
- Peter Jannesen: (1)
|
||||
- Phoneben: (1)
|
||||
- Sean Bright: (1)
|
||||
- Zhai Liangliang: (1)
|
||||
|
||||
## Issue and Commit Detail:
|
||||
|
||||
### Closed Issues:
|
||||
|
||||
- 505: [bug]: res_pjproject: ast_sockaddr_cmp() always fails on sockaddrs created by ast_sockaddr_from_pj_sockaddr()
|
||||
- 643: [new-feature]: pjsip show contact -- show all details same as AMI PJSIPShowContacts
|
||||
- 963: [bug]: missing hangup cause for ARI ChannelDestroyed when Dial times out
|
||||
- 1091: [improvement]: app queue :add to queue log callerid name
|
||||
- 1144: [bug]: action_redirect don't remove bridge_after_goto data
|
||||
- 1171: [improvement]: Need the capability in audiohook.c for fractional (float) type volume adjustments.
|
||||
- 1181: [bug]: Incorrect PJSIP Endpoint Device States on Multiple Channels
|
||||
- 1190: [bug]: Crash when starting ConfBridge recording over CLI and AMI
|
||||
- 1197: [bug]: ChannelHangupRequest does not show cause code in all cases
|
||||
- 1206: [improvement]: chan_iax2: Minor improvements to documentation and warning messages.
|
||||
- 1220: [bug]: res_pjsip_caller_id: OLI is not parsed if contained in a URI parameter
|
||||
- 1224: [improvement]: app_meetme: Removal version is incorrect
|
||||
|
||||
### Commits By Author:
|
||||
|
||||
- #### Albrecht Oster (1):
|
||||
- res_pjproject: Fix DTLS client check failing on some platforms
|
||||
|
||||
- #### Alexei Gradinari (1):
|
||||
- chan_pjsip: set correct Endpoint Device State on multiple channels
|
||||
|
||||
- #### Allan Nathanson (1):
|
||||
- file.c: missing "custom" sound files should not generate warning logs
|
||||
|
||||
- #### Andreas Wehrmann (1):
|
||||
- pbx_ael: unregister AELSub application and CLI commands on module load failure
|
||||
|
||||
- #### Ben Ford (1):
|
||||
- contrib: Add systemd service and timer files for malloc trim.
|
||||
|
||||
- #### Florent CHAUVEAU (1):
|
||||
- audiosocket: added support for DTMF frames
|
||||
|
||||
- #### George Joseph (4):
|
||||
- ARI: REST over Websocket
|
||||
- ari_websockets: Fix frack if ARI config fails to load.
|
||||
- asterisk.c: Add "pre-init" and "pre-module" capability to cli.conf.
|
||||
- Prequisites for ARI Outbound Websockets
|
||||
|
||||
- #### Joshua C. Colp (1):
|
||||
- channel: Always provide cause code in ChannelHangupRequest.
|
||||
|
||||
- #### Luz Paz (1):
|
||||
- docs: Fix typos in apps/
|
||||
|
||||
- #### Mark Murawski (1):
|
||||
- chan_pjsip: Add the same details as PJSIPShowContacts to the CLI via 'pjsip s..
|
||||
|
||||
- #### Mike Bradeen (1):
|
||||
- stasis/control.c: Set Hangup Cause to No Answer on Dial timeout
|
||||
|
||||
- #### Naveen Albert (3):
|
||||
- chan_iax2: Minor improvements to documentation and warning messages.
|
||||
- app_meetme: Remove inaccurate removal version from xmldocs.
|
||||
- res_pjsip_caller_id: Also parse URI parameters for ANI2.
|
||||
|
||||
- #### Norm Harrison (2):
|
||||
- audiosocket: fix timeout, fix dialplan app exit, server address in logs
|
||||
- asterisk/channel.h: fix documentation for 'ast_waitfor_nandfds()'
|
||||
|
||||
- #### Peter Jannesen (1):
|
||||
- action_redirect: remove after_bridge_goto_info
|
||||
|
||||
- #### Sean Bright (1):
|
||||
- app_confbridge: Prevent crash when publishing channel-less event.
|
||||
|
||||
- #### Zhai Liangliang (1):
|
||||
- Update config.guess and config.sub
|
||||
|
||||
- #### mkmer (1):
|
||||
- audiohook.c: Add ability to adjust volume with float
|
||||
|
||||
- #### phoneben (1):
|
||||
- Add log-caller-id-name option to log Caller ID Name in queue log
|
||||
|
||||
|
||||
### Commit List:
|
||||
|
||||
- res_pjsip_caller_id: Also parse URI parameters for ANI2.
|
||||
- app_meetme: Remove inaccurate removal version from xmldocs.
|
||||
- docs: Fix typos in apps/
|
||||
- stasis/control.c: Set Hangup Cause to No Answer on Dial timeout
|
||||
- chan_iax2: Minor improvements to documentation and warning messages.
|
||||
- pbx_ael: unregister AELSub application and CLI commands on module load failure
|
||||
- res_pjproject: Fix DTLS client check failing on some platforms
|
||||
- Prequisites for ARI Outbound Websockets
|
||||
- contrib: Add systemd service and timer files for malloc trim.
|
||||
- action_redirect: remove after_bridge_goto_info
|
||||
- channel: Always provide cause code in ChannelHangupRequest.
|
||||
- Add log-caller-id-name option to log Caller ID Name in queue log
|
||||
- asterisk.c: Add "pre-init" and "pre-module" capability to cli.conf.
|
||||
- app_confbridge: Prevent crash when publishing channel-less event.
|
||||
- ari_websockets: Fix frack if ARI config fails to load.
|
||||
- ARI: REST over Websocket
|
||||
- audiohook.c: Add ability to adjust volume with float
|
||||
- audiosocket: added support for DTMF frames
|
||||
- asterisk/channel.h: fix documentation for 'ast_waitfor_nandfds()'
|
||||
- audiosocket: fix timeout, fix dialplan app exit, server address in logs
|
||||
- Update config.guess and config.sub
|
||||
- chan_pjsip: set correct Endpoint Device State on multiple channels
|
||||
- file.c: missing "custom" sound files should not generate warning logs
|
||||
|
||||
### Commit Details:
|
||||
|
||||
#### res_pjsip_caller_id: Also parse URI parameters for ANI2.
|
||||
Author: Naveen Albert
|
||||
Date: 2025-04-26
|
||||
|
||||
If the isup-oli was sent as a URI parameter, rather than a header
|
||||
parameter, it was not being parsed. Make sure we parse both if
|
||||
needed so the ANI2 is set regardless of which type of parameter
|
||||
the isup-oli is sent as.
|
||||
|
||||
Resolves: #1220
|
||||
|
||||
#### app_meetme: Remove inaccurate removal version from xmldocs.
|
||||
Author: Naveen Albert
|
||||
Date: 2025-04-26
|
||||
|
||||
app_meetme is deprecated but wasn't removed as planned in 21,
|
||||
so remove the inaccurate removal version.
|
||||
|
||||
Resolves: #1224
|
||||
|
||||
#### docs: Fix typos in apps/
|
||||
Author: Luz Paz
|
||||
Date: 2025-04-09
|
||||
|
||||
Found via codespell
|
||||
|
||||
|
||||
#### stasis/control.c: Set Hangup Cause to No Answer on Dial timeout
|
||||
Author: Mike Bradeen
|
||||
Date: 2025-04-17
|
||||
|
||||
Other Dial operations (dial, app_dial) use Q.850 cause 19 when a dial timeout occurs,
|
||||
but the Dial command via ARI did not set an explicit reason. This resulted in a
|
||||
CANCEL with Normal Call Clearing and corresponding ChannelDestroyed.
|
||||
|
||||
This change sets the hangup cause to AST_CAUSE_NO_ANSWER to be consistent with the
|
||||
other operations.
|
||||
|
||||
Fixes: #963
|
||||
|
||||
UserNote: A Dial timeout on POST /channels/{channelId}/dial will now result in a
|
||||
CANCEL and ChannelDestroyed with cause 19 / User alerting, no answer. Previously
|
||||
no explicit cause was set, resulting in a cause of 16 / Normal Call Clearing.
|
||||
|
||||
|
||||
#### chan_iax2: Minor improvements to documentation and warning messages.
|
||||
Author: Naveen Albert
|
||||
Date: 2025-04-18
|
||||
|
||||
* Update Dial() documentation for IAX2 to include syntax for RSA
|
||||
public key names.
|
||||
* Add additional details to a couple warnings to provide more context
|
||||
when an undecodable frame is received.
|
||||
|
||||
Resolves: #1206
|
||||
|
||||
#### pbx_ael: unregister AELSub application and CLI commands on module load failure
|
||||
Author: Andreas Wehrmann
|
||||
Date: 2025-04-18
|
||||
|
||||
This fixes crashes/hangs I noticed with Asterisk 20.3.0 and 20.13.0 and quickly found out,
|
||||
that the AEL module doesn't do proper cleanup when it fails to load.
|
||||
This happens for example when there are syntax errors and AEL fails to compile in which case pbx_load_module()
|
||||
returns an error but load_module() doesn't then unregister CLI cmds and the application.
|
||||
|
||||
|
||||
#### res_pjproject: Fix DTLS client check failing on some platforms
|
||||
Author: Albrecht Oster
|
||||
Date: 2025-04-10
|
||||
|
||||
Certain platforms (mainly BSD derivatives) have an additional length
|
||||
field in `sockaddr_in6` and `sockaddr_in`.
|
||||
`ast_sockaddr_from_pj_sockaddr()` does not take this field into account
|
||||
when copying over values from the `pj_sockaddr` into the `ast_sockaddr`.
|
||||
The resulting `ast_sockaddr` will have an uninitialized value for
|
||||
`sin6_len`/`sin_len` while the other `ast_sockaddr` (not converted from
|
||||
a `pj_sockaddr`) to check against in `ast_sockaddr_pj_sockaddr_cmp()`
|
||||
has the correct length value set.
|
||||
|
||||
This has the effect that `ast_sockaddr_cmp()` will always indicate
|
||||
an address mismatch, because it does a bitwise comparison, and all DTLS
|
||||
packets are dropped even if addresses and ports match.
|
||||
|
||||
`ast_sockaddr_from_pj_sockaddr()` now checks whether the length fields
|
||||
are available on the current platform and sets the values accordingly.
|
||||
|
||||
Resolves: #505
|
||||
|
||||
#### Prequisites for ARI Outbound Websockets
|
||||
Author: George Joseph
|
||||
Date: 2025-04-16
|
||||
|
||||
stasis:
|
||||
* Added stasis_app_is_registered().
|
||||
* Added stasis_app_control_mark_failed().
|
||||
* Added stasis_app_control_is_failed().
|
||||
* Fixed res_stasis_device_state so unsubscribe all works properly.
|
||||
* Modified stasis_app_unregister() to unsubscribe from all event sources.
|
||||
* Modified stasis_app_exec to return -1 if stasis_app_control_is_failed()
|
||||
returns true.
|
||||
|
||||
http:
|
||||
* Added ast_http_create_basic_auth_header().
|
||||
|
||||
md5:
|
||||
* Added define for MD5_DIGEST_LENGTH.
|
||||
|
||||
tcptls:
|
||||
* Added flag to ast_tcptls_session_args to suppress connection log messages
|
||||
to give callers more control over logging.
|
||||
|
||||
http_websocket:
|
||||
* Add flag to ast_websocket_client_options to suppress connection log messages
|
||||
to give callers more control over logging.
|
||||
* Added username and password to ast_websocket_client_options to support
|
||||
outbound basic authentication.
|
||||
* Added ast_websocket_result_to_str().
|
||||
|
||||
|
||||
#### contrib: Add systemd service and timer files for malloc trim.
|
||||
Author: Ben Ford
|
||||
Date: 2025-04-16
|
||||
|
||||
Adds two files to the contrib/systemd/ directory that can be installed
|
||||
to periodically run "malloc trim" on Asterisk. These files do nothing
|
||||
unless they are explicitly moved to the correct location on the system.
|
||||
Users who are experiencing Asterisk memory issues can use this service
|
||||
to potentially help combat the problem. These files can also be
|
||||
configured to change the start time and interval. See systemd.timer(5)
|
||||
and systemd.time(7) for more information.
|
||||
|
||||
UserNote: Service and timer files for systemd have been added to the
|
||||
contrib/systemd/ directory. If you are experiencing memory issues,
|
||||
install these files to have "malloc trim" periodically run on the
|
||||
system.
|
||||
|
||||
|
||||
#### action_redirect: remove after_bridge_goto_info
|
||||
Author: Peter Jannesen
|
||||
Date: 2025-03-13
|
||||
|
||||
Under certain circumstances the context/extens/prio are stored in the
|
||||
after_bridge_goto_info. This info is used when the bridge is broken by
|
||||
for hangup of the other party. In the situation that the bridge is
|
||||
broken by an AMI Redirect this info is not used but also not removed.
|
||||
With the result that when the channel is put back in a bridge and the
|
||||
bridge is broken the execution continues at the wrong
|
||||
context/extens/prio.
|
||||
|
||||
Resolves: #1144
|
||||
|
||||
#### channel: Always provide cause code in ChannelHangupRequest.
|
||||
Author: Joshua C. Colp
|
||||
Date: 2025-04-16
|
||||
|
||||
When queueing a channel to be hung up a cause code can be
|
||||
specified in one of two ways:
|
||||
|
||||
1. ast_queue_hangup_with_cause
|
||||
This function takes in a cause code and queues it as part
|
||||
of the hangup request, which ultimately results in it being
|
||||
set on the channel.
|
||||
|
||||
2. ast_channel_hangupcause_set + ast_queue_hangup
|
||||
This combination sets the hangup cause on the channel before
|
||||
queueing the hangup instead of as part of that process.
|
||||
|
||||
In the #2 case the ChannelHangupRequest event would not contain
|
||||
the cause code. For consistency if a cause code has been set
|
||||
on the channel it will now be added to the event.
|
||||
|
||||
Resolves: #1197
|
||||
|
||||
#### Add log-caller-id-name option to log Caller ID Name in queue log
|
||||
Author: phoneben
|
||||
Date: 2025-02-28
|
||||
|
||||
Add log-caller-id-name option to log Caller ID Name in queue log
|
||||
|
||||
This patch introduces a new global configuration option, log-caller-id-name,
|
||||
to queues.conf to control whether the Caller ID name is logged when a call enters a queue.
|
||||
|
||||
When log-caller-id-name=yes, the Caller ID name is logged
|
||||
as parameter 4 in the queue log, provided it’s allowed by the
|
||||
existing log_restricted_caller_id rules. If log-caller-id-name=no (the default),
|
||||
the Caller ID name is omitted from the logs.
|
||||
|
||||
Fixes: #1091
|
||||
|
||||
UserNote: This patch adds a global configuration option, log-caller-id-name, to queues.conf
|
||||
to control whether the Caller ID name is logged as parameter 4 when a call enters a queue.
|
||||
When log-caller-id-name=yes, the Caller ID name is included in the queue log,
|
||||
Any '|' characters in the caller ID name will be replaced with '_'.
|
||||
(provided it’s allowed by the existing log_restricted_caller_id rules).
|
||||
When log-caller-id-name=no (the default), the Caller ID name is omitted.
|
||||
|
||||
|
||||
#### asterisk.c: Add "pre-init" and "pre-module" capability to cli.conf.
|
||||
Author: George Joseph
|
||||
Date: 2025-04-10
|
||||
|
||||
Commands in the "[startup_commands]" section of cli.conf have historically run
|
||||
after all core and module initialization has been completed and just before
|
||||
"Asterisk Ready" is printed on the console. This meant that if you
|
||||
wanted to debug initialization of a specific module, your only option
|
||||
was to turn on debug for everything by setting "debug" in asterisk.conf.
|
||||
|
||||
This commit introduces options to allow you to run CLI commands earlier in
|
||||
the asterisk startup process.
|
||||
|
||||
A command with a value of "pre-init" will run just after logger initialization
|
||||
but before most core, and all module, initialization.
|
||||
|
||||
A command with a value of "pre-module" will run just after all core
|
||||
initialization but before all module initialization.
|
||||
|
||||
A command with a value of "fully-booted" (or "yes" for backwards
|
||||
compatibility) will run as they always have been...after all
|
||||
initialization and just before "Asterisk Ready" is printed on the console.
|
||||
|
||||
This means you could do this...
|
||||
|
||||
```
|
||||
[startup_commands]
|
||||
core set debug 3 res_pjsip.so = pre-module
|
||||
core set debug 0 res_pjsip.so = fully-booted
|
||||
```
|
||||
|
||||
This would turn debugging on for res_pjsip.so to catch any module
|
||||
initialization debug messages then turn it off again after the module is
|
||||
loaded.
|
||||
|
||||
UserNote: In cli.conf, you can now define startup commands that run before
|
||||
core initialization and before module initialization.
|
||||
|
||||
|
||||
#### app_confbridge: Prevent crash when publishing channel-less event.
|
||||
Author: Sean Bright
|
||||
Date: 2025-04-07
|
||||
|
||||
Resolves: #1190
|
||||
|
||||
#### ari_websockets: Fix frack if ARI config fails to load.
|
||||
Author: George Joseph
|
||||
Date: 2025-04-02
|
||||
|
||||
ari_ws_session_registry_dtor() wasn't checking that the container was valid
|
||||
before running ao2_callback on it to shutdown registered sessions.
|
||||
|
||||
|
||||
#### ARI: REST over Websocket
|
||||
Author: George Joseph
|
||||
Date: 2025-03-12
|
||||
|
||||
This commit adds the ability to make ARI REST requests over the same
|
||||
websocket used to receive events.
|
||||
|
||||
For full details on how to use the new capability, visit...
|
||||
|
||||
https://docs.asterisk.org/Configuration/Interfaces/Asterisk-REST-Interface-ARI/ARI-REST-over-WebSocket/
|
||||
|
||||
Changes:
|
||||
|
||||
* Added utilities to http.c:
|
||||
* ast_get_http_method_from_string().
|
||||
* ast_http_parse_post_form().
|
||||
* Added utilities to json.c:
|
||||
* ast_json_nvp_array_to_ast_variables().
|
||||
* ast_variables_to_json_nvp_array().
|
||||
* Added definitions for new events to carry REST responses.
|
||||
* Created res/ari/ari_websocket_requests.c to house the new request handlers.
|
||||
* Moved non-event specific code out of res/ari/resource_events.c into
|
||||
res/ari/ari_websockets.c
|
||||
* Refactored res/res_ari.c to move non-http code out of ast_ari_callback()
|
||||
(which is http specific) and into ast_ari_invoke() so it can be shared
|
||||
between both the http and websocket transports.
|
||||
|
||||
UpgradeNote: This commit adds the ability to make ARI REST requests over the same
|
||||
websocket used to receive events.
|
||||
See https://docs.asterisk.org/Configuration/Interfaces/Asterisk-REST-Interface-ARI/ARI-REST-over-WebSocket/
|
||||
|
||||
|
||||
#### audiohook.c: Add ability to adjust volume with float
|
||||
Author: mkmer
|
||||
Date: 2025-03-18
|
||||
|
||||
Add the capability to audiohook for float type volume adjustments. This allows for adjustments to volume smaller than 6dB. With INT adjustments, the first step is 2 which converts to ~6dB (or 1/2 volume / double volume depending on adjustment sign). 3dB is a typical adjustment level which can now be accommodated with an adjustment value of 1.41.
|
||||
|
||||
This is accomplished by the following:
|
||||
Convert internal variables to type float.
|
||||
Always use ast_frame_adjust_volume_float() for adjustments.
|
||||
Cast int to float in original functions ast_audiohook_volume_set(), and ast_volume_adjust().
|
||||
Cast float to int in ast_audiohook_volume_get()
|
||||
Add functions ast_audiohook_volume_get_float, ast_audiohook_volume_set_float, and ast_audiohook_volume_adjust_float.
|
||||
|
||||
This update maintains 100% backward compatibility.
|
||||
|
||||
Resolves: #1171
|
||||
|
||||
#### audiosocket: added support for DTMF frames
|
||||
Author: Florent CHAUVEAU
|
||||
Date: 2025-02-28
|
||||
|
||||
Updated the AudioSocket protocol to allow sending DTMF frames.
|
||||
AST_FRAME_DTMF frames are now forwarded to the server, in addition to
|
||||
AST_FRAME_AUDIO frames. A new payload type AST_AUDIOSOCKET_KIND_DTMF
|
||||
with value 0x03 was added to the protocol. The payload is a 1-byte
|
||||
ascii representing the DTMF digit (0-9,*,#...).
|
||||
|
||||
UserNote: The AudioSocket protocol now forwards DTMF frames with
|
||||
payload type 0x03. The payload is a 1-byte ascii representing the DTMF
|
||||
digit (0-9,*,#...).
|
||||
|
||||
|
||||
#### asterisk/channel.h: fix documentation for 'ast_waitfor_nandfds()'
|
||||
Author: Norm Harrison
|
||||
Date: 2023-04-03
|
||||
|
||||
Co-authored-by: Florent CHAUVEAU <florentch@pm.me>
|
||||
|
||||
#### audiosocket: fix timeout, fix dialplan app exit, server address in logs
|
||||
Author: Norm Harrison
|
||||
Date: 2023-04-03
|
||||
|
||||
- Correct wait timeout logic in the dialplan application.
|
||||
- Include server address in log messages for better traceability.
|
||||
- Allow dialplan app to exit gracefully on hangup messages and socket closure.
|
||||
- Optimize I/O by reducing redundant read()/write() operations.
|
||||
|
||||
Co-authored-by: Florent CHAUVEAU <florentch@pm.me>
|
||||
|
||||
#### chan_pjsip: Add the same details as PJSIPShowContacts to the CLI via 'pjsip s..
|
||||
Author: Mark Murawski
|
||||
Date: 2025-03-23
|
||||
|
||||
CLI 'pjsip show contact' does not show enough information.
|
||||
One must telnet to AMI or write a script to ask Asterisk for example what the User-Agent is on a Contact
|
||||
This feature adds the same details as PJSIPShowContacts to the CLI
|
||||
|
||||
Resolves: #643
|
||||
|
||||
#### Update config.guess and config.sub
|
||||
Author: Zhai Liangliang
|
||||
Date: 2025-03-26
|
||||
|
||||
|
||||
#### chan_pjsip: set correct Endpoint Device State on multiple channels
|
||||
Author: Alexei Gradinari
|
||||
Date: 2025-03-25
|
||||
|
||||
1. When one channel is placed on hold, the device state is set to ONHOLD
|
||||
without checking other channels states.
|
||||
In case of AST_CONTROL_HOLD set the device state as AST_DEVICE_UNKNOWN
|
||||
to calculate aggregate device state of all active channels.
|
||||
|
||||
2. The current implementation incorrectly classifies channels in use.
|
||||
The only channels that has the states: UP, RING and BUSY are considered as "in use".
|
||||
A channel should be considered "in use" if its state is anything other than
|
||||
DOWN or RESERVED.
|
||||
|
||||
3. Currently, if the number of channels "in use" is greater than device_state_busy_at,
|
||||
the system does not set the state to BUSY. Instead, it incorrectly assigns an aggregate
|
||||
device state.
|
||||
The endpoint device state should be BUSY if the number of channels "in use" is greater
|
||||
than or equal to device_state_busy_at.
|
||||
|
||||
Fixes: #1181
|
||||
|
||||
#### file.c: missing "custom" sound files should not generate warning logs
|
||||
Author: Allan Nathanson
|
||||
Date: 2025-03-18
|
||||
|
||||
With `sounds_search_custom_dir = yes` we first look to see if a sound file
|
||||
is present in the "custom" sound directory before looking in the standard
|
||||
sound directories. We should not be issuing a WARNING log message if a
|
||||
sound cannot be found in the "custom" directory.
|
||||
|
||||
Resolves: https://github.com/asterisk/asterisk/issues/1170
|
||||
|
||||
@@ -1,611 +0,0 @@
|
||||
<html><head><title>ChangeLog for asterisk-20.15.0</title></head><body>
|
||||
<h2>Change Log for Release asterisk-20.15.0</h2>
|
||||
<h3>Links:</h3>
|
||||
<ul>
|
||||
<li><a href="https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-20.15.0.html">Full ChangeLog</a> </li>
|
||||
<li><a href="https://github.com/asterisk/asterisk/compare/20.14.1...20.15.0">GitHub Diff</a> </li>
|
||||
<li><a href="https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20.15.0.tar.gz">Tarball</a> </li>
|
||||
<li><a href="https://downloads.asterisk.org/pub/telephony/asterisk">Downloads</a> </li>
|
||||
</ul>
|
||||
<h3>Summary:</h3>
|
||||
<ul>
|
||||
<li>Commits: 29</li>
|
||||
<li>Commit Authors: 14</li>
|
||||
<li>Issues Resolved: 19</li>
|
||||
<li>Security Advisories Resolved: 1</li>
|
||||
<li><a href="https://github.com/asterisk/asterisk/security/advisories/GHSA-c7p6-7mvq-8jq2">GHSA-c7p6-7mvq-8jq2</a>: cli_permissions.conf: deny option does not work for disallowing shell commands</li>
|
||||
</ul>
|
||||
<h3>User Notes:</h3>
|
||||
<ul>
|
||||
<li>
|
||||
<h4>res_stir_shaken.so: Handle X5U certificate chains.</h4>
|
||||
<p>The STIR/SHAKEN verification process will now load a full
|
||||
certificate chain retrieved via the X5U URL instead of loading only
|
||||
the end user cert.</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>res_stir_shaken: Add "ignore_sip_date_header" config option.</h4>
|
||||
<p>A new STIR/SHAKEN verification option "ignore_sip_date_header" has
|
||||
been added that when set to true, will cause the verification process to
|
||||
not consider a missing or invalid SIP "Date" header to be a failure. This
|
||||
will make the IAT the sole "truth" for Date in the verification process.
|
||||
The option can be set in the "verification" and "profile" sections of
|
||||
stir_shaken.conf.
|
||||
Also fixed a bug in the port match logic.
|
||||
Resolves: #1251
|
||||
Resolves: #1271</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>app_record: Add RECORDING_INFO function.</h4>
|
||||
<p>The RECORDING_INFO function can now be used
|
||||
to retrieve the duration of a recording.</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>app_queue: queue rules – Add support for QUEUE_RAISE_PENALTY=rN to raise penal..</h4>
|
||||
<p>This change introduces QUEUE_RAISE_PENALTY=rN, allowing selective penalty raises
|
||||
only for members whose current penalty is within the [min_penalty, max_penalty] range.
|
||||
Members with lower or higher penalties are unaffected.
|
||||
This behavior is backward-compatible with existing queue rule configurations.</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>res_odbc: cache_size option to limit the cached connections.</h4>
|
||||
<p>New cache_size option for res_odbc to on a per class basis limit the
|
||||
number of cached connections. Please reference the sample configuration
|
||||
for details.</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>res_odbc: cache_type option for res_odbc.</h4>
|
||||
<p>When using res_odbc it should be noted that back-end
|
||||
connections to the underlying database can now be configured to re-use
|
||||
the cached connections in a round-robin manner rather than repeatedly
|
||||
re-using the same connection. This helps to keep connections alive, and
|
||||
to purge dead connections from the system, thus more dynamically
|
||||
adjusting to actual load. The downside is that one could keep too many
|
||||
connections active for a longer time resulting in resource also begin
|
||||
consumed on the database side.</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>ARI Outbound Websockets</h4>
|
||||
<p>Asterisk can now establish websocket sessions <em>to</em> your ARI applications
|
||||
as well as accepting websocket sessions <em>from</em> them.
|
||||
Full details: http://s.asterisk.net/ari-outbound-ws</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>res_websocket_client: Create common utilities for websocket clients.</h4>
|
||||
<p>A new module "res_websocket_client" and config file
|
||||
"websocket_client.conf" have been added to support several upcoming new
|
||||
capabilities that need common websocket client configuration.</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>asterisk.c: Add option to restrict shell access from remote consoles.</h4>
|
||||
<p>A new asterisk.conf option 'disable_remote_console_shell' has
|
||||
been added that, when set, will prevent remote consoles from executing
|
||||
shell commands using the '!' prefix.
|
||||
Resolves: #GHSA-c7p6-7mvq-8jq2</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>sig_analog: Add Call Waiting Deluxe support.</h4>
|
||||
<p>Call Waiting Deluxe can now be enabled for FXS channels
|
||||
by enabling its corresponding option.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Upgrade Notes:</h3>
|
||||
<ul>
|
||||
<li>
|
||||
<h4>jansson: Upgrade version to jansson 2.14.1</h4>
|
||||
<p>jansson has been upgraded to 2.14.1. For more
|
||||
information visit jansson Github page: https://github.com/akheron/jansson/releases/tag/v2.14.1
|
||||
Resolves: #1178</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Alternate Channel Storage Backends</h4>
|
||||
<p>With this release, you can now select an alternate channel
|
||||
storage backend based on C++ Maps. Using the new backend may increase
|
||||
performance and reduce the chances of deadlocks on heavily loaded systems.
|
||||
For more information, see http://s.asterisk.net/dc679ec3</p>
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Commit Authors:</h3>
|
||||
<ul>
|
||||
<li>George Joseph: (10)</li>
|
||||
<li>Itzanh: (1)</li>
|
||||
<li>Jaco Kroon: (2)</li>
|
||||
<li>Joe Searle: (1)</li>
|
||||
<li>Michal Hajek: (1)</li>
|
||||
<li>Mike Bradeen: (2)</li>
|
||||
<li>Mkmer: (1)</li>
|
||||
<li>Nathan Monfils: (1)</li>
|
||||
<li>Naveen Albert: (3)</li>
|
||||
<li>Phoneben: (1)</li>
|
||||
<li>Sean Bright: (2)</li>
|
||||
<li>Stanislav Abramenkov: (1)</li>
|
||||
<li>Sven Kube: (2)</li>
|
||||
<li>Thomas B. Clark: (1)</li>
|
||||
</ul>
|
||||
<h2>Issue and Commit Detail:</h2>
|
||||
<h3>Closed Issues:</h3>
|
||||
<ul>
|
||||
<li>!GHSA-c7p6-7mvq-8jq2: cli_permissions.conf: deny option does not work for disallowing shell commands</li>
|
||||
<li>271: [new-feature]: sig_analog: Add Call Waiting Deluxe support.</li>
|
||||
<li>548: [improvement]: Get Record() audio duration/length</li>
|
||||
<li>1088: [bug]: app_sms: Compilation failure in DEVMODE due to stringop-overflow error in GCC 15 pre-release</li>
|
||||
<li>1141: [bug]: res_pjsip: Contact header set incorrectly for call redirect (302 Moved temp.) when external_* set</li>
|
||||
<li>1178: [improvement]: jansson: Upgrade version to jansson 2.14.1</li>
|
||||
<li>1230: [bug]: ast_frame_adjust_volume and ast_frame_adjust_volume_float crash on interpolated frames</li>
|
||||
<li>1234: [bug]: Set CalllerID lost on DTMF attended transfer</li>
|
||||
<li>1240: [bug]: WebRTC invites failing on Chrome 136</li>
|
||||
<li>1243: [bug]: make menuconfig fails due to changes in GTK callbacks</li>
|
||||
<li>1251: [improvement]: PJSIP shouldn't require SIP Date header to process full shaken passport which includes iat</li>
|
||||
<li>1254: [bug]: ActiveChannels not reported when using AMI command PJSIPShowEndpoint</li>
|
||||
<li>1271: [bug]: STIR/SHAKEN not accepting port 8443 in certificate URLs</li>
|
||||
<li>1272: [improvement]: STIR/SHAKEN handle X5U certificate chains</li>
|
||||
<li>1276: MixMonitor produces broken recordings in bridged calls with asymmetric codecs (e.g., alaw vs G.722)</li>
|
||||
<li>1279: [bug]: regression: 20.12.0 downgrades quality of wav16 recordings</li>
|
||||
<li>1282: [bug]: Alternate Channel Storage Backends menuselect not enabling it</li>
|
||||
<li>1287: [bug]: channelstorage.c: Compilation failure with DEBUG_FD_LEAKS</li>
|
||||
<li>1288: [bug]: Crash when destroying channel with C++ alternative storage backend enabled</li>
|
||||
<li>ASTERISK-30373: sig_analog: Add Call Waiting Deluxe options</li>
|
||||
</ul>
|
||||
<h3>Commits By Author:</h3>
|
||||
<ul>
|
||||
<li>
|
||||
<h4>George Joseph (10):</h4>
|
||||
</li>
|
||||
<li>Alternate Channel Storage Backends</li>
|
||||
<li>lock.h: Add include for string.h when DEBUG_THREADS is defined.</li>
|
||||
<li>asterisk.c: Add option to restrict shell access from remote consoles.</li>
|
||||
<li>res_websocket_client: Create common utilities for websocket clients.</li>
|
||||
<li>ARI Outbound Websockets</li>
|
||||
<li>res_websocket_client: Add more info to the XML documentation.</li>
|
||||
<li>res_stir_shaken: Add "ignore_sip_date_header" config option.</li>
|
||||
<li>res_stir_shaken.so: Handle X5U certificate chains.</li>
|
||||
<li>channelstorage_cpp_map_name_id: Fix callback returning non-matching channels.</li>
|
||||
<li>
|
||||
<p>channelstorage: Rename callbacks that conflict with DEBUG_FD_LEAKS.</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Itzanh (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<p>app_sms.c: Fix sending and receiving SMS messages in protocol 2</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Jaco Kroon (2):</h4>
|
||||
</li>
|
||||
<li>res_odbc: cache_type option for res_odbc.</li>
|
||||
<li>
|
||||
<p>res_odbc: cache_size option to limit the cached connections.</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Joe Searle (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<p>pjproject: Increase maximum SDP formats and attribute limits</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Michal Hajek (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<p>audiohook.c: Improve frame pairing logic to avoid MixMonitor breakage with mix..</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Mike Bradeen (2):</h4>
|
||||
</li>
|
||||
<li>chan_pjsip: Serialize INVITE creation on DTMF attended transfer</li>
|
||||
<li>
|
||||
<p>res_pjsip_nat.c: Do not overwrite transfer host</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Nathan Monfils (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<p>manager.c: Invalid ref-counting when purging events</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Naveen Albert (3):</h4>
|
||||
</li>
|
||||
<li>app_sms: Ignore false positive vectorization warning.</li>
|
||||
<li>sig_analog: Add Call Waiting Deluxe support.</li>
|
||||
<li>
|
||||
<p>app_record: Add RECORDING_INFO function.</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Sean Bright (2):</h4>
|
||||
</li>
|
||||
<li>res_pjsip: Fix empty <code>ActiveChannels</code> property in AMI responses.</li>
|
||||
<li>
|
||||
<p>channelstorage_makeopts.xml: Remove errant XML character.</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Stanislav Abramenkov (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<p>jansson: Upgrade version to jansson 2.14.1</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Sven Kube (2):</h4>
|
||||
</li>
|
||||
<li>res_audiosocket.c: Set the TCP_NODELAY socket option</li>
|
||||
<li>
|
||||
<p>res_audiosocket.c: Add retry mechanism for reading data from AudioSocket</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Thomas B. Clark (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<p>menuselect: Fix GTK menu callbacks for Fedora 42 compatibility</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>mkmer (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<p>frame.c: validate frame data length is less than samples when adjusting volume</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>phoneben (1):</h4>
|
||||
</li>
|
||||
<li>app_queue: queue rules – Add support for QUEUE_RAISE_PENALTY=rN to raise penal..</li>
|
||||
</ul>
|
||||
<h3>Commit List:</h3>
|
||||
<ul>
|
||||
<li>channelstorage: Rename callbacks that conflict with DEBUG_FD_LEAKS.</li>
|
||||
<li>channelstorage_cpp_map_name_id: Fix callback returning non-matching channels.</li>
|
||||
<li>channelstorage_makeopts.xml: Remove errant XML character.</li>
|
||||
<li>res_stir_shaken.so: Handle X5U certificate chains.</li>
|
||||
<li>res_stir_shaken: Add "ignore_sip_date_header" config option.</li>
|
||||
<li>app_record: Add RECORDING_INFO function.</li>
|
||||
<li>app_sms.c: Fix sending and receiving SMS messages in protocol 2</li>
|
||||
<li>res_websocket_client: Add more info to the XML documentation.</li>
|
||||
<li>res_odbc: cache_size option to limit the cached connections.</li>
|
||||
<li>res_odbc: cache_type option for res_odbc.</li>
|
||||
<li>res_pjsip: Fix empty <code>ActiveChannels</code> property in AMI responses.</li>
|
||||
<li>ARI Outbound Websockets</li>
|
||||
<li>res_websocket_client: Create common utilities for websocket clients.</li>
|
||||
<li>asterisk.c: Add option to restrict shell access from remote consoles.</li>
|
||||
<li>frame.c: validate frame data length is less than samples when adjusting volume</li>
|
||||
<li>res_audiosocket.c: Add retry mechanism for reading data from AudioSocket</li>
|
||||
<li>res_audiosocket.c: Set the TCP_NODELAY socket option</li>
|
||||
<li>menuselect: Fix GTK menu callbacks for Fedora 42 compatibility</li>
|
||||
<li>jansson: Upgrade version to jansson 2.14.1</li>
|
||||
<li>pjproject: Increase maximum SDP formats and attribute limits</li>
|
||||
<li>manager.c: Invalid ref-counting when purging events</li>
|
||||
<li>res_pjsip_nat.c: Do not overwrite transfer host</li>
|
||||
<li>chan_pjsip: Serialize INVITE creation on DTMF attended transfer</li>
|
||||
<li>sig_analog: Add Call Waiting Deluxe support.</li>
|
||||
<li>app_sms: Ignore false positive vectorization warning.</li>
|
||||
<li>lock.h: Add include for string.h when DEBUG_THREADS is defined.</li>
|
||||
<li>Alternate Channel Storage Backends</li>
|
||||
</ul>
|
||||
<h3>Commit Details:</h3>
|
||||
<h4>channelstorage: Rename callbacks that conflict with DEBUG_FD_LEAKS.</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2025-07-08</p>
|
||||
<p>DEBUG_FD_LEAKS replaces calls to "open" and "close" with functions that keep
|
||||
track of file descriptors, even when those calls are actually callbacks
|
||||
defined in structures like ast_channelstorage_instance->open and don't touch
|
||||
file descriptors. This causes compilation failures. Those callbacks
|
||||
have been renamed to "open_instance" and "close_instance" respectively.</p>
|
||||
<p>Resolves: #1287</p>
|
||||
<h4>channelstorage_cpp_map_name_id: Fix callback returning non-matching channels.</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2025-07-09</p>
|
||||
<p>When the callback() API was invoked but no channel passed the test, callback
|
||||
would return the last channel tested instead of NULL. It now correctly
|
||||
returns NULL when no channel matches.</p>
|
||||
<p>Resolves: #1288</p>
|
||||
<h4>audiohook.c: Improve frame pairing logic to avoid MixMonitor breakage with mix..</h4>
|
||||
<p>Author: Michal Hajek
|
||||
Date: 2025-05-21</p>
|
||||
<p>This patch adjusts the read/write synchronization logic in audiohook_read_frame_both()
|
||||
to better handle calls where participants use different codecs or sample sizes
|
||||
(e.g., alaw vs G.722). The previous hard threshold of 2 * samples caused MixMonitor
|
||||
recordings to break or stutter when frames were not aligned between both directions.</p>
|
||||
<p>The new logic uses a more tolerant limit (1.5 * samples), which prevents audio tearing
|
||||
without causing excessive buffer overruns. This fix specifically addresses issues
|
||||
with MixMonitor when recording directly on a channel in a bridge using mixed codecs.</p>
|
||||
<p>Reported-by: Michal Hajek <a href="mailto:michal.hajek@daktela.com">michal.hajek@daktela.com</a></p>
|
||||
<p>Resolves: #1276
|
||||
Resolves: #1279</p>
|
||||
<h4>channelstorage_makeopts.xml: Remove errant XML character.</h4>
|
||||
<p>Author: Sean Bright
|
||||
Date: 2025-06-30</p>
|
||||
<p>Resolves: #1282</p>
|
||||
<h4>res_stir_shaken.so: Handle X5U certificate chains.</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2025-06-18</p>
|
||||
<p>The verification process will now load a full certificate chain retrieved
|
||||
via the X5U URL instead of loading only the end user cert.</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>Renamed crypto_load_cert_from_file() and crypto_load_cert_from_memory()
|
||||
to crypto_load_cert_chain_from_file() and crypto_load_cert_chain_from_memory()
|
||||
respectively.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The two load functions now continue to load certs from the file or memory
|
||||
PEMs and store them in a separate stack of untrusted certs specific to the
|
||||
current verification context.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>crypto_is_cert_trusted() now uses the stack of untrusted certs that were
|
||||
extracted from the PEM in addition to any untrusted certs that were passed
|
||||
in from the configuration (and any CA certs passed in from the config of
|
||||
course).</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>Resolves: #1272</p>
|
||||
<p>UserNote: The STIR/SHAKEN verification process will now load a full
|
||||
certificate chain retrieved via the X5U URL instead of loading only
|
||||
the end user cert.</p>
|
||||
<h4>res_stir_shaken: Add "ignore_sip_date_header" config option.</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2025-06-15</p>
|
||||
<p>UserNote: A new STIR/SHAKEN verification option "ignore_sip_date_header" has
|
||||
been added that when set to true, will cause the verification process to
|
||||
not consider a missing or invalid SIP "Date" header to be a failure. This
|
||||
will make the IAT the sole "truth" for Date in the verification process.
|
||||
The option can be set in the "verification" and "profile" sections of
|
||||
stir_shaken.conf.</p>
|
||||
<p>Also fixed a bug in the port match logic.</p>
|
||||
<p>Resolves: #1251
|
||||
Resolves: #1271</p>
|
||||
<h4>app_record: Add RECORDING_INFO function.</h4>
|
||||
<p>Author: Naveen Albert
|
||||
Date: 2024-01-22</p>
|
||||
<p>Add a function that can be used to retrieve info
|
||||
about a previous recording, such as its duration.</p>
|
||||
<p>This is being added as a function to avoid possibly
|
||||
trampling on dialplan variables, and could be extended
|
||||
to provide other information in the future.</p>
|
||||
<p>Resolves: #548</p>
|
||||
<p>UserNote: The RECORDING_INFO function can now be used
|
||||
to retrieve the duration of a recording.</p>
|
||||
<h4>app_sms.c: Fix sending and receiving SMS messages in protocol 2</h4>
|
||||
<p>Author: Itzanh
|
||||
Date: 2025-04-06</p>
|
||||
<p>This fixes bugs in SMS messaging to SMS-capable analog phones that prevented app_sms.c from talking to phones using SMS protocol 2.</p>
|
||||
<ul>
|
||||
<li>Fix MORX message reception (from phone to Asterisk) in SMS protocol 2</li>
|
||||
<li>Fix MTTX message transmission (from Asterisk to phone) in SMS protocol 2</li>
|
||||
</ul>
|
||||
<p>One of the bugs caused messages to have random characters and junk appended at the end up to the character limit. Another bug prevented Asterisk from sending messages from Asterisk to the phone at all. A final bug caused the transmission from Asterisk to the phone to take a long time because app_sms.c did not hang up after correctly sending the message, causing the phone to have to time out and hang up in order to complete the message transmission.</p>
|
||||
<p>This was tested with a Linksys PAP2T and with a GrandStream HT814, sending and receiving messages with Telefónica DOMO Mensajes phones from Telefónica Spain. I had to play with both the network jitter buffer and the dB gain to get it to work. One of my phones required the gain to be set to +3dB for it to work, while another required it to be set to +6dB.</p>
|
||||
<p>Only MORX and MTTX were tested, I did not test sending and receiving messages to a TelCo SMSC.</p>
|
||||
<h4>app_queue: queue rules – Add support for QUEUE_RAISE_PENALTY=rN to raise penal..</h4>
|
||||
<p>Author: phoneben
|
||||
Date: 2025-05-26</p>
|
||||
<p>This update adds support for a new QUEUE_RAISE_PENALTY format: rN</p>
|
||||
<p>When QUEUE_RAISE_PENALTY is set to rN (e.g., r4), only members whose current penalty
|
||||
is greater than or equal to the defined min_penalty and less than or equal to max_penalty
|
||||
will have their penalty raised to N.</p>
|
||||
<p>Members with penalties outside the min/max range remain unchanged.</p>
|
||||
<p>Example behaviors:</p>
|
||||
<p>QUEUE_RAISE_PENALTY=4 → Raise all members with penalty < 4 (existing behavior)
|
||||
QUEUE_RAISE_PENALTY=r4 → Raise only members with penalty in [min_penalty, max_penalty] to 4</p>
|
||||
<p>Implementation details:</p>
|
||||
<p>Adds parsing logic to detect the r prefix and sets the raise_respect_min flag</p>
|
||||
<p>Modifies the raise logic to skip members outside the defined penalty range when the flag is active</p>
|
||||
<p>UserNote: This change introduces QUEUE_RAISE_PENALTY=rN, allowing selective penalty raises
|
||||
only for members whose current penalty is within the [min_penalty, max_penalty] range.
|
||||
Members with lower or higher penalties are unaffected.
|
||||
This behavior is backward-compatible with existing queue rule configurations.</p>
|
||||
<h4>res_websocket_client: Add more info to the XML documentation.</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2025-06-05</p>
|
||||
<p>Added "see-also" links to chan_websocket and ARI Outbound WebSocket and
|
||||
added an example configuration for each.</p>
|
||||
<h4>res_odbc: cache_size option to limit the cached connections.</h4>
|
||||
<p>Author: Jaco Kroon
|
||||
Date: 2024-12-13</p>
|
||||
<p>Signed-off-by: Jaco Kroon <a href="mailto:jaco@uls.co.za">jaco@uls.co.za</a></p>
|
||||
<p>UserNote: New cache_size option for res_odbc to on a per class basis limit the
|
||||
number of cached connections. Please reference the sample configuration
|
||||
for details.</p>
|
||||
<h4>res_odbc: cache_type option for res_odbc.</h4>
|
||||
<p>Author: Jaco Kroon
|
||||
Date: 2024-12-10</p>
|
||||
<p>This enables setting cache_type classes to a round-robin queueing system
|
||||
rather than the historic stack mechanism.</p>
|
||||
<p>This should result in lower risk of connection drops due to shorter idle
|
||||
times (the first connection to go onto the stack could in theory never
|
||||
be used again, ever, but sit there consuming resources, there could be
|
||||
multiple of these).</p>
|
||||
<p>And with a queue rather than a stack, dead connections are guaranteed to
|
||||
be detected and purged eventually.</p>
|
||||
<p>This should end up better balancing connection_cnt with actual load
|
||||
over time, assuming the database doesn't keep connections open
|
||||
excessively long from it's side.</p>
|
||||
<p>Signed-off-by: Jaco Kroon <a href="mailto:jaco@uls.co.za">jaco@uls.co.za</a></p>
|
||||
<p>UserNote: When using res_odbc it should be noted that back-end
|
||||
connections to the underlying database can now be configured to re-use
|
||||
the cached connections in a round-robin manner rather than repeatedly
|
||||
re-using the same connection. This helps to keep connections alive, and
|
||||
to purge dead connections from the system, thus more dynamically
|
||||
adjusting to actual load. The downside is that one could keep too many
|
||||
connections active for a longer time resulting in resource also begin
|
||||
consumed on the database side.</p>
|
||||
<h4>res_pjsip: Fix empty <code>ActiveChannels</code> property in AMI responses.</h4>
|
||||
<p>Author: Sean Bright
|
||||
Date: 2025-05-27</p>
|
||||
<p>The logic appears to have been reversed since it was introduced in
|
||||
05cbf8df.</p>
|
||||
<p>Resolves: #1254</p>
|
||||
<h4>ARI Outbound Websockets</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2025-03-28</p>
|
||||
<p>Asterisk can now establish websocket sessions <em>to</em> your ARI applications
|
||||
as well as accepting websocket sessions <em>from</em> them.
|
||||
Full details: http://s.asterisk.net/ari-outbound-ws</p>
|
||||
<p>Code change summary:
|
||||
* Added an ast_vector_string_join() function,
|
||||
* Added ApplicationRegistered and ApplicationUnregistered ARI events.
|
||||
* Converted res/ari/config.c to use sorcery to process ari.conf.
|
||||
* Added the "outbound-websocket" ARI config object.
|
||||
* Refactored res/ari/ari_websockets.c to handle outbound websockets.
|
||||
* Refactored res/ari/cli.c for the sorcery changeover.
|
||||
* Updated res/res_stasis.c for the sorcery changeover.
|
||||
* Updated apps/app_stasis.c to allow initiating per-call outbound websockets.
|
||||
* Added CLI commands to manage ARI websockets.
|
||||
* Added the new "outbound-websocket" object to ari.conf.sample.
|
||||
* Moved the ARI XML documentation out of res_ari.c into res/ari/ari_doc.xml</p>
|
||||
<p>UserNote: Asterisk can now establish websocket sessions <em>to</em> your ARI applications
|
||||
as well as accepting websocket sessions <em>from</em> them.
|
||||
Full details: http://s.asterisk.net/ari-outbound-ws</p>
|
||||
<h4>res_websocket_client: Create common utilities for websocket clients.</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2025-05-02</p>
|
||||
<p>Since multiple Asterisk capabilities now need to create websocket clients
|
||||
it makes sense to create a common set of utilities rather than making
|
||||
each of those capabilities implement their own.</p>
|
||||
<ul>
|
||||
<li>A new configuration file "websocket_client.conf" is used to store common
|
||||
client parameters in named configuration sections.</li>
|
||||
<li>APIs are provided to list and retrieve ast_websocket_client objects created
|
||||
from the named configurations.</li>
|
||||
<li>An API is provided that accepts an ast_websocket_client object, connects
|
||||
to the remote server with retries and returns an ast_websocket object. TLS is
|
||||
supported as is basic authentication.</li>
|
||||
<li>An observer can be registered to receive notification of loaded or reloaded
|
||||
client objects.</li>
|
||||
<li>An API is provided to compare an existing client object to one just
|
||||
reloaded and return the fields that were changed. The caller can then decide
|
||||
what action to take based on which fields changed.</li>
|
||||
</ul>
|
||||
<p>Also as part of thie commit, several sorcery convenience macros were created
|
||||
to make registering common object fields easier.</p>
|
||||
<p>UserNote: A new module "res_websocket_client" and config file
|
||||
"websocket_client.conf" have been added to support several upcoming new
|
||||
capabilities that need common websocket client configuration.</p>
|
||||
<h4>asterisk.c: Add option to restrict shell access from remote consoles.</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2025-05-19</p>
|
||||
<p>UserNote: A new asterisk.conf option 'disable_remote_console_shell' has
|
||||
been added that, when set, will prevent remote consoles from executing
|
||||
shell commands using the '!' prefix.</p>
|
||||
<p>Resolves: #GHSA-c7p6-7mvq-8jq2</p>
|
||||
<h4>frame.c: validate frame data length is less than samples when adjusting volume</h4>
|
||||
<p>Author: mkmer
|
||||
Date: 2025-05-12</p>
|
||||
<p>Resolves: #1230</p>
|
||||
<h4>res_audiosocket.c: Add retry mechanism for reading data from AudioSocket</h4>
|
||||
<p>Author: Sven Kube
|
||||
Date: 2025-05-13</p>
|
||||
<p>The added retry mechanism addresses an issue that arises when fragmented TCP
|
||||
packets are received, each containing only a portion of an AudioSocket packet.
|
||||
This situation can occur if the external service sending the AudioSocket data
|
||||
has Nagle's algorithm enabled.</p>
|
||||
<h4>res_audiosocket.c: Set the TCP_NODELAY socket option</h4>
|
||||
<p>Author: Sven Kube
|
||||
Date: 2025-05-13</p>
|
||||
<p>Disable Nagle's algorithm by setting the TCP_NODELAY socket option.
|
||||
This reduces latency by preventing delays caused by packet buffering.</p>
|
||||
<h4>menuselect: Fix GTK menu callbacks for Fedora 42 compatibility</h4>
|
||||
<p>Author: Thomas B. Clark
|
||||
Date: 2025-05-12</p>
|
||||
<p>This patch resolves a build failure in <code>menuselect_gtk.c</code> when running
|
||||
<code>make menuconfig</code> on Fedora 42. The new version of GTK introduced stricter
|
||||
type checking for callback signatures.</p>
|
||||
<p>Changes include:
|
||||
- Add wrapper functions to match the expected <code>void (*)(void)</code> signature.
|
||||
- Update <code>menu_items</code> array to use these wrappers.</p>
|
||||
<p>Fixes: #1243</p>
|
||||
<h4>jansson: Upgrade version to jansson 2.14.1</h4>
|
||||
<p>Author: Stanislav Abramenkov
|
||||
Date: 2025-03-24</p>
|
||||
<p>UpgradeNote: jansson has been upgraded to 2.14.1. For more
|
||||
information visit jansson Github page: https://github.com/akheron/jansson/releases/tag/v2.14.1</p>
|
||||
<p>Resolves: #1178</p>
|
||||
<h4>pjproject: Increase maximum SDP formats and attribute limits</h4>
|
||||
<p>Author: Joe Searle
|
||||
Date: 2025-05-15</p>
|
||||
<p>Since Chrome 136, using Windows, when initiating a video call the INVITE SDP exceeds the maximum number of allowed attributes, resulting in the INVITE being rejected. This increases the attribute limit and the number of formats allowed when using bundled pjproject.</p>
|
||||
<p>Fixes: #1240</p>
|
||||
<h4>manager.c: Invalid ref-counting when purging events</h4>
|
||||
<p>Author: Nathan Monfils
|
||||
Date: 2025-05-05</p>
|
||||
<p>We have a use-case where we generate a <em>lot</em> of events on the AMI, and
|
||||
then when doing <code>manager show eventq</code> we would see some events which
|
||||
would linger for hours or days in there. Obviously something was leaking.
|
||||
Testing allowed us to track down this logic bug in the ref-counting on
|
||||
the event purge.</p>
|
||||
<p>Reproducing the bug was not super trivial, we managed to do it in a
|
||||
production-like load testing environment with multiple AMI consumers.</p>
|
||||
<p>The race condition itself:</p>
|
||||
<ol>
|
||||
<li>something allocates and links <code>session</code></li>
|
||||
<li><code>purge_sessions</code> iterates over that <code>session</code> (takes ref)</li>
|
||||
<li><code>purge_session</code> correctly de-referencess that session</li>
|
||||
<li><code>purge_session</code> re-evaluates the while() loop, taking a reference</li>
|
||||
<li><code>purge_session</code> exits (<code>n_max > 0</code> is false)</li>
|
||||
<li>whatever allocated the <code>session</code> deallocates it, but a reference is
|
||||
now lost since we exited the <code>while</code> loop before de-referencing.</li>
|
||||
<li>since the destructor is never called, the session->last_ev->usecount
|
||||
is never decremented, leading to events lingering in the queue</li>
|
||||
</ol>
|
||||
<p>The impact of this bug does not seem major. The events are small and do
|
||||
not seem, from our testing, to be causing meaningful additional CPU
|
||||
usage. Mainly we wanted to fix this issue because we are internally
|
||||
adding prometheus metrics to the eventq and those leaked events were
|
||||
causing the metrics to show garbage data.</p>
|
||||
<h4>res_pjsip_nat.c: Do not overwrite transfer host</h4>
|
||||
<p>Author: Mike Bradeen
|
||||
Date: 2025-05-08</p>
|
||||
<p>When a call is transfered via dialplan behind a NAT, the
|
||||
host portion of the Contact header in the 302 will no longer
|
||||
be over-written with the external NAT IP and will retain the
|
||||
hostname.</p>
|
||||
<p>Fixes: #1141</p>
|
||||
<h4>chan_pjsip: Serialize INVITE creation on DTMF attended transfer</h4>
|
||||
<p>Author: Mike Bradeen
|
||||
Date: 2025-05-05</p>
|
||||
<p>When a call is transfered via DTMF feature code, the Transfer Target and
|
||||
Transferer are bridged immediately. This opens the possibilty of a race
|
||||
condition between the creation of an INVITE and the bridge induced colp
|
||||
update that can result in the set caller ID being over-written with the
|
||||
transferer's default info.</p>
|
||||
<p>Fixes: #1234</p>
|
||||
<h4>sig_analog: Add Call Waiting Deluxe support.</h4>
|
||||
<p>Author: Naveen Albert
|
||||
Date: 2023-08-24</p>
|
||||
<p>Adds support for Call Waiting Deluxe options to enhance
|
||||
the current call waiting feature.</p>
|
||||
<p>As part of this change, a mechanism is also added that
|
||||
allows a channel driver to queue an audio file for Dial()
|
||||
to play, which is necessary for the announcement function.</p>
|
||||
<p>ASTERISK-30373 #close</p>
|
||||
<p>Resolves: #271</p>
|
||||
<p>UserNote: Call Waiting Deluxe can now be enabled for FXS channels
|
||||
by enabling its corresponding option.</p>
|
||||
<h4>app_sms: Ignore false positive vectorization warning.</h4>
|
||||
<p>Author: Naveen Albert
|
||||
Date: 2025-01-24</p>
|
||||
<p>Ignore gcc warning about writing 32 bytes into a region of size 6,
|
||||
since we check that we don't go out of bounds for each byte.
|
||||
This is due to a vectorization bug in gcc 15, stemming from
|
||||
gcc commit 68326d5d1a593dc0bf098c03aac25916168bc5a9.</p>
|
||||
<p>Resolves: #1088</p>
|
||||
<h4>lock.h: Add include for string.h when DEBUG_THREADS is defined.</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2025-05-02</p>
|
||||
<p>When DEBUG_THREADS is defined, lock.h uses strerror(), which is defined
|
||||
in the libc string.h file, to print warning messages. If the including
|
||||
source file doesn't include string.h then strerror() won't be found and
|
||||
and compile errors will be thrown. Since lock.h depends on this, string.h
|
||||
is now included from there if DEBUG_THREADS is defined. This way, including
|
||||
source files don't have to worry about it.</p>
|
||||
<h4>Alternate Channel Storage Backends</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2024-12-31</p>
|
||||
<p>Full details: http://s.asterisk.net/dc679ec3</p>
|
||||
<p>The previous proof-of-concept showed that the cpp_map_name_id alternate
|
||||
storage backed performed better than all the others so this final PR
|
||||
adds only that option. You still need to enable it in menuselect under
|
||||
the "Alternate Channel Storage Backends" category.</p>
|
||||
<p>To select which one is used at runtime, set the "channel_storage_backend"
|
||||
option in asterisk.conf to one of the values described in
|
||||
asterisk.conf.sample. The default remains "ao2_legacy".</p>
|
||||
<p>UpgradeNote: With this release, you can now select an alternate channel
|
||||
storage backend based on C++ Maps. Using the new backend may increase
|
||||
performance and reduce the chances of deadlocks on heavily loaded systems.
|
||||
For more information, see http://s.asterisk.net/dc679ec3</p>
|
||||
</body></html>
|
||||
@@ -1,677 +0,0 @@
|
||||
|
||||
## Change Log for Release asterisk-20.15.0
|
||||
|
||||
### Links:
|
||||
|
||||
- [Full ChangeLog](https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-20.15.0.html)
|
||||
- [GitHub Diff](https://github.com/asterisk/asterisk/compare/20.14.1...20.15.0)
|
||||
- [Tarball](https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20.15.0.tar.gz)
|
||||
- [Downloads](https://downloads.asterisk.org/pub/telephony/asterisk)
|
||||
|
||||
### Summary:
|
||||
|
||||
- Commits: 29
|
||||
- Commit Authors: 14
|
||||
- Issues Resolved: 19
|
||||
- Security Advisories Resolved: 1
|
||||
- [GHSA-c7p6-7mvq-8jq2](https://github.com/asterisk/asterisk/security/advisories/GHSA-c7p6-7mvq-8jq2): cli_permissions.conf: deny option does not work for disallowing shell commands
|
||||
|
||||
### User Notes:
|
||||
|
||||
- #### res_stir_shaken.so: Handle X5U certificate chains.
|
||||
The STIR/SHAKEN verification process will now load a full
|
||||
certificate chain retrieved via the X5U URL instead of loading only
|
||||
the end user cert.
|
||||
|
||||
- #### res_stir_shaken: Add "ignore_sip_date_header" config option.
|
||||
A new STIR/SHAKEN verification option "ignore_sip_date_header" has
|
||||
been added that when set to true, will cause the verification process to
|
||||
not consider a missing or invalid SIP "Date" header to be a failure. This
|
||||
will make the IAT the sole "truth" for Date in the verification process.
|
||||
The option can be set in the "verification" and "profile" sections of
|
||||
stir_shaken.conf.
|
||||
Also fixed a bug in the port match logic.
|
||||
Resolves: #1251
|
||||
Resolves: #1271
|
||||
|
||||
- #### app_record: Add RECORDING_INFO function.
|
||||
The RECORDING_INFO function can now be used
|
||||
to retrieve the duration of a recording.
|
||||
|
||||
- #### app_queue: queue rules – Add support for QUEUE_RAISE_PENALTY=rN to raise penal..
|
||||
This change introduces QUEUE_RAISE_PENALTY=rN, allowing selective penalty raises
|
||||
only for members whose current penalty is within the [min_penalty, max_penalty] range.
|
||||
Members with lower or higher penalties are unaffected.
|
||||
This behavior is backward-compatible with existing queue rule configurations.
|
||||
|
||||
- #### res_odbc: cache_size option to limit the cached connections.
|
||||
New cache_size option for res_odbc to on a per class basis limit the
|
||||
number of cached connections. Please reference the sample configuration
|
||||
for details.
|
||||
|
||||
- #### res_odbc: cache_type option for res_odbc.
|
||||
When using res_odbc it should be noted that back-end
|
||||
connections to the underlying database can now be configured to re-use
|
||||
the cached connections in a round-robin manner rather than repeatedly
|
||||
re-using the same connection. This helps to keep connections alive, and
|
||||
to purge dead connections from the system, thus more dynamically
|
||||
adjusting to actual load. The downside is that one could keep too many
|
||||
connections active for a longer time resulting in resource also begin
|
||||
consumed on the database side.
|
||||
|
||||
- #### ARI Outbound Websockets
|
||||
Asterisk can now establish websocket sessions _to_ your ARI applications
|
||||
as well as accepting websocket sessions _from_ them.
|
||||
Full details: http://s.asterisk.net/ari-outbound-ws
|
||||
|
||||
- #### res_websocket_client: Create common utilities for websocket clients.
|
||||
A new module "res_websocket_client" and config file
|
||||
"websocket_client.conf" have been added to support several upcoming new
|
||||
capabilities that need common websocket client configuration.
|
||||
|
||||
- #### asterisk.c: Add option to restrict shell access from remote consoles.
|
||||
A new asterisk.conf option 'disable_remote_console_shell' has
|
||||
been added that, when set, will prevent remote consoles from executing
|
||||
shell commands using the '!' prefix.
|
||||
Resolves: #GHSA-c7p6-7mvq-8jq2
|
||||
|
||||
- #### sig_analog: Add Call Waiting Deluxe support.
|
||||
Call Waiting Deluxe can now be enabled for FXS channels
|
||||
by enabling its corresponding option.
|
||||
|
||||
|
||||
### Upgrade Notes:
|
||||
|
||||
- #### jansson: Upgrade version to jansson 2.14.1
|
||||
jansson has been upgraded to 2.14.1. For more
|
||||
information visit jansson Github page: https://github.com/akheron/jansson/releases/tag/v2.14.1
|
||||
Resolves: #1178
|
||||
|
||||
- #### Alternate Channel Storage Backends
|
||||
With this release, you can now select an alternate channel
|
||||
storage backend based on C++ Maps. Using the new backend may increase
|
||||
performance and reduce the chances of deadlocks on heavily loaded systems.
|
||||
For more information, see http://s.asterisk.net/dc679ec3
|
||||
|
||||
|
||||
### Commit Authors:
|
||||
|
||||
- George Joseph: (10)
|
||||
- Itzanh: (1)
|
||||
- Jaco Kroon: (2)
|
||||
- Joe Searle: (1)
|
||||
- Michal Hajek: (1)
|
||||
- Mike Bradeen: (2)
|
||||
- Mkmer: (1)
|
||||
- Nathan Monfils: (1)
|
||||
- Naveen Albert: (3)
|
||||
- Phoneben: (1)
|
||||
- Sean Bright: (2)
|
||||
- Stanislav Abramenkov: (1)
|
||||
- Sven Kube: (2)
|
||||
- Thomas B. Clark: (1)
|
||||
|
||||
## Issue and Commit Detail:
|
||||
|
||||
### Closed Issues:
|
||||
|
||||
- !GHSA-c7p6-7mvq-8jq2: cli_permissions.conf: deny option does not work for disallowing shell commands
|
||||
- 271: [new-feature]: sig_analog: Add Call Waiting Deluxe support.
|
||||
- 548: [improvement]: Get Record() audio duration/length
|
||||
- 1088: [bug]: app_sms: Compilation failure in DEVMODE due to stringop-overflow error in GCC 15 pre-release
|
||||
- 1141: [bug]: res_pjsip: Contact header set incorrectly for call redirect (302 Moved temp.) when external_* set
|
||||
- 1178: [improvement]: jansson: Upgrade version to jansson 2.14.1
|
||||
- 1230: [bug]: ast_frame_adjust_volume and ast_frame_adjust_volume_float crash on interpolated frames
|
||||
- 1234: [bug]: Set CalllerID lost on DTMF attended transfer
|
||||
- 1240: [bug]: WebRTC invites failing on Chrome 136
|
||||
- 1243: [bug]: make menuconfig fails due to changes in GTK callbacks
|
||||
- 1251: [improvement]: PJSIP shouldn't require SIP Date header to process full shaken passport which includes iat
|
||||
- 1254: [bug]: ActiveChannels not reported when using AMI command PJSIPShowEndpoint
|
||||
- 1271: [bug]: STIR/SHAKEN not accepting port 8443 in certificate URLs
|
||||
- 1272: [improvement]: STIR/SHAKEN handle X5U certificate chains
|
||||
- 1276: MixMonitor produces broken recordings in bridged calls with asymmetric codecs (e.g., alaw vs G.722)
|
||||
- 1279: [bug]: regression: 20.12.0 downgrades quality of wav16 recordings
|
||||
- 1282: [bug]: Alternate Channel Storage Backends menuselect not enabling it
|
||||
- 1287: [bug]: channelstorage.c: Compilation failure with DEBUG_FD_LEAKS
|
||||
- 1288: [bug]: Crash when destroying channel with C++ alternative storage backend enabled
|
||||
- ASTERISK-30373: sig_analog: Add Call Waiting Deluxe options
|
||||
|
||||
### Commits By Author:
|
||||
|
||||
- #### George Joseph (10):
|
||||
- Alternate Channel Storage Backends
|
||||
- lock.h: Add include for string.h when DEBUG_THREADS is defined.
|
||||
- asterisk.c: Add option to restrict shell access from remote consoles.
|
||||
- res_websocket_client: Create common utilities for websocket clients.
|
||||
- ARI Outbound Websockets
|
||||
- res_websocket_client: Add more info to the XML documentation.
|
||||
- res_stir_shaken: Add "ignore_sip_date_header" config option.
|
||||
- res_stir_shaken.so: Handle X5U certificate chains.
|
||||
- channelstorage_cpp_map_name_id: Fix callback returning non-matching channels.
|
||||
- channelstorage: Rename callbacks that conflict with DEBUG_FD_LEAKS.
|
||||
|
||||
- #### Itzanh (1):
|
||||
- app_sms.c: Fix sending and receiving SMS messages in protocol 2
|
||||
|
||||
- #### Jaco Kroon (2):
|
||||
- res_odbc: cache_type option for res_odbc.
|
||||
- res_odbc: cache_size option to limit the cached connections.
|
||||
|
||||
- #### Joe Searle (1):
|
||||
- pjproject: Increase maximum SDP formats and attribute limits
|
||||
|
||||
- #### Michal Hajek (1):
|
||||
- audiohook.c: Improve frame pairing logic to avoid MixMonitor breakage with mix..
|
||||
|
||||
- #### Mike Bradeen (2):
|
||||
- chan_pjsip: Serialize INVITE creation on DTMF attended transfer
|
||||
- res_pjsip_nat.c: Do not overwrite transfer host
|
||||
|
||||
- #### Nathan Monfils (1):
|
||||
- manager.c: Invalid ref-counting when purging events
|
||||
|
||||
- #### Naveen Albert (3):
|
||||
- app_sms: Ignore false positive vectorization warning.
|
||||
- sig_analog: Add Call Waiting Deluxe support.
|
||||
- app_record: Add RECORDING_INFO function.
|
||||
|
||||
- #### Sean Bright (2):
|
||||
- res_pjsip: Fix empty `ActiveChannels` property in AMI responses.
|
||||
- channelstorage_makeopts.xml: Remove errant XML character.
|
||||
|
||||
- #### Stanislav Abramenkov (1):
|
||||
- jansson: Upgrade version to jansson 2.14.1
|
||||
|
||||
- #### Sven Kube (2):
|
||||
- res_audiosocket.c: Set the TCP_NODELAY socket option
|
||||
- res_audiosocket.c: Add retry mechanism for reading data from AudioSocket
|
||||
|
||||
- #### Thomas B. Clark (1):
|
||||
- menuselect: Fix GTK menu callbacks for Fedora 42 compatibility
|
||||
|
||||
- #### mkmer (1):
|
||||
- frame.c: validate frame data length is less than samples when adjusting volume
|
||||
|
||||
- #### phoneben (1):
|
||||
- app_queue: queue rules – Add support for QUEUE_RAISE_PENALTY=rN to raise penal..
|
||||
|
||||
|
||||
### Commit List:
|
||||
|
||||
- channelstorage: Rename callbacks that conflict with DEBUG_FD_LEAKS.
|
||||
- channelstorage_cpp_map_name_id: Fix callback returning non-matching channels.
|
||||
- channelstorage_makeopts.xml: Remove errant XML character.
|
||||
- res_stir_shaken.so: Handle X5U certificate chains.
|
||||
- res_stir_shaken: Add "ignore_sip_date_header" config option.
|
||||
- app_record: Add RECORDING_INFO function.
|
||||
- app_sms.c: Fix sending and receiving SMS messages in protocol 2
|
||||
- res_websocket_client: Add more info to the XML documentation.
|
||||
- res_odbc: cache_size option to limit the cached connections.
|
||||
- res_odbc: cache_type option for res_odbc.
|
||||
- res_pjsip: Fix empty `ActiveChannels` property in AMI responses.
|
||||
- ARI Outbound Websockets
|
||||
- res_websocket_client: Create common utilities for websocket clients.
|
||||
- asterisk.c: Add option to restrict shell access from remote consoles.
|
||||
- frame.c: validate frame data length is less than samples when adjusting volume
|
||||
- res_audiosocket.c: Add retry mechanism for reading data from AudioSocket
|
||||
- res_audiosocket.c: Set the TCP_NODELAY socket option
|
||||
- menuselect: Fix GTK menu callbacks for Fedora 42 compatibility
|
||||
- jansson: Upgrade version to jansson 2.14.1
|
||||
- pjproject: Increase maximum SDP formats and attribute limits
|
||||
- manager.c: Invalid ref-counting when purging events
|
||||
- res_pjsip_nat.c: Do not overwrite transfer host
|
||||
- chan_pjsip: Serialize INVITE creation on DTMF attended transfer
|
||||
- sig_analog: Add Call Waiting Deluxe support.
|
||||
- app_sms: Ignore false positive vectorization warning.
|
||||
- lock.h: Add include for string.h when DEBUG_THREADS is defined.
|
||||
- Alternate Channel Storage Backends
|
||||
|
||||
### Commit Details:
|
||||
|
||||
#### channelstorage: Rename callbacks that conflict with DEBUG_FD_LEAKS.
|
||||
Author: George Joseph
|
||||
Date: 2025-07-08
|
||||
|
||||
DEBUG_FD_LEAKS replaces calls to "open" and "close" with functions that keep
|
||||
track of file descriptors, even when those calls are actually callbacks
|
||||
defined in structures like ast_channelstorage_instance->open and don't touch
|
||||
file descriptors. This causes compilation failures. Those callbacks
|
||||
have been renamed to "open_instance" and "close_instance" respectively.
|
||||
|
||||
Resolves: #1287
|
||||
|
||||
#### channelstorage_cpp_map_name_id: Fix callback returning non-matching channels.
|
||||
Author: George Joseph
|
||||
Date: 2025-07-09
|
||||
|
||||
When the callback() API was invoked but no channel passed the test, callback
|
||||
would return the last channel tested instead of NULL. It now correctly
|
||||
returns NULL when no channel matches.
|
||||
|
||||
Resolves: #1288
|
||||
|
||||
#### audiohook.c: Improve frame pairing logic to avoid MixMonitor breakage with mix..
|
||||
Author: Michal Hajek
|
||||
Date: 2025-05-21
|
||||
|
||||
This patch adjusts the read/write synchronization logic in audiohook_read_frame_both()
|
||||
to better handle calls where participants use different codecs or sample sizes
|
||||
(e.g., alaw vs G.722). The previous hard threshold of 2 * samples caused MixMonitor
|
||||
recordings to break or stutter when frames were not aligned between both directions.
|
||||
|
||||
The new logic uses a more tolerant limit (1.5 * samples), which prevents audio tearing
|
||||
without causing excessive buffer overruns. This fix specifically addresses issues
|
||||
with MixMonitor when recording directly on a channel in a bridge using mixed codecs.
|
||||
|
||||
Reported-by: Michal Hajek <michal.hajek@daktela.com>
|
||||
|
||||
Resolves: #1276
|
||||
Resolves: #1279
|
||||
|
||||
#### channelstorage_makeopts.xml: Remove errant XML character.
|
||||
Author: Sean Bright
|
||||
Date: 2025-06-30
|
||||
|
||||
Resolves: #1282
|
||||
|
||||
#### res_stir_shaken.so: Handle X5U certificate chains.
|
||||
Author: George Joseph
|
||||
Date: 2025-06-18
|
||||
|
||||
The verification process will now load a full certificate chain retrieved
|
||||
via the X5U URL instead of loading only the end user cert.
|
||||
|
||||
* Renamed crypto_load_cert_from_file() and crypto_load_cert_from_memory()
|
||||
to crypto_load_cert_chain_from_file() and crypto_load_cert_chain_from_memory()
|
||||
respectively.
|
||||
|
||||
* The two load functions now continue to load certs from the file or memory
|
||||
PEMs and store them in a separate stack of untrusted certs specific to the
|
||||
current verification context.
|
||||
|
||||
* crypto_is_cert_trusted() now uses the stack of untrusted certs that were
|
||||
extracted from the PEM in addition to any untrusted certs that were passed
|
||||
in from the configuration (and any CA certs passed in from the config of
|
||||
course).
|
||||
|
||||
Resolves: #1272
|
||||
|
||||
UserNote: The STIR/SHAKEN verification process will now load a full
|
||||
certificate chain retrieved via the X5U URL instead of loading only
|
||||
the end user cert.
|
||||
|
||||
|
||||
#### res_stir_shaken: Add "ignore_sip_date_header" config option.
|
||||
Author: George Joseph
|
||||
Date: 2025-06-15
|
||||
|
||||
UserNote: A new STIR/SHAKEN verification option "ignore_sip_date_header" has
|
||||
been added that when set to true, will cause the verification process to
|
||||
not consider a missing or invalid SIP "Date" header to be a failure. This
|
||||
will make the IAT the sole "truth" for Date in the verification process.
|
||||
The option can be set in the "verification" and "profile" sections of
|
||||
stir_shaken.conf.
|
||||
|
||||
Also fixed a bug in the port match logic.
|
||||
|
||||
Resolves: #1251
|
||||
Resolves: #1271
|
||||
|
||||
#### app_record: Add RECORDING_INFO function.
|
||||
Author: Naveen Albert
|
||||
Date: 2024-01-22
|
||||
|
||||
Add a function that can be used to retrieve info
|
||||
about a previous recording, such as its duration.
|
||||
|
||||
This is being added as a function to avoid possibly
|
||||
trampling on dialplan variables, and could be extended
|
||||
to provide other information in the future.
|
||||
|
||||
Resolves: #548
|
||||
|
||||
UserNote: The RECORDING_INFO function can now be used
|
||||
to retrieve the duration of a recording.
|
||||
|
||||
|
||||
#### app_sms.c: Fix sending and receiving SMS messages in protocol 2
|
||||
Author: Itzanh
|
||||
Date: 2025-04-06
|
||||
|
||||
This fixes bugs in SMS messaging to SMS-capable analog phones that prevented app_sms.c from talking to phones using SMS protocol 2.
|
||||
|
||||
- Fix MORX message reception (from phone to Asterisk) in SMS protocol 2
|
||||
- Fix MTTX message transmission (from Asterisk to phone) in SMS protocol 2
|
||||
|
||||
One of the bugs caused messages to have random characters and junk appended at the end up to the character limit. Another bug prevented Asterisk from sending messages from Asterisk to the phone at all. A final bug caused the transmission from Asterisk to the phone to take a long time because app_sms.c did not hang up after correctly sending the message, causing the phone to have to time out and hang up in order to complete the message transmission.
|
||||
|
||||
This was tested with a Linksys PAP2T and with a GrandStream HT814, sending and receiving messages with Telefónica DOMO Mensajes phones from Telefónica Spain. I had to play with both the network jitter buffer and the dB gain to get it to work. One of my phones required the gain to be set to +3dB for it to work, while another required it to be set to +6dB.
|
||||
|
||||
Only MORX and MTTX were tested, I did not test sending and receiving messages to a TelCo SMSC.
|
||||
|
||||
|
||||
#### app_queue: queue rules – Add support for QUEUE_RAISE_PENALTY=rN to raise penal..
|
||||
Author: phoneben
|
||||
Date: 2025-05-26
|
||||
|
||||
This update adds support for a new QUEUE_RAISE_PENALTY format: rN
|
||||
|
||||
When QUEUE_RAISE_PENALTY is set to rN (e.g., r4), only members whose current penalty
|
||||
is greater than or equal to the defined min_penalty and less than or equal to max_penalty
|
||||
will have their penalty raised to N.
|
||||
|
||||
Members with penalties outside the min/max range remain unchanged.
|
||||
|
||||
Example behaviors:
|
||||
|
||||
QUEUE_RAISE_PENALTY=4 → Raise all members with penalty < 4 (existing behavior)
|
||||
QUEUE_RAISE_PENALTY=r4 → Raise only members with penalty in [min_penalty, max_penalty] to 4
|
||||
|
||||
Implementation details:
|
||||
|
||||
Adds parsing logic to detect the r prefix and sets the raise_respect_min flag
|
||||
|
||||
Modifies the raise logic to skip members outside the defined penalty range when the flag is active
|
||||
|
||||
UserNote: This change introduces QUEUE_RAISE_PENALTY=rN, allowing selective penalty raises
|
||||
only for members whose current penalty is within the [min_penalty, max_penalty] range.
|
||||
Members with lower or higher penalties are unaffected.
|
||||
This behavior is backward-compatible with existing queue rule configurations.
|
||||
|
||||
|
||||
#### res_websocket_client: Add more info to the XML documentation.
|
||||
Author: George Joseph
|
||||
Date: 2025-06-05
|
||||
|
||||
Added "see-also" links to chan_websocket and ARI Outbound WebSocket and
|
||||
added an example configuration for each.
|
||||
|
||||
|
||||
#### res_odbc: cache_size option to limit the cached connections.
|
||||
Author: Jaco Kroon
|
||||
Date: 2024-12-13
|
||||
|
||||
Signed-off-by: Jaco Kroon <jaco@uls.co.za>
|
||||
|
||||
UserNote: New cache_size option for res_odbc to on a per class basis limit the
|
||||
number of cached connections. Please reference the sample configuration
|
||||
for details.
|
||||
|
||||
|
||||
#### res_odbc: cache_type option for res_odbc.
|
||||
Author: Jaco Kroon
|
||||
Date: 2024-12-10
|
||||
|
||||
This enables setting cache_type classes to a round-robin queueing system
|
||||
rather than the historic stack mechanism.
|
||||
|
||||
This should result in lower risk of connection drops due to shorter idle
|
||||
times (the first connection to go onto the stack could in theory never
|
||||
be used again, ever, but sit there consuming resources, there could be
|
||||
multiple of these).
|
||||
|
||||
And with a queue rather than a stack, dead connections are guaranteed to
|
||||
be detected and purged eventually.
|
||||
|
||||
This should end up better balancing connection_cnt with actual load
|
||||
over time, assuming the database doesn't keep connections open
|
||||
excessively long from it's side.
|
||||
|
||||
Signed-off-by: Jaco Kroon <jaco@uls.co.za>
|
||||
|
||||
UserNote: When using res_odbc it should be noted that back-end
|
||||
connections to the underlying database can now be configured to re-use
|
||||
the cached connections in a round-robin manner rather than repeatedly
|
||||
re-using the same connection. This helps to keep connections alive, and
|
||||
to purge dead connections from the system, thus more dynamically
|
||||
adjusting to actual load. The downside is that one could keep too many
|
||||
connections active for a longer time resulting in resource also begin
|
||||
consumed on the database side.
|
||||
|
||||
|
||||
#### res_pjsip: Fix empty `ActiveChannels` property in AMI responses.
|
||||
Author: Sean Bright
|
||||
Date: 2025-05-27
|
||||
|
||||
The logic appears to have been reversed since it was introduced in
|
||||
05cbf8df.
|
||||
|
||||
Resolves: #1254
|
||||
|
||||
#### ARI Outbound Websockets
|
||||
Author: George Joseph
|
||||
Date: 2025-03-28
|
||||
|
||||
Asterisk can now establish websocket sessions _to_ your ARI applications
|
||||
as well as accepting websocket sessions _from_ them.
|
||||
Full details: http://s.asterisk.net/ari-outbound-ws
|
||||
|
||||
Code change summary:
|
||||
* Added an ast_vector_string_join() function,
|
||||
* Added ApplicationRegistered and ApplicationUnregistered ARI events.
|
||||
* Converted res/ari/config.c to use sorcery to process ari.conf.
|
||||
* Added the "outbound-websocket" ARI config object.
|
||||
* Refactored res/ari/ari_websockets.c to handle outbound websockets.
|
||||
* Refactored res/ari/cli.c for the sorcery changeover.
|
||||
* Updated res/res_stasis.c for the sorcery changeover.
|
||||
* Updated apps/app_stasis.c to allow initiating per-call outbound websockets.
|
||||
* Added CLI commands to manage ARI websockets.
|
||||
* Added the new "outbound-websocket" object to ari.conf.sample.
|
||||
* Moved the ARI XML documentation out of res_ari.c into res/ari/ari_doc.xml
|
||||
|
||||
UserNote: Asterisk can now establish websocket sessions _to_ your ARI applications
|
||||
as well as accepting websocket sessions _from_ them.
|
||||
Full details: http://s.asterisk.net/ari-outbound-ws
|
||||
|
||||
|
||||
#### res_websocket_client: Create common utilities for websocket clients.
|
||||
Author: George Joseph
|
||||
Date: 2025-05-02
|
||||
|
||||
Since multiple Asterisk capabilities now need to create websocket clients
|
||||
it makes sense to create a common set of utilities rather than making
|
||||
each of those capabilities implement their own.
|
||||
|
||||
* A new configuration file "websocket_client.conf" is used to store common
|
||||
client parameters in named configuration sections.
|
||||
* APIs are provided to list and retrieve ast_websocket_client objects created
|
||||
from the named configurations.
|
||||
* An API is provided that accepts an ast_websocket_client object, connects
|
||||
to the remote server with retries and returns an ast_websocket object. TLS is
|
||||
supported as is basic authentication.
|
||||
* An observer can be registered to receive notification of loaded or reloaded
|
||||
client objects.
|
||||
* An API is provided to compare an existing client object to one just
|
||||
reloaded and return the fields that were changed. The caller can then decide
|
||||
what action to take based on which fields changed.
|
||||
|
||||
Also as part of thie commit, several sorcery convenience macros were created
|
||||
to make registering common object fields easier.
|
||||
|
||||
UserNote: A new module "res_websocket_client" and config file
|
||||
"websocket_client.conf" have been added to support several upcoming new
|
||||
capabilities that need common websocket client configuration.
|
||||
|
||||
|
||||
#### asterisk.c: Add option to restrict shell access from remote consoles.
|
||||
Author: George Joseph
|
||||
Date: 2025-05-19
|
||||
|
||||
UserNote: A new asterisk.conf option 'disable_remote_console_shell' has
|
||||
been added that, when set, will prevent remote consoles from executing
|
||||
shell commands using the '!' prefix.
|
||||
|
||||
Resolves: #GHSA-c7p6-7mvq-8jq2
|
||||
|
||||
#### frame.c: validate frame data length is less than samples when adjusting volume
|
||||
Author: mkmer
|
||||
Date: 2025-05-12
|
||||
|
||||
Resolves: #1230
|
||||
|
||||
#### res_audiosocket.c: Add retry mechanism for reading data from AudioSocket
|
||||
Author: Sven Kube
|
||||
Date: 2025-05-13
|
||||
|
||||
The added retry mechanism addresses an issue that arises when fragmented TCP
|
||||
packets are received, each containing only a portion of an AudioSocket packet.
|
||||
This situation can occur if the external service sending the AudioSocket data
|
||||
has Nagle's algorithm enabled.
|
||||
|
||||
|
||||
#### res_audiosocket.c: Set the TCP_NODELAY socket option
|
||||
Author: Sven Kube
|
||||
Date: 2025-05-13
|
||||
|
||||
Disable Nagle's algorithm by setting the TCP_NODELAY socket option.
|
||||
This reduces latency by preventing delays caused by packet buffering.
|
||||
|
||||
|
||||
#### menuselect: Fix GTK menu callbacks for Fedora 42 compatibility
|
||||
Author: Thomas B. Clark
|
||||
Date: 2025-05-12
|
||||
|
||||
This patch resolves a build failure in `menuselect_gtk.c` when running
|
||||
`make menuconfig` on Fedora 42. The new version of GTK introduced stricter
|
||||
type checking for callback signatures.
|
||||
|
||||
Changes include:
|
||||
- Add wrapper functions to match the expected `void (*)(void)` signature.
|
||||
- Update `menu_items` array to use these wrappers.
|
||||
|
||||
Fixes: #1243
|
||||
|
||||
#### jansson: Upgrade version to jansson 2.14.1
|
||||
Author: Stanislav Abramenkov
|
||||
Date: 2025-03-24
|
||||
|
||||
UpgradeNote: jansson has been upgraded to 2.14.1. For more
|
||||
information visit jansson Github page: https://github.com/akheron/jansson/releases/tag/v2.14.1
|
||||
|
||||
Resolves: #1178
|
||||
|
||||
#### pjproject: Increase maximum SDP formats and attribute limits
|
||||
Author: Joe Searle
|
||||
Date: 2025-05-15
|
||||
|
||||
Since Chrome 136, using Windows, when initiating a video call the INVITE SDP exceeds the maximum number of allowed attributes, resulting in the INVITE being rejected. This increases the attribute limit and the number of formats allowed when using bundled pjproject.
|
||||
|
||||
Fixes: #1240
|
||||
|
||||
#### manager.c: Invalid ref-counting when purging events
|
||||
Author: Nathan Monfils
|
||||
Date: 2025-05-05
|
||||
|
||||
We have a use-case where we generate a *lot* of events on the AMI, and
|
||||
then when doing `manager show eventq` we would see some events which
|
||||
would linger for hours or days in there. Obviously something was leaking.
|
||||
Testing allowed us to track down this logic bug in the ref-counting on
|
||||
the event purge.
|
||||
|
||||
Reproducing the bug was not super trivial, we managed to do it in a
|
||||
production-like load testing environment with multiple AMI consumers.
|
||||
|
||||
The race condition itself:
|
||||
|
||||
1. something allocates and links `session`
|
||||
2. `purge_sessions` iterates over that `session` (takes ref)
|
||||
3. `purge_session` correctly de-referencess that session
|
||||
4. `purge_session` re-evaluates the while() loop, taking a reference
|
||||
5. `purge_session` exits (`n_max > 0` is false)
|
||||
6. whatever allocated the `session` deallocates it, but a reference is
|
||||
now lost since we exited the `while` loop before de-referencing.
|
||||
7. since the destructor is never called, the session->last_ev->usecount
|
||||
is never decremented, leading to events lingering in the queue
|
||||
|
||||
The impact of this bug does not seem major. The events are small and do
|
||||
not seem, from our testing, to be causing meaningful additional CPU
|
||||
usage. Mainly we wanted to fix this issue because we are internally
|
||||
adding prometheus metrics to the eventq and those leaked events were
|
||||
causing the metrics to show garbage data.
|
||||
|
||||
|
||||
#### res_pjsip_nat.c: Do not overwrite transfer host
|
||||
Author: Mike Bradeen
|
||||
Date: 2025-05-08
|
||||
|
||||
When a call is transfered via dialplan behind a NAT, the
|
||||
host portion of the Contact header in the 302 will no longer
|
||||
be over-written with the external NAT IP and will retain the
|
||||
hostname.
|
||||
|
||||
Fixes: #1141
|
||||
|
||||
#### chan_pjsip: Serialize INVITE creation on DTMF attended transfer
|
||||
Author: Mike Bradeen
|
||||
Date: 2025-05-05
|
||||
|
||||
When a call is transfered via DTMF feature code, the Transfer Target and
|
||||
Transferer are bridged immediately. This opens the possibilty of a race
|
||||
condition between the creation of an INVITE and the bridge induced colp
|
||||
update that can result in the set caller ID being over-written with the
|
||||
transferer's default info.
|
||||
|
||||
Fixes: #1234
|
||||
|
||||
#### sig_analog: Add Call Waiting Deluxe support.
|
||||
Author: Naveen Albert
|
||||
Date: 2023-08-24
|
||||
|
||||
Adds support for Call Waiting Deluxe options to enhance
|
||||
the current call waiting feature.
|
||||
|
||||
As part of this change, a mechanism is also added that
|
||||
allows a channel driver to queue an audio file for Dial()
|
||||
to play, which is necessary for the announcement function.
|
||||
|
||||
ASTERISK-30373 #close
|
||||
|
||||
Resolves: #271
|
||||
|
||||
UserNote: Call Waiting Deluxe can now be enabled for FXS channels
|
||||
by enabling its corresponding option.
|
||||
|
||||
|
||||
#### app_sms: Ignore false positive vectorization warning.
|
||||
Author: Naveen Albert
|
||||
Date: 2025-01-24
|
||||
|
||||
Ignore gcc warning about writing 32 bytes into a region of size 6,
|
||||
since we check that we don't go out of bounds for each byte.
|
||||
This is due to a vectorization bug in gcc 15, stemming from
|
||||
gcc commit 68326d5d1a593dc0bf098c03aac25916168bc5a9.
|
||||
|
||||
Resolves: #1088
|
||||
|
||||
#### lock.h: Add include for string.h when DEBUG_THREADS is defined.
|
||||
Author: George Joseph
|
||||
Date: 2025-05-02
|
||||
|
||||
When DEBUG_THREADS is defined, lock.h uses strerror(), which is defined
|
||||
in the libc string.h file, to print warning messages. If the including
|
||||
source file doesn't include string.h then strerror() won't be found and
|
||||
and compile errors will be thrown. Since lock.h depends on this, string.h
|
||||
is now included from there if DEBUG_THREADS is defined. This way, including
|
||||
source files don't have to worry about it.
|
||||
|
||||
|
||||
#### Alternate Channel Storage Backends
|
||||
Author: George Joseph
|
||||
Date: 2024-12-31
|
||||
|
||||
Full details: http://s.asterisk.net/dc679ec3
|
||||
|
||||
The previous proof-of-concept showed that the cpp_map_name_id alternate
|
||||
storage backed performed better than all the others so this final PR
|
||||
adds only that option. You still need to enable it in menuselect under
|
||||
the "Alternate Channel Storage Backends" category.
|
||||
|
||||
To select which one is used at runtime, set the "channel_storage_backend"
|
||||
option in asterisk.conf to one of the values described in
|
||||
asterisk.conf.sample. The default remains "ao2_legacy".
|
||||
|
||||
UpgradeNote: With this release, you can now select an alternate channel
|
||||
storage backend based on C++ Maps. Using the new backend may increase
|
||||
performance and reduce the chances of deadlocks on heavily loaded systems.
|
||||
For more information, see http://s.asterisk.net/dc679ec3
|
||||
|
||||
@@ -1,78 +0,0 @@
|
||||
<html><head><title>ChangeLog for asterisk-20.15.1</title></head><body>
|
||||
<h2>Change Log for Release asterisk-20.15.1</h2>
|
||||
<h3>Links:</h3>
|
||||
<ul>
|
||||
<li><a href="https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-20.15.1.html">Full ChangeLog</a> </li>
|
||||
<li><a href="https://github.com/asterisk/asterisk/compare/20.15.0...20.15.1">GitHub Diff</a> </li>
|
||||
<li><a href="https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20.15.1.tar.gz">Tarball</a> </li>
|
||||
<li><a href="https://downloads.asterisk.org/pub/telephony/asterisk">Downloads</a> </li>
|
||||
</ul>
|
||||
<h3>Summary:</h3>
|
||||
<ul>
|
||||
<li>Commits: 2</li>
|
||||
<li>Commit Authors: 2</li>
|
||||
<li>Issues Resolved: 0</li>
|
||||
<li>Security Advisories Resolved: 2</li>
|
||||
<li><a href="https://github.com/asterisk/asterisk/security/advisories/GHSA-mrq5-74j5-f5cr">GHSA-mrq5-74j5-f5cr</a>: Remote DoS and possible RCE in asterisk/res/res_stir_shaken/verification.c</li>
|
||||
<li><a href="https://github.com/asterisk/asterisk/security/advisories/GHSA-v9q8-9j8m-5xwp">GHSA-v9q8-9j8m-5xwp</a>: Uncontrolled Search-Path Element in safe_asterisk script may allow local privilege escalation.</li>
|
||||
</ul>
|
||||
<h3>User Notes:</h3>
|
||||
<h3>Upgrade Notes:</h3>
|
||||
<ul>
|
||||
<li>
|
||||
<h4>safe_asterisk: Add ownership checks for /etc/asterisk/startup.d and its files.</h4>
|
||||
The safe_asterisk script now checks that, if it was run by the
|
||||
root user, the /etc/asterisk/startup.d directory and all the files it contains
|
||||
are owned by root. If the checks fail, safe_asterisk will exit with an error
|
||||
and Asterisk will not be started. Additionally, the default logging
|
||||
destination is now stderr instead of tty "9" which probably won't exist
|
||||
in modern systems.</li>
|
||||
</ul>
|
||||
<h3>Developer Notes:</h3>
|
||||
<h3>Commit Authors:</h3>
|
||||
<ul>
|
||||
<li>George Joseph: (1)</li>
|
||||
<li>ThatTotallyRealMyth: (1)</li>
|
||||
</ul>
|
||||
<h2>Issue and Commit Detail:</h2>
|
||||
<h3>Closed Issues:</h3>
|
||||
<ul>
|
||||
<li>!GHSA-mrq5-74j5-f5cr: Remote DoS and possible RCE in asterisk/res/res_stir_shaken/verification.c</li>
|
||||
<li>!GHSA-v9q8-9j8m-5xwp: Uncontrolled Search-Path Element in safe_asterisk script may allow local privilege escalation.</li>
|
||||
</ul>
|
||||
<h3>Commits By Author:</h3>
|
||||
<ul>
|
||||
<li>
|
||||
<h4>George Joseph (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<p>res_stir_shaken: Test for missing semicolon in Identity header.</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>ThatTotallyRealMyth (1):</h4>
|
||||
</li>
|
||||
<li>safe_asterisk: Add ownership checks for /etc/asterisk/startup.d and its files.</li>
|
||||
</ul>
|
||||
<h3>Commit List:</h3>
|
||||
<ul>
|
||||
<li>safe_asterisk: Add ownership checks for /etc/asterisk/startup.d and its files.</li>
|
||||
<li>res_stir_shaken: Test for missing semicolon in Identity header.</li>
|
||||
</ul>
|
||||
<h3>Commit Details:</h3>
|
||||
<h4>safe_asterisk: Add ownership checks for /etc/asterisk/startup.d and its files.</h4>
|
||||
<p>Author: ThatTotallyRealMyth
|
||||
Date: 2025-06-10</p>
|
||||
<p>UpgradeNote: The safe_asterisk script now checks that, if it was run by the
|
||||
root user, the /etc/asterisk/startup.d directory and all the files it contains
|
||||
are owned by root. If the checks fail, safe_asterisk will exit with an error
|
||||
and Asterisk will not be started. Additionally, the default logging
|
||||
destination is now stderr instead of tty "9" which probably won't exist
|
||||
in modern systems.</p>
|
||||
<p>Resolves: #GHSA-v9q8-9j8m-5xwp</p>
|
||||
<h4>res_stir_shaken: Test for missing semicolon in Identity header.</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2025-07-31</p>
|
||||
<p>ast_stir_shaken_vs_verify() now makes sure there's a semicolon in
|
||||
the Identity header to prevent a possible segfault.</p>
|
||||
<p>Resolves: #GHSA-mrq5-74j5-f5cr</p>
|
||||
</body></html>
|
||||
@@ -1,86 +0,0 @@
|
||||
|
||||
## Change Log for Release asterisk-20.15.1
|
||||
|
||||
### Links:
|
||||
|
||||
- [Full ChangeLog](https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-20.15.1.html)
|
||||
- [GitHub Diff](https://github.com/asterisk/asterisk/compare/20.15.0...20.15.1)
|
||||
- [Tarball](https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20.15.1.tar.gz)
|
||||
- [Downloads](https://downloads.asterisk.org/pub/telephony/asterisk)
|
||||
|
||||
### Summary:
|
||||
|
||||
- Commits: 2
|
||||
- Commit Authors: 2
|
||||
- Issues Resolved: 0
|
||||
- Security Advisories Resolved: 2
|
||||
- [GHSA-mrq5-74j5-f5cr](https://github.com/asterisk/asterisk/security/advisories/GHSA-mrq5-74j5-f5cr): Remote DoS and possible RCE in asterisk/res/res_stir_shaken/verification.c
|
||||
- [GHSA-v9q8-9j8m-5xwp](https://github.com/asterisk/asterisk/security/advisories/GHSA-v9q8-9j8m-5xwp): Uncontrolled Search-Path Element in safe_asterisk script may allow local privilege escalation.
|
||||
|
||||
### User Notes:
|
||||
|
||||
|
||||
### Upgrade Notes:
|
||||
|
||||
- #### safe_asterisk: Add ownership checks for /etc/asterisk/startup.d and its files.
|
||||
The safe_asterisk script now checks that, if it was run by the
|
||||
root user, the /etc/asterisk/startup.d directory and all the files it contains
|
||||
are owned by root. If the checks fail, safe_asterisk will exit with an error
|
||||
and Asterisk will not be started. Additionally, the default logging
|
||||
destination is now stderr instead of tty "9" which probably won't exist
|
||||
in modern systems.
|
||||
|
||||
|
||||
### Developer Notes:
|
||||
|
||||
|
||||
### Commit Authors:
|
||||
|
||||
- George Joseph: (1)
|
||||
- ThatTotallyRealMyth: (1)
|
||||
|
||||
## Issue and Commit Detail:
|
||||
|
||||
### Closed Issues:
|
||||
|
||||
- !GHSA-mrq5-74j5-f5cr: Remote DoS and possible RCE in asterisk/res/res_stir_shaken/verification.c
|
||||
- !GHSA-v9q8-9j8m-5xwp: Uncontrolled Search-Path Element in safe_asterisk script may allow local privilege escalation.
|
||||
|
||||
### Commits By Author:
|
||||
|
||||
- #### George Joseph (1):
|
||||
- res_stir_shaken: Test for missing semicolon in Identity header.
|
||||
|
||||
- #### ThatTotallyRealMyth (1):
|
||||
- safe_asterisk: Add ownership checks for /etc/asterisk/startup.d and its files.
|
||||
|
||||
|
||||
### Commit List:
|
||||
|
||||
- safe_asterisk: Add ownership checks for /etc/asterisk/startup.d and its files.
|
||||
- res_stir_shaken: Test for missing semicolon in Identity header.
|
||||
|
||||
### Commit Details:
|
||||
|
||||
#### safe_asterisk: Add ownership checks for /etc/asterisk/startup.d and its files.
|
||||
Author: ThatTotallyRealMyth
|
||||
Date: 2025-06-10
|
||||
|
||||
UpgradeNote: The safe_asterisk script now checks that, if it was run by the
|
||||
root user, the /etc/asterisk/startup.d directory and all the files it contains
|
||||
are owned by root. If the checks fail, safe_asterisk will exit with an error
|
||||
and Asterisk will not be started. Additionally, the default logging
|
||||
destination is now stderr instead of tty "9" which probably won't exist
|
||||
in modern systems.
|
||||
|
||||
Resolves: #GHSA-v9q8-9j8m-5xwp
|
||||
|
||||
#### res_stir_shaken: Test for missing semicolon in Identity header.
|
||||
Author: George Joseph
|
||||
Date: 2025-07-31
|
||||
|
||||
ast_stir_shaken_vs_verify() now makes sure there's a semicolon in
|
||||
the Identity header to prevent a possible segfault.
|
||||
|
||||
Resolves: #GHSA-mrq5-74j5-f5cr
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
<html><head><title>ChangeLog for asterisk-20.15.2</title></head><body>
|
||||
<h2>Change Log for Release asterisk-20.15.2</h2>
|
||||
<h3>Links:</h3>
|
||||
<ul>
|
||||
<li><a href="https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-20.15.2.html">Full ChangeLog</a> </li>
|
||||
<li><a href="https://github.com/asterisk/asterisk/compare/20.15.1...20.15.2">GitHub Diff</a> </li>
|
||||
<li><a href="https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20.15.2.tar.gz">Tarball</a> </li>
|
||||
<li><a href="https://downloads.asterisk.org/pub/telephony/asterisk">Downloads</a> </li>
|
||||
</ul>
|
||||
<h3>Summary:</h3>
|
||||
<ul>
|
||||
<li>Commits: 1</li>
|
||||
<li>Commit Authors: 1</li>
|
||||
<li>Issues Resolved: 0</li>
|
||||
<li>Security Advisories Resolved: 1</li>
|
||||
<li><a href="https://github.com/asterisk/asterisk/security/advisories/GHSA-64qc-9x89-rx5j">GHSA-64qc-9x89-rx5j</a>: A specifically malformed Authorization header in an incoming SIP request can cause Asterisk to crash</li>
|
||||
</ul>
|
||||
<h3>User Notes:</h3>
|
||||
<h3>Upgrade Notes:</h3>
|
||||
<h3>Developer Notes:</h3>
|
||||
<h3>Commit Authors:</h3>
|
||||
<ul>
|
||||
<li>George Joseph: (1)</li>
|
||||
</ul>
|
||||
<h2>Issue and Commit Detail:</h2>
|
||||
<h3>Closed Issues:</h3>
|
||||
<ul>
|
||||
<li>!GHSA-64qc-9x89-rx5j: A specifically malformed Authorization header in an incoming SIP request can cause Asterisk to crash</li>
|
||||
</ul>
|
||||
<h3>Commits By Author:</h3>
|
||||
<ul>
|
||||
<li>
|
||||
<h4>George Joseph (1):</h4>
|
||||
</li>
|
||||
<li>res_pjsip_authenticator_digest: Fix SEGV if get_authorization_hdr returns NULL.</li>
|
||||
</ul>
|
||||
<h3>Commit List:</h3>
|
||||
<ul>
|
||||
<li>res_pjsip_authenticator_digest: Fix SEGV if get_authorization_hdr returns NULL.</li>
|
||||
</ul>
|
||||
<h3>Commit Details:</h3>
|
||||
<h4>res_pjsip_authenticator_digest: Fix SEGV if get_authorization_hdr returns NULL.</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2025-08-28</p>
|
||||
<p>In the highly-unlikely event that get_authorization_hdr() couldn't find an
|
||||
Authorization header in a request, trying to get the digest algorithm
|
||||
would cauase a SEGV. We now check that we have an auth header that matches
|
||||
the realm before trying to get the algorithm from it.</p>
|
||||
<p>Resolves: #GHSA-64qc-9x89-rx5j</p>
|
||||
</body></html>
|
||||
@@ -1,60 +0,0 @@
|
||||
|
||||
## Change Log for Release asterisk-20.15.2
|
||||
|
||||
### Links:
|
||||
|
||||
- [Full ChangeLog](https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-20.15.2.html)
|
||||
- [GitHub Diff](https://github.com/asterisk/asterisk/compare/20.15.1...20.15.2)
|
||||
- [Tarball](https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20.15.2.tar.gz)
|
||||
- [Downloads](https://downloads.asterisk.org/pub/telephony/asterisk)
|
||||
|
||||
### Summary:
|
||||
|
||||
- Commits: 1
|
||||
- Commit Authors: 1
|
||||
- Issues Resolved: 0
|
||||
- Security Advisories Resolved: 1
|
||||
- [GHSA-64qc-9x89-rx5j](https://github.com/asterisk/asterisk/security/advisories/GHSA-64qc-9x89-rx5j): A specifically malformed Authorization header in an incoming SIP request can cause Asterisk to crash
|
||||
|
||||
### User Notes:
|
||||
|
||||
|
||||
### Upgrade Notes:
|
||||
|
||||
|
||||
### Developer Notes:
|
||||
|
||||
|
||||
### Commit Authors:
|
||||
|
||||
- George Joseph: (1)
|
||||
|
||||
## Issue and Commit Detail:
|
||||
|
||||
### Closed Issues:
|
||||
|
||||
- !GHSA-64qc-9x89-rx5j: A specifically malformed Authorization header in an incoming SIP request can cause Asterisk to crash
|
||||
|
||||
### Commits By Author:
|
||||
|
||||
- #### George Joseph (1):
|
||||
- res_pjsip_authenticator_digest: Fix SEGV if get_authorization_hdr returns NULL.
|
||||
|
||||
|
||||
### Commit List:
|
||||
|
||||
- res_pjsip_authenticator_digest: Fix SEGV if get_authorization_hdr returns NULL.
|
||||
|
||||
### Commit Details:
|
||||
|
||||
#### res_pjsip_authenticator_digest: Fix SEGV if get_authorization_hdr returns NULL.
|
||||
Author: George Joseph
|
||||
Date: 2025-08-28
|
||||
|
||||
In the highly-unlikely event that get_authorization_hdr() couldn't find an
|
||||
Authorization header in a request, trying to get the digest algorithm
|
||||
would cauase a SEGV. We now check that we have an auth header that matches
|
||||
the realm before trying to get the algorithm from it.
|
||||
|
||||
Resolves: #GHSA-64qc-9x89-rx5j
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,775 +0,0 @@
|
||||
<html><head><title>ChangeLog for asterisk-20.17.0</title></head><body>
|
||||
<h2>Change Log for Release asterisk-20.17.0</h2>
|
||||
<h3>Links:</h3>
|
||||
<ul>
|
||||
<li><a href="https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-20.17.0.html">Full ChangeLog</a> </li>
|
||||
<li><a href="https://github.com/asterisk/asterisk/compare/20.16.0...20.17.0">GitHub Diff</a> </li>
|
||||
<li><a href="https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20.17.0.tar.gz">Tarball</a> </li>
|
||||
<li><a href="https://downloads.asterisk.org/pub/telephony/asterisk">Downloads</a> </li>
|
||||
</ul>
|
||||
<h3>Summary:</h3>
|
||||
<ul>
|
||||
<li>Commits: 50</li>
|
||||
<li>Commit Authors: 16</li>
|
||||
<li>Issues Resolved: 34</li>
|
||||
<li>Security Advisories Resolved: 0</li>
|
||||
</ul>
|
||||
<h3>User Notes:</h3>
|
||||
<ul>
|
||||
<li>
|
||||
<h4>res_stir_shaken: Add STIR_SHAKEN_ATTESTATION dialplan function.</h4>
|
||||
<p>The STIR_SHAKEN_ATTESTATION dialplan function has been added
|
||||
which will allow suppressing attestation on a call-by-call basis
|
||||
regardless of the profile attached to the outgoing endpoint.</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>func_channel: Allow R/W of ADSI CPE capability setting.</h4>
|
||||
<p>CHANNEL(adsicpe) can now be read or written to change
|
||||
the channels' ADSI CPE capability setting.</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>func_hangupcause.c: Add access to Reason headers via HANGUPCAUSE()</h4>
|
||||
<p>Added a new option to HANGUPCAUSE to access additional
|
||||
information about hangup reason. Reason headers from pjsip
|
||||
could be read using 'tech_extended' cause type.</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>func_math: Add DIGIT_SUM function.</h4>
|
||||
<p>The DIGIT_SUM function can be used to return the digit sum of
|
||||
a number.</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>app_sf: Add post-digit timer option to ReceiveSF.</h4>
|
||||
<p>The 't' option for ReceiveSF now allows for a timer since
|
||||
the last digit received, in addition to the number-wide timeout.</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>app_dial: Allow fractional seconds for dial timeouts.</h4>
|
||||
<p>The answer and progress dial timeouts now have millisecond
|
||||
precision, instead of having to be whole numbers.</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>chan_dahdi: Add DAHDI_CHANNEL function.</h4>
|
||||
<p>The DAHDI_CHANNEL function allows for getting/setting
|
||||
certain properties about DAHDI channels from the dialplan.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Upgrade Notes:</h3>
|
||||
<ul>
|
||||
<li>
|
||||
<h4>res_audiosocket: add message types for all slin sample rates</h4>
|
||||
<p>New audiosocket message types 0x11 - 0x18 has been added
|
||||
for slin12, slin16, slin24, slin32, slin44, slin48, slin96, and
|
||||
slin192 audio. External applications using audiosocket may need to be
|
||||
updated to support these message types if the audiosocket channel is
|
||||
created with one of these audio formats.</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>taskpool: Add taskpool API, switch Stasis to using it.</h4>
|
||||
<p>The threadpool_* options in stasis.conf have now been deprecated
|
||||
though they continue to be read and used. They have been replaced with taskpool
|
||||
options that give greater control over the underlying taskpool used for stasis.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Developer Notes:</h3>
|
||||
<ul>
|
||||
<li>
|
||||
<h4>chan_pjsip: Add technology-specific off-nominal hangup cause to events.</h4>
|
||||
<p>A "tech_cause" parameter has been added to the
|
||||
ChannelHangupRequest and ChannelDestroyed ARI event messages and a "TechCause"
|
||||
parameter has been added to the HangupRequest, SoftHangupRequest and Hangup
|
||||
AMI event messages. For chan_pjsip, these will be set to the last SIP
|
||||
response status code for off-nominally terminated calls. The parameter is
|
||||
suppressed for nominal termination.</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>ARI: The bridges play and record APIs now handle sample rates > 8K correctly.</h4>
|
||||
<p>The ARI /bridges/play and /bridges/record REST APIs have new
|
||||
parameters that allow the caller to specify the format to be used on the
|
||||
"Announcer" and "Recorder" channels respecitvely.</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>taskpool: Add taskpool API, switch Stasis to using it.</h4>
|
||||
<p>The taskpool API has been added for common usage of a
|
||||
pool of taskprocessors. It is suggested to use this API instead of the
|
||||
threadpool+taskprocessor approach.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Commit Authors:</h3>
|
||||
<ul>
|
||||
<li>Anthony Minessale: (1)</li>
|
||||
<li>Bastian Triller: (1)</li>
|
||||
<li>Ben Ford: (1)</li>
|
||||
<li>Christoph Moench-Tegeder: (1)</li>
|
||||
<li>George Joseph: (9)</li>
|
||||
<li>Igor Goncharovsky: (1)</li>
|
||||
<li>Joshua C. Colp: (6)</li>
|
||||
<li>Max Grobecker: (1)</li>
|
||||
<li>Nathan Monfils: (1)</li>
|
||||
<li>Naveen Albert: (17)</li>
|
||||
<li>Roman Pertsev: (1)</li>
|
||||
<li>Sean Bright: (3)</li>
|
||||
<li>Sven Kube: (3)</li>
|
||||
<li>Tinet-mucw: (1)</li>
|
||||
<li>gauravs456: (1)</li>
|
||||
<li>phoneben: (2)</li>
|
||||
</ul>
|
||||
<h2>Issue and Commit Detail:</h2>
|
||||
<h3>Closed Issues:</h3>
|
||||
<ul>
|
||||
<li>781: [improvement]: Allow call by call disabling Stir/Shaken header inclusion </li>
|
||||
<li>1340: [bug]: comfort noise packet corrupted</li>
|
||||
<li>1419: [bug]: static code analysis issues in app_adsiprog.c</li>
|
||||
<li>1422: [bug]: static code analysis issues in apps/app_externalivr.c</li>
|
||||
<li>1425: [bug]: static code analysis issues in apps/app_queue.c</li>
|
||||
<li>1434: [improvement]: pbx_variables: Create real channel for dialplan eval CLI command</li>
|
||||
<li>1436: [improvement]: res_cliexec: Avoid unnecessary cast to char*</li>
|
||||
<li>1455: [new-feature]: chan_dahdi: Add DAHDI_CHANNEL function</li>
|
||||
<li>1467: [bug]: Crash in res_pjsip_refer during REFER progress teardown with PJSIP_TRANSFER_HANDLING(ari-only)</li>
|
||||
<li>1478: [improvement]: Stasis threadpool -> taskpool</li>
|
||||
<li>1479: [bug]: The ARI bridge play and record APIs limit audio bandwidth by forcing the slin8 format.</li>
|
||||
<li>1483: [improvement]: sig_analog: Eliminate possible timeout for Last Number Redial</li>
|
||||
<li>1485: [improvement]: func_scramble: Add example to XML documentation.</li>
|
||||
<li>1487: [improvement]: app_dial: Allow partial seconds to be used for dial timeouts</li>
|
||||
<li>1489: [improvement]: config_options.c: Improve misleading error message</li>
|
||||
<li>1491: [bug]: Segfault: <code>channelstorage_cpp</code> fast lookup without lock (<code>get_by_name_exact</code>/<code>get_by_uniqueid</code>) leads to UAF during hangup</li>
|
||||
<li>1493: [new-feature]: app_sf: Add post-digit timer option</li>
|
||||
<li>1496: [improvement]: dsp.c: Minor fixes to debug log messages</li>
|
||||
<li>1499: [new-feature]: func_math: Add function to return the digit sum</li>
|
||||
<li>1505: [improvement]: res_fax: Add XML documentation for channel variables</li>
|
||||
<li>1507: [improvement]: res_tonedetect: Minor formatting issue in documentation</li>
|
||||
<li>1509: [improvement]: res_fax.c — log debug error as debug, not regular log</li>
|
||||
<li>1510: [new-feature]: sig_analog: Allow '#' to end the inter-digit timeout when dialing.</li>
|
||||
<li>1514: [improvement]: func_channel: Allow R/W of ADSI CPE capability setting.</li>
|
||||
<li>1517: [improvement]: core_unreal: Preserve ADSI capability when dialing Local channels</li>
|
||||
<li>1519: [improvement]: app_dial / func_callerid: DNIS information is not propagated by Dial</li>
|
||||
<li>1525: [bug]: chan_websocket: fix use of raw payload variable for string comparison in process_text_message</li>
|
||||
<li>1535: [bug]: chan_pjsip changes SSRC on WebRTC channels, which is unsupported by some browsers</li>
|
||||
<li>1536: [bug]: asterisk -rx connects to console instead of executing a command</li>
|
||||
<li>1539: [bug]: safe_asterisk without TTY doesn't log to file</li>
|
||||
<li>1544: [improvement]: While Receiving the MediaConnect Message Using External Media Over websocket ChannelID is Details are missing</li>
|
||||
<li>1554: [bug]: safe_asterisk recurses into subdirectories of startup.d after f97361</li>
|
||||
<li>1559: [improvement]: Handle TLS handshake attacks in order to resolve the issue of exceeding the maximum number of HTTPS sessions.</li>
|
||||
<li>1578: [bug]: Deadlock with externalMedia custom channel id and cpp map channel backend</li>
|
||||
</ul>
|
||||
<h3>Commits By Author:</h3>
|
||||
<ul>
|
||||
<li>
|
||||
<h4>Anthony Minessale (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Bastian Triller (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Ben Ford (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Christoph Moench-Tegeder (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<h4>George Joseph (9):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Igor Goncharovsky (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Joshua C. Colp (6):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Max Grobecker (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Nathan Monfils (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Naveen Albert (17):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Roman Pertsev (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Sean Bright (3):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Sven Kube (3):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Tinet-mucw (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<h4>gauravs456 (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<h4>phoneben (2):</h4>
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Commit List:</h3>
|
||||
<ul>
|
||||
<li>channelstorage: Allow storage driver read locking to be skipped.</li>
|
||||
<li>res_audiosocket: fix temporarily unavailable</li>
|
||||
<li>safe_asterisk: Resolve a POSIX sh problem and restore globbing behavior.</li>
|
||||
<li>res_stir_shaken: Add STIR_SHAKEN_ATTESTATION dialplan function.</li>
|
||||
<li>iostream.c: Handle TLS handshake attacks in order to resolve the issue of exceeding the maximum number of HTTPS sessions.</li>
|
||||
<li>chan_pjsip: Disable SSRC change for WebRTC endpoints.</li>
|
||||
<li>chan_websocket: Add channel_id to MEDIA_START, DRIVER_STATUS and DTMF_END events.</li>
|
||||
<li>safe_asterisk: Fix logging and sorting issue.</li>
|
||||
<li>Fix Endianness detection in utils.h for non-Linux</li>
|
||||
<li>devicestate: Don't publish redundant device state messages.</li>
|
||||
<li>chan_pjsip: Add technology-specific off-nominal hangup cause to events.</li>
|
||||
<li>res_audiosocket: add message types for all slin sample rates</li>
|
||||
<li>res_fax.c: lower FAXOPT read warning to debug level</li>
|
||||
<li>endpoints: Remove need for stasis subscription.</li>
|
||||
<li>app_queue: Allow stasis message filtering to work.</li>
|
||||
<li>taskpool: Fix some references to threadpool that should be taskpool.</li>
|
||||
<li>Update contact information for anthm</li>
|
||||
<li>chan_websocket.c: Change payload references to command instead.</li>
|
||||
<li>func_callerid: Document limitation of DNID fields.</li>
|
||||
<li>func_channel: Allow R/W of ADSI CPE capability setting.</li>
|
||||
<li>core_unreal: Preserve ADSI capability when dialing Local channels.</li>
|
||||
<li>func_hangupcause.c: Add access to Reason headers via HANGUPCAUSE()</li>
|
||||
<li>sig_analog: Allow '#' to end the inter-digit timeout when dialing.</li>
|
||||
<li>func_math: Add DIGIT_SUM function.</li>
|
||||
<li>app_sf: Add post-digit timer option to ReceiveSF.</li>
|
||||
<li>res_tonedetect: Fix formatting of XML documentation.</li>
|
||||
<li>res_fax: Add XML documentation for channel variables.</li>
|
||||
<li>channelstorage_cpp_map_name_id: Add read locking around retrievals.</li>
|
||||
<li>app_dial: Allow fractional seconds for dial timeouts.</li>
|
||||
<li>dsp.c: Make minor fixes to debug log messages.</li>
|
||||
<li>config_options.c: Improve misleading warning.</li>
|
||||
<li>func_scramble: Add example to XML documentation.</li>
|
||||
<li>sig_analog: Eliminate potential timeout with Last Number Redial.</li>
|
||||
<li>ARI: The bridges play and record APIs now handle sample rates > 8K correctly.</li>
|
||||
<li>res_pjsip_geolocation: Add support for Geolocation loc-src parameter</li>
|
||||
<li>sorcery: Move from threadpool to taskpool.</li>
|
||||
<li>stasis_channels.c: Make protocol_id optional to enable blind transfer via ari</li>
|
||||
<li>Fix some doxygen, typos and whitespace</li>
|
||||
<li>stasis_channels.c: Add null check for referred_by in ast_ari_transfer_message_create</li>
|
||||
<li>app_queue: Add NULL pointer checks in app_queue</li>
|
||||
<li>app_externalivr: Prevent out-of-bounds read during argument processing.</li>
|
||||
<li>chan_dahdi: Add DAHDI_CHANNEL function.</li>
|
||||
<li>taskpool: Update versions for taskpool stasis options.</li>
|
||||
<li>taskpool: Add taskpool API, switch Stasis to using it.</li>
|
||||
<li>app_adsiprog: Fix possible NULL dereference.</li>
|
||||
<li>manager.c: Fix presencestate object leak</li>
|
||||
<li>audiohook.c: Ensure correct AO2 reference is dereffed.</li>
|
||||
<li>res_cliexec: Remove unnecessary casts to char*.</li>
|
||||
<li>rtp_engine.c: Add exception for comfort noise payload.</li>
|
||||
<li>pbx_variables.c: Create real channel for "dialplan eval function".</li>
|
||||
</ul>
|
||||
<h3>Commit Details:</h3>
|
||||
<h4>channelstorage: Allow storage driver read locking to be skipped.</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2025-11-06</p>
|
||||
<p>After PR #1498 added read locking to channelstorage_cpp_map_name_id, if ARI
|
||||
channels/externalMedia was called with a custom channel id AND the
|
||||
cpp_map_name_id channel storage backend is in use, a deadlock can occur when
|
||||
hanging up the channel. It's actually triggered in
|
||||
channel.c:__ast_channel_alloc_ap() when it gets a write lock on the
|
||||
channelstorage driver then subsequently does a lookup for channel uniqueid
|
||||
which now does a read lock. This is an invalid operation and causes the lock
|
||||
state to get "bad". When the channels try to hang up, a write lock is
|
||||
attempted again which hangs and causes the deadlock.</p>
|
||||
<p>Now instead of the cpp_map_name_id channelstorage driver "get" APIs
|
||||
automatically performing a read lock, they take a "lock" parameter which
|
||||
allows a caller who already has a write lock to indicate that the "get" API
|
||||
must not attempt its own lock. This prevents the state from getting mesed up.</p>
|
||||
<p>The ao2_legacy driver uses the ao2 container's recursive mutex so doesn't
|
||||
have this issue but since it also implements the common channelstorage API,
|
||||
it needed its "get" implementations updated to take the lock parameter. They
|
||||
just don't use it.</p>
|
||||
<p>Resolves: #1578</p>
|
||||
<h4>res_audiosocket: fix temporarily unavailable</h4>
|
||||
<p>Author: Roman Pertsev
|
||||
Date: 2025-10-07</p>
|
||||
<p>Operations on non-blocking sockets may return a resource temporarily unavailable error (EAGAIN or EWOULDBLOCK). This is not a fatal error but a normal condition indicating that the operation would block.</p>
|
||||
<p>This patch corrects the handling of this case. Instead of incorrectly treating it as a reason to terminate the connection, the code now waits for data to arrive on the socket.</p>
|
||||
<h4>safe_asterisk: Resolve a POSIX sh problem and restore globbing behavior.</h4>
|
||||
<p>Author: Sean Bright
|
||||
Date: 2025-10-22</p>
|
||||
<ul>
|
||||
<li>Using <code>==</code> with the POSIX sh <code>test</code> utility is UB.</li>
|
||||
<li>Switch back to using globs instead of using <code>$(find … | sort)</code>.</li>
|
||||
<li>Fix a missing redirect when checking for the OS type.</li>
|
||||
</ul>
|
||||
<p>Resolves: #1554</p>
|
||||
<h4>res_stir_shaken: Add STIR_SHAKEN_ATTESTATION dialplan function.</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2025-10-24</p>
|
||||
<p>Also...</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>Refactored the verification datastore process so instead of having
|
||||
a separate channel datastore for each verification result, there's only
|
||||
one channel datastore with a vector of results.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Refactored some log messages to include channel name and removed
|
||||
some that would be redundant if a memory allocation failed.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>Resolves: #781</p>
|
||||
<p>UserNote: The STIR_SHAKEN_ATTESTATION dialplan function has been added
|
||||
which will allow suppressing attestation on a call-by-call basis
|
||||
regardless of the profile attached to the outgoing endpoint.</p>
|
||||
<h4>iostream.c: Handle TLS handshake attacks in order to resolve the issue of exceeding the maximum number of HTTPS sessions.</h4>
|
||||
<p>Author: Tinet-mucw
|
||||
Date: 2025-10-26</p>
|
||||
<p>The TCP three-way handshake completes, but if the server is under a TLS handshake attack, asterisk will get stuck at SSL_do_handshake().
|
||||
In this case, a timeout mechanism should be set for the SSL/TLS handshake process to prevent indefinite waiting during the SSL handshake.</p>
|
||||
<p>Resolves: #1559</p>
|
||||
<h4>chan_pjsip: Disable SSRC change for WebRTC endpoints.</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2025-10-21</p>
|
||||
<p>Commit b333ee3b introduced a fix to chan_pjsip that addressed RTP issues with
|
||||
blind transfers and some SBCs. Unfortunately, the fix broke some WebRTC
|
||||
clients that are sensitive to SSRC changes and non-monotonic timestamps so
|
||||
the fix is now disabled for endpoints with the "bundle" parameter set to true.</p>
|
||||
<p>Resolves: #1535</p>
|
||||
<h4>chan_websocket: Add channel_id to MEDIA_START, DRIVER_STATUS and DTMF_END events.</h4>
|
||||
<p>Author: gauravs456
|
||||
Date: 2025-10-21</p>
|
||||
<p>Resolves: #1544</p>
|
||||
<h4>safe_asterisk: Fix logging and sorting issue.</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2025-10-17</p>
|
||||
<p>Re-enabled "TTY=9" which was erroneously disabled as part of a recent
|
||||
security fix and removed another logging "fix" that was added.</p>
|
||||
<p>Also added a sort to the "find" that enumerates the scripts to be sourced so
|
||||
they're sourced in the correct order.</p>
|
||||
<p>Resolves: #1539</p>
|
||||
<h4>Fix Endianness detection in utils.h for non-Linux</h4>
|
||||
<p>Author: Christoph Moench-Tegeder
|
||||
Date: 2025-10-19</p>
|
||||
<p>Commit 43bf8a4ded7a65203b766b91eaf8331a600e9d8d introduced endian
|
||||
dependend byte-swapping code in include/asterisk/utils.h, where the
|
||||
endianness was detected using the __BYTE_ORDER macro. This macro
|
||||
lives in endian.h, which on Linux is included implicitely (by the
|
||||
network-related headers, I think), but on FreeBSD the headers are
|
||||
laid out differently and we do not get __BYTE_ORDER the implicit way.</p>
|
||||
<p>Instead, this makes the usage of endian.h explicit by including it
|
||||
where we need it, and switches the BYTE_ORDER/*ENDIAN macros to the
|
||||
POSIX-defined ones (see
|
||||
https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/endian.h.html
|
||||
for standard compliance). Additionally, this adds a compile-time check
|
||||
for the endianness-logic: compilation will fail if neither big nor
|
||||
little endian can be detected.</p>
|
||||
<p>Fixes: #1536</p>
|
||||
<h4>devicestate: Don't publish redundant device state messages.</h4>
|
||||
<p>Author: Joshua C. Colp
|
||||
Date: 2025-10-17</p>
|
||||
<p>When publishing device state check the local cache for the
|
||||
existing device state. If the new device state is unchanged
|
||||
from the prior one, don't bother publishing the update. This
|
||||
can reduce the work done by consumers of device state, such
|
||||
as hints and app_queue, by not publishing a message to them.</p>
|
||||
<p>These messages would most often occur with devices that are
|
||||
seeing numerous simultaneous channels. The underlying device
|
||||
state would remain as in use throughout, but an update would
|
||||
be published as channels are created and hung up.</p>
|
||||
<h4>chan_pjsip: Add technology-specific off-nominal hangup cause to events.</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2025-10-14</p>
|
||||
<p>Although the ISDN/Q.850/Q.931 hangup cause code is already part of the ARI
|
||||
and AMI hangup and channel destroyed events, it can be helpful to know what
|
||||
the actual channel technology code was if the call was unsuccessful.
|
||||
For PJSIP, it's the SIP response code.</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>A new "tech_hangupcause" field was added to the ast_channel structure along
|
||||
with ast_channel_tech_hangupcause() and ast_channel_tech_hangupcause_set()
|
||||
functions. It should only be set for off-nominal terminations.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>chan_pjsip was modified to set the tech hangup cause in the
|
||||
chan_pjsip_hangup() and chan_pjsip_session_end() functions. This is a bit
|
||||
tricky because these two functions aren't always called in the same order.
|
||||
The channel that hangs up first will get chan_pjsip_session_end() called
|
||||
first which will trigger the core to call chan_pjsip_hangup() on itself,
|
||||
then call chan_pjsip_hangup() on the other channel. The other channel's
|
||||
chan_pjsip_session_end() function will get called last. Unfortunately,
|
||||
the other channel's HangupRequest events are sent before chan_pjsip has had a
|
||||
chance to set the tech hangupcause code so the HangupRequest events for that
|
||||
channel won't have the cause code set. The ChannelDestroyed and Hangup
|
||||
events however will have the code set for both channels.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>A new "tech_cause" field was added to the ast_channel_snapshot_hangup
|
||||
structure. This is a public structure so a bit of refactoring was needed to
|
||||
preserve ABI compatibility.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The ARI ChannelHangupRequest and ChannelDestroyed events were modified to
|
||||
include the "tech_cause" parameter in the JSON for off-nominal terminations.
|
||||
The parameter is suppressed for nominal termination.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The AMI SoftHangupRequest, HangupRequest and Hangup events were modified to
|
||||
include the "TechCause" parameter for off-nominal terminations. Like their ARI
|
||||
counterparts, the parameter is suppressed for nominal termination.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>DeveloperNote: A "tech_cause" parameter has been added to the
|
||||
ChannelHangupRequest and ChannelDestroyed ARI event messages and a "TechCause"
|
||||
parameter has been added to the HangupRequest, SoftHangupRequest and Hangup
|
||||
AMI event messages. For chan_pjsip, these will be set to the last SIP
|
||||
response status code for off-nominally terminated calls. The parameter is
|
||||
suppressed for nominal termination.</p>
|
||||
<h4>res_audiosocket: add message types for all slin sample rates</h4>
|
||||
<p>Author: Sven Kube
|
||||
Date: 2025-10-10</p>
|
||||
<p>Extend audiosocket messages with types 0x11 - 0x18 to create asterisk
|
||||
frames in slin12, slin16, slin24, slin32, slin44, slin48, slin96, and
|
||||
slin192 format, enabling the transmission of audio at a higher sample
|
||||
rates. For audiosocket messages sent by Asterisk, the message kind is
|
||||
determined by the format of the originating asterisk frame.</p>
|
||||
<p>UpgradeNote: New audiosocket message types 0x11 - 0x18 has been added
|
||||
for slin12, slin16, slin24, slin32, slin44, slin48, slin96, and
|
||||
slin192 audio. External applications using audiosocket may need to be
|
||||
updated to support these message types if the audiosocket channel is
|
||||
created with one of these audio formats.</p>
|
||||
<h4>res_fax.c: lower FAXOPT read warning to debug level</h4>
|
||||
<p>Author: phoneben
|
||||
Date: 2025-10-03</p>
|
||||
<p>Reading ${FAXOPT()} before a fax session is common in dialplans to check fax state.
|
||||
Currently this logs an error even when no fax datastore exists, creating excessive noise.
|
||||
Change these messages to ast_debug(3, …) so they appear only with debug enabled.</p>
|
||||
<p>Resolves: #1509</p>
|
||||
<h4>endpoints: Remove need for stasis subscription.</h4>
|
||||
<p>Author: Joshua C. Colp
|
||||
Date: 2025-10-10</p>
|
||||
<p>When an endpoint is created in the core of Asterisk a subscription
|
||||
was previously created alongside it to monitor any channels being
|
||||
destroyed that were related to it. This was done by receiving all
|
||||
channel snapshot updates for every channel and only reacting when
|
||||
it was indicated that the channel was dead.</p>
|
||||
<p>This change removes this logic and instead provides an API call
|
||||
for directly removing a channel from an endpoint. This is called
|
||||
when channels are destroyed. This operation is fast, so blocking
|
||||
the calling thread for a short period of time doesn't have any
|
||||
noticeable impact.</p>
|
||||
<h4>app_queue: Allow stasis message filtering to work.</h4>
|
||||
<p>Author: Joshua C. Colp
|
||||
Date: 2025-10-10</p>
|
||||
<p>The app_queue module subscribes on a per-dialed agent basis to both
|
||||
the bridge all and channel all topics to keep apprised of things going
|
||||
on involving them. This subscription has associated state that must
|
||||
be cleaned up when the subscription ends. This was done by setting
|
||||
a default router callback that only had logic to handle the case
|
||||
where the subscription ends. By using the default router callback
|
||||
all filtering for the subscription was disabled, causing unrelated
|
||||
messages to get published and handled by it.</p>
|
||||
<p>This change makes it so that an explicit route is added for the
|
||||
message type used for the message indicating the subscription has
|
||||
ended and removes the default router callback. This allows message
|
||||
filtering to occur on publishing reducing the messages to app_queue
|
||||
to only those it is interested in.</p>
|
||||
<h4>taskpool: Fix some references to threadpool that should be taskpool.</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2025-10-10</p>
|
||||
<p>Resolves: #1478</p>
|
||||
<h4>Update contact information for anthm</h4>
|
||||
<p>Author: Anthony Minessale
|
||||
Date: 2025-10-10</p>
|
||||
<h4>chan_websocket.c: Change payload references to command instead.</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2025-10-08</p>
|
||||
<p>Some of the tests in process_text_message() were still comparing to the
|
||||
websocket message payload instead of the "command" string.</p>
|
||||
<p>Resolves: #1525</p>
|
||||
<h4>func_callerid: Document limitation of DNID fields.</h4>
|
||||
<p>Author: Naveen Albert
|
||||
Date: 2025-10-06</p>
|
||||
<p>The Dial() application does not propagate DNID fields, which is counter
|
||||
to the behavior of the other Caller ID fields. This behavior is likely
|
||||
intentional since the use of Dial theoretically suggests a new dialed
|
||||
number, but document this caveat to inform users of it.</p>
|
||||
<p>Resolves: #1519</p>
|
||||
<h4>func_channel: Allow R/W of ADSI CPE capability setting.</h4>
|
||||
<p>Author: Naveen Albert
|
||||
Date: 2025-10-06</p>
|
||||
<p>Allow retrieving and setting the channel's ADSI capability from the
|
||||
dialplan.</p>
|
||||
<p>Resolves: #1514</p>
|
||||
<p>UserNote: CHANNEL(adsicpe) can now be read or written to change
|
||||
the channels' ADSI CPE capability setting.</p>
|
||||
<h4>core_unreal: Preserve ADSI capability when dialing Local channels.</h4>
|
||||
<p>Author: Naveen Albert
|
||||
Date: 2025-10-06</p>
|
||||
<p>Dial() already preserves the ADSI capability by copying it to the new
|
||||
channel, but since Local channel pairs consist of two channels, we
|
||||
also need to copy the capability to the second channel.</p>
|
||||
<p>Resolves: #1517</p>
|
||||
<h4>func_hangupcause.c: Add access to Reason headers via HANGUPCAUSE()</h4>
|
||||
<p>Author: Igor Goncharovsky
|
||||
Date: 2025-09-04</p>
|
||||
<p>As soon as SIP call may end with several Reason headers, we
|
||||
want to make all of them available through the HAGUPCAUSE() function.
|
||||
This implementation uses the same ao2 hash for cause codes storage
|
||||
and adds a flag to make difference between last processed sip
|
||||
message and content of reason headers.</p>
|
||||
<p>UserNote: Added a new option to HANGUPCAUSE to access additional
|
||||
information about hangup reason. Reason headers from pjsip
|
||||
could be read using 'tech_extended' cause type.</p>
|
||||
<h4>sig_analog: Allow '#' to end the inter-digit timeout when dialing.</h4>
|
||||
<p>Author: Naveen Albert
|
||||
Date: 2025-10-03</p>
|
||||
<p>It is customary to allow # to terminate digit collection immediately
|
||||
when there would normally be a timeout. However, currently, users are
|
||||
forced to wait for the timeout to expire when dialing numbers that
|
||||
are prefixes of other valid matches, and there is no way to end the
|
||||
timeout early. Customarily, # terminates the timeout, but at the moment,
|
||||
this is just rejected unless there happens to be a matching extension
|
||||
ending in #.</p>
|
||||
<p>Allow # to terminate the timeout in cases where there is no dialplan
|
||||
match. This ensures that the dialplan is always respected, but if a
|
||||
valid extension has been dialed that happens to prefix other valid
|
||||
matches, # can be used to dial it immediately.</p>
|
||||
<p>Resolves: #1510</p>
|
||||
<h4>func_math: Add DIGIT_SUM function.</h4>
|
||||
<p>Author: Naveen Albert
|
||||
Date: 2025-10-01</p>
|
||||
<p>Add a function (DIGIT_SUM) which returns the digit sum of a number.</p>
|
||||
<p>Resolves: #1499</p>
|
||||
<p>UserNote: The DIGIT_SUM function can be used to return the digit sum of
|
||||
a number.</p>
|
||||
<h4>app_sf: Add post-digit timer option to ReceiveSF.</h4>
|
||||
<p>Author: Naveen Albert
|
||||
Date: 2025-10-01</p>
|
||||
<p>Add a sorely needed option to set a timeout between digits, rather than
|
||||
for receiving the entire number. This is needed if the number of digits
|
||||
being sent is unknown by the receiver in advance. Previously, we had
|
||||
to wait for the entire timer to expire.</p>
|
||||
<p>Resolves: #1493</p>
|
||||
<p>UserNote: The 't' option for ReceiveSF now allows for a timer since
|
||||
the last digit received, in addition to the number-wide timeout.</p>
|
||||
<h4>res_tonedetect: Fix formatting of XML documentation.</h4>
|
||||
<p>Author: Naveen Albert
|
||||
Date: 2025-10-02</p>
|
||||
<p>Fix the indentation in the documentation for the variable list.</p>
|
||||
<p>Resolves: #1507</p>
|
||||
<h4>res_fax: Add XML documentation for channel variables.</h4>
|
||||
<p>Author: Naveen Albert
|
||||
Date: 2025-10-02</p>
|
||||
<p>Document the channel variables currently set by SendFAX and ReceiveFAX.</p>
|
||||
<p>Resolves: #1505</p>
|
||||
<h4>channelstorage_cpp_map_name_id: Add read locking around retrievals.</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2025-10-01</p>
|
||||
<p>When we retrieve a channel from a C++ map, we actually get back a wrapper
|
||||
object that points to the channel then right after we retrieve it, we bump its
|
||||
reference count. There's a tiny chance however that between those two
|
||||
statements a delete and/or unref might happen which would cause the wrapper
|
||||
object or the channel itself to become invalid resulting in a SEGV. To avoid
|
||||
this we now perform a read lock on the driver around those statements.</p>
|
||||
<p>Resolves: #1491</p>
|
||||
<h4>app_dial: Allow fractional seconds for dial timeouts.</h4>
|
||||
<p>Author: Naveen Albert
|
||||
Date: 2025-09-30</p>
|
||||
<p>Even though Dial() internally uses milliseconds for its dial timeouts,
|
||||
this capability has been mostly obscured from users as the argument is
|
||||
only parsed as an integer, thus forcing the use of whole seconds for
|
||||
timeouts.</p>
|
||||
<p>Parse it as a decimal instead so that timeouts can now truly have
|
||||
millisecond precision.</p>
|
||||
<p>Resolves: #1487</p>
|
||||
<p>UserNote: The answer and progress dial timeouts now have millisecond
|
||||
precision, instead of having to be whole numbers.</p>
|
||||
<h4>dsp.c: Make minor fixes to debug log messages.</h4>
|
||||
<p>Author: Naveen Albert
|
||||
Date: 2025-10-01</p>
|
||||
<p>Commit dc8e3eeaaf094a3d16991289934093d5e7127680 improved the debug log
|
||||
messages in dsp.c. This makes two minor corrections to it:</p>
|
||||
<ul>
|
||||
<li>Properly guard an added log statement in a conditional.</li>
|
||||
<li>Don't add one to the hit count if there was no hit (however, we do
|
||||
still want to do this for the case where this is one).</li>
|
||||
</ul>
|
||||
<p>Resolves: #1496</p>
|
||||
<h4>config_options.c: Improve misleading warning.</h4>
|
||||
<p>Author: Naveen Albert
|
||||
Date: 2025-09-30</p>
|
||||
<p>When running "config show help <module>", if no XML documentation exists
|
||||
for the specified module, "Module <module> not found." is returned,
|
||||
which is misleading if the module is loaded but simply has no XML
|
||||
documentation for its config. Improve the message to clarify that the
|
||||
module may simply have no config documentation.</p>
|
||||
<p>Resolves: #1489</p>
|
||||
<h4>func_scramble: Add example to XML documentation.</h4>
|
||||
<p>Author: Naveen Albert
|
||||
Date: 2025-09-29</p>
|
||||
<p>The previous lack of an example made it ambiguous if the arguments went
|
||||
inside the function arguments or were part of the right-hand value.</p>
|
||||
<p>Resolves: #1485</p>
|
||||
<h4>sig_analog: Eliminate potential timeout with Last Number Redial.</h4>
|
||||
<p>Author: Naveen Albert
|
||||
Date: 2025-09-29</p>
|
||||
<p>If Last Number Redial is used to redial, ensure that we do not wait
|
||||
for further digits. This was possible if the number that was last
|
||||
dialed is a prefix of another possible dialplan match. Since all we
|
||||
did is copy the number into the extension buffer, if other matches
|
||||
are now possible, there would thus be a timeout before the call went
|
||||
through. We now complete redialed calls immediaetly in all cases.</p>
|
||||
<p>Resolves: #1483</p>
|
||||
<h4>ARI: The bridges play and record APIs now handle sample rates > 8K correctly.</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2025-09-25</p>
|
||||
<p>The bridge play and record APIs were forcing the Announcer/Recorder channel
|
||||
to slin8 which meant that if you played or recorded audio with a sample
|
||||
rate > 8K, it was downsampled to 8K limiting the bandwidth.</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>The /bridges/play REST APIs have a new "announcer_format" parameter that
|
||||
allows the caller to explicitly set the format on the "Announcer" channel
|
||||
through which the audio is played into the bridge. If not specified, the
|
||||
default depends on how many channels are currently in the bridge. If
|
||||
a single channel is in the bridge, then the Announcer channel's format
|
||||
will be set to the same as that channel's. If multiple channels are in the
|
||||
bridge, the channels will be scanned to find the one with the highest
|
||||
sample rate and the Announcer channel's format will be set to the slin
|
||||
format that has an equal to or greater than sample rate.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The /bridges/record REST API has a new "recorder_format" parameter that
|
||||
allows the caller to explicitly set the format on the "Recorder" channel
|
||||
from which audio is retrieved to write to the file. If not specified,
|
||||
the Recorder channel's format will be set to the format that was requested
|
||||
to save the audio in.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>Resolves: #1479</p>
|
||||
<p>DeveloperNote: The ARI /bridges/play and /bridges/record REST APIs have new
|
||||
parameters that allow the caller to specify the format to be used on the
|
||||
"Announcer" and "Recorder" channels respecitvely.</p>
|
||||
<h4>res_pjsip_geolocation: Add support for Geolocation loc-src parameter</h4>
|
||||
<p>Author: Max Grobecker
|
||||
Date: 2025-09-21</p>
|
||||
<p>This adds support for the Geolocation 'loc-src' parameter to res_pjsip_geolocation.
|
||||
The already existing config option 'location_source` in res_geolocation is documented to add a 'loc-src' parameter containing a user-defined FQDN to the 'Geolocation:' header,
|
||||
but that option had no effect as it was not implemented by res_pjsip_geolocation.</p>
|
||||
<p>If the <code>location_source</code> configuration option is not set or invalid, that parameter will not be added (this is already checked by res_geolocation).</p>
|
||||
<p>This commits adds already documented functionality.</p>
|
||||
<h4>sorcery: Move from threadpool to taskpool.</h4>
|
||||
<p>Author: Joshua C. Colp
|
||||
Date: 2025-09-23</p>
|
||||
<p>This change moves observer invocation from the use of
|
||||
a threadpool to a taskpool. The taskpool options have also
|
||||
been adjusted to ensure that at least one taskprocessor
|
||||
remains available at all times.</p>
|
||||
<h4>stasis_channels.c: Make protocol_id optional to enable blind transfer via ari</h4>
|
||||
<p>Author: Sven Kube
|
||||
Date: 2025-09-22</p>
|
||||
<p>When handling SIP transfers via ARI, there is no protocol_id in case of
|
||||
a blind transfer.</p>
|
||||
<p>Resolves: #1467</p>
|
||||
<h4>Fix some doxygen, typos and whitespace</h4>
|
||||
<p>Author: Bastian Triller
|
||||
Date: 2025-09-22</p>
|
||||
<h4>stasis_channels.c: Add null check for referred_by in ast_ari_transfer_message_create</h4>
|
||||
<p>Author: Sven Kube
|
||||
Date: 2025-09-18</p>
|
||||
<p>When handling SIP transfers via ARI, the <code>referred_by</code> field in
|
||||
<code>transfer_ari_state</code> may be null, since SIP REFER requests are not
|
||||
required to include a <code>Referred-By</code> header. Without this check, a null
|
||||
value caused the transfer to fail and triggered a NOTIFY with a 500
|
||||
Internal Server Error.</p>
|
||||
<h4>app_queue: Add NULL pointer checks in app_queue</h4>
|
||||
<p>Author: phoneben
|
||||
Date: 2025-09-11</p>
|
||||
<p>Add NULL check for word_list before calling word_in_list()
|
||||
Add NULL checks for channel snapshots from ast_multi_channel_blob_get_channel()</p>
|
||||
<p>Resolves: #1425</p>
|
||||
<h4>app_externalivr: Prevent out-of-bounds read during argument processing.</h4>
|
||||
<p>Author: Sean Bright
|
||||
Date: 2025-09-17</p>
|
||||
<p>Resolves: #1422</p>
|
||||
<h4>chan_dahdi: Add DAHDI_CHANNEL function.</h4>
|
||||
<p>Author: Naveen Albert
|
||||
Date: 2025-09-11</p>
|
||||
<p>Add a dialplan function that can be used to get/set properties of
|
||||
DAHDI channels (as opposed to Asterisk channels). This exposes
|
||||
properties that were not previously available, allowing for certain
|
||||
operations to now be performed in the dialplan.</p>
|
||||
<p>Resolves: #1455</p>
|
||||
<p>UserNote: The DAHDI_CHANNEL function allows for getting/setting
|
||||
certain properties about DAHDI channels from the dialplan.</p>
|
||||
<h4>taskpool: Update versions for taskpool stasis options.</h4>
|
||||
<p>Author: Joshua C. Colp
|
||||
Date: 2025-09-16</p>
|
||||
<h4>taskpool: Add taskpool API, switch Stasis to using it.</h4>
|
||||
<p>Author: Joshua C. Colp
|
||||
Date: 2025-08-06</p>
|
||||
<p>This change introduces a new API called taskpool. This is a pool
|
||||
of taskprocessors. It provides the following functionality:</p>
|
||||
<ol>
|
||||
<li>Task pushing to a pool of taskprocessors</li>
|
||||
<li>Synchronous tasks</li>
|
||||
<li>Serializers for execution ordering of tasks</li>
|
||||
<li>Growing/shrinking of number of taskprocessors in pool</li>
|
||||
</ol>
|
||||
<p>This functionality already exists through the combination of
|
||||
threadpool+taskprocessors but through investigating I determined
|
||||
that this carries substantial overhead for short to medium duration
|
||||
tasks. The threadpool uses a single queue of work, and for management
|
||||
of threads it involves additional tasks.</p>
|
||||
<p>I wrote taskpool to eliminate the extra overhead and management
|
||||
as much as possible. Instead of a single queue of work each
|
||||
taskprocessor has its own queue and at push time a selector chooses
|
||||
the taskprocessor to queue the task to. Each taskprocessor also
|
||||
has its own thread like normal. This spreads out the tasks immediately
|
||||
and reduces contention on shared resources.</p>
|
||||
<p>Using the included efficiency tests the number of tasks that can be
|
||||
executed per second in a taskpool is 6-12 times more than an equivalent
|
||||
threadpool+taskprocessor setup.</p>
|
||||
<p>Stasis has been moved over to using this new API as it is a heavy consumer
|
||||
of threadpool+taskprocessors and produces a lot of tasks.</p>
|
||||
<p>UpgradeNote: The threadpool_* options in stasis.conf have now been deprecated
|
||||
though they continue to be read and used. They have been replaced with taskpool
|
||||
options that give greater control over the underlying taskpool used for stasis.</p>
|
||||
<p>DeveloperNote: The taskpool API has been added for common usage of a
|
||||
pool of taskprocessors. It is suggested to use this API instead of the
|
||||
threadpool+taskprocessor approach.</p>
|
||||
<h4>app_adsiprog: Fix possible NULL dereference.</h4>
|
||||
<p>Author: Naveen Albert
|
||||
Date: 2025-09-10</p>
|
||||
<p>get_token can return NULL, but process_token uses this result without
|
||||
checking for NULL; as elsewhere, check for a NULL result to avoid
|
||||
possible NULL dereference.</p>
|
||||
<p>Resolves: #1419</p>
|
||||
<h4>manager.c: Fix presencestate object leak</h4>
|
||||
<p>Author: Nathan Monfils
|
||||
Date: 2025-09-08</p>
|
||||
<p>ast_presence_state allocates subtype and message. We straightforwardly
|
||||
need to clean those up.</p>
|
||||
<h4>audiohook.c: Ensure correct AO2 reference is dereffed.</h4>
|
||||
<p>Author: Sean Bright
|
||||
Date: 2025-09-10</p>
|
||||
<p>Part of #1440.</p>
|
||||
<h4>res_cliexec: Remove unnecessary casts to char*.</h4>
|
||||
<p>Author: Naveen Albert
|
||||
Date: 2025-09-09</p>
|
||||
<p>Resolves: #1436</p>
|
||||
<h4>rtp_engine.c: Add exception for comfort noise payload.</h4>
|
||||
<p>Author: Ben Ford
|
||||
Date: 2025-09-09</p>
|
||||
<p>In a previous commit, a change was made to
|
||||
ast_rtp_codecs_payload_code_tx_sample_rate to check for differing sample
|
||||
rates. This ended up returning an invalid payload int for comfort noise.
|
||||
A check has been added that returns early if the payload is in fact
|
||||
supposed to be comfort noise.</p>
|
||||
<p>Fixes: #1340</p>
|
||||
<h4>pbx_variables.c: Create real channel for "dialplan eval function".</h4>
|
||||
<p>Author: Naveen Albert
|
||||
Date: 2025-09-09</p>
|
||||
<p>"dialplan eval function" has been using a dummy channel for function
|
||||
evaluation, much like many of the unit tests. However, sometimes, this
|
||||
can cause issues for functions that are not expecting dummy channels.
|
||||
As an example, ast_channel_tech(chan) is NULL on such channels, and
|
||||
ast_channel_tech(chan)->type consequently results in a NULL dereference.
|
||||
Normally, functions do not worry about this since channels executing
|
||||
dialplan aren't dummy channels.</p>
|
||||
<p>While some functions are better about checking for these sorts of edge
|
||||
cases, use a real channel with a dummy technology to make this CLI
|
||||
command inherently safe for any dialplan function that could be evaluated
|
||||
from the CLI.</p>
|
||||
<p>Resolves: #1434</p>
|
||||
</body></html>
|
||||
@@ -1,888 +0,0 @@
|
||||
|
||||
## Change Log for Release asterisk-20.17.0
|
||||
|
||||
### Links:
|
||||
|
||||
- [Full ChangeLog](https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-20.17.0.html)
|
||||
- [GitHub Diff](https://github.com/asterisk/asterisk/compare/20.16.0...20.17.0)
|
||||
- [Tarball](https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20.17.0.tar.gz)
|
||||
- [Downloads](https://downloads.asterisk.org/pub/telephony/asterisk)
|
||||
|
||||
### Summary:
|
||||
|
||||
- Commits: 50
|
||||
- Commit Authors: 16
|
||||
- Issues Resolved: 34
|
||||
- Security Advisories Resolved: 0
|
||||
|
||||
### User Notes:
|
||||
|
||||
- #### res_stir_shaken: Add STIR_SHAKEN_ATTESTATION dialplan function.
|
||||
The STIR_SHAKEN_ATTESTATION dialplan function has been added
|
||||
which will allow suppressing attestation on a call-by-call basis
|
||||
regardless of the profile attached to the outgoing endpoint.
|
||||
|
||||
- #### func_channel: Allow R/W of ADSI CPE capability setting.
|
||||
CHANNEL(adsicpe) can now be read or written to change
|
||||
the channels' ADSI CPE capability setting.
|
||||
|
||||
- #### func_hangupcause.c: Add access to Reason headers via HANGUPCAUSE()
|
||||
Added a new option to HANGUPCAUSE to access additional
|
||||
information about hangup reason. Reason headers from pjsip
|
||||
could be read using 'tech_extended' cause type.
|
||||
|
||||
- #### func_math: Add DIGIT_SUM function.
|
||||
The DIGIT_SUM function can be used to return the digit sum of
|
||||
a number.
|
||||
|
||||
- #### app_sf: Add post-digit timer option to ReceiveSF.
|
||||
The 't' option for ReceiveSF now allows for a timer since
|
||||
the last digit received, in addition to the number-wide timeout.
|
||||
|
||||
- #### app_dial: Allow fractional seconds for dial timeouts.
|
||||
The answer and progress dial timeouts now have millisecond
|
||||
precision, instead of having to be whole numbers.
|
||||
|
||||
- #### chan_dahdi: Add DAHDI_CHANNEL function.
|
||||
The DAHDI_CHANNEL function allows for getting/setting
|
||||
certain properties about DAHDI channels from the dialplan.
|
||||
|
||||
|
||||
### Upgrade Notes:
|
||||
|
||||
- #### res_audiosocket: add message types for all slin sample rates
|
||||
New audiosocket message types 0x11 - 0x18 has been added
|
||||
for slin12, slin16, slin24, slin32, slin44, slin48, slin96, and
|
||||
slin192 audio. External applications using audiosocket may need to be
|
||||
updated to support these message types if the audiosocket channel is
|
||||
created with one of these audio formats.
|
||||
|
||||
- #### taskpool: Add taskpool API, switch Stasis to using it.
|
||||
The threadpool_* options in stasis.conf have now been deprecated
|
||||
though they continue to be read and used. They have been replaced with taskpool
|
||||
options that give greater control over the underlying taskpool used for stasis.
|
||||
|
||||
|
||||
### Developer Notes:
|
||||
|
||||
- #### chan_pjsip: Add technology-specific off-nominal hangup cause to events.
|
||||
A "tech_cause" parameter has been added to the
|
||||
ChannelHangupRequest and ChannelDestroyed ARI event messages and a "TechCause"
|
||||
parameter has been added to the HangupRequest, SoftHangupRequest and Hangup
|
||||
AMI event messages. For chan_pjsip, these will be set to the last SIP
|
||||
response status code for off-nominally terminated calls. The parameter is
|
||||
suppressed for nominal termination.
|
||||
|
||||
- #### ARI: The bridges play and record APIs now handle sample rates > 8K correctly.
|
||||
The ARI /bridges/play and /bridges/record REST APIs have new
|
||||
parameters that allow the caller to specify the format to be used on the
|
||||
"Announcer" and "Recorder" channels respecitvely.
|
||||
|
||||
- #### taskpool: Add taskpool API, switch Stasis to using it.
|
||||
The taskpool API has been added for common usage of a
|
||||
pool of taskprocessors. It is suggested to use this API instead of the
|
||||
threadpool+taskprocessor approach.
|
||||
|
||||
|
||||
### Commit Authors:
|
||||
|
||||
- Anthony Minessale: (1)
|
||||
- Bastian Triller: (1)
|
||||
- Ben Ford: (1)
|
||||
- Christoph Moench-Tegeder: (1)
|
||||
- George Joseph: (9)
|
||||
- Igor Goncharovsky: (1)
|
||||
- Joshua C. Colp: (6)
|
||||
- Max Grobecker: (1)
|
||||
- Nathan Monfils: (1)
|
||||
- Naveen Albert: (17)
|
||||
- Roman Pertsev: (1)
|
||||
- Sean Bright: (3)
|
||||
- Sven Kube: (3)
|
||||
- Tinet-mucw: (1)
|
||||
- gauravs456: (1)
|
||||
- phoneben: (2)
|
||||
|
||||
## Issue and Commit Detail:
|
||||
|
||||
### Closed Issues:
|
||||
|
||||
- 781: [improvement]: Allow call by call disabling Stir/Shaken header inclusion
|
||||
- 1340: [bug]: comfort noise packet corrupted
|
||||
- 1419: [bug]: static code analysis issues in app_adsiprog.c
|
||||
- 1422: [bug]: static code analysis issues in apps/app_externalivr.c
|
||||
- 1425: [bug]: static code analysis issues in apps/app_queue.c
|
||||
- 1434: [improvement]: pbx_variables: Create real channel for dialplan eval CLI command
|
||||
- 1436: [improvement]: res_cliexec: Avoid unnecessary cast to char*
|
||||
- 1455: [new-feature]: chan_dahdi: Add DAHDI_CHANNEL function
|
||||
- 1467: [bug]: Crash in res_pjsip_refer during REFER progress teardown with PJSIP_TRANSFER_HANDLING(ari-only)
|
||||
- 1478: [improvement]: Stasis threadpool -> taskpool
|
||||
- 1479: [bug]: The ARI bridge play and record APIs limit audio bandwidth by forcing the slin8 format.
|
||||
- 1483: [improvement]: sig_analog: Eliminate possible timeout for Last Number Redial
|
||||
- 1485: [improvement]: func_scramble: Add example to XML documentation.
|
||||
- 1487: [improvement]: app_dial: Allow partial seconds to be used for dial timeouts
|
||||
- 1489: [improvement]: config_options.c: Improve misleading error message
|
||||
- 1491: [bug]: Segfault: `channelstorage_cpp` fast lookup without lock (`get_by_name_exact`/`get_by_uniqueid`) leads to UAF during hangup
|
||||
- 1493: [new-feature]: app_sf: Add post-digit timer option
|
||||
- 1496: [improvement]: dsp.c: Minor fixes to debug log messages
|
||||
- 1499: [new-feature]: func_math: Add function to return the digit sum
|
||||
- 1505: [improvement]: res_fax: Add XML documentation for channel variables
|
||||
- 1507: [improvement]: res_tonedetect: Minor formatting issue in documentation
|
||||
- 1509: [improvement]: res_fax.c — log debug error as debug, not regular log
|
||||
- 1510: [new-feature]: sig_analog: Allow '#' to end the inter-digit timeout when dialing.
|
||||
- 1514: [improvement]: func_channel: Allow R/W of ADSI CPE capability setting.
|
||||
- 1517: [improvement]: core_unreal: Preserve ADSI capability when dialing Local channels
|
||||
- 1519: [improvement]: app_dial / func_callerid: DNIS information is not propagated by Dial
|
||||
- 1525: [bug]: chan_websocket: fix use of raw payload variable for string comparison in process_text_message
|
||||
- 1535: [bug]: chan_pjsip changes SSRC on WebRTC channels, which is unsupported by some browsers
|
||||
- 1536: [bug]: asterisk -rx connects to console instead of executing a command
|
||||
- 1539: [bug]: safe_asterisk without TTY doesn't log to file
|
||||
- 1544: [improvement]: While Receiving the MediaConnect Message Using External Media Over websocket ChannelID is Details are missing
|
||||
- 1554: [bug]: safe_asterisk recurses into subdirectories of startup.d after f97361
|
||||
- 1559: [improvement]: Handle TLS handshake attacks in order to resolve the issue of exceeding the maximum number of HTTPS sessions.
|
||||
- 1578: [bug]: Deadlock with externalMedia custom channel id and cpp map channel backend
|
||||
|
||||
### Commits By Author:
|
||||
|
||||
- #### Anthony Minessale (1):
|
||||
|
||||
- #### Bastian Triller (1):
|
||||
|
||||
- #### Ben Ford (1):
|
||||
|
||||
- #### Christoph Moench-Tegeder (1):
|
||||
|
||||
- #### George Joseph (9):
|
||||
|
||||
- #### Igor Goncharovsky (1):
|
||||
|
||||
- #### Joshua C. Colp (6):
|
||||
|
||||
- #### Max Grobecker (1):
|
||||
|
||||
- #### Nathan Monfils (1):
|
||||
|
||||
- #### Naveen Albert (17):
|
||||
|
||||
- #### Roman Pertsev (1):
|
||||
|
||||
- #### Sean Bright (3):
|
||||
|
||||
- #### Sven Kube (3):
|
||||
|
||||
- #### Tinet-mucw (1):
|
||||
|
||||
- #### gauravs456 (1):
|
||||
|
||||
- #### phoneben (2):
|
||||
|
||||
### Commit List:
|
||||
|
||||
- channelstorage: Allow storage driver read locking to be skipped.
|
||||
- res_audiosocket: fix temporarily unavailable
|
||||
- safe_asterisk: Resolve a POSIX sh problem and restore globbing behavior.
|
||||
- res_stir_shaken: Add STIR_SHAKEN_ATTESTATION dialplan function.
|
||||
- iostream.c: Handle TLS handshake attacks in order to resolve the issue of exceeding the maximum number of HTTPS sessions.
|
||||
- chan_pjsip: Disable SSRC change for WebRTC endpoints.
|
||||
- chan_websocket: Add channel_id to MEDIA_START, DRIVER_STATUS and DTMF_END events.
|
||||
- safe_asterisk: Fix logging and sorting issue.
|
||||
- Fix Endianness detection in utils.h for non-Linux
|
||||
- devicestate: Don't publish redundant device state messages.
|
||||
- chan_pjsip: Add technology-specific off-nominal hangup cause to events.
|
||||
- res_audiosocket: add message types for all slin sample rates
|
||||
- res_fax.c: lower FAXOPT read warning to debug level
|
||||
- endpoints: Remove need for stasis subscription.
|
||||
- app_queue: Allow stasis message filtering to work.
|
||||
- taskpool: Fix some references to threadpool that should be taskpool.
|
||||
- Update contact information for anthm
|
||||
- chan_websocket.c: Change payload references to command instead.
|
||||
- func_callerid: Document limitation of DNID fields.
|
||||
- func_channel: Allow R/W of ADSI CPE capability setting.
|
||||
- core_unreal: Preserve ADSI capability when dialing Local channels.
|
||||
- func_hangupcause.c: Add access to Reason headers via HANGUPCAUSE()
|
||||
- sig_analog: Allow '#' to end the inter-digit timeout when dialing.
|
||||
- func_math: Add DIGIT_SUM function.
|
||||
- app_sf: Add post-digit timer option to ReceiveSF.
|
||||
- res_tonedetect: Fix formatting of XML documentation.
|
||||
- res_fax: Add XML documentation for channel variables.
|
||||
- channelstorage_cpp_map_name_id: Add read locking around retrievals.
|
||||
- app_dial: Allow fractional seconds for dial timeouts.
|
||||
- dsp.c: Make minor fixes to debug log messages.
|
||||
- config_options.c: Improve misleading warning.
|
||||
- func_scramble: Add example to XML documentation.
|
||||
- sig_analog: Eliminate potential timeout with Last Number Redial.
|
||||
- ARI: The bridges play and record APIs now handle sample rates > 8K correctly.
|
||||
- res_pjsip_geolocation: Add support for Geolocation loc-src parameter
|
||||
- sorcery: Move from threadpool to taskpool.
|
||||
- stasis_channels.c: Make protocol_id optional to enable blind transfer via ari
|
||||
- Fix some doxygen, typos and whitespace
|
||||
- stasis_channels.c: Add null check for referred_by in ast_ari_transfer_message_create
|
||||
- app_queue: Add NULL pointer checks in app_queue
|
||||
- app_externalivr: Prevent out-of-bounds read during argument processing.
|
||||
- chan_dahdi: Add DAHDI_CHANNEL function.
|
||||
- taskpool: Update versions for taskpool stasis options.
|
||||
- taskpool: Add taskpool API, switch Stasis to using it.
|
||||
- app_adsiprog: Fix possible NULL dereference.
|
||||
- manager.c: Fix presencestate object leak
|
||||
- audiohook.c: Ensure correct AO2 reference is dereffed.
|
||||
- res_cliexec: Remove unnecessary casts to char*.
|
||||
- rtp_engine.c: Add exception for comfort noise payload.
|
||||
- pbx_variables.c: Create real channel for "dialplan eval function".
|
||||
|
||||
### Commit Details:
|
||||
|
||||
#### channelstorage: Allow storage driver read locking to be skipped.
|
||||
Author: George Joseph
|
||||
Date: 2025-11-06
|
||||
|
||||
After PR #1498 added read locking to channelstorage_cpp_map_name_id, if ARI
|
||||
channels/externalMedia was called with a custom channel id AND the
|
||||
cpp_map_name_id channel storage backend is in use, a deadlock can occur when
|
||||
hanging up the channel. It's actually triggered in
|
||||
channel.c:__ast_channel_alloc_ap() when it gets a write lock on the
|
||||
channelstorage driver then subsequently does a lookup for channel uniqueid
|
||||
which now does a read lock. This is an invalid operation and causes the lock
|
||||
state to get "bad". When the channels try to hang up, a write lock is
|
||||
attempted again which hangs and causes the deadlock.
|
||||
|
||||
Now instead of the cpp_map_name_id channelstorage driver "get" APIs
|
||||
automatically performing a read lock, they take a "lock" parameter which
|
||||
allows a caller who already has a write lock to indicate that the "get" API
|
||||
must not attempt its own lock. This prevents the state from getting mesed up.
|
||||
|
||||
The ao2_legacy driver uses the ao2 container's recursive mutex so doesn't
|
||||
have this issue but since it also implements the common channelstorage API,
|
||||
it needed its "get" implementations updated to take the lock parameter. They
|
||||
just don't use it.
|
||||
|
||||
Resolves: #1578
|
||||
|
||||
#### res_audiosocket: fix temporarily unavailable
|
||||
Author: Roman Pertsev
|
||||
Date: 2025-10-07
|
||||
|
||||
Operations on non-blocking sockets may return a resource temporarily unavailable error (EAGAIN or EWOULDBLOCK). This is not a fatal error but a normal condition indicating that the operation would block.
|
||||
|
||||
This patch corrects the handling of this case. Instead of incorrectly treating it as a reason to terminate the connection, the code now waits for data to arrive on the socket.
|
||||
|
||||
#### safe_asterisk: Resolve a POSIX sh problem and restore globbing behavior.
|
||||
Author: Sean Bright
|
||||
Date: 2025-10-22
|
||||
|
||||
* Using `==` with the POSIX sh `test` utility is UB.
|
||||
* Switch back to using globs instead of using `$(find … | sort)`.
|
||||
* Fix a missing redirect when checking for the OS type.
|
||||
|
||||
Resolves: #1554
|
||||
|
||||
#### res_stir_shaken: Add STIR_SHAKEN_ATTESTATION dialplan function.
|
||||
Author: George Joseph
|
||||
Date: 2025-10-24
|
||||
|
||||
Also...
|
||||
|
||||
* Refactored the verification datastore process so instead of having
|
||||
a separate channel datastore for each verification result, there's only
|
||||
one channel datastore with a vector of results.
|
||||
|
||||
* Refactored some log messages to include channel name and removed
|
||||
some that would be redundant if a memory allocation failed.
|
||||
|
||||
Resolves: #781
|
||||
|
||||
UserNote: The STIR_SHAKEN_ATTESTATION dialplan function has been added
|
||||
which will allow suppressing attestation on a call-by-call basis
|
||||
regardless of the profile attached to the outgoing endpoint.
|
||||
|
||||
#### iostream.c: Handle TLS handshake attacks in order to resolve the issue of exceeding the maximum number of HTTPS sessions.
|
||||
Author: Tinet-mucw
|
||||
Date: 2025-10-26
|
||||
|
||||
The TCP three-way handshake completes, but if the server is under a TLS handshake attack, asterisk will get stuck at SSL_do_handshake().
|
||||
In this case, a timeout mechanism should be set for the SSL/TLS handshake process to prevent indefinite waiting during the SSL handshake.
|
||||
|
||||
Resolves: #1559
|
||||
|
||||
#### chan_pjsip: Disable SSRC change for WebRTC endpoints.
|
||||
Author: George Joseph
|
||||
Date: 2025-10-21
|
||||
|
||||
Commit b333ee3b introduced a fix to chan_pjsip that addressed RTP issues with
|
||||
blind transfers and some SBCs. Unfortunately, the fix broke some WebRTC
|
||||
clients that are sensitive to SSRC changes and non-monotonic timestamps so
|
||||
the fix is now disabled for endpoints with the "bundle" parameter set to true.
|
||||
|
||||
Resolves: #1535
|
||||
|
||||
#### chan_websocket: Add channel_id to MEDIA_START, DRIVER_STATUS and DTMF_END events.
|
||||
Author: gauravs456
|
||||
Date: 2025-10-21
|
||||
|
||||
Resolves: #1544
|
||||
|
||||
#### safe_asterisk: Fix logging and sorting issue.
|
||||
Author: George Joseph
|
||||
Date: 2025-10-17
|
||||
|
||||
Re-enabled "TTY=9" which was erroneously disabled as part of a recent
|
||||
security fix and removed another logging "fix" that was added.
|
||||
|
||||
Also added a sort to the "find" that enumerates the scripts to be sourced so
|
||||
they're sourced in the correct order.
|
||||
|
||||
Resolves: #1539
|
||||
|
||||
#### Fix Endianness detection in utils.h for non-Linux
|
||||
Author: Christoph Moench-Tegeder
|
||||
Date: 2025-10-19
|
||||
|
||||
Commit 43bf8a4ded7a65203b766b91eaf8331a600e9d8d introduced endian
|
||||
dependend byte-swapping code in include/asterisk/utils.h, where the
|
||||
endianness was detected using the __BYTE_ORDER macro. This macro
|
||||
lives in endian.h, which on Linux is included implicitely (by the
|
||||
network-related headers, I think), but on FreeBSD the headers are
|
||||
laid out differently and we do not get __BYTE_ORDER the implicit way.
|
||||
|
||||
Instead, this makes the usage of endian.h explicit by including it
|
||||
where we need it, and switches the BYTE_ORDER/*ENDIAN macros to the
|
||||
POSIX-defined ones (see
|
||||
https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/endian.h.html
|
||||
for standard compliance). Additionally, this adds a compile-time check
|
||||
for the endianness-logic: compilation will fail if neither big nor
|
||||
little endian can be detected.
|
||||
|
||||
Fixes: #1536
|
||||
|
||||
#### devicestate: Don't publish redundant device state messages.
|
||||
Author: Joshua C. Colp
|
||||
Date: 2025-10-17
|
||||
|
||||
When publishing device state check the local cache for the
|
||||
existing device state. If the new device state is unchanged
|
||||
from the prior one, don't bother publishing the update. This
|
||||
can reduce the work done by consumers of device state, such
|
||||
as hints and app_queue, by not publishing a message to them.
|
||||
|
||||
These messages would most often occur with devices that are
|
||||
seeing numerous simultaneous channels. The underlying device
|
||||
state would remain as in use throughout, but an update would
|
||||
be published as channels are created and hung up.
|
||||
|
||||
#### chan_pjsip: Add technology-specific off-nominal hangup cause to events.
|
||||
Author: George Joseph
|
||||
Date: 2025-10-14
|
||||
|
||||
Although the ISDN/Q.850/Q.931 hangup cause code is already part of the ARI
|
||||
and AMI hangup and channel destroyed events, it can be helpful to know what
|
||||
the actual channel technology code was if the call was unsuccessful.
|
||||
For PJSIP, it's the SIP response code.
|
||||
|
||||
* A new "tech_hangupcause" field was added to the ast_channel structure along
|
||||
with ast_channel_tech_hangupcause() and ast_channel_tech_hangupcause_set()
|
||||
functions. It should only be set for off-nominal terminations.
|
||||
|
||||
* chan_pjsip was modified to set the tech hangup cause in the
|
||||
chan_pjsip_hangup() and chan_pjsip_session_end() functions. This is a bit
|
||||
tricky because these two functions aren't always called in the same order.
|
||||
The channel that hangs up first will get chan_pjsip_session_end() called
|
||||
first which will trigger the core to call chan_pjsip_hangup() on itself,
|
||||
then call chan_pjsip_hangup() on the other channel. The other channel's
|
||||
chan_pjsip_session_end() function will get called last. Unfortunately,
|
||||
the other channel's HangupRequest events are sent before chan_pjsip has had a
|
||||
chance to set the tech hangupcause code so the HangupRequest events for that
|
||||
channel won't have the cause code set. The ChannelDestroyed and Hangup
|
||||
events however will have the code set for both channels.
|
||||
|
||||
* A new "tech_cause" field was added to the ast_channel_snapshot_hangup
|
||||
structure. This is a public structure so a bit of refactoring was needed to
|
||||
preserve ABI compatibility.
|
||||
|
||||
* The ARI ChannelHangupRequest and ChannelDestroyed events were modified to
|
||||
include the "tech_cause" parameter in the JSON for off-nominal terminations.
|
||||
The parameter is suppressed for nominal termination.
|
||||
|
||||
* The AMI SoftHangupRequest, HangupRequest and Hangup events were modified to
|
||||
include the "TechCause" parameter for off-nominal terminations. Like their ARI
|
||||
counterparts, the parameter is suppressed for nominal termination.
|
||||
|
||||
DeveloperNote: A "tech_cause" parameter has been added to the
|
||||
ChannelHangupRequest and ChannelDestroyed ARI event messages and a "TechCause"
|
||||
parameter has been added to the HangupRequest, SoftHangupRequest and Hangup
|
||||
AMI event messages. For chan_pjsip, these will be set to the last SIP
|
||||
response status code for off-nominally terminated calls. The parameter is
|
||||
suppressed for nominal termination.
|
||||
|
||||
#### res_audiosocket: add message types for all slin sample rates
|
||||
Author: Sven Kube
|
||||
Date: 2025-10-10
|
||||
|
||||
Extend audiosocket messages with types 0x11 - 0x18 to create asterisk
|
||||
frames in slin12, slin16, slin24, slin32, slin44, slin48, slin96, and
|
||||
slin192 format, enabling the transmission of audio at a higher sample
|
||||
rates. For audiosocket messages sent by Asterisk, the message kind is
|
||||
determined by the format of the originating asterisk frame.
|
||||
|
||||
UpgradeNote: New audiosocket message types 0x11 - 0x18 has been added
|
||||
for slin12, slin16, slin24, slin32, slin44, slin48, slin96, and
|
||||
slin192 audio. External applications using audiosocket may need to be
|
||||
updated to support these message types if the audiosocket channel is
|
||||
created with one of these audio formats.
|
||||
|
||||
#### res_fax.c: lower FAXOPT read warning to debug level
|
||||
Author: phoneben
|
||||
Date: 2025-10-03
|
||||
|
||||
Reading ${FAXOPT()} before a fax session is common in dialplans to check fax state.
|
||||
Currently this logs an error even when no fax datastore exists, creating excessive noise.
|
||||
Change these messages to ast_debug(3, …) so they appear only with debug enabled.
|
||||
|
||||
Resolves: #1509
|
||||
|
||||
#### endpoints: Remove need for stasis subscription.
|
||||
Author: Joshua C. Colp
|
||||
Date: 2025-10-10
|
||||
|
||||
When an endpoint is created in the core of Asterisk a subscription
|
||||
was previously created alongside it to monitor any channels being
|
||||
destroyed that were related to it. This was done by receiving all
|
||||
channel snapshot updates for every channel and only reacting when
|
||||
it was indicated that the channel was dead.
|
||||
|
||||
This change removes this logic and instead provides an API call
|
||||
for directly removing a channel from an endpoint. This is called
|
||||
when channels are destroyed. This operation is fast, so blocking
|
||||
the calling thread for a short period of time doesn't have any
|
||||
noticeable impact.
|
||||
|
||||
#### app_queue: Allow stasis message filtering to work.
|
||||
Author: Joshua C. Colp
|
||||
Date: 2025-10-10
|
||||
|
||||
The app_queue module subscribes on a per-dialed agent basis to both
|
||||
the bridge all and channel all topics to keep apprised of things going
|
||||
on involving them. This subscription has associated state that must
|
||||
be cleaned up when the subscription ends. This was done by setting
|
||||
a default router callback that only had logic to handle the case
|
||||
where the subscription ends. By using the default router callback
|
||||
all filtering for the subscription was disabled, causing unrelated
|
||||
messages to get published and handled by it.
|
||||
|
||||
This change makes it so that an explicit route is added for the
|
||||
message type used for the message indicating the subscription has
|
||||
ended and removes the default router callback. This allows message
|
||||
filtering to occur on publishing reducing the messages to app_queue
|
||||
to only those it is interested in.
|
||||
|
||||
#### taskpool: Fix some references to threadpool that should be taskpool.
|
||||
Author: George Joseph
|
||||
Date: 2025-10-10
|
||||
|
||||
Resolves: #1478
|
||||
|
||||
#### Update contact information for anthm
|
||||
Author: Anthony Minessale
|
||||
Date: 2025-10-10
|
||||
|
||||
|
||||
#### chan_websocket.c: Change payload references to command instead.
|
||||
Author: George Joseph
|
||||
Date: 2025-10-08
|
||||
|
||||
Some of the tests in process_text_message() were still comparing to the
|
||||
websocket message payload instead of the "command" string.
|
||||
|
||||
Resolves: #1525
|
||||
|
||||
#### func_callerid: Document limitation of DNID fields.
|
||||
Author: Naveen Albert
|
||||
Date: 2025-10-06
|
||||
|
||||
The Dial() application does not propagate DNID fields, which is counter
|
||||
to the behavior of the other Caller ID fields. This behavior is likely
|
||||
intentional since the use of Dial theoretically suggests a new dialed
|
||||
number, but document this caveat to inform users of it.
|
||||
|
||||
Resolves: #1519
|
||||
|
||||
#### func_channel: Allow R/W of ADSI CPE capability setting.
|
||||
Author: Naveen Albert
|
||||
Date: 2025-10-06
|
||||
|
||||
Allow retrieving and setting the channel's ADSI capability from the
|
||||
dialplan.
|
||||
|
||||
Resolves: #1514
|
||||
|
||||
UserNote: CHANNEL(adsicpe) can now be read or written to change
|
||||
the channels' ADSI CPE capability setting.
|
||||
|
||||
#### core_unreal: Preserve ADSI capability when dialing Local channels.
|
||||
Author: Naveen Albert
|
||||
Date: 2025-10-06
|
||||
|
||||
Dial() already preserves the ADSI capability by copying it to the new
|
||||
channel, but since Local channel pairs consist of two channels, we
|
||||
also need to copy the capability to the second channel.
|
||||
|
||||
Resolves: #1517
|
||||
|
||||
#### func_hangupcause.c: Add access to Reason headers via HANGUPCAUSE()
|
||||
Author: Igor Goncharovsky
|
||||
Date: 2025-09-04
|
||||
|
||||
As soon as SIP call may end with several Reason headers, we
|
||||
want to make all of them available through the HAGUPCAUSE() function.
|
||||
This implementation uses the same ao2 hash for cause codes storage
|
||||
and adds a flag to make difference between last processed sip
|
||||
message and content of reason headers.
|
||||
|
||||
UserNote: Added a new option to HANGUPCAUSE to access additional
|
||||
information about hangup reason. Reason headers from pjsip
|
||||
could be read using 'tech_extended' cause type.
|
||||
|
||||
#### sig_analog: Allow '#' to end the inter-digit timeout when dialing.
|
||||
Author: Naveen Albert
|
||||
Date: 2025-10-03
|
||||
|
||||
It is customary to allow # to terminate digit collection immediately
|
||||
when there would normally be a timeout. However, currently, users are
|
||||
forced to wait for the timeout to expire when dialing numbers that
|
||||
are prefixes of other valid matches, and there is no way to end the
|
||||
timeout early. Customarily, # terminates the timeout, but at the moment,
|
||||
this is just rejected unless there happens to be a matching extension
|
||||
ending in #.
|
||||
|
||||
Allow # to terminate the timeout in cases where there is no dialplan
|
||||
match. This ensures that the dialplan is always respected, but if a
|
||||
valid extension has been dialed that happens to prefix other valid
|
||||
matches, # can be used to dial it immediately.
|
||||
|
||||
Resolves: #1510
|
||||
|
||||
#### func_math: Add DIGIT_SUM function.
|
||||
Author: Naveen Albert
|
||||
Date: 2025-10-01
|
||||
|
||||
Add a function (DIGIT_SUM) which returns the digit sum of a number.
|
||||
|
||||
Resolves: #1499
|
||||
|
||||
UserNote: The DIGIT_SUM function can be used to return the digit sum of
|
||||
a number.
|
||||
|
||||
#### app_sf: Add post-digit timer option to ReceiveSF.
|
||||
Author: Naveen Albert
|
||||
Date: 2025-10-01
|
||||
|
||||
Add a sorely needed option to set a timeout between digits, rather than
|
||||
for receiving the entire number. This is needed if the number of digits
|
||||
being sent is unknown by the receiver in advance. Previously, we had
|
||||
to wait for the entire timer to expire.
|
||||
|
||||
Resolves: #1493
|
||||
|
||||
UserNote: The 't' option for ReceiveSF now allows for a timer since
|
||||
the last digit received, in addition to the number-wide timeout.
|
||||
|
||||
#### res_tonedetect: Fix formatting of XML documentation.
|
||||
Author: Naveen Albert
|
||||
Date: 2025-10-02
|
||||
|
||||
Fix the indentation in the documentation for the variable list.
|
||||
|
||||
Resolves: #1507
|
||||
|
||||
#### res_fax: Add XML documentation for channel variables.
|
||||
Author: Naveen Albert
|
||||
Date: 2025-10-02
|
||||
|
||||
Document the channel variables currently set by SendFAX and ReceiveFAX.
|
||||
|
||||
Resolves: #1505
|
||||
|
||||
#### channelstorage_cpp_map_name_id: Add read locking around retrievals.
|
||||
Author: George Joseph
|
||||
Date: 2025-10-01
|
||||
|
||||
When we retrieve a channel from a C++ map, we actually get back a wrapper
|
||||
object that points to the channel then right after we retrieve it, we bump its
|
||||
reference count. There's a tiny chance however that between those two
|
||||
statements a delete and/or unref might happen which would cause the wrapper
|
||||
object or the channel itself to become invalid resulting in a SEGV. To avoid
|
||||
this we now perform a read lock on the driver around those statements.
|
||||
|
||||
Resolves: #1491
|
||||
|
||||
#### app_dial: Allow fractional seconds for dial timeouts.
|
||||
Author: Naveen Albert
|
||||
Date: 2025-09-30
|
||||
|
||||
Even though Dial() internally uses milliseconds for its dial timeouts,
|
||||
this capability has been mostly obscured from users as the argument is
|
||||
only parsed as an integer, thus forcing the use of whole seconds for
|
||||
timeouts.
|
||||
|
||||
Parse it as a decimal instead so that timeouts can now truly have
|
||||
millisecond precision.
|
||||
|
||||
Resolves: #1487
|
||||
|
||||
UserNote: The answer and progress dial timeouts now have millisecond
|
||||
precision, instead of having to be whole numbers.
|
||||
|
||||
#### dsp.c: Make minor fixes to debug log messages.
|
||||
Author: Naveen Albert
|
||||
Date: 2025-10-01
|
||||
|
||||
Commit dc8e3eeaaf094a3d16991289934093d5e7127680 improved the debug log
|
||||
messages in dsp.c. This makes two minor corrections to it:
|
||||
|
||||
* Properly guard an added log statement in a conditional.
|
||||
* Don't add one to the hit count if there was no hit (however, we do
|
||||
still want to do this for the case where this is one).
|
||||
|
||||
Resolves: #1496
|
||||
|
||||
#### config_options.c: Improve misleading warning.
|
||||
Author: Naveen Albert
|
||||
Date: 2025-09-30
|
||||
|
||||
When running "config show help <module>", if no XML documentation exists
|
||||
for the specified module, "Module <module> not found." is returned,
|
||||
which is misleading if the module is loaded but simply has no XML
|
||||
documentation for its config. Improve the message to clarify that the
|
||||
module may simply have no config documentation.
|
||||
|
||||
Resolves: #1489
|
||||
|
||||
#### func_scramble: Add example to XML documentation.
|
||||
Author: Naveen Albert
|
||||
Date: 2025-09-29
|
||||
|
||||
The previous lack of an example made it ambiguous if the arguments went
|
||||
inside the function arguments or were part of the right-hand value.
|
||||
|
||||
Resolves: #1485
|
||||
|
||||
#### sig_analog: Eliminate potential timeout with Last Number Redial.
|
||||
Author: Naveen Albert
|
||||
Date: 2025-09-29
|
||||
|
||||
If Last Number Redial is used to redial, ensure that we do not wait
|
||||
for further digits. This was possible if the number that was last
|
||||
dialed is a prefix of another possible dialplan match. Since all we
|
||||
did is copy the number into the extension buffer, if other matches
|
||||
are now possible, there would thus be a timeout before the call went
|
||||
through. We now complete redialed calls immediaetly in all cases.
|
||||
|
||||
Resolves: #1483
|
||||
|
||||
#### ARI: The bridges play and record APIs now handle sample rates > 8K correctly.
|
||||
Author: George Joseph
|
||||
Date: 2025-09-25
|
||||
|
||||
The bridge play and record APIs were forcing the Announcer/Recorder channel
|
||||
to slin8 which meant that if you played or recorded audio with a sample
|
||||
rate > 8K, it was downsampled to 8K limiting the bandwidth.
|
||||
|
||||
* The /bridges/play REST APIs have a new "announcer_format" parameter that
|
||||
allows the caller to explicitly set the format on the "Announcer" channel
|
||||
through which the audio is played into the bridge. If not specified, the
|
||||
default depends on how many channels are currently in the bridge. If
|
||||
a single channel is in the bridge, then the Announcer channel's format
|
||||
will be set to the same as that channel's. If multiple channels are in the
|
||||
bridge, the channels will be scanned to find the one with the highest
|
||||
sample rate and the Announcer channel's format will be set to the slin
|
||||
format that has an equal to or greater than sample rate.
|
||||
|
||||
* The /bridges/record REST API has a new "recorder_format" parameter that
|
||||
allows the caller to explicitly set the format on the "Recorder" channel
|
||||
from which audio is retrieved to write to the file. If not specified,
|
||||
the Recorder channel's format will be set to the format that was requested
|
||||
to save the audio in.
|
||||
|
||||
Resolves: #1479
|
||||
|
||||
DeveloperNote: The ARI /bridges/play and /bridges/record REST APIs have new
|
||||
parameters that allow the caller to specify the format to be used on the
|
||||
"Announcer" and "Recorder" channels respecitvely.
|
||||
|
||||
#### res_pjsip_geolocation: Add support for Geolocation loc-src parameter
|
||||
Author: Max Grobecker
|
||||
Date: 2025-09-21
|
||||
|
||||
This adds support for the Geolocation 'loc-src' parameter to res_pjsip_geolocation.
|
||||
The already existing config option 'location_source` in res_geolocation is documented to add a 'loc-src' parameter containing a user-defined FQDN to the 'Geolocation:' header,
|
||||
but that option had no effect as it was not implemented by res_pjsip_geolocation.
|
||||
|
||||
If the `location_source` configuration option is not set or invalid, that parameter will not be added (this is already checked by res_geolocation).
|
||||
|
||||
This commits adds already documented functionality.
|
||||
|
||||
#### sorcery: Move from threadpool to taskpool.
|
||||
Author: Joshua C. Colp
|
||||
Date: 2025-09-23
|
||||
|
||||
This change moves observer invocation from the use of
|
||||
a threadpool to a taskpool. The taskpool options have also
|
||||
been adjusted to ensure that at least one taskprocessor
|
||||
remains available at all times.
|
||||
|
||||
#### stasis_channels.c: Make protocol_id optional to enable blind transfer via ari
|
||||
Author: Sven Kube
|
||||
Date: 2025-09-22
|
||||
|
||||
When handling SIP transfers via ARI, there is no protocol_id in case of
|
||||
a blind transfer.
|
||||
|
||||
Resolves: #1467
|
||||
|
||||
#### Fix some doxygen, typos and whitespace
|
||||
Author: Bastian Triller
|
||||
Date: 2025-09-22
|
||||
|
||||
|
||||
#### stasis_channels.c: Add null check for referred_by in ast_ari_transfer_message_create
|
||||
Author: Sven Kube
|
||||
Date: 2025-09-18
|
||||
|
||||
When handling SIP transfers via ARI, the `referred_by` field in
|
||||
`transfer_ari_state` may be null, since SIP REFER requests are not
|
||||
required to include a `Referred-By` header. Without this check, a null
|
||||
value caused the transfer to fail and triggered a NOTIFY with a 500
|
||||
Internal Server Error.
|
||||
|
||||
#### app_queue: Add NULL pointer checks in app_queue
|
||||
Author: phoneben
|
||||
Date: 2025-09-11
|
||||
|
||||
Add NULL check for word_list before calling word_in_list()
|
||||
Add NULL checks for channel snapshots from ast_multi_channel_blob_get_channel()
|
||||
|
||||
Resolves: #1425
|
||||
|
||||
#### app_externalivr: Prevent out-of-bounds read during argument processing.
|
||||
Author: Sean Bright
|
||||
Date: 2025-09-17
|
||||
|
||||
Resolves: #1422
|
||||
|
||||
#### chan_dahdi: Add DAHDI_CHANNEL function.
|
||||
Author: Naveen Albert
|
||||
Date: 2025-09-11
|
||||
|
||||
Add a dialplan function that can be used to get/set properties of
|
||||
DAHDI channels (as opposed to Asterisk channels). This exposes
|
||||
properties that were not previously available, allowing for certain
|
||||
operations to now be performed in the dialplan.
|
||||
|
||||
Resolves: #1455
|
||||
|
||||
UserNote: The DAHDI_CHANNEL function allows for getting/setting
|
||||
certain properties about DAHDI channels from the dialplan.
|
||||
|
||||
#### taskpool: Update versions for taskpool stasis options.
|
||||
Author: Joshua C. Colp
|
||||
Date: 2025-09-16
|
||||
|
||||
|
||||
#### taskpool: Add taskpool API, switch Stasis to using it.
|
||||
Author: Joshua C. Colp
|
||||
Date: 2025-08-06
|
||||
|
||||
This change introduces a new API called taskpool. This is a pool
|
||||
of taskprocessors. It provides the following functionality:
|
||||
|
||||
1. Task pushing to a pool of taskprocessors
|
||||
2. Synchronous tasks
|
||||
3. Serializers for execution ordering of tasks
|
||||
4. Growing/shrinking of number of taskprocessors in pool
|
||||
|
||||
This functionality already exists through the combination of
|
||||
threadpool+taskprocessors but through investigating I determined
|
||||
that this carries substantial overhead for short to medium duration
|
||||
tasks. The threadpool uses a single queue of work, and for management
|
||||
of threads it involves additional tasks.
|
||||
|
||||
I wrote taskpool to eliminate the extra overhead and management
|
||||
as much as possible. Instead of a single queue of work each
|
||||
taskprocessor has its own queue and at push time a selector chooses
|
||||
the taskprocessor to queue the task to. Each taskprocessor also
|
||||
has its own thread like normal. This spreads out the tasks immediately
|
||||
and reduces contention on shared resources.
|
||||
|
||||
Using the included efficiency tests the number of tasks that can be
|
||||
executed per second in a taskpool is 6-12 times more than an equivalent
|
||||
threadpool+taskprocessor setup.
|
||||
|
||||
Stasis has been moved over to using this new API as it is a heavy consumer
|
||||
of threadpool+taskprocessors and produces a lot of tasks.
|
||||
|
||||
UpgradeNote: The threadpool_* options in stasis.conf have now been deprecated
|
||||
though they continue to be read and used. They have been replaced with taskpool
|
||||
options that give greater control over the underlying taskpool used for stasis.
|
||||
|
||||
DeveloperNote: The taskpool API has been added for common usage of a
|
||||
pool of taskprocessors. It is suggested to use this API instead of the
|
||||
threadpool+taskprocessor approach.
|
||||
|
||||
#### app_adsiprog: Fix possible NULL dereference.
|
||||
Author: Naveen Albert
|
||||
Date: 2025-09-10
|
||||
|
||||
get_token can return NULL, but process_token uses this result without
|
||||
checking for NULL; as elsewhere, check for a NULL result to avoid
|
||||
possible NULL dereference.
|
||||
|
||||
Resolves: #1419
|
||||
|
||||
#### manager.c: Fix presencestate object leak
|
||||
Author: Nathan Monfils
|
||||
Date: 2025-09-08
|
||||
|
||||
ast_presence_state allocates subtype and message. We straightforwardly
|
||||
need to clean those up.
|
||||
|
||||
#### audiohook.c: Ensure correct AO2 reference is dereffed.
|
||||
Author: Sean Bright
|
||||
Date: 2025-09-10
|
||||
|
||||
Part of #1440.
|
||||
|
||||
#### res_cliexec: Remove unnecessary casts to char*.
|
||||
Author: Naveen Albert
|
||||
Date: 2025-09-09
|
||||
|
||||
Resolves: #1436
|
||||
|
||||
#### rtp_engine.c: Add exception for comfort noise payload.
|
||||
Author: Ben Ford
|
||||
Date: 2025-09-09
|
||||
|
||||
In a previous commit, a change was made to
|
||||
ast_rtp_codecs_payload_code_tx_sample_rate to check for differing sample
|
||||
rates. This ended up returning an invalid payload int for comfort noise.
|
||||
A check has been added that returns early if the payload is in fact
|
||||
supposed to be comfort noise.
|
||||
|
||||
Fixes: #1340
|
||||
|
||||
#### pbx_variables.c: Create real channel for "dialplan eval function".
|
||||
Author: Naveen Albert
|
||||
Date: 2025-09-09
|
||||
|
||||
"dialplan eval function" has been using a dummy channel for function
|
||||
evaluation, much like many of the unit tests. However, sometimes, this
|
||||
can cause issues for functions that are not expecting dummy channels.
|
||||
As an example, ast_channel_tech(chan) is NULL on such channels, and
|
||||
ast_channel_tech(chan)->type consequently results in a NULL dereference.
|
||||
Normally, functions do not worry about this since channels executing
|
||||
dialplan aren't dummy channels.
|
||||
|
||||
While some functions are better about checking for these sorts of edge
|
||||
cases, use a real channel with a dummy technology to make this CLI
|
||||
command inherently safe for any dialplan function that could be evaluated
|
||||
from the CLI.
|
||||
|
||||
Resolves: #1434
|
||||
|
||||
@@ -1,963 +0,0 @@
|
||||
<html><head><title>ChangeLog for asterisk-20.18.0</title></head><body>
|
||||
<h2>Change Log for Release asterisk-20.18.0</h2>
|
||||
<h3>Links:</h3>
|
||||
<ul>
|
||||
<li><a href="https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-20.18.0.html">Full ChangeLog</a> </li>
|
||||
<li><a href="https://github.com/asterisk/asterisk/compare/20.17.0...20.18.0">GitHub Diff</a> </li>
|
||||
<li><a href="https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20.18.0.tar.gz">Tarball</a> </li>
|
||||
<li><a href="https://downloads.asterisk.org/pub/telephony/asterisk">Downloads</a> </li>
|
||||
</ul>
|
||||
<h3>Summary:</h3>
|
||||
<ul>
|
||||
<li>Commits: 57</li>
|
||||
<li>Commit Authors: 20</li>
|
||||
<li>Issues Resolved: 40</li>
|
||||
<li>Security Advisories Resolved: 0</li>
|
||||
</ul>
|
||||
<h3>User Notes:</h3>
|
||||
<ul>
|
||||
<li>
|
||||
<h4>chan_websocket.conf.sample: Fix category name.</h4>
|
||||
<p>The category name in the chan_websocket.conf.sample file was
|
||||
incorrect. It should be "global" instead of "general".</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>cli.c: Allow 'channel request hangup' to accept patterns.</h4>
|
||||
<p>The 'channel request hangup' CLI command now accepts
|
||||
multiple channel names, POSIX Extended Regular Expressions, glob-like
|
||||
patterns, or a combination of all of them. See the CLI command 'core
|
||||
show help channel request hangup' for full details.</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>res_sorcery_memory_cache: Reduce cache lock time for sorcery memory cache populate command</h4>
|
||||
<p>The AMI command sorcery memory cache populate will now
|
||||
return an error if there is an internal error performing the populate.
|
||||
The CLI command will display an error in this case as well.</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>res_geolocation: Fix multiple issues with XML generation.</h4>
|
||||
<p>Geolocation: Two new optional profile parameters have been added.</p>
|
||||
</li>
|
||||
<li><code>pidf_element_id</code> which sets the value of the <code>id</code> attribute on the top-level
|
||||
PIDF-LO <code>device</code>, <code>person</code> or <code>tuple</code> elements.</li>
|
||||
<li>
|
||||
<p><code>device_id</code> which sets the content of the <code><deviceID></code> element.
|
||||
Both parameters can include channel variables.</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>res_pjsip_messaging: Add support for following 3xx redirects</h4>
|
||||
<p>A new pjsip endpoint option follow_redirect_methods was added.
|
||||
This option is a comma-delimited, case-insensitive list of SIP methods
|
||||
for which SIP 3XX redirect responses are followed. An alembic upgrade
|
||||
script has been added for adding this new option to the Asterisk
|
||||
database.</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>taskprocessors: Improve logging and add new cli options</h4>
|
||||
<p>New CLI command has been added -
|
||||
core show taskprocessor name <taskprocessor-name></p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>ccss: Add option to ccss.conf to globally disable it.</h4>
|
||||
<p>A new "enabled" parameter has been added to ccss.conf. It defaults
|
||||
to "yes" to preserve backwards compatibility but CCSS is rarely used so
|
||||
setting "enabled = no" in the "general" section can save some unneeded channel
|
||||
locking operations and log message spam. Disabling ccss will also prevent
|
||||
the func_callcompletion and chan_dahdi modules from loading.</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Makefile: Add module-list-* targets.</h4>
|
||||
<p>Try "make module-list-deprecated" to see what modules
|
||||
are on their way out the door.</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>app_mixmonitor: Add 's' (skip) option to delay recording.</h4>
|
||||
<p>This change introduces a new 's(<seconds>)' (skip) option to the MixMonitor
|
||||
application. Example:
|
||||
MixMonitor(${UNIQUEID}.wav,s(3))
|
||||
This skips recording for the first 3 seconds before writing audio to the file.
|
||||
Existing MixMonitor behavior remains unchanged when the 's' option is not used.</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>app_queue.c: Only announce to head caller if announce_to_first_user</h4>
|
||||
<p>When announce_to_first_user is false, no announcements are played to the head caller</p>
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Upgrade Notes:</h3>
|
||||
<ul>
|
||||
<li>
|
||||
<h4>res_geolocation: Fix multiple issues with XML generation.</h4>
|
||||
Geolocation: In order to correct bugs in both code and
|
||||
documentation, the following changes to the parameters for GML geolocation
|
||||
locations are now in effect:</li>
|
||||
<li>The documented but unimplemented <code>crs</code> (coordinate reference system) element
|
||||
has been added to the location_info parameter that indicates whether the <code>2d</code>
|
||||
or <code>3d</code> reference system is to be used. If the crs isn't valid for the shape
|
||||
specified, an error will be generated. The default depends on the shape
|
||||
specified.</li>
|
||||
<li>The Circle, Ellipse and ArcBand shapes MUST use a <code>2d</code> crs. If crs isn't
|
||||
specified, it will default to <code>2d</code> for these shapes.
|
||||
The Sphere, Ellipsoid and Prism shapes MUST use a <code>3d</code> crs. If crs isn't
|
||||
specified, it will default to <code>3d</code> for these shapes.
|
||||
The Point and Polygon shapes may use either crs. The default crs is <code>2d</code>
|
||||
however so if <code>3d</code> positions are used, the crs must be explicitly set to <code>3d</code>.</li>
|
||||
<li>The <code>geoloc show gml_shape_defs</code> CLI command has been updated to show which
|
||||
coordinate reference systems are valid for each shape.</li>
|
||||
<li>The <code>pos3d</code> element has been removed in favor of allowing the <code>pos</code> element
|
||||
to include altitude if the crs is <code>3d</code>. The number of values in the <code>pos</code>
|
||||
element MUST be 2 if the crs is <code>2d</code> and 3 if the crs is <code>3d</code>. An error
|
||||
will be generated for any other combination.</li>
|
||||
<li>
|
||||
<p>The angle unit-of-measure for shapes that use angles should now be included
|
||||
in the respective parameter. The default is <code>degrees</code>. There were some
|
||||
inconsistent references to <code>orientation_uom</code> in some documentation but that
|
||||
parameter never worked and is now removed. See examples below.
|
||||
Examples...
|
||||
<code>location_info = shape="Sphere", pos="39.0 -105.0 1620", radius="20"
|
||||
location_info = shape="Point", crs="3d", pos="39.0 -105.0 1620"
|
||||
location_info = shape="Point", pos="39.0 -105.0"
|
||||
location_info = shape=Ellipsoid, pos="39.0 -105.0 1620", semiMajorAxis="20"
|
||||
semiMinorAxis="10", verticalAxis="0", orientation="25 degrees"
|
||||
pidf_element_id = ${CHANNEL(name)}-${EXTEN}
|
||||
device_id = mac:001122334455
|
||||
Set(GEOLOC_PROFILE(pidf_element_id)=${CHANNEL(name)}/${EXTEN})</code></p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>pjsip: Move from threadpool to taskpool</h4>
|
||||
<p>The threadpool_* options in pjsip.conf have now
|
||||
been deprecated though they continue to be read and used.
|
||||
They have been replaced with taskpool options that give greater
|
||||
control over the underlying taskpool used for PJSIP. An alembic
|
||||
upgrade script has been added to add these options to realtime
|
||||
as well.</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>app_directed_pickup.c: Change some log messages from NOTICE to VERBOSE.</h4>
|
||||
<p>In an effort to reduce log spam, two normal progress
|
||||
"pickup attempted" log messages from app_directed_pickup have been changed
|
||||
from NOTICE to VERBOSE(3). This puts them on par with other normal
|
||||
dialplan progress messages.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Developer Notes:</h3>
|
||||
<ul>
|
||||
<li>
|
||||
<h4>ccss: Add option to ccss.conf to globally disable it.</h4>
|
||||
<p>A new API ast_is_cc_enabled() has been added. It should be
|
||||
used to ensure that CCSS is enabled before making any other ast_cc_* calls.</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>chan_websocket: Add ability to place a MARK in the media stream.</h4>
|
||||
<p>Apps can now send a <code>MARK_MEDIA</code> command with an optional
|
||||
<code>correlation_id</code> parameter to chan_websocket which will be placed in the
|
||||
media frame queue. When that frame is dequeued after all intervening media
|
||||
has been played to the core, chan_websocket will send a
|
||||
<code>MEDIA_MARK_PROCESSED</code> event to the app with the same correlation_id
|
||||
(if any).</p>
|
||||
</li>
|
||||
<li>
|
||||
<h4>chan_websocket: Add capability for JSON control messages and events.</h4>
|
||||
<p>The chan_websocket plain-text control and event messages are now
|
||||
deprecated (but remain the default) in favor of JSON formatted messages.
|
||||
See https://docs.asterisk.org/Configuration/Channel-Drivers/WebSocket for
|
||||
more information.
|
||||
A "transport_data" parameter has been added to the</p>
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Commit Authors:</h3>
|
||||
<ul>
|
||||
<li>Alexei Gradinari: (1)</li>
|
||||
<li>C. Maj: (1)</li>
|
||||
<li>Daouda Taha: (1)</li>
|
||||
<li>Etienne Lessard: (1)</li>
|
||||
<li>George Joseph: (12)</li>
|
||||
<li>Joe Garlick: (2)</li>
|
||||
<li>Joshua C. Colp: (1)</li>
|
||||
<li>Justin T. Gibbs: (1)</li>
|
||||
<li>Kristian F. Høgh: (1)</li>
|
||||
<li>Maximilian Fridrich: (2)</li>
|
||||
<li>Michal Hajek: (1)</li>
|
||||
<li>Mike Bradeen: (2)</li>
|
||||
<li>Nathaniel Wesley Filardo: (1)</li>
|
||||
<li>Naveen Albert: (3)</li>
|
||||
<li>Peter Krall: (1)</li>
|
||||
<li>Sean Bright: (17)</li>
|
||||
<li>Sven Kube: (1)</li>
|
||||
<li>Tinet-mucw: (2)</li>
|
||||
<li>phoneben: (5)</li>
|
||||
<li>sarangr7: (1)</li>
|
||||
</ul>
|
||||
<h2>Issue and Commit Detail:</h2>
|
||||
<h3>Closed Issues:</h3>
|
||||
<ul>
|
||||
<li>60: [bug]: Can't enter any of UTF-8 character in the CLI prompt</li>
|
||||
<li>1417: [bug]: static code analysis issues in abstract_jb</li>
|
||||
<li>1421: [bug]: static code analysis issues in apps/app_dtmfstore.c</li>
|
||||
<li>1427: [bug]: static code analysis issues in apps/app_stream_echo.c</li>
|
||||
<li>1430: [bug]: static code analysis issues in res/stasis/app.c</li>
|
||||
<li>1442: [bug]: static code analysis issues in main/bridge_basic.c</li>
|
||||
<li>1444: [bug]: static code analysis issues in bridges/bridge_simple.c</li>
|
||||
<li>1446: [bug]: static code analysis issues in bridges/bridge_softmix.c</li>
|
||||
<li>1531: [bug]: Memory corruption in manager.c due to double free of criteria variable.</li>
|
||||
<li>1546: [improvement]: Not able to pass the custom variables over the websockets using external Media with ari client library nodejs</li>
|
||||
<li>1552: [improvement]: chan_dahdi.conf.sample: Warnings for callgroup/pickupgroup in stock config</li>
|
||||
<li>1563: [bug]: chan_websocket.c: Wrong variable used in ast_strings_equal() (payload instead of command)</li>
|
||||
<li>1566: [improvement]: Improve Taskprocessor logging</li>
|
||||
<li>1568: [improvement]: Queue is playing announcements when announce_to_first_user is false</li>
|
||||
<li>1572: [improvement]: List modules at various support levels</li>
|
||||
<li>1574: [improvement]: Add playback progress acknowledgment for WebSocket media (per-chunk or byte-level acknowledgment)</li>
|
||||
<li>1576: [improvement]: res_pjsip_messaging: Follow 3xx redirect messages if redirect_method=uri_pjsip</li>
|
||||
<li>1585: [bug]: cli 'stasis show topics' calls a read lock which freezes asterisk till the process is done</li>
|
||||
<li>1587: [bug]: chan_websocket terminates websocket on CNG/non-audio</li>
|
||||
<li>1590: [bug]: Fix: Use ast instead of p->chan to get the DIALSTATUS variable</li>
|
||||
<li>1597: [bug]: app_reload: Reload() without arguments doesn't work.</li>
|
||||
<li>1599: [bug]: pbx.c: Running "dialplan reload" shows wrong number of contexts</li>
|
||||
<li>1604: [bug]: asterisk crashes during dtmf input thru websocket -- fixed</li>
|
||||
<li>1609: [bug]: Crash: Double free in ast_channel_destructor leading to SIGABRT (Asterisk 20.17.0) with C++ channel storage</li>
|
||||
<li>1635: [bug]: Regression: Fix endpoint memory leak</li>
|
||||
<li>1638: [bug]: Channel drivers creating ephemeral channels create per-endpoint topics and cache when they shouldn't</li>
|
||||
<li>1643: [bug]: chan_websocket crash when channel hung up before read thread is started</li>
|
||||
<li>1645: [bug]: chan_websocket stuck channels</li>
|
||||
<li>1647: [bug]: "presencestate change" CLI command doesn't accept NOT_SET</li>
|
||||
<li>1648: [bug]: ARI announcer channel can cause crash in specific scenario due to unreffing of borrowed format</li>
|
||||
<li>1660: [bug]: missing hangup cause for ARI ChannelDestroyed when Originated channel times out</li>
|
||||
<li>1662: [improvement]: Include remote IP address in http.c “Requested URI has no handler” log entries</li>
|
||||
<li>1667: [bug]: Multiple geolocation issues with rendering XML</li>
|
||||
<li>1673: [bug]: A crash occurs during the call to mixmonitor_ds_remove_and_free</li>
|
||||
<li>1675: [bug]: res_pjsip_mwi: off-nominal endpoint ao2 reference leak in mwi_get_notify_data()</li>
|
||||
<li>1681: [bug]: stasis/control.c: Memory leak of hangup_time in set-timeout</li>
|
||||
<li>1683: [improvement]: chan_websocket: Use channel FD polling to read data from websocket instead of dedicated thread.</li>
|
||||
<li>1692: [improvement]: Add comment to asterisk.conf.sample clarifying that template sections are ignored</li>
|
||||
<li>1700: [improvement]: Improve sorcery cache populate</li>
|
||||
<li>1711: [bug]: Missing Contact: header in 200 OK</li>
|
||||
</ul>
|
||||
<h3>Commits By Author:</h3>
|
||||
<ul>
|
||||
<li>
|
||||
<h4>Alexei Gradinari (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<h4>C. Maj (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Daouda Taha (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Etienne Lessard (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<h4>George Joseph (12):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Joe Garlick (2):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Joshua C. Colp (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Justin T. Gibbs (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Kristian F. Høgh (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Maximilian Fridrich (2):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Michal Hajek (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Mike Bradeen (2):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Nathaniel Wesley Filardo (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Naveen Albert (3):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Peter Krall (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Sean Bright (17):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Sven Kube (1):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Tinet-mucw (2):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<h4>phoneben (5):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<h4>sarangr7 (1):</h4>
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Commit List:</h3>
|
||||
<ul>
|
||||
<li>chan_websocket.conf.sample: Fix category name.</li>
|
||||
<li>chan_websocket: Fixed Ping/Pong messages hanging up the websocket channel</li>
|
||||
<li>cli.c: Allow 'channel request hangup' to accept patterns.</li>
|
||||
<li>chan_sip.c: Ensure Contact header is set on responses to INVITE.</li>
|
||||
<li>res_sorcery_memory_cache: Reduce cache lock time for sorcery memory cache populate command</li>
|
||||
<li>Add comment to asterisk.conf.sample clarifying that template sections are ignored</li>
|
||||
<li>chan_websocket: Use the channel's ability to poll fds for the websocket read.</li>
|
||||
<li>asterisk.c: Allow multi-byte characters on the Asterisk CLI.</li>
|
||||
<li>func_presencestate.c: Allow <code>NOT_SET</code> to be set from CLI.</li>
|
||||
<li>res/ari/resource_bridges.c: Normalize channel_format ref handling for bridge media</li>
|
||||
<li>res_geolocation: Fix multiple issues with XML generation.</li>
|
||||
<li>stasis/control.c: Add destructor to timeout_datastore.</li>
|
||||
<li>func_talkdetect.c: Remove reference to non-existent variables.</li>
|
||||
<li>configure.ac: use AC_PATH_TOOL for nm</li>
|
||||
<li>res_pjsip_mwi: Fix off-nominal endpoint ao2 ref leak in mwi_get_notify_data</li>
|
||||
<li>res_pjsip_messaging: Add support for following 3xx redirects</li>
|
||||
<li>res_pjsip: Introduce redirect module for handling 3xx responses</li>
|
||||
<li>app_mixmonitor.c: Fix crash in mixmonitor_ds_remove_and_free when datastore is NULL</li>
|
||||
<li>res_pjsip_refer: don't defer session termination for ari transfer</li>
|
||||
<li>chan_dahdi.conf.sample: Avoid warnings with default configs.</li>
|
||||
<li>main/dial.c: Set channel hangup cause on timeout in handle_timeout_trip</li>
|
||||
<li>cel: Add missing manager documentation.</li>
|
||||
<li>res_odbc: Use SQL_SUCCEEDED() macro where applicable.</li>
|
||||
<li>rtp/rtcp: Configure dual-stack behavior via IPV6_V6ONLY</li>
|
||||
<li>http.c: Include remote address in URI handler message.</li>
|
||||
<li>pjsip: Move from threadpool to taskpool</li>
|
||||
<li>Disable device state caching for ephemeral channels</li>
|
||||
<li>chan_websocket: Add locking in send_event and check for NULL websocket handle.</li>
|
||||
<li>Fix false null-deref warning in channel_state</li>
|
||||
<li>endpoint.c: Plug a memory leak in ast_endpoint_shutdown().</li>
|
||||
<li>Revert "func_hangupcause.c: Add access to Reason headers via HANGUPCAUSE()"</li>
|
||||
<li>cel_manager.c: Correct manager event mask for CEL events.</li>
|
||||
<li>app_queue.c: Update docs to correct QueueMemberPause event name.</li>
|
||||
<li>taskprocessors: Improve logging and add new cli options</li>
|
||||
<li>manager: fix double free of criteria variable when adding filter</li>
|
||||
<li>app_stream_echo.c: Check that stream is non-NULL before dereferencing.</li>
|
||||
<li>abstract_jb.c: Remove redundant timer check per static analysis.</li>
|
||||
<li>channelstorage_cpp: Fix fallback return value in channelstorage callback</li>
|
||||
<li>ccss: Add option to ccss.conf to globally disable it.</li>
|
||||
<li>app_directed_pickup.c: Change some log messages from NOTICE to VERBOSE.</li>
|
||||
<li>chan_websocket: Fix crash on DTMF_END event.</li>
|
||||
<li>chan_websocket.c: Tolerate other frame types</li>
|
||||
<li>app_reload: Fix Reload() without arguments.</li>
|
||||
<li>pbx.c: Print new context count when reloading dialplan.</li>
|
||||
<li>Makefile: Add module-list-* targets.</li>
|
||||
<li>core_unreal.c: Use ast instead of p->chan to get the DIALSTATUS variable</li>
|
||||
<li>ast_coredumper: Fix multiple issues</li>
|
||||
<li>app_mixmonitor: Add 's' (skip) option to delay recording.</li>
|
||||
<li>stasis: switch stasis show topics temporary container from list - RBtree</li>
|
||||
<li>app_dtmfstore: Avoid a potential buffer overflow.</li>
|
||||
<li>main: Explicitly mark case statement fallthrough as such.</li>
|
||||
<li>bridge_softmix: Return early on topology allocation failure.</li>
|
||||
<li>bridge_simple: Increase code verbosity for clarity.</li>
|
||||
<li>app_queue.c: Only announce to head caller if announce_to_first_user</li>
|
||||
<li>chan_websocket: Add ability to place a MARK in the media stream.</li>
|
||||
<li>chan_websocket: Add capability for JSON control messages and events.</li>
|
||||
<li>build: Add menuselect options to facilitate code tracing and coverage</li>
|
||||
</ul>
|
||||
<h3>Commit Details:</h3>
|
||||
<h4>chan_websocket.conf.sample: Fix category name.</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2026-01-21</p>
|
||||
<p>UserNote: The category name in the chan_websocket.conf.sample file was
|
||||
incorrect. It should be "global" instead of "general".</p>
|
||||
<h4>chan_websocket: Fixed Ping/Pong messages hanging up the websocket channel</h4>
|
||||
<p>Author: Joe Garlick
|
||||
Date: 2026-01-15</p>
|
||||
<p>When chan_websocket received a Ping or a Pong opcode it would cause the channel to hangup. This change allows Ping/Pong opcodes and allows them to silently pass</p>
|
||||
<h4>cli.c: Allow 'channel request hangup' to accept patterns.</h4>
|
||||
<p>Author: Sean Bright
|
||||
Date: 2026-01-05</p>
|
||||
<p>This extends 'channel request hangup' to accept multiple channel
|
||||
names, a POSIX Extended Regular Expression, a glob-like pattern, or a
|
||||
combination of all of them.</p>
|
||||
<p>UserNote: The 'channel request hangup' CLI command now accepts
|
||||
multiple channel names, POSIX Extended Regular Expressions, glob-like
|
||||
patterns, or a combination of all of them. See the CLI command 'core
|
||||
show help channel request hangup' for full details.</p>
|
||||
<h4>chan_sip.c: Ensure Contact header is set on responses to INVITE.</h4>
|
||||
<p>Author: Etienne Lessard
|
||||
Date: 2026-01-09</p>
|
||||
<p>From the original report* on ASTERISK-24915:</p>
|
||||
<pre><code>> The problem occurs because the handle_incoming function updates
|
||||
p->method to req->method (p being a struct sip_pvt *) before
|
||||
checking if the CSeq makes sense, and if the CSeq is unexpected, it
|
||||
does not reset p->method to its old value before returning. Then,
|
||||
when asterisk sends the 200 OK response for the original INVITE,
|
||||
since p->method is now equal to SIP_ACK (instead of SIP_INVITE), the
|
||||
resp_need_contact function (called from respprep) says "its a SIP
|
||||
ACK, no need to add a Contact header for the response", which is
|
||||
wrong, since it's not a SIP ACK but a SIP INVITE dialog.
|
||||
</code></pre>
|
||||
<p>I have confirmed that the analysis is correct and that the patch fixes
|
||||
the behavior.</p>
|
||||
<p>*: https://issues-archive.asterisk.org/ASTERISK-24915</p>
|
||||
<p>Resolves: #1711</p>
|
||||
<h4>res_sorcery_memory_cache: Reduce cache lock time for sorcery memory cache populate command</h4>
|
||||
<p>Author: Mike Bradeen
|
||||
Date: 2026-01-06</p>
|
||||
<p>Reduce cache lock time for AMI and CLI sorcery memory cache populate
|
||||
commands by adding a new populate_lock to the sorcery_memory_cache
|
||||
struct which is locked separately from the existing cache lock so that
|
||||
the cache lock can be maintained for a reduced time, locking only when
|
||||
the cache objects are removed and re-populated.</p>
|
||||
<p>Resolves: #1700</p>
|
||||
<p>UserNote: The AMI command sorcery memory cache populate will now
|
||||
return an error if there is an internal error performing the populate.
|
||||
The CLI command will display an error in this case as well.</p>
|
||||
<h4>Add comment to asterisk.conf.sample clarifying that template sections are ignored</h4>
|
||||
<p>Author: phoneben
|
||||
Date: 2026-01-05</p>
|
||||
<p>Add comment to asterisk.conf.sample clarifying that template sections are ignored.</p>
|
||||
<p>Resolves: #1692</p>
|
||||
<h4>chan_websocket: Use the channel's ability to poll fds for the websocket read.</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2025-12-30</p>
|
||||
<p>We now add the websocket's file descriptor to the channel's fd array and let
|
||||
it poll for data availability instead if having a dedicated thread that
|
||||
does the polling. This eliminates the thread and allows removal of most
|
||||
explicit locking since the core channel code will lock the channel to prevent
|
||||
simultaneous calls to webchan_read, webchan_hangup, etc.</p>
|
||||
<p>While we were here, the hangup code was refactored to use ast_hangup_with_cause
|
||||
instead of directly queueing an AST_CONTROL_HANGUP frame. This allows us
|
||||
to set hangup causes and generate snapshots.</p>
|
||||
<p>For a bit of extra debugging, a table of websocket close codes was added
|
||||
to http_websocket.h with an accompanying "to string" function added to
|
||||
res_http_websocket.c</p>
|
||||
<p>Resolves: #1683</p>
|
||||
<h4>asterisk.c: Allow multi-byte characters on the Asterisk CLI.</h4>
|
||||
<p>Author: Sean Bright
|
||||
Date: 2025-12-13</p>
|
||||
<p>Versions of libedit that support Unicode expect that the
|
||||
EL_GETCFN (the function that does character I/O) will fill in a
|
||||
<code>wchar_t</code> with a character, which may be multi-byte. The built-in
|
||||
function that libedit provides, but does not expose with a public API,
|
||||
does properly handle multi-byte sequences.</p>
|
||||
<p>Due to the design of Asterisk's console processing loop, Asterisk
|
||||
provides its own implementation which does not handle multi-byte
|
||||
characters. Changing Asterisk to use libedit's built-in function would
|
||||
be ideal, but would also require changing some fundamental things
|
||||
about console processing which could be fairly disruptive.</p>
|
||||
<p>Instead, we bring in libedit's <code>read_char</code> implementation and modify
|
||||
it to suit our specific needs.</p>
|
||||
<p>Resolves: #60</p>
|
||||
<h4>func_presencestate.c: Allow <code>NOT_SET</code> to be set from CLI.</h4>
|
||||
<p>Author: Sean Bright
|
||||
Date: 2026-01-01</p>
|
||||
<p>Resolves: #1647</p>
|
||||
<h4>res/ari/resource_bridges.c: Normalize channel_format ref handling for bridge media</h4>
|
||||
<p>Author: Peter Krall
|
||||
Date: 2025-12-17</p>
|
||||
<p>Always take an explicit reference on the format used for bridge playback
|
||||
and recording channels, regardless of where it was sourced, and release
|
||||
it after prepare_bridge_media_channel. This aligns the code paths and
|
||||
avoids mixing borrowed and owned references while preserving behavior.</p>
|
||||
<p>Fixes: #1648</p>
|
||||
<h4>res_geolocation: Fix multiple issues with XML generation.</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2025-12-17</p>
|
||||
<ul>
|
||||
<li>3d positions were being rendered without an enclosing <code><gml:pos></code>
|
||||
element resulting in invalid XML.</li>
|
||||
<li>There was no way to set the <code>id</code> attribute on the enclosing <code>tuple</code>, <code>device</code>
|
||||
and <code>person</code> elements.</li>
|
||||
<li>There was no way to set the value of the <code>deviceID</code> element.</li>
|
||||
<li>Parsing of degree and radian UOMs was broken resulting in them appearing
|
||||
outside an XML element.</li>
|
||||
<li>The UOM schemas for degrees and radians were reversed.</li>
|
||||
<li>The Ellipsoid shape was missing and the Ellipse shape was defined multiple
|
||||
times.</li>
|
||||
<li>The <code>crs</code> location_info parameter, although documented, didn't work.</li>
|
||||
<li>The <code>pos3d</code> location_info parameter appears in some documentation but
|
||||
wasn't being parsed correctly.</li>
|
||||
<li>The retransmission-allowed and retention-expiry sub-elements of usage-rules
|
||||
were using the <code>gp</code> namespace instead of the <code>gbp</code> namespace.</li>
|
||||
</ul>
|
||||
<p>In addition to fixing the above, several other code refactorings were
|
||||
performed and the unit test enhanced to include a round trip
|
||||
XML -> eprofile -> XML validation.</p>
|
||||
<p>Resolves: #1667</p>
|
||||
<p>UserNote: Geolocation: Two new optional profile parameters have been added.
|
||||
* <code>pidf_element_id</code> which sets the value of the <code>id</code> attribute on the top-level
|
||||
PIDF-LO <code>device</code>, <code>person</code> or <code>tuple</code> elements.
|
||||
* <code>device_id</code> which sets the content of the <code><deviceID></code> element.
|
||||
Both parameters can include channel variables.</p>
|
||||
<p>UpgradeNote: Geolocation: In order to correct bugs in both code and
|
||||
documentation, the following changes to the parameters for GML geolocation
|
||||
locations are now in effect:
|
||||
* The documented but unimplemented <code>crs</code> (coordinate reference system) element
|
||||
has been added to the location_info parameter that indicates whether the <code>2d</code>
|
||||
or <code>3d</code> reference system is to be used. If the crs isn't valid for the shape
|
||||
specified, an error will be generated. The default depends on the shape
|
||||
specified.
|
||||
* The Circle, Ellipse and ArcBand shapes MUST use a <code>2d</code> crs. If crs isn't
|
||||
specified, it will default to <code>2d</code> for these shapes.
|
||||
The Sphere, Ellipsoid and Prism shapes MUST use a <code>3d</code> crs. If crs isn't
|
||||
specified, it will default to <code>3d</code> for these shapes.
|
||||
The Point and Polygon shapes may use either crs. The default crs is <code>2d</code>
|
||||
however so if <code>3d</code> positions are used, the crs must be explicitly set to <code>3d</code>.
|
||||
* The <code>geoloc show gml_shape_defs</code> CLI command has been updated to show which
|
||||
coordinate reference systems are valid for each shape.
|
||||
* The <code>pos3d</code> element has been removed in favor of allowing the <code>pos</code> element
|
||||
to include altitude if the crs is <code>3d</code>. The number of values in the <code>pos</code>
|
||||
element MUST be 2 if the crs is <code>2d</code> and 3 if the crs is <code>3d</code>. An error
|
||||
will be generated for any other combination.
|
||||
* The angle unit-of-measure for shapes that use angles should now be included
|
||||
in the respective parameter. The default is <code>degrees</code>. There were some
|
||||
inconsistent references to <code>orientation_uom</code> in some documentation but that
|
||||
parameter never worked and is now removed. See examples below.
|
||||
Examples...
|
||||
<code>location_info = shape="Sphere", pos="39.0 -105.0 1620", radius="20"
|
||||
location_info = shape="Point", crs="3d", pos="39.0 -105.0 1620"
|
||||
location_info = shape="Point", pos="39.0 -105.0"
|
||||
location_info = shape=Ellipsoid, pos="39.0 -105.0 1620", semiMajorAxis="20"
|
||||
semiMinorAxis="10", verticalAxis="0", orientation="25 degrees"
|
||||
pidf_element_id = ${CHANNEL(name)}-${EXTEN}
|
||||
device_id = mac:001122334455
|
||||
Set(GEOLOC_PROFILE(pidf_element_id)=${CHANNEL(name)}/${EXTEN})</code></p>
|
||||
<h4>stasis/control.c: Add destructor to timeout_datastore.</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2025-12-31</p>
|
||||
<p>The timeout_datastore was missing a destructor resulting in a leak
|
||||
of 16 bytes for every outgoing ARI call.</p>
|
||||
<p>Resolves: #1681</p>
|
||||
<h4>func_talkdetect.c: Remove reference to non-existent variables.</h4>
|
||||
<p>Author: Sean Bright
|
||||
Date: 2025-12-30</p>
|
||||
<h4>configure.ac: use AC_PATH_TOOL for nm</h4>
|
||||
<p>Author: Nathaniel Wesley Filardo
|
||||
Date: 2025-11-27</p>
|
||||
<p><code>nm</code> might, especially in cross-compilation scenarios, be available but prefixed with the target triple. So: use <code>AC_PATH_TOOL</code> rather than <code>AC_PATH_PROG</code> to find it. (See https://www.gnu.org/software/autoconf/manual/autoconf-2.68/html_node/Generic-Programs.html .)</p>
|
||||
<p>Found and proposed fix tested by cross-compiling Asterisk using Nixpkgs on x86_64 targeting aarch64. :)</p>
|
||||
<h4>res_pjsip_mwi: Fix off-nominal endpoint ao2 ref leak in mwi_get_notify_data</h4>
|
||||
<p>Author: Alexei Gradinari
|
||||
Date: 2025-12-29</p>
|
||||
<p>Delay acquisition of the ast_sip_endpoint reference in mwi_get_notify_data()
|
||||
to avoid an ao2 ref leak on early-return error paths.</p>
|
||||
<p>Move ast_sip_subscription_get_endpoint() to just before first use so all
|
||||
acquired references are properly cleaned up.</p>
|
||||
<p>Fixes: #1675</p>
|
||||
<h4>res_pjsip_messaging: Add support for following 3xx redirects</h4>
|
||||
<p>Author: Maximilian Fridrich
|
||||
Date: 2025-11-07</p>
|
||||
<p>This commit integrates the redirect module into res_pjsip_messaging
|
||||
to enable following 3xx redirect responses for outgoing SIP MESSAGEs.</p>
|
||||
<p>When follow_redirect_methods contains 'message' on an endpoint, Asterisk
|
||||
will now follow 3xx redirect responses for MESSAGEs, similar to how
|
||||
it behaves for INVITE responses.</p>
|
||||
<p>Resolves: #1576</p>
|
||||
<p>UserNote: A new pjsip endpoint option follow_redirect_methods was added.
|
||||
This option is a comma-delimited, case-insensitive list of SIP methods
|
||||
for which SIP 3XX redirect responses are followed. An alembic upgrade
|
||||
script has been added for adding this new option to the Asterisk
|
||||
database.</p>
|
||||
<h4>res_pjsip: Introduce redirect module for handling 3xx responses</h4>
|
||||
<p>Author: Maximilian Fridrich
|
||||
Date: 2025-11-07</p>
|
||||
<p>This commit introduces a new redirect handling module that provides
|
||||
infrastructure for following SIP 3xx redirect responses. The redirect
|
||||
functionality respects the endpoint's redirect_method setting and only
|
||||
follows redirects when set to 'uri_pjsip'. This infrastructure can be
|
||||
used by any PJSIP module that needs to handle 3xx redirect responses.</p>
|
||||
<h4>app_mixmonitor.c: Fix crash in mixmonitor_ds_remove_and_free when datastore is NULL</h4>
|
||||
<p>Author: Tinet-mucw
|
||||
Date: 2025-12-25</p>
|
||||
<p>The datastore may be NULL, so a null pointer check needs to be added.</p>
|
||||
<p>Resolves: #1673</p>
|
||||
<h4>res_pjsip_refer: don't defer session termination for ari transfer</h4>
|
||||
<p>Author: Sven Kube
|
||||
Date: 2025-10-23</p>
|
||||
<p>Allow session termination during an in progress ari handled transfer.</p>
|
||||
<h4>chan_dahdi.conf.sample: Avoid warnings with default configs.</h4>
|
||||
<p>Author: Naveen Albert
|
||||
Date: 2025-10-23</p>
|
||||
<p>callgroup and pickupgroup may only be specified for FXO-signaled channels;
|
||||
however, the chan_dahdi sample config had these options uncommented in
|
||||
the [channels] section, thus applying these settings to all channels,
|
||||
resulting in warnings. Comment these out so there are no warnings with
|
||||
an unmodified sample config.</p>
|
||||
<p>Resolves: #1552</p>
|
||||
<h4>main/dial.c: Set channel hangup cause on timeout in handle_timeout_trip</h4>
|
||||
<p>Author: sarangr7
|
||||
Date: 2025-12-18</p>
|
||||
<p>When dial attempts timeout in the core dialing API, the channel's hangup
|
||||
cause was not being set before hanging up. Only the ast_dial_channel
|
||||
structure's internal cause field was updated, but the actual ast_channel
|
||||
hangup cause remained unset.</p>
|
||||
<p>This resulted in incorrect or missing hangup cause information being
|
||||
reported through CDRs, AMI events, and other mechanisms that read the
|
||||
channel's hangup cause when dial timeouts occurred via applications
|
||||
using the dialing API (FollowMe, Page, etc.).</p>
|
||||
<p>The fix adds proper channel locking and sets AST_CAUSE_NO_ANSWER on
|
||||
the channel before calling ast_hangup(), ensuring consistent hangup
|
||||
cause reporting across all interfaces.</p>
|
||||
<p>Resolves: #1660</p>
|
||||
<h4>cel: Add missing manager documentation.</h4>
|
||||
<p>Author: Sean Bright
|
||||
Date: 2025-12-12</p>
|
||||
<p>The LOCAL_OPTIMIZE_BEGIN, STREAM_BEGIN, STREAM_END, and DTMF CEL
|
||||
events were not all documented in the CEL configuration file or the
|
||||
manager documentation for the CEL event.</p>
|
||||
<h4>res_odbc: Use SQL_SUCCEEDED() macro where applicable.</h4>
|
||||
<p>Author: Sean Bright
|
||||
Date: 2025-12-17</p>
|
||||
<p>This is just a cleanup of some repetitive code.</p>
|
||||
<h4>rtp/rtcp: Configure dual-stack behavior via IPV6_V6ONLY</h4>
|
||||
<p>Author: Justin T. Gibbs
|
||||
Date: 2025-12-21</p>
|
||||
<p>Dual-stack behavior (simultaneous listening for IPV4 and IPV6
|
||||
connections on a single socket) is required by Asterisk's ICE
|
||||
implementation. On systems with the IPV6_V6ONLY sockopt, set
|
||||
the option to 0 (dual-stack enabled) when binding to the IPV6
|
||||
any address. This ensures correct behavior regardless of the
|
||||
system's default dual-stack configuration.</p>
|
||||
<h4>http.c: Include remote address in URI handler message.</h4>
|
||||
<p>Author: Sean Bright
|
||||
Date: 2025-12-22</p>
|
||||
<p>Resolves: #1662</p>
|
||||
<h4>pjsip: Move from threadpool to taskpool</h4>
|
||||
<p>Author: Joshua C. Colp
|
||||
Date: 2025-12-04</p>
|
||||
<p>This change moves the PJSIP module from the threadpool API
|
||||
to the taskpool API. PJSIP-specific implementations for
|
||||
task usage have been removed and replaced with calls to
|
||||
the optimized taskpool implementations instead. The need
|
||||
for a pool of serializers has also been removed as
|
||||
taskpool inherently provides this. The default settings
|
||||
have also been changed to be more realistic for common
|
||||
usage.</p>
|
||||
<p>UpgradeNote: The threadpool_* options in pjsip.conf have now
|
||||
been deprecated though they continue to be read and used.
|
||||
They have been replaced with taskpool options that give greater
|
||||
control over the underlying taskpool used for PJSIP. An alembic
|
||||
upgrade script has been added to add these options to realtime
|
||||
as well.</p>
|
||||
<h4>Disable device state caching for ephemeral channels</h4>
|
||||
<p>Author: phoneben
|
||||
Date: 2025-12-09</p>
|
||||
<p>chan_audiosocket/chan_rtp/res_stasis_snoop: Disable device state caching for ephemeral channels</p>
|
||||
<p>Resolves: #1638</p>
|
||||
<h4>chan_websocket: Add locking in send_event and check for NULL websocket handle.</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2025-12-10</p>
|
||||
<p>On an outbound websocket connection, when the triggering caller hangs up,
|
||||
webchan_hangup() closes the outbound websocket session and sets the websocket
|
||||
session handle to NULL. If the hangup happened in the tiny window between
|
||||
opening the outbound websocket connection and before read_thread_handler()
|
||||
was able to send the MEDIA_START message, it could segfault because the
|
||||
websocket session handle was NULL. If it didn't actually segfault, there was
|
||||
also the possibility that the websocket instance wouldn't get cleaned up which
|
||||
could also cause the channel snapshot to not get cleaned up. That could
|
||||
cause memory leaks and <code>core show channels</code> to list phantom WebSocket
|
||||
channels.</p>
|
||||
<p>To prevent the race, the send_event() macro now locks the websocket_pvt
|
||||
instance and checks the websocket session handle before attempting to send
|
||||
the MEDIA_START message.</p>
|
||||
<p>Resolves: #1643
|
||||
Resolves: #1645</p>
|
||||
<h4>Fix false null-deref warning in channel_state</h4>
|
||||
<p>Author: phoneben
|
||||
Date: 2025-12-08</p>
|
||||
<p>Resolve analyzer warning in channel_state by checking AST_FLAG_DEAD on snapshot, which is guaranteed non-NULL.</p>
|
||||
<p>Resolves: #1430</p>
|
||||
<h4>endpoint.c: Plug a memory leak in ast_endpoint_shutdown().</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2025-12-08</p>
|
||||
<p>Commit 26795be introduced a memory leak of ast_endpoint when
|
||||
ast_endpoint_shutdown() was called. The leak occurs only if a configuration
|
||||
change removes an endpoint and isn't related to call volume or the length of
|
||||
time asterisk has been running. An ao2_ref(-1) has been added to
|
||||
ast_endpoint_shutdown() to plug the leak.</p>
|
||||
<p>Resolves: #1635</p>
|
||||
<h4>Revert "func_hangupcause.c: Add access to Reason headers via HANGUPCAUSE()"</h4>
|
||||
<p>Author: Sean Bright
|
||||
Date: 2025-12-03</p>
|
||||
<p>This reverts commit 517766299093d7a9798af68b39951ed8b2469836.</p>
|
||||
<p>For rationale, see #1621 and #1606</p>
|
||||
<h4>cel_manager.c: Correct manager event mask for CEL events.</h4>
|
||||
<p>Author: Sean Bright
|
||||
Date: 2025-12-05</p>
|
||||
<p>There is no EVENT_FLAG_CEL and these events are raised with as
|
||||
EVENT_FLAG_CALL.</p>
|
||||
<h4>app_queue.c: Update docs to correct QueueMemberPause event name.</h4>
|
||||
<p>Author: Sean Bright
|
||||
Date: 2025-12-04</p>
|
||||
<h4>taskprocessors: Improve logging and add new cli options</h4>
|
||||
<p>Author: Mike Bradeen
|
||||
Date: 2025-10-28</p>
|
||||
<p>This change makes some small changes to improve log readability in
|
||||
addition to the following changes:</p>
|
||||
<p>Modified 'core show taskprocessors' to now show Low time and High time
|
||||
for task execution.</p>
|
||||
<p>New command 'core show taskprocessor name <taskprocessor-name>' to dump
|
||||
taskprocessor info and current queue.</p>
|
||||
<p>Addionally, a new test was added to demonstrate the 'show taskprocessor
|
||||
name' functionality:
|
||||
test execute category /main/taskprocessor/ name taskprocessor_cli_show</p>
|
||||
<p>Setting 'core set debug 3 taskprocessor.c' will now log pushed tasks.
|
||||
(Warning this is will cause extremely high levels of logging at even
|
||||
low traffic levels.)</p>
|
||||
<p>Resolves: #1566</p>
|
||||
<p>UserNote: New CLI command has been added -
|
||||
core show taskprocessor name <taskprocessor-name></p>
|
||||
<h4>manager: fix double free of criteria variable when adding filter</h4>
|
||||
<p>Author: Michal Hajek
|
||||
Date: 2025-10-13</p>
|
||||
<p>Signed-off-by: Michal Hajek <a href="mailto:michal.hajek@daktela.com">michal.hajek@daktela.com</a></p>
|
||||
<p>Fixes: #1531</p>
|
||||
<h4>app_stream_echo.c: Check that stream is non-NULL before dereferencing.</h4>
|
||||
<p>Author: Sean Bright
|
||||
Date: 2025-12-01</p>
|
||||
<p>Also re-order and rename the arguments of <code>stream_echo_write_error</code> to
|
||||
match those of <code>ast_write_stream</code> for consistency.</p>
|
||||
<p>Resolves: #1427</p>
|
||||
<h4>abstract_jb.c: Remove redundant timer check per static analysis.</h4>
|
||||
<p>Author: Sean Bright
|
||||
Date: 2025-12-01</p>
|
||||
<p>While this check is technically unnecessary, it also was not harmful.</p>
|
||||
<p>The 2 other items mentioned in the linked issue are false positives
|
||||
and require no action.</p>
|
||||
<p>Resolves: #1417</p>
|
||||
<h4>channelstorage_cpp: Fix fallback return value in channelstorage callback</h4>
|
||||
<p>Author: phoneben
|
||||
Date: 2025-11-26</p>
|
||||
<p>callback returned the last iterated channel when no match existed, causing invalid channel references and potential double frees. Updated to correctly return NULL when there is no match.</p>
|
||||
<p>Resolves: #1609</p>
|
||||
<h4>ccss: Add option to ccss.conf to globally disable it.</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2025-11-19</p>
|
||||
<p>The Call Completion Supplementary Service feature is rarely used but many of
|
||||
it's functions are called by app_dial and channel.c "just in case". These
|
||||
functions lock and unlock the channel just to see if CCSS is enabled on it,
|
||||
which it isn't 99.99% of the time.</p>
|
||||
<p>UserNote: A new "enabled" parameter has been added to ccss.conf. It defaults
|
||||
to "yes" to preserve backwards compatibility but CCSS is rarely used so
|
||||
setting "enabled = no" in the "general" section can save some unneeded channel
|
||||
locking operations and log message spam. Disabling ccss will also prevent
|
||||
the func_callcompletion and chan_dahdi modules from loading.</p>
|
||||
<p>DeveloperNote: A new API ast_is_cc_enabled() has been added. It should be
|
||||
used to ensure that CCSS is enabled before making any other ast_cc_* calls.</p>
|
||||
<h4>app_directed_pickup.c: Change some log messages from NOTICE to VERBOSE.</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2025-11-20</p>
|
||||
<p>UpgradeNote: In an effort to reduce log spam, two normal progress
|
||||
"pickup attempted" log messages from app_directed_pickup have been changed
|
||||
from NOTICE to VERBOSE(3). This puts them on par with other normal
|
||||
dialplan progress messages.</p>
|
||||
<h4>chan_websocket: Fix crash on DTMF_END event.</h4>
|
||||
<p>Author: Sean Bright
|
||||
Date: 2025-11-20</p>
|
||||
<p>Resolves: #1604</p>
|
||||
<h4>chan_websocket.c: Tolerate other frame types</h4>
|
||||
<p>Author: Joe Garlick
|
||||
Date: 2025-11-12</p>
|
||||
<p>Currently, if chan_websocket receives an un supported frame like comfort noise it will exit the websocket. The proposed change is to tolerate the other frames by not sending them down the websocket but instead just ignoring them.</p>
|
||||
<p>Resolves: #1587</p>
|
||||
<h4>app_reload: Fix Reload() without arguments.</h4>
|
||||
<p>Author: Naveen Albert
|
||||
Date: 2025-11-17</p>
|
||||
<p>Calling Reload() without any arguments is supposed to reload
|
||||
everything (equivalent to a 'core reload'), but actually does
|
||||
nothing. This is because it was calling ast_module_reload with
|
||||
an empty string, and the argument needs to explicitly be NULL.</p>
|
||||
<p>Resolves: #1597</p>
|
||||
<h4>pbx.c: Print new context count when reloading dialplan.</h4>
|
||||
<p>Author: Naveen Albert
|
||||
Date: 2025-11-17</p>
|
||||
<p>When running "dialplan reload", the number of contexts reported
|
||||
is initially wrong, as it is the old context count. Running
|
||||
"dialplan reload" a second time returns the correct number of
|
||||
contexts that are loaded. This can confuse users into thinking
|
||||
that the reload didn't work successfully the first time.</p>
|
||||
<p>This counter is currently only incremented when iterating the
|
||||
old contexts prior to the context merge; at the very end, get
|
||||
the current number of elements in the context hash table and
|
||||
report that instead. This way, the count is correct immediately
|
||||
whenever a reload occurs.</p>
|
||||
<p>Resolves: #1599</p>
|
||||
<h4>Makefile: Add module-list-* targets.</h4>
|
||||
<p>Author: C. Maj
|
||||
Date: 2025-11-17</p>
|
||||
<p>Convenience wrappers for showing modules at various support levels.</p>
|
||||
<ul>
|
||||
<li>module-list-core</li>
|
||||
<li>module-list-extended</li>
|
||||
<li>module-list-deprecated</li>
|
||||
</ul>
|
||||
<p>Resolves: #1572</p>
|
||||
<p>UserNote: Try "make module-list-deprecated" to see what modules
|
||||
are on their way out the door.</p>
|
||||
<h4>core_unreal.c: Use ast instead of p->chan to get the DIALSTATUS variable</h4>
|
||||
<p>Author: Tinet-mucw
|
||||
Date: 2025-11-13</p>
|
||||
<p>After p->chan = NULL, ast still points to the valid channel object,
|
||||
using ast safely accesses the channel's DIALSTATUS variable before it's fully destroyed</p>
|
||||
<p>Resolves: #1590</p>
|
||||
<h4>ast_coredumper: Fix multiple issues</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2025-11-07</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>Fixed an issue with tarball-coredumps when asterisk was invoked without an
|
||||
absolute path.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Fixed an issue with gdb itself segfaulting when trying to get symbols from
|
||||
separate debuginfo files. The command line arguments needed to be altered
|
||||
such that the gdbinit files is loaded before anything else but the
|
||||
<code>dump-asterisk</code> command is run after full initialization.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>In the embedded gdbinit script:</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>The extract_string_symbol function needed a <code>char *</code> cast to work properly.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The s_strip function needed to be updated to continue to work with the
|
||||
cpp_map_name_id channel storage backend.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>A new function was added to dump the channels when cpp_map_name_id was
|
||||
used.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The Channel object was updated to account for the new channel storage
|
||||
backends</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The show_locks function was refactored to work correctly.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<h4>app_mixmonitor: Add 's' (skip) option to delay recording.</h4>
|
||||
<p>Author: Daouda Taha
|
||||
Date: 2025-10-28</p>
|
||||
<p>The 's' (skip) option delays MixMonitor recording until the specified number of seconds
|
||||
(can be fractional) have elapsed since MixMonitor was invoked.</p>
|
||||
<p>No audio is written to the recording file during this time. If the call ends before this
|
||||
period, no audio will be saved. This is useful for avoiding early audio such as
|
||||
announcements, ringback tones, or other non-essential sounds.</p>
|
||||
<p>UserNote: This change introduces a new 's(<seconds>)' (skip) option to the MixMonitor
|
||||
application. Example:
|
||||
MixMonitor(${UNIQUEID}.wav,s(3))</p>
|
||||
<p>This skips recording for the first 3 seconds before writing audio to the file.
|
||||
Existing MixMonitor behavior remains unchanged when the 's' option is not used.</p>
|
||||
<h4>stasis: switch stasis show topics temporary container from list - RBtree</h4>
|
||||
<p>Author: phoneben
|
||||
Date: 2025-11-11</p>
|
||||
<p>switch stasis show topics temporary container from list to RB-tree
|
||||
minimizing lock time</p>
|
||||
<p>Resolves: #1585</p>
|
||||
<h4>app_dtmfstore: Avoid a potential buffer overflow.</h4>
|
||||
<p>Author: Sean Bright
|
||||
Date: 2025-11-07</p>
|
||||
<p>Prefer snprintf() so we can readily detect if our output was
|
||||
truncated.</p>
|
||||
<p>Resolves: #1421</p>
|
||||
<h4>main: Explicitly mark case statement fallthrough as such.</h4>
|
||||
<p>Author: Sean Bright
|
||||
Date: 2025-11-07</p>
|
||||
<p>Resolves: #1442</p>
|
||||
<h4>bridge_softmix: Return early on topology allocation failure.</h4>
|
||||
<p>Author: Sean Bright
|
||||
Date: 2025-11-07</p>
|
||||
<p>Resolves: #1446</p>
|
||||
<h4>bridge_simple: Increase code verbosity for clarity.</h4>
|
||||
<p>Author: Sean Bright
|
||||
Date: 2025-11-07</p>
|
||||
<p>There's no actual problem here, but I can see how it might by
|
||||
confusing.</p>
|
||||
<p>Resolves: #1444</p>
|
||||
<h4>app_queue.c: Only announce to head caller if announce_to_first_user</h4>
|
||||
<p>Author: Kristian F. Høgh
|
||||
Date: 2025-10-30</p>
|
||||
<p>Only make announcements to head caller if announce_to_first_user is true</p>
|
||||
<p>Fixes: #1568</p>
|
||||
<p>UserNote: When announce_to_first_user is false, no announcements are played to the head caller</p>
|
||||
<h4>chan_websocket: Add ability to place a MARK in the media stream.</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2025-11-05</p>
|
||||
<p>Also cleaned up a few unused #if blocks, and started sending a few ERROR
|
||||
events back to the apps.</p>
|
||||
<p>Resolves: #1574</p>
|
||||
<p>DeveloperNote: Apps can now send a <code>MARK_MEDIA</code> command with an optional
|
||||
<code>correlation_id</code> parameter to chan_websocket which will be placed in the
|
||||
media frame queue. When that frame is dequeued after all intervening media
|
||||
has been played to the core, chan_websocket will send a
|
||||
<code>MEDIA_MARK_PROCESSED</code> event to the app with the same correlation_id
|
||||
(if any).</p>
|
||||
<h4>chan_websocket: Add capability for JSON control messages and events.</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2025-10-22</p>
|
||||
<p>With recent enhancements to chan_websocket, the original plain-text
|
||||
implementation of control messages and events is now too limiting. We
|
||||
probably should have used JSON initially but better late than never. Going
|
||||
forward, enhancements that require control message or event changes will
|
||||
only be done to the JSON variants and the plain-text variants are now
|
||||
deprecated but not yet removed.</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>Added the chan_websocket.conf config file that allows setting which control
|
||||
message format to use globally: "json" or "plain-text". "plain-text" is the
|
||||
default for now to preserve existing behavior.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Added a dialstring option <code>f(json|plain-text)</code> to allow the format to be
|
||||
overridden on a call-by-call basis. Again, 'plain-text' is the default for
|
||||
now to preserve existing behavior.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>The JSON for commands sent by the app to Asterisk must be...
|
||||
<code>{ "command": "<command>" ... }</code> where <code><command></code> is one of <code>ANSWER</code>, <code>HANGUP</code>,
|
||||
<code>START_MEDIA_BUFFERING</code>, etc. The <code>STOP_MEDIA_BUFFERING</code> command takes an
|
||||
additional, optional parameter to be returned in the corresponding
|
||||
<code>MEDIA_BUFFERING_COMPLETED</code> event:
|
||||
<code>{ "command": "STOP_MEDIA_BUFFERING", "correlation_id": "<correlation id>" }</code>.</p>
|
||||
<p>The JSON for events sent from Asterisk to the app will be...
|
||||
<code>{ "event": "<event>", "channel_id": "<channel_id>" ... }</code>.
|
||||
The <code>MEDIA_START</code> event will now look like...</p>
|
||||
<p><code>{
|
||||
"event": "MEDIA_START",
|
||||
"connection_id": "media_connection1",
|
||||
"channel": "WebSocket/media_connection1/0x5140001a0040",
|
||||
"channel_id": "1761245643.1",
|
||||
"format": "ulaw",
|
||||
"optimal_frame_size": 160,
|
||||
"ptime": 20,
|
||||
"channel_variables": {
|
||||
"DIALEDPEERNUMBER": "media_connection1/c(ulaw)",
|
||||
"MEDIA_WEBSOCKET_CONNECTION_ID": "media_connection1",
|
||||
"MEDIA_WEBSOCKET_OPTIMAL_FRAME_SIZE": "160"
|
||||
}
|
||||
}</code></p>
|
||||
<p>Note the addition of the channel variables which can't be supported
|
||||
with the plain-text formatting.</p>
|
||||
<p>The documentation will be updated with the exact formats for all commands
|
||||
and events.</p>
|
||||
<p>Resolves: #1546
|
||||
Resolves: #1563</p>
|
||||
<p>DeveloperNote: The chan_websocket plain-text control and event messages are now
|
||||
deprecated (but remain the default) in favor of JSON formatted messages.
|
||||
See https://docs.asterisk.org/Configuration/Channel-Drivers/WebSocket for
|
||||
more information.</p>
|
||||
<p>DeveloperNote: A "transport_data" parameter has been added to the
|
||||
channels/externalMedia ARI endpoint which, for websocket, allows the caller
|
||||
to specify parameters to be added to the dialstring for the channel. For
|
||||
instance, <code>"transport_data": "f(json)"</code>.</p>
|
||||
<h4>build: Add menuselect options to facilitate code tracing and coverage</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2025-10-30</p>
|
||||
<p>The following options have been added to the menuselect "Compiler Flags"
|
||||
section...</p>
|
||||
<p>CODE_COVERAGE: The ability to enable code coverage via the <code>--enable-coverage</code>
|
||||
configure flag has existed for many years but changing it requires
|
||||
re-running ./configure which is painfully slow. With this commit, you can
|
||||
now enable and disable it via menuselect. Setting this option adds the
|
||||
<code>-ftest-coverage</code> and <code>-fprofile-arcs</code> flags on the gcc and ld command lines.
|
||||
It also sets DONT_OPTIMIZE. Note: If you use the <code>--enable-coverage</code> configure
|
||||
flag, you can't turn it off via menuselect so choose one method and stick to
|
||||
it.</p>
|
||||
<p>KEEP_FRAME_POINTERS: This option sets <code>-fno-omit-frame-pointers</code> on the gcc
|
||||
command line which can facilitate debugging with 'gdb' and tracing with 'perf'.
|
||||
Unlike CODE_COVERAGE, this option doesn't depend on optimization being
|
||||
disabled. It does however conflict with COMPILE_DOUBLE.</p>
|
||||
</body></html>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,44 +0,0 @@
|
||||
<html><head><title>ChangeLog for asterisk-20.18.1</title></head><body>
|
||||
<h2>Change Log for Release asterisk-20.18.1</h2>
|
||||
<h3>Links:</h3>
|
||||
<ul>
|
||||
<li><a href="https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-20.18.1.html">Full ChangeLog</a> </li>
|
||||
<li><a href="https://github.com/asterisk/asterisk/compare/20.18.0...20.18.1">GitHub Diff</a> </li>
|
||||
<li><a href="https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20.18.1.tar.gz">Tarball</a> </li>
|
||||
<li><a href="https://downloads.asterisk.org/pub/telephony/asterisk">Downloads</a> </li>
|
||||
</ul>
|
||||
<h3>Summary:</h3>
|
||||
<ul>
|
||||
<li>Commits: 1</li>
|
||||
<li>Commit Authors: 1</li>
|
||||
<li>Issues Resolved: 1</li>
|
||||
<li>Security Advisories Resolved: 0</li>
|
||||
</ul>
|
||||
<h3>User Notes:</h3>
|
||||
<h3>Upgrade Notes:</h3>
|
||||
<h3>Developer Notes:</h3>
|
||||
<h3>Commit Authors:</h3>
|
||||
<ul>
|
||||
<li>Sean Bright: (1)</li>
|
||||
</ul>
|
||||
<h2>Issue and Commit Detail:</h2>
|
||||
<h3>Closed Issues:</h3>
|
||||
<ul>
|
||||
<li>1739: [bug]: Regression in 23.2.0 with regard to parsing fractional numbers when system locale is non-standard</li>
|
||||
</ul>
|
||||
<h3>Commits By Author:</h3>
|
||||
<ul>
|
||||
<li>
|
||||
<h4>Sean Bright (1):</h4>
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Commit List:</h3>
|
||||
<ul>
|
||||
<li>asterisk.c: Use C.UTF-8 locale instead of relying on user's environment.</li>
|
||||
</ul>
|
||||
<h3>Commit Details:</h3>
|
||||
<h4>asterisk.c: Use C.UTF-8 locale instead of relying on user's environment.</h4>
|
||||
<p>Author: Sean Bright
|
||||
Date: 2026-01-23</p>
|
||||
<p>Resolves: #1739</p>
|
||||
</body></html>
|
||||
@@ -1,52 +0,0 @@
|
||||
|
||||
## Change Log for Release asterisk-20.18.1
|
||||
|
||||
### Links:
|
||||
|
||||
- [Full ChangeLog](https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-20.18.1.html)
|
||||
- [GitHub Diff](https://github.com/asterisk/asterisk/compare/20.18.0...20.18.1)
|
||||
- [Tarball](https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20.18.1.tar.gz)
|
||||
- [Downloads](https://downloads.asterisk.org/pub/telephony/asterisk)
|
||||
|
||||
### Summary:
|
||||
|
||||
- Commits: 1
|
||||
- Commit Authors: 1
|
||||
- Issues Resolved: 1
|
||||
- Security Advisories Resolved: 0
|
||||
|
||||
### User Notes:
|
||||
|
||||
|
||||
### Upgrade Notes:
|
||||
|
||||
|
||||
### Developer Notes:
|
||||
|
||||
|
||||
### Commit Authors:
|
||||
|
||||
- Sean Bright: (1)
|
||||
|
||||
## Issue and Commit Detail:
|
||||
|
||||
### Closed Issues:
|
||||
|
||||
- 1739: [bug]: Regression in 23.2.0 with regard to parsing fractional numbers when system locale is non-standard
|
||||
|
||||
### Commits By Author:
|
||||
|
||||
- #### Sean Bright (1):
|
||||
|
||||
### Commit List:
|
||||
|
||||
- asterisk.c: Use C.UTF-8 locale instead of relying on user's environment.
|
||||
|
||||
### Commit Details:
|
||||
|
||||
#### asterisk.c: Use C.UTF-8 locale instead of relying on user's environment.
|
||||
Author: Sean Bright
|
||||
Date: 2026-01-23
|
||||
|
||||
Resolves: #1739
|
||||
|
||||
@@ -1,103 +0,0 @@
|
||||
<html><head><title>ChangeLog for asterisk-20.18.2</title></head><body>
|
||||
<h2>Change Log for Release asterisk-20.18.2</h2>
|
||||
<h3>Links:</h3>
|
||||
<ul>
|
||||
<li><a href="https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-20.18.2.html">Full ChangeLog</a> </li>
|
||||
<li><a href="https://github.com/asterisk/asterisk/compare/20.18.1...20.18.2">GitHub Diff</a> </li>
|
||||
<li><a href="https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20.18.2.tar.gz">Tarball</a> </li>
|
||||
<li><a href="https://downloads.asterisk.org/pub/telephony/asterisk">Downloads</a> </li>
|
||||
</ul>
|
||||
<h3>Summary:</h3>
|
||||
<ul>
|
||||
<li>Commits: 4</li>
|
||||
<li>Commit Authors: 2</li>
|
||||
<li>Issues Resolved: 0</li>
|
||||
<li>Security Advisories Resolved: 4</li>
|
||||
<li><a href="https://github.com/asterisk/asterisk/security/advisories/GHSA-85x7-54wr-vh42">GHSA-85x7-54wr-vh42</a>: Asterisk xml.c uses unsafe XML_PARSE_NOENT leading to potential XXE Injection</li>
|
||||
<li><a href="https://github.com/asterisk/asterisk/security/advisories/GHSA-rvch-3jmx-3jf3">GHSA-rvch-3jmx-3jf3</a>: ast_coredumper running as root sources ast_debug_tools.conf from /etc/asterisk; potentially leading to privilege escalation</li>
|
||||
<li><a href="https://github.com/asterisk/asterisk/security/advisories/GHSA-v6hp-wh3r-cwxh">GHSA-v6hp-wh3r-cwxh</a>: The Asterisk embedded web server's /httpstatus page echos user supplied values(cookie and query string) without sanitization</li>
|
||||
<li><a href="https://github.com/asterisk/asterisk/security/advisories/GHSA-xpc6-x892-v83c">GHSA-xpc6-x892-v83c</a>: ast_coredumper runs as root, and writes gdb init file to world writeable folder; leading to potential privilege escalation </li>
|
||||
</ul>
|
||||
<h3>User Notes:</h3>
|
||||
<ul>
|
||||
<li>
|
||||
<h4>ast_coredumper: check ast_debug_tools.conf permissions</h4>
|
||||
ast_debug_tools.conf must be owned by root and not be
|
||||
writable by other users or groups to be used by ast_coredumper or
|
||||
by ast_logescalator or ast_loggrabber when run as root.</li>
|
||||
</ul>
|
||||
<h3>Upgrade Notes:</h3>
|
||||
<ul>
|
||||
<li>
|
||||
<h4>http.c: Change httpstatus to default disabled and sanitize output.</h4>
|
||||
To prevent possible security issues, the <code>/httpstatus</code> page
|
||||
served by the internal web server is now disabled by default. To explicitly
|
||||
enable it, set <code>enable_status=yes</code> in http.conf.</li>
|
||||
</ul>
|
||||
<h3>Developer Notes:</h3>
|
||||
<h3>Commit Authors:</h3>
|
||||
<ul>
|
||||
<li>George Joseph: (2)</li>
|
||||
<li>Mike Bradeen: (2)</li>
|
||||
</ul>
|
||||
<h2>Issue and Commit Detail:</h2>
|
||||
<h3>Closed Issues:</h3>
|
||||
<ul>
|
||||
<li>!GHSA-85x7-54wr-vh42: Asterisk xml.c uses unsafe XML_PARSE_NOENT leading to potential XXE Injection</li>
|
||||
<li>!GHSA-rvch-3jmx-3jf3: ast_coredumper running as root sources ast_debug_tools.conf from /etc/asterisk; potentially leading to privilege escalation</li>
|
||||
<li>!GHSA-v6hp-wh3r-cwxh: The Asterisk embedded web server's /httpstatus page echos user supplied values(cookie and query string) without sanitization</li>
|
||||
<li>!GHSA-xpc6-x892-v83c: ast_coredumper runs as root, and writes gdb init file to world writeable folder; leading to potential privilege escalation </li>
|
||||
</ul>
|
||||
<h3>Commits By Author:</h3>
|
||||
<ul>
|
||||
<li>
|
||||
<h4>George Joseph (2):</h4>
|
||||
</li>
|
||||
<li>
|
||||
<h4>Mike Bradeen (2):</h4>
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Commit List:</h3>
|
||||
<ul>
|
||||
<li>xml.c: Replace XML_PARSE_NOENT with XML_PARSE_NONET for xmlReadFile.</li>
|
||||
<li>ast_coredumper: check ast_debug_tools.conf permissions</li>
|
||||
<li>http.c: Change httpstatus to default disabled and sanitize output.</li>
|
||||
<li>ast_coredumper: create gdbinit file with restrictive permissions</li>
|
||||
</ul>
|
||||
<h3>Commit Details:</h3>
|
||||
<h4>xml.c: Replace XML_PARSE_NOENT with XML_PARSE_NONET for xmlReadFile.</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2026-01-15</p>
|
||||
<p>The xmlReadFile XML_PARSE_NOENT flag, which allows parsing of external
|
||||
entities, could allow a potential XXE injection attack. Replacing it with
|
||||
XML_PARSE_NONET, which prevents network access, is safer.</p>
|
||||
<p>Resolves: #GHSA-85x7-54wr-vh42</p>
|
||||
<h4>ast_coredumper: check ast_debug_tools.conf permissions</h4>
|
||||
<p>Author: Mike Bradeen
|
||||
Date: 2026-01-15</p>
|
||||
<p>Prevent ast_coredumper from using ast_debug_tools.conf files that are
|
||||
not owned by root or are writable by other users or groups.</p>
|
||||
<p>Prevent ast_logescalator and ast_loggrabber from doing the same if
|
||||
they are run as root.</p>
|
||||
<p>Resolves: #GHSA-rvch-3jmx-3jf3</p>
|
||||
<p>UserNote: ast_debug_tools.conf must be owned by root and not be
|
||||
writable by other users or groups to be used by ast_coredumper or
|
||||
by ast_logescalator or ast_loggrabber when run as root.</p>
|
||||
<h4>http.c: Change httpstatus to default disabled and sanitize output.</h4>
|
||||
<p>Author: George Joseph
|
||||
Date: 2026-01-15</p>
|
||||
<p>To address potential security issues, the httpstatus page is now disabled
|
||||
by default and the echoed query string and cookie output is html-escaped.</p>
|
||||
<p>Resolves: #GHSA-v6hp-wh3r-cwxh</p>
|
||||
<p>UpgradeNote: To prevent possible security issues, the <code>/httpstatus</code> page
|
||||
served by the internal web server is now disabled by default. To explicitly
|
||||
enable it, set <code>enable_status=yes</code> in http.conf.</p>
|
||||
<h4>ast_coredumper: create gdbinit file with restrictive permissions</h4>
|
||||
<p>Author: Mike Bradeen
|
||||
Date: 2026-01-15</p>
|
||||
<p>Modify gdbinit to use the install command with explicit permissions (-m 600)
|
||||
when creating the .ast_coredumper.gdbinit file. This ensures the file is
|
||||
created with restricted permissions (readable/writable only by the owner)
|
||||
to avoid potential privilege escalation.</p>
|
||||
<p>Resolves: #GHSA-xpc6-x892-v83c</p>
|
||||
</body></html>
|
||||
@@ -1,119 +0,0 @@
|
||||
|
||||
## Change Log for Release asterisk-20.18.2
|
||||
|
||||
### Links:
|
||||
|
||||
- [Full ChangeLog](https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-20.18.2.html)
|
||||
- [GitHub Diff](https://github.com/asterisk/asterisk/compare/20.18.1...20.18.2)
|
||||
- [Tarball](https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20.18.2.tar.gz)
|
||||
- [Downloads](https://downloads.asterisk.org/pub/telephony/asterisk)
|
||||
|
||||
### Summary:
|
||||
|
||||
- Commits: 4
|
||||
- Commit Authors: 2
|
||||
- Issues Resolved: 0
|
||||
- Security Advisories Resolved: 4
|
||||
- [GHSA-85x7-54wr-vh42](https://github.com/asterisk/asterisk/security/advisories/GHSA-85x7-54wr-vh42): Asterisk xml.c uses unsafe XML_PARSE_NOENT leading to potential XXE Injection
|
||||
- [GHSA-rvch-3jmx-3jf3](https://github.com/asterisk/asterisk/security/advisories/GHSA-rvch-3jmx-3jf3): ast_coredumper running as root sources ast_debug_tools.conf from /etc/asterisk; potentially leading to privilege escalation
|
||||
- [GHSA-v6hp-wh3r-cwxh](https://github.com/asterisk/asterisk/security/advisories/GHSA-v6hp-wh3r-cwxh): The Asterisk embedded web server's /httpstatus page echos user supplied values(cookie and query string) without sanitization
|
||||
- [GHSA-xpc6-x892-v83c](https://github.com/asterisk/asterisk/security/advisories/GHSA-xpc6-x892-v83c): ast_coredumper runs as root, and writes gdb init file to world writeable folder; leading to potential privilege escalation
|
||||
|
||||
### User Notes:
|
||||
|
||||
- #### ast_coredumper: check ast_debug_tools.conf permissions
|
||||
ast_debug_tools.conf must be owned by root and not be
|
||||
writable by other users or groups to be used by ast_coredumper or
|
||||
by ast_logescalator or ast_loggrabber when run as root.
|
||||
|
||||
|
||||
### Upgrade Notes:
|
||||
|
||||
- #### http.c: Change httpstatus to default disabled and sanitize output.
|
||||
To prevent possible security issues, the `/httpstatus` page
|
||||
served by the internal web server is now disabled by default. To explicitly
|
||||
enable it, set `enable_status=yes` in http.conf.
|
||||
|
||||
|
||||
### Developer Notes:
|
||||
|
||||
|
||||
### Commit Authors:
|
||||
|
||||
- George Joseph: (2)
|
||||
- Mike Bradeen: (2)
|
||||
|
||||
## Issue and Commit Detail:
|
||||
|
||||
### Closed Issues:
|
||||
|
||||
- !GHSA-85x7-54wr-vh42: Asterisk xml.c uses unsafe XML_PARSE_NOENT leading to potential XXE Injection
|
||||
- !GHSA-rvch-3jmx-3jf3: ast_coredumper running as root sources ast_debug_tools.conf from /etc/asterisk; potentially leading to privilege escalation
|
||||
- !GHSA-v6hp-wh3r-cwxh: The Asterisk embedded web server's /httpstatus page echos user supplied values(cookie and query string) without sanitization
|
||||
- !GHSA-xpc6-x892-v83c: ast_coredumper runs as root, and writes gdb init file to world writeable folder; leading to potential privilege escalation
|
||||
|
||||
### Commits By Author:
|
||||
|
||||
- #### George Joseph (2):
|
||||
|
||||
- #### Mike Bradeen (2):
|
||||
|
||||
### Commit List:
|
||||
|
||||
- xml.c: Replace XML_PARSE_NOENT with XML_PARSE_NONET for xmlReadFile.
|
||||
- ast_coredumper: check ast_debug_tools.conf permissions
|
||||
- http.c: Change httpstatus to default disabled and sanitize output.
|
||||
- ast_coredumper: create gdbinit file with restrictive permissions
|
||||
|
||||
### Commit Details:
|
||||
|
||||
#### xml.c: Replace XML_PARSE_NOENT with XML_PARSE_NONET for xmlReadFile.
|
||||
Author: George Joseph
|
||||
Date: 2026-01-15
|
||||
|
||||
The xmlReadFile XML_PARSE_NOENT flag, which allows parsing of external
|
||||
entities, could allow a potential XXE injection attack. Replacing it with
|
||||
XML_PARSE_NONET, which prevents network access, is safer.
|
||||
|
||||
Resolves: #GHSA-85x7-54wr-vh42
|
||||
|
||||
#### ast_coredumper: check ast_debug_tools.conf permissions
|
||||
Author: Mike Bradeen
|
||||
Date: 2026-01-15
|
||||
|
||||
Prevent ast_coredumper from using ast_debug_tools.conf files that are
|
||||
not owned by root or are writable by other users or groups.
|
||||
|
||||
Prevent ast_logescalator and ast_loggrabber from doing the same if
|
||||
they are run as root.
|
||||
|
||||
Resolves: #GHSA-rvch-3jmx-3jf3
|
||||
|
||||
UserNote: ast_debug_tools.conf must be owned by root and not be
|
||||
writable by other users or groups to be used by ast_coredumper or
|
||||
by ast_logescalator or ast_loggrabber when run as root.
|
||||
|
||||
#### http.c: Change httpstatus to default disabled and sanitize output.
|
||||
Author: George Joseph
|
||||
Date: 2026-01-15
|
||||
|
||||
To address potential security issues, the httpstatus page is now disabled
|
||||
by default and the echoed query string and cookie output is html-escaped.
|
||||
|
||||
Resolves: #GHSA-v6hp-wh3r-cwxh
|
||||
|
||||
UpgradeNote: To prevent possible security issues, the `/httpstatus` page
|
||||
served by the internal web server is now disabled by default. To explicitly
|
||||
enable it, set `enable_status=yes` in http.conf.
|
||||
|
||||
#### ast_coredumper: create gdbinit file with restrictive permissions
|
||||
Author: Mike Bradeen
|
||||
Date: 2026-01-15
|
||||
|
||||
Modify gdbinit to use the install command with explicit permissions (-m 600)
|
||||
when creating the .ast_coredumper.gdbinit file. This ensures the file is
|
||||
created with restricted permissions (readable/writable only by the owner)
|
||||
to avoid potential privilege escalation.
|
||||
|
||||
Resolves: #GHSA-xpc6-x892-v83c
|
||||
|
||||
@@ -1,741 +0,0 @@
|
||||
|
||||
Change Log for Release 20.3.0
|
||||
========================================
|
||||
|
||||
Summary:
|
||||
----------------------------------------
|
||||
|
||||
- Set up new ChangeLogs directory
|
||||
- .github: Add AsteriskReleaser
|
||||
- chan_pjsip: also return all codecs on empty re-INVITE for late offers
|
||||
- cel: add local optimization begin event
|
||||
- core: Cleanup gerrit and JIRA references. (#57)
|
||||
- .github: Fix CherryPickTest to only run when it should
|
||||
- .github: Fix reference to CHERRY_PICK_TESTING_IN_PROGRESS
|
||||
- .github: Remove separate set labels step from new PR
|
||||
- .github: Refactor CP progress and add new PR test progress
|
||||
- res_pjsip: mediasec: Add Security-Client headers after 401
|
||||
- .github: Add cherry-pick test progress labels
|
||||
- LICENSE: Update link to trademark policy.
|
||||
- chan_dahdi: Add dialmode option for FXS lines.
|
||||
- .github: Update issue templates
|
||||
- .github: Remove unnecessary parameter in CherryPickTest
|
||||
- Initial GitHub PRs
|
||||
- Initial GitHub Issue Templates
|
||||
- pbx_dundi: Fix PJSIP endpoint configuration check.
|
||||
- Revert "app_queue: periodic announcement configurable start time."
|
||||
- res_pjsip_stir_shaken: Fix JSON field ordering and disallowed TN characters.
|
||||
- pbx_dundi: Add PJSIP support.
|
||||
- install_prereq: Add Linux Mint support.
|
||||
- chan_pjsip: fix music on hold continues after INVITE with replaces
|
||||
- voicemail.conf: Fix incorrect comment about #include.
|
||||
- app_queue: Fix minor xmldoc duplication and vagueness.
|
||||
- test.c: Fix counting of tests and add 2 new tests
|
||||
- res_calendar: output busy state as part of show calendar.
|
||||
- loader.c: Minor module key check simplification.
|
||||
- ael: Regenerate lexers and parsers.
|
||||
- bridge_builtin_features: add beep via touch variable
|
||||
- res_mixmonitor: MixMonitorMute by MixMonitor ID
|
||||
- format_sln: add .slin as supported file extension
|
||||
- res_agi: RECORD FILE plays 2 beeps.
|
||||
- func_json: Fix JSON parsing issues.
|
||||
- app_senddtmf: Add SendFlash AMI action.
|
||||
- app_dial: Fix DTMF not relayed to caller on unanswered calls.
|
||||
- configure: fix detection of re-entrant resolver functions
|
||||
- cli: increase channel column width
|
||||
- app_queue: periodic announcement configurable start time.
|
||||
- make_version: Strip svn stuff and suppress ref HEAD errors
|
||||
- res_http_media_cache: Introduce options and customize
|
||||
- main/iostream.c: fix build with libressl
|
||||
- contrib: rc.archlinux.asterisk uses invalid redirect.
|
||||
|
||||
User Notes:
|
||||
----------------------------------------
|
||||
|
||||
- ### cel: add local optimization begin event
|
||||
The new AST_CEL_LOCAL_OPTIMIZE_BEGIN can be used
|
||||
by itself or in conert with the existing
|
||||
AST_CEL_LOCAL_OPTIMIZE to book-end local channel optimizaion.
|
||||
|
||||
- ### chan_dahdi: Add dialmode option for FXS lines.
|
||||
A "dialmode" option has been added which allows
|
||||
specifying, on a per-channel basis, what methods of
|
||||
subscriber dialing (pulse and/or tone) are permitted.
|
||||
Additionally, this can be changed on a channel
|
||||
at any point during a call using the CHANNEL
|
||||
function.
|
||||
|
||||
- ### pbx_dundi: Add PJSIP support.
|
||||
DUNDi now supports chan_pjsip. Outgoing calls using
|
||||
PJSIP require the pjsip_outgoing_endpoint option
|
||||
to be set in dundi.conf.
|
||||
|
||||
- ### cli: increase channel column width
|
||||
This change increases the display width on 'core show channels'
|
||||
amd 'core show channels verbose'
|
||||
For 'core show channels', the Channel name field is increased to
|
||||
64 characters and the Location name field is increased to 32
|
||||
characters.
|
||||
For 'core show channels verbose', the Channel name field is
|
||||
increased to 80 characters, the Context is increased to 24
|
||||
characters and the Extension is increased to 24 characters.
|
||||
|
||||
- ### app_senddtmf: Add SendFlash AMI action.
|
||||
The SendFlash AMI action now allows sending
|
||||
a hook flash event on a channel.
|
||||
|
||||
- ### res_http_media_cache: Introduce options and customize
|
||||
The res_http_media_cache module now attempts to load
|
||||
configuration from the res_http_media_cache.conf file.
|
||||
The following options were added:
|
||||
* timeout_secs
|
||||
* user_agent
|
||||
* follow_location
|
||||
* max_redirects
|
||||
* protocols
|
||||
* redirect_protocols
|
||||
* dns_cache_timeout_secs
|
||||
|
||||
- ### test.c: Fix counting of tests and add 2 new tests
|
||||
The "tests" attribute of the "testsuite" element in the
|
||||
output XML now reflects only the tests actually requested
|
||||
to be executed instead of all the tests registered.
|
||||
The "failures" attribute was added to the "testsuite"
|
||||
element.
|
||||
Also added two new unit tests that just pass and fail
|
||||
to be used for testing CI itself.
|
||||
|
||||
- ### res_mixmonitor: MixMonitorMute by MixMonitor ID
|
||||
It is now possible to specify the MixMonitorID when calling
|
||||
the manager action: MixMonitorMute. This will allow an
|
||||
individual MixMonitor instance to be muted via ID.
|
||||
The MixMonitorID can be stored as a channel variable using
|
||||
the 'i' MixMonitor option and is returned upon creation if
|
||||
this option is used.
|
||||
As part of this change, if no MixMonitorID is specified in
|
||||
the manager action MixMonitorMute, Asterisk will set the mute
|
||||
flag on all MixMonitor audiohooks on the channel. Previous
|
||||
behavior would set the flag on the first MixMonitor audiohook
|
||||
found.
|
||||
|
||||
- ### bridge_builtin_features: add beep via touch variable
|
||||
Add optional touch variable : TOUCH_MIXMONITOR_BEEP(interval)
|
||||
Setting TOUCH_MIXMONITOR_BEEP/TOUCH_MONITOR_BEEP to a valid
|
||||
interval in seconds will result in a periodic beep being
|
||||
played to the monitored channel upon MixMontior/Monitor
|
||||
feature start.
|
||||
If an interval less than 5 seconds is specified, the interval
|
||||
will default to 5 seconds. If the value is set to an invalid
|
||||
interval, the default of 15 seconds will be used.
|
||||
|
||||
- ### format_sln: add .slin as supported file extension
|
||||
format_sln now recognizes '.slin' as a valid
|
||||
file extension in addition to the existing
|
||||
'.sln' and '.raw'.
|
||||
|
||||
|
||||
Upgrade Notes:
|
||||
----------------------------------------
|
||||
|
||||
- ### cel: add local optimization begin event
|
||||
The existing AST_CEL_LOCAL_OPTIMIZE can continue
|
||||
to be used as-is and the AST_CEL_LOCAL_OPTIMIZE_BEGIN event
|
||||
can be ignored if desired.
|
||||
|
||||
|
||||
Closed Issues:
|
||||
----------------------------------------
|
||||
|
||||
- #35: [New Feature]: chan_dahdi: Allow disabling pulse or tone dialing
|
||||
- #39: [Bug]: Remove .gitreview from repository.
|
||||
- #43: [Bug]: Link to trademark policy is no longer correct
|
||||
- #48: [bug]: res_pjsip: Mediasec requires different headers on 401 response
|
||||
- #52: [improvement]: Add local optimization begin cel event
|
||||
|
||||
Commits By Author:
|
||||
----------------------------------------
|
||||
|
||||
- ### Asterisk Development Team (1):
|
||||
- Update for 20.3.0-rc1
|
||||
|
||||
- ### Fabrice Fontaine (2):
|
||||
- main/iostream.c: fix build with libressl
|
||||
- configure: fix detection of re-entrant resolver functions
|
||||
|
||||
- ### George Joseph (13):
|
||||
- make_version: Strip svn stuff and suppress ref HEAD errors
|
||||
- test.c: Fix counting of tests and add 2 new tests
|
||||
- Initial GitHub Issue Templates
|
||||
- Initial GitHub PRs
|
||||
- .github: Remove unnecessary parameter in CherryPickTest
|
||||
- .github: Update issue templates
|
||||
- .github: Add cherry-pick test progress labels
|
||||
- .github: Refactor CP progress and add new PR test progress
|
||||
- .github: Remove separate set labels step from new PR
|
||||
- .github: Fix reference to CHERRY_PICK_TESTING_IN_PROGRESS
|
||||
- .github: Fix CherryPickTest to only run when it should
|
||||
- .github: Add AsteriskReleaser
|
||||
- Set up new ChangeLogs directory
|
||||
|
||||
- ### Henning Westerholt (2):
|
||||
- chan_pjsip: fix music on hold continues after INVITE with replaces
|
||||
- chan_pjsip: also return all codecs on empty re-INVITE for late offers
|
||||
|
||||
- ### Holger Hans Peter Freyther (1):
|
||||
- res_http_media_cache: Introduce options and customize
|
||||
|
||||
- ### Jaco Kroon (2):
|
||||
- app_queue: periodic announcement configurable start time.
|
||||
- res_calendar: output busy state as part of show calendar.
|
||||
|
||||
- ### Joshua C. Colp (2):
|
||||
- pbx_dundi: Fix PJSIP endpoint configuration check.
|
||||
- LICENSE: Update link to trademark policy.
|
||||
|
||||
- ### Joshua Colp (1):
|
||||
- Revert "app_queue: periodic announcement configurable start time."
|
||||
|
||||
- ### Maximilian Fridrich (1):
|
||||
- res_pjsip: mediasec: Add Security-Client headers after 401
|
||||
|
||||
- ### Mike Bradeen (5):
|
||||
- cli: increase channel column width
|
||||
- format_sln: add .slin as supported file extension
|
||||
- res_mixmonitor: MixMonitorMute by MixMonitor ID
|
||||
- bridge_builtin_features: add beep via touch variable
|
||||
- cel: add local optimization begin event
|
||||
|
||||
- ### Naveen Albert (8):
|
||||
- app_dial: Fix DTMF not relayed to caller on unanswered calls.
|
||||
- app_senddtmf: Add SendFlash AMI action.
|
||||
- func_json: Fix JSON parsing issues.
|
||||
- app_queue: Fix minor xmldoc duplication and vagueness.
|
||||
- voicemail.conf: Fix incorrect comment about #include.
|
||||
- pbx_dundi: Add PJSIP support.
|
||||
- res_pjsip_stir_shaken: Fix JSON field ordering and disallowed TN characters.
|
||||
- chan_dahdi: Add dialmode option for FXS lines.
|
||||
|
||||
- ### Sean Bright (5):
|
||||
- contrib: rc.archlinux.asterisk uses invalid redirect.
|
||||
- res_agi: RECORD FILE plays 2 beeps.
|
||||
- ael: Regenerate lexers and parsers.
|
||||
- loader.c: Minor module key check simplification.
|
||||
- core: Cleanup gerrit and JIRA references. (#57)
|
||||
|
||||
- ### The_Blode (1):
|
||||
- install_prereq: Add Linux Mint support.
|
||||
|
||||
|
||||
Detail:
|
||||
----------------------------------------
|
||||
|
||||
- ### Set up new ChangeLogs directory
|
||||
Author: George Joseph
|
||||
Date: 2023-05-09
|
||||
|
||||
|
||||
- ### .github: Add AsteriskReleaser
|
||||
Author: George Joseph
|
||||
Date: 2023-05-05
|
||||
|
||||
|
||||
- ### chan_pjsip: also return all codecs on empty re-INVITE for late offers
|
||||
Author: Henning Westerholt
|
||||
Date: 2023-05-03
|
||||
|
||||
We should also return all codecs on an re-INVITE without SDP for a
|
||||
call that used late offer (e.g. no SDP in the initial INVITE, SDP
|
||||
in the ACK). Bugfix for feature introduced in ASTERISK-30193
|
||||
(https://issues.asterisk.org/jira/browse/ASTERISK-30193)
|
||||
|
||||
Migration from previous gerrit change that was not merged.
|
||||
|
||||
|
||||
- ### cel: add local optimization begin event
|
||||
Author: Mike Bradeen
|
||||
Date: 2023-05-02
|
||||
|
||||
The current AST_CEL_LOCAL_OPTIMIZE event is and has been
|
||||
triggered on a local optimization end to serve as a flag
|
||||
indicating the event occurred. This change adds a second
|
||||
AST_CEL_LOCAL_OPTIMIZE_BEGIN event for further detail.
|
||||
|
||||
Resolves: #52
|
||||
|
||||
UpgradeNote: The existing AST_CEL_LOCAL_OPTIMIZE can continue
|
||||
to be used as-is and the AST_CEL_LOCAL_OPTIMIZE_BEGIN event
|
||||
can be ignored if desired.
|
||||
|
||||
UserNote: The new AST_CEL_LOCAL_OPTIMIZE_BEGIN can be used
|
||||
by itself or in conert with the existing
|
||||
AST_CEL_LOCAL_OPTIMIZE to book-end local channel optimizaion.
|
||||
|
||||
|
||||
- ### core: Cleanup gerrit and JIRA references. (#57)
|
||||
Author: Sean Bright
|
||||
Date: 2023-05-03
|
||||
|
||||
* Remove .gitreview and switch to pulling the main asterisk branch
|
||||
version from configure.ac instead.
|
||||
|
||||
* Replace references to JIRA with GitHub.
|
||||
|
||||
* Other minor cleanup found along the way.
|
||||
|
||||
Resolves: #39
|
||||
|
||||
- ### .github: Fix CherryPickTest to only run when it should
|
||||
Author: George Joseph
|
||||
Date: 2023-05-03
|
||||
|
||||
Fixed CherryPickTest so it triggers only on the
|
||||
"cherry-pick-test" label instead of all labels.
|
||||
|
||||
|
||||
- ### .github: Fix reference to CHERRY_PICK_TESTING_IN_PROGRESS
|
||||
Author: George Joseph
|
||||
Date: 2023-05-02
|
||||
|
||||
|
||||
- ### .github: Remove separate set labels step from new PR
|
||||
Author: George Joseph
|
||||
Date: 2023-05-02
|
||||
|
||||
|
||||
- ### .github: Refactor CP progress and add new PR test progress
|
||||
Author: George Joseph
|
||||
Date: 2023-05-02
|
||||
|
||||
|
||||
- ### res_pjsip: mediasec: Add Security-Client headers after 401
|
||||
Author: Maximilian Fridrich
|
||||
Date: 2023-05-02
|
||||
|
||||
When using mediasec, requests sent after a 401 must still contain the
|
||||
Security-Client header according to
|
||||
draft-dawes-sipcore-mediasec-parameter.
|
||||
|
||||
Resolves: #48
|
||||
|
||||
- ### .github: Add cherry-pick test progress labels
|
||||
Author: George Joseph
|
||||
Date: 2023-05-02
|
||||
|
||||
|
||||
- ### LICENSE: Update link to trademark policy.
|
||||
Author: Joshua C. Colp
|
||||
Date: 2023-05-01
|
||||
|
||||
Resolves: #43
|
||||
|
||||
- ### chan_dahdi: Add dialmode option for FXS lines.
|
||||
Author: Naveen Albert
|
||||
Date: 2023-04-28
|
||||
|
||||
Currently, both pulse and tone dialing are always enabled
|
||||
on all FXS lines, with no way of disabling one or the other.
|
||||
|
||||
In some circumstances, it is desirable or necessary to
|
||||
disable one of these, and this behavior can be problematic.
|
||||
|
||||
A new "dialmode" option is added which allows setting the
|
||||
methods to support on a per channel basis for FXS (FXO
|
||||
signalled lines). The four options are "both", "pulse",
|
||||
"dtmf"/"tone", and "none".
|
||||
|
||||
Additionally, integration with the CHANNEL function is
|
||||
added so that this setting can be updated for a channel
|
||||
during a call.
|
||||
|
||||
Resolves: #35
|
||||
ASTERISK-29992
|
||||
|
||||
UserNote: A "dialmode" option has been added which allows
|
||||
specifying, on a per-channel basis, what methods of
|
||||
subscriber dialing (pulse and/or tone) are permitted.
|
||||
|
||||
Additionally, this can be changed on a channel
|
||||
at any point during a call using the CHANNEL
|
||||
function.
|
||||
|
||||
|
||||
- ### .github: Update issue templates
|
||||
Author: George Joseph
|
||||
Date: 2023-05-01
|
||||
|
||||
|
||||
- ### .github: Remove unnecessary parameter in CherryPickTest
|
||||
Author: George Joseph
|
||||
Date: 2023-05-01
|
||||
|
||||
|
||||
- ### Initial GitHub PRs
|
||||
Author: George Joseph
|
||||
Date: 2023-04-28
|
||||
|
||||
|
||||
- ### Initial GitHub Issue Templates
|
||||
Author: George Joseph
|
||||
Date: 2023-04-28
|
||||
|
||||
|
||||
- ### pbx_dundi: Fix PJSIP endpoint configuration check.
|
||||
Author: Joshua C. Colp
|
||||
Date: 2023-04-13
|
||||
|
||||
ASTERISK-28233
|
||||
|
||||
|
||||
- ### Revert "app_queue: periodic announcement configurable start time."
|
||||
Author: Joshua Colp
|
||||
Date: 2023-04-11
|
||||
|
||||
This reverts commit 3fd0b65bae4b1b14434737ffcf0da4aa9ff717f6.
|
||||
|
||||
Reason for revert: Causes segmentation fault.
|
||||
|
||||
|
||||
- ### res_pjsip_stir_shaken: Fix JSON field ordering and disallowed TN characters.
|
||||
Author: Naveen Albert
|
||||
Date: 2023-02-17
|
||||
|
||||
The current STIR/SHAKEN signing process is inconsistent with the
|
||||
RFCs in a couple ways that can cause interoperability issues.
|
||||
|
||||
RFC8225 specifies that the keys must be ordered lexicographically, but
|
||||
currently the fields are simply ordered according to the order
|
||||
in which they were added to the JSON object, which is not
|
||||
compliant with the RFC and can cause issues with some carriers.
|
||||
|
||||
To fix this, we now leverage libjansson's ability to dump a JSON
|
||||
object sorted by key value, yielding the correct field ordering.
|
||||
|
||||
Additionally, telephone numbers must have any leading + prefix removed
|
||||
and must not contain characters outside of 0-9, *, and # in order
|
||||
to comply with the RFCs. Numbers are now properly formatted as such.
|
||||
|
||||
ASTERISK-30407 #close
|
||||
|
||||
|
||||
- ### pbx_dundi: Add PJSIP support.
|
||||
Author: Naveen Albert
|
||||
Date: 2022-12-09
|
||||
|
||||
Adds PJSIP as a supported technology to DUNDi.
|
||||
|
||||
To facilitate this, we now allow an endpoint to be specified
|
||||
for outgoing PJSIP calls. We also allow users to force a specific
|
||||
channel technology for outgoing SIP-protocol calls.
|
||||
|
||||
ASTERISK-28109 #close
|
||||
ASTERISK-28233 #close
|
||||
|
||||
|
||||
- ### install_prereq: Add Linux Mint support.
|
||||
Author: The_Blode
|
||||
Date: 2023-03-17
|
||||
|
||||
ASTERISK-30359 #close
|
||||
|
||||
|
||||
- ### chan_pjsip: fix music on hold continues after INVITE with replaces
|
||||
Author: Henning Westerholt
|
||||
Date: 2023-03-21
|
||||
|
||||
In a three party scenario with INVITE with replaces, we need to
|
||||
unhold the call, otherwise one party continues to get music on
|
||||
hold, and the call is not properly bridged between them.
|
||||
|
||||
ASTERISK-30428
|
||||
|
||||
|
||||
- ### voicemail.conf: Fix incorrect comment about #include.
|
||||
Author: Naveen Albert
|
||||
Date: 2023-03-28
|
||||
|
||||
A comment at the top of voicemail.conf says that #include
|
||||
cannot be used in voicemail.conf because this breaks
|
||||
the ability for app_voicemail to auto-update passwords.
|
||||
This is factually incorrect, since Asterisk has no problem
|
||||
updating files that are #include'd in the main configuration
|
||||
file, and this does work in voicemail.conf as well.
|
||||
|
||||
ASTERISK-30479 #close
|
||||
|
||||
|
||||
- ### app_queue: Fix minor xmldoc duplication and vagueness.
|
||||
Author: Naveen Albert
|
||||
Date: 2023-04-03
|
||||
|
||||
The F option in the xmldocs for the Queue application
|
||||
was erroneously duplicated, causing it to display
|
||||
twice on the wiki. The two sections are now merged into one.
|
||||
|
||||
Additionally, the description for the d option was quite
|
||||
vague. Some more details are added to provide context
|
||||
as to what this actually does.
|
||||
|
||||
ASTERISK-30486 #close
|
||||
|
||||
|
||||
- ### test.c: Fix counting of tests and add 2 new tests
|
||||
Author: George Joseph
|
||||
Date: 2023-03-28
|
||||
|
||||
The unit test XML output was counting all registered tests as "run"
|
||||
even when only a subset were actually requested to be run and
|
||||
the "failures" attribute was missing.
|
||||
|
||||
* The "tests" attribute of the "testsuite" element in the
|
||||
output XML now reflects only the tests actually requested
|
||||
to be executed instead of all the tests registered.
|
||||
|
||||
* The "failures" attribute was added to the "testsuite"
|
||||
element.
|
||||
|
||||
Also added 2 new unit tests that just pass and fail to be
|
||||
used for CI testing.
|
||||
|
||||
|
||||
- ### res_calendar: output busy state as part of show calendar.
|
||||
Author: Jaco Kroon
|
||||
Date: 2023-03-23
|
||||
|
||||
Signed-off-by: Jaco Kroon <jaco@uls.co.za>
|
||||
|
||||
- ### loader.c: Minor module key check simplification.
|
||||
Author: Sean Bright
|
||||
Date: 2023-03-23
|
||||
|
||||
|
||||
- ### ael: Regenerate lexers and parsers.
|
||||
Author: Sean Bright
|
||||
Date: 2023-03-21
|
||||
|
||||
Various changes to ensure that the lexers and parsers can be correctly
|
||||
generated when REBUILD_PARSERS is enabled.
|
||||
|
||||
Some notes:
|
||||
|
||||
* Because of the version of flex we are using to generate the lexers
|
||||
(2.5.35) some post-processing in the Makefile is still required.
|
||||
|
||||
* The generated lexers do not contain the problematic C99 check that
|
||||
was being replaced by the call to sed in the respective Makefiles so
|
||||
it was removed.
|
||||
|
||||
* Since these files are generated, they will include trailing
|
||||
whitespace in some places. This does not need to be corrected.
|
||||
|
||||
|
||||
- ### bridge_builtin_features: add beep via touch variable
|
||||
Author: Mike Bradeen
|
||||
Date: 2023-03-01
|
||||
|
||||
Add periodic beep option to one-touch recording by setting
|
||||
the touch variable TOUCH_MONITOR_BEEP or
|
||||
TOUCH_MIXMONITOR_BEEP to the desired interval in seconds.
|
||||
|
||||
If the interval is less than 5 seconds, a minimum of 5
|
||||
seconds will be imposed. If the interval is set to an
|
||||
invalid value, it will default to 15 seconds.
|
||||
|
||||
A new test event PERIODIC_HOOK_ENABLED was added to the
|
||||
func_periodic_hook hook_on function to indicate when
|
||||
a hook is started. This is so we can test that the touch
|
||||
variable starts the hook as expected.
|
||||
|
||||
ASTERISK-30446
|
||||
|
||||
|
||||
- ### res_mixmonitor: MixMonitorMute by MixMonitor ID
|
||||
Author: Mike Bradeen
|
||||
Date: 2023-03-13
|
||||
|
||||
While it is possible to create multiple mixmonitor instances
|
||||
on a channel, it was not previously possible to mute individual
|
||||
instances.
|
||||
|
||||
This change includes the ability to specify the MixMonitorID
|
||||
when calling the manager action: MixMonitorMute. This will
|
||||
allow an individual MixMonitor instance to be muted via id.
|
||||
This id can be stored as a channel variable using the 'i'
|
||||
MixMonitor option.
|
||||
|
||||
As part of this change, if no MixMonitorID is specified in
|
||||
the manager action MixMonitorMute, Asterisk will set the mute
|
||||
flag on all MixMonitor spy-type audiohooks on the channel.
|
||||
This is done via the new audiohook function:
|
||||
ast_audiohook_set_mute_all.
|
||||
|
||||
ASTERISK-30464
|
||||
|
||||
|
||||
- ### format_sln: add .slin as supported file extension
|
||||
Author: Mike Bradeen
|
||||
Date: 2023-03-14
|
||||
|
||||
Adds '.slin' to existing supported file extensions:
|
||||
.sln and .raw
|
||||
|
||||
ASTERISK-30465
|
||||
|
||||
|
||||
- ### res_agi: RECORD FILE plays 2 beeps.
|
||||
Author: Sean Bright
|
||||
Date: 2023-03-08
|
||||
|
||||
Sending the "RECORD FILE" command without the optional
|
||||
`offset_samples` argument can result in two beeps playing on the
|
||||
channel.
|
||||
|
||||
This bug has been present since Asterisk 0.3.0 (2003-02-06).
|
||||
|
||||
ASTERISK-30457 #close
|
||||
|
||||
|
||||
- ### func_json: Fix JSON parsing issues.
|
||||
Author: Naveen Albert
|
||||
Date: 2023-02-26
|
||||
|
||||
Fix issue with returning empty instead of dumping
|
||||
the JSON string when recursing.
|
||||
|
||||
Also adds a unit test to capture this fix.
|
||||
|
||||
ASTERISK-30441 #close
|
||||
|
||||
|
||||
- ### app_senddtmf: Add SendFlash AMI action.
|
||||
Author: Naveen Albert
|
||||
Date: 2023-02-26
|
||||
|
||||
Adds an AMI action to send a flash event
|
||||
on a channel.
|
||||
|
||||
ASTERISK-30440 #close
|
||||
|
||||
|
||||
- ### app_dial: Fix DTMF not relayed to caller on unanswered calls.
|
||||
Author: Naveen Albert
|
||||
Date: 2023-03-04
|
||||
|
||||
DTMF frames are not handled in app_dial when sent towards the
|
||||
caller. This means that if DTMF is sent to the calling party
|
||||
and the call has not yet been answered, the DTMF is not audible.
|
||||
This is now fixed by relaying DTMF frames if only a single
|
||||
destination is being dialed.
|
||||
|
||||
ASTERISK-29516 #close
|
||||
|
||||
|
||||
- ### configure: fix detection of re-entrant resolver functions
|
||||
Author: Fabrice Fontaine
|
||||
Date: 2023-03-08
|
||||
|
||||
uClibc does not provide res_nsearch:
|
||||
asterisk-16.0.0/main/dns.c:506: undefined reference to `res_nsearch'
|
||||
|
||||
Patch coded by Yann E. MORIN:
|
||||
http://lists.busybox.net/pipermail/buildroot/2018-October/232630.html
|
||||
|
||||
ASTERISK-21795 #close
|
||||
|
||||
Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>
|
||||
[Retrieved from:
|
||||
https: //git.buildroot.net/buildroot/tree/package/asterisk/0005-configure-fix-detection-of-re-entrant-resolver-funct.patch]
|
||||
Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
|
||||
|
||||
- ### cli: increase channel column width
|
||||
Author: Mike Bradeen
|
||||
Date: 2023-03-06
|
||||
|
||||
For 'core show channels', the Channel name field is increased
|
||||
to 64 characters and the Location name field is increased to
|
||||
32 characters.
|
||||
|
||||
For 'core show channels verbose', the Channel name field is
|
||||
increased to 80 characters, the Context is increased to 24
|
||||
characters and the Extension is increased to 24 characters.
|
||||
|
||||
ASTERISK-30455
|
||||
|
||||
|
||||
- ### app_queue: periodic announcement configurable start time.
|
||||
Author: Jaco Kroon
|
||||
Date: 2023-02-21
|
||||
|
||||
This newly introduced periodic-announce-startdelay makes it possible to
|
||||
configure the initial start delay of the first periodic announcement
|
||||
after which periodic-announce-frequency takes over.
|
||||
|
||||
ASTERISK-30437 #close
|
||||
Signed-off-by: Jaco Kroon <jaco@uls.co.za>
|
||||
|
||||
- ### make_version: Strip svn stuff and suppress ref HEAD errors
|
||||
Author: George Joseph
|
||||
Date: 2023-03-13
|
||||
|
||||
* All of the code that used subversion has been removed.
|
||||
|
||||
* When Asterisk is checked out from a tag or commit instead
|
||||
of one of the regular branches, git would emit messages like
|
||||
"fatal: ref HEAD is not a symbolic ref" which weren't fatal
|
||||
at all. Those are now suppressed.
|
||||
|
||||
|
||||
- ### res_http_media_cache: Introduce options and customize
|
||||
Author: Holger Hans Peter Freyther
|
||||
Date: 2022-10-16
|
||||
|
||||
Make the existing CURL parameters configurable and allow
|
||||
to specify the usable protocols, proxy and DNS timeout.
|
||||
|
||||
ASTERISK-30340
|
||||
|
||||
|
||||
- ### main/iostream.c: fix build with libressl
|
||||
Author: Fabrice Fontaine
|
||||
Date: 2023-02-25
|
||||
|
||||
Fix the following build failure with libressl by using SSL_is_server
|
||||
which is available since version 2.7.0 and
|
||||
https://github.com/libressl-portable/openbsd/commit/d7ec516916c5eaac29b02d7a8ac6570f63b458f7:
|
||||
|
||||
iostream.c: In function 'ast_iostream_close':
|
||||
iostream.c:559:41: error: invalid use of incomplete typedef 'SSL' {aka 'struct ssl_st'}
|
||||
559 | if (!stream->ssl->server) {
|
||||
| ^~
|
||||
|
||||
ASTERISK-30107 #close
|
||||
|
||||
Fixes: - http://autobuild.buildroot.org/results/ce4d62d00bb77ba5b303cacf6be7e350581a62f9
|
||||
|
||||
- ### contrib: rc.archlinux.asterisk uses invalid redirect.
|
||||
Author: Sean Bright
|
||||
Date: 2023-03-02
|
||||
|
||||
`rc.archlinux.asterisk`, which explicitly requests bash in its
|
||||
shebang, uses the following command syntax:
|
||||
|
||||
${DAEMON} -rx "core stop now" > /dev/null 2&>1
|
||||
|
||||
The intent of which is to execute:
|
||||
|
||||
${DAEMON} -rx "core stop now"
|
||||
|
||||
While sending both stdout and stderr to `/dev/null`. Unfortunately,
|
||||
because the `&` is in the wrong place, bash is interpreting the `2` as
|
||||
just an additional argument to the `$DAEMON` command and not as a file
|
||||
descriptor and proceeds to use the bashism `&>` to send stderr and
|
||||
stdout to a file named `1`.
|
||||
|
||||
So we clean it up and just use bash's shortcut syntax.
|
||||
|
||||
Issue raised and a fix suggested (but not used) by peutch on GitHub¹.
|
||||
|
||||
ASTERISK-30449 #close
|
||||
|
||||
1. https://github.com/asterisk/asterisk/pull/31
|
||||
|
||||
|
||||
@@ -1,146 +0,0 @@
|
||||
|
||||
Change Log for Release 20.3.1
|
||||
========================================
|
||||
|
||||
Links:
|
||||
----------------------------------------
|
||||
|
||||
- [Full ChangeLog](https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-20.3.1.md)
|
||||
- [GitHub Diff](https://github.com/asterisk/asterisk/compare/20.3.0...20.3.1)
|
||||
- [Tarball](https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20.3.1.tar.gz)
|
||||
- [Downloads](https://downloads.asterisk.org/pub/telephony/asterisk)
|
||||
|
||||
Summary:
|
||||
----------------------------------------
|
||||
|
||||
- apply_patches: Use globbing instead of file/sort.
|
||||
- apply_patches: Sort patch list before applying
|
||||
- pjsip: Upgrade bundled version to pjproject 2.13.1
|
||||
|
||||
User Notes:
|
||||
----------------------------------------
|
||||
|
||||
- ### res_http_media_cache: Introduce options and customize
|
||||
The res_http_media_cache module now attempts to load
|
||||
configuration from the res_http_media_cache.conf file.
|
||||
The following options were added:
|
||||
* timeout_secs
|
||||
* user_agent
|
||||
* follow_location
|
||||
* max_redirects
|
||||
* protocols
|
||||
* redirect_protocols
|
||||
* dns_cache_timeout_secs
|
||||
|
||||
- ### format_sln: add .slin as supported file extension
|
||||
format_sln now recognizes '.slin' as a valid
|
||||
file extension in addition to the existing
|
||||
'.sln' and '.raw'.
|
||||
|
||||
- ### bridge_builtin_features: add beep via touch variable
|
||||
Add optional touch variable : TOUCH_MIXMONITOR_BEEP(interval)
|
||||
Setting TOUCH_MIXMONITOR_BEEP/TOUCH_MONITOR_BEEP to a valid
|
||||
interval in seconds will result in a periodic beep being
|
||||
played to the monitored channel upon MixMontior/Monitor
|
||||
feature start.
|
||||
If an interval less than 5 seconds is specified, the interval
|
||||
will default to 5 seconds. If the value is set to an invalid
|
||||
interval, the default of 15 seconds will be used.
|
||||
|
||||
- ### app_senddtmf: Add SendFlash AMI action.
|
||||
The SendFlash AMI action now allows sending
|
||||
a hook flash event on a channel.
|
||||
|
||||
- ### res_mixmonitor: MixMonitorMute by MixMonitor ID
|
||||
It is now possible to specify the MixMonitorID when calling
|
||||
the manager action: MixMonitorMute. This will allow an
|
||||
individual MixMonitor instance to be muted via ID.
|
||||
The MixMonitorID can be stored as a channel variable using
|
||||
the 'i' MixMonitor option and is returned upon creation if
|
||||
this option is used.
|
||||
As part of this change, if no MixMonitorID is specified in
|
||||
the manager action MixMonitorMute, Asterisk will set the mute
|
||||
flag on all MixMonitor audiohooks on the channel. Previous
|
||||
behavior would set the flag on the first MixMonitor audiohook
|
||||
found.
|
||||
|
||||
- ### pbx_dundi: Add PJSIP support.
|
||||
DUNDi now supports chan_pjsip. Outgoing calls using
|
||||
PJSIP require the pjsip_outgoing_endpoint option
|
||||
to be set in dundi.conf.
|
||||
|
||||
- ### test.c: Fix counting of tests and add 2 new tests
|
||||
The "tests" attribute of the "testsuite" element in the
|
||||
output XML now reflects only the tests actually requested
|
||||
to be executed instead of all the tests registered.
|
||||
The "failures" attribute was added to the "testsuite"
|
||||
element.
|
||||
Also added two new unit tests that just pass and fail
|
||||
to be used for testing CI itself.
|
||||
|
||||
- ### cli: increase channel column width
|
||||
This change increases the display width on 'core show channels'
|
||||
amd 'core show channels verbose'
|
||||
For 'core show channels', the Channel name field is increased to
|
||||
64 characters and the Location name field is increased to 32
|
||||
characters.
|
||||
For 'core show channels verbose', the Channel name field is
|
||||
increased to 80 characters, the Context is increased to 24
|
||||
characters and the Extension is increased to 24 characters.
|
||||
|
||||
|
||||
Upgrade Notes:
|
||||
----------------------------------------
|
||||
|
||||
|
||||
Closed Issues:
|
||||
----------------------------------------
|
||||
|
||||
- #193: [bug]: third-party/apply-patches doesn't sort the patch file list before applying
|
||||
|
||||
Commits By Author:
|
||||
----------------------------------------
|
||||
|
||||
- ### George Joseph (1):
|
||||
- apply_patches: Sort patch list before applying
|
||||
|
||||
- ### Sean Bright (1):
|
||||
- apply_patches: Use globbing instead of file/sort.
|
||||
|
||||
- ### Stanislav Abramenkov (1):
|
||||
- pjsip: Upgrade bundled version to pjproject 2.13.1
|
||||
|
||||
|
||||
Detail:
|
||||
----------------------------------------
|
||||
|
||||
- ### apply_patches: Use globbing instead of file/sort.
|
||||
Author: Sean Bright
|
||||
Date: 2023-07-06
|
||||
|
||||
This accomplishes the same thing as a `find ... | sort` but with the
|
||||
added benefit of clarity and avoiding a call to a subshell.
|
||||
|
||||
Additionally drop the -s option from call to patch as it is not POSIX.
|
||||
|
||||
- ### apply_patches: Sort patch list before applying
|
||||
Author: George Joseph
|
||||
Date: 2023-07-06
|
||||
|
||||
The apply_patches script wasn't sorting the list of patches in
|
||||
the "patches" directory before applying them. This left the list
|
||||
in an indeterminate order. In most cases, the list is actually
|
||||
sorted but rarely, they can be out of order and cause dependent
|
||||
patches to fail to apply.
|
||||
|
||||
We now sort the list but the "sort" program wasn't in the
|
||||
configure scripts so we needed to add that and regenerate
|
||||
the scripts as well.
|
||||
|
||||
Resolves: #193
|
||||
|
||||
- ### pjsip: Upgrade bundled version to pjproject 2.13.1
|
||||
Author: Stanislav Abramenkov
|
||||
Date: 2023-07-05
|
||||
|
||||
|
||||
@@ -1,854 +0,0 @@
|
||||
|
||||
Change Log for Release 20.4.0
|
||||
========================================
|
||||
|
||||
Links:
|
||||
----------------------------------------
|
||||
|
||||
- [Full ChangeLog](https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-20.4.0.md)
|
||||
- [GitHub Diff](https://github.com/asterisk/asterisk/compare/20.3.1...20.4.0)
|
||||
- [Tarball](https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20.4.0.tar.gz)
|
||||
- [Downloads](https://downloads.asterisk.org/pub/telephony/asterisk)
|
||||
|
||||
Summary:
|
||||
----------------------------------------
|
||||
|
||||
- app.h: Move declaration of ast_getdata_result before its first use
|
||||
- doc: Remove obsolete CHANGES-staging and UPGRADE-staging
|
||||
- .github: Updates for AsteriskReleaser
|
||||
- app_voicemail: fix imap compilation errors
|
||||
- res_musiconhold: avoid moh state access on unlocked chan
|
||||
- utils: add lock timestamps for DEBUG_THREADS
|
||||
- .github: Back out triggering PROpenedOrUpdated by label
|
||||
- .github: Move publish docs to new file CreateDocs.yml
|
||||
- rest-api: Updates for new documentation site
|
||||
- .github: Remove result check from PROpenUpdateGateTests
|
||||
- .github: Fix use of 'contains'
|
||||
- .github: Add recheck label test to additional jobs
|
||||
- .github: Fix recheck label typos
|
||||
- .github: Fix recheck label manipulation
|
||||
- .github: Allow PR submit checks to be re-run by label
|
||||
- app_voicemail_imap: Fix message count when IMAP server is unavailable
|
||||
- res_pjsip_rfc3326: Prefer Q.850 cause code over SIP.
|
||||
- res_pjsip_session: Added new function calls to avoid ABI issues.
|
||||
- app_queue: Add force_longest_waiting_caller option.
|
||||
- pjsip_transport_events.c: Use %zu printf specifier for size_t.
|
||||
- res_crypto.c: Gracefully handle potential key filename truncation.
|
||||
- configure: Remove obsolete and deprecated constructs.
|
||||
- res_fax_spandsp.c: Clean up a spaces/tabs issue
|
||||
- ast-db-manage: Synchronize revisions between comments and code.
|
||||
- test_statis_endpoints: Fix channel_messages test again
|
||||
- res_crypto.c: Avoid using the non-portable ALLPERMS macro.
|
||||
- tcptls: when disabling a server port, we should set the accept_fd to -1.
|
||||
- AMI: Add parking position parameter to Park action
|
||||
- test_stasis_endpoints.c: Make channel_messages more stable
|
||||
- build: Fix a few gcc 13 issues
|
||||
- .github: Rework for merge approval
|
||||
- ast-db-manage: Fix alembic branching error caused by #122.
|
||||
- app_followme: fix issue with enable_callee_prompt=no (#88)
|
||||
- sounds: Update download URL to use HTTPS.
|
||||
- configure: Makefile downloader enable follow redirects.
|
||||
- res_musiconhold: Add option to loop last file.
|
||||
- chan_dahdi: Fix Caller ID presentation for FXO ports.
|
||||
- AMI: Add CoreShowChannelMap action.
|
||||
- sig_analog: Add fuller Caller ID support.
|
||||
- res_stasis.c: Add new type 'sdp_label' for bridge creation.
|
||||
- app_queue: Preserve reason for realtime queues
|
||||
- .github: Fix issues with cherry-pick-reminder
|
||||
- indications: logging changes
|
||||
- .github Ignore error when adding reviewrs to PR
|
||||
- .github: Update field descriptions for AsteriskReleaser
|
||||
- callerid: Allow specifying timezone for date/time.
|
||||
- logrotate: Fix duplicate log entries.
|
||||
- chan_pjsip: Allow topology/session refreshes in early media state
|
||||
- chan_dahdi: Fix broken hidecallerid setting.
|
||||
- .github: Change title of AsteriskReleaser job
|
||||
- asterisk.c: Fix option warning for remote console.
|
||||
- .github: Don't add cherry-pick reminder if it's already present
|
||||
- .github: Fix quoting in PROpenedOrUpdated
|
||||
- .github: Add cherry-pick reminder to new PRs
|
||||
- configure: fix test code to match gethostbyname_r prototype.
|
||||
- res_pjsip_pubsub.c: Use pjsip version for pending NOTIFY check. (#77)
|
||||
- res_sorcery_memory_cache.c: Fix memory leak
|
||||
- xml.c: Process XML Inclusions recursively.
|
||||
- .github: Tweak improvement issue type language.
|
||||
- .github: Tweak new feature language, and move feature requests elsewhere.
|
||||
- .github: Fix staleness check to only run on certain labels.
|
||||
|
||||
User Notes:
|
||||
----------------------------------------
|
||||
|
||||
- ### AMI: Add parking position parameter to Park action
|
||||
New ParkingSpace parameter has been added to AMI action Park.
|
||||
|
||||
- ### res_musiconhold: Add option to loop last file.
|
||||
The loop_last option in musiconhold.conf now
|
||||
allows the last file in the directory to be looped once reached.
|
||||
|
||||
- ### AMI: Add CoreShowChannelMap action.
|
||||
New AMI action CoreShowChannelMap has been added.
|
||||
|
||||
- ### sig_analog: Add fuller Caller ID support.
|
||||
Additional Caller ID properties are now supported on
|
||||
incoming calls to FXS stations, namely the
|
||||
redirecting reason and call qualifier.
|
||||
|
||||
- ### res_stasis.c: Add new type 'sdp_label' for bridge creation.
|
||||
When creating a bridge using the ARI the 'type' argument now
|
||||
accepts a new value 'sdp_label' which will configure the bridge to add
|
||||
labels for each stream in the SDP with the corresponding channel id.
|
||||
|
||||
- ### app_queue: Preserve reason for realtime queues
|
||||
Make paused reason in realtime queues persist an
|
||||
Asterisk restart. This was fixed for non-realtime
|
||||
queues in ASTERISK_25732.
|
||||
|
||||
|
||||
Upgrade Notes:
|
||||
----------------------------------------
|
||||
|
||||
- ### app_queue: Preserve reason for realtime queues
|
||||
Add a new column to the queue_member table:
|
||||
reason_paused VARCHAR(80) so the reason can be preserved.
|
||||
|
||||
|
||||
Closed Issues:
|
||||
----------------------------------------
|
||||
|
||||
- #45: [bug]: Non-bundled PJSIP check for evsub pending NOTIFY check is insufficient/ineffective
|
||||
- #55: [bug]: res_sorcery_memory_cache: Memory leak when calling sorcery_memory_cache_open
|
||||
- #64: [bug]: app_voicemail_imap wrong behavior when losing IMAP connection
|
||||
- #65: [bug]: heap overflow by default at startup
|
||||
- #66: [improvement]: Fix preserve reason of pause when Asterisk is restared for realtime queues
|
||||
- #73: [new-feature]: pjsip: Allow topology/session refreshes in early media state
|
||||
- #87: [bug]: app_followme: Setting enable_callee_prompt=no breaks timeout
|
||||
- #89: [improvement]: indications: logging changes
|
||||
- #91: [improvement]: Add parameter on ARI bridge create to allow it to send SDP labels
|
||||
- #94: [new-feature]: sig_analog: Add full Caller ID support for incoming calls
|
||||
- #96: [bug]: make install-logrotate causes logrotate to fail on service restart
|
||||
- #98: [new-feature]: callerid: Allow timezone to be specified at runtime
|
||||
- #100: [bug]: sig_analog: hidecallerid setting is broken
|
||||
- #102: [bug]: Strange warning - 'T' option is not compatible with remote console mode and has no effect.
|
||||
- #104: [improvement]: Add AMI action to get a list of connected channels
|
||||
- #108: [new-feature]: fair handling of calls in multi-queue scenarios
|
||||
- #110: [improvement]: utils - add lock timing information with DEBUG_THREADS
|
||||
- #116: [bug]: SIP Reason: "Call completed elsewhere" no longer propagating
|
||||
- #120: [bug]: chan_dahdi: Fix broken presentation for FXO caller ID
|
||||
- #122: [new-feature]: res_musiconhold: Add looplast option
|
||||
- #133: [bug]: unlock channel after moh state access
|
||||
- #136: [bug]: Makefile downloader does not follow redirects.
|
||||
- #145: [bug]: ABI issue with pjproject and pjsip_inv_session
|
||||
- #155: [bug]: GCC 13 is catching a few new trivial issues
|
||||
- #158: [bug]: test_stasis_endpoints.c: Unit test channel_messages is unstable
|
||||
- #174: [bug]: app_voicemail imap compile errors
|
||||
- #200: [bug]: Regression: In app.h an enum is used before its declaration.
|
||||
|
||||
Commits By Author:
|
||||
----------------------------------------
|
||||
|
||||
- ### Asterisk Development Team (2):
|
||||
- Update for 20.4.0-rc1
|
||||
- Update for 20.4.0-rc2
|
||||
|
||||
- ### Ben Ford (2):
|
||||
- AMI: Add CoreShowChannelMap action.
|
||||
- res_pjsip_session: Added new function calls to avoid ABI issues.
|
||||
|
||||
- ### George Joseph (23):
|
||||
- .github: Add cherry-pick reminder to new PRs
|
||||
- .github: Fix quoting in PROpenedOrUpdated
|
||||
- .github: Don't add cherry-pick reminder if it's already present
|
||||
- .github: Change title of AsteriskReleaser job
|
||||
- .github: Update field descriptions for AsteriskReleaser
|
||||
- .github Ignore error when adding reviewrs to PR
|
||||
- .github: Fix issues with cherry-pick-reminder
|
||||
- .github: Rework for merge approval
|
||||
- build: Fix a few gcc 13 issues
|
||||
- test_stasis_endpoints.c: Make channel_messages more stable
|
||||
- test_statis_endpoints: Fix channel_messages test again
|
||||
- .github: Allow PR submit checks to be re-run by label
|
||||
- .github: Fix recheck label manipulation
|
||||
- .github: Fix recheck label typos
|
||||
- .github: Add recheck label test to additional jobs
|
||||
- .github: Fix use of 'contains'
|
||||
- .github: Remove result check from PROpenUpdateGateTests
|
||||
- rest-api: Updates for new documentation site
|
||||
- .github: Move publish docs to new file CreateDocs.yml
|
||||
- .github: Back out triggering PROpenedOrUpdated by label
|
||||
- .github: Updates for AsteriskReleaser
|
||||
- doc: Remove obsolete CHANGES-staging and UPGRADE-staging
|
||||
- app.h: Move declaration of ast_getdata_result before its first use
|
||||
|
||||
- ### Gitea (1):
|
||||
- .github: Tweak new feature language, and move feature requests elsewhere.
|
||||
|
||||
- ### Jaco Kroon (2):
|
||||
- configure: fix test code to match gethostbyname_r prototype.
|
||||
- tcptls: when disabling a server port, we should set the accept_fd to -1.
|
||||
|
||||
- ### Jiajian Zhou (1):
|
||||
- AMI: Add parking position parameter to Park action
|
||||
|
||||
- ### Joe Searle (1):
|
||||
- res_stasis.c: Add new type 'sdp_label' for bridge creation.
|
||||
|
||||
- ### Joshua C. Colp (2):
|
||||
- .github: Fix staleness check to only run on certain labels.
|
||||
- .github: Tweak improvement issue type language.
|
||||
|
||||
- ### Maximilian Fridrich (1):
|
||||
- chan_pjsip: Allow topology/session refreshes in early media state
|
||||
|
||||
- ### Miguel Angel Nubla (1):
|
||||
- configure: Makefile downloader enable follow redirects.
|
||||
|
||||
- ### Mike Bradeen (4):
|
||||
- indications: logging changes
|
||||
- utils: add lock timestamps for DEBUG_THREADS
|
||||
- res_musiconhold: avoid moh state access on unlocked chan
|
||||
- app_voicemail: fix imap compilation errors
|
||||
|
||||
- ### Nathan Bruning (1):
|
||||
- app_queue: Add force_longest_waiting_caller option.
|
||||
|
||||
- ### Naveen Albert (7):
|
||||
- asterisk.c: Fix option warning for remote console.
|
||||
- chan_dahdi: Fix broken hidecallerid setting.
|
||||
- logrotate: Fix duplicate log entries.
|
||||
- callerid: Allow specifying timezone for date/time.
|
||||
- sig_analog: Add fuller Caller ID support.
|
||||
- chan_dahdi: Fix Caller ID presentation for FXO ports.
|
||||
- res_musiconhold: Add option to loop last file.
|
||||
|
||||
- ### Niklas Larsson (1):
|
||||
- app_queue: Preserve reason for realtime queues
|
||||
|
||||
- ### Olaf Titz (1):
|
||||
- app_voicemail_imap: Fix message count when IMAP server is unavailable
|
||||
|
||||
- ### Sean Bright (10):
|
||||
- xml.c: Process XML Inclusions recursively.
|
||||
- res_pjsip_pubsub.c: Use pjsip version for pending NOTIFY check. (#77)
|
||||
- sounds: Update download URL to use HTTPS.
|
||||
- ast-db-manage: Fix alembic branching error caused by #122.
|
||||
- res_crypto.c: Avoid using the non-portable ALLPERMS macro.
|
||||
- ast-db-manage: Synchronize revisions between comments and code.
|
||||
- configure: Remove obsolete and deprecated constructs.
|
||||
- res_crypto.c: Gracefully handle potential key filename truncation.
|
||||
- pjsip_transport_events.c: Use %zu printf specifier for size_t.
|
||||
- res_pjsip_rfc3326: Prefer Q.850 cause code over SIP.
|
||||
|
||||
- ### alex2grad (1):
|
||||
- app_followme: fix issue with enable_callee_prompt=no (#88)
|
||||
|
||||
- ### zhengsh (1):
|
||||
- res_sorcery_memory_cache.c: Fix memory leak
|
||||
|
||||
- ### zhou_jiajian (1):
|
||||
- res_fax_spandsp.c: Clean up a spaces/tabs issue
|
||||
|
||||
|
||||
Detail:
|
||||
----------------------------------------
|
||||
|
||||
- ### app.h: Move declaration of ast_getdata_result before its first use
|
||||
Author: George Joseph
|
||||
Date: 2023-07-10
|
||||
|
||||
The ast_app_getdata() and ast_app_getdata_terminator() declarations
|
||||
in app.h were changed recently to return enum ast_getdata_result
|
||||
(which is how they were defined in app.c). The existing
|
||||
declaration of ast_getdata_result in app.h was about 1000 lines
|
||||
after those functions however so under certain circumstances,
|
||||
a "use before declaration" error was thrown by the compiler.
|
||||
The declaration of the enum was therefore moved to before those
|
||||
functions.
|
||||
|
||||
Resolves: #200
|
||||
|
||||
- ### doc: Remove obsolete CHANGES-staging and UPGRADE-staging
|
||||
Author: George Joseph
|
||||
Date: 2023-07-10
|
||||
|
||||
|
||||
- ### .github: Updates for AsteriskReleaser
|
||||
Author: George Joseph
|
||||
Date: 2023-06-30
|
||||
|
||||
|
||||
- ### app_voicemail: fix imap compilation errors
|
||||
Author: Mike Bradeen
|
||||
Date: 2023-06-26
|
||||
|
||||
Fixes two compilation errors in app_voicemail_imap, one due to an unsed
|
||||
variable and one due to a new variable added in the incorrect location
|
||||
in _163.
|
||||
|
||||
Resolves: #174
|
||||
|
||||
- ### res_musiconhold: avoid moh state access on unlocked chan
|
||||
Author: Mike Bradeen
|
||||
Date: 2023-05-31
|
||||
|
||||
Move channel unlock to after moh state access to avoid
|
||||
potential unlocked access to state.
|
||||
|
||||
Resolves: #133
|
||||
|
||||
- ### utils: add lock timestamps for DEBUG_THREADS
|
||||
Author: Mike Bradeen
|
||||
Date: 2023-05-23
|
||||
|
||||
Adds last locked and unlocked timestamps as well as a
|
||||
counter for the number of times the lock has been
|
||||
attempted (vs locked/unlocked) to debug output printed
|
||||
using the DEBUG_THREADS option.
|
||||
|
||||
Resolves: #110
|
||||
|
||||
- ### .github: Back out triggering PROpenedOrUpdated by label
|
||||
Author: George Joseph
|
||||
Date: 2023-06-29
|
||||
|
||||
|
||||
- ### .github: Move publish docs to new file CreateDocs.yml
|
||||
Author: George Joseph
|
||||
Date: 2023-06-27
|
||||
|
||||
|
||||
- ### rest-api: Updates for new documentation site
|
||||
Author: George Joseph
|
||||
Date: 2023-06-26
|
||||
|
||||
The new documentation site uses traditional markdown instead
|
||||
of the Confluence flavored version. This required changes in
|
||||
the mustache templates and the python that generates the files.
|
||||
|
||||
|
||||
- ### .github: Remove result check from PROpenUpdateGateTests
|
||||
Author: George Joseph
|
||||
Date: 2023-06-27
|
||||
|
||||
|
||||
- ### .github: Fix use of 'contains'
|
||||
Author: George Joseph
|
||||
Date: 2023-06-26
|
||||
|
||||
|
||||
- ### .github: Add recheck label test to additional jobs
|
||||
Author: George Joseph
|
||||
Date: 2023-06-26
|
||||
|
||||
|
||||
- ### .github: Fix recheck label typos
|
||||
Author: George Joseph
|
||||
Date: 2023-06-26
|
||||
|
||||
|
||||
- ### .github: Fix recheck label manipulation
|
||||
Author: George Joseph
|
||||
Date: 2023-06-26
|
||||
|
||||
|
||||
- ### .github: Allow PR submit checks to be re-run by label
|
||||
Author: George Joseph
|
||||
Date: 2023-06-26
|
||||
|
||||
|
||||
- ### app_voicemail_imap: Fix message count when IMAP server is unavailable
|
||||
Author: Olaf Titz
|
||||
Date: 2023-06-15
|
||||
|
||||
Some callers of __messagecount did not correctly handle error return,
|
||||
instead returning a -1 message count.
|
||||
This caused a notification with "Messages-Waiting: yes" and
|
||||
"Voice-Message: -1/0 (0/0)" if the IMAP server was unavailable.
|
||||
|
||||
Fixes: #64
|
||||
|
||||
- ### res_pjsip_rfc3326: Prefer Q.850 cause code over SIP.
|
||||
Author: Sean Bright
|
||||
Date: 2023-06-12
|
||||
|
||||
Resolves: #116
|
||||
|
||||
- ### res_pjsip_session: Added new function calls to avoid ABI issues.
|
||||
Author: Ben Ford
|
||||
Date: 2023-06-05
|
||||
|
||||
Added two new functions (ast_sip_session_get_dialog and
|
||||
ast_sip_session_get_pjsip_inv_state) that retrieve the dialog and the
|
||||
pjsip_inv_state respectively from the pjsip_inv_session on the
|
||||
ast_sip_session struct. This is due to pjproject adding a new field to
|
||||
the pjsip_inv_session struct that caused crashes when trying to access
|
||||
fields that were no longer where they were expected to be if a module
|
||||
was compiled against a different version of pjproject.
|
||||
|
||||
Resolves: #145
|
||||
|
||||
- ### app_queue: Add force_longest_waiting_caller option.
|
||||
Author: Nathan Bruning
|
||||
Date: 2023-01-24
|
||||
|
||||
This adds an option 'force_longest_waiting_caller' which changes the
|
||||
global behavior of the queue engine to prevent queue callers from
|
||||
'jumping ahead' when an agent is in multiple queues.
|
||||
|
||||
Resolves: #108
|
||||
|
||||
Also closes old asterisk issues:
|
||||
- ASTERISK-17732
|
||||
- ASTERISK-17570
|
||||
|
||||
|
||||
- ### pjsip_transport_events.c: Use %zu printf specifier for size_t.
|
||||
Author: Sean Bright
|
||||
Date: 2023-06-05
|
||||
|
||||
Partially resolves #143.
|
||||
|
||||
|
||||
- ### res_crypto.c: Gracefully handle potential key filename truncation.
|
||||
Author: Sean Bright
|
||||
Date: 2023-06-05
|
||||
|
||||
Partially resolves #143.
|
||||
|
||||
|
||||
- ### configure: Remove obsolete and deprecated constructs.
|
||||
Author: Sean Bright
|
||||
Date: 2023-06-01
|
||||
|
||||
These were uncovered when trying to run `bootstrap.sh` with Autoconf
|
||||
2.71:
|
||||
|
||||
* AC_CONFIG_HEADER() is deprecated in favor of AC_CONFIG_HEADERS().
|
||||
* AC_HEADER_TIME is obsolete.
|
||||
* $as_echo is deprecated in favor of AS_ECHO() which requires an update
|
||||
to ax_pthread.m4.
|
||||
|
||||
Note that the generated artifacts in this commit are from Autoconf 2.69.
|
||||
|
||||
Resolves #139
|
||||
|
||||
|
||||
- ### res_fax_spandsp.c: Clean up a spaces/tabs issue
|
||||
Author: zhou_jiajian
|
||||
Date: 2023-05-26
|
||||
|
||||
|
||||
- ### ast-db-manage: Synchronize revisions between comments and code.
|
||||
Author: Sean Bright
|
||||
Date: 2023-06-06
|
||||
|
||||
In a handful of migrations, the comment header that indicates the
|
||||
current and previous revisions has drifted from the identifiers
|
||||
revision and down_revision variables. This updates the comment headers
|
||||
to match the code.
|
||||
|
||||
|
||||
- ### test_statis_endpoints: Fix channel_messages test again
|
||||
Author: George Joseph
|
||||
Date: 2023-06-12
|
||||
|
||||
|
||||
- ### res_crypto.c: Avoid using the non-portable ALLPERMS macro.
|
||||
Author: Sean Bright
|
||||
Date: 2023-06-05
|
||||
|
||||
ALLPERMS is not POSIX and it's trivial enough to not jump through
|
||||
autoconf hoops to check for it.
|
||||
|
||||
Fixes #149.
|
||||
|
||||
|
||||
- ### tcptls: when disabling a server port, we should set the accept_fd to -1.
|
||||
Author: Jaco Kroon
|
||||
Date: 2023-06-02
|
||||
|
||||
If we don't set this to -1 if the structure can be potentially re-used
|
||||
later then it's possible that we'll issue a close() on an unrelated file
|
||||
descriptor, breaking asterisk in other interesting ways.
|
||||
|
||||
I believe this to be an unlikely scenario, but it costs nothing to be
|
||||
safe.
|
||||
|
||||
Signed-off-by: Jaco Kroon <jaco@uls.co.za>
|
||||
|
||||
- ### AMI: Add parking position parameter to Park action
|
||||
Author: Jiajian Zhou
|
||||
Date: 2023-05-19
|
||||
|
||||
Add a parking space extension parameter (ParkingSpace) to the Park action.
|
||||
Park action will attempt to park the call to that extension.
|
||||
If the extension is already in use, then execution will continue at the next priority.
|
||||
|
||||
UserNote: New ParkingSpace parameter has been added to AMI action Park.
|
||||
|
||||
- ### test_stasis_endpoints.c: Make channel_messages more stable
|
||||
Author: George Joseph
|
||||
Date: 2023-06-09
|
||||
|
||||
The channel_messages test was assuming that stasis would return
|
||||
messages in a specific order. This is an incorrect assumption as
|
||||
message ordering was never guaranteed. This was causing the test
|
||||
to fail occasionally. We now test all the messages for the
|
||||
required message types instead of testing one by one.
|
||||
|
||||
Resolves: #158
|
||||
|
||||
- ### build: Fix a few gcc 13 issues
|
||||
Author: George Joseph
|
||||
Date: 2023-06-09
|
||||
|
||||
* gcc 13 is now catching when a function is declared as returning
|
||||
an enum but defined as returning an int or vice versa. Fixed
|
||||
a few in app.h, loader.c, stasis_message.c.
|
||||
|
||||
* gcc 13 is also now (incorrectly) complaining of dangling pointers
|
||||
when assigning a pointer to a local char array to a char *. Had
|
||||
to change that to an ast_alloca.
|
||||
|
||||
Resolves: #155
|
||||
|
||||
- ### .github: Rework for merge approval
|
||||
Author: George Joseph
|
||||
Date: 2023-06-06
|
||||
|
||||
|
||||
- ### ast-db-manage: Fix alembic branching error caused by #122.
|
||||
Author: Sean Bright
|
||||
Date: 2023-06-05
|
||||
|
||||
Fixes #147.
|
||||
|
||||
|
||||
- ### app_followme: fix issue with enable_callee_prompt=no (#88)
|
||||
Author: alex2grad
|
||||
Date: 2023-06-05
|
||||
|
||||
* app_followme: fix issue with enable_callee_prompt=no
|
||||
|
||||
If the FollowMe option 'enable_callee_prompt' is set to 'no' then Asterisk
|
||||
incorrectly sets a winner channel to the channel from which any control frame was read.
|
||||
|
||||
This fix sets the winner channel only to the answered channel.
|
||||
|
||||
Resolves: #87
|
||||
|
||||
ASTERISK-30326
|
||||
|
||||
|
||||
- ### sounds: Update download URL to use HTTPS.
|
||||
Author: Sean Bright
|
||||
Date: 2023-06-01
|
||||
|
||||
Related to #136
|
||||
|
||||
|
||||
- ### configure: Makefile downloader enable follow redirects.
|
||||
Author: Miguel Angel Nubla
|
||||
Date: 2023-06-01
|
||||
|
||||
If curl is used for building, any download such as a sounds package
|
||||
will fail to follow HTTP redirects and will download wrong data.
|
||||
|
||||
Resolves: #136
|
||||
|
||||
- ### res_musiconhold: Add option to loop last file.
|
||||
Author: Naveen Albert
|
||||
Date: 2023-05-25
|
||||
|
||||
Adds the loop_last option to res_musiconhold,
|
||||
which allows the last audio file in the directory
|
||||
to be looped perpetually once reached, rather than
|
||||
circling back to the beginning again.
|
||||
|
||||
Resolves: #122
|
||||
ASTERISK-30462
|
||||
|
||||
UserNote: The loop_last option in musiconhold.conf now
|
||||
allows the last file in the directory to be looped once reached.
|
||||
|
||||
|
||||
- ### chan_dahdi: Fix Caller ID presentation for FXO ports.
|
||||
Author: Naveen Albert
|
||||
Date: 2023-05-25
|
||||
|
||||
Currently, the presentation for incoming channels is
|
||||
always available, because it is never actually set,
|
||||
meaning the channel presentation can be nonsensical.
|
||||
If the presentation from the incoming Caller ID spill
|
||||
is private or unavailable, we now update the channel
|
||||
presentation to reflect this.
|
||||
|
||||
Resolves: #120
|
||||
ASTERISK-30333
|
||||
ASTERISK-21741
|
||||
|
||||
|
||||
- ### AMI: Add CoreShowChannelMap action.
|
||||
Author: Ben Ford
|
||||
Date: 2023-05-18
|
||||
|
||||
Adds a new AMI action (CoreShowChannelMap) that takes in a channel name
|
||||
and provides a list of all channels that are connected to that channel,
|
||||
following local channel connections as well.
|
||||
|
||||
Resolves: #104
|
||||
|
||||
UserNote: New AMI action CoreShowChannelMap has been added.
|
||||
|
||||
- ### sig_analog: Add fuller Caller ID support.
|
||||
Author: Naveen Albert
|
||||
Date: 2023-05-18
|
||||
|
||||
A previous change, ASTERISK_29991, made it possible
|
||||
to send additional Caller ID parameters that were
|
||||
not previously supported.
|
||||
|
||||
This change adds support for analog DAHDI channels
|
||||
to now be able to receive these parameters for
|
||||
on-hook Caller ID, in order to enhance the usability
|
||||
of CPE that support these parameters.
|
||||
|
||||
Resolves: #94
|
||||
ASTERISK-30331
|
||||
|
||||
UserNote: Additional Caller ID properties are now supported on
|
||||
incoming calls to FXS stations, namely the
|
||||
redirecting reason and call qualifier.
|
||||
|
||||
|
||||
- ### res_stasis.c: Add new type 'sdp_label' for bridge creation.
|
||||
Author: Joe Searle
|
||||
Date: 2023-05-25
|
||||
|
||||
Add new type 'sdp_label' when creating a bridge using the ARI. This will
|
||||
add labels to the SDP for each stream, the label is set to the
|
||||
corresponding channel id.
|
||||
|
||||
Resolves: #91
|
||||
|
||||
UserNote: When creating a bridge using the ARI the 'type' argument now
|
||||
accepts a new value 'sdp_label' which will configure the bridge to add
|
||||
labels for each stream in the SDP with the corresponding channel id.
|
||||
|
||||
|
||||
- ### app_queue: Preserve reason for realtime queues
|
||||
Author: Niklas Larsson
|
||||
Date: 2023-05-05
|
||||
|
||||
When Asterisk is restarted it does not preserve paused reason for
|
||||
members of realtime queues. This was fixed for non-realtime queues in
|
||||
ASTERISK_25732
|
||||
|
||||
Resolves: #66
|
||||
|
||||
UpgradeNote: Add a new column to the queue_member table:
|
||||
reason_paused VARCHAR(80) so the reason can be preserved.
|
||||
|
||||
UserNote: Make paused reason in realtime queues persist an
|
||||
Asterisk restart. This was fixed for non-realtime
|
||||
queues in ASTERISK_25732.
|
||||
|
||||
|
||||
- ### .github: Fix issues with cherry-pick-reminder
|
||||
Author: George Joseph
|
||||
Date: 2023-06-05
|
||||
|
||||
|
||||
- ### indications: logging changes
|
||||
Author: Mike Bradeen
|
||||
Date: 2023-05-16
|
||||
|
||||
Increase verbosity to indicate failure due to missing country
|
||||
and to specify default on CLI dump
|
||||
|
||||
Resolves: #89
|
||||
|
||||
- ### .github Ignore error when adding reviewrs to PR
|
||||
Author: George Joseph
|
||||
Date: 2023-06-05
|
||||
|
||||
|
||||
- ### .github: Update field descriptions for AsteriskReleaser
|
||||
Author: George Joseph
|
||||
Date: 2023-05-26
|
||||
|
||||
|
||||
- ### callerid: Allow specifying timezone for date/time.
|
||||
Author: Naveen Albert
|
||||
Date: 2023-05-18
|
||||
|
||||
The Caller ID generation routine currently is hardcoded
|
||||
to always use the system time zone. This makes it possible
|
||||
to optionally specify any TZ-format time zone.
|
||||
|
||||
Resolves: #98
|
||||
ASTERISK-30330
|
||||
|
||||
|
||||
- ### logrotate: Fix duplicate log entries.
|
||||
Author: Naveen Albert
|
||||
Date: 2023-05-18
|
||||
|
||||
The Asterisk logrotate script contains explicit
|
||||
references to files with the .log extension,
|
||||
which are also included when *log is expanded.
|
||||
This causes issues with newer versions of logrotate.
|
||||
This fixes this by ensuring that a log file cannot
|
||||
be referenced multiple times after expansion occurs.
|
||||
|
||||
Resolves: #96
|
||||
ASTERISK-30442
|
||||
Reported by: EN Barnett
|
||||
Tested by: EN Barnett
|
||||
|
||||
|
||||
- ### chan_pjsip: Allow topology/session refreshes in early media state
|
||||
Author: Maximilian Fridrich
|
||||
Date: 2023-05-10
|
||||
|
||||
With this change, session modifications in the early media state are
|
||||
possible if the SDP was sent reliably and confirmed by a PRACK. For
|
||||
details, see RFC 6337, escpecially section 3.2.
|
||||
|
||||
Resolves: #73
|
||||
|
||||
- ### chan_dahdi: Fix broken hidecallerid setting.
|
||||
Author: Naveen Albert
|
||||
Date: 2023-05-18
|
||||
|
||||
The hidecallerid setting in chan_dahdi.conf currently
|
||||
is broken for a couple reasons.
|
||||
|
||||
First, the actual code in sig_analog to "allow" or "block"
|
||||
Caller ID depending on this setting improperly used
|
||||
ast_set_callerid instead of updating the presentation.
|
||||
This issue was mostly fixed in ASTERISK_29991, and that
|
||||
fix is carried forward to this code as well.
|
||||
|
||||
Secondly, the hidecallerid setting is set on the DAHDI
|
||||
pvt but not carried forward to the analog pvt properly.
|
||||
This is because the chan_dahdi config loading code improperly
|
||||
set permhidecallerid to permhidecallerid from the config file,
|
||||
even though hidecallerid is what is actually set from the config
|
||||
file. (This is done correctly for call waiting, a few lines above.)
|
||||
This is fixed to read the proper value.
|
||||
|
||||
Thirdly, in sig_analog, hidecallerid is set to permhidecallerid
|
||||
only on hangup. This can lead to potential security vulnerabilities
|
||||
as an allowed Caller ID from an initial call can "leak" into subsequent
|
||||
calls if no hangup occurs between them. This is fixed by setting
|
||||
hidecallerid to permcallerid when calls begin, rather than when they end.
|
||||
This also means we don't need to also set hidecallerid in chan_dahdi.c
|
||||
when copying from the config, as we would have to otherwise.
|
||||
|
||||
Fourthly, sig_analog currently only allows dialing *67 or *82 if
|
||||
that would actually toggle the presentation. A comment is added
|
||||
clarifying that this behavior is okay.
|
||||
|
||||
Finally, a couple log messages are updated to be more accurate.
|
||||
|
||||
Resolves: #100
|
||||
ASTERISK-30349 #close
|
||||
|
||||
|
||||
- ### .github: Change title of AsteriskReleaser job
|
||||
Author: George Joseph
|
||||
Date: 2023-05-23
|
||||
|
||||
|
||||
- ### asterisk.c: Fix option warning for remote console.
|
||||
Author: Naveen Albert
|
||||
Date: 2023-05-18
|
||||
|
||||
Commit 09e989f972e2583df4e9bf585c246c37322d8d2f
|
||||
categorized the T option as not being compatible
|
||||
with remote consoles, but they do affect verbose
|
||||
messages with remote console. This fixes this.
|
||||
|
||||
Resolves: #102
|
||||
|
||||
- ### .github: Don't add cherry-pick reminder if it's already present
|
||||
Author: George Joseph
|
||||
Date: 2023-05-22
|
||||
|
||||
|
||||
- ### .github: Fix quoting in PROpenedOrUpdated
|
||||
Author: George Joseph
|
||||
Date: 2023-05-16
|
||||
|
||||
|
||||
- ### .github: Add cherry-pick reminder to new PRs
|
||||
Author: George Joseph
|
||||
Date: 2023-05-15
|
||||
|
||||
|
||||
- ### configure: fix test code to match gethostbyname_r prototype.
|
||||
Author: Jaco Kroon
|
||||
Date: 2023-05-10
|
||||
|
||||
This enables the test to work with CC=clang.
|
||||
|
||||
Without this the test for 6 args would fail with:
|
||||
|
||||
utils.c:99:12: error: static declaration of 'gethostbyname_r' follows non-static declaration
|
||||
static int gethostbyname_r (const char *name, struct hostent *ret, char *buf,
|
||||
^
|
||||
/usr/include/netdb.h:177:12: note: previous declaration is here
|
||||
extern int gethostbyname_r (const char *__restrict __name,
|
||||
^
|
||||
|
||||
Fixing the expected return type to int sorts this out.
|
||||
|
||||
Signed-off-by: Jaco Kroon <jaco@uls.co.za>
|
||||
|
||||
- ### res_pjsip_pubsub.c: Use pjsip version for pending NOTIFY check. (#77)
|
||||
Author: Sean Bright
|
||||
Date: 2023-05-11
|
||||
|
||||
The functionality we are interested in is present only in pjsip 2.13
|
||||
and newer.
|
||||
|
||||
Resolves: #45
|
||||
|
||||
- ### res_sorcery_memory_cache.c: Fix memory leak
|
||||
Author: zhengsh
|
||||
Date: 2023-05-03
|
||||
|
||||
Replace the original call to ast_strdup with a call to ast_strdupa to fix the leak issue.
|
||||
|
||||
Resolves: #55
|
||||
ASTERISK-30429
|
||||
|
||||
|
||||
- ### xml.c: Process XML Inclusions recursively.
|
||||
Author: Sean Bright
|
||||
Date: 2023-05-09
|
||||
|
||||
If processing an XInclude results in new <xi:include> elements, we
|
||||
need to run XInclude processing again. This continues until no
|
||||
replacement occurs or an error is encountered.
|
||||
|
||||
There is a separate issue with dynamic strings (ast_str) that will be
|
||||
addressed separately.
|
||||
|
||||
Resolves: #65
|
||||
|
||||
- ### .github: Tweak improvement issue type language.
|
||||
Author: Joshua C. Colp
|
||||
Date: 2023-05-09
|
||||
|
||||
|
||||
- ### .github: Tweak new feature language, and move feature requests elsewhere.
|
||||
Author: Gitea
|
||||
Date: 2023-05-09
|
||||
|
||||
|
||||
- ### .github: Fix staleness check to only run on certain labels.
|
||||
Author: Joshua C. Colp
|
||||
Date: 2023-05-09
|
||||
|
||||
|
||||
@@ -1,748 +0,0 @@
|
||||
|
||||
Change Log for Release asterisk-20.5.0
|
||||
========================================
|
||||
|
||||
Links:
|
||||
----------------------------------------
|
||||
|
||||
- [Full ChangeLog](https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-20.5.0.md)
|
||||
- [GitHub Diff](https://github.com/asterisk/asterisk/compare/20.4.0...20.5.0)
|
||||
- [Tarball](https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20.5.0.tar.gz)
|
||||
- [Downloads](https://downloads.asterisk.org/pub/telephony/asterisk)
|
||||
|
||||
Summary:
|
||||
----------------------------------------
|
||||
|
||||
- ari-stubs: Fix more local anchor references
|
||||
- ari-stubs: Fix more local anchor references
|
||||
- ari-stubs: Fix broken documentation anchors
|
||||
- res_pjsip_session: Send Session Interval too small response
|
||||
- .github: Update workflow-application-token-action to v2
|
||||
- app_dial: Fix infinite loop when sending digits.
|
||||
- app_voicemail: Fix for loop declarations
|
||||
- alembic: Fix quoting of the 100rel column
|
||||
- pbx.c: Fix gcc 12 compiler warning.
|
||||
- app_audiosocket: Fixed timeout with -1 to avoid busy loop.
|
||||
- download_externals: Fix a few version related issues
|
||||
- main/refer.c: Fix double free in refer_data_destructor + potential leak
|
||||
- sig_analog: Add Called Subscriber Held capability.
|
||||
- app_macro: Fix locking around datastore access
|
||||
- Revert "app_stack: Print proper exit location for PBXless channels."
|
||||
- .github: Use generic releaser
|
||||
- install_prereq: Fix dependency install on aarch64.
|
||||
- res_pjsip.c: Set contact_user on incoming call local Contact header
|
||||
- extconfig: Allow explicit DB result set ordering to be disabled.
|
||||
- rest-api: Run make ari-stubs
|
||||
- res_pjsip_header_funcs: Make prefix argument optional.
|
||||
- pjproject_bundled: Increase PJSIP_MAX_MODULE to 38
|
||||
- manager: Tolerate stasis messages with no channel snapshot.
|
||||
- core/ari/pjsip: Add refer mechanism
|
||||
- chan_dahdi: Allow autoreoriginating after hangup.
|
||||
- audiohook: Unlock channel in mute if no audiohooks present.
|
||||
- sig_analog: Allow three-way flash to time out to silence.
|
||||
- res_prometheus: Do not generate broken metrics
|
||||
- res_pjsip: Enable TLS v1.3 if present.
|
||||
- func_cut: Add example to documentation.
|
||||
- extensions.conf.sample: Remove reference to missing context.
|
||||
- func_export: Use correct function argument as variable name.
|
||||
- app_queue: Add support for applying caller priority change immediately.
|
||||
- .github: Fix cherry-pick reminder issues
|
||||
- chan_iax2.c: Avoid crash with IAX2 switch support.
|
||||
- res_geolocation: Ensure required 'location_info' is present.
|
||||
- Adds manager actions to allow move/remove/forward individual messages in a particular mailbox folder. The forward command can be used to copy a message within a mailbox or to another mailbox. Also adds a VoicemailBoxSummarry, required to retrieve message ID's.
|
||||
- app_voicemail: add CLI commands for message manipulation
|
||||
- res_rtp_asterisk: Move ast_rtp_rtcp_report_alloc using `rtp->themssrc_valid` into the scope of the rtp_instance lock.
|
||||
- .github: Minor tweak to Asterisk Releaser
|
||||
- .github: Suppress cherry-pick reminder for some situations
|
||||
- sig_analog: Allow immediate fake ring to be suppressed.
|
||||
|
||||
User Notes:
|
||||
----------------------------------------
|
||||
|
||||
- ### sig_analog: Add Called Subscriber Held capability.
|
||||
Called Subscriber Held is now supported for analog
|
||||
FXS channels, using the calledsubscriberheld option. This allows
|
||||
a station user to go on hook when receiving an incoming call
|
||||
and resume from another phone on the same line by going on hook,
|
||||
without disconnecting the call.
|
||||
|
||||
- ### res_pjsip_header_funcs: Make prefix argument optional.
|
||||
The prefix argument to PJSIP_HEADERS is now
|
||||
optional. If not specified, all header names will be
|
||||
returned.
|
||||
|
||||
- ### core/ari/pjsip: Add refer mechanism
|
||||
There is a new ARI endpoint `/endpoints/refer` for referring
|
||||
an endpoint to some URI or endpoint.
|
||||
|
||||
- ### chan_dahdi: Allow autoreoriginating after hangup.
|
||||
The autoreoriginate setting now allows for kewlstart FXS
|
||||
channels to automatically reoriginate and provide dial tone to the
|
||||
user again after all calls on the line have cleared. This saves users
|
||||
from having to manually hang up and pick up the receiver again before
|
||||
making another call.
|
||||
|
||||
- ### sig_analog: Allow three-way flash to time out to silence.
|
||||
The threewaysilenthold option now allows the three-way
|
||||
dial tone to time out to silence, rather than continuing forever.
|
||||
|
||||
- ### res_pjsip: Enable TLS v1.3 if present.
|
||||
res_pjsip now allows TLS v1.3 to be enabled if supported by
|
||||
the underlying PJSIP library. The bundled version of PJSIP supports
|
||||
TLS v1.3.
|
||||
|
||||
- ### app_queue: Add support for applying caller priority change immediately.
|
||||
The 'queue priority caller' CLI command and
|
||||
'QueueChangePriorityCaller' AMI action now have an 'immediate'
|
||||
argument which allows the caller priority change to be reflected
|
||||
immediately, causing the position of a caller to move within the
|
||||
queue depending on the priorities of the other callers.
|
||||
|
||||
- ### Adds manager actions to allow move/remove/forward individual messages in a particular mailbox folder. The forward command can be used to copy a message within a mailbox or to another mailbox. Also adds a VoicemailBoxSummarry, required to retrieve message ID's.
|
||||
The following manager actions have been added
|
||||
VoicemailBoxSummary - Generate message list for a given mailbox
|
||||
VoicemailRemove - Remove a message from a mailbox folder
|
||||
VoicemailMove - Move a message from one folder to another within a mailbox
|
||||
VoicemailForward - Copy a message from one folder in one mailbox
|
||||
to another folder in another or the same mailbox.
|
||||
|
||||
- ### app_voicemail: add CLI commands for message manipulation
|
||||
The following CLI commands have been added to app_voicemail
|
||||
voicemail show mailbox <mailbox> <context>
|
||||
Show contents of mailbox <mailbox>@<context>
|
||||
voicemail remove <mailbox> <context> <from_folder> <messageid>
|
||||
Remove message <messageid> from <from_folder> in mailbox <mailbox>@<context>
|
||||
voicemail move <mailbox> <context> <from_folder> <messageid> <to_folder>
|
||||
Move message <messageid> in mailbox <mailbox>&<context> from <from_folder> to <to_folder>
|
||||
voicemail forward <from_mailbox> <from_context> <from_folder> <messageid> <to_mailbox> <to_context> <to_folder>
|
||||
Forward message <messageid> in mailbox <mailbox>@<context> <from_folder> to
|
||||
mailbox <mailbox>@<context> <to_folder>
|
||||
|
||||
- ### sig_analog: Allow immediate fake ring to be suppressed.
|
||||
The immediatering option can now be set to no to suppress
|
||||
the fake audible ringback provided when immediate=yes on FXS channels.
|
||||
|
||||
|
||||
Upgrade Notes:
|
||||
----------------------------------------
|
||||
|
||||
|
||||
Closed Issues:
|
||||
----------------------------------------
|
||||
|
||||
- #37: [Bug]: contrib/scripts/install_prereq tries to install armhf packages on aarch64 Debian platforms
|
||||
- #71: [new-feature]: core/ari/pjsip: Add refer mechanism to refer endpoints to some resource
|
||||
- #118: [new-feature]: chan_dahdi: Allow fake ringing to be inhibited when immediate=yes
|
||||
- #170: [improvement]: app_voicemail - add CLI commands to manipulate messages
|
||||
- #179: [bug]: Queue strategy “Linear” with Asterisk 20 on Realtime
|
||||
- #181: [improvement]: app_voicemail - add manager actions to display and manipulate messages
|
||||
- #202: [improvement]: app_queue: Add support for immediately applying queue caller priority change
|
||||
- #205: [new-feature]: sig_analog: Allow flash to time out to silent hold
|
||||
- #224: [new-feature]: chan_dahdi: Allow automatic reorigination on hangup
|
||||
- #226: [improvement]: Apply contact_user to incoming calls
|
||||
- #230: [bug]: PJSIP_RESPONSE_HEADERS function documentation is misleading
|
||||
- #233: [bug]: Deadlock with MixMonitorMute AMI action
|
||||
- #240: [new-feature]: sig_analog: Add Called Subscriber Held capability
|
||||
- #253: app_gosub patch appear to have broken predial handlers that utilize macros that call gosubs
|
||||
- #255: [bug]: pjsip_endpt_register_module: Assertion "Too many modules registered"
|
||||
- #263: [bug]: download_externals doesn't always handle versions correctly
|
||||
- #265: [bug]: app_macro isn't locking around channel datastore access
|
||||
- #267: [bug]: ari: refer with display_name key in request body leads to crash
|
||||
- #274: [bug]: Syntax Error in SQL Code
|
||||
- #275: [bug]:Asterisk make now requires ASTCFLAGS='-std=gnu99 -Wdeclaration-after-statement'
|
||||
- #277: [bug]: pbx.c: Compiler error with gcc 12.2
|
||||
- #281: [bug]: app_dial: Infinite loop if called channel hangs up while receiving digits
|
||||
|
||||
Commits By Author:
|
||||
----------------------------------------
|
||||
|
||||
- ### Asterisk Development Team (1):
|
||||
- Update for 20.5.0-rc1
|
||||
|
||||
- ### Bastian Triller (1):
|
||||
- res_pjsip_session: Send Session Interval too small response
|
||||
|
||||
- ### George Joseph (12):
|
||||
- .github: Suppress cherry-pick reminder for some situations
|
||||
- .github: Minor tweak to Asterisk Releaser
|
||||
- .github: Fix cherry-pick reminder issues
|
||||
- pjproject_bundled: Increase PJSIP_MAX_MODULE to 38
|
||||
- rest-api: Run make ari-stubs
|
||||
- .github: Use generic releaser
|
||||
- download_externals: Fix a few version related issues
|
||||
- alembic: Fix quoting of the 100rel column
|
||||
- .github: Update workflow-application-token-action to v2
|
||||
- ari-stubs: Fix broken documentation anchors
|
||||
- ari-stubs: Fix more local anchor references
|
||||
- ari-stubs: Fix more local anchor references
|
||||
|
||||
- ### Holger Hans Peter Freyther (1):
|
||||
- res_prometheus: Do not generate broken metrics
|
||||
|
||||
- ### Jason D. McCormick (1):
|
||||
- install_prereq: Fix dependency install on aarch64.
|
||||
|
||||
- ### Joshua C. Colp (3):
|
||||
- app_queue: Add support for applying caller priority change immediately.
|
||||
- audiohook: Unlock channel in mute if no audiohooks present.
|
||||
- manager: Tolerate stasis messages with no channel snapshot.
|
||||
|
||||
- ### Matthew Fredrickson (2):
|
||||
- Revert "app_stack: Print proper exit location for PBXless channels."
|
||||
- app_macro: Fix locking around datastore access
|
||||
|
||||
- ### Maximilian Fridrich (2):
|
||||
- core/ari/pjsip: Add refer mechanism
|
||||
- main/refer.c: Fix double free in refer_data_destructor + potential leak
|
||||
|
||||
- ### Mike Bradeen (3):
|
||||
- app_voicemail: add CLI commands for message manipulation
|
||||
- Adds manager actions to allow move/remove/forward individual messages in a particular mailbox folder. The forward command can be used to copy a message within a mailbox or to another mailbox. Also adds a VoicemailBoxSummarry, required to retrieve message ID's.
|
||||
- app_voicemail: Fix for loop declarations
|
||||
|
||||
- ### MikeNaso (1):
|
||||
- res_pjsip.c: Set contact_user on incoming call local Contact header
|
||||
|
||||
- ### Naveen Albert (7):
|
||||
- sig_analog: Allow immediate fake ring to be suppressed.
|
||||
- sig_analog: Allow three-way flash to time out to silence.
|
||||
- chan_dahdi: Allow autoreoriginating after hangup.
|
||||
- res_pjsip_header_funcs: Make prefix argument optional.
|
||||
- sig_analog: Add Called Subscriber Held capability.
|
||||
- pbx.c: Fix gcc 12 compiler warning.
|
||||
- app_dial: Fix infinite loop when sending digits.
|
||||
|
||||
- ### Sean Bright (6):
|
||||
- res_geolocation: Ensure required 'location_info' is present.
|
||||
- chan_iax2.c: Avoid crash with IAX2 switch support.
|
||||
- func_export: Use correct function argument as variable name.
|
||||
- extensions.conf.sample: Remove reference to missing context.
|
||||
- res_pjsip: Enable TLS v1.3 if present.
|
||||
- extconfig: Allow explicit DB result set ordering to be disabled.
|
||||
|
||||
- ### phoneben (1):
|
||||
- func_cut: Add example to documentation.
|
||||
|
||||
- ### zhengsh (2):
|
||||
- res_rtp_asterisk: Move ast_rtp_rtcp_report_alloc using `rtp->themssrc_valid` into the scope of the rtp_instance lock.
|
||||
- app_audiosocket: Fixed timeout with -1 to avoid busy loop.
|
||||
|
||||
|
||||
Detail:
|
||||
----------------------------------------
|
||||
|
||||
- ### ari-stubs: Fix more local anchor references
|
||||
Author: George Joseph
|
||||
Date: 2023-09-05
|
||||
|
||||
Also allow CreateDocs job to be run manually with default branches.
|
||||
|
||||
|
||||
- ### ari-stubs: Fix more local anchor references
|
||||
Author: George Joseph
|
||||
Date: 2023-09-05
|
||||
|
||||
Also allow CreateDocs job to be run manually with default branches.
|
||||
|
||||
|
||||
- ### ari-stubs: Fix broken documentation anchors
|
||||
Author: George Joseph
|
||||
Date: 2023-09-05
|
||||
|
||||
All of the links that reference page anchors with capital letters in
|
||||
the ids (#Something) have been changed to lower case to match the
|
||||
anchors that are generated by mkdocs.
|
||||
|
||||
|
||||
- ### res_pjsip_session: Send Session Interval too small response
|
||||
Author: Bastian Triller
|
||||
Date: 2023-08-28
|
||||
|
||||
Handle session interval lower than endpoint's configured minimum timer
|
||||
when sending first answer. Timer setting is checked during this step and
|
||||
needs to handled appropriately.
|
||||
Before this change, no response was sent at all. After this change a
|
||||
response with 422 Session Interval too small is sent to UAC.
|
||||
|
||||
|
||||
- ### .github: Update workflow-application-token-action to v2
|
||||
Author: George Joseph
|
||||
Date: 2023-08-31
|
||||
|
||||
|
||||
- ### app_dial: Fix infinite loop when sending digits.
|
||||
Author: Naveen Albert
|
||||
Date: 2023-08-28
|
||||
|
||||
If the called party hangs up while digits are being
|
||||
sent, -1 is returned to indicate so, but app_dial
|
||||
was not checking the return value, resulting in
|
||||
the hangup being lost and looping forever until
|
||||
the caller manually hangs up the channel. We now
|
||||
abort if digit sending fails.
|
||||
|
||||
ASTERISK-29428 #close
|
||||
|
||||
Resolves: #281
|
||||
|
||||
- ### app_voicemail: Fix for loop declarations
|
||||
Author: Mike Bradeen
|
||||
Date: 2023-08-29
|
||||
|
||||
Resolve for loop initial declarations added in cli changes.
|
||||
|
||||
Resolves: #275
|
||||
|
||||
- ### alembic: Fix quoting of the 100rel column
|
||||
Author: George Joseph
|
||||
Date: 2023-08-28
|
||||
|
||||
Add quoting around the ps_endpoints 100rel column in the ALTER
|
||||
statements. Although alembic doesn't complain when generating
|
||||
sql statements, postgresql does (rightly so).
|
||||
|
||||
Resolves: #274
|
||||
|
||||
- ### pbx.c: Fix gcc 12 compiler warning.
|
||||
Author: Naveen Albert
|
||||
Date: 2023-08-27
|
||||
|
||||
Resolves: #277
|
||||
|
||||
- ### app_audiosocket: Fixed timeout with -1 to avoid busy loop.
|
||||
Author: zhengsh
|
||||
Date: 2023-08-24
|
||||
|
||||
Resolves: asterisk#234
|
||||
|
||||
- ### download_externals: Fix a few version related issues
|
||||
Author: George Joseph
|
||||
Date: 2023-08-18
|
||||
|
||||
* Fixed issue with the script not parsing the new tag format for
|
||||
certified releases. The format changed from certified/18.9-cert5
|
||||
to certified-18.9-cert5.
|
||||
|
||||
* Fixed issue where the asterisk version wasn't being considered
|
||||
when looking for cached versions.
|
||||
|
||||
Resolves: #263
|
||||
|
||||
- ### main/refer.c: Fix double free in refer_data_destructor + potential leak
|
||||
Author: Maximilian Fridrich
|
||||
Date: 2023-08-21
|
||||
|
||||
Resolves: #267
|
||||
|
||||
- ### sig_analog: Add Called Subscriber Held capability.
|
||||
Author: Naveen Albert
|
||||
Date: 2023-08-09
|
||||
|
||||
This adds support for Called Subscriber Held for FXS
|
||||
lines, which allows users to go on hook when receiving
|
||||
a call and resume the call later from another phone on
|
||||
the same line, without disconnecting the call. This is
|
||||
a convenience mechanism that most real PSTN telephone
|
||||
switches support.
|
||||
|
||||
ASTERISK-30372 #close
|
||||
|
||||
Resolves: #240
|
||||
|
||||
UserNote: Called Subscriber Held is now supported for analog
|
||||
FXS channels, using the calledsubscriberheld option. This allows
|
||||
a station user to go on hook when receiving an incoming call
|
||||
and resume from another phone on the same line by going on hook,
|
||||
without disconnecting the call.
|
||||
|
||||
|
||||
- ### app_macro: Fix locking around datastore access
|
||||
Author: Matthew Fredrickson
|
||||
Date: 2023-08-21
|
||||
|
||||
app_macro sometimes would crash due to datastore list corruption on the
|
||||
channel because of lack of locking around find and create process for
|
||||
the macro datastore. This patch locks the channel lock prior to protect
|
||||
against this problem.
|
||||
|
||||
Resolves: #265
|
||||
|
||||
- ### Revert "app_stack: Print proper exit location for PBXless channels."
|
||||
Author: Matthew Fredrickson
|
||||
Date: 2023-08-10
|
||||
|
||||
This reverts commit 617dad4cba1513dddce87b8e95a61415fb587cf1.
|
||||
|
||||
apps/app_stack.c: Revert buggy gosub patch
|
||||
|
||||
This seems to break the case when a predial macro calls a gosub.
|
||||
When the gosub calls return, the Return function outputs:
|
||||
|
||||
app_stack.c:423 return_exec: Return without Gosub: stack is empty
|
||||
|
||||
This returns -1 to the calling macro, which returns to app_dial
|
||||
and causes the call to hangup instead of proceeding with the macro
|
||||
that invoked the gosub.
|
||||
|
||||
Resolves: #253
|
||||
|
||||
- ### .github: Use generic releaser
|
||||
Author: George Joseph
|
||||
Date: 2023-08-15
|
||||
|
||||
|
||||
- ### install_prereq: Fix dependency install on aarch64.
|
||||
Author: Jason D. McCormick
|
||||
Date: 2023-04-28
|
||||
|
||||
Fixes dependency solutions in install_prereq for Debian aarch64
|
||||
platforms. install_prereq was attempting to forcibly install 32-bit
|
||||
armhf packages due to the aptitude search for dependencies.
|
||||
|
||||
Resolves: #37
|
||||
|
||||
- ### res_pjsip.c: Set contact_user on incoming call local Contact header
|
||||
Author: MikeNaso
|
||||
Date: 2023-08-08
|
||||
|
||||
If the contact_user is configured on the endpoint it will now be set on the local Contact header URI for incoming calls. The contact_user has already been set on the local Contact header URI for outgoing calls.
|
||||
|
||||
Resolves: #226
|
||||
|
||||
- ### extconfig: Allow explicit DB result set ordering to be disabled.
|
||||
Author: Sean Bright
|
||||
Date: 2023-07-12
|
||||
|
||||
Added a new boolean configuration flag -
|
||||
`order_multi_row_results_by_initial_column` - to both res_pgsql.conf
|
||||
and res_config_odbc.conf that allows the administrator to disable the
|
||||
explicit `ORDER BY` that was previously being added to all generated
|
||||
SQL statements that returned multiple rows.
|
||||
|
||||
Fixes: #179
|
||||
|
||||
- ### rest-api: Run make ari-stubs
|
||||
Author: George Joseph
|
||||
Date: 2023-08-09
|
||||
|
||||
An earlier cherry-pick that involved rest-api somehow didn't include
|
||||
a comment change in res/ari/resource_endpoints.h. This commit
|
||||
corrects that. No changes other than the comment.
|
||||
|
||||
|
||||
- ### res_pjsip_header_funcs: Make prefix argument optional.
|
||||
Author: Naveen Albert
|
||||
Date: 2023-08-09
|
||||
|
||||
The documentation for PJSIP_HEADERS claims that
|
||||
prefix is optional, but in the code it is actually not.
|
||||
However, there is no inherent reason for this, as users
|
||||
may want to retrieve all header names, not just those
|
||||
beginning with a certain prefix.
|
||||
|
||||
This makes the prefix optional for this function,
|
||||
simply fetching all header names if not specified.
|
||||
As a result, the documentation is now correct.
|
||||
|
||||
Resolves: #230
|
||||
|
||||
UserNote: The prefix argument to PJSIP_HEADERS is now
|
||||
optional. If not specified, all header names will be
|
||||
returned.
|
||||
|
||||
|
||||
- ### pjproject_bundled: Increase PJSIP_MAX_MODULE to 38
|
||||
Author: George Joseph
|
||||
Date: 2023-08-11
|
||||
|
||||
The default is 32 with 8 being used by pjproject itself. Recent
|
||||
commits have put us over the limit resulting in assertions in
|
||||
pjproject. Since this value is used in invites, dialogs,
|
||||
transports and subscriptions as well as the global pjproject
|
||||
endpoint, we don't want to increase it too much.
|
||||
|
||||
Resolves: #255
|
||||
|
||||
- ### manager: Tolerate stasis messages with no channel snapshot.
|
||||
Author: Joshua C. Colp
|
||||
Date: 2023-08-09
|
||||
|
||||
In some cases I have yet to determine some stasis messages may
|
||||
be created without a channel snapshot. This change adds some
|
||||
tolerance to this scenario, preventing a crash from occurring.
|
||||
|
||||
|
||||
- ### core/ari/pjsip: Add refer mechanism
|
||||
Author: Maximilian Fridrich
|
||||
Date: 2023-05-10
|
||||
|
||||
This change adds support for refers that are not session based. It
|
||||
includes a refer implementation for the PJSIP technology which results
|
||||
in out-of-dialog REFERs being sent to a PJSIP endpoint. These can be
|
||||
triggered using the new ARI endpoint `/endpoints/refer`.
|
||||
|
||||
Resolves: #71
|
||||
|
||||
UserNote: There is a new ARI endpoint `/endpoints/refer` for referring
|
||||
an endpoint to some URI or endpoint.
|
||||
|
||||
|
||||
- ### chan_dahdi: Allow autoreoriginating after hangup.
|
||||
Author: Naveen Albert
|
||||
Date: 2023-08-04
|
||||
|
||||
Currently, if an FXS channel is still off hook when
|
||||
all calls on the line have hung up, the user is provided
|
||||
reorder tone until going back on hook again.
|
||||
|
||||
In addition to not reflecting what most commercial switches
|
||||
actually do, it's very common for switches to automatically
|
||||
reoriginate for the user so that dial tone is provided without
|
||||
the user having to depress and release the hookswitch manually.
|
||||
This can increase convenience for users.
|
||||
|
||||
This behavior is now supported for kewlstart FXS channels.
|
||||
It's supported only for kewlstart (FXOKS) mainly because the
|
||||
behavior doesn't make any sense for ground start channels,
|
||||
and loop start signalling doesn't provide the necessary DAHDI
|
||||
event that makes this easy to implement. Likely almost everyone
|
||||
is using FXOKS over FXOLS anyways since FXOLS is pretty useless
|
||||
these days.
|
||||
|
||||
ASTERISK-30357 #close
|
||||
|
||||
Resolves: #224
|
||||
|
||||
UserNote: The autoreoriginate setting now allows for kewlstart FXS
|
||||
channels to automatically reoriginate and provide dial tone to the
|
||||
user again after all calls on the line have cleared. This saves users
|
||||
from having to manually hang up and pick up the receiver again before
|
||||
making another call.
|
||||
|
||||
|
||||
- ### audiohook: Unlock channel in mute if no audiohooks present.
|
||||
Author: Joshua C. Colp
|
||||
Date: 2023-08-09
|
||||
|
||||
In the case where mute was called on a channel that had no
|
||||
audiohooks the code was not unlocking the channel, resulting
|
||||
in a deadlock.
|
||||
|
||||
Resolves: #233
|
||||
|
||||
- ### sig_analog: Allow three-way flash to time out to silence.
|
||||
Author: Naveen Albert
|
||||
Date: 2023-07-10
|
||||
|
||||
sig_analog allows users to flash and use the three-way dial
|
||||
tone as a primitive hold function, simply by never timing
|
||||
it out.
|
||||
|
||||
Some systems allow this dial tone to time out to silence,
|
||||
so the user is not annoyed by a persistent dial tone.
|
||||
This option allows the dial tone to time out normally to
|
||||
silence.
|
||||
|
||||
ASTERISK-30004 #close
|
||||
Resolves: #205
|
||||
|
||||
UserNote: The threewaysilenthold option now allows the three-way
|
||||
dial tone to time out to silence, rather than continuing forever.
|
||||
|
||||
|
||||
- ### res_prometheus: Do not generate broken metrics
|
||||
Author: Holger Hans Peter Freyther
|
||||
Date: 2023-04-07
|
||||
|
||||
In 8d6fdf9c3adede201f0ef026dab201b3a37b26b6 invisible bridges were
|
||||
skipped but that lead to producing metrics with no name and no help.
|
||||
|
||||
Keep track of the number of metrics configured and then only emit these.
|
||||
Add a basic testcase that verifies that there is no '(NULL)' in the
|
||||
output.
|
||||
|
||||
ASTERISK-30474
|
||||
|
||||
|
||||
- ### res_pjsip: Enable TLS v1.3 if present.
|
||||
Author: Sean Bright
|
||||
Date: 2023-08-02
|
||||
|
||||
Fixes #221
|
||||
|
||||
UserNote: res_pjsip now allows TLS v1.3 to be enabled if supported by
|
||||
the underlying PJSIP library. The bundled version of PJSIP supports
|
||||
TLS v1.3.
|
||||
|
||||
|
||||
- ### func_cut: Add example to documentation.
|
||||
Author: phoneben
|
||||
Date: 2023-07-19
|
||||
|
||||
This adds an example to the XML documentation clarifying usage
|
||||
of the CUT function to address a common misusage.
|
||||
|
||||
|
||||
- ### extensions.conf.sample: Remove reference to missing context.
|
||||
Author: Sean Bright
|
||||
Date: 2023-07-16
|
||||
|
||||
c3ff4648 removed the [iaxtel700] context but neglected to remove
|
||||
references to it.
|
||||
|
||||
This commit addresses that and also removes iaxtel and freeworlddialup
|
||||
references from other config files.
|
||||
|
||||
|
||||
- ### func_export: Use correct function argument as variable name.
|
||||
Author: Sean Bright
|
||||
Date: 2023-07-12
|
||||
|
||||
Fixes #208
|
||||
|
||||
|
||||
- ### app_queue: Add support for applying caller priority change immediately.
|
||||
Author: Joshua C. Colp
|
||||
Date: 2023-07-07
|
||||
|
||||
The app_queue module provides both an AMI action and a CLI command
|
||||
to change the priority of a caller in a queue. Up to now this change
|
||||
of priority has only been reflected to new callers into the queue.
|
||||
|
||||
This change adds an "immediate" option to both the AMI action and
|
||||
CLI command which immediately applies the priority change respective
|
||||
to the other callers already in the queue. This can allow, for example,
|
||||
a caller to be placed at the head of the queue immediately if their
|
||||
priority is sufficient.
|
||||
|
||||
Resolves: #202
|
||||
|
||||
UserNote: The 'queue priority caller' CLI command and
|
||||
'QueueChangePriorityCaller' AMI action now have an 'immediate'
|
||||
argument which allows the caller priority change to be reflected
|
||||
immediately, causing the position of a caller to move within the
|
||||
queue depending on the priorities of the other callers.
|
||||
|
||||
|
||||
- ### .github: Fix cherry-pick reminder issues
|
||||
Author: George Joseph
|
||||
Date: 2023-07-17
|
||||
|
||||
|
||||
- ### chan_iax2.c: Avoid crash with IAX2 switch support.
|
||||
Author: Sean Bright
|
||||
Date: 2023-07-07
|
||||
|
||||
A change made in 82cebaa0 did not properly handle the case when a
|
||||
channel was not provided, triggering a crash. ast_check_hangup(...)
|
||||
does not protect against NULL pointers.
|
||||
|
||||
Fixes #180
|
||||
|
||||
|
||||
- ### res_geolocation: Ensure required 'location_info' is present.
|
||||
Author: Sean Bright
|
||||
Date: 2023-07-07
|
||||
|
||||
Fixes #189
|
||||
|
||||
|
||||
- ### Adds manager actions to allow move/remove/forward individual messages in a particular mailbox folder. The forward command can be used to copy a message within a mailbox or to another mailbox. Also adds a VoicemailBoxSummarry, required to retrieve message ID's.
|
||||
Author: Mike Bradeen
|
||||
Date: 2023-06-29
|
||||
|
||||
Resolves: #181
|
||||
|
||||
UserNote: The following manager actions have been added
|
||||
|
||||
VoicemailBoxSummary - Generate message list for a given mailbox
|
||||
|
||||
VoicemailRemove - Remove a message from a mailbox folder
|
||||
|
||||
VoicemailMove - Move a message from one folder to another within a mailbox
|
||||
|
||||
VoicemailForward - Copy a message from one folder in one mailbox
|
||||
to another folder in another or the same mailbox.
|
||||
|
||||
|
||||
- ### app_voicemail: add CLI commands for message manipulation
|
||||
Author: Mike Bradeen
|
||||
Date: 2023-06-20
|
||||
|
||||
Adds CLI commands to allow move/remove/forward individual messages
|
||||
from a particular mailbox folder. The forward command can be used
|
||||
to copy a message within a mailbox or to another mailbox. Also adds
|
||||
a show mailbox, required to retrieve message ID's.
|
||||
|
||||
Resolves: #170
|
||||
|
||||
UserNote: The following CLI commands have been added to app_voicemail
|
||||
|
||||
voicemail show mailbox <mailbox> <context>
|
||||
Show contents of mailbox <mailbox>@<context>
|
||||
|
||||
voicemail remove <mailbox> <context> <from_folder> <messageid>
|
||||
Remove message <messageid> from <from_folder> in mailbox <mailbox>@<context>
|
||||
|
||||
voicemail move <mailbox> <context> <from_folder> <messageid> <to_folder>
|
||||
Move message <messageid> in mailbox <mailbox>&<context> from <from_folder> to <to_folder>
|
||||
|
||||
voicemail forward <from_mailbox> <from_context> <from_folder> <messageid> <to_mailbox> <to_context> <to_folder>
|
||||
Forward message <messageid> in mailbox <mailbox>@<context> <from_folder> to
|
||||
mailbox <mailbox>@<context> <to_folder>
|
||||
|
||||
|
||||
- ### res_rtp_asterisk: Move ast_rtp_rtcp_report_alloc using `rtp->themssrc_valid` into the scope of the rtp_instance lock.
|
||||
Author: zhengsh
|
||||
Date: 2023-06-30
|
||||
|
||||
From the gdb information, it was found that when calling __ast_free, the size of the
|
||||
allocated space pointed to by the pointer matches the size created when rtp->themssrc_valid
|
||||
is equal to 0. However, in reality, when reading the value of rtp->themssrc_valid in gdb,
|
||||
it is found to be 1.
|
||||
|
||||
Within ast_rtcp_write(), the call to ast_rtp_rtcp_report_alloc() uses rtp->themssrc_valid,
|
||||
which is outside the protection of the rtp_instance lock. However,
|
||||
ast_rtcp_generate_report(), which is called by ast_rtcp_generate_compound_prefix(), uses
|
||||
rtp->themssrc_valid within the protection of the rtp_instance lock.
|
||||
|
||||
This can lead to the possibility that the value of rtp->themssrc_valid used in the call to
|
||||
ast_rtp_rtcp_report_alloc() may be different from the value of rtp->themssrc_valid used
|
||||
within ast_rtcp_generate_report().
|
||||
|
||||
Resolves: asterisk#63
|
||||
|
||||
- ### .github: Minor tweak to Asterisk Releaser
|
||||
Author: George Joseph
|
||||
Date: 2023-07-12
|
||||
|
||||
|
||||
- ### .github: Suppress cherry-pick reminder for some situations
|
||||
Author: George Joseph
|
||||
Date: 2023-07-11
|
||||
|
||||
In PROpenedOrUpdated, the cherry-pick reminder will now be
|
||||
suppressed if there are already valid 'cherry-pick-to' comments
|
||||
in the PR or the PR contained a 'cherry-pick-to: none' comment.
|
||||
|
||||
|
||||
- ### sig_analog: Allow immediate fake ring to be suppressed.
|
||||
Author: Naveen Albert
|
||||
Date: 2023-06-08
|
||||
|
||||
When immediate=yes on an FXS channel, sig_analog will
|
||||
start fake audible ringback that continues until the
|
||||
channel is answered. Even if it answers immediately,
|
||||
the ringback is still audible for a brief moment.
|
||||
This can be disruptive and unwanted behavior.
|
||||
|
||||
This adds an option to disable this behavior, though
|
||||
the default behavior remains unchanged.
|
||||
|
||||
ASTERISK-30003 #close
|
||||
Resolves: #118
|
||||
|
||||
UserNote: The immediatering option can now be set to no to suppress
|
||||
the fake audible ringback provided when immediate=yes on FXS channels.
|
||||
|
||||
|
||||
@@ -1,95 +0,0 @@
|
||||
|
||||
Change Log for Release asterisk-20.5.1
|
||||
========================================
|
||||
|
||||
Links:
|
||||
----------------------------------------
|
||||
|
||||
- [Full ChangeLog](https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-20.5.1.md)
|
||||
- [GitHub Diff](https://github.com/asterisk/asterisk/compare/20.5.0...20.5.1)
|
||||
- [Tarball](https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20.5.1.tar.gz)
|
||||
- [Downloads](https://downloads.asterisk.org/pub/telephony/asterisk)
|
||||
|
||||
Summary:
|
||||
----------------------------------------
|
||||
|
||||
- res_pjsip_header_funcs: Duplicate new header value, don't copy.
|
||||
- res_pjsip: disable raw bad packet logging
|
||||
- res_rtp_asterisk.c: Check DTLS packets against ICE candidate list
|
||||
- manager.c: Prevent path traversal with GetConfig.
|
||||
|
||||
User Notes:
|
||||
----------------------------------------
|
||||
|
||||
|
||||
Upgrade Notes:
|
||||
----------------------------------------
|
||||
|
||||
|
||||
Closed Issues:
|
||||
----------------------------------------
|
||||
|
||||
None
|
||||
|
||||
Commits By Author:
|
||||
----------------------------------------
|
||||
|
||||
- ### Ben Ford (1):
|
||||
- manager.c: Prevent path traversal with GetConfig.
|
||||
|
||||
- ### George Joseph (1):
|
||||
- res_rtp_asterisk.c: Check DTLS packets against ICE candidate list
|
||||
|
||||
- ### Gitea (1):
|
||||
- res_pjsip_header_funcs: Duplicate new header value, don't copy.
|
||||
|
||||
- ### Mike Bradeen (1):
|
||||
- res_pjsip: disable raw bad packet logging
|
||||
|
||||
|
||||
Detail:
|
||||
----------------------------------------
|
||||
|
||||
- ### res_pjsip_header_funcs: Duplicate new header value, don't copy.
|
||||
Author: Gitea
|
||||
Date: 2023-07-10
|
||||
|
||||
When updating an existing header the 'update' code incorrectly
|
||||
just copied the new value into the existing buffer. If the
|
||||
new value exceeded the available buffer size memory outside
|
||||
of the buffer would be written into, potentially causing
|
||||
a crash.
|
||||
|
||||
This change makes it so that the 'update' now duplicates
|
||||
the new header value instead of copying it into the existing
|
||||
buffer.
|
||||
|
||||
- ### res_pjsip: disable raw bad packet logging
|
||||
Author: Mike Bradeen
|
||||
Date: 2023-07-25
|
||||
|
||||
Add patch to split the log level for invalid packets received on the
|
||||
signaling port. The warning regarding the packet will move to level 2
|
||||
so that it can still be displayed, while the raw packet will be at level
|
||||
4.
|
||||
|
||||
- ### res_rtp_asterisk.c: Check DTLS packets against ICE candidate list
|
||||
Author: George Joseph
|
||||
Date: 2023-11-09
|
||||
|
||||
When ICE is in use, we can prevent a possible DOS attack by allowing
|
||||
DTLS protocol messages (client hello, etc) only from sources that
|
||||
are in the active remote candidates list.
|
||||
|
||||
Resolves: GHSA-hxj9-xwr8-w8pq
|
||||
|
||||
- ### manager.c: Prevent path traversal with GetConfig.
|
||||
Author: Ben Ford
|
||||
Date: 2023-11-13
|
||||
|
||||
When using AMI GetConfig, it was possible to access files outside of the
|
||||
Asterisk configuration directory by using filenames with ".." and "./"
|
||||
even while live_dangerously was not enabled. This change resolves the
|
||||
full path and ensures we are still in the configuration directory before
|
||||
attempting to access the file.
|
||||
|
||||
@@ -1,68 +0,0 @@
|
||||
|
||||
Change Log for Release asterisk-20.5.2
|
||||
========================================
|
||||
|
||||
Links:
|
||||
----------------------------------------
|
||||
|
||||
- [Full ChangeLog](https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-20.5.2.md)
|
||||
- [GitHub Diff](https://github.com/asterisk/asterisk/compare/20.5.1...20.5.2)
|
||||
- [Tarball](https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20.5.2.tar.gz)
|
||||
- [Downloads](https://downloads.asterisk.org/pub/telephony/asterisk)
|
||||
|
||||
Summary:
|
||||
----------------------------------------
|
||||
|
||||
- res_rtp_asterisk: Fix regression issues with DTLS client check
|
||||
|
||||
User Notes:
|
||||
----------------------------------------
|
||||
|
||||
|
||||
Upgrade Notes:
|
||||
----------------------------------------
|
||||
|
||||
|
||||
Closed Issues:
|
||||
----------------------------------------
|
||||
|
||||
- #500: [bug regression]: res_rtp_asterisk doesn't build if pjproject isn't used
|
||||
- #503: [bug]: The res_rtp_asterisk DTLS check against ICE candidates fails when it shouldn't
|
||||
- #505: [bug]: res_pjproject: ast_sockaddr_cmp() always fails on sockaddrs created by ast_sockaddr_from_pj_sockaddr()
|
||||
|
||||
Commits By Author:
|
||||
----------------------------------------
|
||||
|
||||
- ### George Joseph (1):
|
||||
- res_rtp_asterisk: Fix regression issues with DTLS client check
|
||||
|
||||
|
||||
Detail:
|
||||
----------------------------------------
|
||||
|
||||
- ### res_rtp_asterisk: Fix regression issues with DTLS client check
|
||||
Author: George Joseph
|
||||
Date: 2023-12-15
|
||||
|
||||
* Since ICE candidates are used for the check and pjproject is
|
||||
required to use ICE, res_rtp_asterisk was failing to compile
|
||||
when pjproject wasn't available. The check is now wrapped
|
||||
with an #ifdef HAVE_PJPROJECT.
|
||||
|
||||
* The rtp->ice_active_remote_candidates container was being
|
||||
used to check the address on incoming packets but that
|
||||
container doesn't contain peer reflexive candidates discovered
|
||||
during negotiation. This was causing the check to fail
|
||||
where it shouldn't. We now check against pjproject's
|
||||
real_ice->rcand array which will contain those candidates.
|
||||
|
||||
* Also fixed a bug in ast_sockaddr_from_pj_sockaddr() where
|
||||
we weren't zeroing out sin->sin_zero before returning. This
|
||||
was causing ast_sockaddr_cmp() to always return false when
|
||||
one of the inputs was converted from a pj_sockaddr, even
|
||||
if both inputs had the same address and port.
|
||||
|
||||
Resolves: #500
|
||||
Resolves: #503
|
||||
Resolves: #505
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,736 +0,0 @@
|
||||
|
||||
Change Log for Release asterisk-20.7.0
|
||||
========================================
|
||||
|
||||
Links:
|
||||
----------------------------------------
|
||||
|
||||
- [Full ChangeLog](https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-20.7.0.md)
|
||||
- [GitHub Diff](https://github.com/asterisk/asterisk/compare/20.6.0...20.7.0)
|
||||
- [Tarball](https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20.7.0.tar.gz)
|
||||
- [Downloads](https://downloads.asterisk.org/pub/telephony/asterisk)
|
||||
|
||||
Summary:
|
||||
----------------------------------------
|
||||
|
||||
- res_pjsip_stir_shaken.c: Add checks for missing parameters
|
||||
- app_dial: Add dial time for progress/ringing.
|
||||
- app_voicemail: Properly reinitialize config after unit tests.
|
||||
- app_queue.c : fix "queue add member" usage string
|
||||
- app_voicemail: Allow preventing mark messages as urgent.
|
||||
- res_pjsip: Use consistent type for boolean columns.
|
||||
- attestation_config.c: Use ast_free instead of ast_std_free
|
||||
- Makefile: Add stir_shaken/cache to directories created on install
|
||||
- Stir/Shaken Refactor
|
||||
- alembic: Synchronize alembic heads between supported branches.
|
||||
- translate.c: implement new direct comp table mode
|
||||
- README.md: Removed outdated link
|
||||
- strings.h: Ensure ast_str_buffer(…) returns a 0 terminated string.
|
||||
- res_rtp_asterisk.c: Correct coefficient in MOS calculation.
|
||||
- dsp.c: Fix and improve potentially inaccurate log message.
|
||||
- pjsip show channelstats: Prevent possible segfault when faxing
|
||||
- Reduce startup/shutdown verbose logging
|
||||
- configure: Rerun bootstrap on modern platform.
|
||||
- Upgrade bundled pjproject to 2.14.
|
||||
- app_speech_utils.c: Allow partial speech results.
|
||||
- utils: Make behavior of ast_strsep* match strsep.
|
||||
- app_chanspy: Add 'D' option for dual-channel audio
|
||||
- app_if: Fix next priority calculation.
|
||||
- res_pjsip_t38.c: Permit IPv6 SDP connection addresses.
|
||||
- BuildSystem: Bump autotools versions on OpenBSD.
|
||||
- main/utils: Simplify the FreeBSD ast_get_tid() handling
|
||||
- res_pjsip_session.c: Correctly format SDP connection addresses.
|
||||
- rtp_engine.c: Correct sample rate typo for L16/44100.
|
||||
- manager.c: Fix erroneous reloads in UpdateConfig.
|
||||
- res_calendar_icalendar: Print iCalendar error on parsing failure.
|
||||
- app_confbridge: Don't emit warnings on valid configurations.
|
||||
- app_voicemail: add NoOp alembic script to maintain sync
|
||||
- chan_dahdi: Allow MWI to be manually toggled on channels.
|
||||
- chan_rtp.c: MulticastRTP missing refcount without codec option
|
||||
- chan_rtp.c: Change MulticastRTP nameing to avoid memory leak
|
||||
- func_frame_trace: Add CLI command to dump frame queue.
|
||||
|
||||
User Notes:
|
||||
----------------------------------------
|
||||
|
||||
- ### app_dial: Add dial time for progress/ringing.
|
||||
The timeout argument to Dial now allows
|
||||
specifying the maximum amount of time to dial if
|
||||
early media is not received.
|
||||
|
||||
- ### app_voicemail: Allow preventing mark messages as urgent.
|
||||
The leaveurgent mailbox option can now be used to
|
||||
control whether callers may leave messages marked as 'Urgent'.
|
||||
|
||||
- ### Stir/Shaken Refactor
|
||||
Asterisk's stir-shaken feature has been refactored to
|
||||
correct interoperability, RFC compliance, and performance issues.
|
||||
See https://docs.asterisk.org/Deployment/STIR-SHAKEN for more
|
||||
information.
|
||||
|
||||
- ### Upgrade bundled pjproject to 2.14.
|
||||
Bundled pjproject has been upgraded to 2.14. For more
|
||||
information on what all is included in this change, check out the
|
||||
pjproject Github page: https://github.com/pjsip/pjproject/releases
|
||||
|
||||
- ### app_speech_utils.c: Allow partial speech results.
|
||||
The SpeechBackground dialplan application now supports a 'p'
|
||||
option that will return partial results from speech engines that
|
||||
provide them when a timeout occurs.
|
||||
|
||||
- ### app_chanspy: Add 'D' option for dual-channel audio
|
||||
The ChanSpy application now accepts the 'D' option which
|
||||
will interleave the spied audio within the outgoing frames. The
|
||||
purpose of this is to allow the audio to be read as a Dual channel
|
||||
stream with separate incoming and outgoing audio. Setting both the
|
||||
'o' option and the 'D' option and results in the 'D' option being
|
||||
ignored.
|
||||
|
||||
- ### chan_dahdi: Allow MWI to be manually toggled on channels.
|
||||
The 'dahdi set mwi' now allows MWI on channels
|
||||
to be manually toggled if needed for troubleshooting.
|
||||
Resolves: #440
|
||||
|
||||
|
||||
Upgrade Notes:
|
||||
----------------------------------------
|
||||
|
||||
- ### Stir/Shaken Refactor
|
||||
The stir-shaken refactor is a breaking change but since
|
||||
it's not working now we don't think it matters. The
|
||||
stir_shaken.conf file has changed significantly which means that
|
||||
existing ones WILL need to be changed. The stir_shaken.conf.sample
|
||||
file in configs/samples/ has quite a bit more information. This is
|
||||
also an ABI breaking change since some of the existing objects
|
||||
needed to be changed or removed, and new ones added. Additionally,
|
||||
if res_stir_shaken is enabled in menuselect, you'll need to either
|
||||
have the development package for libjwt v1.15.3 installed or use
|
||||
the --with-libjwt-bundled option with ./configure.
|
||||
|
||||
|
||||
Closed Issues:
|
||||
----------------------------------------
|
||||
|
||||
- #46: [bug]: Stir/Shaken: Wrong CID used when looking up certificates
|
||||
- #351: [improvement]: Refactor res_stir_shaken to use libjwt
|
||||
- #406: [improvement]: pjsip: Upgrade bundled version to pjproject 2.14
|
||||
- #440: [new-feature]: chan_dahdi: Allow manually toggling MWI on channels
|
||||
- #492: [improvement]: res_calendar_icalendar: Print icalendar error if available on parsing failure
|
||||
- #527: [bug]: app_voicemail_odbc no longer working after removal of macrocontext.
|
||||
- #529: [bug]: MulticastRTP without selected codec leeds to "FRACK!, Failed assertion bad magic number 0x0 for object" after ~30 calls
|
||||
- #533: [improvement]: channel.c, func_frame_trace.c: Improve debuggability of channel frame queue
|
||||
- #551: [bug]: manager: UpdateConfig triggers reload with "Reload: no"
|
||||
- #560: [bug]: EndIf() causes next priority to be skipped
|
||||
- #565: [bug]: Application Read() returns immediately
|
||||
- #569: [improvement]: Add option to interleave input and output frames on spied channel
|
||||
- #572: [improvement]: Copy partial speech results when Asterisk is ready to move on but the speech backend is not
|
||||
- #582: [improvement]: Reduce unneeded logging during startup and shutdown
|
||||
- #586: [bug]: The "restrict" keyword used in chan_iax2.c isn't supported in older gcc versions
|
||||
- #588: [new-feature]: app_dial: Allow Dial to be aborted if early media is not received
|
||||
- #592: [bug]: In certain circumstances, "pjsip show channelstats" can segfault when a fax session is active
|
||||
- #595: [improvement]: dsp.c: Fix and improve confusing warning message.
|
||||
- #597: [bug]: wrong MOS calculation
|
||||
- #601: [new-feature]: translate.c: implement new direct comp table mode (PR #585)
|
||||
- #619: [new-feature]: app_voicemail: Allow preventing callers from marking messages as urgent
|
||||
- #629: [bug]: app_voicemail: Multiple executions of unit tests cause segfault
|
||||
- #634: [bug]: make install doesn't create the stir_shaken cache directory
|
||||
- #636: [bug]: Possible SEGV in res_stir_shaken due to wrong free function
|
||||
- #645: [bug]: Occasional SEGV in res_pjsip_stir_shaken.c
|
||||
|
||||
Commits By Author:
|
||||
----------------------------------------
|
||||
|
||||
- ### Ben Ford (1):
|
||||
- Upgrade bundled pjproject to 2.14.
|
||||
|
||||
- ### Brad Smith (2):
|
||||
- main/utils: Simplify the FreeBSD ast_get_tid() handling
|
||||
- BuildSystem: Bump autotools versions on OpenBSD.
|
||||
|
||||
- ### George Joseph (6):
|
||||
- Reduce startup/shutdown verbose logging
|
||||
- pjsip show channelstats: Prevent possible segfault when faxing
|
||||
- Stir/Shaken Refactor
|
||||
- Makefile: Add stir_shaken/cache to directories created on install
|
||||
- attestation_config.c: Use ast_free instead of ast_std_free
|
||||
- res_pjsip_stir_shaken.c: Add checks for missing parameters
|
||||
|
||||
- ### Joshua C. Colp (1):
|
||||
- utils: Make behavior of ast_strsep* match strsep.
|
||||
|
||||
- ### Mike Bradeen (2):
|
||||
- app_voicemail: add NoOp alembic script to maintain sync
|
||||
- app_chanspy: Add 'D' option for dual-channel audio
|
||||
|
||||
- ### Naveen Albert (10):
|
||||
- func_frame_trace: Add CLI command to dump frame queue.
|
||||
- chan_dahdi: Allow MWI to be manually toggled on channels.
|
||||
- res_calendar_icalendar: Print iCalendar error on parsing failure.
|
||||
- manager.c: Fix erroneous reloads in UpdateConfig.
|
||||
- app_if: Fix next priority calculation.
|
||||
- configure: Rerun bootstrap on modern platform.
|
||||
- dsp.c: Fix and improve potentially inaccurate log message.
|
||||
- app_voicemail: Allow preventing mark messages as urgent.
|
||||
- app_voicemail: Properly reinitialize config after unit tests.
|
||||
- app_dial: Add dial time for progress/ringing.
|
||||
|
||||
- ### PeterHolik (2):
|
||||
- chan_rtp.c: Change MulticastRTP nameing to avoid memory leak
|
||||
- chan_rtp.c: MulticastRTP missing refcount without codec option
|
||||
|
||||
- ### Sean Bright (7):
|
||||
- app_confbridge: Don't emit warnings on valid configurations.
|
||||
- rtp_engine.c: Correct sample rate typo for L16/44100.
|
||||
- res_pjsip_session.c: Correctly format SDP connection addresses.
|
||||
- res_pjsip_t38.c: Permit IPv6 SDP connection addresses.
|
||||
- strings.h: Ensure ast_str_buffer(…) returns a 0 terminated string.
|
||||
- alembic: Synchronize alembic heads between supported branches.
|
||||
- res_pjsip: Use consistent type for boolean columns.
|
||||
|
||||
- ### Sebastian Jennen (1):
|
||||
- translate.c: implement new direct comp table mode
|
||||
|
||||
- ### Shaaah (1):
|
||||
- app_queue.c : fix "queue add member" usage string
|
||||
|
||||
- ### Shyju Kanaprath (1):
|
||||
- README.md: Removed outdated link
|
||||
|
||||
- ### cmaj (1):
|
||||
- app_speech_utils.c: Allow partial speech results.
|
||||
|
||||
- ### romryz (1):
|
||||
- res_rtp_asterisk.c: Correct coefficient in MOS calculation.
|
||||
|
||||
|
||||
Detail:
|
||||
----------------------------------------
|
||||
|
||||
- ### res_pjsip_stir_shaken.c: Add checks for missing parameters
|
||||
Author: George Joseph
|
||||
Date: 2024-03-11
|
||||
|
||||
* Added checks for missing session, session->channel and rdata
|
||||
in stir_shaken_incoming_request.
|
||||
|
||||
* Added checks for missing session, session->channel and tdata
|
||||
in stir_shaken_outgoing_request.
|
||||
|
||||
Resolves: #645
|
||||
|
||||
- ### app_dial: Add dial time for progress/ringing.
|
||||
Author: Naveen Albert
|
||||
Date: 2024-02-08
|
||||
|
||||
Add a timeout option to control the amount of time
|
||||
to wait if no early media is received before giving
|
||||
up. This allows aborting early if the destination
|
||||
is not being responsive.
|
||||
|
||||
Resolves: #588
|
||||
|
||||
UserNote: The timeout argument to Dial now allows
|
||||
specifying the maximum amount of time to dial if
|
||||
early media is not received.
|
||||
|
||||
|
||||
- ### app_voicemail: Properly reinitialize config after unit tests.
|
||||
Author: Naveen Albert
|
||||
Date: 2024-02-29
|
||||
|
||||
Most app_voicemail unit tests were not properly cleaning up
|
||||
after themselves after running. This led to test mailboxes
|
||||
lingering around in the system. It also meant that if any
|
||||
unit tests in app_voicemail that create mailboxes were executed
|
||||
and the module was not unloaded/loaded again prior to running
|
||||
the test_voicemail_vm_info unit test, Asterisk would segfault
|
||||
due to an attempt to copy a NULL string.
|
||||
|
||||
The load_config test did actually have logic to reinitialize
|
||||
the config after the test. However, this did not work in practice
|
||||
since load_config() would not reload the config since voicemail.conf
|
||||
had not changed during the test; thus, additional logic has been
|
||||
added to ensure that voicemail.conf is truly reloaded, after any
|
||||
unit tests which modify the users list.
|
||||
|
||||
This prevents the SEGV due to invalid mailboxes lingering around,
|
||||
and also ensures that the system state is restored to what it was
|
||||
prior to the tests running.
|
||||
|
||||
Resolves: #629
|
||||
|
||||
- ### app_queue.c : fix "queue add member" usage string
|
||||
Author: Shaaah
|
||||
Date: 2024-01-23
|
||||
|
||||
Fixing bracket placement in the "queue add member" cli usage string.
|
||||
|
||||
|
||||
- ### app_voicemail: Allow preventing mark messages as urgent.
|
||||
Author: Naveen Albert
|
||||
Date: 2024-02-24
|
||||
|
||||
This adds an option to allow preventing callers from leaving
|
||||
messages marked as 'urgent'.
|
||||
|
||||
Resolves: #619
|
||||
|
||||
UserNote: The leaveurgent mailbox option can now be used to
|
||||
control whether callers may leave messages marked as 'Urgent'.
|
||||
|
||||
|
||||
- ### res_pjsip: Use consistent type for boolean columns.
|
||||
Author: Sean Bright
|
||||
Date: 2024-02-27
|
||||
|
||||
This migrates the relevant schema objects from the `('yes', 'no')`
|
||||
definition to the `('0', '1', 'off', 'on', 'false', 'true', 'yes', 'no')`
|
||||
one.
|
||||
|
||||
Fixes #617
|
||||
|
||||
|
||||
- ### attestation_config.c: Use ast_free instead of ast_std_free
|
||||
Author: George Joseph
|
||||
Date: 2024-03-05
|
||||
|
||||
In as_check_common_config, we were calling ast_std_free on
|
||||
raw_key but raw_key was allocated with ast_malloc so it
|
||||
should be freed with ast_free.
|
||||
|
||||
Resolves: #636
|
||||
|
||||
- ### Makefile: Add stir_shaken/cache to directories created on install
|
||||
Author: George Joseph
|
||||
Date: 2024-03-04
|
||||
|
||||
The default location for the stir_shaken cache is
|
||||
/var/lib/asterisk/keys/stir_shaken/cache but we were only creating
|
||||
/var/lib/asterisk/keys/stir_shaken on istall. We now create
|
||||
the cache sub-directory.
|
||||
|
||||
Resolves: #634
|
||||
|
||||
- ### Stir/Shaken Refactor
|
||||
Author: George Joseph
|
||||
Date: 2023-10-26
|
||||
|
||||
Why do we need a refactor?
|
||||
|
||||
The original stir/shaken implementation was started over 3 years ago
|
||||
when little was understood about practical implementation. The
|
||||
result was an implementation that wouldn't actually interoperate
|
||||
with any other stir-shaken implementations.
|
||||
|
||||
There were also a number of stir-shaken features and RFC
|
||||
requirements that were never implemented such as TNAuthList
|
||||
certificate validation, sending Reason headers in SIP responses
|
||||
when verification failed but we wished to continue the call, and
|
||||
the ability to send Media Key(mky) grants in the Identity header
|
||||
when the call involved DTLS.
|
||||
|
||||
Finally, there were some performance concerns around outgoing
|
||||
calls and selection of the correct certificate and private key.
|
||||
The configuration was keyed by an arbitrary name which meant that
|
||||
for every outgoing call, we had to scan the entire list of
|
||||
configured TNs to find the correct cert to use. With only a few
|
||||
TNs configured, this wasn't an issue but if you have a thousand,
|
||||
it could be.
|
||||
|
||||
What's changed?
|
||||
|
||||
* Configuration objects have been refactored to be clearer about
|
||||
their uses and to fix issues.
|
||||
* The "general" object was renamed to "verification" since it
|
||||
contains parameters specific to the incoming verification
|
||||
process. It also never handled ca_path and crl_path
|
||||
correctly.
|
||||
* A new "attestation" object was added that controls the
|
||||
outgoing attestation process. It sets default certificates,
|
||||
keys, etc.
|
||||
* The "certificate" object was renamed to "tn" and had it's key
|
||||
change to telephone number since outgoing call attestation
|
||||
needs to look up certificates by telephone number.
|
||||
* The "profile" object had more parameters added to it that can
|
||||
override default parameters specified in the "attestation"
|
||||
and "verification" objects.
|
||||
* The "store" object was removed altogther as it was never
|
||||
implemented.
|
||||
|
||||
* We now use libjwt to create outgoing Identity headers and to
|
||||
parse and validate signatures on incoming Identiy headers. Our
|
||||
previous custom implementation was much of the source of the
|
||||
interoperability issues.
|
||||
|
||||
* General code cleanup and refactor.
|
||||
* Moved things to better places.
|
||||
* Separated some of the complex functions to smaller ones.
|
||||
* Using context objects rather than passing tons of parameters
|
||||
in function calls.
|
||||
* Removed some complexity and unneeded encapsuation from the
|
||||
config objects.
|
||||
|
||||
Resolves: #351
|
||||
Resolves: #46
|
||||
|
||||
UserNote: Asterisk's stir-shaken feature has been refactored to
|
||||
correct interoperability, RFC compliance, and performance issues.
|
||||
See https://docs.asterisk.org/Deployment/STIR-SHAKEN for more
|
||||
information.
|
||||
|
||||
UpgradeNote: The stir-shaken refactor is a breaking change but since
|
||||
it's not working now we don't think it matters. The
|
||||
stir_shaken.conf file has changed significantly which means that
|
||||
existing ones WILL need to be changed. The stir_shaken.conf.sample
|
||||
file in configs/samples/ has quite a bit more information. This is
|
||||
also an ABI breaking change since some of the existing objects
|
||||
needed to be changed or removed, and new ones added. Additionally,
|
||||
if res_stir_shaken is enabled in menuselect, you'll need to either
|
||||
have the development package for libjwt v1.15.3 installed or use
|
||||
the --with-libjwt-bundled option with ./configure.
|
||||
|
||||
|
||||
- ### alembic: Synchronize alembic heads between supported branches.
|
||||
Author: Sean Bright
|
||||
Date: 2024-02-28
|
||||
|
||||
This adds a dummy migration to 18 and 20 so that our alembic heads are
|
||||
synchronized across all supported branches.
|
||||
|
||||
In this case the migration we are stubbing (24c12d8e9014) is:
|
||||
|
||||
https://github.com/asterisk/asterisk/commit/775352ee6c2a5bcd4f0e3df51aee5d1b0abf4cbe
|
||||
|
||||
- ### translate.c: implement new direct comp table mode
|
||||
Author: Sebastian Jennen
|
||||
Date: 2024-02-25
|
||||
|
||||
The new mode lists for each codec translation the actual real cost in cpu microseconds per second translated audio.
|
||||
This allows to compare the real cpu usage of translations and helps in evaluation of codec implementation changes regarding performance (regression testing).
|
||||
|
||||
- add new table mode
|
||||
- hide the 999999 comp values, as these only indicate an issue with transcoding
|
||||
- hide the 0 values, as these also do not contain any information (only indicate a multistep transcoding)
|
||||
|
||||
Resolves: #601
|
||||
|
||||
- ### README.md: Removed outdated link
|
||||
Author: Shyju Kanaprath
|
||||
Date: 2024-02-23
|
||||
|
||||
Removed outdated link http://www.quicknet.net from README.md
|
||||
|
||||
cherry-pick-to: 18
|
||||
cherry-pick-to: 20
|
||||
cherry-pick-to: 21
|
||||
|
||||
- ### strings.h: Ensure ast_str_buffer(…) returns a 0 terminated string.
|
||||
Author: Sean Bright
|
||||
Date: 2024-02-17
|
||||
|
||||
If a dynamic string is created with an initial length of 0,
|
||||
`ast_str_buffer(…)` will return an invalid pointer.
|
||||
|
||||
This was a secondary discovery when fixing #65.
|
||||
|
||||
|
||||
- ### res_rtp_asterisk.c: Correct coefficient in MOS calculation.
|
||||
Author: romryz
|
||||
Date: 2024-02-06
|
||||
|
||||
Media Experience Score relies on incorrect pseudo_mos variable
|
||||
calculation. According to forming an opinion section of the
|
||||
documentation, calculation relies on ITU-T G.107 standard:
|
||||
|
||||
https://docs.asterisk.org/Deployment/Media-Experience-Score/#forming-an-opinion
|
||||
|
||||
ITU-T G.107 Annex B suggests to calculate MOS with a coefficient
|
||||
"seven times ten to the power of negative six", 7 * 10^(-6). which
|
||||
would mean 6 digits after the decimal point. Current implementation
|
||||
has 7 digits after the decimal point, which downrates the calls.
|
||||
|
||||
Fixes: #597
|
||||
|
||||
- ### dsp.c: Fix and improve potentially inaccurate log message.
|
||||
Author: Naveen Albert
|
||||
Date: 2024-02-09
|
||||
|
||||
If ast_dsp_process is called with a codec besides slin, ulaw,
|
||||
or alaw, a warning is logged that in-band DTMF is not supported,
|
||||
but this message is not always appropriate or correct, because
|
||||
ast_dsp_process is much more generic than just DTMF detection.
|
||||
|
||||
This logs a more generic message in those cases, and also improves
|
||||
codec-mismatch logging throughout dsp.c by ensuring incompatible
|
||||
codecs are printed out.
|
||||
|
||||
Resolves: #595
|
||||
|
||||
- ### pjsip show channelstats: Prevent possible segfault when faxing
|
||||
Author: George Joseph
|
||||
Date: 2024-02-09
|
||||
|
||||
Under rare circumstances, it's possible for the original audio
|
||||
session in the active_media_state default_session to be corrupted
|
||||
instead of removed when switching to the t38/image media session
|
||||
during fax negotiation. This can cause a segfault when a "pjsip
|
||||
show channelstats" attempts to print that audio media session's
|
||||
rtp statistics. In these cases, the active_media_state
|
||||
topology is correctly showing only a single t38/image stream
|
||||
so we now check that there's an audio stream in the topology
|
||||
before attempting to use the audio media session to get the rtp
|
||||
statistics.
|
||||
|
||||
Resolves: #592
|
||||
|
||||
- ### Reduce startup/shutdown verbose logging
|
||||
Author: George Joseph
|
||||
Date: 2024-01-31
|
||||
|
||||
When started with a verbose level of 3, asterisk can emit over 1500
|
||||
verbose message that serve no real purpose other than to fill up
|
||||
logs. When asterisk shuts down, it emits another 1100 that are of
|
||||
even less use. Since the testsuite runs asterisk with a verbose
|
||||
level of 3, and asterisk starts and stops for every one of the 700+
|
||||
tests, the number of log messages is staggering. Besides taking up
|
||||
resources, it also makes it hard to debug failing tests.
|
||||
|
||||
This commit changes the log level for those verbose messages to 5
|
||||
instead of 3 which reduces the number of log messages to only a
|
||||
handful. Of course, NOTICE, WARNING and ERROR message are
|
||||
unaffected.
|
||||
|
||||
There's also one other minor change...
|
||||
ast_context_remove_extension_callerid2() logs a DEBUG message
|
||||
instead of an ERROR if the extension you're deleting doesn't exist.
|
||||
The pjsip_config_wizard calls that function to clean up the config
|
||||
and has been triggering that annoying error message for years.
|
||||
|
||||
Resolves: #582
|
||||
|
||||
- ### configure: Rerun bootstrap on modern platform.
|
||||
Author: Naveen Albert
|
||||
Date: 2024-02-12
|
||||
|
||||
The last time configure was run, it was run on a system that
|
||||
did not enable -std=gnu11 by default, which meant that the
|
||||
restrict qualifier would not be recognized on certain platforms.
|
||||
This regenerates the configure files from running bootstrap.sh,
|
||||
so that these should be recognized on all supported platforms.
|
||||
|
||||
Resolves: #586
|
||||
|
||||
- ### Upgrade bundled pjproject to 2.14.
|
||||
Author: Ben Ford
|
||||
Date: 2024-02-05
|
||||
|
||||
Fixes: #406
|
||||
|
||||
UserNote: Bundled pjproject has been upgraded to 2.14. For more
|
||||
information on what all is included in this change, check out the
|
||||
pjproject Github page: https://github.com/pjsip/pjproject/releases
|
||||
|
||||
|
||||
- ### app_speech_utils.c: Allow partial speech results.
|
||||
Author: cmaj
|
||||
Date: 2024-02-02
|
||||
|
||||
Adds 'p' option to SpeechBackground() application.
|
||||
With this option, when the app timeout is reached,
|
||||
whatever the backend speech engine collected will
|
||||
be returned as if it were the final, full result.
|
||||
(This works for engines that make partial results.)
|
||||
|
||||
Resolves: #572
|
||||
|
||||
UserNote: The SpeechBackground dialplan application now supports a 'p'
|
||||
option that will return partial results from speech engines that
|
||||
provide them when a timeout occurs.
|
||||
|
||||
|
||||
- ### utils: Make behavior of ast_strsep* match strsep.
|
||||
Author: Joshua C. Colp
|
||||
Date: 2024-01-31
|
||||
|
||||
Given the scenario of passing an empty string to the
|
||||
ast_strsep functions the functions would return NULL
|
||||
instead of an empty string. This is counter to how
|
||||
strsep itself works.
|
||||
|
||||
This change alters the behavior of the functions to
|
||||
match that of strsep.
|
||||
|
||||
Fixes: #565
|
||||
|
||||
- ### app_chanspy: Add 'D' option for dual-channel audio
|
||||
Author: Mike Bradeen
|
||||
Date: 2024-01-31
|
||||
|
||||
Adds the 'D' option to app chanspy that causes the input and output
|
||||
frames of the spied channel to be interleaved in the spy output frame.
|
||||
This allows the input and output of the spied channel to be decoded
|
||||
separately by the receiver.
|
||||
|
||||
If the 'o' option is also set, the 'D' option is ignored as the
|
||||
audio being spied is inherently one direction.
|
||||
|
||||
Fixes: #569
|
||||
|
||||
UserNote: The ChanSpy application now accepts the 'D' option which
|
||||
will interleave the spied audio within the outgoing frames. The
|
||||
purpose of this is to allow the audio to be read as a Dual channel
|
||||
stream with separate incoming and outgoing audio. Setting both the
|
||||
'o' option and the 'D' option and results in the 'D' option being
|
||||
ignored.
|
||||
|
||||
|
||||
- ### app_if: Fix next priority calculation.
|
||||
Author: Naveen Albert
|
||||
Date: 2024-01-28
|
||||
|
||||
Commit fa3922a4d28860d415614347d9f06c233d2beb07 fixed
|
||||
a branching issue but "overshoots" when calculating
|
||||
the next priority. This fixes that; accompanying
|
||||
test suite tests have also been extended.
|
||||
|
||||
Resolves: #560
|
||||
|
||||
- ### res_pjsip_t38.c: Permit IPv6 SDP connection addresses.
|
||||
Author: Sean Bright
|
||||
Date: 2024-01-29
|
||||
|
||||
The existing code prevented IPv6 addresses from being properly parsed.
|
||||
|
||||
Fixes #558
|
||||
|
||||
|
||||
- ### BuildSystem: Bump autotools versions on OpenBSD.
|
||||
Author: Brad Smith
|
||||
Date: 2024-01-27
|
||||
|
||||
Bump up to the more commonly used and modern versions of
|
||||
autoconf and automake.
|
||||
|
||||
|
||||
- ### main/utils: Simplify the FreeBSD ast_get_tid() handling
|
||||
Author: Brad Smith
|
||||
Date: 2024-01-27
|
||||
|
||||
FreeBSD has had kernel threads for 20+ years.
|
||||
|
||||
|
||||
- ### res_pjsip_session.c: Correctly format SDP connection addresses.
|
||||
Author: Sean Bright
|
||||
Date: 2024-01-27
|
||||
|
||||
Resolves a regression identified by @justinludwig involving the
|
||||
rendering of IPv6 addresses in outgoing SDP.
|
||||
|
||||
Also updates `media_address` on PJSIP endpoints so that if we are able
|
||||
to parse the configured value as an IP we store it in a format that we
|
||||
can directly use later. Based on my reading of the code it appeared
|
||||
that one could configure `media_address` as:
|
||||
|
||||
```
|
||||
[foo]
|
||||
type = endpoint
|
||||
...
|
||||
media_address = [2001:db8::]
|
||||
```
|
||||
|
||||
And that value would be blindly copied into the outgoing SDP without
|
||||
regard to its format.
|
||||
|
||||
Fixes #541
|
||||
|
||||
|
||||
- ### rtp_engine.c: Correct sample rate typo for L16/44100.
|
||||
Author: Sean Bright
|
||||
Date: 2024-01-28
|
||||
|
||||
Fixes #555
|
||||
|
||||
|
||||
- ### manager.c: Fix erroneous reloads in UpdateConfig.
|
||||
Author: Naveen Albert
|
||||
Date: 2024-01-25
|
||||
|
||||
Currently, a reload will always occur if the
|
||||
Reload header is provided for the UpdateConfig
|
||||
action. However, we should not be doing a reload
|
||||
if the header value has a falsy value, per the
|
||||
documentation, so this makes the reload behavior
|
||||
consistent with the existing documentation.
|
||||
|
||||
Resolves: #551
|
||||
|
||||
- ### res_calendar_icalendar: Print iCalendar error on parsing failure.
|
||||
Author: Naveen Albert
|
||||
Date: 2023-12-14
|
||||
|
||||
If libical fails to parse a calendar, print the error message it provdes.
|
||||
|
||||
Resolves: #492
|
||||
|
||||
- ### app_confbridge: Don't emit warnings on valid configurations.
|
||||
Author: Sean Bright
|
||||
Date: 2024-01-21
|
||||
|
||||
The numeric bridge profile options `internal_sample_rate` and
|
||||
`maximum_sample_rate` are documented to accept the special values
|
||||
`auto` and `none`, respectively. While these values currently work,
|
||||
they also emit warnings when used which could be confusing for users.
|
||||
|
||||
In passing, also ensure that we only accept the documented range of
|
||||
sample rate values between 8000 and 192000.
|
||||
|
||||
Fixes #546
|
||||
|
||||
|
||||
- ### app_voicemail: add NoOp alembic script to maintain sync
|
||||
Author: Mike Bradeen
|
||||
Date: 2024-01-17
|
||||
|
||||
Adding a NoOp alembic script for the voicemail database to maintain
|
||||
version sync with other branches.
|
||||
|
||||
Fixes: #527
|
||||
|
||||
- ### chan_dahdi: Allow MWI to be manually toggled on channels.
|
||||
Author: Naveen Albert
|
||||
Date: 2023-11-10
|
||||
|
||||
This adds a CLI command to manually toggle the MWI status
|
||||
of a channel, useful for troubleshooting or resetting
|
||||
MWI devices, similar to the capabilities offered with
|
||||
SIP messaging to manually control MWI status.
|
||||
|
||||
UserNote: The 'dahdi set mwi' now allows MWI on channels
|
||||
to be manually toggled if needed for troubleshooting.
|
||||
|
||||
Resolves: #440
|
||||
|
||||
- ### chan_rtp.c: MulticastRTP missing refcount without codec option
|
||||
Author: PeterHolik
|
||||
Date: 2024-01-15
|
||||
|
||||
Fixes: #529
|
||||
|
||||
- ### chan_rtp.c: Change MulticastRTP nameing to avoid memory leak
|
||||
Author: PeterHolik
|
||||
Date: 2024-01-16
|
||||
|
||||
Fixes: asterisk#536
|
||||
|
||||
- ### func_frame_trace: Add CLI command to dump frame queue.
|
||||
Author: Naveen Albert
|
||||
Date: 2024-01-12
|
||||
|
||||
This adds a simple CLI command that can be used for
|
||||
analyzing all frames currently queued to a channel.
|
||||
|
||||
A couple log messages are also adjusted to be more
|
||||
useful in tracing bridging problems.
|
||||
|
||||
Resolves: #533
|
||||
|
||||
@@ -1,845 +0,0 @@
|
||||
|
||||
## Change Log for Release asterisk-20.8.0
|
||||
|
||||
### Links:
|
||||
|
||||
- [Full ChangeLog](https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-20.8.0.md)
|
||||
- [GitHub Diff](https://github.com/asterisk/asterisk/compare/20.7.0...20.8.0)
|
||||
- [Tarball](https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20.8.0.tar.gz)
|
||||
- [Downloads](https://downloads.asterisk.org/pub/telephony/asterisk)
|
||||
|
||||
### Summary:
|
||||
|
||||
- Commits: 44
|
||||
- Commit Authors: 15
|
||||
- Issues Resolved: 26
|
||||
- Security Advisories Resolved: 0
|
||||
|
||||
### User Notes:
|
||||
|
||||
- #### res_pjsip_logger: Preserve logging state on reloads.
|
||||
Issuing "pjsip reload" will no longer disable
|
||||
logging if it was previously enabled from the CLI.
|
||||
|
||||
- #### loader.c: Allow dependent modules to be unloaded recursively.
|
||||
In certain circumstances, modules with dependency relations
|
||||
can have their dependents automatically recursively unloaded and loaded
|
||||
again using the "module refresh" CLI command or the ModuleLoad AMI command.
|
||||
|
||||
- #### tcptls/iostream: Add support for setting SNI on client TLS connections
|
||||
Secure websocket client connections now send SNI in
|
||||
the TLS client hello.
|
||||
|
||||
- #### res_pjsip_endpoint_identifier_ip: Add endpoint identifier transport address.
|
||||
set identify_by=transport for the pjsip endpoint. Then
|
||||
use the existing 'match' option and the new 'transport' option of
|
||||
the identify.
|
||||
Fixes: #672
|
||||
|
||||
- #### res_pjsip_endpoint_identifier_ip: Endpoint identifier request URI
|
||||
this new feature let users match endpoints based on the
|
||||
indound SIP requests' URI. To do so, add 'request_uri' to the
|
||||
endpoint's 'identify_by' option. The 'match_request_uri' option of
|
||||
the identify can be an exact match for the entire request uri, or a
|
||||
regular expression (between slashes). It's quite similar to the
|
||||
header identifer.
|
||||
Fixes: #599
|
||||
|
||||
- #### res_pjsip_refer.c: Allow GET_TRANSFERRER_DATA
|
||||
the GET_TRANSFERRER_DATA dialplan variable can now be used also in pjsip.
|
||||
|
||||
- #### manager.c: Add new parameter 'PreDialGoSub' to Originate AMI action
|
||||
When using the Originate AMI Action, we now can pass the PreDialGoSub parameter, instructing the asterisk to perform an subrouting at channel before call start. With this parameter an call initiated by AMI can request the channel to start the call automaticaly, adding a SIP header to using GoSUB, instructing to autoanswer the channel, and proceeding the outbuound extension executing. Exemple of an context to perform the previus indication:
|
||||
[addautoanswer]
|
||||
exten => _s,1,Set(PJSIP_HEADER(add,Call-Info)=answer-after=0)
|
||||
exten => _s,n,Set(PJSIP_HEADER(add,Alert-Info)=answer-after=0)
|
||||
exten => _s,n,Return()
|
||||
|
||||
- #### manager.c: Add CLI command to kick AMI sessions.
|
||||
The "manager kick session" CLI command now
|
||||
allows kicking a specified AMI session.
|
||||
|
||||
- #### chan_dahdi: Allow specifying waitfordialtone per call.
|
||||
"waitfordialtone" may now be specified for DAHDI
|
||||
trunk channels on a per-call basis using the CHANNEL function.
|
||||
|
||||
- #### Upgrade bundled pjproject to 2.14.1
|
||||
Bundled pjproject has been upgraded to 2.14.1. For more
|
||||
information visit pjproject Github page: https://github.com/pjsip/pjproject/releases/tag/2.14.1
|
||||
|
||||
|
||||
### Upgrade Notes:
|
||||
|
||||
- #### pbx_variables.c: Prevent SEGV due to stack overflow.
|
||||
The maximum amount of dialplan recursion
|
||||
using variable substitution (such as by using EVAL_EXTEN)
|
||||
is capped at 15.
|
||||
|
||||
|
||||
### Commit Authors:
|
||||
|
||||
- Fabrice Fontaine: (1)
|
||||
- George Joseph: (8)
|
||||
- Henrik Liljedahl: (1)
|
||||
- Holger Hans Peter Freyther: (1)
|
||||
- Ivan Poddubny: (2)
|
||||
- Jonatascalebe: (1)
|
||||
- Joshua Elson: (1)
|
||||
- Martin Nystroem: (1)
|
||||
- Martin Tomec: (1)
|
||||
- Maximilian Fridrich: (1)
|
||||
- Naveen Albert: (14)
|
||||
- Sean Bright: (8)
|
||||
- Sperl Viktor: (2)
|
||||
- Spiridonov Dmitry: (1)
|
||||
- Stanislav Abramenkov: (1)
|
||||
|
||||
## Issue and Commit Detail:
|
||||
|
||||
### Closed Issues:
|
||||
|
||||
- 246: [bug]: res_pjsip_logger: Reload disables logging
|
||||
- 472: [new-feature]: chan_dahdi: Allow waitfordialtone to be specified per call
|
||||
- 474: [new-feature]: loader.c: Allow dependent modules to be unloaded automatically
|
||||
- 480: [improvement]: pbx_variables.c: Prevent infinite recursion and stack overflow with variable expansion
|
||||
- 485: [new-feature]: manager.c: Allow kicking specific manager sessions
|
||||
- 525: [bug]: say.c: Money announcements off by one cent due to floating point rounding
|
||||
- 579: [improvement]: Allow GET_TRANSFERRER_DATA for pjsip
|
||||
- 599: [improvement]: Endpoint identifier request line
|
||||
- 611: [bug]: res_pjsip_session: Polling on non-existing file descriptors when stream is removed
|
||||
- 624: [bug]: Park() application does not continue execution if lot is full
|
||||
- 642: [bug]: Prometheus bridge metrics contains duplicate entries and help
|
||||
- 666: [improvement]: ARI debug should contain endpoint and method
|
||||
- 669: [bug]: chan_dahdi: Tens or hundreds of thousands of channel opens attempted during restart
|
||||
- 672: [improvement]: Endpoint identifier transport
|
||||
- 673: [new-feature]: chan_dahdi: Add AMI action to show spans
|
||||
- 676: [bug]: res_stir_shaken implicit declaration of function errors/warnings
|
||||
- 681: [new-feature]: callerid.c: Parse all received parameters
|
||||
- 683: [improvement]: func_callerid: Warn if invalid redirecting reason is set
|
||||
- 689: [bug] Document the `Events` argument of the `Login` AMI action
|
||||
- 696: [bug]: Unexpected control subclass '14'
|
||||
- 713: [bug]: SNI isn't being set on websocket client connections
|
||||
- 716: [bug]: Memory leak in res_stir_shaken tn_config, plus a few other issues
|
||||
- 719: [bug]: segfault on start if compiled with DETECT_DEADLOCKS
|
||||
- 721: [improvement]: logger: Add unique verbose prefixes for higher verbose levels
|
||||
- 729: [bug]: Build failure with uclibc-ng
|
||||
- ASTERISK-29912: res_pjsip: module reload disables logging
|
||||
|
||||
### Commits By Author:
|
||||
|
||||
- ### Fabrice Fontaine (1):
|
||||
- res/stasis/control.c: include signal.h
|
||||
|
||||
- ### George Joseph (8):
|
||||
- Fix incorrect application and function documentation references
|
||||
- res_stir_shaken: Fix compilation for CentOS7 (openssl 1.0.2)
|
||||
- manager.c: Add missing parameters to Login documentation
|
||||
- rtp_engine and stun: call ast_register_atexit instead of ast_register_cleanup
|
||||
- logger.h: Add SCOPE_CALL and SCOPE_CALL_WITH_RESULT
|
||||
- make_buildopts_h: Always include DETECT_DEADLOCKS
|
||||
- stir_shaken: Fix memory leak, typo in config, tn canonicalization
|
||||
- tcptls/iostream: Add support for setting SNI on client TLS connections
|
||||
|
||||
- ### Henrik Liljedahl (1):
|
||||
- res_pjsip_sdp_rtp.c: Initial RTP inactivity check must consider the rtp_timeou..
|
||||
|
||||
- ### Holger Hans Peter Freyther (1):
|
||||
- res_prometheus: Fix duplicate output of metric and help text
|
||||
|
||||
- ### Ivan Poddubny (2):
|
||||
- asterisk.c: Fix sending incorrect messages to systemd notify
|
||||
- configs: Fix a misleading IPv6 ACL example in Named ACLs
|
||||
|
||||
- ### Joshua Elson (1):
|
||||
- Implement Configurable TCP Keepalive Settings in PJSIP Transports
|
||||
|
||||
- ### Martin Nystroem (1):
|
||||
- res_ari.c: Add additional output to ARI requests when debug is enabled
|
||||
|
||||
- ### Martin Tomec (1):
|
||||
- res_pjsip_refer.c: Allow GET_TRANSFERRER_DATA
|
||||
|
||||
- ### Maximilian Fridrich (1):
|
||||
- res_pjsip_session: Reset pending_media_state->read_callbacks
|
||||
|
||||
- ### Naveen Albert (14):
|
||||
- res_parking: Fail gracefully if parking lot is full.
|
||||
- chan_dahdi: Allow specifying waitfordialtone per call.
|
||||
- manager.c: Add CLI command to kick AMI sessions.
|
||||
- pbx_variables.c: Prevent SEGV due to stack overflow.
|
||||
- menuselect: Minor cosmetic fixes.
|
||||
- chan_dahdi: Don't retry opening nonexistent channels on restart.
|
||||
- chan_dahdi: Add DAHDIShowStatus AMI action.
|
||||
- func_callerid: Emit warning if invalid redirecting reason set.
|
||||
- file.c, channel.c: Don't emit warnings if progress received.
|
||||
- callerid.c: Parse previously ignored Caller ID parameters.
|
||||
- loader.c: Allow dependent modules to be unloaded recursively.
|
||||
- say.c: Fix cents off-by-one due to floating point rounding.
|
||||
- logger: Add unique verbose prefixes for levels 5-10.
|
||||
- res_pjsip_logger: Preserve logging state on reloads.
|
||||
|
||||
- ### Sean Bright (8):
|
||||
- res_monitor.c: Don't emit a warning about 'X' being unrecognized.
|
||||
- alembic: Quote new MySQL keyword 'qualify.'
|
||||
- res_pjsip: Fix alembic downgrade for boolean columns.
|
||||
- res_config_mysql.c: Support hostnames up to 255 bytes.
|
||||
- alembic: Fix compatibility with SQLAlchemy 2.0+.
|
||||
- cli.c: `core show channels concise` is not really deprecated.
|
||||
- alembic: Correct NULLability of PJSIP id columns.
|
||||
- app_queue.c: Properly handle invalid strategies from realtime.
|
||||
|
||||
- ### Sperl Viktor (2):
|
||||
- res_pjsip_endpoint_identifier_ip: Endpoint identifier request URI
|
||||
- res_pjsip_endpoint_identifier_ip: Add endpoint identifier transport address.
|
||||
|
||||
- ### Spiridonov Dmitry (1):
|
||||
- sorcery.c: Fixed crash error when executing "module reload"
|
||||
|
||||
- ### Stanislav Abramenkov (1):
|
||||
- Upgrade bundled pjproject to 2.14.1
|
||||
|
||||
- ### jonatascalebe (1):
|
||||
- manager.c: Add new parameter 'PreDialGoSub' to Originate AMI action
|
||||
|
||||
|
||||
### Commit List:
|
||||
|
||||
- configs: Fix a misleading IPv6 ACL example in Named ACLs
|
||||
- asterisk.c: Fix sending incorrect messages to systemd notify
|
||||
- res/stasis/control.c: include signal.h
|
||||
- res_pjsip_logger: Preserve logging state on reloads.
|
||||
- logger: Add unique verbose prefixes for levels 5-10.
|
||||
- say.c: Fix cents off-by-one due to floating point rounding.
|
||||
- loader.c: Allow dependent modules to be unloaded recursively.
|
||||
- tcptls/iostream: Add support for setting SNI on client TLS connections
|
||||
- stir_shaken: Fix memory leak, typo in config, tn canonicalization
|
||||
- make_buildopts_h: Always include DETECT_DEADLOCKS
|
||||
- sorcery.c: Fixed crash error when executing "module reload"
|
||||
- callerid.c: Parse previously ignored Caller ID parameters.
|
||||
- logger.h: Add SCOPE_CALL and SCOPE_CALL_WITH_RESULT
|
||||
- app_queue.c: Properly handle invalid strategies from realtime.
|
||||
- file.c, channel.c: Don't emit warnings if progress received.
|
||||
- alembic: Correct NULLability of PJSIP id columns.
|
||||
- rtp_engine and stun: call ast_register_atexit instead of ast_register_cleanup
|
||||
- manager.c: Add missing parameters to Login documentation
|
||||
- func_callerid: Emit warning if invalid redirecting reason set.
|
||||
- chan_dahdi: Add DAHDIShowStatus AMI action.
|
||||
- res_pjsip_endpoint_identifier_ip: Add endpoint identifier transport address.
|
||||
- res_stir_shaken: Fix compilation for CentOS7 (openssl 1.0.2)
|
||||
- Fix incorrect application and function documentation references
|
||||
- cli.c: `core show channels concise` is not really deprecated.
|
||||
- res_pjsip_endpoint_identifier_ip: Endpoint identifier request URI
|
||||
- chan_dahdi: Don't retry opening nonexistent channels on restart.
|
||||
- Implement Configurable TCP Keepalive Settings in PJSIP Transports
|
||||
- res_pjsip_refer.c: Allow GET_TRANSFERRER_DATA
|
||||
- res_ari.c: Add additional output to ARI requests when debug is enabled
|
||||
- alembic: Fix compatibility with SQLAlchemy 2.0+.
|
||||
- manager.c: Add new parameter 'PreDialGoSub' to Originate AMI action
|
||||
- menuselect: Minor cosmetic fixes.
|
||||
- pbx_variables.c: Prevent SEGV due to stack overflow.
|
||||
- res_prometheus: Fix duplicate output of metric and help text
|
||||
- manager.c: Add CLI command to kick AMI sessions.
|
||||
- chan_dahdi: Allow specifying waitfordialtone per call.
|
||||
- res_parking: Fail gracefully if parking lot is full.
|
||||
- res_config_mysql.c: Support hostnames up to 255 bytes.
|
||||
- res_pjsip: Fix alembic downgrade for boolean columns.
|
||||
- Upgrade bundled pjproject to 2.14.1
|
||||
- alembic: Quote new MySQL keyword 'qualify.'
|
||||
- res_pjsip_session: Reset pending_media_state->read_callbacks
|
||||
- res_monitor.c: Don't emit a warning about 'X' being unrecognized.
|
||||
|
||||
### Commit Details:
|
||||
|
||||
#### configs: Fix a misleading IPv6 ACL example in Named ACLs
|
||||
Author: Ivan Poddubny
|
||||
Date: 2024-05-05
|
||||
|
||||
"deny=::" is equivalent to "::/128".
|
||||
In order to mean "deny everything by default" it must be "::/0".
|
||||
|
||||
|
||||
#### asterisk.c: Fix sending incorrect messages to systemd notify
|
||||
Author: Ivan Poddubny
|
||||
Date: 2024-05-05
|
||||
|
||||
Send "RELOADING=1" instead of "RELOAD=1" to follow the format
|
||||
expected by systemd (see sd_notify(3) man page).
|
||||
|
||||
Do not send STOPPING=1 in remote console mode:
|
||||
attempting to execute "asterisk -rx" by the main process leads to
|
||||
a warning if NotifyAccess=main (the default) or to a forced termination
|
||||
if NotifyAccess=all.
|
||||
|
||||
|
||||
#### res/stasis/control.c: include signal.h
|
||||
Author: Fabrice Fontaine
|
||||
Date: 2024-05-01
|
||||
|
||||
Include signal.h to avoid the following build failure with uclibc-ng
|
||||
raised since
|
||||
https://github.com/asterisk/asterisk/commit/2694792e13c7f3ab1911c4a69fba0df32c544177:
|
||||
|
||||
stasis/control.c: In function 'exec_command_on_condition':
|
||||
stasis/control.c:313:3: warning: implicit declaration of function 'pthread_kill'; did you mean 'pthread_yield'? [-Wimplicit-function-declaration]
|
||||
313 | pthread_kill(control->control_thread, SIGURG);
|
||||
| ^~~~~~~~~~~~
|
||||
| pthread_yield
|
||||
stasis/control.c:313:41: error: 'SIGURG' undeclared (first use in this function)
|
||||
313 | pthread_kill(control->control_thread, SIGURG);
|
||||
| ^~~~~~
|
||||
|
||||
cherry-pick-to: 18
|
||||
cherry-pick-to: 20
|
||||
cherry-pick-to: 21
|
||||
|
||||
Fixes: #729
|
||||
|
||||
#### res_pjsip_logger: Preserve logging state on reloads.
|
||||
Author: Naveen Albert
|
||||
Date: 2023-08-09
|
||||
|
||||
Currently, reloading res_pjsip will cause logging
|
||||
to be disabled. This is because logging can also
|
||||
be controlled via the debug option in pjsip.conf
|
||||
and this defaults to "no".
|
||||
|
||||
To improve this, logging is no longer disabled on
|
||||
reloads if logging had not been previously
|
||||
enabled using the debug option from the config.
|
||||
This ensures that logging enabled from the CLI
|
||||
will persist through a reload.
|
||||
|
||||
ASTERISK-29912 #close
|
||||
|
||||
Resolves: #246
|
||||
|
||||
UserNote: Issuing "pjsip reload" will no longer disable
|
||||
logging if it was previously enabled from the CLI.
|
||||
|
||||
|
||||
#### logger: Add unique verbose prefixes for levels 5-10.
|
||||
Author: Naveen Albert
|
||||
Date: 2024-04-27
|
||||
|
||||
Add unique verbose prefixes for levels higher than 4, so
|
||||
that these can be visually differentiated from each other.
|
||||
|
||||
Resolves: #721
|
||||
|
||||
#### say.c: Fix cents off-by-one due to floating point rounding.
|
||||
Author: Naveen Albert
|
||||
Date: 2024-01-10
|
||||
|
||||
Some of the money announcements can be off by one cent,
|
||||
due to the use of floating point in the money calculations,
|
||||
which is bad for obvious reasons.
|
||||
|
||||
This replaces floating point with simple string parsing
|
||||
to ensure the cents value is converted accurately.
|
||||
|
||||
Resolves: #525
|
||||
|
||||
#### loader.c: Allow dependent modules to be unloaded recursively.
|
||||
Author: Naveen Albert
|
||||
Date: 2023-12-02
|
||||
|
||||
Because of the (often recursive) nature of module dependencies in
|
||||
Asterisk, hot swapping a module on the fly is cumbersome if a module
|
||||
is depended on by other modules. Currently, dependencies must be
|
||||
popped manually by unloading dependents, unloading the module of
|
||||
interest, and then loading modules again in reverse order.
|
||||
|
||||
To make this easier, the ability to do this recursively in certain
|
||||
circumstances has been added, as an optional extension to the
|
||||
"module refresh" command. If requested, Asterisk will check if a module
|
||||
that has a positive usecount could be unloaded safely if anything
|
||||
recursively dependent on it were unloaded. If so, it will go ahead
|
||||
and unload all these modules and load them back again. This makes
|
||||
hot swapping modules that provide dependencies much easier.
|
||||
|
||||
Resolves: #474
|
||||
|
||||
UserNote: In certain circumstances, modules with dependency relations
|
||||
can have their dependents automatically recursively unloaded and loaded
|
||||
again using the "module refresh" CLI command or the ModuleLoad AMI command.
|
||||
|
||||
|
||||
#### res_pjsip_sdp_rtp.c: Initial RTP inactivity check must consider the rtp_timeou..
|
||||
Author: Henrik Liljedahl
|
||||
Date: 2024-04-11
|
||||
|
||||
First rtp activity check was performed after 500ms regardless of the rtp_timeout setting. Having a call in ringing state for more than rtp_timeout and the first rtp package is received more than 500ms after sdp negotiation and before the rtp_timeout, erronously caused the call to be hungup. Changed to perform the first rtp inactivity check after the timeout setting preventing calls to be disconnected before the rtp_timeout has elapsed since sdp negotiation.
|
||||
|
||||
Fixes #710
|
||||
|
||||
|
||||
#### tcptls/iostream: Add support for setting SNI on client TLS connections
|
||||
Author: George Joseph
|
||||
Date: 2024-04-23
|
||||
|
||||
If the hostname field of the ast_tcptls_session_args structure is
|
||||
set (which it is for websocket client connections), that hostname
|
||||
will now automatically be used in an SNI TLS extension in the client
|
||||
hello.
|
||||
|
||||
Resolves: #713
|
||||
|
||||
UserNote: Secure websocket client connections now send SNI in
|
||||
the TLS client hello.
|
||||
|
||||
|
||||
#### stir_shaken: Fix memory leak, typo in config, tn canonicalization
|
||||
Author: George Joseph
|
||||
Date: 2024-04-25
|
||||
|
||||
* Fixed possible memory leak in tn_config:tn_get_etn() where we
|
||||
weren't releasing etn if tn or eprofile were null.
|
||||
* We now canonicalize TNs before using them for lookups or adding
|
||||
them to Identity headers.
|
||||
* Fixed a typo in stir_shaken.conf.sample.
|
||||
|
||||
Resolves: #716
|
||||
|
||||
#### make_buildopts_h: Always include DETECT_DEADLOCKS
|
||||
Author: George Joseph
|
||||
Date: 2024-04-27
|
||||
|
||||
Since DETECT_DEADLOCKS is now split from DEBUG_THREADS, it must
|
||||
always be included in buildopts.h instead of only when
|
||||
ADD_CFLAGS_TO_BUILDOPTS_H is defined. A SEGV will result otherwise.
|
||||
|
||||
Resolves: #719
|
||||
|
||||
#### sorcery.c: Fixed crash error when executing "module reload"
|
||||
Author: Spiridonov Dmitry
|
||||
Date: 2024-04-14
|
||||
|
||||
Fixed crash error when cli "module reload". The error appears when
|
||||
compiling with res_prometheus and using the sorcery memory cache for
|
||||
registrations
|
||||
|
||||
|
||||
#### callerid.c: Parse previously ignored Caller ID parameters.
|
||||
Author: Naveen Albert
|
||||
Date: 2024-04-01
|
||||
|
||||
Commit f2f397c1a8cc48913434ebb297f0ff50d96993db previously
|
||||
made it possible to send Caller ID parameters to FXS stations
|
||||
which, prior to that, could not be sent.
|
||||
|
||||
This change is complementary in that we now handle receiving
|
||||
all these parameters on FXO lines and provide these up to
|
||||
the dialplan, via chan_dahdi. In particular:
|
||||
|
||||
* If a redirecting reason is provided, the channel's redirecting
|
||||
reason is set. No redirecting number is set, since there is
|
||||
no parameter for this in the Caller ID protocol, but the reason
|
||||
can be checked to determine if and why a call was forwarded.
|
||||
* If the Call Qualifier parameter is received, the Call Qualifier
|
||||
variable is set.
|
||||
* Some comments have been added to explain why some of the code
|
||||
is the way it is, to assist other people looking at it.
|
||||
|
||||
With this change, Asterisk's Caller ID implementation is now
|
||||
reasonably complete for both FXS and FXO operation.
|
||||
|
||||
Resolves: #681
|
||||
|
||||
#### logger.h: Add SCOPE_CALL and SCOPE_CALL_WITH_RESULT
|
||||
Author: George Joseph
|
||||
Date: 2024-04-09
|
||||
|
||||
If you're tracing a large function that may call another function
|
||||
multiple times in different circumstances, it can be difficult to
|
||||
see from the trace output exactly which location that function
|
||||
was called from. There's no good way to automatically determine
|
||||
the calling location. SCOPE_CALL and SCOPE_CALL_WITH_RESULT
|
||||
simply print out a trace line before and after the call.
|
||||
|
||||
The difference between SCOPE_CALL and SCOPE_CALL_WITH_RESULT is
|
||||
that SCOPE_CALL ignores the function's return value (if any) where
|
||||
SCOPE_CALL_WITH_RESULT allows you to specify the type of the
|
||||
function's return value so it can be assigned to a variable.
|
||||
SCOPE_CALL_WITH_INT_RESULT is just a wrapper for SCOPE_CALL_WITH_RESULT
|
||||
and the "int" return type.
|
||||
|
||||
|
||||
#### app_queue.c: Properly handle invalid strategies from realtime.
|
||||
Author: Sean Bright
|
||||
Date: 2024-04-13
|
||||
|
||||
The existing code sets the queue strategy to `ringall` but it is then
|
||||
immediately overwritten with an invalid one.
|
||||
|
||||
Fixes #707
|
||||
|
||||
|
||||
#### file.c, channel.c: Don't emit warnings if progress received.
|
||||
Author: Naveen Albert
|
||||
Date: 2024-04-09
|
||||
|
||||
Silently ignore AST_CONTROL_PROGRESS where appropriate,
|
||||
as most control frames already are.
|
||||
|
||||
Resolves: #696
|
||||
|
||||
#### alembic: Correct NULLability of PJSIP id columns.
|
||||
Author: Sean Bright
|
||||
Date: 2024-04-06
|
||||
|
||||
Fixes #695
|
||||
|
||||
|
||||
#### rtp_engine and stun: call ast_register_atexit instead of ast_register_cleanup
|
||||
Author: George Joseph
|
||||
Date: 2024-04-02
|
||||
|
||||
rtp_engine.c and stun.c were calling ast_register_cleanup which
|
||||
is skipped if any loadable module can't be cleanly unloaded
|
||||
when asterisk shuts down. Since this will always be the case,
|
||||
their cleanup functions never get run. In a practical sense
|
||||
this makes no difference since asterisk is shutting down but if
|
||||
you're in development mode and trying to use the leak sanitizer,
|
||||
the leaks from both of those modules clutter up the output.
|
||||
|
||||
|
||||
#### manager.c: Add missing parameters to Login documentation
|
||||
Author: George Joseph
|
||||
Date: 2024-04-03
|
||||
|
||||
* Added the AuthType and Key parameters for MD5 authentication.
|
||||
|
||||
* Added the Events parameter.
|
||||
|
||||
Resolves: #689
|
||||
|
||||
#### func_callerid: Emit warning if invalid redirecting reason set.
|
||||
Author: Naveen Albert
|
||||
Date: 2024-04-01
|
||||
|
||||
Emit a warning if REDIRECTING(reason) is set to an invalid
|
||||
reason, consistent with what happens when
|
||||
REDIRECTING(orig-reason) is set to an invalid reason.
|
||||
|
||||
Resolves: #683
|
||||
|
||||
#### chan_dahdi: Add DAHDIShowStatus AMI action.
|
||||
Author: Naveen Albert
|
||||
Date: 2024-03-29
|
||||
|
||||
* Add an AMI action to correspond to the "dahdi show status"
|
||||
command, allowing span information to be retrieved via AMI.
|
||||
* Show span number and sig type in "dahdi show channels".
|
||||
|
||||
Resolves: #673
|
||||
|
||||
#### res_pjsip_endpoint_identifier_ip: Add endpoint identifier transport address.
|
||||
Author: Sperl Viktor
|
||||
Date: 2024-03-28
|
||||
|
||||
Add a new identify_by option to res_pjsip_endpoint_identifier_ip
|
||||
called 'transport' this matches endpoints based on the bound
|
||||
ip address (local) instead of the 'ip' option, which matches on
|
||||
the source ip address (remote).
|
||||
|
||||
UserNote: set identify_by=transport for the pjsip endpoint. Then
|
||||
use the existing 'match' option and the new 'transport' option of
|
||||
the identify.
|
||||
|
||||
Fixes: #672
|
||||
|
||||
#### res_stir_shaken: Fix compilation for CentOS7 (openssl 1.0.2)
|
||||
Author: George Joseph
|
||||
Date: 2024-04-01
|
||||
|
||||
* OpenSSL 1.0.2 doesn't support X509_get0_pubkey so we now use
|
||||
X509_get_pubkey. The difference is that X509_get_pubkey requires
|
||||
the caller to free the EVP_PKEY themselves so we now let
|
||||
RAII_VAR do that.
|
||||
* OpenSSL 1.0.2 doesn't support upreffing an X509_STORE so we now
|
||||
wrap it in an ao2 object.
|
||||
* OpenSSL 1.0.2 doesn't support X509_STORE_get0_objects to get all
|
||||
the certs from an X509_STORE and there's no easy way to polyfill
|
||||
it so the CLI commands that list profiles will show a "not
|
||||
supported" message instead of listing the certs in a store.
|
||||
|
||||
Resolves: #676
|
||||
|
||||
#### Fix incorrect application and function documentation references
|
||||
Author: George Joseph
|
||||
Date: 2024-04-01
|
||||
|
||||
There were a few references in the embedded documentation XML
|
||||
where the case didn't match or where the referenced app or function
|
||||
simply didn't exist any more. These were causing 404 responses
|
||||
in docs.asterisk.org.
|
||||
|
||||
|
||||
#### cli.c: `core show channels concise` is not really deprecated.
|
||||
Author: Sean Bright
|
||||
Date: 2024-04-01
|
||||
|
||||
Fixes #675
|
||||
|
||||
|
||||
#### res_pjsip_endpoint_identifier_ip: Endpoint identifier request URI
|
||||
Author: Sperl Viktor
|
||||
Date: 2024-03-28
|
||||
|
||||
Add ability to match against PJSIP request URI.
|
||||
|
||||
UserNote: this new feature let users match endpoints based on the
|
||||
indound SIP requests' URI. To do so, add 'request_uri' to the
|
||||
endpoint's 'identify_by' option. The 'match_request_uri' option of
|
||||
the identify can be an exact match for the entire request uri, or a
|
||||
regular expression (between slashes). It's quite similar to the
|
||||
header identifer.
|
||||
|
||||
Fixes: #599
|
||||
|
||||
#### chan_dahdi: Don't retry opening nonexistent channels on restart.
|
||||
Author: Naveen Albert
|
||||
Date: 2024-03-26
|
||||
|
||||
Commit 729cb1d390b136ccc696430aa5c68d60ea4028be added logic to retry
|
||||
opening DAHDI channels on "dahdi restart" if they failed initially,
|
||||
up to 1,000 times in a loop, to address cases where the channel was
|
||||
still in use. However, this retry loop does not use the actual error,
|
||||
which means chan_dahdi will also retry opening nonexistent channels
|
||||
1,000 times per channel, causing a flood of unnecessary warning logs
|
||||
for an operation that will never succeed, with tens or hundreds of
|
||||
thousands of open attempts being made.
|
||||
|
||||
The original patch would have been more targeted if it only retried
|
||||
on the specific relevant error (likely EBUSY, although it's hard to
|
||||
say since the original issue is no longer available).
|
||||
|
||||
To avoid the problem above while avoiding the possibility of breakage,
|
||||
this skips the retry logic if the error is ENXIO (No such device or
|
||||
address), since this will never succeed.
|
||||
|
||||
Resolves: #669
|
||||
|
||||
#### Implement Configurable TCP Keepalive Settings in PJSIP Transports
|
||||
Author: Joshua Elson
|
||||
Date: 2024-03-18
|
||||
|
||||
This commit introduces configurable TCP keepalive settings for both TCP and TLS transports. The changes allow for finer control over TCP connection keepalives, enhancing stability and reliability in environments prone to connection timeouts or where intermediate devices may prematurely close idle connections. This has proven necessary and has already been tested in production in several specialized environments where access to the underlying transport is unreliable in ways invisible to the operating system directly, so these keepalive and timeout mechanisms are necessary.
|
||||
|
||||
Fixes #657
|
||||
|
||||
|
||||
#### res_pjsip_refer.c: Allow GET_TRANSFERRER_DATA
|
||||
Author: Martin Tomec
|
||||
Date: 2024-02-06
|
||||
|
||||
There was functionality in chan_sip to get REFER headers, with GET_TRANSFERRER_DATA variable. This commit implements the same functionality in pjsip, to ease transfer from chan_sip to pjsip.
|
||||
|
||||
Fixes: #579
|
||||
|
||||
UserNote: the GET_TRANSFERRER_DATA dialplan variable can now be used also in pjsip.
|
||||
|
||||
#### res_ari.c: Add additional output to ARI requests when debug is enabled
|
||||
Author: Martin Nystroem
|
||||
Date: 2024-03-22
|
||||
|
||||
When ARI debug is enabled the logs will now output http method and the uri.
|
||||
|
||||
Fixes: #666
|
||||
|
||||
#### alembic: Fix compatibility with SQLAlchemy 2.0+.
|
||||
Author: Sean Bright
|
||||
Date: 2024-03-20
|
||||
|
||||
SQLAlchemy 2.0 changed the way that commits/rollbacks are handled
|
||||
causing the final `UPDATE` to our `alembic_version_<whatever>` tables
|
||||
to be rolled back instead of committed.
|
||||
|
||||
We now use one connection to determine which
|
||||
`alembic_version_<whatever>` table to use and another to run the
|
||||
actual migrations. This prevents the erroneous rollback.
|
||||
|
||||
This change is compatible with both SQLAlchemy 1.4 and 2.0.
|
||||
|
||||
|
||||
#### manager.c: Add new parameter 'PreDialGoSub' to Originate AMI action
|
||||
Author: jonatascalebe
|
||||
Date: 2024-03-14
|
||||
|
||||
manager.c: Add new parameter 'PreDialGoSub' to Originate AMI action
|
||||
|
||||
The action originate does not has the ability to run an subroutine at initial channel, like the Aplication Originate. This update give this ability for de action originate too.
|
||||
|
||||
For example, we can run a routine via Gosub on the channel to request an automatic answer, so the caller does not need to accept the call when using the originate command via manager, making the operation more efficient.
|
||||
|
||||
UserNote: When using the Originate AMI Action, we now can pass the PreDialGoSub parameter, instructing the asterisk to perform an subrouting at channel before call start. With this parameter an call initiated by AMI can request the channel to start the call automaticaly, adding a SIP header to using GoSUB, instructing to autoanswer the channel, and proceeding the outbuound extension executing. Exemple of an context to perform the previus indication:
|
||||
[addautoanswer]
|
||||
exten => _s,1,Set(PJSIP_HEADER(add,Call-Info)=answer-after=0)
|
||||
exten => _s,n,Set(PJSIP_HEADER(add,Alert-Info)=answer-after=0)
|
||||
exten => _s,n,Return()
|
||||
|
||||
|
||||
#### menuselect: Minor cosmetic fixes.
|
||||
Author: Naveen Albert
|
||||
Date: 2024-03-21
|
||||
|
||||
Improve some of the formatting from
|
||||
dd3f17c699e320d6d30c94298d8db49573ba28da
|
||||
(#521).
|
||||
|
||||
|
||||
#### pbx_variables.c: Prevent SEGV due to stack overflow.
|
||||
Author: Naveen Albert
|
||||
Date: 2023-12-04
|
||||
|
||||
It is possible for dialplan to result in an infinite
|
||||
recursion of variable substitution, which eventually
|
||||
leads to stack overflow. If we detect this, abort
|
||||
substitution and log an error for the user to fix
|
||||
the broken dialplan.
|
||||
|
||||
Resolves: #480
|
||||
|
||||
UpgradeNote: The maximum amount of dialplan recursion
|
||||
using variable substitution (such as by using EVAL_EXTEN)
|
||||
is capped at 15.
|
||||
|
||||
|
||||
#### res_prometheus: Fix duplicate output of metric and help text
|
||||
Author: Holger Hans Peter Freyther
|
||||
Date: 2024-02-24
|
||||
|
||||
The prometheus exposition format requires each line to be unique[1].
|
||||
This is handled by struct prometheus_metric having a list of children
|
||||
that is managed when registering a metric. In case the scrape callback
|
||||
is used, it is the responsibility of the implementation to handle this
|
||||
correctly.
|
||||
|
||||
Originally the bridge callback didn't handle NULL snapshots, the crash
|
||||
fix lead to NULL metrics, and fixing that lead to duplicates.
|
||||
|
||||
The original code assumed that snapshots are not NULL and then relied on
|
||||
"if (i > 0)" to establish the parent/children relationship between
|
||||
metrics of the same class. This is not workerable as the first bridge
|
||||
might be invisible/lacks a snapshot.
|
||||
|
||||
Fix this by keeping a separate array of the first metric by class.
|
||||
Instead of relying on the index of the bridge, check whether the array
|
||||
has an entry. Use that array for the output.
|
||||
|
||||
Add a test case that verifies that the help text is not duplicated.
|
||||
|
||||
Resolves: #642
|
||||
|
||||
[1] https://prometheus.io/docs/instrumenting/exposition_formats/#grouping-and-sorting
|
||||
|
||||
|
||||
#### manager.c: Add CLI command to kick AMI sessions.
|
||||
Author: Naveen Albert
|
||||
Date: 2023-12-06
|
||||
|
||||
This adds a CLI command that can be used to manually
|
||||
kick specific AMI sessions.
|
||||
|
||||
Resolves: #485
|
||||
|
||||
UserNote: The "manager kick session" CLI command now
|
||||
allows kicking a specified AMI session.
|
||||
|
||||
|
||||
#### chan_dahdi: Allow specifying waitfordialtone per call.
|
||||
Author: Naveen Albert
|
||||
Date: 2023-12-02
|
||||
|
||||
The existing "waitfordialtone" setting in chan_dahdi.conf
|
||||
applies permanently to a specific channel, regardless of
|
||||
how it is being used. This rather restrictively prevents
|
||||
a system from simultaneously being able to pick free lines
|
||||
for outgoing calls while also allowing barge-in to a trunk
|
||||
by some other arrangement.
|
||||
|
||||
This allows specifying "waitfordialtone" using the CHANNEL
|
||||
function for only the next call that will be placed, allowing
|
||||
significantly more flexibility in the use of trunk interfaces.
|
||||
|
||||
Resolves: #472
|
||||
|
||||
UserNote: "waitfordialtone" may now be specified for DAHDI
|
||||
trunk channels on a per-call basis using the CHANNEL function.
|
||||
|
||||
|
||||
#### res_parking: Fail gracefully if parking lot is full.
|
||||
Author: Naveen Albert
|
||||
Date: 2024-03-03
|
||||
|
||||
Currently, if a parking lot is full, bridge setup returns -1,
|
||||
causing dialplan execution to terminate without TryExec.
|
||||
However, such failures should be handled more gracefully,
|
||||
the same way they are on other paths, as indicated by the
|
||||
module's author, here:
|
||||
|
||||
http://lists.digium.com/pipermail/asterisk-dev/2018-December/077144.html
|
||||
|
||||
Now, callers will hear the parking failure announcement, and dialplan
|
||||
will continue, which is consistent with existing failure modes.
|
||||
|
||||
Resolves: #624
|
||||
|
||||
#### res_config_mysql.c: Support hostnames up to 255 bytes.
|
||||
Author: Sean Bright
|
||||
Date: 2024-03-18
|
||||
|
||||
Fixes #654
|
||||
|
||||
|
||||
#### res_pjsip: Fix alembic downgrade for boolean columns.
|
||||
Author: Sean Bright
|
||||
Date: 2024-03-18
|
||||
|
||||
When downgrading, ensure that we don't touch columns that didn't
|
||||
actually change during upgrade.
|
||||
|
||||
|
||||
#### Upgrade bundled pjproject to 2.14.1
|
||||
Author: Stanislav Abramenkov
|
||||
Date: 2024-03-12
|
||||
|
||||
Fixes: asterisk#648
|
||||
|
||||
UserNote: Bundled pjproject has been upgraded to 2.14.1. For more
|
||||
information visit pjproject Github page: https://github.com/pjsip/pjproject/releases/tag/2.14.1
|
||||
|
||||
|
||||
#### alembic: Quote new MySQL keyword 'qualify.'
|
||||
Author: Sean Bright
|
||||
Date: 2024-03-15
|
||||
|
||||
Fixes #651
|
||||
|
||||
|
||||
#### res_pjsip_session: Reset pending_media_state->read_callbacks
|
||||
Author: Maximilian Fridrich
|
||||
Date: 2024-02-15
|
||||
|
||||
In handle_negotiated_sdp the pending_media_state->read_callbacks must be
|
||||
reset before they are added in the SDP handlers in
|
||||
handle_negotiated_sdp_session_media. Otherwise, old callbacks for
|
||||
removed streams and file descriptors could be added to the channel and
|
||||
Asterisk would poll on non-existing file descriptors.
|
||||
|
||||
Resolves: #611
|
||||
|
||||
#### res_monitor.c: Don't emit a warning about 'X' being unrecognized.
|
||||
Author: Sean Bright
|
||||
Date: 2024-03-07
|
||||
|
||||
Code was added in 030f7d41 to warn if an unrecognized option was
|
||||
passed to an application, but code in Monitor was taking advantage of
|
||||
the fact that the application would silently accept an invalid option.
|
||||
|
||||
We now recognize the invalid option but we don't do anything if it's
|
||||
set.
|
||||
|
||||
Fixes #639
|
||||
|
||||
|
||||
@@ -1,53 +0,0 @@
|
||||
|
||||
## Change Log for Release asterisk-20.8.1
|
||||
|
||||
### Links:
|
||||
|
||||
- [Full ChangeLog](https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-20.8.1.md)
|
||||
- [GitHub Diff](https://github.com/asterisk/asterisk/compare/20.8.0...20.8.1)
|
||||
- [Tarball](https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20.8.1.tar.gz)
|
||||
- [Downloads](https://downloads.asterisk.org/pub/telephony/asterisk)
|
||||
|
||||
### Summary:
|
||||
|
||||
- Commits: 1
|
||||
- Commit Authors: 1
|
||||
- Issues Resolved: 0
|
||||
- Security Advisories Resolved: 1
|
||||
- [GHSA-qqxj-v78h-hrf9](https://github.com/asterisk/asterisk/security/advisories/GHSA-qqxj-v78h-hrf9): res_pjsip_endpoint_identifier_ip: wrongly matches ALL unauthorized SIP requests
|
||||
|
||||
### User Notes:
|
||||
|
||||
|
||||
### Upgrade Notes:
|
||||
|
||||
|
||||
### Commit Authors:
|
||||
|
||||
- George Joseph: (1)
|
||||
|
||||
## Issue and Commit Detail:
|
||||
|
||||
### Closed Issues:
|
||||
|
||||
- !GHSA-qqxj-v78h-hrf9: res_pjsip_endpoint_identifier_ip: wrongly matches ALL unauthorized SIP requests
|
||||
|
||||
### Commits By Author:
|
||||
|
||||
- ### George Joseph (1):
|
||||
- Revert "res_pjsip_endpoint_identifier_ip: Add endpoint identifier transport ad..
|
||||
|
||||
|
||||
### Commit List:
|
||||
|
||||
|
||||
### Commit Details:
|
||||
|
||||
#### Revert "res_pjsip_endpoint_identifier_ip: Add endpoint identifier transport ad..
|
||||
Author: George Joseph
|
||||
Date: 2024-05-17
|
||||
|
||||
This reverts PR #602
|
||||
|
||||
Resolves: #GHSA-qqxj-v78h-hrf9
|
||||
|
||||
@@ -1,461 +0,0 @@
|
||||
|
||||
## Change Log for Release asterisk-20.9.0
|
||||
|
||||
### Links:
|
||||
|
||||
- [Full ChangeLog](https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-20.9.0.md)
|
||||
- [GitHub Diff](https://github.com/asterisk/asterisk/compare/20.8.1...20.9.0)
|
||||
- [Tarball](https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20.9.0.tar.gz)
|
||||
- [Downloads](https://downloads.asterisk.org/pub/telephony/asterisk)
|
||||
|
||||
### Summary:
|
||||
|
||||
- Commits: 20
|
||||
- Commit Authors: 9
|
||||
- Issues Resolved: 8
|
||||
- Security Advisories Resolved: 0
|
||||
|
||||
### User Notes:
|
||||
|
||||
- #### app_voicemail_odbc: Allow audio to be kept on disk
|
||||
This commit adds a new voicemail.conf option
|
||||
'odbc_audio_on_disk' which when set causes the ODBC variant of
|
||||
app_voicemail_odbc to leave the message and greeting audio files
|
||||
on disk and only store the message metadata in the database.
|
||||
Much more information can be found in the voicemail.conf.sample
|
||||
file.
|
||||
|
||||
- #### app_queue: Add option to not log Restricted Caller ID to queue_log
|
||||
Add a Queue option log-restricted-caller-id to control whether the Restricted Caller ID
|
||||
will be stored in the queue log.
|
||||
If log-restricted-caller-id=no then the Caller ID will be stripped if the Caller ID is restricted.
|
||||
|
||||
- #### pbx.c: expand fields width of "core show hints"
|
||||
The fields width of "core show hints" were increased.
|
||||
The width of "extension" field to 30 characters and
|
||||
the width of the "device state id" field to 60 characters.
|
||||
|
||||
- #### rtp_engine: add support for multirate RFC2833 digits
|
||||
No change in configuration is required in order to enable this
|
||||
feature. Endpoints configured to use RFC2833 will automatically have this
|
||||
enabled. If the endpoint does not support this, it should not include it in
|
||||
the SDP offer/response.
|
||||
Resolves: #699
|
||||
|
||||
|
||||
### Upgrade Notes:
|
||||
|
||||
- #### app_queue: Add option to not log Restricted Caller ID to queue_log
|
||||
Add a new column to the queues table:
|
||||
queue_log_option_log_restricted ENUM('0','1','off','on','false','true','no','yes')
|
||||
to control whether the Restricted Caller ID will be stored in the queue log.
|
||||
|
||||
|
||||
### Commit Authors:
|
||||
|
||||
- Alexei Gradinari: (2)
|
||||
- Bastian Triller: (1)
|
||||
- Chrsmj: (1)
|
||||
- George Joseph: (4)
|
||||
- Igor Goncharovsky: (1)
|
||||
- Mike Bradeen: (2)
|
||||
- Sean Bright: (7)
|
||||
- Tinet-Mucw: (1)
|
||||
- Walter Doekes: (1)
|
||||
|
||||
## Issue and Commit Detail:
|
||||
|
||||
### Closed Issues:
|
||||
|
||||
- 699: [improvement]: Add support for multi-rate DTMF
|
||||
- 736: [bug]: Seg fault on CLI after PostgreSQL CDR module fails to load for a second time
|
||||
- 765: [improvement]: Add option to not log Restricted Caller ID to queue_log
|
||||
- 770: [improvement]: pbx.c: expand fields width of "core show hints"
|
||||
- 776: [bug] DTMF broken after rtp_engine: add support for multirate RFC2833 digits commit
|
||||
- 783: [bug]: Under certain circumstances a channel snapshot can get orphaned in the cache
|
||||
- 789: [bug]: Mediasec headers aren't sent on outgoing INVITEs
|
||||
- 797: [bug]:
|
||||
|
||||
### Commits By Author:
|
||||
|
||||
- ### Alexei Gradinari (2):
|
||||
- pbx.c: expand fields width of "core show hints"
|
||||
- app_queue: Add option to not log Restricted Caller ID to queue_log
|
||||
|
||||
- ### Bastian Triller (1):
|
||||
- cli: Show configured cache dir
|
||||
|
||||
- ### George Joseph (4):
|
||||
- app_voicemail_odbc: Allow audio to be kept on disk
|
||||
- stasis_channels: Use uniqueid and name to delete old snapshots
|
||||
- security_agreement.c: Always add the Require and Proxy-Require headers
|
||||
- ast-db-manage: Remove duplicate enum creation
|
||||
|
||||
- ### Igor Goncharovsky (1):
|
||||
- res_pjsip_path.c: Fix path when dialing using PJSIP_DIAL_CONTACTS()
|
||||
|
||||
- ### Mike Bradeen (2):
|
||||
- rtp_engine: add support for multirate RFC2833 digits
|
||||
- res_pjsip_sdp_rtp: Add support for default/mismatched 8K RFC 4733/2833 digits
|
||||
|
||||
- ### Sean Bright (7):
|
||||
- file.h: Rename function argument to avoid C++ keyword clash.
|
||||
- bundled_pjproject: Disable UPnP support.
|
||||
- asterisk.c: Don't log an error if .asterisk_history does not exist.
|
||||
- xml.c: Update deprecated libxml2 API usage.
|
||||
- manager.c: Properly terminate `CoreShowChannelMap` event.
|
||||
- pjsip: Add PJSIP_PARSE_URI_FROM dialplan function.
|
||||
- logger.h: Include SCOPE_CALL_WITH_INT_RESULT() in non-dev-mode builds.
|
||||
|
||||
- ### Tinet-mucw (1):
|
||||
- bridge_basic.c: Make sure that ast_bridge_channel is not destroyed while itera..
|
||||
|
||||
- ### Walter Doekes (1):
|
||||
- chan_ooh323: Fix R/0 typo in docs
|
||||
|
||||
- ### chrsmj (1):
|
||||
- cdr_pgsql: Fix crash when the module fails to load multiple times.
|
||||
|
||||
|
||||
### Commit List:
|
||||
|
||||
- res_pjsip_path.c: Fix path when dialing using PJSIP_DIAL_CONTACTS()
|
||||
- res_pjsip_sdp_rtp: Add support for default/mismatched 8K RFC 4733/2833 digits
|
||||
- ast-db-manage: Remove duplicate enum creation
|
||||
- security_agreement.c: Always add the Require and Proxy-Require headers
|
||||
- logger.h: Include SCOPE_CALL_WITH_INT_RESULT() in non-dev-mode builds.
|
||||
- stasis_channels: Use uniqueid and name to delete old snapshots
|
||||
- app_voicemail_odbc: Allow audio to be kept on disk
|
||||
- app_queue: Add option to not log Restricted Caller ID to queue_log
|
||||
- pbx.c: expand fields width of "core show hints"
|
||||
- pjsip: Add PJSIP_PARSE_URI_FROM dialplan function.
|
||||
- manager.c: Properly terminate `CoreShowChannelMap` event.
|
||||
- cli: Show configured cache dir
|
||||
- xml.c: Update deprecated libxml2 API usage.
|
||||
- cdr_pgsql: Fix crash when the module fails to load multiple times.
|
||||
- asterisk.c: Don't log an error if .asterisk_history does not exist.
|
||||
- chan_ooh323: Fix R/0 typo in docs
|
||||
- bundled_pjproject: Disable UPnP support.
|
||||
- file.h: Rename function argument to avoid C++ keyword clash.
|
||||
- rtp_engine: add support for multirate RFC2833 digits
|
||||
|
||||
### Commit Details:
|
||||
|
||||
#### res_pjsip_path.c: Fix path when dialing using PJSIP_DIAL_CONTACTS()
|
||||
Author: Igor Goncharovsky
|
||||
Date: 2024-05-12
|
||||
|
||||
When using the PJSIP_DIAL_CONTACTS() function for use in the Dial()
|
||||
command, the contacts are returned in text form, so the input to
|
||||
the path_outgoing_request() function is a contact value of NULL.
|
||||
The issue was reported in ASTERISK-28211, but was not actually fixed
|
||||
in ASTERISK-30100. This fix brings back the code that was previously
|
||||
removed and adds code to search for a contact to extract the path
|
||||
value from it.
|
||||
|
||||
|
||||
#### res_pjsip_sdp_rtp: Add support for default/mismatched 8K RFC 4733/2833 digits
|
||||
Author: Mike Bradeen
|
||||
Date: 2024-06-21
|
||||
|
||||
After change made in 624f509 to add support for non 8K RFC 4733/2833 digits,
|
||||
Asterisk would only accept RFC 4733/2833 offers that matched the sample rate of
|
||||
the negotiated codec(s).
|
||||
|
||||
This change allows Asterisk to accept 8K RFC 4733/2833 offers if the UAC
|
||||
offfers 8K RFC 4733/2833 but negotiates for a non 8K bitrate codec.
|
||||
|
||||
A number of corresponding tests in tests/channels/pjsip/dtmf_sdp also needed to
|
||||
be re-written to allow for these scenarios.
|
||||
|
||||
Fixes: #776
|
||||
|
||||
#### ast-db-manage: Remove duplicate enum creation
|
||||
Author: George Joseph
|
||||
Date: 2024-07-08
|
||||
|
||||
Remove duplicate creation of ast_bool_values from
|
||||
2b7c507d7d12_add_queue_log_option_log_restricted_.py. This was
|
||||
causing alembic upgrades to fail since the enum was already created
|
||||
in fe6592859b85_fix_mwi_subscribe_replaces_.py back in 2018.
|
||||
|
||||
Resolves: #797
|
||||
|
||||
#### security_agreement.c: Always add the Require and Proxy-Require headers
|
||||
Author: George Joseph
|
||||
Date: 2024-07-03
|
||||
|
||||
The `Require: mediasec` and `Proxy-Require: mediasec` headers need
|
||||
to be sent whenever we send `Security-Client` or `Security-Verify`
|
||||
headers but the logic to do that was only in add_security_headers()
|
||||
in res_pjsip_outbound_register. So while we were sending them on
|
||||
REGISTER requests, we weren't sending them on INVITE requests.
|
||||
|
||||
This commit moves the logic to send the two headers out of
|
||||
res_pjsip_outbound_register:add_security_headers() and into
|
||||
security_agreement:ast_sip_add_security_headers(). This way
|
||||
they're always sent when we send `Security-Client` or
|
||||
`Security-Verify`.
|
||||
|
||||
Resolves: #789
|
||||
|
||||
#### logger.h: Include SCOPE_CALL_WITH_INT_RESULT() in non-dev-mode builds.
|
||||
Author: Sean Bright
|
||||
Date: 2024-06-29
|
||||
|
||||
Fixes #785
|
||||
|
||||
|
||||
#### stasis_channels: Use uniqueid and name to delete old snapshots
|
||||
Author: George Joseph
|
||||
Date: 2024-05-08
|
||||
|
||||
Whenver a new channel snapshot is created or when a channel is
|
||||
destroyed, we need to delete any existing channel snapshot from
|
||||
the snapshot cache. Historically, we used the channel->snapshot
|
||||
pointer to delete any existing snapshots but this has two issues.
|
||||
|
||||
First, if something (possibly ast_channel_internal_swap_snapshots)
|
||||
sets channel->snapshot to NULL while there's still a snapshot in
|
||||
the cache, we wouldn't be able to delete it and it would be orphaned
|
||||
when the channel is destroyed. Since we use the cache to list
|
||||
channels from the CLI, AMI and ARI, it would appear as though the
|
||||
channel was still there when it wasn't.
|
||||
|
||||
Second, since there are actually two caches, one indexed by the
|
||||
channel's uniqueid, and another indexed by the channel's name,
|
||||
deleting from the caches by pointer requires a sequential search of
|
||||
all of the hash table buckets in BOTH caches to find the matching
|
||||
snapshots. Not very efficient.
|
||||
|
||||
So, we now delete from the caches using the channel's uniqueid
|
||||
and name. This solves both issues.
|
||||
|
||||
This doesn't address how channel->snapshot might have been set
|
||||
to NULL in the first place because although we have concrete
|
||||
evidence that it's happening, we haven't been able to reproduce it.
|
||||
|
||||
Resolves: #783
|
||||
|
||||
#### app_voicemail_odbc: Allow audio to be kept on disk
|
||||
Author: George Joseph
|
||||
Date: 2024-04-09
|
||||
|
||||
This commit adds a new voicemail.conf option 'odbc_audio_on_disk'
|
||||
which when set causes the ODBC variant of app_voicemail to leave
|
||||
the message and greeting audio files on disk and only store the
|
||||
message metadata in the database. This option came from a concern
|
||||
that the database could grow to large and cause remote access
|
||||
and/or replication to become slow. In a clustering situation
|
||||
with this option, all asterisk instances would share the same
|
||||
database for the metadata and either use a shared filesystem
|
||||
or other filesystem replication service much more suitable
|
||||
for synchronizing files.
|
||||
|
||||
The changes to app_voicemail to implement this feature were actually
|
||||
quite small but due to the complexity of the module, the actual
|
||||
source code changes were greater. They fall into the following
|
||||
categories:
|
||||
|
||||
* Tracing. The module is so complex that it was impossible to
|
||||
figure out the path taken for various scenarios without the addition
|
||||
of many SCOPE_ENTER, SCOPE_EXIT and ast_trace statements, even in
|
||||
code that's not related to the functional change. Making this worse
|
||||
was the fact that many "if" statements in this module didn't use
|
||||
braces. Since the tracing macros add multiple statements, many "if"
|
||||
statements had to be converted to use braces.
|
||||
|
||||
* Excessive use of PATH_MAX. Previous maintainers of this module
|
||||
used PATH_MAX to allocate character arrays for filesystem paths
|
||||
and SQL statements as though they cost nothing. In fact, PATH_MAX
|
||||
is defined as 4096 bytes! Some functions had (and still have)
|
||||
multiples of these. One function has 7. Given that the vast
|
||||
majority of installations use the default spool directory path
|
||||
`/var/spool/asterisk/voicemail`, the actual path length is usually
|
||||
less than 80 bytes. That's over 4000 bytes wasted. It was the
|
||||
same for SQL statement buffers. A 4K buffer for statement that
|
||||
only needed 60 bytes. All of these PATH_MAX allocations in the
|
||||
ODBC related code were changed to dynamically allocated buffers.
|
||||
The rest will have to be addressed separately.
|
||||
|
||||
* Bug fixes. During the development of this feature, several
|
||||
pre-existing ODBC related bugs were discovered and fixed. They
|
||||
had to do with leaving orphaned files on disk, not preserving
|
||||
original message ids when moving messages between folders,
|
||||
not honoring the "formats" config parameter in certain circumstances,
|
||||
etc.
|
||||
|
||||
UserNote: This commit adds a new voicemail.conf option
|
||||
'odbc_audio_on_disk' which when set causes the ODBC variant of
|
||||
app_voicemail_odbc to leave the message and greeting audio files
|
||||
on disk and only store the message metadata in the database.
|
||||
Much more information can be found in the voicemail.conf.sample
|
||||
file.
|
||||
|
||||
|
||||
#### bridge_basic.c: Make sure that ast_bridge_channel is not destroyed while itera..
|
||||
Author: Tinet-mucw
|
||||
Date: 2024-06-13
|
||||
|
||||
Resolves: https://github.com/asterisk/asterisk/issues/768
|
||||
|
||||
#### app_queue: Add option to not log Restricted Caller ID to queue_log
|
||||
Author: Alexei Gradinari
|
||||
Date: 2024-06-12
|
||||
|
||||
Add a queue option log-restricted-caller-id to strip the Caller ID when storing the ENTERQUEUE event
|
||||
in the queue log if the Caller ID is restricted.
|
||||
|
||||
Resolves: #765
|
||||
|
||||
UpgradeNote: Add a new column to the queues table:
|
||||
queue_log_option_log_restricted ENUM('0','1','off','on','false','true','no','yes')
|
||||
to control whether the Restricted Caller ID will be stored in the queue log.
|
||||
|
||||
UserNote: Add a Queue option log-restricted-caller-id to control whether the Restricted Caller ID
|
||||
will be stored in the queue log.
|
||||
If log-restricted-caller-id=no then the Caller ID will be stripped if the Caller ID is restricted.
|
||||
|
||||
|
||||
#### pbx.c: expand fields width of "core show hints"
|
||||
Author: Alexei Gradinari
|
||||
Date: 2024-06-13
|
||||
|
||||
The current width for "extension" is 20 and "device state id" is 20, which is too small.
|
||||
The "extension" field contains "ext"@"context", so 20 characters is not enough.
|
||||
The "device state id" field, for example for Queue pause state contains Queue:"queue_name"_pause_PSJIP/"endpoint", so the 20 characters is not enough.
|
||||
|
||||
Increase the width of "extension" field to 30 characters and the width of the "device state id" field to 60 characters.
|
||||
|
||||
Resolves: #770
|
||||
|
||||
UserNote: The fields width of "core show hints" were increased.
|
||||
The width of "extension" field to 30 characters and
|
||||
the width of the "device state id" field to 60 characters.
|
||||
|
||||
|
||||
#### pjsip: Add PJSIP_PARSE_URI_FROM dialplan function.
|
||||
Author: Sean Bright
|
||||
Date: 2024-06-02
|
||||
|
||||
Various SIP headers permit a URI to be prefaced with a `display-name`
|
||||
production that can include characters (like commas and parentheses)
|
||||
that are problematic for Asterisk's dialplan parser and, specifically
|
||||
in the case of this patch, the PJSIP_PARSE_URI function.
|
||||
|
||||
This patch introduces a new function - `PJSIP_PARSE_URI_FROM` - that
|
||||
behaves identically to `PJSIP_PARSE_URI` except that the first
|
||||
argument is now a variable name and not a literal URI.
|
||||
|
||||
Fixes #756
|
||||
|
||||
|
||||
#### manager.c: Properly terminate `CoreShowChannelMap` event.
|
||||
Author: Sean Bright
|
||||
Date: 2024-06-10
|
||||
|
||||
Fixes #761
|
||||
|
||||
|
||||
#### cli: Show configured cache dir
|
||||
Author: Bastian Triller
|
||||
Date: 2024-06-07
|
||||
|
||||
Since Asterisk 19 it is possible to cache recorded files into another
|
||||
directory [1] [2].
|
||||
Show configured location of cache dir in CLI's core show settings.
|
||||
|
||||
[1] ASTERISK-29143
|
||||
[2] b08427134fd51bb549f198e9f60685f2680c68d7
|
||||
|
||||
|
||||
#### xml.c: Update deprecated libxml2 API usage.
|
||||
Author: Sean Bright
|
||||
Date: 2024-05-23
|
||||
|
||||
Two functions are deprecated as of libxml2 2.12:
|
||||
|
||||
* xmlSubstituteEntitiesDefault
|
||||
* xmlParseMemory
|
||||
|
||||
So we update those with supported API.
|
||||
|
||||
Additionally, `res_calendar_caldav` has been updated to use libxml2's
|
||||
xmlreader API instead of the SAX2 API which has always felt a little
|
||||
hacky (see deleted comment block in `res_calendar_caldav.c`).
|
||||
|
||||
The xmlreader API has been around since libxml2 2.5.0 which was
|
||||
released in 2003.
|
||||
|
||||
Fixes #725
|
||||
|
||||
|
||||
#### cdr_pgsql: Fix crash when the module fails to load multiple times.
|
||||
Author: chrsmj
|
||||
Date: 2024-05-16
|
||||
|
||||
Missing or corrupt cdr_pgsql.conf configuration file can cause the
|
||||
second attempt to load the PostgreSQL CDR module to crash Asterisk via
|
||||
the Command Line Interface because a null CLI command is registered on
|
||||
the first failed attempt to load the module.
|
||||
|
||||
Resolves: #736
|
||||
|
||||
#### asterisk.c: Don't log an error if .asterisk_history does not exist.
|
||||
Author: Sean Bright
|
||||
Date: 2024-05-27
|
||||
|
||||
Fixes #751
|
||||
|
||||
|
||||
#### chan_ooh323: Fix R/0 typo in docs
|
||||
Author: Walter Doekes
|
||||
Date: 2024-05-27
|
||||
|
||||
|
||||
#### bundled_pjproject: Disable UPnP support.
|
||||
Author: Sean Bright
|
||||
Date: 2024-05-24
|
||||
|
||||
Fixes #747
|
||||
|
||||
|
||||
#### file.h: Rename function argument to avoid C++ keyword clash.
|
||||
Author: Sean Bright
|
||||
Date: 2024-05-24
|
||||
|
||||
Fixes #744
|
||||
|
||||
|
||||
#### rtp_engine: add support for multirate RFC2833 digits
|
||||
Author: Mike Bradeen
|
||||
Date: 2024-04-08
|
||||
|
||||
Add RFC2833 DTMF support for 16K, 24K, and 32K bitrate codecs.
|
||||
|
||||
Asterisk currently treats RFC2833 Digits as a single rtp payload type
|
||||
with a fixed bitrate of 8K. This change would expand that to 8, 16,
|
||||
24 and 32K.
|
||||
|
||||
This requires checking the offered rtp types for any of these bitrates
|
||||
and then adding an offer for each (if configured for RFC2833.) DTMF
|
||||
generation must also be changed in order to look at the current outbound
|
||||
codec in order to generate appropriately timed rtp.
|
||||
|
||||
For cases where no outgoing audio has yet been sent prior to digit
|
||||
generation, Asterisk now has a concept of a 'preferred' codec based on
|
||||
offer order.
|
||||
|
||||
On inbound calls Asterisk will mimic the payload types of the RFC2833
|
||||
digits.
|
||||
|
||||
On outbound calls Asterisk will choose the next free payload types starting
|
||||
with 101.
|
||||
|
||||
UserNote: No change in configuration is required in order to enable this
|
||||
feature. Endpoints configured to use RFC2833 will automatically have this
|
||||
enabled. If the endpoint does not support this, it should not include it in
|
||||
the SDP offer/response.
|
||||
|
||||
Resolves: #699
|
||||
|
||||
@@ -1,69 +0,0 @@
|
||||
|
||||
## Change Log for Release asterisk-20.9.1
|
||||
|
||||
### Links:
|
||||
|
||||
- [Full ChangeLog](https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-20.9.1.md)
|
||||
- [GitHub Diff](https://github.com/asterisk/asterisk/compare/20.9.0...20.9.1)
|
||||
- [Tarball](https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20.9.1.tar.gz)
|
||||
- [Downloads](https://downloads.asterisk.org/pub/telephony/asterisk)
|
||||
|
||||
### Summary:
|
||||
|
||||
- Commits: 2
|
||||
- Commit Authors: 1
|
||||
- Issues Resolved: 2
|
||||
- Security Advisories Resolved: 0
|
||||
|
||||
### User Notes:
|
||||
|
||||
|
||||
### Upgrade Notes:
|
||||
|
||||
|
||||
### Commit Authors:
|
||||
|
||||
- George Joseph: (2)
|
||||
|
||||
## Issue and Commit Detail:
|
||||
|
||||
### Closed Issues:
|
||||
|
||||
- 819: [bug]: Typo in voicemail.conf.sample that stops it from loading when using "make samples"
|
||||
- 822: [bug]: segfault in main/rtp_engine.c:1489 after updating 20.8.1 -> 20.9.0
|
||||
|
||||
### Commits By Author:
|
||||
|
||||
- #### George Joseph (2):
|
||||
- voicemail.conf.sample: Fix ':' comment typo
|
||||
- rtp_engine.c: Prevent segfault in ast_rtp_codecs_payloads_unset()
|
||||
|
||||
|
||||
### Commit List:
|
||||
|
||||
- rtp_engine.c: Prevent segfault in ast_rtp_codecs_payloads_unset()
|
||||
- voicemail.conf.sample: Fix ':' comment typo
|
||||
|
||||
### Commit Details:
|
||||
|
||||
#### rtp_engine.c: Prevent segfault in ast_rtp_codecs_payloads_unset()
|
||||
Author: George Joseph
|
||||
Date: 2024-07-25
|
||||
|
||||
There can be empty slots in payload_mapping_tx corresponding to
|
||||
dynamic payload types that haven't been seen before so we now
|
||||
check for NULL before attempting to use 'type' in the call to
|
||||
ast_format_cmp.
|
||||
|
||||
Note: Currently only chan_sip calls ast_rtp_codecs_payloads_unset()
|
||||
|
||||
Resolves: #822
|
||||
|
||||
#### voicemail.conf.sample: Fix ':' comment typo
|
||||
Author: George Joseph
|
||||
Date: 2024-07-24
|
||||
|
||||
...and removed an errant trailing space.
|
||||
|
||||
Resolves: #819
|
||||
|
||||
@@ -1,65 +0,0 @@
|
||||
|
||||
## Change Log for Release asterisk-20.9.2
|
||||
|
||||
### Links:
|
||||
|
||||
- [Full ChangeLog](https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-20.9.2.md)
|
||||
- [GitHub Diff](https://github.com/asterisk/asterisk/compare/20.9.1...20.9.2)
|
||||
- [Tarball](https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20.9.2.tar.gz)
|
||||
- [Downloads](https://downloads.asterisk.org/pub/telephony/asterisk)
|
||||
|
||||
### Summary:
|
||||
|
||||
- Commits: 1
|
||||
- Commit Authors: 1
|
||||
- Issues Resolved: 0
|
||||
- Security Advisories Resolved: 1
|
||||
- [GHSA-c4cg-9275-6w44](https://github.com/asterisk/asterisk/security/advisories/GHSA-c4cg-9275-6w44): Write=originate, is sufficient permissions for code execution / System() dialplan
|
||||
|
||||
### User Notes:
|
||||
|
||||
|
||||
### Upgrade Notes:
|
||||
|
||||
|
||||
### Commit Authors:
|
||||
|
||||
- George Joseph: (1)
|
||||
|
||||
## Issue and Commit Detail:
|
||||
|
||||
### Closed Issues:
|
||||
|
||||
- !GHSA-c4cg-9275-6w44: Write=originate, is sufficient permissions for code execution / System() dialplan
|
||||
|
||||
### Commits By Author:
|
||||
|
||||
- #### George Joseph (1):
|
||||
- manager.c: Add entries to Originate blacklist
|
||||
|
||||
|
||||
### Commit List:
|
||||
|
||||
- manager.c: Add entries to Originate blacklist
|
||||
|
||||
### Commit Details:
|
||||
|
||||
#### manager.c: Add entries to Originate blacklist
|
||||
Author: George Joseph
|
||||
Date: 2024-07-22
|
||||
|
||||
Added Reload and DBdeltree to the list of dialplan application that
|
||||
can't be executed via the Originate manager action without also
|
||||
having write SYSTEM permissions.
|
||||
|
||||
Added CURL, DB*, FILE, ODBC and REALTIME* to the list of dialplan
|
||||
functions that can't be executed via the Originate manager action
|
||||
without also having write SYSTEM permissions.
|
||||
|
||||
If the Queue application is attempted to be run by the Originate
|
||||
manager action and an AGI parameter is specified in the app data,
|
||||
it'll be rejected unless the manager user has either the AGI or
|
||||
SYSTEM permissions.
|
||||
|
||||
Resolves: #GHSA-c4cg-9275-6w44
|
||||
|
||||
@@ -1,63 +0,0 @@
|
||||
|
||||
## Change Log for Release asterisk-20.9.3
|
||||
|
||||
### Links:
|
||||
|
||||
- [Full ChangeLog](https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-20.9.3.md)
|
||||
- [GitHub Diff](https://github.com/asterisk/asterisk/compare/20.9.2...20.9.3)
|
||||
- [Tarball](https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20.9.3.tar.gz)
|
||||
- [Downloads](https://downloads.asterisk.org/pub/telephony/asterisk)
|
||||
|
||||
### Summary:
|
||||
|
||||
- Commits: 1
|
||||
- Commit Authors: 1
|
||||
- Issues Resolved: 0
|
||||
- Security Advisories Resolved: 1
|
||||
- [GHSA-v428-g3cw-7hv9](https://github.com/asterisk/asterisk/security/advisories/GHSA-v428-g3cw-7hv9): A malformed Contact or Record-Route URI in an incoming SIP request can cause Asterisk to crash when res_resolver_unbound is used
|
||||
|
||||
### User Notes:
|
||||
|
||||
|
||||
### Upgrade Notes:
|
||||
|
||||
|
||||
### Commit Authors:
|
||||
|
||||
- George Joseph: (1)
|
||||
|
||||
## Issue and Commit Detail:
|
||||
|
||||
### Closed Issues:
|
||||
|
||||
- !GHSA-v428-g3cw-7hv9: A malformed Contact or Record-Route URI in an incoming SIP request can cause Asterisk to crash when res_resolver_unbound is used
|
||||
|
||||
### Commits By Author:
|
||||
|
||||
- #### George Joseph (1):
|
||||
- res_resolver_unbound: Test for NULL ub_result in unbound_resolver_callback
|
||||
|
||||
|
||||
### Commit List:
|
||||
|
||||
- res_resolver_unbound: Test for NULL ub_result in unbound_resolver_callback
|
||||
|
||||
### Commit Details:
|
||||
|
||||
#### res_resolver_unbound: Test for NULL ub_result in unbound_resolver_callback
|
||||
Author: George Joseph
|
||||
Date: 2024-08-12
|
||||
|
||||
The ub_result pointer passed to unbound_resolver_callback by
|
||||
libunbound can be NULL if the query was for something malformed
|
||||
like `.1` or `[.1]`. If it is, we now set a 'ns_r_formerr' result
|
||||
and return instead of crashing with a SEGV. This causes pjproject
|
||||
to simply cancel the transaction with a "No answer record in the DNS
|
||||
response" error. The existing "off nominal" unit test was also
|
||||
updated to check this condition.
|
||||
|
||||
Although not necessary for this fix, we also made
|
||||
ast_dns_resolver_completed() tolerant of a NULL result.
|
||||
|
||||
Resolves: GHSA-v428-g3cw-7hv9
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
70
HARDWARE
Normal file
70
HARDWARE
Normal file
@@ -0,0 +1,70 @@
|
||||
A PBX is only really useful if you can get calls into it. Of course, you
|
||||
can use Asterisk with VoIP calls (SIP, H.323, IAX), but you can also talk
|
||||
to the real PSTN through various cards.
|
||||
|
||||
Supported Hardware is divided into two general groups: Zaptel devices and
|
||||
non-zaptel devices. The Zaptel compatible hardware supports pseudo-TDM
|
||||
conferencing and all call features through chan_zap, whereas non-zaptel
|
||||
compatible hardware may have different features.
|
||||
|
||||
Zaptel compatible hardware
|
||||
==========================
|
||||
|
||||
-- Digium (Primary author of Asterisk)
|
||||
http://www.digium.com, http://store.yahoo.com/asteriskpbx
|
||||
|
||||
* Wildcard X100P - Single FXO interface connects to Loopstart phone
|
||||
line
|
||||
|
||||
* Wildcard T400P (obsolete) - Quad T1 interface connects to four T1/PRI
|
||||
interfaces. Supports RBS and PRI voice and PPP, FR, and HDLC data.
|
||||
|
||||
* Wildcard E400P (obsolete)- Quad E1 interface connects to four E1/PRI
|
||||
(or PRA) interfaces. Supports PRA/PRI, EuroISDN voice and data.
|
||||
|
||||
* Wildcard T100P - Single T1 interface connects to a single T1/PRI
|
||||
interface. Supports RBS and PRI voice and PPP, FR, and HDLC data.
|
||||
|
||||
* Wildcard E100P - Single E1 interface connects to a single E1/PRI (or PRA)
|
||||
interface. Supports PRA/PRI, EuroISDN voice and PPP, FR, HDLC data.
|
||||
|
||||
* Wildcard S100U - Single FXS interface connects to a standard analog
|
||||
telephone.
|
||||
|
||||
* Wildcard TDM400P - Quad Modular FXS interface connects to standard
|
||||
analog telephones.
|
||||
|
||||
* Wildcard TE410P - Quad T1/E1 switchable interface. Supports PRI and
|
||||
RBS signalling, as well as PPP, FR, and HDLC data modes.
|
||||
|
||||
Non-zaptel compatible hardware
|
||||
==============================
|
||||
|
||||
-- QuickNet, Inc.
|
||||
http://www.quicknet.net
|
||||
|
||||
* Internet PhoneJack - Single FXS interface. Supports Linux telephony
|
||||
interface. DSP compression built-in.
|
||||
|
||||
* Internet LineJack - Single FXS or FXO interface. Supports Linux
|
||||
telephony interface.
|
||||
|
||||
|
||||
Miscellaneous other interfaces
|
||||
==============================
|
||||
|
||||
-- ISDN4Linux
|
||||
http://www.isdn4linux.de/
|
||||
|
||||
* Any ISDN terminal adapter supported by isdn4linux should provide
|
||||
connectivity.
|
||||
|
||||
-- ALSA
|
||||
http://www.alsa-project.org
|
||||
|
||||
* Any ALSA compatible full-duplex sound card
|
||||
|
||||
-- OSS
|
||||
http://www.opensound.com
|
||||
|
||||
* Any OSS compatible full-duplex sound card
|
||||
64
LICENSE
64
LICENSE
@@ -1,60 +1,56 @@
|
||||
Asterisk is distributed under the GNU General Public License version 2
|
||||
and is also available under alternative licenses negotiated directly
|
||||
with Sangoma US Inc. If you obtained Asterisk under the GPL, then the GPL
|
||||
with Digium, Inc. If you obtained Asterisk under the GPL, then the GPL
|
||||
applies to all loadable Asterisk modules used on your system as well,
|
||||
except as defined below. The GPL (version 2) is included in this
|
||||
source tree in the file COPYING.
|
||||
|
||||
This package also includes various components that are not part of
|
||||
Asterisk itself; these components are in the 'contrib' directory
|
||||
and its subdirectories. These components are also distributed under the
|
||||
GPL version 2 as well.
|
||||
|
||||
Sangoma US Inc. holds copyright and/or sufficient licenses to all
|
||||
components of the Asterisk package, and therefore can grant, at its
|
||||
sole discretion, the ability for companies, individuals, or
|
||||
organizations to create proprietary or Open Source (even if not GPL)
|
||||
modules which may be dynamically linked at runtime with the portions
|
||||
of Asterisk which fall under our copyright/license umbrella, or are
|
||||
distributed under more flexible licenses than GPL.
|
||||
Digium, Inc. (formerly Linux Support Services) holds copyright
|
||||
and/or sufficient licenses to all components of the Asterisk
|
||||
package, and therefore can grant, at its sole discretion, the ability
|
||||
for companies, individuals, or organizations to create proprietary or
|
||||
Open Source (even if not GPL) modules which may be dynamically linked at
|
||||
runtime with the portions of Asterisk which fall under our
|
||||
copyright/license umbrella, or are distributed under more flexible
|
||||
licenses than GPL.
|
||||
|
||||
If you wish to use our code in other GPL programs, don't worry --
|
||||
there is no requirement that you provide the same exception in your
|
||||
GPL'd products (although if you've written a module for Asterisk we
|
||||
would strongly encourage you to make the same exception that we do).
|
||||
|
||||
Specific permission is also granted to link Asterisk with OpenSSL, OpenH323
|
||||
UniMRCP, and/or the UW IMAP Toolkit and distribute the resulting binary files.
|
||||
Specific permission is also granted to link Asterisk with OpenSSL and
|
||||
OpenH323.
|
||||
|
||||
In addition, Asterisk implements several management/control protocols.
|
||||
This includes the Asterisk Manager Interface (AMI), the Asterisk Gateway
|
||||
Interface (AGI), and the Asterisk REST Interface (ARI). It is our belief
|
||||
that applications using these protocols to manage or control an Asterisk
|
||||
instance do not have to be licensed under the GPL or a compatible license,
|
||||
as we believe these protocols do not create a 'derivative work' as referred
|
||||
to in the GPL. However, should any court or other judiciary body find that
|
||||
these protocols do fall under the terms of the GPL, then we hereby grant you a
|
||||
license to use these protocols in combination with Asterisk in external
|
||||
In addition, Asterisk implements two management/control protocols: the
|
||||
Asterisk Manager Interface (AMI) and the Asterisk Gateway Interface
|
||||
(AGI). It is our belief that applications using these protocols to
|
||||
manage or control an Asterisk instance do not have to be licensed
|
||||
under the GPL or a compatible license, as we believe these protocols
|
||||
do not create a 'derivative work' as referred to in the GPL. However,
|
||||
should any court or other judiciary body find that these protocols do
|
||||
fall under the terms of the GPL, then we hereby grant you a license to
|
||||
use these protocols in combination with Asterisk in external
|
||||
applications licensed under any license you wish.
|
||||
|
||||
The 'Asterisk' name and logos are trademarks owned by Sangoma US Inc,
|
||||
The 'Asterisk' name and logos are trademarks owned by Digium, Inc.,
|
||||
and use of them is subject to our trademark licensing policies. If you
|
||||
wish to use these trademarks for purposes other than simple
|
||||
redistribution of Asterisk source code obtained from Sangoma, you
|
||||
redistribution of Asterisk source code obtained from Digium, you
|
||||
should contact our licensing department to determine the necessary
|
||||
steps you must take. For more information on this policy, please read:
|
||||
|
||||
https://www.sangoma.com/wp-content/uploads/Sangoma-Trademark-Policy-1.pdf
|
||||
steps you must take.
|
||||
|
||||
If you have any questions regarding our licensing policy, please
|
||||
contact us:
|
||||
|
||||
+1.877.344.4861 (via telephone in the USA)
|
||||
+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)
|
||||
legal@sangoma.com (via email)
|
||||
IAX2/misery.digium.com/6000 (via IAX2)
|
||||
licensing@digium.com (via email)
|
||||
|
||||
Sangoma US Inc.
|
||||
301 N. Cattlemen Road, Suite 300
|
||||
Sarasota, FL 34232
|
||||
Digium, Inc.
|
||||
150 West Park Loop
|
||||
Suite 100
|
||||
Huntsville, AL 35806
|
||||
USA
|
||||
|
||||
@@ -1,162 +0,0 @@
|
||||
#
|
||||
# Asterisk -- An open source telephony toolkit.
|
||||
#
|
||||
# Makefile rules for subdirectories containing modules
|
||||
#
|
||||
# Copyright (C) 2006, Digium, Inc.
|
||||
#
|
||||
# Kevin P. Fleming <kpfleming@digium.com>
|
||||
#
|
||||
# This program is free software, distributed under the terms of
|
||||
# the GNU General Public License
|
||||
#
|
||||
|
||||
# Makefile rules for building modules.
|
||||
|
||||
# In most cases, we set target-specific variables for certain targets
|
||||
# (remember that they apply recursively to prerequisites).
|
||||
# Also note that we can only set one variable per rule, so we have to
|
||||
# repeat the left hand side to set multiple variables.
|
||||
|
||||
include $(ASTTOPDIR)/Makefile.rules
|
||||
|
||||
# If MODULE_PREFIX is defined, use it to run the standard functions to set
|
||||
# C_MODS, CC_MODS and LOADABLE_MODS
|
||||
# Each word of MODULE_PREFIX is a prefix for filenames that we consider
|
||||
# valid C or CC modules (eg. app, func ...). Note that the underscore
|
||||
# is added here, and does not need to be in MODULE_PREFIX
|
||||
#
|
||||
# Use MODULE_EXCLUDE to specify additional modules to exclude.
|
||||
|
||||
ifneq ($(MODULE_PREFIX),)
|
||||
ALL_C_MODS:=
|
||||
ALL_CC_MODS:=
|
||||
ALL_C_MODS+=$(foreach p,$(MODULE_PREFIX),$(patsubst %.c,%,$(wildcard $(p)_*.c)))
|
||||
ALL_CC_MODS+=$(foreach p,$(MODULE_PREFIX),$(patsubst %.cc,%,$(wildcard $(p)_*.cc)))
|
||||
endif
|
||||
|
||||
C_MODS:=$(filter-out $(MENUSELECT_$(MENUSELECT_CATEGORY)),$(ALL_C_MODS))
|
||||
CC_MODS:=$(filter-out $(MENUSELECT_$(MENUSELECT_CATEGORY)),$(ALL_CC_MODS))
|
||||
|
||||
LOADABLE_MODS:=$(C_MODS) $(CC_MODS)
|
||||
|
||||
# Both C++ and C++ sources need their module name in AST_MODULE
|
||||
# We also pass whatever _INCLUDE list is generated by menuselect
|
||||
# (they are stored in file 'makeopts'). This is also necessary
|
||||
# for components used to build modules, which can't be determined
|
||||
# by the rules in this file, so the MOD_ASTCFLAGS definition
|
||||
# is used to collect the required flags for a module... which can
|
||||
# then be used any place they are required.
|
||||
|
||||
MOD_ASTCFLAGS=\
|
||||
-DAST_MODULE=\"$(1)\" \
|
||||
-DAST_MODULE_SELF_SYM=__internal_$(1)_self \
|
||||
$(MENUSELECT_OPTS_$(1):%=-D%) \
|
||||
$(foreach dep,$(MENUSELECT_DEPENDS_$(1)),$(value $(dep)_INCLUDE))
|
||||
|
||||
define MOD_ADD_SOURCE
|
||||
$(1).so: $$(subst $(3),$(5),$(2))
|
||||
$$(subst $(3),$(5),$(2)): _ASTCFLAGS+=$$(call MOD_ASTCFLAGS,$(1))
|
||||
.$(1).moduleinfo: MODULEINFO_EXTRA_OUTPUT=" $$(addprefix $$(SUBDIR)/,$$(subst $(3),$(5),$(2)) $$(subst $(3),$(4),$(2)))"
|
||||
# The use of wildcard ensures that 'make menuselect' will not fail for modules that
|
||||
# require additional source downloads.
|
||||
.$(1).moduleinfo: $(wildcard $(2))
|
||||
|
||||
clean:: clean-$(1)$(3)
|
||||
|
||||
clean-$(1)$(3):
|
||||
rm -f $$(subst $(3),$(4),$(2)) $$(subst $(3),$(5),$(2)) $$(subst $(3),$(6),$(2)) $$(subst $(3),$(7),$(2))
|
||||
|
||||
endef
|
||||
|
||||
MOD_ADD_C=$(eval $(call MOD_ADD_SOURCE,$(1),$(2),.c,.i,.o,.gcda,.gcno))
|
||||
MOD_ADD_CC=$(eval $(call MOD_ADD_SOURCE,$(1),$(2),.cc,.ii,.oo,.gcda,.gcno))
|
||||
|
||||
$(addsuffix .oo,$(CC_MODS)) $(addsuffix .o,$(C_MODS)): \
|
||||
_ASTCFLAGS+=$(call MOD_ASTCFLAGS,$*)
|
||||
|
||||
ifeq ($(findstring $(OSARCH), mingw32 cygwin ),)
|
||||
# don't define -fPIC on mingw32 and cygwin, it is the default
|
||||
$(LOADABLE_MODS:%=%.so): _ASTCFLAGS+=-fPIC
|
||||
endif
|
||||
|
||||
# For loadable modules, pass _LIB and _LDFLAGS from menuselect.
|
||||
$(LOADABLE_MODS:%=%.so): LIBS+=$(foreach dep,$(MENUSELECT_DEPENDS_$*),$(value $(dep)_LIB))
|
||||
$(LOADABLE_MODS:%=%.so): _ASTLDFLAGS+=$(foreach dep,$(MENUSELECT_DEPENDS_$*),$(value $(dep)_LDFLAGS))
|
||||
|
||||
$(addsuffix .so,$(filter $(LOADABLE_MODS),$(C_MODS))): %.so: %.o
|
||||
$(addsuffix .so,$(filter $(LOADABLE_MODS),$(CC_MODS))): %.so: %.oo
|
||||
|
||||
.PHONY: clean uninstall _all moduleinfo makeopts
|
||||
|
||||
_all: $(LOADABLE_MODS:%=%.so)
|
||||
ifneq ($(findstring $(OSARCH), mingw32 cygwin ),)
|
||||
# linker options and extra libraries for cygwin
|
||||
SOLINK=-Wl,--out-implib=lib$@.a -shared
|
||||
LIBS+=-L$(ASTTOPDIR)/main -lasterisk -L$(ASTTOPDIR)/res $($@_LIBS)
|
||||
# additional libraries in res/
|
||||
endif
|
||||
|
||||
clean::
|
||||
rm -f *.so *.o *.oo *.eo *.i *.ii
|
||||
rm -f .*.d
|
||||
rm -f *.s *.i
|
||||
rm -f *.gcda *.gcno
|
||||
rm -f modules.link
|
||||
|
||||
install:: all
|
||||
@echo "Installing modules from `basename $(CURDIR)`..."
|
||||
@for x in $(LOADABLE_MODS:%=%.so); do $(INSTALL) -m 755 $$x "$(DESTDIR)$(ASTMODDIR)" ; done
|
||||
ifneq ($(findstring :,$(XMLSTARLET)$(BASH)),:)
|
||||
@if [ -f .moduleinfo ] ; then \
|
||||
declare -A DISABLED_MODS ;\
|
||||
for x in $(MENUSELECT_$(MENUSELECT_CATEGORY)) ; do DISABLED_MODS[$${x}]=1 ; done ;\
|
||||
EXTERNAL_MODS=$$($(XMLSTARLET) sel -t -m "/category/member[support_level = 'external']" -v "@name" -n .moduleinfo) ;\
|
||||
for x in $${EXTERNAL_MODS} ; do \
|
||||
if [ -z "$${DISABLED_MODS[$${x}]}" ] ; then \
|
||||
PJPROJECT_BUNDLED=${PJPROJECT_BUNDLED} $(ASTTOPDIR)/build_tools/download_externals $${x} ;\
|
||||
fi ;\
|
||||
done ;\
|
||||
fi
|
||||
endif
|
||||
|
||||
uninstall::
|
||||
|
||||
dist-clean::
|
||||
rm -f .*.moduleinfo .moduleinfo
|
||||
rm -f .*.makeopts .makeopts
|
||||
rm -f *.exports
|
||||
|
||||
.%.moduleinfo: %.c
|
||||
@echo "<member name=\"$*\" displayname=\"$(shell $(GREP) -e AST_MODULE_INFO $< | head -n 1 | cut -d '"' -f 2)\" remove_on_change=\"$(SUBDIR)/$*.o $(SUBDIR)/$*.i $(SUBDIR)/$*.so$(MODULEINFO_EXTRA_OUTPUT)\">" > $@
|
||||
$(AWK) -f $(ASTTOPDIR)/build_tools/get_moduleinfo $^ >> $@
|
||||
echo "</member>" >> $@
|
||||
|
||||
.%.moduleinfo: %.cc
|
||||
@echo "<member name=\"$*\" displayname=\"$(shell $(GREP) -e AST_MODULE_INFO $< | head -n 1 | cut -d '"' -f 2)\" remove_on_change=\"$(SUBDIR)/$*.oo $(SUBDIR)/$*.ii $(SUBDIR)/$*.so$(MODULEINFO_EXTRA_OUTPUT)\">" > $@
|
||||
$(AWK) -f $(ASTTOPDIR)/build_tools/get_moduleinfo $^ >> $@
|
||||
echo "</member>" >> $@
|
||||
|
||||
.moduleinfo:: $(addsuffix .moduleinfo,$(addprefix .,$(sort $(ALL_C_MODS) $(ALL_CC_MODS)))) $(wildcard $(call tolower,$(MENUSELECT_CATEGORY)).xml)
|
||||
@echo "<category name=\"MENUSELECT_$(MENUSELECT_CATEGORY)\" displayname=\"$(MENUSELECT_DESCRIPTION)\">" > $@
|
||||
@cat $^ >> $@
|
||||
@echo "</category>" >> $@
|
||||
|
||||
moduleinfo: .moduleinfo
|
||||
@cat $<
|
||||
|
||||
.%.makeopts: %.c
|
||||
@$(AWK) -f $(ASTTOPDIR)/build_tools/get_makeopts $< > $@
|
||||
|
||||
.%.makeopts: %.cc
|
||||
@$(AWK) -f $(ASTTOPDIR)/build_tools/get_makeopts $< > $@
|
||||
|
||||
.makeopts:: $(addsuffix .makeopts,$(addprefix .,$(ALL_C_MODS) $(ALL_CC_MODS)))
|
||||
@cat $^ > $@
|
||||
|
||||
makeopts: .makeopts
|
||||
@cat $<
|
||||
|
||||
ifneq ($(wildcard .*.d),)
|
||||
include .*.d
|
||||
endif
|
||||
226
Makefile.rules
226
Makefile.rules
@@ -1,226 +0,0 @@
|
||||
#
|
||||
# Asterisk -- An open source telephony toolkit.
|
||||
#
|
||||
# Makefile rules
|
||||
#
|
||||
# Copyright (C) 2006-2010, Digium, Inc.
|
||||
#
|
||||
# Kevin P. Fleming <kpfleming@digium.com>
|
||||
#
|
||||
# This program is free software, distributed under the terms of
|
||||
# the GNU General Public License
|
||||
#
|
||||
|
||||
# Each command is preceded by a short comment on what to do.
|
||||
# Prefixing one or the other with @\# or @ or nothing makes the desired
|
||||
# behaviour. ECHO_PREFIX prefixes the comment, CMD_PREFIX prefixes the command.
|
||||
|
||||
-include $(ASTTOPDIR)/makeopts
|
||||
|
||||
# Helpful functions
|
||||
# call with $(call function,...)
|
||||
tolower = $(shell echo $(1) | tr '[:upper:]' '[:lower:]')
|
||||
# Takes a list of MENUSELECT_CFLAG Id and returns CFLAGS to declare
|
||||
# the ones which are enabled.
|
||||
get_menuselect_cflags=$(patsubst %,-D%,$(filter $1,$(MENUSELECT_CFLAGS)))
|
||||
|
||||
.PHONY: dist-clean
|
||||
|
||||
# If 'make' decides to create intermediate files to satisfy a build requirement
|
||||
# (like producing a .i from a .c), we want to keep them, so tell make to keep
|
||||
# all intermediate files
|
||||
.SECONDARY:
|
||||
|
||||
# extra cflags to build dependencies. Recursively expanded.
|
||||
MAKE_DEPS=-MD -MT $@ -MF .$(subst /,_,$@).d -MP
|
||||
|
||||
ifeq ($(findstring ADDRESS_SANITIZER,$(MENUSELECT_CFLAGS)),ADDRESS_SANITIZER)
|
||||
_ASTLDFLAGS+=-fsanitize=address
|
||||
_ASTCFLAGS+=-fno-omit-frame-pointer -fsanitize=address
|
||||
endif
|
||||
|
||||
ifeq ($(findstring THREAD_SANITIZER,$(MENUSELECT_CFLAGS)),THREAD_SANITIZER)
|
||||
_ASTLDFLAGS+=-fsanitize=thread -pie -fPIE
|
||||
_ASTCFLAGS+=-fno-omit-frame-pointer -pie -fPIE -fsanitize=thread
|
||||
endif
|
||||
|
||||
ifeq ($(findstring LEAK_SANITIZER,$(MENUSELECT_CFLAGS)),LEAK_SANITIZER)
|
||||
_ASTLDFLAGS+=-fsanitize=leak
|
||||
_ASTCFLAGS+=-fno-omit-frame-pointer -fsanitize=leak
|
||||
endif
|
||||
|
||||
ifeq ($(findstring UNDEFINED_SANITIZER,$(MENUSELECT_CFLAGS)),UNDEFINED_SANITIZER)
|
||||
_ASTLDFLAGS+=-fsanitize=undefined
|
||||
_ASTCFLAGS+=-fno-omit-frame-pointer -fsanitize=undefined
|
||||
endif
|
||||
|
||||
ifeq ($(NOISY_BUILD),)
|
||||
ECHO_PREFIX=@
|
||||
CMD_PREFIX=@
|
||||
else
|
||||
ECHO_PREFIX=@\#
|
||||
CMD_PREFIX=
|
||||
endif
|
||||
|
||||
OPTIMIZE?=-O3
|
||||
|
||||
ifneq ($(findstring darwin,$(OSARCH)),)
|
||||
ifeq ($(shell if test `/usr/bin/sw_vers -productVersion | cut -c4` -gt 5; then echo 6; else echo 0; fi),6)
|
||||
# Snow Leopard/Lion has an issue with this optimization flag on large files (like chan_sip)
|
||||
OPTIMIZE+=-fno-inline-functions
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(CC),gcc)
|
||||
# gcc version 8.2.1 and above must have partial-inlining disabled in order
|
||||
# to avoid a documented bug. Sort to make the lowest version number come
|
||||
# first. If it's the specified version then the current gcc version is equal
|
||||
# to or greater, so add the custom optimization rule.
|
||||
gcc_versions=$(shell printf "%s\n" $$(gcc -dumpversion) 8.2.1 | sort -n)
|
||||
ifeq ($(firstword $(gcc_versions)),8.2.1)
|
||||
OPTIMIZE+=-fno-partial-inlining
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(findstring DONT_OPTIMIZE,$(MENUSELECT_CFLAGS))$(findstring CODE_COVERAGE,$(MENUSELECT_CFLAGS))$(findstring CODE_PROFILE,$(MENUSELECT_CFLAGS))$(AST_CODE_COVERAGE),no)
|
||||
_ASTCFLAGS+=$(OPTIMIZE)
|
||||
else
|
||||
_ASTCFLAGS+=-O0
|
||||
endif
|
||||
|
||||
ifeq ($(findstring CODE_COVERAGE,$(MENUSELECT_CFLAGS))$(AST_CODE_COVERAGE),no)
|
||||
_ASTCFLAGS_COVERAGE=
|
||||
else
|
||||
_ASTCFLAGS_COVERAGE=-ftest-coverage -fprofile-arcs
|
||||
_ASTLDFLAGS+=-ftest-coverage -fprofile-arcs
|
||||
endif
|
||||
|
||||
ifneq ($(findstring KEEP_FRAME_POINTERS,$(MENUSELECT_CFLAGS)),)
|
||||
_ASTCFLAGS+=-fno-omit-frame-pointer
|
||||
endif
|
||||
|
||||
ifeq ($(findstring $(CONFIG_CFLAGS),$(_ASTCFLAGS)),)
|
||||
_ASTCFLAGS+=$(CONFIG_CFLAGS)
|
||||
endif
|
||||
|
||||
# shortcuts for common combinations of flags; these must be recursively expanded so that
|
||||
# per-target settings will be applied
|
||||
CC_CFLAGS=$(PTHREAD_CFLAGS) $(_ASTCFLAGS) $(ASTCFLAGS)
|
||||
CXX_CFLAGS=$(PTHREAD_CFLAGS) $(filter-out -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations $(AST_DECLARATION_AFTER_STATEMENT),$(_ASTCFLAGS) $(ASTCFLAGS))
|
||||
|
||||
# Clang -Werror warning suppressions
|
||||
ifeq ($(C_COMPILER_FAMILY),clang)
|
||||
CC_CFLAGS+=-Wno-unused-value -Wno-parentheses-equality
|
||||
endif
|
||||
|
||||
ifeq ($(GNU_LD),1)
|
||||
SO_SUPPRESS_SYMBOLS=-Wl,--version-script,$(subst .so,.exports,$@),--warn-common
|
||||
ifneq ($(wildcard $(subst .so,.dynamics,$@)),)
|
||||
SO_SUPPRESS_SYMBOLS+=-Wl,--dynamic-list,$(subst .so,.dynamics,$@)
|
||||
endif
|
||||
endif
|
||||
|
||||
CC_LDFLAGS_SO=$(PTHREAD_CFLAGS) $(_ASTLDFLAGS) $(SOLINK) $(SO_SUPPRESS_SYMBOLS) $(ASTLDFLAGS)
|
||||
CXX_LDFLAGS_SO=$(PTHREAD_CFLAGS) $(_ASTLDFLAGS) $(SOLINK) $(SO_SUPPRESS_SYMBOLS) $(ASTLDFLAGS)
|
||||
CC_LIBS=$(PTHREAD_LIBS) $(LIBS)
|
||||
CXX_LIBS=$(PTHREAD_LIBS) $(LIBS)
|
||||
|
||||
# determine whether to double-compile so that the optimizer can report code path problems
|
||||
# In this case, we run the preprocessor to produce a .i or .ii file from the source
|
||||
# code, then compile once with optimizer enabled (and the output to /dev/null),
|
||||
# and if that doesn't fail then compile again with optimizer disabled
|
||||
|
||||
ifeq ($(findstring COMPILE_DOUBLE,$(MENUSELECT_CFLAGS)),COMPILE_DOUBLE)
|
||||
COMPILE_DOUBLE=yes
|
||||
endif
|
||||
|
||||
ifeq ($(findstring DONT_OPTIMIZE,$(MENUSELECT_CFLAGS))$(AST_DEVMODE),)
|
||||
_ASTCFLAGS+=$(AST_FORTIFY_SOURCE)
|
||||
endif
|
||||
|
||||
ifeq ($(findstring BUILD_NATIVE,$(MENUSELECT_CFLAGS)),BUILD_NATIVE)
|
||||
_ASTCFLAGS+=-march=native
|
||||
endif
|
||||
|
||||
%.o: %.s
|
||||
$(ECHO_PREFIX) echo " [AS] $< -> $@"
|
||||
ifeq ($(COMPILE_DOUBLE),yes)
|
||||
$(CMD_PREFIX) $(CC) -o /dev/null -c $< $(CC_CFLAGS) $(OPTIMIZE)
|
||||
endif
|
||||
$(CMD_PREFIX) $(CC) -o $@ -c $< $(CC_CFLAGS) $(_ASTCFLAGS_COVERAGE)
|
||||
|
||||
%.o: %.i
|
||||
$(ECHO_PREFIX) echo " [CCi] $< -> $@"
|
||||
ifneq ($(AST_CLANG_BLOCKS),)
|
||||
ifeq ($(COMPILE_DOUBLE),yes)
|
||||
$(CMD_PREFIX) $(CC) -o /dev/null -c $< $(CC_CFLAGS) $(OPTIMIZE) -Wno-unused-command-line-argument
|
||||
endif
|
||||
$(CMD_PREFIX) $(CC) -o $@ -c $< $(CC_CFLAGS) $(_ASTCFLAGS_COVERAGE) -Wno-unused-command-line-argument
|
||||
else
|
||||
ifeq ($(COMPILE_DOUBLE),yes)
|
||||
$(CMD_PREFIX) $(CC) -o /dev/null -c $< $(CC_CFLAGS) $(OPTIMIZE)
|
||||
endif
|
||||
$(CMD_PREFIX) $(CC) -o $@ -c $< $(CC_CFLAGS) $(_ASTCFLAGS_COVERAGE)
|
||||
endif
|
||||
|
||||
ifneq ($(COMPILE_DOUBLE),yes)
|
||||
%.o: %.c
|
||||
$(ECHO_PREFIX) echo " [CC] $< -> $@"
|
||||
$(CMD_PREFIX) $(CC) -o $@ -c $< $(MAKE_DEPS) $(CC_CFLAGS) $(_ASTCFLAGS_COVERAGE)
|
||||
endif
|
||||
|
||||
%.i: %.c
|
||||
$(ECHO_PREFIX) echo " [CPP] $< -> $@"
|
||||
$(CMD_PREFIX) $(CC) -o $@ -E $< $(MAKE_DEPS) $(CC_CFLAGS) $(_ASTCFLAGS_COVERAGE)
|
||||
|
||||
%.oo: %.ii
|
||||
$(ECHO_PREFIX) echo " [CXXi] $< -> $@"
|
||||
ifeq ($(COMPILE_DOUBLE),yes)
|
||||
$(CMD_PREFIX) $(CXX) -o /dev/null -c $< $(CXX_CFLAGS) $(OPTIMIZE)
|
||||
endif
|
||||
$(CMD_PREFIX) $(CXX) -o $@ -c $< $(CXX_CFLAGS) $(_ASTCFLAGS_COVERAGE)
|
||||
|
||||
ifneq ($(COMPILE_DOUBLE),yes)
|
||||
%.oo: %.cc
|
||||
$(ECHO_PREFIX) echo " [CXX] $< -> $@"
|
||||
$(CMD_PREFIX) $(CXX) -o $@ -c $< $(MAKE_DEPS) $(CXX_CFLAGS) $(_ASTCFLAGS_COVERAGE)
|
||||
endif
|
||||
|
||||
%.ii: %.cc
|
||||
$(ECHO_PREFIX) echo " [CPP] $< -> $@"
|
||||
$(CMD_PREFIX) $(CXX) -o $@ -E $< $(MAKE_DEPS) $(CXX_CFLAGS) $(_ASTCFLAGS_COVERAGE)
|
||||
|
||||
%.so: %.o
|
||||
ifeq ($(GNU_LD),1)
|
||||
$(CMD_PREFIX) $(ASTTOPDIR)/build_tools/make_linker_version_script $* "$(LINKER_SYMBOL_PREFIX)" "$(ASTTOPDIR)"
|
||||
endif
|
||||
$(ECHO_PREFIX) echo " [LD] $^ -> $@"
|
||||
$(CMD_PREFIX) $(CC) -o $@ $(CC_LDFLAGS_SO) $^ $(CC_LIBS)
|
||||
|
||||
%.so: %.oo
|
||||
ifeq ($(GNU_LD),1)
|
||||
$(CMD_PREFIX) $(ASTTOPDIR)/build_tools/make_linker_version_script $* "$(LINKER_SYMBOL_PREFIX)" "$(ASTTOPDIR)"
|
||||
endif
|
||||
$(ECHO_PREFIX) echo " [LDXX] $^ -> $@"
|
||||
$(CMD_PREFIX) $(CXX) -o $@ $(CXX_LDFLAGS_SO) $^ $(CXX_LIBS)
|
||||
|
||||
%: %.o
|
||||
$(ECHO_PREFIX) echo " [LD] $^ -> $@"
|
||||
$(CMD_PREFIX) $(CXX) -o $@ $(PTHREAD_CFLAGS) $(_ASTLDFLAGS) $^ $(CXX_LIBS) $(ASTLDFLAGS)
|
||||
|
||||
# These CC commands just create an object file with the input file embedded in it.
|
||||
# It can be access from code as follows:
|
||||
# If your input file is named abc_def.xml...
|
||||
#
|
||||
# extern const uint8_t _binary_abc_def_xml_start[];
|
||||
# extern const uint8_t _binary_abc_def_xml_end[];
|
||||
# extern const size_t _binary_abc_def_xml_size;
|
||||
%.o: %.xml
|
||||
$(ECHO_PREFIX) echo " [LD] $^ -> $@"
|
||||
$(CMD_PREFIX) $(CC) -g -Wl,-znoexecstack -nostartfiles -nodefaultlibs -nostdlib -r -Wl,-b,binary -o $@ $^
|
||||
|
||||
%.o: %.xslt
|
||||
$(ECHO_PREFIX) echo " [LD] $^ -> $@"
|
||||
$(CMD_PREFIX) $(CC) -g -Wl,-znoexecstack -nostartfiles -nodefaultlibs -nostdlib -r -Wl,-b,binary -o $@ $^
|
||||
|
||||
dist-clean:: clean
|
||||
248
README
Normal file
248
README
Normal file
@@ -0,0 +1,248 @@
|
||||
The Asterisk Open Source PBX
|
||||
by Mark Spencer <markster@digium.com>
|
||||
and the Asterisk.org developer community
|
||||
|
||||
Copyright (C) 2001-2005 Digium, Inc.
|
||||
and other copyright holders.
|
||||
================================================================
|
||||
|
||||
* SECURITY
|
||||
It is imperative that you read and fully understand the contents of
|
||||
the SECURITY file before you attempt to configure and run an Asterisk
|
||||
server.
|
||||
|
||||
* WHAT IS ASTERISK ?
|
||||
Asterisk is an Open Source PBX and telephony toolkit. It is, in a
|
||||
sense, middleware between Internet and telephony channels on the bottom,
|
||||
and Internet and telephony applications at the top. For more information
|
||||
on the project itself, please visit the Asterisk home page at:
|
||||
|
||||
http://www.asterisk.org
|
||||
|
||||
In addition you'll find lots of information compiled by the Asterisk
|
||||
community on this Wiki:
|
||||
|
||||
http://www.voip-info.org/wiki-Asterisk
|
||||
|
||||
There is a book on Asterisk published by O'Reilly under the
|
||||
Creative Commons License. It is available in book stores as well
|
||||
as in a downloadable version on the http://www.asteriskdocs.org
|
||||
web site.
|
||||
|
||||
* SUPPORTED OPERATING SYSTEMS
|
||||
|
||||
== Linux ==
|
||||
The Asterisk Open Source PBX is developed and tested primarily on the
|
||||
GNU/Linux operating system, and is supported on every major GNU/Linux
|
||||
distribution.
|
||||
|
||||
== Others ==
|
||||
Asterisk has also been 'ported' and reportedly runs properly on other
|
||||
operating systems as well, including Sun Solaris, Apple's Mac OS X, and
|
||||
the BSD variants.
|
||||
|
||||
* GETTING STARTED
|
||||
|
||||
First, be sure you've got supported hardware (but note that you don't need
|
||||
ANY special hardware, not even a soundcard) to install and run Asterisk.
|
||||
|
||||
Supported telephony hardware includes:
|
||||
|
||||
* All Wildcard (tm) products from Digium (www.digium.com)
|
||||
* QuickNet Internet PhoneJack and LineJack (http://www.quicknet.net)
|
||||
* any full duplex sound card supported by ALSA or OSS
|
||||
* VoiceTronix OpenLine products
|
||||
|
||||
The are several drivers for ISDN BRI cards available from third party sources.
|
||||
Check the voip-info.org wiki for more information on chan_capi, chan_misdn and
|
||||
zaphfc.
|
||||
|
||||
* UPGRADING FROM VERSION 1.0
|
||||
|
||||
If you are updating from a previous version of Asterisk, make sure you
|
||||
read the UPGRADE.txt file in the source directory. There are some files
|
||||
and configuration options that you will have to change, even though we
|
||||
made every effort possible to maintain backwards compatibility.
|
||||
|
||||
In order to discover new features to use, please check the configuration
|
||||
examples in the /configs directory of the source code distribution.
|
||||
To discover the major new features of Asterisk 1.2, please visit
|
||||
http://edvina.net/asterisk1-2/
|
||||
|
||||
* NEW INSTALLATIONS
|
||||
|
||||
Ensure that your system contains a compatible compiler and development
|
||||
libraries. Asterisk requires either the GNU Compiler Collection (GCC) version
|
||||
3.0 or higher, or a compiler that supports the C99 specification and some of
|
||||
the gcc language extensions. In addition, your system needs to have the C
|
||||
library headers available, and the headers and libraries for OpenSSL,
|
||||
ncurses and zlib.
|
||||
On many distributions, these files are installed by packages with names like
|
||||
'glibc-devel', 'ncurses-devel', 'openssl-devel' and 'zlib-devel' or similar.
|
||||
|
||||
So let's proceed:
|
||||
|
||||
1) Run "make"
|
||||
|
||||
Assuming the build completes successfully:
|
||||
|
||||
2) Run "make install"
|
||||
|
||||
Each time you update or checkout from CVS, you are strongly encouraged
|
||||
to ensure all previous object files are removed to avoid internal
|
||||
inconsistency in Asterisk. Normally, this is automatically done with
|
||||
the presence of the file .cleancount, which increments each time a 'make clean'
|
||||
is required, and the file .lastclean, which contains the last .cleancount used.
|
||||
|
||||
If this is your first time working with Asterisk, you may wish to install
|
||||
the sample PBX, with demonstration extensions, etc. If so, run:
|
||||
|
||||
3) "make samples"
|
||||
|
||||
Doing so will overwrite any existing config files you have.
|
||||
|
||||
Finally, you can launch Asterisk in the foreground mode (not a daemon)
|
||||
with:
|
||||
|
||||
# asterisk -vvvc
|
||||
|
||||
You'll see a bunch of verbose messages fly by your screen as Asterisk
|
||||
initializes (that's the "very very verbose" mode). When it's ready, if
|
||||
you specified the "c" then you'll get a command line console, that looks
|
||||
like this:
|
||||
|
||||
*CLI>
|
||||
|
||||
You can type "help" at any time to get help with the system. For help
|
||||
with a specific command, type "help <command>". To start the PBX using
|
||||
your sound card, you can type "dial" to dial the PBX. Then you can use
|
||||
"answer", "hangup", and "dial" to simulate the actions of a telephone.
|
||||
Remember that if you don't have a full duplex sound card (and Asterisk
|
||||
will tell you somewhere in its verbose messages if you do/don't) then it
|
||||
won't work right (not yet).
|
||||
|
||||
"man asterisk" at the Unix/Linux command prompt will give you detailed
|
||||
information on how to start and stop Asterisk, as well as all the command
|
||||
line options for starting Asterisk.
|
||||
|
||||
Feel free to look over the configuration files in /etc/asterisk, where
|
||||
you'll find a lot of information about what you can do with Asterisk.
|
||||
|
||||
* ABOUT CONFIGURATION FILES
|
||||
|
||||
All Asterisk configuration files share a common format. Comments are
|
||||
delimited by ';' (since '#' of course, being a DTMF digit, may occur in
|
||||
many places). A configuration file is divided into sections whose names
|
||||
appear in []'s. Each section typically contains two types of statements,
|
||||
those of the form 'variable = value', and those of the form 'object =>
|
||||
parameters'. Internally the use of '=' and '=>' is exactly the same, so
|
||||
they're used only to help make the configuration file easier to
|
||||
understand, and do not affect how it is actually parsed.
|
||||
|
||||
Entries of the form 'variable=value' set the value of some parameter in
|
||||
asterisk. For example, in zapata.conf, one might specify:
|
||||
|
||||
switchtype=national
|
||||
|
||||
in order to indicate to Asterisk that the switch they are connecting to is
|
||||
of the type "national". In general, the parameter will apply to
|
||||
instantiations which occur below its specification. For example, if the
|
||||
configuration file read:
|
||||
|
||||
switchtype = national
|
||||
channel => 1-4
|
||||
channel => 10-12
|
||||
switchtype = dms100
|
||||
channel => 25-47
|
||||
|
||||
the "national" switchtype would be applied to channels one through
|
||||
four and channels 10 through 12, whereas the "dms100" switchtype would
|
||||
apply to channels 25 through 47.
|
||||
|
||||
The "object => parameters" instantiates an object with the given
|
||||
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
|
||||
large jumps in time. Manually changing the system time using date(1)
|
||||
(or other similar commands) may cause SIP registrations and other
|
||||
internal processes to fail. If your system cannot keep accurate time
|
||||
by itself use NTP (http://www.ntp.org/) to keep the system clock
|
||||
synchronized to "real time". NTP is designed to keep the system clock
|
||||
synchronized by speeding up or slowing down the system clock until it
|
||||
is synchronized to "real time" rather than by jumping the time and
|
||||
causing discontinuities. Most Linux distributions include precompiled
|
||||
versions of NTP. Beware of some time synchronization methods that get
|
||||
the correct real time periodically and then manually set the system
|
||||
clock.
|
||||
|
||||
Apparent time changes due to daylight savings time are just that,
|
||||
apparent. The use of daylight savings time in a Linux system is
|
||||
purely a user interface issue and does not affect the operation of the
|
||||
Linux kernel or Asterisk. The system clock on Linux kernels operates
|
||||
on UTC. UTC does not use daylight savings time.
|
||||
|
||||
Also note that this issue is separate from the clocking of TDM
|
||||
channels, and is known to at least affect SIP registrations.
|
||||
|
||||
* FILE DESCRIPTORS
|
||||
|
||||
Depending on the size of your system and your configuration,
|
||||
Asterisk can consume a large number of file descriptors. In UNIX,
|
||||
file descriptors are used for more than just files on disk. File
|
||||
descriptors are also used for handling network communication
|
||||
(e.g. SIP, IAX2, or H.323 calls) and hardware access (e.g. analog and
|
||||
digital trunk hardware). Asterisk accesses many on-disk files for
|
||||
everything from configuration information to voicemail storage.
|
||||
|
||||
Most systems limit the number of file descriptors that Asterisk can
|
||||
have open at one time. This can limit the number of simultaneous
|
||||
calls that your system can handle. For example, if the limit is set
|
||||
at 1024 (a common default value) Asterisk can handle approxiately 150
|
||||
SIP calls simultaneously. To change the number of file descriptors
|
||||
follow the instructions for your system below:
|
||||
|
||||
== PAM-based Linux System ==
|
||||
|
||||
If your system uses PAM (Pluggable Authentication Modules) edit
|
||||
/etc/security/limits.conf. Add these lines to the bottom of the file:
|
||||
|
||||
root soft nofile 4096
|
||||
root hard nofile 8196
|
||||
asterisk soft nofile 4096
|
||||
asterisk hard nofile 8196
|
||||
|
||||
(adjust the numbers to taste). You may need to reboot the system for
|
||||
these changes to take effect.
|
||||
|
||||
== Generic UNIX System ==
|
||||
|
||||
If there are no instructions specifically adapted to your system
|
||||
above you can try adding the command "ulimit -n 8192" to the script
|
||||
that starts Asterisk.
|
||||
|
||||
* MORE INFORMATION
|
||||
|
||||
See the doc directory for more documentation on various features. Again,
|
||||
please read all the configuration samples that include documentation on
|
||||
the configuration options.
|
||||
|
||||
Finally, you may wish to visit the web site and join the mailing list if
|
||||
you're interested in getting more information.
|
||||
|
||||
http://www.asterisk.org/support
|
||||
|
||||
Welcome to the growing worldwide community of Asterisk users!
|
||||
|
||||
Mark Spencer
|
||||
@@ -1,389 +0,0 @@
|
||||
# Best Practices
|
||||
|
||||
The purpose of this document is to define best practices when working with
|
||||
Asterisk in order to minimize possible security breaches and to provide tried
|
||||
examples in field deployments. This is a living document and is subject to
|
||||
change over time as best practices are defined.
|
||||
|
||||
* [Filtering Data]:
|
||||
How to protect yourself from redial attacks
|
||||
* [Proper Device Naming]:
|
||||
Why to not use numbered extensions for devices
|
||||
* [Secure Passwords]:
|
||||
Secure passwords limit your risk to brute force attacks
|
||||
* [Reducing Pattern Match Typos]:
|
||||
Using the 'same' prefix, or using Goto()
|
||||
* [Manager Class Authorizations]:
|
||||
Recognizing potential issues with certain classes of authorization
|
||||
* [Avoid Privilege Escalations]:
|
||||
Disable the ability to execute functions that may escalate privileges
|
||||
* [Important Security Considerations]:
|
||||
More information on the Asterisk Wiki
|
||||
|
||||
## Additional Links
|
||||
|
||||
Additional links that contain useful information about best practices or
|
||||
security are listed below.
|
||||
|
||||
* [Seven Steps to Better SIP Security][blog-sip-security]
|
||||
* [Asterisk VoIP Security (webinar)][voip-security-webinar]
|
||||
|
||||
|
||||
## Filtering Data
|
||||
|
||||
In the Asterisk dialplan, several channel variables contain data potentially
|
||||
supplied by outside sources. This could lead to a potential security concern
|
||||
where those outside sources may send cleverly crafted strings of data which
|
||||
could be utilized, e.g. to place calls to unexpected locations.
|
||||
|
||||
An example of this can be found in the use of pattern matching and the ${EXTEN}
|
||||
channel variable. Note that ${EXTEN} is not the only system created channel
|
||||
variable, so it is important to be aware of where the data you're using is
|
||||
coming from.
|
||||
|
||||
For example, this common dialplan takes 2 or more characters of data, starting
|
||||
with a number 0-9, and then accepts any additional information supplied by the
|
||||
request.
|
||||
|
||||
**NOTE**:
|
||||
> We use SIP in this example, but is not limited to SIP only; protocols such as
|
||||
> Jabber/XMPP or IAX2 are also susceptible to the same sort of injection problem.
|
||||
|
||||
```INI
|
||||
[incoming]
|
||||
exten => _X.,1,Verbose(2,Incoming call to extension ${EXTEN})
|
||||
exten => _X.,n,Dial(SIP/${EXTEN})
|
||||
exten => _X.,n,Hangup()
|
||||
```
|
||||
|
||||
This dialplan may be utilized to accept calls to extensions, which then dial a
|
||||
numbered device name configured in one of the channel configuration files (such
|
||||
as sip.conf, iax.conf, etc...) (see [Proper Device Naming] for more information
|
||||
on why this approach is flawed).
|
||||
|
||||
The example we've given above looks harmless enough until you take into
|
||||
consideration that several channel technologies accept characters that could
|
||||
be utilized in a clever attack. For example, instead of just sending a request
|
||||
to dial extension 500 (which in our example above would create the string
|
||||
SIP/500 and is then used by the Dial() application to place a call), someone
|
||||
could potentially send a string like "500&SIP/itsp/14165551212".
|
||||
|
||||
The string "500&SIP/itsp/14165551212" would then be contained within the
|
||||
${EXTEN} channel variable, which is then utilized by the Dial() application in
|
||||
our example, thereby giving you the dialplan line of:
|
||||
|
||||
```INI
|
||||
exten => _X.,n,Dial(SIP/500&SIP/itsp/14165551212)
|
||||
```
|
||||
|
||||
Our example above has now provided someone with a method to place calls out of
|
||||
your ITSP in a place where you didn't expect to allow it. There are a couple of
|
||||
ways in which you can mitigate this impact: stricter pattern matching, or using
|
||||
the FILTER() dialplan function.
|
||||
|
||||
The CALLERID(num) and CALLERID(name) values are other commonly used values that
|
||||
are sources of data potentially supplied by outside sources. If you use these
|
||||
values as parameters to the System(), MixMonitor(), or Monitor() applications
|
||||
or the SHELL() dialplan function, you can allow injection of arbitrary operating
|
||||
system command execution. The FILTER() dialplan function is available to remove
|
||||
dangerous characters from untrusted strings to block the command injection.
|
||||
|
||||
|
||||
### Strict Pattern Matching
|
||||
|
||||
The simple way to mitigate this problem is with a strict pattern match that does
|
||||
not utilize the period (.) or bang (!) characters to match on one-or-more
|
||||
characters or zero-or-more characters (respectively). To fine tune our example
|
||||
to only accept three digit extensions, we could change our pattern match to
|
||||
be:
|
||||
|
||||
```INI
|
||||
exten => _XXX,n,Dial(SIP/${EXTEN})
|
||||
```
|
||||
|
||||
In this way, we have minimized our impact because we're not allowing anything
|
||||
other than the numbers zero through nine. But in some cases we really do need to
|
||||
handle variable pattern matches, such as when dialing international numbers
|
||||
or when we want to handle something like a SIP URI. In this case, we'll need to
|
||||
utilize the FILTER() dialplan function.
|
||||
|
||||
|
||||
### Using FILTER()
|
||||
|
||||
The FILTER() dialplan function is used to filter strings by only allowing
|
||||
characters that you have specified. This is a perfect candidate for controlling
|
||||
which characters you want to pass to the Dial() application, or any other
|
||||
application which will contain dynamic information passed to Asterisk from an
|
||||
external source. Lets take a look at how we can use FILTER() to control what
|
||||
data we allow.
|
||||
|
||||
Using our previous example to accept any string length of 2 or more characters,
|
||||
starting with a number of zero through nine, we can use FILTER() to limit what
|
||||
we will accept to just numbers. Our example would then change to something like:
|
||||
|
||||
```INI
|
||||
[incoming]
|
||||
exten => _X.,1,Verbose(2,Incoming call to extension ${EXTEN})
|
||||
exten => _X.,n,Dial(SIP/${FILTER(0-9,${EXTEN})})
|
||||
exten => _X.,n,Hangup()
|
||||
```
|
||||
|
||||
Note how we've wrapped the ${EXTEN} channel variable with the FILTER() function
|
||||
which will then only pass back characters that fit into the numerical range that
|
||||
we've defined.
|
||||
|
||||
Alternatively, if we didn't want to utilize the FILTER() function within the
|
||||
Dial() application directly, we could save the value to a channel variable,
|
||||
which has a side effect of being usable in other locations of your dialplan if
|
||||
necessary, and to handle error checking in a separate location.
|
||||
|
||||
```INI
|
||||
[incoming]
|
||||
exten => _X.,1,Verbose(2,Incoming call to extension ${EXTEN})
|
||||
exten => _X.,n,Set(SAFE_EXTEN=${FILTER(0-9,${EXTEN})})
|
||||
exten => _X.,n,Dial(SIP/${SAFE_EXTEN})
|
||||
exten => _X.,n,Hangup()
|
||||
```
|
||||
|
||||
Now we can use the ${SAFE_EXTEN} channel variable anywhere throughout the rest
|
||||
of our dialplan, knowing we've already filtered it. We could also perform an
|
||||
error check to verify that what we've received in ${EXTEN} also matches the data
|
||||
passed back by FILTER(), and to fail the call if things do not match.
|
||||
|
||||
```INI
|
||||
[incoming]
|
||||
exten => _X.,1,Verbose(2,Incoming call to extension ${EXTEN})
|
||||
exten => _X.,n,Set(SAFE_EXTEN=${FILTER(0-9,${EXTEN})})
|
||||
exten => _X.,n,GotoIf($[${EXTEN} != ${SAFE_EXTEN}]?error,1)
|
||||
exten => _X.,n,Dial(SIP/${SAFE_EXTEN})
|
||||
exten => _X.,n,Hangup()
|
||||
|
||||
exten => error,1,Verbose(2,Values of EXTEN and SAFE_EXTEN did not match.)
|
||||
exten => error,n,Verbose(2,EXTEN: "${EXTEN}" -- SAFE_EXTEN: "${SAFE_EXTEN}")
|
||||
exten => error,n,Playback(silence/1&invalid)
|
||||
exten => error,n,Hangup()
|
||||
```
|
||||
|
||||
Another example would be using FILTER() to control the characters we accept when
|
||||
we're expecting to get a SIP URI for dialing.
|
||||
|
||||
```INI
|
||||
[incoming]
|
||||
exten => _[0-9a-zA-Z].,1,Verbose(2,Incoming call to extension ${EXTEN})
|
||||
exten => _[0-9a-zA-Z].,n,Dial(SIP/${FILTER(.@0-9a-zA-Z,${EXTEN})
|
||||
exten => _[0-9a-zA-Z].,n,Hangup()
|
||||
```
|
||||
|
||||
Of course the FILTER() function doesn't check the formatting of the incoming
|
||||
request. There is also the REGEX() dialplan function which can be used to
|
||||
determine if the string passed to it matches the regular expression you've
|
||||
created, and to take proper action on whether it matches or not. The creation of
|
||||
regular expressions is left as an exercise for the reader.
|
||||
|
||||
More information about the FILTER() and REGEX() dialplan functions can be found
|
||||
by typing "core show function FILTER" and "core show function REGEX" from your
|
||||
Asterisk console.
|
||||
|
||||
|
||||
## Proper Device Naming
|
||||
|
||||
In Asterisk, the concept of an extension number being tied to a specific device
|
||||
does not exist. Asterisk is aware of devices it can call or receive calls from,
|
||||
and how you define in your dialplan how to reach those devices is up to you.
|
||||
|
||||
Because it has become common practice to think of a specific device as having an
|
||||
extension number associated with it, it only becomes natural to think about
|
||||
naming your devices the same as the extension number you're providing it. But
|
||||
by doing this, you're limiting the powerful concept of separating user from
|
||||
extensions, and extensions from devices.
|
||||
|
||||
It can also be a security hazard to name your devices with a number, as this can
|
||||
open you up to brute force attacks. Many of the current exploits deal with
|
||||
device configurations which utilize a number, and even worse, a password that
|
||||
matches the devices name. For example, take a look at this poorly created device
|
||||
in sip.conf:
|
||||
|
||||
```INI
|
||||
[1000]
|
||||
type=friend
|
||||
context=international_dialing
|
||||
secret=1000
|
||||
```
|
||||
|
||||
As implied by the context, we've permitted a device named 1000 with a password
|
||||
of 1000 to place calls internationally. If your PBX system is accessible via
|
||||
the internet, then your system will be vulnerable to expensive international
|
||||
calls. Even if your system is not accessible via the internet, people within
|
||||
your organization could get access to dialing rules you'd prefer to reserve only
|
||||
for certain people.
|
||||
|
||||
A more secure example for the device would be to use something like the MAC
|
||||
address of the device, along with a strong password (see the section Secure
|
||||
Passwords). The following example would be more secure:
|
||||
|
||||
```INI
|
||||
[0004f2040001]
|
||||
type=friend
|
||||
context=international_dialing
|
||||
secret=aE3%B8*$jk^G
|
||||
```
|
||||
|
||||
Then in your dialplan, you would reference the device via the MAC address of the
|
||||
device (or if using the softphone, a MAC address of a network interface on the
|
||||
computer).
|
||||
|
||||
Also note that you should NOT use this password, as it will likely be one of the
|
||||
first ones added to the dictionary for brute force attacks.
|
||||
|
||||
|
||||
## Secure Passwords
|
||||
|
||||
Secure passwords are necessary in many (if not all) environments, and Asterisk
|
||||
is certainly no exception, especially when it comes to expensive long distance
|
||||
calls that could potentially cost your company hundreds or thousands of dollars
|
||||
on an expensive monthly phone bill, with little to no recourse to fight the
|
||||
charges.
|
||||
|
||||
Whenever you are positioned to add a password to your system, whether that is
|
||||
for a device configuration, a database connection, or any other secure
|
||||
connection, be sure to use a secure password. A good example of a secure
|
||||
password would be something like:
|
||||
|
||||
```
|
||||
aE3%B8*$jk^G
|
||||
```
|
||||
|
||||
Our password also contains 12 characters with a mixture of upper and
|
||||
lower case characters, numbers, and symbols. Because these passwords are likely
|
||||
to only be entered once, or loaded via a configuration file, there is
|
||||
no need to create simple passwords, even in testing. Some of the holes found in
|
||||
production systems used for exploitations involve finding the one test extension
|
||||
that contains a weak password that was forgotten prior to putting a system into
|
||||
production.
|
||||
|
||||
Using a web search you can find several online password generators such as
|
||||
[Strong Password Generator] or there are several scripts that can be
|
||||
used to generate a strong password.
|
||||
|
||||
|
||||
## Reducing Pattern Match Typos
|
||||
|
||||
As of Asterisk 1.6.2, a new method for reducing the number of complex pattern
|
||||
matches you need to enter, which can reduce typos in your dialplan, has been
|
||||
implemented. Traditionally, a dialplan with a complex pattern match would look
|
||||
something like:
|
||||
|
||||
```INI
|
||||
exten => _[3-5]XXX,1,Verbose(Incoming call to ${EXTEN})
|
||||
exten => _[3-5]XXX,n,Set(DEVICE=${DB(device/mac_address/${EXTEN})})
|
||||
exten => _[3-5]XXX,n,Set(TECHNOLOGY=${DB(device/technology/${EXTEN})})
|
||||
exten => _[3-5]XXX,n,GotoIf($[${ISNULL(${TECHNOLOGY})} | ${ISNULL(${DEVICE})}]?error,1)
|
||||
exten => _[3-5]XXX,n,Dial(${TECHNOLOGY}/${DEVICE},${GLOBAL(TIMEOUT)})
|
||||
exten => _[3-5]XXX,n,Set(vmFlag=${IF($[${DIALSTATUS} = BUSY]?b:u)})
|
||||
exten => _[3-5]XXX,n,Voicemail(${EXTEN}@${GLOBAL(VOICEMAIL_CONTEXT)},${vmFlag})
|
||||
exten => _[3-5]XXX,n,Hangup()
|
||||
|
||||
exten => error,1,Verbose(2,Unable to lookup technology or device for extension)
|
||||
exten => error,n,Playback(silence/1&num-not-in-db)
|
||||
exten => error,n,Hangup()
|
||||
```
|
||||
|
||||
Of course there exists the possibility for a typo when retyping the pattern
|
||||
match _\[3-5\]XXX which will match on extensions 3000 through 5999. We can
|
||||
minimize this error by utilizing the same => prefix on all lines beyond the
|
||||
first one. Our same dialplan with using same => would look like the following:
|
||||
|
||||
```INI
|
||||
exten => _[3-5]XXX,1,Verbose(Incoming call to ${EXTEN})
|
||||
same => n,Set(DEVICE=${DB(device/mac_address/${EXTEN})})
|
||||
same => n,Set(TECHNOLOGY=${DB(device/technology/${EXTEN})})
|
||||
same => n,GotoIf($[${ISNULL(${TECHNOLOGY})} | ${ISNULL(${DEVICE})}]?error,1)
|
||||
same => n,Dial(${TECHNOLOGY}/${DEVICE},${GLOBAL(TIMEOUT)})
|
||||
same => n,Set(vmFlag=${IF($[${DIALSTATUS} = BUSY]?b:u)})
|
||||
same => n,Voicemail(${EXTEN}@${GLOBAL(VOICEMAIL_CONTEXT)},${vmFlag})
|
||||
same => n,Hangup()
|
||||
|
||||
exten => error,1,Verbose(2,Unable to lookup technology or device for extension)
|
||||
same => n,Playback(silence/1&num-not-in-db)
|
||||
same => n,Hangup()
|
||||
```
|
||||
|
||||
|
||||
## Manager Class Authorizations
|
||||
|
||||
Manager accounts have associated class authorizations that define what actions
|
||||
and events that account can execute/receive. In order to run Asterisk commands
|
||||
or dialplan applications that affect the system Asterisk executes on, the
|
||||
"system" class authorization should be set on the account.
|
||||
|
||||
However, Manager commands that originate new calls into the Asterisk dialplan
|
||||
have the potential to alter or affect the system as well, even though the
|
||||
class authorization for origination commands is "originate". Take, for example,
|
||||
the Originate manager command:
|
||||
|
||||
```
|
||||
Action: Originate
|
||||
Channel: SIP/foo
|
||||
Exten: s
|
||||
Context: default
|
||||
Priority: 1
|
||||
Application: System
|
||||
Data: echo hello world!
|
||||
```
|
||||
|
||||
This manager command will attempt to execute an Asterisk application, System,
|
||||
which is normally associated with the "system" class authorization. While some
|
||||
checks have been put into Asterisk to take this into account, certain dialplan
|
||||
configurations and/or clever manipulation of the Originate manager action can
|
||||
circumvent these checks. For example, take the following dialplan:
|
||||
|
||||
```INI
|
||||
exten => s,1,Verbose(Incoming call)
|
||||
same => n,MixMonitor(foo.wav,,${EXEC_COMMAND})
|
||||
same => n,Dial(SIP/bar)
|
||||
same => n,Hangup()
|
||||
```
|
||||
|
||||
Whatever has been defined in the variable EXEC_COMMAND will be executed after
|
||||
MixMonitor has finished recording the call. The dialplan writer may have
|
||||
intended that this variable to be set by some other location in the dialplan;
|
||||
however, the Manager action Originate allows for channel variables to be set by
|
||||
the account initiating the new call. This could allow the Originate action to
|
||||
execute some command on the system by setting the EXEC_COMMAND dialplan variable
|
||||
in the Variable: header.
|
||||
|
||||
In general, you should treat the Manager class authorization "originate" the
|
||||
same as the class authorization "system". Good system configuration, such as
|
||||
not running Asterisk as root, can prevent serious problems from arising when
|
||||
allowing external connections to originate calls into Asterisk.
|
||||
|
||||
|
||||
## Avoid Privilege Escalations
|
||||
|
||||
External control protocols, such as Manager, often have the ability to get and
|
||||
set channel variables; which allows the execution of dialplan functions.
|
||||
|
||||
Dialplan functions within Asterisk are incredibly powerful, which is wonderful
|
||||
for building applications using Asterisk. But during the read or write
|
||||
execution, certain dialplan functions do much more. For example, reading the
|
||||
SHELL() function can execute arbitrary commands on the system Asterisk is
|
||||
running on. Writing to the FILE() function can change any file that Asterisk has
|
||||
write access to.
|
||||
|
||||
When these functions are executed from an external protocol, that execution
|
||||
could result in a privilege escalation. Asterisk can inhibit the execution of
|
||||
these functions, if live_dangerously in the \[options\] section of asterisk.conf
|
||||
is set to no.
|
||||
|
||||
In Asterisk 12 and later, live_dangerously defaults to no.
|
||||
|
||||
[voip-security-webinar]: https://docs.asterisk.org/Deployment/Important-Security-Considerations/Asterisk-Security-Webinars/
|
||||
[blog-sip-security]: https://web.archive.org/web/20171030134647/http://blogs.digium.com/2009/03/28/sip-security/
|
||||
[Strong Password Generator]: https://www.strongpasswordgenerator.com
|
||||
[Filtering Data]: #filtering-data
|
||||
[Proper Device Naming]: #proper-device-naming
|
||||
[Secure Passwords]: #secure-passwords
|
||||
[Reducing Pattern Match Typos]: #reducing-pattern-match-typos
|
||||
[Manager Class Authorizations]: #manager-class-authorizations
|
||||
[Avoid Privilege Escalations]: #avoid-privilege-escalations
|
||||
[Important Security Considerations]: https://docs.asterisk.org/Deployment/Important-Security-Considerations/
|
||||
@@ -1,27 +0,0 @@
|
||||
===============================================================================
|
||||
=== Asterisk Add-on Modules ===
|
||||
===============================================================================
|
||||
|
||||
This document pertains to the modules that reside in the addons/
|
||||
subdirectory of the source tree. By default, these modules are not compiled
|
||||
and installed. If you choose to enable them, you must be aware of what
|
||||
potential licensing and/or patent implications that has on your usage and
|
||||
distribution of Asterisk.
|
||||
|
||||
Even though Asterisk is released as open source under the terms of the
|
||||
GPLv2 (see LICENSE for details), no core functionality in Asterisk has any
|
||||
dependencies on libraries that are licensed under the GPL. One reason a module
|
||||
may be in the add-ons category is that it may have a GPL dependency. Since
|
||||
these dependencies are not compatible with dual licensing of Asterisk, the
|
||||
dependant modules are set aside to make it clear that they may not be used
|
||||
with commercial versions of Asterisk, unless other licensing arrangements are
|
||||
made with the copyright holders of those dependencies.
|
||||
|
||||
Another reason that modules may be set aside is that there may be
|
||||
additional restrictions on the usage of the code imposed by the license or
|
||||
related patents. The MySQL and MP3 modules are examples of this.
|
||||
|
||||
If you have any questions, contact your lawyer.
|
||||
|
||||
===============================================================================
|
||||
===============================================================================
|
||||
174
README.html
174
README.html
@@ -1,174 +0,0 @@
|
||||
<html><head><title>Readme for asterisk-20.18.2</title></head><body>
|
||||
<h1>The Asterisk(R) Open Source PBX</h1>
|
||||
<pre><code>By Mark Spencer <markster@digium.com> and the Asterisk.org developer community.
|
||||
Copyright (C) 2001-2025 Sangoma Technologies Corporation and other copyright holders.
|
||||
</code></pre>
|
||||
<h2>SECURITY</h2>
|
||||
<p>It is imperative that you read and fully understand the contents of
|
||||
the security information document before you attempt to configure and run
|
||||
an Asterisk server.</p>
|
||||
<p>See <a href="https://docs.asterisk.org/Deployment/Important-Security-Considerations">Important Security Considerations</a> for more information.</p>
|
||||
<h2>WHAT IS ASTERISK ?</h2>
|
||||
<p>Asterisk is an Open Source PBX and telephony toolkit. It is, in a
|
||||
sense, middleware between Internet and telephony channels on the bottom,
|
||||
and Internet and telephony applications at the top. However, Asterisk supports
|
||||
more telephony interfaces than just Internet telephony. Asterisk also has a
|
||||
vast amount of support for traditional PSTN telephony, as well.</p>
|
||||
<p>For more information on the project itself, please visit the <a href="https://www.asterisk.org">Asterisk
|
||||
Home Page</a> and the official
|
||||
<a href="https://docs.asterisk.org">Asterisk Documentation</a>.</p>
|
||||
<h2>SUPPORTED OPERATING SYSTEMS</h2>
|
||||
<h3>Linux</h3>
|
||||
<p>The Asterisk Open Source PBX is developed and tested primarily on the
|
||||
GNU/Linux operating system, and is supported on every major GNU/Linux
|
||||
distribution.</p>
|
||||
<h3>Others</h3>
|
||||
<p>Asterisk has also been 'ported' and reportedly runs properly on other
|
||||
operating systems as well, Apple's Mac OS X, and the BSD variants.</p>
|
||||
<h2>GETTING STARTED</h2>
|
||||
<p>Most users are using VoIP/SIP exclusively these days but if you need to
|
||||
interface to TDM or analog services or devices, be sure you've got supported
|
||||
hardware.</p>
|
||||
<p>Supported telephony hardware includes:
|
||||
* All Analog and Digital Interface cards from Sangoma
|
||||
* Any full duplex sound card supported by PortAudio
|
||||
* The Xorcom Astribank channel bank</p>
|
||||
<h3>UPGRADING FROM AN EARLIER VERSION</h3>
|
||||
<p>If you are updating from a previous version of Asterisk, make sure you
|
||||
read the Change Logs.</p>
|
||||
<!-- CHANGELOGS (the URL will change based on the location of this README) -->
|
||||
<p><a href="ChangeLogs/ChangeLog-20.18.2.html">Change Logs</a></p>
|
||||
<!-- END-CHANGELOGS -->
|
||||
|
||||
<h3>NEW INSTALLATIONS</h3>
|
||||
<p>Ensure that your system contains a compatible compiler and development
|
||||
libraries. Asterisk requires either the GNU Compiler Collection (GCC) version
|
||||
4.1 or higher, or a compiler that supports the C99 specification and some of
|
||||
the gcc language extensions. In addition, your system needs to have the C
|
||||
library headers available, and the headers and libraries for ncurses.</p>
|
||||
<p>There are many modules that have additional dependencies. To see what
|
||||
libraries are being looked for, see <code>./configure --help</code>, or run
|
||||
<code>make menuselect</code> to view the dependencies for specific modules.</p>
|
||||
<p>On many distributions, these dependencies are installed by packages with names
|
||||
like 'glibc-devel', 'ncurses-devel', 'openssl-devel' and 'zlib-devel'
|
||||
or similar. The <code>contrib/scripts/install_prereq</code> script can be used to install
|
||||
the dependencies for most Debian and Redhat based Linux distributions.
|
||||
The script also handles SUSE, Arch, Gentoo, FreeBSD, NetBSD and OpenBSD but
|
||||
those distributions mightnoit have complete support or they might be out of date.</p>
|
||||
<p>So, let's proceed:</p>
|
||||
<ol>
|
||||
<li>
|
||||
<p>Read the documentation.<br>
|
||||
The <a href="https://docs.asterisk.org">Asterisk Documentation</a> website has full
|
||||
information for building, installing, configuring and running Asterisk.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Run <code>./configure</code><br>
|
||||
Execute the configure script to guess values for system-dependent
|
||||
variables used during compilation. If the script indicates that some required
|
||||
components are missing, you can run <code>./contrib/scripts/install_prereq install</code>
|
||||
to install the necessary components. Note that this will install all dependencies
|
||||
for every functionality of Asterisk. After running the script, you will need
|
||||
to rerun <code>./configure</code>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Run <code>make menuselect</code><br>
|
||||
This is needed if you want to select the modules that will be compiled and to
|
||||
check dependencies for various optional modules.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Run <code>make</code><br>
|
||||
Assuming the build completes successfully:</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Run <code>make install</code><br>
|
||||
If this is your first time working with Asterisk, you may wish to install
|
||||
the sample PBX, with demonstration extensions, etc. If so, run:</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Run <code>make samples</code><br>
|
||||
Doing so will overwrite any existing configuration files you have installed.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Finally, you can launch Asterisk in the foreground mode (not a daemon) with
|
||||
<code>asterisk -vvvc</code><br>
|
||||
You'll see a bunch of verbose messages fly by your screen as Asterisk
|
||||
initializes (that's the "very very verbose" mode). When it's ready, if
|
||||
you specified the "c" then you'll get a command line console, that looks
|
||||
like this:<br>
|
||||
<code>*CLI></code><br>
|
||||
You can type <code>core show help</code> at any time to get help with the system. For help
|
||||
with a specific command, type <code>core show help <command></code>.</p>
|
||||
</li>
|
||||
</ol>
|
||||
<p><code>man asterisk</code> at the Unix/Linux command prompt will give you detailed
|
||||
information on how to start and stop Asterisk, as well as all the command
|
||||
line options for starting Asterisk.</p>
|
||||
<h3>ABOUT CONFIGURATION FILES</h3>
|
||||
<p>All Asterisk configuration files share a common format. Comments are
|
||||
delimited by <code>;</code> (since <code>#</code> of course, being a DTMF digit, may occur in
|
||||
many places). A configuration file is divided into sections whose names
|
||||
appear in <code>[]</code>'s. Each section typically contains statements in the form
|
||||
<code>variable = value</code> although you may see <code>variable => value</code> in older samples.</p>
|
||||
<h3>SPECIAL NOTE ON TIME</h3>
|
||||
<p>Those using SIP phones should be aware that Asterisk is sensitive to
|
||||
large jumps in time. Manually changing the system time using date(1)
|
||||
(or other similar commands) may cause SIP registrations and other
|
||||
internal processes to fail. For this reason, you should always use
|
||||
a time synchronization package to keep your system time accurate.
|
||||
All OS/distributions make one or more of the following packages
|
||||
available:</p>
|
||||
<ul>
|
||||
<li>ntpd/ntpsec</li>
|
||||
<li>chronyd</li>
|
||||
<li>systemd-timesyncd</li>
|
||||
</ul>
|
||||
<p>Be sure to install and configure one (and only one) of them.</p>
|
||||
<h3>FILE DESCRIPTORS</h3>
|
||||
<p>Depending on the size of your system and your configuration,
|
||||
Asterisk can consume a large number of file descriptors. In UNIX,
|
||||
file descriptors are used for more than just files on disk. File
|
||||
descriptors are also used for handling network communication
|
||||
(e.g. SIP, IAX2, or H.323 calls) and hardware access (e.g. analog and
|
||||
digital trunk hardware). Asterisk accesses many on-disk files for
|
||||
everything from configuration information to voicemail storage.</p>
|
||||
<p>Most systems limit the number of file descriptors that Asterisk can
|
||||
have open at one time. This can limit the number of simultaneous
|
||||
calls that your system can handle. For example, if the limit is set
|
||||
at 1024 (a common default value) Asterisk can handle approximately 150
|
||||
SIP calls simultaneously. To change the number of file descriptors
|
||||
follow the instructions for your system below:</p>
|
||||
<h4>PAM-BASED LINUX SYSTEM</h4>
|
||||
<p>If your system uses PAM (Pluggable Authentication Modules) edit
|
||||
<code>/etc/security/limits.conf</code>. Add these lines to the bottom of the file:</p>
|
||||
<pre><code class="language-text">root soft nofile 4096
|
||||
root hard nofile 8196
|
||||
asterisk soft nofile 4096
|
||||
asterisk hard nofile 8196
|
||||
</code></pre>
|
||||
<p>(adjust the numbers to taste). You may need to reboot the system for
|
||||
these changes to take effect.</p>
|
||||
<h4>GENERIC UNIX SYSTEM</h4>
|
||||
<p>If there are no instructions specifically adapted to your system
|
||||
above you can try adding the command <code>ulimit -n 8192</code> to the script
|
||||
that starts Asterisk.</p>
|
||||
<h2>MORE INFORMATION</h2>
|
||||
<p>Visit the <a href="https://docs.asterisk.org">Asterisk Documentation</a> website
|
||||
for more documentation on various features and please read all the
|
||||
configuration samples that include documentation on the configuration options.</p>
|
||||
<p>Finally, you may wish to join the
|
||||
<a href="https://community.asterisk.org">Asterisk Community Forums</a></p>
|
||||
<p>Welcome to the growing worldwide community of Asterisk users!</p>
|
||||
<pre><code> Mark Spencer, and the Asterisk.org development community
|
||||
</code></pre>
|
||||
<hr>
|
||||
<p>Asterisk is a trademark of Sangoma Technologies Corporation</p>
|
||||
<p>[<a href="https://www.sangoma.com/">Sangoma</a>]
|
||||
[<a href="https://www.asterisk.org">Home Page</a>]
|
||||
[<a href="https://www.asterisk.org/support">Support</a>]
|
||||
[<a href="https://docs.asterisk.org">Documentation</a>]
|
||||
[<a href="https://community.asterisk.org">Community Forums</a>]
|
||||
[<a href="https://github.com/asterisk/asterisk/releases">Release Notes</a>]
|
||||
[<a href="https://docs.asterisk.org/Deployment/Important-Security-Considerations/">Security</a>]
|
||||
[<a href="https://lists.digium.com">Mailing List Archive</a>] </p>
|
||||
</body></html>
|
||||
212
README.md
212
README.md
@@ -1,212 +0,0 @@
|
||||
# The Asterisk(R) Open Source PBX
|
||||
|
||||
```
|
||||
By Mark Spencer <markster@digium.com> and the Asterisk.org developer community.
|
||||
Copyright (C) 2001-2025 Sangoma Technologies Corporation and other copyright holders.
|
||||
```
|
||||
|
||||
## SECURITY
|
||||
|
||||
It is imperative that you read and fully understand the contents of
|
||||
the security information document before you attempt to configure and run
|
||||
an Asterisk server.
|
||||
|
||||
See [Important Security Considerations](https://docs.asterisk.org/Deployment/Important-Security-Considerations) for more information.
|
||||
|
||||
## WHAT IS ASTERISK ?
|
||||
|
||||
Asterisk is an Open Source PBX and telephony toolkit. It is, in a
|
||||
sense, middleware between Internet and telephony channels on the bottom,
|
||||
and Internet and telephony applications at the top. However, Asterisk supports
|
||||
more telephony interfaces than just Internet telephony. Asterisk also has a
|
||||
vast amount of support for traditional PSTN telephony, as well.
|
||||
|
||||
For more information on the project itself, please visit the [Asterisk
|
||||
Home Page](https://www.asterisk.org) and the official
|
||||
[Asterisk Documentation](https://docs.asterisk.org).
|
||||
|
||||
## SUPPORTED OPERATING SYSTEMS
|
||||
|
||||
### Linux
|
||||
|
||||
The Asterisk Open Source PBX is developed and tested primarily on the
|
||||
GNU/Linux operating system, and is supported on every major GNU/Linux
|
||||
distribution.
|
||||
|
||||
### Others
|
||||
|
||||
Asterisk has also been 'ported' and reportedly runs properly on other
|
||||
operating systems as well, Apple's Mac OS X, and the BSD variants.
|
||||
|
||||
## GETTING STARTED
|
||||
|
||||
Most users are using VoIP/SIP exclusively these days but if you need to
|
||||
interface to TDM or analog services or devices, be sure you've got supported
|
||||
hardware.
|
||||
|
||||
Supported telephony hardware includes:
|
||||
* All Analog and Digital Interface cards from Sangoma
|
||||
* Any full duplex sound card supported by PortAudio
|
||||
* The Xorcom Astribank channel bank
|
||||
|
||||
### UPGRADING FROM AN EARLIER VERSION
|
||||
|
||||
If you are updating from a previous version of Asterisk, make sure you
|
||||
read the Change Logs.
|
||||
|
||||
<!-- CHANGELOGS (the URL will change based on the location of this README) -->
|
||||
[Change Logs](ChangeLogs/ChangeLog-20.18.2.html)
|
||||
<!-- END-CHANGELOGS -->
|
||||
|
||||
### NEW INSTALLATIONS
|
||||
|
||||
Ensure that your system contains a compatible compiler and development
|
||||
libraries. Asterisk requires either the GNU Compiler Collection (GCC) version
|
||||
4.1 or higher, or a compiler that supports the C99 specification and some of
|
||||
the gcc language extensions. In addition, your system needs to have the C
|
||||
library headers available, and the headers and libraries for ncurses.
|
||||
|
||||
There are many modules that have additional dependencies. To see what
|
||||
libraries are being looked for, see `./configure --help`, or run
|
||||
`make menuselect` to view the dependencies for specific modules.
|
||||
|
||||
On many distributions, these dependencies are installed by packages with names
|
||||
like 'glibc-devel', 'ncurses-devel', 'openssl-devel' and 'zlib-devel'
|
||||
or similar. The `contrib/scripts/install_prereq` script can be used to install
|
||||
the dependencies for most Debian and Redhat based Linux distributions.
|
||||
The script also handles SUSE, Arch, Gentoo, FreeBSD, NetBSD and OpenBSD but
|
||||
those distributions mightnoit have complete support or they might be out of date.
|
||||
|
||||
So, let's proceed:
|
||||
|
||||
1. Read the documentation.<br>
|
||||
The [Asterisk Documentation](https://docs.asterisk.org) website has full
|
||||
information for building, installing, configuring and running Asterisk.
|
||||
|
||||
2. Run `./configure`<br>
|
||||
Execute the configure script to guess values for system-dependent
|
||||
variables used during compilation. If the script indicates that some required
|
||||
components are missing, you can run `./contrib/scripts/install_prereq install`
|
||||
to install the necessary components. Note that this will install all dependencies
|
||||
for every functionality of Asterisk. After running the script, you will need
|
||||
to rerun `./configure`.
|
||||
|
||||
3. Run `make menuselect`<br>
|
||||
This is needed if you want to select the modules that will be compiled and to
|
||||
check dependencies for various optional modules.
|
||||
|
||||
4. Run `make`<br>
|
||||
Assuming the build completes successfully:
|
||||
|
||||
5. Run `make install`<br>
|
||||
If this is your first time working with Asterisk, you may wish to install
|
||||
the sample PBX, with demonstration extensions, etc. If so, run:
|
||||
|
||||
6. Run `make samples`<br>
|
||||
Doing so will overwrite any existing configuration files you have installed.
|
||||
|
||||
7. Finally, you can launch Asterisk in the foreground mode (not a daemon) with
|
||||
`asterisk -vvvc`<br>
|
||||
You'll see a bunch of verbose messages fly by your screen as Asterisk
|
||||
initializes (that's the "very very verbose" mode). When it's ready, if
|
||||
you specified the "c" then you'll get a command line console, that looks
|
||||
like this:<br>
|
||||
`*CLI>`<br>
|
||||
You can type `core show help` at any time to get help with the system. For help
|
||||
with a specific command, type `core show help <command>`.
|
||||
|
||||
`man asterisk` at the Unix/Linux command prompt will give you detailed
|
||||
information on how to start and stop Asterisk, as well as all the command
|
||||
line options for starting Asterisk.
|
||||
|
||||
### ABOUT CONFIGURATION FILES
|
||||
|
||||
All Asterisk configuration files share a common format. Comments are
|
||||
delimited by `;` (since `#` of course, being a DTMF digit, may occur in
|
||||
many places). A configuration file is divided into sections whose names
|
||||
appear in `[]`'s. Each section typically contains statements in the form
|
||||
`variable = value` although you may see `variable => value` in older samples.
|
||||
|
||||
### SPECIAL NOTE ON TIME
|
||||
|
||||
Those using SIP phones should be aware that Asterisk is sensitive to
|
||||
large jumps in time. Manually changing the system time using date(1)
|
||||
(or other similar commands) may cause SIP registrations and other
|
||||
internal processes to fail. For this reason, you should always use
|
||||
a time synchronization package to keep your system time accurate.
|
||||
All OS/distributions make one or more of the following packages
|
||||
available:
|
||||
|
||||
* ntpd/ntpsec
|
||||
* chronyd
|
||||
* systemd-timesyncd
|
||||
|
||||
Be sure to install and configure one (and only one) of them.
|
||||
|
||||
### FILE DESCRIPTORS
|
||||
|
||||
Depending on the size of your system and your configuration,
|
||||
Asterisk can consume a large number of file descriptors. In UNIX,
|
||||
file descriptors are used for more than just files on disk. File
|
||||
descriptors are also used for handling network communication
|
||||
(e.g. SIP, IAX2, or H.323 calls) and hardware access (e.g. analog and
|
||||
digital trunk hardware). Asterisk accesses many on-disk files for
|
||||
everything from configuration information to voicemail storage.
|
||||
|
||||
Most systems limit the number of file descriptors that Asterisk can
|
||||
have open at one time. This can limit the number of simultaneous
|
||||
calls that your system can handle. For example, if the limit is set
|
||||
at 1024 (a common default value) Asterisk can handle approximately 150
|
||||
SIP calls simultaneously. To change the number of file descriptors
|
||||
follow the instructions for your system below:
|
||||
|
||||
#### PAM-BASED LINUX SYSTEM
|
||||
|
||||
If your system uses PAM (Pluggable Authentication Modules) edit
|
||||
`/etc/security/limits.conf`. Add these lines to the bottom of the file:
|
||||
|
||||
```text
|
||||
root soft nofile 4096
|
||||
root hard nofile 8196
|
||||
asterisk soft nofile 4096
|
||||
asterisk hard nofile 8196
|
||||
```
|
||||
|
||||
(adjust the numbers to taste). You may need to reboot the system for
|
||||
these changes to take effect.
|
||||
|
||||
#### GENERIC UNIX SYSTEM
|
||||
|
||||
If there are no instructions specifically adapted to your system
|
||||
above you can try adding the command `ulimit -n 8192` to the script
|
||||
that starts Asterisk.
|
||||
|
||||
## MORE INFORMATION
|
||||
|
||||
Visit the [Asterisk Documentation](https://docs.asterisk.org) website
|
||||
for more documentation on various features and please read all the
|
||||
configuration samples that include documentation on the configuration options.
|
||||
|
||||
Finally, you may wish to join the
|
||||
[Asterisk Community Forums](https://community.asterisk.org)
|
||||
|
||||
|
||||
Welcome to the growing worldwide community of Asterisk users!
|
||||
|
||||
```
|
||||
Mark Spencer, and the Asterisk.org development community
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
Asterisk is a trademark of Sangoma Technologies Corporation
|
||||
|
||||
\[[Sangoma](https://www.sangoma.com/)\]
|
||||
\[[Home Page](https://www.asterisk.org)\]
|
||||
\[[Support](https://www.asterisk.org/support)\]
|
||||
\[[Documentation](https://docs.asterisk.org)\]
|
||||
\[[Community Forums](https://community.asterisk.org)\]
|
||||
\[[Release Notes](https://github.com/asterisk/asterisk/releases)\]
|
||||
\[[Security](https://docs.asterisk.org/Deployment/Important-Security-Considerations/)\]
|
||||
\[[Mailing List Archive](https://lists.digium.com)\]
|
||||
|
||||
22
README.opsound
Normal file
22
README.opsound
Normal 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
|
||||
67
SECURITY
Normal file
67
SECURITY
Normal file
@@ -0,0 +1,67 @@
|
||||
==== Security Notes with Asterisk ====
|
||||
|
||||
PLEASE READ THE FOLLOWING IMPORTANT SECURITY RELATED INFORMATION.
|
||||
IMPROPER CONFIGURATION OF ASTERISK COULD ALLOW UNAUTHORIZED USE OF YOUR
|
||||
FACILITIES, POTENTIALLY INCURRING SUBSTANTIAL CHARGES.
|
||||
|
||||
Asterisk security involves both network security (encryption, authentication)
|
||||
as well as dialplan security (authorization - who can access services in
|
||||
your pbx). If you are setting up Asterisk in production use, please make
|
||||
sure you understand the issues involved.
|
||||
|
||||
* NETWORK SECURITY
|
||||
|
||||
If you install Asterisk and use the "make samples" command to install
|
||||
a demonstration configuration, Asterisk will open a few ports for accepting
|
||||
VoIP calls. Check the channel configuration files for the ports and IP addresses.
|
||||
|
||||
If you enable the manager interface in manager.conf, please make sure that
|
||||
you access manager in a safe environment or protect it with SSH or other
|
||||
VPN solutions.
|
||||
|
||||
For all TCP/IP connections in Asterisk, you can set ACL lists that
|
||||
will permit or deny network access to Asterisk services. Please check
|
||||
the "permit" and "deny" configuration options in manager.conf and
|
||||
the VoIP channel configurations - i.e. sip.conf and iax.conf.
|
||||
|
||||
The IAX2 protocol supports strong RSA key authentication as well as
|
||||
AES encryption of voice and signalling. The SIP channel does not
|
||||
support encryption in this version of Asterisk.
|
||||
|
||||
* DIALPLAN SECURITY
|
||||
|
||||
First and foremost remember this:
|
||||
|
||||
USE THE EXTENSION CONTEXTS TO ISOLATE OUTGOING OR TOLL SERVICES FROM ANY
|
||||
INCOMING CONNECTIONS.
|
||||
|
||||
You should consider that if any channel, incoming line, etc can enter an
|
||||
extension context that it has the capability of accessing any extension
|
||||
within that context.
|
||||
|
||||
Therefore, you should NOT allow access to outgoing or toll services in
|
||||
contexts that are accessible (especially without a password) from incoming
|
||||
channels, be they IAX channels, FX or other trunks, or even untrusted
|
||||
stations within you network. In particular, never ever put outgoing toll
|
||||
services in the "default" context. To make things easier, you can include
|
||||
the "default" context within other private contexts by using:
|
||||
|
||||
include => default
|
||||
|
||||
in the appropriate section. A well designed PBX might look like this:
|
||||
|
||||
[longdistance]
|
||||
exten => _91NXXNXXXXXX,1,Dial(Zap/g2/${EXTEN:1})
|
||||
include => local
|
||||
|
||||
[local]
|
||||
exten => _9NXXNXXX,1,Dial(Zap/g2/${EXTEN:1})
|
||||
include => default
|
||||
|
||||
[default]
|
||||
exten => 6123,Dial(Zap/1)
|
||||
|
||||
|
||||
DON'T FORGET TO TAKE THE DEMO CONTEXT OUT OF YOUR DEFAULT CONTEXT. There
|
||||
isn't really a security reason, it just will keep people from wanting to
|
||||
play with your Asterisk setup remotely.
|
||||
@@ -1,9 +0,0 @@
|
||||
# Security Policy
|
||||
|
||||
## Supported Versions
|
||||
|
||||
The Asterisk project maintains a [documentation page](https://docs.asterisk.org/About-the-Project/Asterisk-Versions/) of releases. Each version is listed with its release date, security fix only date, and end of life date. Consult this wiki page to see if the version of Asterisk you are reporting a security vulnerability against is still supported.
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
To report a vulnerability use the "Report a vulnerability" button under the "Security" tab of this project.
|
||||
205
UPGRADE.txt
Normal file
205
UPGRADE.txt
Normal file
@@ -0,0 +1,205 @@
|
||||
Information for Upgrading From Previous Asterisk Releases
|
||||
=========================================================
|
||||
|
||||
Compiling:
|
||||
|
||||
* The Asterisk 1.2 source code now uses C language features
|
||||
supported only by 'modern' C compilers. Generally, this means GCC
|
||||
version 3.0 or higher, although some GCC 2.96 releases will also
|
||||
work. Some non-GCC compilers that support C99 and the common GCC
|
||||
extensions (including anonymous structures and unions) will also
|
||||
work. All releases of GCC 2.95 do _not_ have the requisite feature
|
||||
support; systems using that compiler will need to be upgraded to
|
||||
a more recent compiler release.
|
||||
|
||||
Dialplan Expressions:
|
||||
|
||||
* The dialplan expression parser (which handles $[ ... ] constructs)
|
||||
has gone through a major upgrade, but has one incompatible change:
|
||||
spaces are no longer required around expression operators, including
|
||||
string comparisons. However, you can now use quoting to keep strings
|
||||
together for comparison. For more details, please read the
|
||||
doc/README.variables file, and check over your dialplan for possible
|
||||
problems.
|
||||
|
||||
Agents:
|
||||
|
||||
* The default for ackcall has been changed to "no" instead of "yes"
|
||||
because of a bug which caused the "yes" behavior to generally act like
|
||||
"no". You may need to adjust the value if your agents behave
|
||||
differently than you expect with respect to acknowledgement.
|
||||
|
||||
* The AgentCallBackLogin application now requires a second '|' before
|
||||
specifying an extension@context. This is to distinguish the options
|
||||
string from the extension, so that they do not conflict. See
|
||||
'show application AgentCallbackLogin' for more details.
|
||||
|
||||
Parking:
|
||||
|
||||
* Parking behavior has changed slightly; when a parked call times out,
|
||||
Asterisk will attempt to deliver the call back to the extension that
|
||||
parked it, rather than the 's' extension. If that extension is busy
|
||||
or unavailable, the parked call will be lost.
|
||||
|
||||
Dialing:
|
||||
|
||||
* The Caller*ID of the outbound leg is now the extension that was
|
||||
called, rather than the Caller*ID of the inbound leg of the call. The
|
||||
"o" flag for Dial can be used to restore the original behavior if
|
||||
desired. Note that if you are looking for the originating callerid
|
||||
from the manager event, there is a new manager event "Dial" which
|
||||
provides the source and destination channels and callerid.
|
||||
|
||||
IAX:
|
||||
|
||||
* The naming convention for IAX channels has changed in two ways:
|
||||
1. The call number follows a "-" rather than a "/" character.
|
||||
2. The name of the channel has been simplified to IAX2/peer-callno,
|
||||
rather than IAX2/peer@peer-callno or even IAX2/peer@peer/callno.
|
||||
|
||||
SIP:
|
||||
|
||||
* The global option "port" in 1.0.X that is used to set which port to
|
||||
bind to has been changed to "bindport" to be more consistent with
|
||||
the other channel drivers and to avoid confusion with the "port"
|
||||
option for users/peers.
|
||||
|
||||
* The "Registry" event now uses "Username" rather than "User" for
|
||||
consistency with IAX.
|
||||
|
||||
Applications:
|
||||
|
||||
* With the addition of dialplan functions (which operate similarly
|
||||
to variables), the SetVar application has been renamed to Set.
|
||||
|
||||
* The CallerPres application has been removed. Use SetCallerPres
|
||||
instead. It accepts both numeric and symbolic names.
|
||||
|
||||
* The applications GetGroupCount, GetGroupMatchCount, SetGroup, and
|
||||
CheckGroup have been deprecated in favor of functions. Here is a
|
||||
table of their replacements:
|
||||
|
||||
GetGroupCount([groupname][@category] GROUP_COUNT([groupname][@category]) Set(GROUPCOUNT=${GROUP_COUNT()})
|
||||
GroupMatchCount(groupmatch[@category]) GROUP_MATCH_COUNT(groupmatch[@category]) Set(GROUPCOUNT=${GROUP_MATCH_COUNT(SIP/.*)})
|
||||
SetGroup(groupname[@category]) GROUP([category])=groupname Set(GROUP()=test)
|
||||
CheckGroup(max[@category]) N/A GotoIf($[ ${GROUP_COUNT()} > 5 ]?103)
|
||||
|
||||
Note that CheckGroup does not have a direct replacement. There is
|
||||
also a new function called GROUP_LIST() which will return a space
|
||||
separated list of all of the groups set on a channel. The GROUP()
|
||||
function can also return the name of the group set on a channel when
|
||||
used in a read environment.
|
||||
|
||||
* The applications DBGet and DBPut have been deprecated in favor of
|
||||
functions. Here is a table of their replacements:
|
||||
|
||||
DBGet(foo=family/key) Set(foo=${DB(family/key)})
|
||||
DBPut(family/key=${foo}) Set(DB(family/key)=${foo})
|
||||
|
||||
* The application SetLanguage has been deprecated in favor of the
|
||||
function LANGUAGE().
|
||||
|
||||
SetLanguage(fr) Set(LANGUAGE()=fr)
|
||||
|
||||
The LANGUAGE function can also return the currently set language:
|
||||
|
||||
Set(MYLANG=${LANGUAGE()})
|
||||
|
||||
* The applications AbsoluteTimeout, DigitTimeout, and ResponseTimeout
|
||||
have been deprecated in favor of the function TIMEOUT(timeouttype):
|
||||
|
||||
AbsoluteTimeout(300) Set(TIMEOUT(absolute)=300)
|
||||
DigitTimeout(15) Set(TIMEOUT(digit)=15)
|
||||
ResponseTimeout(15) Set(TIMEOUT(response)=15)
|
||||
|
||||
The TIMEOUT() function can also return the currently set timeouts:
|
||||
|
||||
Set(DTIMEOUT=${TIMEOUT(digit)})
|
||||
|
||||
* The applications SetCIDName, SetCIDNum, and SetRDNIS have been
|
||||
deprecated in favor of the CALLERID(datatype) function:
|
||||
|
||||
SetCIDName(Joe Cool) Set(CALLERID(name)=Joe Cool)
|
||||
SetCIDNum(2025551212) Set(CALLERID(number)=2025551212)
|
||||
SetRDNIS(2024561414) Set(CALLERID(RDNIS)=2024561414)
|
||||
|
||||
* The application Record now uses the period to separate the filename
|
||||
from the format, rather than the colon.
|
||||
|
||||
* The application VoiceMail now supports a 'temporary' greeting for each
|
||||
mailbox. This greeting can be recorded by using option 4 in the
|
||||
'mailbox options' menu, and 'change your password' option has been
|
||||
moved to option 5.
|
||||
|
||||
* The application VoiceMailMain now only matches the 'default' context if
|
||||
none is specified in the arguments. (This was the previously
|
||||
documented behavior, however, we didn't follow that behavior.) The old
|
||||
behavior can be restored by setting searchcontexts=yes in voicemail.conf.
|
||||
|
||||
Queues:
|
||||
|
||||
* A queue is now considered empty not only if there are no members but if
|
||||
none of the members are available (e.g. agents not logged on). To
|
||||
restore the original behavior, use "leavewhenempty=strict" or
|
||||
"joinwhenempty=strict" instead of "=yes" for those options.
|
||||
|
||||
* It is now possible to use multi-digit extensions in the exit context
|
||||
for a queue (although you should not have overlapping extensions,
|
||||
as there is no digit timeout). This means that the EXITWITHKEY event
|
||||
in queue_log can now contain a key field with more than a single
|
||||
character in it.
|
||||
|
||||
Extensions:
|
||||
|
||||
* By default, there is a new option called "autofallthrough" in
|
||||
extensions.conf that is set to yes. Asterisk 1.0 (and earlier)
|
||||
behavior was to wait for an extension to be dialed after there were no
|
||||
more extensions to execute. "autofallthrough" changes this behavior
|
||||
so that the call will immediately be terminated with BUSY,
|
||||
CONGESTION, or HANGUP based on Asterisk's best guess. If you are
|
||||
writing an extension for IVR, you must use the WaitExten application
|
||||
if "autofallthrough" is set to yes.
|
||||
|
||||
AGI:
|
||||
|
||||
* AGI scripts did not always get SIGHUP at the end, previously. That
|
||||
behavior has been fixed. If you do not want your script to terminate
|
||||
at the end of AGI being called (e.g. on a hangup) then set SIGHUP to
|
||||
be ignored within your application.
|
||||
|
||||
* CallerID is reported with agi_callerid and agi_calleridname instead
|
||||
of a single parameter holding both.
|
||||
|
||||
Music On Hold:
|
||||
|
||||
* The preferred format for musiconhold.conf has changed; please see the
|
||||
sample configuration file for the new format. The existing format
|
||||
is still supported but will generate warnings when the module is loaded.
|
||||
|
||||
chan_modem:
|
||||
|
||||
* All the chan_modem channel drivers (aopen, bestdata and i4l) are deprecated
|
||||
in this release, and will be removed in the next major Asterisk release.
|
||||
Please migrate to chan_misdn for ISDN interfaces; there is no upgrade
|
||||
path for aopen and bestdata modem users.
|
||||
|
||||
MeetMe:
|
||||
|
||||
* The conference application now allows users to increase/decrease their
|
||||
speaking volume and listening volume (independently of each other and
|
||||
other users); the 'admin' and 'user' menus have changed, and new sound
|
||||
files are included with this release. However, if a user calling in
|
||||
over a Zaptel channel that does NOT have hardware DTMF detection
|
||||
increases their speaking volume, it is likely they will no longer be
|
||||
able to enter/exit the menu or make any further adjustments, as the
|
||||
software DTMF detector will not be able to recognize the DTMF coming
|
||||
from their device.
|
||||
|
||||
GetVar Manager Action:
|
||||
|
||||
* Previously, the behavior of the GetVar manager action reported the value
|
||||
of a variable in the following manner:
|
||||
> name: value
|
||||
This has been changed to a manner similar to the SetVar action and is now
|
||||
> Variable: name
|
||||
> Value: value
|
||||
@@ -1,56 +0,0 @@
|
||||
=========================================================
|
||||
=== Information for upgrading from Zaptel to DAHDI ===
|
||||
=========================================================
|
||||
|
||||
As announced in early 2008, Digium is renaming the Zaptel telephony
|
||||
interface project to DAHDI (Digium Asterisk Hardware Device Interface)
|
||||
to accommodate the desires of the owner of the Zaptel trademark for
|
||||
telephony purposes.
|
||||
|
||||
This version of Asterisk can only be built using DAHDI, and as a
|
||||
result there are number of changes that will be visible to previous
|
||||
users of Asterisk with Zaptel.
|
||||
|
||||
First, the modules that directly use services from DAHDI have been
|
||||
renamed; the new names are:
|
||||
|
||||
chan_zap.so -> chan_dahdi.so
|
||||
app_zapbarge.so -> app_dahdibarge.so
|
||||
app_zapscan.so -> app_dahdiscan.so
|
||||
codec_zap.so -> codec_dahdi.so
|
||||
|
||||
The following modules have been removed:
|
||||
app_zapras.so -> app_dahdiras.so
|
||||
|
||||
Second, the behavior of many modules has changed due to the switch to
|
||||
DAHDI; the changes are listed below.
|
||||
|
||||
chan_dahdi.so:
|
||||
|
||||
Incoming and outgoing channels managed by this module will be
|
||||
'DAHDI' channels instead of 'Zap' channels.
|
||||
|
||||
All CLI commands that began with 'zap' have been renamed to 'dahdi'
|
||||
commands.
|
||||
|
||||
All Asterisk Manager Interface (AMI) actions that began with 'Zap'
|
||||
have changed to 'DAHDI' prefixes.
|
||||
|
||||
The ZapSendKeypadFacility dialplan application has been renamed to
|
||||
DAHDISendKeypadFacility.
|
||||
|
||||
The configuration for the channel driver will be read from
|
||||
/etc/asterisk/chan_dahdi.conf instead of /etc/asterisk/zapata.conf.
|
||||
|
||||
app_dahdibarge.so:
|
||||
|
||||
The ZapBarge application has been renamed to DAHDIBarge.
|
||||
|
||||
app_dahdiras.so:
|
||||
|
||||
The ZapRAS application was renamed to DAHDIRAS. This application has
|
||||
since been removed.
|
||||
|
||||
app_dahdiscan.so:
|
||||
|
||||
The ZapScan application has been renamed to DAHDIScan.
|
||||
355
acl.c
Normal file
355
acl.c
Normal file
@@ -0,0 +1,355 @@
|
||||
/*
|
||||
* Asterisk -- An open source telephony toolkit.
|
||||
*
|
||||
* Copyright (C) 1999 - 2005, Digium, Inc.
|
||||
*
|
||||
* Mark Spencer <markster@digium.com>
|
||||
*
|
||||
* See http://www.asterisk.org for more information about
|
||||
* the Asterisk project. Please do not directly contact
|
||||
* any of the maintainers of this project for assistance;
|
||||
* the project provides a web site, mailing lists and IRC
|
||||
* channels for your use.
|
||||
*
|
||||
* This program is free software, distributed under the terms of
|
||||
* the GNU General Public License Version 2. See the LICENSE file
|
||||
* at the top of the source tree.
|
||||
*/
|
||||
|
||||
/*! \file
|
||||
*
|
||||
* \brief Various sorts of access control
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sys/time.h>
|
||||
#include <signal.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netdb.h>
|
||||
#include <net/if.h>
|
||||
#include <netinet/in.h>
|
||||
#include <netinet/in_systm.h>
|
||||
#include <netinet/ip.h>
|
||||
#include <sys/ioctl.h>
|
||||
|
||||
#if defined(__OpenBSD__) || defined(__NetBSD__) || defined(__FreeBSD__)
|
||||
#include <fcntl.h>
|
||||
#include <net/route.h>
|
||||
#endif
|
||||
|
||||
#if defined(SOLARIS)
|
||||
#include <sys/sockio.h>
|
||||
#endif
|
||||
|
||||
/* netinet/ip.h may not define the following (See RFCs 791 and 1349) */
|
||||
#if !defined(IPTOS_LOWCOST)
|
||||
#define IPTOS_LOWCOST 0x02
|
||||
#endif
|
||||
|
||||
#if !defined(IPTOS_MINCOST)
|
||||
#define IPTOS_MINCOST IPTOS_LOWCOST
|
||||
#endif
|
||||
|
||||
#include "asterisk.h"
|
||||
|
||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||
|
||||
#include "asterisk/acl.h"
|
||||
#include "asterisk/logger.h"
|
||||
#include "asterisk/channel.h"
|
||||
#include "asterisk/options.h"
|
||||
#include "asterisk/utils.h"
|
||||
#include "asterisk/lock.h"
|
||||
#include "asterisk/srv.h"
|
||||
#include "asterisk/compat.h"
|
||||
|
||||
#if defined(__OpenBSD__) || defined(__NetBSD__) || defined(__FreeBSD__)
|
||||
AST_MUTEX_DEFINE_STATIC(routeseq_lock);
|
||||
#endif
|
||||
|
||||
struct ast_ha {
|
||||
/* Host access rule */
|
||||
struct in_addr netaddr;
|
||||
struct in_addr netmask;
|
||||
int sense;
|
||||
struct ast_ha *next;
|
||||
};
|
||||
|
||||
/* Default IP - if not otherwise set, don't breathe garbage */
|
||||
static struct in_addr __ourip = { 0x00000000 };
|
||||
|
||||
struct my_ifreq {
|
||||
char ifrn_name[IFNAMSIZ]; /* Interface name, e.g. "eth0", "ppp0", etc. */
|
||||
struct sockaddr_in ifru_addr;
|
||||
};
|
||||
|
||||
/* Free HA structure */
|
||||
void ast_free_ha(struct ast_ha *ha)
|
||||
{
|
||||
struct ast_ha *hal;
|
||||
while(ha) {
|
||||
hal = ha;
|
||||
ha = ha->next;
|
||||
free(hal);
|
||||
}
|
||||
}
|
||||
|
||||
/* Copy HA structure */
|
||||
static void ast_copy_ha(struct ast_ha *from, struct ast_ha *to)
|
||||
{
|
||||
memcpy(&to->netaddr, &from->netaddr, sizeof(from->netaddr));
|
||||
memcpy(&to->netmask, &from->netmask, sizeof(from->netmask));
|
||||
to->sense = from->sense;
|
||||
}
|
||||
|
||||
/* Create duplicate of ha structure */
|
||||
static struct ast_ha *ast_duplicate_ha(struct ast_ha *original)
|
||||
{
|
||||
struct ast_ha *new_ha = malloc(sizeof(struct ast_ha));
|
||||
/* Copy from original to new object */
|
||||
ast_copy_ha(original, new_ha);
|
||||
|
||||
return new_ha;
|
||||
}
|
||||
|
||||
/* Create duplicate HA link list */
|
||||
/* Used in chan_sip2 templates */
|
||||
struct ast_ha *ast_duplicate_ha_list(struct ast_ha *original)
|
||||
{
|
||||
struct ast_ha *start=original;
|
||||
struct ast_ha *ret = NULL;
|
||||
struct ast_ha *link,*prev=NULL;
|
||||
|
||||
while (start) {
|
||||
link = ast_duplicate_ha(start); /* Create copy of this object */
|
||||
if (prev)
|
||||
prev->next = link; /* Link previous to this object */
|
||||
|
||||
if (!ret)
|
||||
ret = link; /* Save starting point */
|
||||
|
||||
start = start->next; /* Go to next object */
|
||||
prev = link; /* Save pointer to this object */
|
||||
}
|
||||
return ret; /* Return start of list */
|
||||
}
|
||||
|
||||
struct ast_ha *ast_append_ha(char *sense, char *stuff, struct ast_ha *path)
|
||||
{
|
||||
struct ast_ha *ha = malloc(sizeof(struct ast_ha));
|
||||
char *nm = "255.255.255.255";
|
||||
char tmp[256];
|
||||
struct ast_ha *prev = NULL;
|
||||
struct ast_ha *ret;
|
||||
int x, z;
|
||||
unsigned int y;
|
||||
ret = path;
|
||||
while (path) {
|
||||
prev = path;
|
||||
path = path->next;
|
||||
}
|
||||
if (ha) {
|
||||
ast_copy_string(tmp, stuff, sizeof(tmp));
|
||||
nm = strchr(tmp, '/');
|
||||
if (!nm) {
|
||||
nm = "255.255.255.255";
|
||||
} else {
|
||||
*nm = '\0';
|
||||
nm++;
|
||||
}
|
||||
if (!strchr(nm, '.')) {
|
||||
if ((sscanf(nm, "%d", &x) == 1) && (x >= 0) && (x <= 32)) {
|
||||
y = 0;
|
||||
for (z=0;z<x;z++) {
|
||||
y >>= 1;
|
||||
y |= 0x80000000;
|
||||
}
|
||||
ha->netmask.s_addr = htonl(y);
|
||||
}
|
||||
} else if (!inet_aton(nm, &ha->netmask)) {
|
||||
ast_log(LOG_WARNING, "%s is not a valid netmask\n", nm);
|
||||
free(ha);
|
||||
return path;
|
||||
}
|
||||
if (!inet_aton(tmp, &ha->netaddr)) {
|
||||
ast_log(LOG_WARNING, "%s is not a valid IP\n", tmp);
|
||||
free(ha);
|
||||
return path;
|
||||
}
|
||||
ha->netaddr.s_addr &= ha->netmask.s_addr;
|
||||
if (!strncasecmp(sense, "p", 1)) {
|
||||
ha->sense = AST_SENSE_ALLOW;
|
||||
} else {
|
||||
ha->sense = AST_SENSE_DENY;
|
||||
}
|
||||
ha->next = NULL;
|
||||
if (prev) {
|
||||
prev->next = ha;
|
||||
} else {
|
||||
ret = ha;
|
||||
}
|
||||
}
|
||||
ast_log(LOG_DEBUG, "%s/%s appended to acl for peer\n", stuff, nm);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ast_apply_ha(struct ast_ha *ha, struct sockaddr_in *sin)
|
||||
{
|
||||
/* Start optimistic */
|
||||
int res = AST_SENSE_ALLOW;
|
||||
while (ha) {
|
||||
char iabuf[INET_ADDRSTRLEN];
|
||||
char iabuf2[INET_ADDRSTRLEN];
|
||||
/* DEBUG */
|
||||
ast_log(LOG_DEBUG,
|
||||
"##### Testing %s with %s\n",
|
||||
ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr),
|
||||
ast_inet_ntoa(iabuf2, sizeof(iabuf2), ha->netaddr));
|
||||
/* For each rule, if this address and the netmask = the net address
|
||||
apply the current rule */
|
||||
if ((sin->sin_addr.s_addr & ha->netmask.s_addr) == ha->netaddr.s_addr)
|
||||
res = ha->sense;
|
||||
ha = ha->next;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
int ast_get_ip_or_srv(struct sockaddr_in *sin, const char *value, const char *service)
|
||||
{
|
||||
struct hostent *hp;
|
||||
struct ast_hostent ahp;
|
||||
char srv[256];
|
||||
char host[256];
|
||||
int tportno = ntohs(sin->sin_port);
|
||||
if (inet_aton(value, &sin->sin_addr))
|
||||
return 0;
|
||||
if (service) {
|
||||
snprintf(srv, sizeof(srv), "%s.%s", service, value);
|
||||
if (ast_get_srv(NULL, host, sizeof(host), &tportno, srv) > 0) {
|
||||
sin->sin_port = htons(tportno);
|
||||
value = host;
|
||||
}
|
||||
}
|
||||
hp = ast_gethostbyname(value, &ahp);
|
||||
if (hp) {
|
||||
memcpy(&sin->sin_addr, hp->h_addr, sizeof(sin->sin_addr));
|
||||
} else {
|
||||
ast_log(LOG_WARNING, "Unable to lookup '%s'\n", value);
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ast_str2tos(const char *value, int *tos)
|
||||
{
|
||||
int fval;
|
||||
if (sscanf(value, "%i", &fval) == 1)
|
||||
*tos = fval & 0xff;
|
||||
else if (!strcasecmp(value, "lowdelay"))
|
||||
*tos = IPTOS_LOWDELAY;
|
||||
else if (!strcasecmp(value, "throughput"))
|
||||
*tos = IPTOS_THROUGHPUT;
|
||||
else if (!strcasecmp(value, "reliability"))
|
||||
*tos = IPTOS_RELIABILITY;
|
||||
else if (!strcasecmp(value, "mincost"))
|
||||
*tos = IPTOS_MINCOST;
|
||||
else if (!strcasecmp(value, "none"))
|
||||
*tos = 0;
|
||||
else
|
||||
return -1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ast_get_ip(struct sockaddr_in *sin, const char *value)
|
||||
{
|
||||
return ast_get_ip_or_srv(sin, value, NULL);
|
||||
}
|
||||
|
||||
/* iface is the interface (e.g. eth0); address is the return value */
|
||||
int ast_lookup_iface(char *iface, struct in_addr *address)
|
||||
{
|
||||
int mysock, res = 0;
|
||||
struct my_ifreq ifreq;
|
||||
|
||||
memset(&ifreq, 0, sizeof(ifreq));
|
||||
ast_copy_string(ifreq.ifrn_name, iface, sizeof(ifreq.ifrn_name));
|
||||
|
||||
mysock = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP);
|
||||
res = ioctl(mysock, SIOCGIFADDR, &ifreq);
|
||||
|
||||
close(mysock);
|
||||
if (res < 0) {
|
||||
ast_log(LOG_WARNING, "Unable to get IP of %s: %s\n", iface, strerror(errno));
|
||||
memcpy((char *)address, (char *)&__ourip, sizeof(__ourip));
|
||||
return -1;
|
||||
} else {
|
||||
memcpy((char *)address, (char *)&ifreq.ifru_addr.sin_addr, sizeof(ifreq.ifru_addr.sin_addr));
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
int ast_ouraddrfor(struct in_addr *them, struct in_addr *us)
|
||||
{
|
||||
int s;
|
||||
struct sockaddr_in sin;
|
||||
socklen_t slen;
|
||||
|
||||
s = socket(PF_INET, SOCK_DGRAM, 0);
|
||||
if (s < 0) {
|
||||
ast_log(LOG_WARNING, "Cannot create socket\n");
|
||||
return -1;
|
||||
}
|
||||
sin.sin_family = AF_INET;
|
||||
sin.sin_port = 5060;
|
||||
sin.sin_addr = *them;
|
||||
if (connect(s, (struct sockaddr *)&sin, sizeof(sin))) {
|
||||
ast_log(LOG_WARNING, "Cannot connect\n");
|
||||
close(s);
|
||||
return -1;
|
||||
}
|
||||
slen = sizeof(sin);
|
||||
if (getsockname(s, (struct sockaddr *)&sin, &slen)) {
|
||||
ast_log(LOG_WARNING, "Cannot get socket name\n");
|
||||
close(s);
|
||||
return -1;
|
||||
}
|
||||
close(s);
|
||||
*us = sin.sin_addr;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ast_find_ourip(struct in_addr *ourip, struct sockaddr_in bindaddr)
|
||||
{
|
||||
char ourhost[MAXHOSTNAMELEN] = "";
|
||||
struct ast_hostent ahp;
|
||||
struct hostent *hp;
|
||||
struct in_addr saddr;
|
||||
|
||||
/* just use the bind address if it is nonzero */
|
||||
if (ntohl(bindaddr.sin_addr.s_addr)) {
|
||||
memcpy(ourip, &bindaddr.sin_addr, sizeof(*ourip));
|
||||
return 0;
|
||||
}
|
||||
/* try to use our hostname */
|
||||
if (gethostname(ourhost, sizeof(ourhost) - 1)) {
|
||||
ast_log(LOG_WARNING, "Unable to get hostname\n");
|
||||
} else {
|
||||
hp = ast_gethostbyname(ourhost, &ahp);
|
||||
if (hp) {
|
||||
memcpy(ourip, hp->h_addr, sizeof(*ourip));
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
/* A.ROOT-SERVERS.NET. */
|
||||
if (inet_aton("198.41.0.4", &saddr) && !ast_ouraddrfor(&saddr, ourip))
|
||||
return 0;
|
||||
return -1;
|
||||
}
|
||||
|
||||
1
addons/.gitignore
vendored
1
addons/.gitignore
vendored
@@ -1 +0,0 @@
|
||||
mp3
|
||||
@@ -1,74 +0,0 @@
|
||||
#
|
||||
# Asterisk -- An open source telephony toolkit.
|
||||
#
|
||||
# Makefile for Add-on Modules
|
||||
#
|
||||
# Copyright (C) 2009, Digium, Inc.
|
||||
#
|
||||
# This program is free software, distributed under the terms of
|
||||
# the GNU General Public License
|
||||
#
|
||||
|
||||
-include $(ASTTOPDIR)/menuselect.makeopts $(ASTTOPDIR)/menuselect.makedeps
|
||||
|
||||
MENUSELECT_CATEGORY=ADDONS
|
||||
MENUSELECT_DESCRIPTION=Add-ons (See README-addons.txt)
|
||||
|
||||
OOH323C:=ooCmdChannel.c ooLogChan.c ooUtils.c ooGkClient.c context.c \
|
||||
ooDateTime.c decode.c dlist.c encode.c errmgmt.c \
|
||||
memheap.c ootrace.c oochannels.c ooh245.c ooports.c \
|
||||
ooq931.c ooCapability.c ooSocket.c perutil.c eventHandler.c \
|
||||
ooCalls.c ooStackCmds.c ooh323.c ooh323ep.c printHandler.c \
|
||||
rtctype.c ooTimer.c h323/H235-SECURITY-MESSAGESDec.c \
|
||||
h323/H235-SECURITY-MESSAGESEnc.c h323/H323-MESSAGES.c h323/H323-MESSAGESDec.c \
|
||||
h323/H323-MESSAGESEnc.c h323/MULTIMEDIA-SYSTEM-CONTROL.c \
|
||||
h323/MULTIMEDIA-SYSTEM-CONTROLDec.c h323/MULTIMEDIA-SYSTEM-CONTROLEnc.c
|
||||
|
||||
H323SOURCE:=$(addprefix ooh323c/src/,$(OOH323C)) ooh323cDriver.c
|
||||
|
||||
H323CFLAGS:=-Iooh323c/src -Iooh323c/src/h323
|
||||
|
||||
ALL_C_MODS:=chan_mobile \
|
||||
chan_ooh323 \
|
||||
format_mp3 \
|
||||
res_config_mysql
|
||||
|
||||
all: check_mp3 _all
|
||||
|
||||
check_mp3:
|
||||
ifeq ($(filter format_mp3,$(MENUSELECT_ADDONS)),)
|
||||
@if [ ! -f mp3/Makefile ] ; then \
|
||||
echo ; \
|
||||
echo "**************************************************************" ; \
|
||||
echo "*** ***" ; \
|
||||
echo "*** ---> IMPORTANT INFORMATION ABOUT format_mp3 <--- ***" ; \
|
||||
echo "*** ***" ; \
|
||||
echo "*** format_mp3 has been selected to be installed, but the ***" ; \
|
||||
echo "*** MP3 decoder library has not yet been downloaded into ***" ; \
|
||||
echo "*** the source tree. To do so, please run the following ***" ; \
|
||||
echo "*** command: ***" ; \
|
||||
echo "*** ***" ; \
|
||||
echo "*** $$ contrib/scripts/get_mp3_source.sh ***" ; \
|
||||
echo "*** ***" ; \
|
||||
echo "**************************************************************" ; \
|
||||
echo ; \
|
||||
fi
|
||||
endif
|
||||
|
||||
include $(ASTTOPDIR)/Makefile.moddir_rules
|
||||
|
||||
chan_mobile.o: _ASTCFLAGS+=$(AST_NO_FORMAT_TRUNCATION)
|
||||
chan_ooh323.so: _ASTCFLAGS+=$(H323CFLAGS)
|
||||
$(call MOD_ADD_C,chan_ooh323,$(H323SOURCE))
|
||||
|
||||
ifneq ($(wildcard mp3/Makefile),)
|
||||
# At the current time, the fate of mp3 is in flux so it didn't make sense to
|
||||
# add configure/makeopts processing for array-bounds since this is the only
|
||||
# source file that needs that warning suppressed.
|
||||
mp3/layer3.o: _ASTCFLAGS+=-Wno-array-bounds
|
||||
$(call MOD_ADD_C,format_mp3,mp3/common.c mp3/dct64_i386.c mp3/decode_ntom.c mp3/layer3.c mp3/tabinit.c mp3/interface.c)
|
||||
|
||||
.PHONY: check_mp3
|
||||
else
|
||||
.PHONY: check_mp3 format_mp3.o format_mp3.so
|
||||
endif
|
||||
4840
addons/chan_mobile.c
4840
addons/chan_mobile.c
File diff suppressed because it is too large
Load Diff
5250
addons/chan_ooh323.c
5250
addons/chan_ooh323.c
File diff suppressed because it is too large
Load Diff
@@ -1,123 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
#ifndef _OO_CHAN_H323_H_
|
||||
#define _OO_CHAN_H323_H_
|
||||
|
||||
#include "asterisk.h"
|
||||
#undef PACKAGE_NAME
|
||||
#undef PACKAGE_TARNAME
|
||||
#undef PACKAGE_VERSION
|
||||
#undef PACKAGE_STRING
|
||||
#undef PACKAGE_BUGREPORT
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/param.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <net/if.h>
|
||||
#include <netinet/in.h>
|
||||
#include <netinet/in_systm.h>
|
||||
#include <netinet/ip.h>
|
||||
#include <unistd.h>
|
||||
#include <netdb.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <signal.h>
|
||||
|
||||
#include "asterisk/lock.h"
|
||||
#include "asterisk/channel.h"
|
||||
#include "asterisk/config.h"
|
||||
#include "asterisk/logger.h"
|
||||
#include "asterisk/module.h"
|
||||
#include "asterisk/pbx.h"
|
||||
#include "asterisk/utils.h"
|
||||
#include "asterisk/options.h"
|
||||
#include "asterisk/sched.h"
|
||||
#include "asterisk/io.h"
|
||||
#include "asterisk/causes.h"
|
||||
#include "asterisk/rtp_engine.h"
|
||||
#include "asterisk/acl.h"
|
||||
#include "asterisk/callerid.h"
|
||||
#include "asterisk/file.h"
|
||||
#include "asterisk/cli.h"
|
||||
#include "asterisk/app.h"
|
||||
#include "asterisk/musiconhold.h"
|
||||
#include "asterisk/manager.h"
|
||||
#include "asterisk/dsp.h"
|
||||
#include "asterisk/stringfields.h"
|
||||
#include "asterisk/format.h"
|
||||
#include "asterisk/format_cap.h"
|
||||
#include "asterisk/udptl.h"
|
||||
#include "asterisk/stasis_channels.h"
|
||||
#include "asterisk/format_cache.h"
|
||||
#include "asterisk/paths.h"
|
||||
|
||||
#include "ootypes.h"
|
||||
#include "ooUtils.h"
|
||||
#include "ooCapability.h"
|
||||
#include "oochannels.h"
|
||||
#include "ooh323ep.h"
|
||||
#include "ooh323cDriver.h"
|
||||
#include "ooCalls.h"
|
||||
#include "ooq931.h"
|
||||
#include "ooStackCmds.h"
|
||||
#include "ooCapability.h"
|
||||
#include "ooGkClient.h"
|
||||
|
||||
|
||||
struct ooh323_pvt;
|
||||
struct ooh323_user;
|
||||
struct ooh323_peer;
|
||||
/* Helper functions */
|
||||
struct ooh323_user *find_user(const char * name, const char *ip);
|
||||
struct ooh323_peer *find_peer(const char * name, int port);
|
||||
void ooh323_delete_peer(struct ooh323_peer *peer);
|
||||
|
||||
int delete_users(void);
|
||||
int delete_peers(void);
|
||||
|
||||
int ooh323_destroy(struct ooh323_pvt *p);
|
||||
int reload_config(int reload);
|
||||
int restart_monitor(void);
|
||||
|
||||
int configure_local_rtp(struct ooh323_pvt *p, ooCallData* call);
|
||||
void setup_rtp_connection(ooCallData *call, const char *remoteIp,
|
||||
int remotePort);
|
||||
void close_rtp_connection(ooCallData *call);
|
||||
struct ast_frame *ooh323_rtp_read
|
||||
(struct ast_channel *ast, struct ooh323_pvt *p);
|
||||
|
||||
void ooh323_set_write_format(ooCallData *call, struct ast_format *fmt, int txframes);
|
||||
void ooh323_set_read_format(ooCallData *call, struct ast_format *fmt);
|
||||
|
||||
int ooh323_convertAsteriskCapToH323Cap(struct ast_format *format);
|
||||
|
||||
int ooh323_convert_hangupcause_asteriskToH323(int cause);
|
||||
int ooh323_convert_hangupcause_h323ToAsterisk(int cause);
|
||||
int update_our_aliases(ooCallData *call, struct ooh323_pvt *p);
|
||||
|
||||
/* h323 msg callbacks */
|
||||
int ooh323_onReceivedSetup(ooCallData *call, Q931Message *pmsg);
|
||||
int ooh323_onReceivedDigit(OOH323CallData *call, const char* digit);
|
||||
|
||||
void setup_udptl_connection(ooCallData *call, const char *remoteIp, int remotePort);
|
||||
void close_udptl_connection(ooCallData *call);
|
||||
|
||||
EXTERN char *handle_cli_ooh323_reload(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a);
|
||||
|
||||
#endif
|
||||
@@ -1,329 +0,0 @@
|
||||
/*
|
||||
* Asterisk -- An open source telephony toolkit.
|
||||
*
|
||||
* Anthony Minessale <anthmct@yahoo.com>
|
||||
*
|
||||
* Derived from other asterisk sound formats by
|
||||
* Mark Spencer <markster@linux-support.net>
|
||||
*
|
||||
* Thanks to mpglib from http://www.mpg123.org/
|
||||
* and Chris Stenton [jacs@gnome.co.uk]
|
||||
* for coding the ability to play stereo and non-8khz files
|
||||
|
||||
* See http://www.asterisk.org for more information about
|
||||
* the Asterisk project. Please do not directly contact
|
||||
* any of the maintainers of this project for assistance;
|
||||
* the project provides a web site, mailing lists and IRC
|
||||
* channels for your use.
|
||||
*
|
||||
* This program is free software, distributed under the terms of
|
||||
* the GNU General Public License Version 2. See the LICENSE file
|
||||
* at the top of the source tree.
|
||||
*/
|
||||
|
||||
/*!
|
||||
* \file
|
||||
* \brief MP3 Format Handler
|
||||
* \ingroup formats
|
||||
*/
|
||||
|
||||
/*** MODULEINFO
|
||||
<defaultenabled>no</defaultenabled>
|
||||
<support_level>extended</support_level>
|
||||
***/
|
||||
|
||||
#include "asterisk.h"
|
||||
|
||||
#include "mp3/mpg123.h"
|
||||
#include "mp3/mpglib.h"
|
||||
|
||||
#include "asterisk/module.h"
|
||||
#include "asterisk/mod_format.h"
|
||||
#include "asterisk/logger.h"
|
||||
#include "asterisk/format_cache.h"
|
||||
|
||||
#define MP3_BUFLEN 320
|
||||
#define MP3_SCACHE 16384
|
||||
#define MP3_DCACHE 8192
|
||||
|
||||
struct mp3_private {
|
||||
/*! state for the mp3 decoder */
|
||||
struct mpstr mp;
|
||||
/*! buffer to hold mp3 data after read from disk */
|
||||
char sbuf[MP3_SCACHE];
|
||||
/*! buffer for slinear audio after being decoded out of sbuf */
|
||||
char dbuf[MP3_DCACHE];
|
||||
/*! how much data has been written to the output buffer in the ast_filestream */
|
||||
int buflen;
|
||||
/*! how much data has been written to sbuf */
|
||||
int sbuflen;
|
||||
/*! how much data is left to be read out of dbuf, starting at dbufoffset */
|
||||
int dbuflen;
|
||||
/*! current offset for reading data out of dbuf */
|
||||
int dbufoffset;
|
||||
int offset;
|
||||
long seek;
|
||||
};
|
||||
|
||||
static const char name[] = "mp3";
|
||||
|
||||
#define BLOCKSIZE 160
|
||||
#define OUTSCALE 4096
|
||||
|
||||
#define GAIN -4 /* 2^GAIN is the multiple to increase the volume by */
|
||||
|
||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
#define htoll(b) (b)
|
||||
#define htols(b) (b)
|
||||
#define ltohl(b) (b)
|
||||
#define ltohs(b) (b)
|
||||
#else
|
||||
#if __BYTE_ORDER == __BIG_ENDIAN
|
||||
#define htoll(b) \
|
||||
(((((b) ) & 0xFF) << 24) | \
|
||||
((((b) >> 8) & 0xFF) << 16) | \
|
||||
((((b) >> 16) & 0xFF) << 8) | \
|
||||
((((b) >> 24) & 0xFF) ))
|
||||
#define htols(b) \
|
||||
(((((b) ) & 0xFF) << 8) | \
|
||||
((((b) >> 8) & 0xFF) ))
|
||||
#define ltohl(b) htoll(b)
|
||||
#define ltohs(b) htols(b)
|
||||
#else
|
||||
#error "Endianess not defined"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
static int mp3_open(struct ast_filestream *s)
|
||||
{
|
||||
struct mp3_private *p = s->_private;
|
||||
InitMP3(&p->mp, OUTSCALE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static void mp3_close(struct ast_filestream *s)
|
||||
{
|
||||
struct mp3_private *p = s->_private;
|
||||
|
||||
ExitMP3(&p->mp);
|
||||
return;
|
||||
}
|
||||
|
||||
static int mp3_squeue(struct ast_filestream *s)
|
||||
{
|
||||
struct mp3_private *p = s->_private;
|
||||
int res=0;
|
||||
|
||||
res = ftell(s->f);
|
||||
p->sbuflen = fread(p->sbuf, 1, MP3_SCACHE, s->f);
|
||||
if (p->sbuflen < MP3_SCACHE) {
|
||||
if (ferror(s->f)) {
|
||||
ast_log(LOG_WARNING, "Error while reading MP3 file: %s\n", strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
res = decodeMP3(&p->mp,p->sbuf,p->sbuflen,p->dbuf,MP3_DCACHE,&p->dbuflen);
|
||||
if(res != MP3_OK)
|
||||
return -1;
|
||||
p->sbuflen -= p->dbuflen;
|
||||
p->dbufoffset = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mp3_dqueue(struct ast_filestream *s)
|
||||
{
|
||||
struct mp3_private *p = s->_private;
|
||||
int res=0;
|
||||
|
||||
if((res = decodeMP3(&p->mp,NULL,0,p->dbuf,MP3_DCACHE,&p->dbuflen)) == MP3_OK) {
|
||||
p->sbuflen -= p->dbuflen;
|
||||
p->dbufoffset = 0;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
static int mp3_queue(struct ast_filestream *s)
|
||||
{
|
||||
struct mp3_private *p = s->_private;
|
||||
int res = 0, bytes = 0;
|
||||
|
||||
if(p->seek) {
|
||||
ExitMP3(&p->mp);
|
||||
InitMP3(&p->mp, OUTSCALE);
|
||||
fseek(s->f, 0, SEEK_SET);
|
||||
p->sbuflen = p->dbuflen = p->offset = 0;
|
||||
while(p->offset < p->seek) {
|
||||
if(mp3_squeue(s))
|
||||
return -1;
|
||||
while(p->offset < p->seek && ((res = mp3_dqueue(s))) == MP3_OK) {
|
||||
for(bytes = 0 ; bytes < p->dbuflen ; bytes++) {
|
||||
p->dbufoffset++;
|
||||
p->offset++;
|
||||
if(p->offset >= p->seek)
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(res == MP3_ERR)
|
||||
return -1;
|
||||
}
|
||||
|
||||
p->seek = 0;
|
||||
return 0;
|
||||
}
|
||||
if(p->dbuflen == 0) {
|
||||
if(p->sbuflen) {
|
||||
res = mp3_dqueue(s);
|
||||
if(res == MP3_ERR)
|
||||
return -1;
|
||||
}
|
||||
if(! p->sbuflen || res != MP3_OK) {
|
||||
if(mp3_squeue(s))
|
||||
return -1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct ast_frame *mp3_read(struct ast_filestream *s, int *whennext)
|
||||
{
|
||||
|
||||
struct mp3_private *p = s->_private;
|
||||
int delay =0;
|
||||
int save=0;
|
||||
|
||||
/* Pre-populate the buffer that holds audio to be returned (dbuf) */
|
||||
if (mp3_queue(s)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (p->dbuflen) {
|
||||
/* Read out what's waiting in dbuf */
|
||||
for (p->buflen = 0; p->buflen < MP3_BUFLEN && p->buflen < p->dbuflen; p->buflen++) {
|
||||
s->buf[p->buflen + AST_FRIENDLY_OFFSET] = p->dbuf[p->buflen + p->dbufoffset];
|
||||
}
|
||||
p->dbufoffset += p->buflen;
|
||||
p->dbuflen -= p->buflen;
|
||||
}
|
||||
|
||||
if (p->buflen < MP3_BUFLEN) {
|
||||
/* dbuf didn't have enough, so reset dbuf, fill it back up and continue */
|
||||
p->dbuflen = p->dbufoffset = 0;
|
||||
|
||||
if (mp3_queue(s)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Make sure dbuf has enough to complete this read attempt */
|
||||
if (p->dbuflen >= (MP3_BUFLEN - p->buflen)) {
|
||||
for (save = p->buflen; p->buflen < MP3_BUFLEN; p->buflen++) {
|
||||
s->buf[p->buflen + AST_FRIENDLY_OFFSET] = p->dbuf[(p->buflen - save) + p->dbufoffset];
|
||||
}
|
||||
p->dbufoffset += (MP3_BUFLEN - save);
|
||||
p->dbuflen -= (MP3_BUFLEN - save);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
p->offset += p->buflen;
|
||||
delay = p->buflen / 2;
|
||||
AST_FRAME_SET_BUFFER(&s->fr, s->buf, AST_FRIENDLY_OFFSET, p->buflen);
|
||||
s->fr.samples = delay;
|
||||
*whennext = delay;
|
||||
return &s->fr;
|
||||
}
|
||||
|
||||
|
||||
static int mp3_write(struct ast_filestream *fs, struct ast_frame *f)
|
||||
{
|
||||
ast_log(LOG_ERROR,"I Can't write MP3 only read them.\n");
|
||||
return -1;
|
||||
|
||||
}
|
||||
|
||||
|
||||
static int mp3_seek(struct ast_filestream *s, off_t sample_offset, int whence)
|
||||
{
|
||||
struct mp3_private *p = s->_private;
|
||||
off_t min,max,cur;
|
||||
long offset=0,samples;
|
||||
samples = sample_offset * 2;
|
||||
|
||||
min = 0;
|
||||
fseek(s->f, 0, SEEK_END);
|
||||
max = ftell(s->f) * 100;
|
||||
cur = p->offset;
|
||||
|
||||
if (whence == SEEK_SET)
|
||||
offset = samples + min;
|
||||
else if (whence == SEEK_CUR || whence == SEEK_FORCECUR)
|
||||
offset = samples + cur;
|
||||
else if (whence == SEEK_END)
|
||||
offset = max - samples;
|
||||
if (whence != SEEK_FORCECUR) {
|
||||
offset = (offset > max)?max:offset;
|
||||
}
|
||||
|
||||
p->seek = offset;
|
||||
return fseek(s->f, offset, SEEK_SET);
|
||||
|
||||
}
|
||||
|
||||
static int mp3_rewrite(struct ast_filestream *s, const char *comment)
|
||||
{
|
||||
ast_log(LOG_ERROR,"I Can't write MP3 only read them.\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int mp3_trunc(struct ast_filestream *s)
|
||||
{
|
||||
|
||||
ast_log(LOG_ERROR,"I Can't write MP3 only read them.\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
static off_t mp3_tell(struct ast_filestream *s)
|
||||
{
|
||||
struct mp3_private *p = s->_private;
|
||||
|
||||
return p->offset/2;
|
||||
}
|
||||
|
||||
static char *mp3_getcomment(struct ast_filestream *s)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static struct ast_format_def mp3_f = {
|
||||
.name = "mp3",
|
||||
.exts = "mp3",
|
||||
.open = mp3_open,
|
||||
.write = mp3_write,
|
||||
.rewrite = mp3_rewrite,
|
||||
.seek = mp3_seek,
|
||||
.trunc = mp3_trunc,
|
||||
.tell = mp3_tell,
|
||||
.read = mp3_read,
|
||||
.close = mp3_close,
|
||||
.getcomment = mp3_getcomment,
|
||||
.buf_size = MP3_BUFLEN + AST_FRIENDLY_OFFSET,
|
||||
.desc_size = sizeof(struct mp3_private),
|
||||
};
|
||||
|
||||
|
||||
static int load_module(void)
|
||||
{
|
||||
mp3_f.format = ast_format_slin;
|
||||
InitMP3Constants();
|
||||
return ast_format_def_register(&mp3_f);
|
||||
}
|
||||
|
||||
static int unload_module(void)
|
||||
{
|
||||
return ast_format_def_unregister(name);
|
||||
}
|
||||
|
||||
AST_MODULE_INFO_STANDARD_EXTENDED(ASTERISK_GPL_KEY, "MP3 format [Any rate but 8000hz mono is optimal]");
|
||||
@@ -1,341 +0,0 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Library General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w' and `show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Library General
|
||||
Public License instead of this License.
|
||||
|
||||
@@ -1,94 +0,0 @@
|
||||
Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
|
||||
Objective Open H.323 README
|
||||
|
||||
Introduction
|
||||
Objective Open H.323 stack is a simple H.323 implementation in C. This
|
||||
package contains the core stack code. For complete H.323 stack package with
|
||||
examples or for more information visit www.obj-sys.com/open
|
||||
The ASN.1 messaging code was developed using the Objective Systems ASN1C
|
||||
compiler to implement the core H.323 specifications (H.225, H.235,
|
||||
and H.245). Additional code was then developed which makes use of
|
||||
the compiler generated code for presenting a comparatively high level
|
||||
stack API.
|
||||
|
||||
Features
|
||||
|
||||
Features supported in this package include the following:
|
||||
|
||||
* H.225/Q.931 - the following message types are supported (including
|
||||
support for FastStart and H.245 tunneling):
|
||||
- Setup
|
||||
- Connect
|
||||
- Call Proceeding
|
||||
- Alerting
|
||||
- Facility
|
||||
- ReleaseComplete
|
||||
|
||||
* H.225/RAS - the following message types are supported
|
||||
- GateKeeperRequest / Response
|
||||
- RegistrationRequest / Response
|
||||
- AdmissionRequest / Response
|
||||
- DisengageRequest / Response
|
||||
|
||||
* H.245 - the following message types are supported
|
||||
- MasterSlaveDetermination
|
||||
- MasterSlaveDeterminationAck
|
||||
- MasterSlaveDeterminationReject
|
||||
- MasterSlaveDeterminationRelease
|
||||
- TerminalCapabilitySet
|
||||
- TerminalCapabilitySetReject
|
||||
- TerminalCapabilitySetRelease
|
||||
- TerminalCapabilitySetAck
|
||||
- OpenLogicalChannel
|
||||
- OpenLogicalChannelAck
|
||||
- OpenLogicalChannelReject
|
||||
- CloseLogicalChannel
|
||||
- CloseLogicalChannelAck
|
||||
- RequestChannelClose
|
||||
- RequestChannelCloseAck
|
||||
- RequestChannelCloseReject
|
||||
- RequestChannelCloseRelease
|
||||
|
||||
|
||||
To run the stack test application chansetup
|
||||
chansetup - This is a sample program developed for testing multiple calls.
|
||||
This program allows stack testing by placing multiple calls. The number of
|
||||
calls, duration of each call and interval between successive calls are
|
||||
configurable.
|
||||
|
||||
1. Two instances of this program have to be run. Can be run on same machine or
|
||||
different machines.
|
||||
|
||||
2. First change to chansetup directory.
|
||||
|
||||
cd tests/chansetup
|
||||
|
||||
2. For running listener instance,
|
||||
|
||||
./h323peer [--use-ip ip] [--use-port port]
|
||||
|
||||
where local ip address and port can be specified for listening to incoming
|
||||
calls. By default, application determines ip address and uses default H323
|
||||
port number 1720.
|
||||
|
||||
3. For running calling instance
|
||||
|
||||
./h323peer [--use-ip ip] -n <number of calls> -duration <call duration>
|
||||
-interval <interval between successive calls> destination
|
||||
|
||||
where all times are in seconds. Interval of 0 means next call will be placed
|
||||
after current call finishes. "destination" is the dotted ip address of the
|
||||
endpoint running listener instance.
|
||||
|
||||
NOTE: More sample programs are available in the original ooh323c package
|
||||
which can be downloaded from www.obj-sys.com/open
|
||||
|
||||
Reporting Problems:
|
||||
|
||||
Report problems you encounter by sending E-mail to support@obj-sys.com.
|
||||
|
||||
If you have any further questions or comments on what you would like to
|
||||
see in the product or what is difficult to use or understand, please
|
||||
communicate them to us. Your feedback is important to us. Please let us
|
||||
know how it works out for you - either good or bad.
|
||||
@@ -1,564 +0,0 @@
|
||||
# Makefile.in generated by automake 1.6.3 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
|
||||
# Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
prefix = @prefix@
|
||||
exec_prefix = @exec_prefix@
|
||||
|
||||
bindir = @bindir@
|
||||
sbindir = @sbindir@
|
||||
libexecdir = @libexecdir@
|
||||
datadir = @datadir@
|
||||
sysconfdir = @sysconfdir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
localstatedir = @localstatedir@
|
||||
libdir = @libdir@
|
||||
infodir = @infodir@
|
||||
mandir = @mandir@
|
||||
includedir = @includedir@
|
||||
oldincludedir = /usr/include
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
top_builddir = ../..
|
||||
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = @program_transform_name@
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
host_alias = @host_alias@
|
||||
host_triplet = @host@
|
||||
|
||||
EXEEXT = @EXEEXT@
|
||||
OBJEXT = @OBJEXT@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
AMTAR = @AMTAR@
|
||||
AS = @AS@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
DEPDIR = @DEPDIR@
|
||||
DLLTOOL = @DLLTOOL@
|
||||
ECHO = @ECHO@
|
||||
INSTALLPREFIX = @INSTALLPREFIX@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LN_S = @LN_S@
|
||||
OBJDUMP = @OBJDUMP@
|
||||
OOH323CDRIVERDIR = @OOH323CDRIVERDIR@
|
||||
OOH323CFLAGS = @OOH323CFLAGS@
|
||||
PACKAGE = @PACKAGE@
|
||||
RANLIB = @RANLIB@
|
||||
STRIP = @STRIP@
|
||||
VERSION = @VERSION@
|
||||
am__include = @am__include@
|
||||
am__quote = @am__quote@
|
||||
install_sh = @install_sh@
|
||||
AUTOMAKE_OPTIONS = gnu
|
||||
CFLAGS = @OOH323CFLAGS@
|
||||
|
||||
noinst_LIBRARIES = libooh323c.a
|
||||
|
||||
libooh323c_a_SOURCES = ooLogChan.h ooLogChan.c ooUtils.c ooUtils.h ooGkClient.h ooGkClient.c context.c ooCommon.h ooDateTime.h ooDateTime.c decode.c dlist.c encode.c errmgmt.c memheap.c memheap.h ooasn1.h ootrace.h ootrace.c oochannels.c oochannels.h ooh245.c ooh245.h oohdr.h ooper.h ooports.c ooports.h ooq931.c ooq931.h ooCapability.c ooCapability.h ooSocket.c ooSocket.h ootypes.h perutil.c eventHandler.c eventHandler.h ooCalls.c ooCalls.h ooStackCmds.c ooStackCmds.h ooh323.c ooh323.h ooh323ep.c ooh323ep.h printHandler.c printHandler.h rtctype.c rtctype.h ooTimer.c ooTimer.h h323/H235-SECURITY-MESSAGESDec.c h323/H235-SECURITY-MESSAGESEnc.c h323/H235-SECURITY-MESSAGES.h h323/H323-MESSAGES.c h323/H323-MESSAGESDec.c h323/H323-MESSAGESEnc.c h323/H323-MESSAGES.h h323/MULTIMEDIA-SYSTEM-CONTROL.c h323/MULTIMEDIA-SYSTEM-CONTROLDec.c h323/MULTIMEDIA-SYSTEM-CONTROLEnc.c h323/MULTIMEDIA-SYSTEM-CONTROL.h
|
||||
|
||||
INCLUDES = -Ih323
|
||||
|
||||
|
||||
#include_HEADERS = ooUtils.h memheap.h ooCommon.h ooDateTime.h ooGkClient.h ooasn1.h oochannels.h ootrace.h ooh245.h ooports.h ooq931.h oohdr.h ooper.h ooSocket.h ooTimer.h ootypes.h eventHandler.h ooCapability.h ooCalls.h ooStackCmds.h ooh323.h ooh323ep.h printHandler.h rtctype.h h323/H235-SECURITY-MESSAGES.h h323/H323-MESSAGES.h h323/MULTIMEDIA-SYSTEM-CONTROL.h
|
||||
EXTRA_DIST = oostk.dsp
|
||||
subdir = ooh323c/src
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
LIBRARIES = $(noinst_LIBRARIES)
|
||||
|
||||
libooh323c_a_AR = $(AR) cr
|
||||
libooh323c_a_LIBADD =
|
||||
am_libooh323c_a_OBJECTS = ooLogChan.$(OBJEXT) ooUtils.$(OBJEXT) \
|
||||
ooGkClient.$(OBJEXT) context.$(OBJEXT) ooDateTime.$(OBJEXT) \
|
||||
decode.$(OBJEXT) dlist.$(OBJEXT) encode.$(OBJEXT) \
|
||||
errmgmt.$(OBJEXT) memheap.$(OBJEXT) ootrace.$(OBJEXT) \
|
||||
oochannels.$(OBJEXT) ooh245.$(OBJEXT) ooports.$(OBJEXT) \
|
||||
ooq931.$(OBJEXT) ooCapability.$(OBJEXT) ooSocket.$(OBJEXT) \
|
||||
perutil.$(OBJEXT) eventHandler.$(OBJEXT) ooCalls.$(OBJEXT) \
|
||||
ooStackCmds.$(OBJEXT) ooh323.$(OBJEXT) ooh323ep.$(OBJEXT) \
|
||||
printHandler.$(OBJEXT) rtctype.$(OBJEXT) ooTimer.$(OBJEXT) \
|
||||
H235-SECURITY-MESSAGESDec.$(OBJEXT) \
|
||||
H235-SECURITY-MESSAGESEnc.$(OBJEXT) H323-MESSAGES.$(OBJEXT) \
|
||||
H323-MESSAGESDec.$(OBJEXT) H323-MESSAGESEnc.$(OBJEXT) \
|
||||
MULTIMEDIA-SYSTEM-CONTROL.$(OBJEXT) \
|
||||
MULTIMEDIA-SYSTEM-CONTROLDec.$(OBJEXT) \
|
||||
MULTIMEDIA-SYSTEM-CONTROLEnc.$(OBJEXT)
|
||||
libooh323c_a_OBJECTS = $(am_libooh323c_a_OBJECTS)
|
||||
|
||||
DEFS = @DEFS@
|
||||
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBS = @LIBS@
|
||||
depcomp = $(SHELL) $(top_srcdir)/config/depcomp
|
||||
am__depfiles_maybe = depfiles
|
||||
@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/H235-SECURITY-MESSAGESDec.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/H235-SECURITY-MESSAGESEnc.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/H323-MESSAGES.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/H323-MESSAGESDec.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/H323-MESSAGESEnc.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/MULTIMEDIA-SYSTEM-CONTROL.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/MULTIMEDIA-SYSTEM-CONTROLDec.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/MULTIMEDIA-SYSTEM-CONTROLEnc.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/context.Po ./$(DEPDIR)/decode.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/dlist.Po ./$(DEPDIR)/encode.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/errmgmt.Po ./$(DEPDIR)/eventHandler.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/memheap.Po ./$(DEPDIR)/ooCalls.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/ooCapability.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/ooDateTime.Po ./$(DEPDIR)/ooGkClient.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/ooLogChan.Po ./$(DEPDIR)/ooSocket.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/ooStackCmds.Po ./$(DEPDIR)/ooTimer.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/ooUtils.Po ./$(DEPDIR)/oochannels.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/ooh245.Po ./$(DEPDIR)/ooh323.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/ooh323ep.Po ./$(DEPDIR)/ooports.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/ooq931.Po ./$(DEPDIR)/ootrace.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/perutil.Po ./$(DEPDIR)/printHandler.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/rtctype.Po
|
||||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
||||
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) \
|
||||
$(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
CCLD = $(CC)
|
||||
LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
|
||||
$(AM_LDFLAGS) $(LDFLAGS) -o $@
|
||||
DIST_SOURCES = $(libooh323c_a_SOURCES)
|
||||
DIST_COMMON = Makefile.am Makefile.in
|
||||
SOURCES = $(libooh323c_a_SOURCES)
|
||||
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .c .lo .o .obj
|
||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu ooh323c/src/Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
|
||||
|
||||
AR = ar
|
||||
|
||||
clean-noinstLIBRARIES:
|
||||
-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
|
||||
H235-SECURITY-MESSAGESDec.$(OBJEXT): h323/H235-SECURITY-MESSAGESDec.c
|
||||
H235-SECURITY-MESSAGESEnc.$(OBJEXT): h323/H235-SECURITY-MESSAGESEnc.c
|
||||
H323-MESSAGES.$(OBJEXT): h323/H323-MESSAGES.c
|
||||
H323-MESSAGESDec.$(OBJEXT): h323/H323-MESSAGESDec.c
|
||||
H323-MESSAGESEnc.$(OBJEXT): h323/H323-MESSAGESEnc.c
|
||||
MULTIMEDIA-SYSTEM-CONTROL.$(OBJEXT): h323/MULTIMEDIA-SYSTEM-CONTROL.c
|
||||
MULTIMEDIA-SYSTEM-CONTROLDec.$(OBJEXT): \
|
||||
h323/MULTIMEDIA-SYSTEM-CONTROLDec.c
|
||||
MULTIMEDIA-SYSTEM-CONTROLEnc.$(OBJEXT): \
|
||||
h323/MULTIMEDIA-SYSTEM-CONTROLEnc.c
|
||||
libooh323c.a: $(libooh323c_a_OBJECTS) $(libooh323c_a_DEPENDENCIES)
|
||||
-rm -f libooh323c.a
|
||||
$(libooh323c_a_AR) libooh323c.a $(libooh323c_a_OBJECTS) $(libooh323c_a_LIBADD)
|
||||
$(RANLIB) libooh323c.a
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.$(OBJEXT) core *.core
|
||||
|
||||
distclean-compile:
|
||||
-rm -f *.tab.c
|
||||
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H235-SECURITY-MESSAGESDec.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H235-SECURITY-MESSAGESEnc.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H323-MESSAGES.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H323-MESSAGESDec.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H323-MESSAGESEnc.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MULTIMEDIA-SYSTEM-CONTROL.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MULTIMEDIA-SYSTEM-CONTROLDec.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MULTIMEDIA-SYSTEM-CONTROLEnc.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/context.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/decode.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlist.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/encode.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/errmgmt.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eventHandler.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memheap.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ooCalls.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ooCapability.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ooDateTime.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ooGkClient.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ooLogChan.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ooSocket.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ooStackCmds.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ooTimer.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ooUtils.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oochannels.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ooh245.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ooh323.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ooh323ep.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ooports.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ooq931.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ootrace.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/perutil.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printHandler.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtctype.Po@am__quote@
|
||||
|
||||
distclean-depend:
|
||||
-rm -rf ./$(DEPDIR)
|
||||
|
||||
.c.o:
|
||||
@AMDEP_TRUE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$<
|
||||
|
||||
.c.obj:
|
||||
@AMDEP_TRUE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(COMPILE) -c `cygpath -w $<`
|
||||
|
||||
.c.lo:
|
||||
@AMDEP_TRUE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(LTCOMPILE) -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<
|
||||
|
||||
H235-SECURITY-MESSAGESDec.o: h323/H235-SECURITY-MESSAGESDec.c
|
||||
@AMDEP_TRUE@ source='h323/H235-SECURITY-MESSAGESDec.c' object='H235-SECURITY-MESSAGESDec.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/H235-SECURITY-MESSAGESDec.Po' tmpdepfile='$(DEPDIR)/H235-SECURITY-MESSAGESDec.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o H235-SECURITY-MESSAGESDec.o `test -f 'h323/H235-SECURITY-MESSAGESDec.c' || echo '$(srcdir)/'`h323/H235-SECURITY-MESSAGESDec.c
|
||||
|
||||
H235-SECURITY-MESSAGESDec.obj: h323/H235-SECURITY-MESSAGESDec.c
|
||||
@AMDEP_TRUE@ source='h323/H235-SECURITY-MESSAGESDec.c' object='H235-SECURITY-MESSAGESDec.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/H235-SECURITY-MESSAGESDec.Po' tmpdepfile='$(DEPDIR)/H235-SECURITY-MESSAGESDec.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o H235-SECURITY-MESSAGESDec.obj `cygpath -w h323/H235-SECURITY-MESSAGESDec.c`
|
||||
|
||||
H235-SECURITY-MESSAGESDec.lo: h323/H235-SECURITY-MESSAGESDec.c
|
||||
@AMDEP_TRUE@ source='h323/H235-SECURITY-MESSAGESDec.c' object='H235-SECURITY-MESSAGESDec.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/H235-SECURITY-MESSAGESDec.Plo' tmpdepfile='$(DEPDIR)/H235-SECURITY-MESSAGESDec.TPlo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o H235-SECURITY-MESSAGESDec.lo `test -f 'h323/H235-SECURITY-MESSAGESDec.c' || echo '$(srcdir)/'`h323/H235-SECURITY-MESSAGESDec.c
|
||||
|
||||
H235-SECURITY-MESSAGESEnc.o: h323/H235-SECURITY-MESSAGESEnc.c
|
||||
@AMDEP_TRUE@ source='h323/H235-SECURITY-MESSAGESEnc.c' object='H235-SECURITY-MESSAGESEnc.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/H235-SECURITY-MESSAGESEnc.Po' tmpdepfile='$(DEPDIR)/H235-SECURITY-MESSAGESEnc.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o H235-SECURITY-MESSAGESEnc.o `test -f 'h323/H235-SECURITY-MESSAGESEnc.c' || echo '$(srcdir)/'`h323/H235-SECURITY-MESSAGESEnc.c
|
||||
|
||||
H235-SECURITY-MESSAGESEnc.obj: h323/H235-SECURITY-MESSAGESEnc.c
|
||||
@AMDEP_TRUE@ source='h323/H235-SECURITY-MESSAGESEnc.c' object='H235-SECURITY-MESSAGESEnc.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/H235-SECURITY-MESSAGESEnc.Po' tmpdepfile='$(DEPDIR)/H235-SECURITY-MESSAGESEnc.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o H235-SECURITY-MESSAGESEnc.obj `cygpath -w h323/H235-SECURITY-MESSAGESEnc.c`
|
||||
|
||||
H235-SECURITY-MESSAGESEnc.lo: h323/H235-SECURITY-MESSAGESEnc.c
|
||||
@AMDEP_TRUE@ source='h323/H235-SECURITY-MESSAGESEnc.c' object='H235-SECURITY-MESSAGESEnc.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/H235-SECURITY-MESSAGESEnc.Plo' tmpdepfile='$(DEPDIR)/H235-SECURITY-MESSAGESEnc.TPlo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o H235-SECURITY-MESSAGESEnc.lo `test -f 'h323/H235-SECURITY-MESSAGESEnc.c' || echo '$(srcdir)/'`h323/H235-SECURITY-MESSAGESEnc.c
|
||||
|
||||
H323-MESSAGES.o: h323/H323-MESSAGES.c
|
||||
@AMDEP_TRUE@ source='h323/H323-MESSAGES.c' object='H323-MESSAGES.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/H323-MESSAGES.Po' tmpdepfile='$(DEPDIR)/H323-MESSAGES.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o H323-MESSAGES.o `test -f 'h323/H323-MESSAGES.c' || echo '$(srcdir)/'`h323/H323-MESSAGES.c
|
||||
|
||||
H323-MESSAGES.obj: h323/H323-MESSAGES.c
|
||||
@AMDEP_TRUE@ source='h323/H323-MESSAGES.c' object='H323-MESSAGES.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/H323-MESSAGES.Po' tmpdepfile='$(DEPDIR)/H323-MESSAGES.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o H323-MESSAGES.obj `cygpath -w h323/H323-MESSAGES.c`
|
||||
|
||||
H323-MESSAGES.lo: h323/H323-MESSAGES.c
|
||||
@AMDEP_TRUE@ source='h323/H323-MESSAGES.c' object='H323-MESSAGES.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/H323-MESSAGES.Plo' tmpdepfile='$(DEPDIR)/H323-MESSAGES.TPlo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o H323-MESSAGES.lo `test -f 'h323/H323-MESSAGES.c' || echo '$(srcdir)/'`h323/H323-MESSAGES.c
|
||||
|
||||
H323-MESSAGESDec.o: h323/H323-MESSAGESDec.c
|
||||
@AMDEP_TRUE@ source='h323/H323-MESSAGESDec.c' object='H323-MESSAGESDec.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/H323-MESSAGESDec.Po' tmpdepfile='$(DEPDIR)/H323-MESSAGESDec.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o H323-MESSAGESDec.o `test -f 'h323/H323-MESSAGESDec.c' || echo '$(srcdir)/'`h323/H323-MESSAGESDec.c
|
||||
|
||||
H323-MESSAGESDec.obj: h323/H323-MESSAGESDec.c
|
||||
@AMDEP_TRUE@ source='h323/H323-MESSAGESDec.c' object='H323-MESSAGESDec.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/H323-MESSAGESDec.Po' tmpdepfile='$(DEPDIR)/H323-MESSAGESDec.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o H323-MESSAGESDec.obj `cygpath -w h323/H323-MESSAGESDec.c`
|
||||
|
||||
H323-MESSAGESDec.lo: h323/H323-MESSAGESDec.c
|
||||
@AMDEP_TRUE@ source='h323/H323-MESSAGESDec.c' object='H323-MESSAGESDec.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/H323-MESSAGESDec.Plo' tmpdepfile='$(DEPDIR)/H323-MESSAGESDec.TPlo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o H323-MESSAGESDec.lo `test -f 'h323/H323-MESSAGESDec.c' || echo '$(srcdir)/'`h323/H323-MESSAGESDec.c
|
||||
|
||||
H323-MESSAGESEnc.o: h323/H323-MESSAGESEnc.c
|
||||
@AMDEP_TRUE@ source='h323/H323-MESSAGESEnc.c' object='H323-MESSAGESEnc.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/H323-MESSAGESEnc.Po' tmpdepfile='$(DEPDIR)/H323-MESSAGESEnc.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o H323-MESSAGESEnc.o `test -f 'h323/H323-MESSAGESEnc.c' || echo '$(srcdir)/'`h323/H323-MESSAGESEnc.c
|
||||
|
||||
H323-MESSAGESEnc.obj: h323/H323-MESSAGESEnc.c
|
||||
@AMDEP_TRUE@ source='h323/H323-MESSAGESEnc.c' object='H323-MESSAGESEnc.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/H323-MESSAGESEnc.Po' tmpdepfile='$(DEPDIR)/H323-MESSAGESEnc.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o H323-MESSAGESEnc.obj `cygpath -w h323/H323-MESSAGESEnc.c`
|
||||
|
||||
H323-MESSAGESEnc.lo: h323/H323-MESSAGESEnc.c
|
||||
@AMDEP_TRUE@ source='h323/H323-MESSAGESEnc.c' object='H323-MESSAGESEnc.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/H323-MESSAGESEnc.Plo' tmpdepfile='$(DEPDIR)/H323-MESSAGESEnc.TPlo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o H323-MESSAGESEnc.lo `test -f 'h323/H323-MESSAGESEnc.c' || echo '$(srcdir)/'`h323/H323-MESSAGESEnc.c
|
||||
|
||||
MULTIMEDIA-SYSTEM-CONTROL.o: h323/MULTIMEDIA-SYSTEM-CONTROL.c
|
||||
@AMDEP_TRUE@ source='h323/MULTIMEDIA-SYSTEM-CONTROL.c' object='MULTIMEDIA-SYSTEM-CONTROL.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/MULTIMEDIA-SYSTEM-CONTROL.Po' tmpdepfile='$(DEPDIR)/MULTIMEDIA-SYSTEM-CONTROL.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o MULTIMEDIA-SYSTEM-CONTROL.o `test -f 'h323/MULTIMEDIA-SYSTEM-CONTROL.c' || echo '$(srcdir)/'`h323/MULTIMEDIA-SYSTEM-CONTROL.c
|
||||
|
||||
MULTIMEDIA-SYSTEM-CONTROL.obj: h323/MULTIMEDIA-SYSTEM-CONTROL.c
|
||||
@AMDEP_TRUE@ source='h323/MULTIMEDIA-SYSTEM-CONTROL.c' object='MULTIMEDIA-SYSTEM-CONTROL.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/MULTIMEDIA-SYSTEM-CONTROL.Po' tmpdepfile='$(DEPDIR)/MULTIMEDIA-SYSTEM-CONTROL.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o MULTIMEDIA-SYSTEM-CONTROL.obj `cygpath -w h323/MULTIMEDIA-SYSTEM-CONTROL.c`
|
||||
|
||||
MULTIMEDIA-SYSTEM-CONTROL.lo: h323/MULTIMEDIA-SYSTEM-CONTROL.c
|
||||
@AMDEP_TRUE@ source='h323/MULTIMEDIA-SYSTEM-CONTROL.c' object='MULTIMEDIA-SYSTEM-CONTROL.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/MULTIMEDIA-SYSTEM-CONTROL.Plo' tmpdepfile='$(DEPDIR)/MULTIMEDIA-SYSTEM-CONTROL.TPlo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o MULTIMEDIA-SYSTEM-CONTROL.lo `test -f 'h323/MULTIMEDIA-SYSTEM-CONTROL.c' || echo '$(srcdir)/'`h323/MULTIMEDIA-SYSTEM-CONTROL.c
|
||||
|
||||
MULTIMEDIA-SYSTEM-CONTROLDec.o: h323/MULTIMEDIA-SYSTEM-CONTROLDec.c
|
||||
@AMDEP_TRUE@ source='h323/MULTIMEDIA-SYSTEM-CONTROLDec.c' object='MULTIMEDIA-SYSTEM-CONTROLDec.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/MULTIMEDIA-SYSTEM-CONTROLDec.Po' tmpdepfile='$(DEPDIR)/MULTIMEDIA-SYSTEM-CONTROLDec.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o MULTIMEDIA-SYSTEM-CONTROLDec.o `test -f 'h323/MULTIMEDIA-SYSTEM-CONTROLDec.c' || echo '$(srcdir)/'`h323/MULTIMEDIA-SYSTEM-CONTROLDec.c
|
||||
|
||||
MULTIMEDIA-SYSTEM-CONTROLDec.obj: h323/MULTIMEDIA-SYSTEM-CONTROLDec.c
|
||||
@AMDEP_TRUE@ source='h323/MULTIMEDIA-SYSTEM-CONTROLDec.c' object='MULTIMEDIA-SYSTEM-CONTROLDec.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/MULTIMEDIA-SYSTEM-CONTROLDec.Po' tmpdepfile='$(DEPDIR)/MULTIMEDIA-SYSTEM-CONTROLDec.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o MULTIMEDIA-SYSTEM-CONTROLDec.obj `cygpath -w h323/MULTIMEDIA-SYSTEM-CONTROLDec.c`
|
||||
|
||||
MULTIMEDIA-SYSTEM-CONTROLDec.lo: h323/MULTIMEDIA-SYSTEM-CONTROLDec.c
|
||||
@AMDEP_TRUE@ source='h323/MULTIMEDIA-SYSTEM-CONTROLDec.c' object='MULTIMEDIA-SYSTEM-CONTROLDec.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/MULTIMEDIA-SYSTEM-CONTROLDec.Plo' tmpdepfile='$(DEPDIR)/MULTIMEDIA-SYSTEM-CONTROLDec.TPlo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o MULTIMEDIA-SYSTEM-CONTROLDec.lo `test -f 'h323/MULTIMEDIA-SYSTEM-CONTROLDec.c' || echo '$(srcdir)/'`h323/MULTIMEDIA-SYSTEM-CONTROLDec.c
|
||||
|
||||
MULTIMEDIA-SYSTEM-CONTROLEnc.o: h323/MULTIMEDIA-SYSTEM-CONTROLEnc.c
|
||||
@AMDEP_TRUE@ source='h323/MULTIMEDIA-SYSTEM-CONTROLEnc.c' object='MULTIMEDIA-SYSTEM-CONTROLEnc.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/MULTIMEDIA-SYSTEM-CONTROLEnc.Po' tmpdepfile='$(DEPDIR)/MULTIMEDIA-SYSTEM-CONTROLEnc.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o MULTIMEDIA-SYSTEM-CONTROLEnc.o `test -f 'h323/MULTIMEDIA-SYSTEM-CONTROLEnc.c' || echo '$(srcdir)/'`h323/MULTIMEDIA-SYSTEM-CONTROLEnc.c
|
||||
|
||||
MULTIMEDIA-SYSTEM-CONTROLEnc.obj: h323/MULTIMEDIA-SYSTEM-CONTROLEnc.c
|
||||
@AMDEP_TRUE@ source='h323/MULTIMEDIA-SYSTEM-CONTROLEnc.c' object='MULTIMEDIA-SYSTEM-CONTROLEnc.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/MULTIMEDIA-SYSTEM-CONTROLEnc.Po' tmpdepfile='$(DEPDIR)/MULTIMEDIA-SYSTEM-CONTROLEnc.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o MULTIMEDIA-SYSTEM-CONTROLEnc.obj `cygpath -w h323/MULTIMEDIA-SYSTEM-CONTROLEnc.c`
|
||||
|
||||
MULTIMEDIA-SYSTEM-CONTROLEnc.lo: h323/MULTIMEDIA-SYSTEM-CONTROLEnc.c
|
||||
@AMDEP_TRUE@ source='h323/MULTIMEDIA-SYSTEM-CONTROLEnc.c' object='MULTIMEDIA-SYSTEM-CONTROLEnc.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/MULTIMEDIA-SYSTEM-CONTROLEnc.Plo' tmpdepfile='$(DEPDIR)/MULTIMEDIA-SYSTEM-CONTROLEnc.TPlo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o MULTIMEDIA-SYSTEM-CONTROLEnc.lo `test -f 'h323/MULTIMEDIA-SYSTEM-CONTROLEnc.c' || echo '$(srcdir)/'`h323/MULTIMEDIA-SYSTEM-CONTROLEnc.c
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
distclean-libtool:
|
||||
-rm -f libtool
|
||||
uninstall-info-am:
|
||||
|
||||
ETAGS = etags
|
||||
ETAGSFLAGS =
|
||||
|
||||
tags: TAGS
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
mkid -fID $$unique
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
test -z "$(ETAGS_ARGS)$$tags$$unique" \
|
||||
|| $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& cd $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) $$here
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
top_distdir = ../..
|
||||
distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@list='$(DISTFILES)'; for file in $$list; do \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkinstalldirs) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
||||
fi; \
|
||||
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(LIBRARIES)
|
||||
|
||||
installdirs:
|
||||
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
install-data: install-data-am
|
||||
uninstall: uninstall-am
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-am
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
INSTALL_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-rm -f Makefile $(CONFIG_CLEAN_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \
|
||||
mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
|
||||
distclean-am: clean-am distclean-compile distclean-depend \
|
||||
distclean-generic distclean-libtool distclean-tags
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am:
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-man:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
|
||||
mostlyclean-libtool
|
||||
|
||||
uninstall-am: uninstall-info-am
|
||||
|
||||
.PHONY: GTAGS all all-am check check-am clean clean-generic \
|
||||
clean-libtool clean-noinstLIBRARIES distclean distclean-compile \
|
||||
distclean-depend distclean-generic distclean-libtool \
|
||||
distclean-tags distdir dvi dvi-am info info-am install \
|
||||
install-am install-data install-data-am install-exec \
|
||||
install-exec-am install-info install-info-am install-man \
|
||||
install-strip installcheck installcheck-am installdirs \
|
||||
maintainer-clean maintainer-clean-generic mostlyclean \
|
||||
mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
|
||||
tags uninstall uninstall-am uninstall-info-am
|
||||
|
||||
|
||||
opt:
|
||||
$(MAKE) "CFLAGS = -DGNU -D_GNU_SOURCE -D_REENTRANT -O2 -D_COMPACT" all
|
||||
|
||||
debug:
|
||||
$(MAKE) "CFLAGS = -g -DGNU -D_GNU_SOURCE -D_REENTRANT" all
|
||||
|
||||
profile:
|
||||
$(MAKE) "CFLAGS = -g -pg -DGNU -D_GNU_SOURCE -D_REENTRANT" all
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
||||
@@ -1,172 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 1997-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
#include "asterisk.h"
|
||||
#include "asterisk/lock.h"
|
||||
#include "asterisk/utils.h"
|
||||
|
||||
#include "ooasn1.h"
|
||||
#include <stdlib.h>
|
||||
#include <pthread.h>
|
||||
|
||||
int initContext (OOCTXT* pctxt)
|
||||
{
|
||||
memset (pctxt, 0, sizeof(OOCTXT));
|
||||
|
||||
memHeapCreate (&pctxt->pTypeMemHeap);
|
||||
pctxt->pMsgMemHeap = pctxt->pTypeMemHeap;
|
||||
memHeapAddRef (&pctxt->pMsgMemHeap);
|
||||
|
||||
|
||||
ast_mutex_init(&pctxt->pLock);
|
||||
|
||||
return ASN_OK;
|
||||
}
|
||||
|
||||
int initContextBuffer
|
||||
(OOCTXT* pctxt, const ASN1OCTET* bufaddr, ASN1UINT bufsiz)
|
||||
{
|
||||
if (bufaddr == 0) {
|
||||
/* dynamic buffer */
|
||||
if (bufsiz == 0) bufsiz = ASN_K_ENCBUFSIZ;
|
||||
pctxt->buffer.data = (ASN1OCTET*)
|
||||
memHeapAlloc (&pctxt->pMsgMemHeap, bufsiz);
|
||||
if (!pctxt->buffer.data) return ASN_E_NOMEM;
|
||||
pctxt->buffer.size = bufsiz;
|
||||
pctxt->buffer.dynamic = TRUE;
|
||||
}
|
||||
else {
|
||||
/* static buffer */
|
||||
pctxt->buffer.data = (ASN1OCTET*) bufaddr;
|
||||
pctxt->buffer.size = bufsiz;
|
||||
pctxt->buffer.dynamic = FALSE;
|
||||
}
|
||||
|
||||
pctxt->buffer.byteIndex = 0;
|
||||
pctxt->buffer.bitOffset = 8;
|
||||
|
||||
return ASN_OK;
|
||||
}
|
||||
|
||||
int initSubContext (OOCTXT* pctxt, OOCTXT* psrc)
|
||||
{
|
||||
/* ast_mutex_lock(&pctxt->pLock); */
|
||||
int stat = ASN_OK;
|
||||
ast_mutex_lock(&psrc->pLock);
|
||||
memset (pctxt, 0, sizeof(OOCTXT));
|
||||
pctxt->pTypeMemHeap = psrc->pTypeMemHeap;
|
||||
memHeapAddRef (&pctxt->pTypeMemHeap);
|
||||
pctxt->pMsgMemHeap = psrc->pMsgMemHeap;
|
||||
memHeapAddRef (&pctxt->pMsgMemHeap);
|
||||
pctxt->flags = psrc->flags;
|
||||
pctxt->buffer.dynamic = TRUE;
|
||||
pctxt->buffer.byteIndex = 0;
|
||||
pctxt->buffer.bitOffset = 8;
|
||||
|
||||
ast_mutex_unlock(&psrc->pLock);
|
||||
/* ast_mutex_unlock(&pctxt->pLock); */
|
||||
return stat;
|
||||
}
|
||||
|
||||
void freeContext (OOCTXT* pctxt)
|
||||
{
|
||||
ASN1BOOL saveBuf;
|
||||
ast_mutex_lock(&pctxt->pLock);
|
||||
saveBuf = (pctxt->flags & ASN1SAVEBUF) != 0;
|
||||
|
||||
if (pctxt->buffer.dynamic && pctxt->buffer.data) {
|
||||
if (saveBuf) {
|
||||
memHeapMarkSaved (&pctxt->pMsgMemHeap, pctxt->buffer.data, TRUE);
|
||||
}
|
||||
else {
|
||||
memHeapFreePtr (&pctxt->pMsgMemHeap, pctxt->buffer.data);
|
||||
}
|
||||
}
|
||||
|
||||
errFreeParms (&pctxt->errInfo);
|
||||
|
||||
memHeapRelease (&pctxt->pTypeMemHeap);
|
||||
memHeapRelease (&pctxt->pMsgMemHeap);
|
||||
|
||||
ast_mutex_unlock(&pctxt->pLock);
|
||||
ast_mutex_destroy(&pctxt->pLock);
|
||||
}
|
||||
|
||||
void copyContext (OOCTXT* pdest, OOCTXT* psrc)
|
||||
{
|
||||
/* ast_mutex_lock(&pdest->pLock); ast_mutex_lock(&psrc->pLock); */
|
||||
memcpy (&pdest->buffer, &psrc->buffer, sizeof(ASN1BUFFER));
|
||||
pdest->flags = psrc->flags;
|
||||
/* ast_mutex_unlock(&psrc->pLock); ast_mutex_unlock(&pdest->pLock); */
|
||||
}
|
||||
|
||||
void setCtxtFlag (OOCTXT* pctxt, ASN1USINT mask)
|
||||
{
|
||||
ast_mutex_lock(&pctxt->pLock);
|
||||
pctxt->flags |= mask;
|
||||
ast_mutex_unlock(&pctxt->pLock);
|
||||
}
|
||||
|
||||
void clearCtxtFlag (OOCTXT* pctxt, ASN1USINT mask)
|
||||
{
|
||||
ast_mutex_lock(&pctxt->pLock);
|
||||
pctxt->flags &= ~mask;
|
||||
ast_mutex_unlock(&pctxt->pLock);
|
||||
}
|
||||
|
||||
int setPERBufferUsingCtxt (OOCTXT* pTarget, OOCTXT* pSource)
|
||||
{
|
||||
int stat;
|
||||
ast_mutex_lock(&pTarget->pLock); ast_mutex_lock(&pSource->pLock);
|
||||
stat = initContextBuffer
|
||||
(pTarget, pSource->buffer.data, pSource->buffer.size);
|
||||
|
||||
if (ASN_OK == stat) {
|
||||
pTarget->buffer.byteIndex = pSource->buffer.byteIndex;
|
||||
pTarget->buffer.bitOffset = pSource->buffer.bitOffset;
|
||||
}
|
||||
|
||||
ast_mutex_unlock(&pSource->pLock); ast_mutex_unlock(&pTarget->pLock);
|
||||
return stat;
|
||||
}
|
||||
|
||||
int setPERBuffer (OOCTXT* pctxt,
|
||||
ASN1OCTET* bufaddr, ASN1UINT bufsiz, ASN1BOOL aligned)
|
||||
{
|
||||
int stat;
|
||||
ast_mutex_lock(&pctxt->pLock);
|
||||
stat = initContextBuffer (pctxt, bufaddr, bufsiz);
|
||||
ast_mutex_unlock(&pctxt->pLock);
|
||||
if(stat != ASN_OK) return stat;
|
||||
|
||||
|
||||
return ASN_OK;
|
||||
}
|
||||
|
||||
OOCTXT* newContext ()
|
||||
{
|
||||
/* OOCTXT* pctxt = (OOCTXT*) ASN1CRTMALLOC0 (sizeof(OOCTXT)); */
|
||||
OOCTXT* pctxt = ast_malloc(sizeof(OOCTXT));
|
||||
if (pctxt) {
|
||||
if (initContext(pctxt) != ASN_OK) {
|
||||
/* ASN1CRTFREE0 (pctxt); */
|
||||
ast_free(pctxt);
|
||||
pctxt = 0;
|
||||
return (pctxt);
|
||||
}
|
||||
pctxt->flags |= ASN1DYNCTXT;
|
||||
}
|
||||
return (pctxt);
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,260 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 1997-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#include "asterisk.h"
|
||||
#include "asterisk/lock.h"
|
||||
|
||||
#include "ooasn1.h"
|
||||
|
||||
void dListInit (DList* pList)
|
||||
{
|
||||
if (pList) {
|
||||
pList->count = 0;
|
||||
pList->head = (DListNode*) 0;
|
||||
pList->tail = (DListNode*) 0;
|
||||
}
|
||||
}
|
||||
|
||||
DListNode* dListAppend (OOCTXT* pctxt, DList* pList, void* pData)
|
||||
{
|
||||
DListNode* pListNode = (DListNode*)
|
||||
memAlloc (pctxt, sizeof(DListNode));
|
||||
|
||||
if (0 != pListNode) {
|
||||
pListNode->data = pData;
|
||||
pListNode->next = (DListNode*) 0;
|
||||
if (0 != pList->tail) {
|
||||
pList->tail->next = pListNode;
|
||||
pListNode->prev = pList->tail;
|
||||
}
|
||||
if (0 == pList->head) {
|
||||
pList->head = pListNode;
|
||||
pListNode->prev = (DListNode*) 0;
|
||||
}
|
||||
pList->tail = pListNode;
|
||||
pList->count++;
|
||||
}
|
||||
|
||||
return pListNode;
|
||||
}
|
||||
|
||||
DListNode* dListAppendNode (OOCTXT* pctxt, DList* pList, void* pData)
|
||||
{
|
||||
DListNode* pListNode =
|
||||
(DListNode*) (((char*)pData) - sizeof(DListNode));
|
||||
|
||||
if (0 != pListNode) {
|
||||
pListNode->data = pData;
|
||||
pListNode->next = (DListNode*) 0;
|
||||
if (0 != pList->tail) {
|
||||
pList->tail->next = pListNode;
|
||||
pListNode->prev = pList->tail;
|
||||
}
|
||||
if (0 == pList->head) {
|
||||
pList->head = pListNode;
|
||||
pListNode->prev = (DListNode*) 0;
|
||||
}
|
||||
pList->tail = pListNode;
|
||||
pList->count++;
|
||||
}
|
||||
|
||||
return pListNode;
|
||||
}
|
||||
|
||||
/* Delete the head node from the list and return the data item stored */
|
||||
/* in that node.. */
|
||||
|
||||
void* dListDeleteHead (OOCTXT* pctxt, DList* pList)
|
||||
{
|
||||
DListNode* pNode = (0 != pList) ? pList->head : 0;
|
||||
if (0 != pNode) {
|
||||
void* pdata = pNode->data;
|
||||
dListRemove (pList, pNode);
|
||||
memFreePtr (pctxt, pNode);
|
||||
return pdata;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Free all nodes, but not the data */
|
||||
void dListFreeNodes (OOCTXT* pctxt, DList* pList)
|
||||
{
|
||||
DListNode* pNode, *pNextNode;
|
||||
|
||||
for (pNode = pList->head; pNode != 0; pNode = pNextNode) {
|
||||
pNextNode = pNode->next;
|
||||
memFreePtr (pctxt, pNode);
|
||||
}
|
||||
pList->count = 0;
|
||||
pList->head = pList->tail = 0;
|
||||
}
|
||||
|
||||
/* Free all nodes and their data */
|
||||
void dListFreeAll (OOCTXT* pctxt, DList* pList)
|
||||
{
|
||||
DListNode* pNode, *pNextNode;
|
||||
|
||||
for (pNode = pList->head; pNode != 0; pNode = pNextNode) {
|
||||
pNextNode = pNode->next;
|
||||
|
||||
memFreePtr (pctxt, pNode->data);
|
||||
memFreePtr (pctxt, pNode);
|
||||
}
|
||||
pList->count = 0;
|
||||
pList->head = pList->tail = 0;
|
||||
}
|
||||
|
||||
/* Remove node from list. Node is not freed */
|
||||
void dListRemove (DList* pList, DListNode* node)
|
||||
{
|
||||
if(node->next != 0) {
|
||||
node->next->prev = node->prev;
|
||||
}
|
||||
else { /* tail */
|
||||
pList->tail = node->prev;
|
||||
}
|
||||
if(node->prev != 0) {
|
||||
node->prev->next = node->next;
|
||||
}
|
||||
else { /* head */
|
||||
pList->head = node->next;
|
||||
}
|
||||
pList->count--;
|
||||
}
|
||||
|
||||
void dListFindAndRemove(struct OOCTXT* pctxt, DList* pList, void *data)
|
||||
{
|
||||
DListNode *pNode, *pNextNode;
|
||||
for(pNode = pList->head; pNode !=0; pNode = pNextNode){
|
||||
pNextNode = pNode->next;
|
||||
if(pNode->data == data) /* pointer comparison*/
|
||||
break;
|
||||
}
|
||||
if(pNode) {
|
||||
dListRemove(pList, pNode);
|
||||
memFreePtr(pctxt, pNode);
|
||||
}
|
||||
}
|
||||
|
||||
DListNode* dListFindByIndex (DList* pList, int index)
|
||||
{
|
||||
DListNode* curNode;
|
||||
int i;
|
||||
|
||||
if(index >= (int)pList->count) return 0;
|
||||
for(i = 0, curNode = pList->head; i < index && curNode != 0; i++) {
|
||||
curNode = curNode->next;
|
||||
}
|
||||
return curNode;
|
||||
}
|
||||
|
||||
/* Insert item before given node */
|
||||
|
||||
DListNode* dListInsertBefore
|
||||
(OOCTXT* pctxt, DList* pList, DListNode* node, const void* pData)
|
||||
{
|
||||
DListNode* pListNode = (DListNode*) memAlloc (pctxt, sizeof(DListNode));
|
||||
|
||||
if (0 != pListNode) {
|
||||
pListNode->data = (void*)pData;
|
||||
|
||||
if (node == 0) { /* insert before end (as last element) */
|
||||
pListNode->next = (DListNode*) 0;
|
||||
if (0 != pList->tail) {
|
||||
pList->tail->next = pListNode;
|
||||
pListNode->prev = pList->tail;
|
||||
}
|
||||
if (0 == pList->head) {
|
||||
pList->head = pListNode;
|
||||
pListNode->prev = (DListNode*) 0;
|
||||
}
|
||||
pList->tail = pListNode;
|
||||
}
|
||||
else if (node == pList->head) { /* insert as head (head case) */
|
||||
pListNode->next = pList->head;
|
||||
pListNode->prev = (DListNode*) 0;
|
||||
if(pList->head != 0) {
|
||||
pList->head->prev = pListNode;
|
||||
}
|
||||
if(pList->tail == 0) {
|
||||
pList->tail = pListNode;
|
||||
}
|
||||
pList->head = pListNode;
|
||||
}
|
||||
else { /* other cases */
|
||||
pListNode->next = node;
|
||||
pListNode->prev = node->prev;
|
||||
node->prev = pListNode;
|
||||
/* here, pListNode->prev always should be non-zero,
|
||||
* because if pListNode->prev is zero - it is head case (see above).
|
||||
*/
|
||||
pListNode->prev->next = pListNode;
|
||||
}
|
||||
|
||||
pList->count++;
|
||||
}
|
||||
|
||||
return pListNode;
|
||||
}
|
||||
|
||||
/* Insert item after given node */
|
||||
|
||||
DListNode* dListInsertAfter
|
||||
(OOCTXT* pctxt, DList* pList, DListNode* node, const void* pData)
|
||||
{
|
||||
DListNode* pListNode = (DListNode*) memAlloc (pctxt, sizeof(DListNode));
|
||||
|
||||
if (0 != pListNode) {
|
||||
pListNode->data = (void*)pData;
|
||||
|
||||
if (node == 0) { /* insert as head (as first element) */
|
||||
pListNode->next = pList->head;
|
||||
pListNode->prev = (DListNode*) 0;
|
||||
if (pList->head != 0) {
|
||||
pList->head->prev = pListNode;
|
||||
}
|
||||
if (pList->tail == 0) {
|
||||
pList->tail = pListNode;
|
||||
}
|
||||
pList->head = pListNode;
|
||||
}
|
||||
else if (node == pList->tail) { /* insert as tail (as last element) */
|
||||
pListNode->next = (DListNode*) 0;
|
||||
if (0 != pList->tail) {
|
||||
pList->tail->next = pListNode;
|
||||
pListNode->prev = pList->tail;
|
||||
}
|
||||
if (0 == pList->head) {
|
||||
pList->head = pListNode;
|
||||
pListNode->prev = (DListNode*) 0;
|
||||
}
|
||||
pList->tail = pListNode;
|
||||
}
|
||||
else { /* other cases */
|
||||
pListNode->next = node->next;
|
||||
pListNode->prev = node;
|
||||
node->next = pListNode;
|
||||
/* here, pListNode->next always should be non-zero,
|
||||
* because if pListNode->next is zero - it is tail case (see above).
|
||||
*/
|
||||
pListNode->next->prev = pListNode;
|
||||
}
|
||||
|
||||
pList->count++;
|
||||
}
|
||||
|
||||
return pListNode;
|
||||
}
|
||||
@@ -1,204 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 1997-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
/**
|
||||
* @file dlist.h
|
||||
* Doubly-linked list structures and utility functions.
|
||||
*/
|
||||
#ifndef _OODLIST_H_
|
||||
#define _OODLIST_H_
|
||||
|
||||
struct OOCTXT;
|
||||
|
||||
/**
|
||||
* @defgroup llfuns Doubly-linked list structures and utility functions.
|
||||
* @{
|
||||
*/
|
||||
typedef struct _DListNode {
|
||||
void* data;
|
||||
struct _DListNode* next;
|
||||
struct _DListNode* prev;
|
||||
} DListNode;
|
||||
|
||||
typedef struct _DList {
|
||||
unsigned int count;
|
||||
DListNode* head;
|
||||
DListNode* tail;
|
||||
} DList;
|
||||
|
||||
#define ALLOC_ASN1ELEMDNODE(pctxt,type) \
|
||||
(type*) (((char*)memHeapAllocZ (&(pctxt)->pTypeMemHeap, sizeof(type) + \
|
||||
sizeof(DListNode))) + sizeof(DListNode))
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef EXTERN
|
||||
#if defined (MAKE_DLL)
|
||||
#define EXTERN __declspec(dllexport)
|
||||
#elif defined (USEASN1DLL)
|
||||
#define EXTERN __declspec(dllimport)
|
||||
#else
|
||||
#define EXTERN
|
||||
#endif /* MAKE_DLL */
|
||||
#endif /* EXTERN */
|
||||
|
||||
/**
|
||||
* This function appends an item to the linked list structure. The data item is
|
||||
* passed into the function as a void pointer that can point to any object of
|
||||
* any type. The memAlloc function is used to allocated the memory for the
|
||||
* list node structure; therefore, all internal list memory will be released
|
||||
* whenever memFree is called. The pointer to the data item itself is stored
|
||||
* in the node structure - a copy is not made.
|
||||
*
|
||||
* @param pctxt A pointer to a context structure. This provides a
|
||||
* storage area for the function to store all working
|
||||
* variables that must be maintained between function
|
||||
* calls.
|
||||
* @param pList A pointer to a linked list structure onto which the data
|
||||
* item is to be appended. A pointer to an updated linked
|
||||
* list structure.
|
||||
* @param pData A pointer to a data item to be appended to the list.
|
||||
* @return A pointer to an allocated node structure used to link
|
||||
* the given data value into the list.
|
||||
*/
|
||||
EXTERN DListNode* dListAppend
|
||||
(struct OOCTXT* pctxt, DList* pList, void* pData);
|
||||
|
||||
EXTERN DListNode* dListAppendNode
|
||||
(struct OOCTXT* pctxt, DList* pList, void* pData);
|
||||
|
||||
/**
|
||||
* This function delete the head item from the list and returns a pointer
|
||||
* the data item stored in that node. The memory for the node structure
|
||||
* is released.
|
||||
*
|
||||
* @param pctxt A pointer to a context structure. This provides a
|
||||
* storage area for the function to store all working
|
||||
* variables that must be maintained between function
|
||||
* calls.
|
||||
* @param pList A pointer to the linked list structure from which
|
||||
* the node will be deleted.
|
||||
* @return A pointer to the data item stored in the deleted node.
|
||||
*/
|
||||
EXTERN void* dListDeleteHead (struct OOCTXT* pctxt, DList* pList);
|
||||
|
||||
EXTERN DListNode* dListFindByIndex (DList* pList, int index);
|
||||
|
||||
/**
|
||||
* This function initializes a doubly linked list structure. It sets the number
|
||||
* of elements to zero and sets all internal pointer values to NULL. A doubly
|
||||
* linked-list structure is described by the DList type. Nodes of the list
|
||||
* are of type DListNode.
|
||||
*
|
||||
* Memory for the structures is allocated using the memAlloc run-time
|
||||
* function and is maintained within the context structure that is a required
|
||||
* parameter to all dList functions. This memory is released when memFree
|
||||
* is called or the Context is released. Unless otherwise noted, all data
|
||||
* passed into the list functions is simply stored on the list by value (i.e. a
|
||||
* deep-copy of the data is not done).
|
||||
*
|
||||
* @param pList A pointer to a linked list structure to be initialized.
|
||||
*/
|
||||
EXTERN void dListInit (DList* pList);
|
||||
|
||||
/**
|
||||
* This function removes all nodes from the linked list and releases the memory
|
||||
* that was allocated for storing the node structures (DListNode). The data
|
||||
* will not be released.
|
||||
*
|
||||
* @param pctxt A pointer to a context structure. This provides a
|
||||
* storage area for the function to store all working
|
||||
* variables that must be maintained between function
|
||||
* calls.
|
||||
* @param pList A pointer to a linked list structure onto which the data
|
||||
* item is to be appended. A pointer to an updated linked
|
||||
* list structure.
|
||||
*/
|
||||
EXTERN void dListFreeNodes (struct OOCTXT* pctxt, DList* pList);
|
||||
|
||||
/**
|
||||
* This function removes all nodes from the linked list structure and releases
|
||||
* the memory that was allocated for storing the node structures
|
||||
* (DListNode) and for data. The memory for data in each node must have
|
||||
* been previously allocated with calls to memAlloc, memAllocZ, or
|
||||
* memRealloc functions.
|
||||
*
|
||||
* @param pctxt Pointer to a context structure. This provides a
|
||||
* storage area for the function to store all working
|
||||
* variables that must be maintained between function
|
||||
* calls.
|
||||
* @param pList Pointer to a linked list structure.
|
||||
*/
|
||||
EXTERN void dListFreeAll (struct OOCTXT* pctxt, DList* pList);
|
||||
|
||||
/**
|
||||
* This function inserts an item into the linked list structure before the
|
||||
* specified element.
|
||||
*
|
||||
* @param pctxt Pointer to a context structure.
|
||||
* @param pList A pointer to a linked list structure into which the
|
||||
* data item is to be inserted.
|
||||
* @param node The position in the list where the item is to be
|
||||
* inserted. The item will be inserted before this
|
||||
* node or appended to the list if node is null.
|
||||
* @param pData A pointer to the data item to be inserted to the list.
|
||||
* @return A pointer to an allocated node structure used to
|
||||
* link the given data value into the list.
|
||||
*/
|
||||
EXTERN DListNode* dListInsertBefore
|
||||
(struct OOCTXT* pctxt, DList* pList, DListNode* node, const void* pData);
|
||||
|
||||
/**
|
||||
* This function inserts an item into the linked list structure after the
|
||||
* specified element.
|
||||
*
|
||||
* @param pctxt Pointer to a context structure.
|
||||
* @param pList A pointer to a linked list structure into which the
|
||||
* data item is to be inserted.
|
||||
* @param node The position in the list where the item is to be
|
||||
* inserted. The item will be inserted after this
|
||||
* node or added as the head element if node is null.
|
||||
* @param pData A pointer to the data item to be inserted to the list.
|
||||
* @return A pointer to an allocated node structure used to
|
||||
* link the given data value into the list.
|
||||
*/
|
||||
EXTERN DListNode* dListInsertAfter
|
||||
(struct OOCTXT* pctxt, DList* pList, DListNode* node, const void* pData);
|
||||
|
||||
/**
|
||||
* This function removes a node from the linked list structure. The memAlloc
|
||||
* function was used to allocate the memory for the list node structure,
|
||||
* therefore, all internal list memory will be released whenever memFree or
|
||||
* memFreePtr is called.
|
||||
*
|
||||
* @param pList A pointer to a linked list structure onto which the data
|
||||
* item is to be removed. A pointer to an updated linked
|
||||
* list structure.
|
||||
* @param node A pointer to the node that is to be removed. It should
|
||||
* already be in the linked list structure.
|
||||
*/
|
||||
EXTERN void dListRemove (DList* pList, DListNode* node);
|
||||
EXTERN void dListFindAndRemove(struct OOCTXT* pctxt, DList* pList, void* data);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,266 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 1997-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/* Error management functions */
|
||||
|
||||
#include "asterisk.h"
|
||||
#include "asterisk/lock.h"
|
||||
#include "asterisk/utils.h"
|
||||
#include <stdlib.h>
|
||||
#include "ooasn1.h"
|
||||
|
||||
/* Error status text */
|
||||
static const char* g_status_text[] = {
|
||||
"Encode buffer overflow",
|
||||
"Unexpected end of buffer on decode",
|
||||
"Unexpected tag encountered: expected = %s, parsed = %s",
|
||||
"Invalid object identifier",
|
||||
"Invalid field length detected",
|
||||
"Enumerated value %s not in defined set",
|
||||
"Duplicate element in SET",
|
||||
"Missing required element in SET",
|
||||
"Element with tag %s not part of SET",
|
||||
"Max elements defined for SEQUENCE field exceeded",
|
||||
"Element with tag %s is an invalid option in choice",
|
||||
"No dynamic memory available",
|
||||
"Invalid string type",
|
||||
"Invalid hex string",
|
||||
"Invalid binary string",
|
||||
"Invalid real value",
|
||||
"Max items in sized BIT or OCTET STRING field exceeded",
|
||||
"Invalid value specification",
|
||||
"No definition found for referenced defined value",
|
||||
"No definition found for referenced defined type",
|
||||
"Invalid tag value",
|
||||
"Nesting level too deep",
|
||||
"Value constraint violation: field %s, value %s",
|
||||
"Value range error: lower bound is greater than upper",
|
||||
"Unexpected end of file detected",
|
||||
"Invalid UTF-8 character at index %d",
|
||||
"List error: concurrent modification attempt while iterating",
|
||||
"List error: illegal state for attempted operation",
|
||||
"Array index out of bounds",
|
||||
"Invalid parameter passed to function or method",
|
||||
"Invalid time string format",
|
||||
"Context is not initialized",
|
||||
"ASN.1 value will not fit in target variable",
|
||||
"Character is not within the defined character set",
|
||||
"Invalid XML state for attempted operation",
|
||||
"Error condition returned from XML parser:\n%s",
|
||||
"SEQUENCE elements not in correct order",
|
||||
"Invalid index for table constraint identifier",
|
||||
"Invalid value for relational table constraint fixed type field",
|
||||
"File not found",
|
||||
"File read error",
|
||||
"File write error",
|
||||
"Invalid Base64 string",
|
||||
"Socket error",
|
||||
"XML interface library not found",
|
||||
"Invalid XML interface library"
|
||||
} ;
|
||||
|
||||
#define ASN1_K_MAX_STAT (sizeof(g_status_text)/sizeof(char *))
|
||||
|
||||
/* Add an integer parameter to an error message */
|
||||
|
||||
int errAddIntParm (ASN1ErrInfo* pErrInfo, int errParm)
|
||||
{
|
||||
char lbuf[16];
|
||||
sprintf (lbuf, "%d", errParm);
|
||||
return errAddStrParm (pErrInfo, lbuf);
|
||||
}
|
||||
|
||||
/* Add a character string parameter to an error message */
|
||||
|
||||
int errAddStrParm (ASN1ErrInfo* pErrInfo, const char* errprm_p)
|
||||
{
|
||||
#if defined(_NO_THREADS) || !defined(_NO_MALLOC)
|
||||
if (pErrInfo->parmcnt < ASN_K_MAXERRP) {
|
||||
/* char* tmpstr = (char*) ASN1CRTMALLOC0 (strlen(errprm_p)+1); */
|
||||
char* tmpstr = ast_malloc(strlen(errprm_p) + 1);
|
||||
strcpy (tmpstr, errprm_p);
|
||||
pErrInfo->parms[pErrInfo->parmcnt] = tmpstr;
|
||||
pErrInfo->parmcnt++;
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Add an unsigned integer parameter to an error message */
|
||||
|
||||
int errAddUIntParm (ASN1ErrInfo* pErrInfo, unsigned int errParm)
|
||||
{
|
||||
char lbuf[16];
|
||||
sprintf (lbuf, "%u", errParm);
|
||||
return errAddStrParm (pErrInfo, lbuf);
|
||||
}
|
||||
|
||||
/* Free error parameter memory */
|
||||
|
||||
void errFreeParms (ASN1ErrInfo* pErrInfo)
|
||||
{
|
||||
#if defined(_NO_THREADS) || !defined(_NO_MALLOC)
|
||||
int i;
|
||||
|
||||
for (i = 0; i < pErrInfo->parmcnt; i++)
|
||||
/* ASN1CRTFREE0 ((char*)pErrInfo->parms[i]); */
|
||||
ast_free((char*)pErrInfo->parms[i]);
|
||||
#endif
|
||||
|
||||
pErrInfo->parmcnt = 0;
|
||||
pErrInfo->status = 0;
|
||||
}
|
||||
|
||||
/* Reset error */
|
||||
|
||||
int errReset (ASN1ErrInfo* pErrInfo)
|
||||
{
|
||||
errFreeParms (pErrInfo);
|
||||
pErrInfo->stkx = 0;
|
||||
return ASN_OK;
|
||||
}
|
||||
|
||||
/* Format error message */
|
||||
|
||||
char* errFmtMsg (ASN1ErrInfo* pErrInfo, char* bufp)
|
||||
{
|
||||
const char* tp;
|
||||
int i, j, pcnt;
|
||||
|
||||
if (pErrInfo->status < 0)
|
||||
{
|
||||
i = abs (pErrInfo->status + 1);
|
||||
|
||||
if (i >= 0 && i < ASN1_K_MAX_STAT)
|
||||
{
|
||||
/* Substitute error parameters into error message */
|
||||
|
||||
j = pcnt = 0;
|
||||
tp = g_status_text[i];
|
||||
|
||||
while (*tp)
|
||||
{
|
||||
if (*tp == '%' && *(tp+1) == 's')
|
||||
{
|
||||
/* Plug in error parameter */
|
||||
|
||||
if (pcnt < pErrInfo->parmcnt && pErrInfo->parms[pcnt])
|
||||
{
|
||||
strcpy (&bufp[j], pErrInfo->parms[pcnt]);
|
||||
j += strlen (pErrInfo->parms[pcnt++]);
|
||||
}
|
||||
else
|
||||
bufp[j++] = '?';
|
||||
|
||||
tp += 2;
|
||||
}
|
||||
else
|
||||
bufp[j++] = *tp++;
|
||||
}
|
||||
|
||||
bufp[j] = '\0'; /* null terminate string */
|
||||
}
|
||||
else
|
||||
strcpy (bufp, "unrecognized completion status");
|
||||
}
|
||||
else strcpy (bufp, "normal completion status");
|
||||
|
||||
return (bufp);
|
||||
}
|
||||
|
||||
/* Get error text in a dynamic memory buffer. This allocates memory */
|
||||
/* using the 'memAlloc' function. This memory is automatically freed */
|
||||
/* at the time the 'memFree' function is called. */
|
||||
|
||||
char* errGetText (OOCTXT* pctxt)
|
||||
{
|
||||
char lbuf[500];
|
||||
char* pBuf = (char*) ASN1MALLOC (pctxt,
|
||||
(sizeof(lbuf) + 100 * (2 + pctxt->errInfo.stkx)) * sizeof(char));
|
||||
|
||||
sprintf (pBuf, "ASN.1 ERROR: Status %d\n", pctxt->errInfo.status);
|
||||
sprintf (lbuf, "%s\nStack trace:", errFmtMsg (&pctxt->errInfo, lbuf));
|
||||
strcat(pBuf, lbuf);
|
||||
|
||||
while (pctxt->errInfo.stkx > 0) {
|
||||
pctxt->errInfo.stkx--;
|
||||
sprintf (lbuf, " Module: %s, Line %d\n",
|
||||
pctxt->errInfo.stack[pctxt->errInfo.stkx].module,
|
||||
pctxt->errInfo.stack[pctxt->errInfo.stkx].lineno);
|
||||
strcat(pBuf, lbuf);
|
||||
}
|
||||
|
||||
errFreeParms (&pctxt->errInfo);
|
||||
|
||||
return pBuf;
|
||||
}
|
||||
|
||||
/* Print error information to the standard output */
|
||||
|
||||
void errPrint (ASN1ErrInfo* pErrInfo)
|
||||
{
|
||||
char lbuf[200];
|
||||
printf ("ASN.1 ERROR: Status %d\n", pErrInfo->status);
|
||||
printf ("%s\n", errFmtMsg (pErrInfo, lbuf));
|
||||
printf ("Stack trace:");
|
||||
while (pErrInfo->stkx > 0) {
|
||||
pErrInfo->stkx--;
|
||||
printf (" Module: %s, Line %d\n",
|
||||
pErrInfo->stack[pErrInfo->stkx].module,
|
||||
pErrInfo->stack[pErrInfo->stkx].lineno);
|
||||
}
|
||||
errFreeParms (pErrInfo);
|
||||
}
|
||||
|
||||
/* Copy error data from one error structure to another */
|
||||
|
||||
int errCopyData (ASN1ErrInfo* pSrcErrInfo, ASN1ErrInfo* pDestErrInfo)
|
||||
{
|
||||
int i;
|
||||
pDestErrInfo->status = pSrcErrInfo->status;
|
||||
|
||||
/* copy error parameters */
|
||||
|
||||
for (i = 0; i < pSrcErrInfo->parmcnt; i++) {
|
||||
errAddStrParm (pDestErrInfo, pSrcErrInfo->parms[i]);
|
||||
}
|
||||
|
||||
/* copy stack info */
|
||||
|
||||
for (i = 0; i < pSrcErrInfo->stkx; i++) {
|
||||
if (pDestErrInfo->stkx < ASN_K_MAXERRSTK) {
|
||||
pDestErrInfo->stack[pDestErrInfo->stkx].module =
|
||||
pSrcErrInfo->stack[i].module;
|
||||
pDestErrInfo->stack[pDestErrInfo->stkx++].lineno =
|
||||
pSrcErrInfo->stack[i].lineno;
|
||||
}
|
||||
}
|
||||
|
||||
return (pSrcErrInfo->status);
|
||||
}
|
||||
|
||||
|
||||
int errSetData (ASN1ErrInfo* pErrInfo, int status,
|
||||
const char* module, int lno)
|
||||
{
|
||||
if (pErrInfo->status == 0) {
|
||||
pErrInfo->status = status;
|
||||
}
|
||||
ooLogAsn1Error(status, module, lno);
|
||||
return status;
|
||||
}
|
||||
@@ -1,125 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#include "asterisk.h"
|
||||
#include "asterisk/lock.h"
|
||||
|
||||
#include "eventHandler.h"
|
||||
|
||||
void setEventHandler (OOCTXT* pctxt, EventHandler* pHandler)
|
||||
{
|
||||
pctxt->pEventHandler = pHandler;
|
||||
}
|
||||
|
||||
void removeEventHandler (OOCTXT* pctxt)
|
||||
{
|
||||
pctxt->pEventHandler = 0;
|
||||
}
|
||||
|
||||
void invokeStartElement (OOCTXT* pctxt, const char* name, int index)
|
||||
{
|
||||
if (0 != pctxt->pEventHandler) {
|
||||
pctxt->pEventHandler->startElement (name, index);
|
||||
}
|
||||
}
|
||||
|
||||
void invokeEndElement (OOCTXT* pctxt, const char* name, int index)
|
||||
{
|
||||
if (0 != pctxt->pEventHandler) {
|
||||
pctxt->pEventHandler->endElement (name, index);
|
||||
}
|
||||
}
|
||||
|
||||
void invokeBoolValue (OOCTXT* pctxt, ASN1BOOL value)
|
||||
{
|
||||
if (0 != pctxt->pEventHandler) {
|
||||
pctxt->pEventHandler->boolValue (value);
|
||||
}
|
||||
}
|
||||
|
||||
void invokeIntValue (OOCTXT* pctxt, ASN1INT value)
|
||||
{
|
||||
if (0 != pctxt->pEventHandler) {
|
||||
pctxt->pEventHandler->intValue (value);
|
||||
}
|
||||
}
|
||||
|
||||
void invokeUIntValue (OOCTXT* pctxt, ASN1UINT value)
|
||||
{
|
||||
if (0 != pctxt->pEventHandler) {
|
||||
pctxt->pEventHandler->uIntValue (value);
|
||||
}
|
||||
}
|
||||
|
||||
void invokeBitStrValue (OOCTXT* pctxt, ASN1UINT numbits,
|
||||
const ASN1OCTET* data)
|
||||
{
|
||||
if (0 != pctxt->pEventHandler) {
|
||||
pctxt->pEventHandler->bitStrValue (numbits, data);
|
||||
}
|
||||
}
|
||||
|
||||
void invokeOctStrValue (OOCTXT* pctxt, ASN1UINT numocts,
|
||||
const ASN1OCTET* data)
|
||||
{
|
||||
if (0 != pctxt->pEventHandler) {
|
||||
pctxt->pEventHandler->octStrValue (numocts, data);
|
||||
}
|
||||
}
|
||||
|
||||
void invokeCharStrValue (OOCTXT* pctxt, const char* value)
|
||||
{
|
||||
if (0 != pctxt->pEventHandler) {
|
||||
pctxt->pEventHandler->charStrValue (value);
|
||||
}
|
||||
}
|
||||
|
||||
void invokeCharStr16BitValue (OOCTXT* pctxt, ASN1UINT nchars,
|
||||
ASN116BITCHAR* data)
|
||||
{
|
||||
if (0 != pctxt->pEventHandler) {
|
||||
pctxt->pEventHandler->charStr16BitValue (nchars, data);
|
||||
}
|
||||
}
|
||||
|
||||
void invokeNullValue (OOCTXT* pctxt)
|
||||
{
|
||||
if (0 != pctxt->pEventHandler) {
|
||||
pctxt->pEventHandler->nullValue ();
|
||||
}
|
||||
}
|
||||
|
||||
void invokeOidValue (OOCTXT* pctxt, ASN1UINT numSubIds, ASN1UINT* pSubIds)
|
||||
{
|
||||
if (0 != pctxt->pEventHandler) {
|
||||
pctxt->pEventHandler->oidValue (numSubIds, pSubIds);
|
||||
}
|
||||
}
|
||||
|
||||
void invokeEnumValue (OOCTXT* pctxt, ASN1UINT value)
|
||||
{
|
||||
if (0 != pctxt->pEventHandler) {
|
||||
pctxt->pEventHandler->enumValue (value);
|
||||
}
|
||||
}
|
||||
|
||||
void invokeOpenTypeValue (OOCTXT* pctxt, ASN1UINT numocts,
|
||||
const ASN1OCTET* data)
|
||||
{
|
||||
if (0 != pctxt->pEventHandler) {
|
||||
pctxt->pEventHandler->openTypeValue (numocts, data);
|
||||
}
|
||||
}
|
||||
@@ -1,284 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
/**
|
||||
* @file eventHandler.h
|
||||
* C event handler structure. This structure holds event handler function
|
||||
* callbacks for use by the generated code.
|
||||
*/
|
||||
/**
|
||||
* @defgroup EventHandler event handler
|
||||
* Event handler structures and callback function definitions.
|
||||
* @{
|
||||
*/
|
||||
#ifndef _EVENTHANDLER_H_
|
||||
#define _EVENTHANDLER_H_
|
||||
|
||||
#include <stdio.h>
|
||||
#include "ooasn1.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef EXTERN
|
||||
#if define (MAKE_DLL)
|
||||
#define EXTERN __declspec(dllexport)
|
||||
#else
|
||||
#define EXTERN
|
||||
#endif /* MAKE_DLL */
|
||||
#endif /* EXTERN */
|
||||
|
||||
|
||||
/**
|
||||
* This is a function pointer for a callback function which is invoked
|
||||
* from within a decode function when an element of a SEQUENCE, SET,
|
||||
* SEQUENCE OF, SET OF, or CHOICE construct is parsed.
|
||||
*
|
||||
* @param name For SEQUENCE, SET, or CHOICE, this is the name of the
|
||||
* element as defined in the ASN.1 definition. For
|
||||
* SEQUENCE OF or SET OF, this is set to the name
|
||||
* "element".
|
||||
* @param index For SEQUENCE, SET, or CHOICE, this is not used and is
|
||||
* set to the value
|
||||
* -1. For SEQUENCE OF or SET OF, this contains the
|
||||
* zero-based index of the element in the conceptual
|
||||
* array associated with the construct.
|
||||
* @return - none
|
||||
*/
|
||||
typedef void (*StartElement) (const char* name, int index) ;
|
||||
|
||||
|
||||
/**
|
||||
* This is a function pointer for a callback function which is invoked from
|
||||
* within a decode function when parsing is complete on an element of a
|
||||
* SEQUENCE, SET, SEQUENCE OF, SET OF, or CHOICE construct.
|
||||
*
|
||||
* @param name For SEQUENCE, SET, or CHOICE, this is the name of the
|
||||
* element as defined in the ASN.1 definition. For
|
||||
* SEQUENCE OF or SET OF, this is set to the name
|
||||
* "element".
|
||||
* @param index For SEQUENCE, SET, or CHOICE, this is not used and is
|
||||
* set to the value
|
||||
* -1. For SEQUENCE OF or SET OF, this contains the
|
||||
* zero-based index of the element in the conceptual
|
||||
* array associated with the construct.
|
||||
* @return - none
|
||||
*/
|
||||
typedef void (*EndElement) (const char* name, int index) ;
|
||||
|
||||
|
||||
/**
|
||||
* This is a function pointer for a callback function which is invoked from
|
||||
* within a decode function when a value of the BOOLEAN ASN.1 type is parsed.
|
||||
*
|
||||
* @param value Parsed value.
|
||||
* @return - none
|
||||
*/
|
||||
typedef void (*BoolValue) (ASN1BOOL value);
|
||||
|
||||
/**
|
||||
* This is a function pointer for a callback function which is invoked from
|
||||
* within a decode function when a value of the INTERGER ASN.1 type is parsed.
|
||||
*
|
||||
* @param value Parsed value.
|
||||
* @return - none
|
||||
*/
|
||||
typedef void (*IntValue) (ASN1INT value);
|
||||
|
||||
/**
|
||||
* This is a function pointer for a callback function which is invoked
|
||||
* from within a decode function when a value of the INTEGER ASN.1 type
|
||||
* is parsed. In this case, constraints on the integer value forced the
|
||||
* use of unsigned integer C type to represent the value.
|
||||
*
|
||||
* @param value Parsed value.
|
||||
* @return - none
|
||||
*/
|
||||
typedef void (*UIntValue) (ASN1UINT value);
|
||||
|
||||
/**
|
||||
* This is a function pointer for a callback function which is invoked from
|
||||
* within a decode function when a value of the BIT STRING ASN.1 type is
|
||||
* parsed.
|
||||
*
|
||||
* @param numbits - Number of bits in the parsed value.
|
||||
* @param data - Pointer to a byte array that contains the bit
|
||||
* string data.
|
||||
* @return - none
|
||||
*/
|
||||
typedef void (*BitStrValue) (ASN1UINT numbits, const ASN1OCTET* data);
|
||||
|
||||
/**
|
||||
* This is a function pointer for a callback function which is invoked from
|
||||
* within a decode function when a value of one of the OCTET STRING ASN.1 type
|
||||
* is parsed.
|
||||
*
|
||||
* @param numocts Number of octets in the parsed value.
|
||||
* @param data Pointer to byte array containing the octet string
|
||||
* data.
|
||||
* @return - none
|
||||
*/
|
||||
typedef void (*OctStrValue) (ASN1UINT numocts, const ASN1OCTET* data) ;
|
||||
|
||||
/**
|
||||
* This is a function pointer for a callback function which is invoked from
|
||||
* within a decode function when a value of one of the 8-bit ASN.1 character
|
||||
* string types is parsed.
|
||||
*
|
||||
* @param value Null terminated character string value.
|
||||
* @return - none
|
||||
*/
|
||||
typedef void (*CharStrValue) (const char* value) ;
|
||||
|
||||
/**
|
||||
* This is a function pointer for a callback function which is invoked from
|
||||
* within a decode function when a value of one of the 16-bit ASN.1 character
|
||||
* string types is parsed.
|
||||
*
|
||||
* This is used for the ASN.1 BmpString type.
|
||||
*
|
||||
* @param nchars Number of characters in the parsed value.
|
||||
* @param data Pointer to an array containing 16-bit values.
|
||||
* These are represented using unsigned short integer
|
||||
* values.
|
||||
* @return - none
|
||||
*/
|
||||
typedef void (*CharStrValue16Bit) (ASN1UINT nchars, ASN116BITCHAR* data) ;
|
||||
|
||||
/**
|
||||
* This is a function pointer for a callback function which is invoked from
|
||||
* within a decode function when a value of the NULL ASN.1 type is parsed.
|
||||
*
|
||||
* @param - none
|
||||
* @return - none
|
||||
*/
|
||||
typedef void (*NullValue) (void) ;
|
||||
|
||||
/**
|
||||
* This is a function pointer for a callback function which is invoked from
|
||||
* within a decode function whn a value the OBJECT IDENTIFIER ASN.1 type is
|
||||
* parsed.
|
||||
*
|
||||
* @param numSubIds Number of subidentifiers in the object identifier.
|
||||
* @param pSubIds Pointer to array containing the subidentifier values.
|
||||
* @return -none
|
||||
*/
|
||||
typedef void (*OidValue) (ASN1UINT numSubIds, ASN1UINT* pSubIds) ;
|
||||
|
||||
/**
|
||||
* This is a function pointer for a callback function which is invoked from
|
||||
* within a decode function when a value of the ENUMERATED ASN.1 type is
|
||||
* parsed.
|
||||
*
|
||||
* @param value - Parsed enumerated value
|
||||
* @return - none
|
||||
*/
|
||||
typedef void (*EnumValue) (ASN1UINT value) ;
|
||||
|
||||
/**
|
||||
* This is a function pointer for a callback function which is invoked from
|
||||
* within a decode function when an ASN.1 open type is parsed.
|
||||
*
|
||||
* @param numocts Number of octets in the parsed value.
|
||||
* @param data Pointer to byte array contain in tencoded ASN.1
|
||||
* value.
|
||||
* @return - none
|
||||
*/
|
||||
typedef void (*OpenTypeValue) (ASN1UINT numocts, const ASN1OCTET* data) ;
|
||||
|
||||
|
||||
/**
|
||||
* This is a basic C based event handler structure, which can be used
|
||||
* to define user-defined event handlers.
|
||||
*/
|
||||
typedef struct EventHandler {
|
||||
StartElement startElement;
|
||||
EndElement endElement;
|
||||
BoolValue boolValue;
|
||||
IntValue intValue;
|
||||
UIntValue uIntValue;
|
||||
BitStrValue bitStrValue;
|
||||
OctStrValue octStrValue;
|
||||
CharStrValue charStrValue;
|
||||
CharStrValue16Bit charStr16BitValue;
|
||||
NullValue nullValue;
|
||||
OidValue oidValue;
|
||||
EnumValue enumValue;
|
||||
OpenTypeValue openTypeValue;
|
||||
} EventHandler;
|
||||
|
||||
|
||||
/**
|
||||
* This function sets the event handler object within the context. It
|
||||
* will overwrite the definition of any handler that was set previously.
|
||||
*
|
||||
* @param pctxt Context to which event handler has to be added.
|
||||
* @param pHandler Pointer to the event handler structure.
|
||||
* @return none
|
||||
*/
|
||||
EXTERN void setEventHandler (OOCTXT* pctxt, EventHandler* pHandler);
|
||||
|
||||
/**
|
||||
* This function is called to remove the event handler current defined
|
||||
* in the context. This is done by setting the event handler object
|
||||
* pointer to NULL.
|
||||
*
|
||||
* @param pctxt Context from which event handler has to be removed.
|
||||
* @return none
|
||||
*/
|
||||
EXTERN void removeEventHandler (OOCTXT* pctxt);
|
||||
|
||||
/**
|
||||
* The following functions are invoked from within the generated
|
||||
* code to call the various user-defined event handler methods ..
|
||||
*/
|
||||
EXTERN void invokeStartElement (OOCTXT* pctxt, const char* name, int index);
|
||||
EXTERN void invokeEndElement (OOCTXT* pctxt, const char* name, int index);
|
||||
EXTERN void invokeBoolValue (OOCTXT* pctxt, ASN1BOOL value);
|
||||
EXTERN void invokeIntValue (OOCTXT* pctxt, ASN1INT value);
|
||||
EXTERN void invokeUIntValue (OOCTXT* pctxt, ASN1UINT value);
|
||||
|
||||
EXTERN void invokeBitStrValue
|
||||
(OOCTXT* pctxt, ASN1UINT numbits, const ASN1OCTET* data);
|
||||
|
||||
EXTERN void invokeOctStrValue
|
||||
(OOCTXT* pctxt, ASN1UINT numocts, const ASN1OCTET* data);
|
||||
|
||||
EXTERN void invokeCharStrValue (OOCTXT* pctxt, const char* value);
|
||||
|
||||
EXTERN void invokeCharStr16BitValue
|
||||
(OOCTXT* pctxt, ASN1UINT nchars, ASN116BITCHAR* data);
|
||||
|
||||
EXTERN void invokeNullValue (OOCTXT* pctxt);
|
||||
|
||||
EXTERN void invokeOidValue
|
||||
(OOCTXT* pctxt, ASN1UINT numSubIds, ASN1UINT* pSubIds);
|
||||
|
||||
EXTERN void invokeEnumValue (OOCTXT* pctxt, ASN1UINT value);
|
||||
|
||||
EXTERN void invokeOpenTypeValue
|
||||
(OOCTXT* pctxt, ASN1UINT numocts, const ASN1OCTET* data);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -1,690 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
/**
|
||||
* This file was generated by the Objective Systems ASN1C Compiler
|
||||
* (http://www.obj-sys.com). Version: 5.72, Date: 22-Mar-2005.
|
||||
*/
|
||||
#ifndef H235_SECURITY_MESSAGES_H
|
||||
#define H235_SECURITY_MESSAGES_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "ooasn1.h"
|
||||
|
||||
/**************************************************************/
|
||||
/* */
|
||||
/* ChallengeString */
|
||||
/* */
|
||||
/**************************************************************/
|
||||
|
||||
typedef struct EXTERN H235ChallengeString {
|
||||
ASN1UINT numocts;
|
||||
ASN1OCTET data[128];
|
||||
} H235ChallengeString;
|
||||
|
||||
EXTERN int asn1PE_H235ChallengeString (OOCTXT* pctxt, H235ChallengeString* pvalue);
|
||||
|
||||
EXTERN int asn1PD_H235ChallengeString (OOCTXT* pctxt, H235ChallengeString* pvalue);
|
||||
|
||||
/**************************************************************/
|
||||
/* */
|
||||
/* TimeStamp */
|
||||
/* */
|
||||
/**************************************************************/
|
||||
|
||||
typedef ASN1UINT H235TimeStamp;
|
||||
|
||||
EXTERN int asn1PE_H235TimeStamp (OOCTXT* pctxt, H235TimeStamp value);
|
||||
|
||||
EXTERN int asn1PD_H235TimeStamp (OOCTXT* pctxt, H235TimeStamp* pvalue);
|
||||
|
||||
/**************************************************************/
|
||||
/* */
|
||||
/* RandomVal */
|
||||
/* */
|
||||
/**************************************************************/
|
||||
|
||||
typedef ASN1INT H235RandomVal;
|
||||
|
||||
EXTERN int asn1PE_H235RandomVal (OOCTXT* pctxt, H235RandomVal value);
|
||||
|
||||
EXTERN int asn1PD_H235RandomVal (OOCTXT* pctxt, H235RandomVal* pvalue);
|
||||
|
||||
/**************************************************************/
|
||||
/* */
|
||||
/* Password */
|
||||
/* */
|
||||
/**************************************************************/
|
||||
|
||||
typedef ASN1BMPString H235Password;
|
||||
|
||||
EXTERN int asn1PE_H235Password (OOCTXT* pctxt, H235Password value);
|
||||
|
||||
EXTERN int asn1PD_H235Password (OOCTXT* pctxt, H235Password* pvalue);
|
||||
|
||||
/**************************************************************/
|
||||
/* */
|
||||
/* EncodedPwdCertToken */
|
||||
/* */
|
||||
/**************************************************************/
|
||||
|
||||
typedef ASN1OpenType H235EncodedPwdCertToken;
|
||||
|
||||
EXTERN int asn1PE_H235EncodedPwdCertToken (OOCTXT* pctxt, H235EncodedPwdCertToken value);
|
||||
|
||||
EXTERN int asn1PD_H235EncodedPwdCertToken (OOCTXT* pctxt, H235EncodedPwdCertToken* pvalue);
|
||||
|
||||
/**************************************************************/
|
||||
/* */
|
||||
/* NonStandardParameter */
|
||||
/* */
|
||||
/**************************************************************/
|
||||
|
||||
typedef struct EXTERN H235NonStandardParameter {
|
||||
ASN1OBJID nonStandardIdentifier;
|
||||
ASN1DynOctStr data;
|
||||
} H235NonStandardParameter;
|
||||
|
||||
EXTERN int asn1PE_H235NonStandardParameter (OOCTXT* pctxt, H235NonStandardParameter* pvalue);
|
||||
|
||||
EXTERN int asn1PD_H235NonStandardParameter (OOCTXT* pctxt, H235NonStandardParameter* pvalue);
|
||||
|
||||
/**************************************************************/
|
||||
/* */
|
||||
/* AuthenticationBES */
|
||||
/* */
|
||||
/**************************************************************/
|
||||
|
||||
/* Choice tag constants */
|
||||
|
||||
#define T_H235AuthenticationBES_default_ 1
|
||||
#define T_H235AuthenticationBES_radius 2
|
||||
#define T_H235AuthenticationBES_extElem1 3
|
||||
|
||||
typedef struct EXTERN H235AuthenticationBES {
|
||||
int t;
|
||||
} H235AuthenticationBES;
|
||||
|
||||
EXTERN int asn1PE_H235AuthenticationBES (OOCTXT* pctxt, H235AuthenticationBES* pvalue);
|
||||
|
||||
EXTERN int asn1PD_H235AuthenticationBES (OOCTXT* pctxt, H235AuthenticationBES* pvalue);
|
||||
|
||||
/**************************************************************/
|
||||
/* */
|
||||
/* AuthenticationMechanism */
|
||||
/* */
|
||||
/**************************************************************/
|
||||
|
||||
/* Choice tag constants */
|
||||
|
||||
#define T_H235AuthenticationMechanism_dhExch 1
|
||||
#define T_H235AuthenticationMechanism_pwdSymEnc 2
|
||||
#define T_H235AuthenticationMechanism_pwdHash 3
|
||||
#define T_H235AuthenticationMechanism_certSign 4
|
||||
#define T_H235AuthenticationMechanism_ipsec 5
|
||||
#define T_H235AuthenticationMechanism_tls 6
|
||||
#define T_H235AuthenticationMechanism_nonStandard 7
|
||||
#define T_H235AuthenticationMechanism_authenticationBES 8
|
||||
#define T_H235AuthenticationMechanism_extElem1 9
|
||||
|
||||
typedef struct EXTERN H235AuthenticationMechanism {
|
||||
int t;
|
||||
union {
|
||||
/* t = 1 */
|
||||
/* t = 2 */
|
||||
/* t = 3 */
|
||||
/* t = 4 */
|
||||
/* t = 5 */
|
||||
/* t = 6 */
|
||||
/* t = 7 */
|
||||
H235NonStandardParameter *nonStandard;
|
||||
/* t = 8 */
|
||||
H235AuthenticationBES *authenticationBES;
|
||||
/* t = 9 */
|
||||
} u;
|
||||
} H235AuthenticationMechanism;
|
||||
|
||||
EXTERN int asn1PE_H235AuthenticationMechanism (OOCTXT* pctxt, H235AuthenticationMechanism* pvalue);
|
||||
|
||||
EXTERN int asn1PD_H235AuthenticationMechanism (OOCTXT* pctxt, H235AuthenticationMechanism* pvalue);
|
||||
|
||||
/**************************************************************/
|
||||
/* */
|
||||
/* DHset_halfkey */
|
||||
/* */
|
||||
/**************************************************************/
|
||||
|
||||
typedef struct EXTERN H235DHset_halfkey {
|
||||
ASN1UINT numbits;
|
||||
ASN1OCTET data[256];
|
||||
} H235DHset_halfkey;
|
||||
|
||||
EXTERN int asn1PE_H235DHset_halfkey (OOCTXT* pctxt, H235DHset_halfkey* pvalue);
|
||||
|
||||
EXTERN int asn1PD_H235DHset_halfkey (OOCTXT* pctxt, H235DHset_halfkey* pvalue);
|
||||
|
||||
/**************************************************************/
|
||||
/* */
|
||||
/* DHset_modSize */
|
||||
/* */
|
||||
/**************************************************************/
|
||||
|
||||
typedef struct EXTERN H235DHset_modSize {
|
||||
ASN1UINT numbits;
|
||||
ASN1OCTET data[256];
|
||||
} H235DHset_modSize;
|
||||
|
||||
EXTERN int asn1PE_H235DHset_modSize (OOCTXT* pctxt, H235DHset_modSize* pvalue);
|
||||
|
||||
EXTERN int asn1PD_H235DHset_modSize (OOCTXT* pctxt, H235DHset_modSize* pvalue);
|
||||
|
||||
/**************************************************************/
|
||||
/* */
|
||||
/* DHset_generator */
|
||||
/* */
|
||||
/**************************************************************/
|
||||
|
||||
typedef struct EXTERN H235DHset_generator {
|
||||
ASN1UINT numbits;
|
||||
ASN1OCTET data[256];
|
||||
} H235DHset_generator;
|
||||
|
||||
EXTERN int asn1PE_H235DHset_generator (OOCTXT* pctxt, H235DHset_generator* pvalue);
|
||||
|
||||
EXTERN int asn1PD_H235DHset_generator (OOCTXT* pctxt, H235DHset_generator* pvalue);
|
||||
|
||||
/**************************************************************/
|
||||
/* */
|
||||
/* DHset */
|
||||
/* */
|
||||
/**************************************************************/
|
||||
|
||||
typedef struct EXTERN H235DHset {
|
||||
H235DHset_halfkey halfkey;
|
||||
H235DHset_modSize modSize;
|
||||
H235DHset_generator generator;
|
||||
} H235DHset;
|
||||
|
||||
EXTERN int asn1PE_H235DHset (OOCTXT* pctxt, H235DHset* pvalue);
|
||||
|
||||
EXTERN int asn1PD_H235DHset (OOCTXT* pctxt, H235DHset* pvalue);
|
||||
|
||||
/**************************************************************/
|
||||
/* */
|
||||
/* TypedCertificate */
|
||||
/* */
|
||||
/**************************************************************/
|
||||
|
||||
typedef struct EXTERN H235TypedCertificate {
|
||||
ASN1OBJID type;
|
||||
ASN1DynOctStr certificate;
|
||||
} H235TypedCertificate;
|
||||
|
||||
EXTERN int asn1PE_H235TypedCertificate (OOCTXT* pctxt, H235TypedCertificate* pvalue);
|
||||
|
||||
EXTERN int asn1PD_H235TypedCertificate (OOCTXT* pctxt, H235TypedCertificate* pvalue);
|
||||
|
||||
/**************************************************************/
|
||||
/* */
|
||||
/* Identifier */
|
||||
/* */
|
||||
/**************************************************************/
|
||||
|
||||
typedef ASN1BMPString H235Identifier;
|
||||
|
||||
EXTERN int asn1PE_H235Identifier (OOCTXT* pctxt, H235Identifier value);
|
||||
|
||||
EXTERN int asn1PD_H235Identifier (OOCTXT* pctxt, H235Identifier* pvalue);
|
||||
|
||||
/**************************************************************/
|
||||
/* */
|
||||
/* ECpoint_x */
|
||||
/* */
|
||||
/**************************************************************/
|
||||
|
||||
typedef struct EXTERN H235ECpoint_x {
|
||||
ASN1UINT numbits;
|
||||
ASN1OCTET data[64];
|
||||
} H235ECpoint_x;
|
||||
|
||||
EXTERN int asn1PE_H235ECpoint_x (OOCTXT* pctxt, H235ECpoint_x* pvalue);
|
||||
|
||||
EXTERN int asn1PD_H235ECpoint_x (OOCTXT* pctxt, H235ECpoint_x* pvalue);
|
||||
|
||||
/**************************************************************/
|
||||
/* */
|
||||
/* ECpoint_y */
|
||||
/* */
|
||||
/**************************************************************/
|
||||
|
||||
typedef struct EXTERN H235ECpoint_y {
|
||||
ASN1UINT numbits;
|
||||
ASN1OCTET data[64];
|
||||
} H235ECpoint_y;
|
||||
|
||||
EXTERN int asn1PE_H235ECpoint_y (OOCTXT* pctxt, H235ECpoint_y* pvalue);
|
||||
|
||||
EXTERN int asn1PD_H235ECpoint_y (OOCTXT* pctxt, H235ECpoint_y* pvalue);
|
||||
|
||||
/**************************************************************/
|
||||
/* */
|
||||
/* ECpoint */
|
||||
/* */
|
||||
/**************************************************************/
|
||||
|
||||
typedef struct EXTERN H235ECpoint {
|
||||
struct {
|
||||
unsigned xPresent : 1;
|
||||
unsigned yPresent : 1;
|
||||
} m;
|
||||
H235ECpoint_x x;
|
||||
H235ECpoint_y y;
|
||||
} H235ECpoint;
|
||||
|
||||
EXTERN int asn1PE_H235ECpoint (OOCTXT* pctxt, H235ECpoint* pvalue);
|
||||
|
||||
EXTERN int asn1PD_H235ECpoint (OOCTXT* pctxt, H235ECpoint* pvalue);
|
||||
|
||||
/**************************************************************/
|
||||
/* */
|
||||
/* ECKASDH_eckasdhp_modulus */
|
||||
/* */
|
||||
/**************************************************************/
|
||||
|
||||
typedef struct EXTERN H235ECKASDH_eckasdhp_modulus {
|
||||
ASN1UINT numbits;
|
||||
ASN1OCTET data[64];
|
||||
} H235ECKASDH_eckasdhp_modulus;
|
||||
|
||||
EXTERN int asn1PE_H235ECKASDH_eckasdhp_modulus (OOCTXT* pctxt, H235ECKASDH_eckasdhp_modulus* pvalue);
|
||||
|
||||
EXTERN int asn1PD_H235ECKASDH_eckasdhp_modulus (OOCTXT* pctxt, H235ECKASDH_eckasdhp_modulus* pvalue);
|
||||
|
||||
/**************************************************************/
|
||||
/* */
|
||||
/* ECKASDH_eckasdhp_weierstrassA */
|
||||
/* */
|
||||
/**************************************************************/
|
||||
|
||||
typedef struct EXTERN H235ECKASDH_eckasdhp_weierstrassA {
|
||||
ASN1UINT numbits;
|
||||
ASN1OCTET data[64];
|
||||
} H235ECKASDH_eckasdhp_weierstrassA;
|
||||
|
||||
EXTERN int asn1PE_H235ECKASDH_eckasdhp_weierstrassA (OOCTXT* pctxt, H235ECKASDH_eckasdhp_weierstrassA* pvalue);
|
||||
|
||||
EXTERN int asn1PD_H235ECKASDH_eckasdhp_weierstrassA (OOCTXT* pctxt, H235ECKASDH_eckasdhp_weierstrassA* pvalue);
|
||||
|
||||
/**************************************************************/
|
||||
/* */
|
||||
/* ECKASDH_eckasdhp_weierstrassB */
|
||||
/* */
|
||||
/**************************************************************/
|
||||
|
||||
typedef struct EXTERN H235ECKASDH_eckasdhp_weierstrassB {
|
||||
ASN1UINT numbits;
|
||||
ASN1OCTET data[64];
|
||||
} H235ECKASDH_eckasdhp_weierstrassB;
|
||||
|
||||
EXTERN int asn1PE_H235ECKASDH_eckasdhp_weierstrassB (OOCTXT* pctxt, H235ECKASDH_eckasdhp_weierstrassB* pvalue);
|
||||
|
||||
EXTERN int asn1PD_H235ECKASDH_eckasdhp_weierstrassB (OOCTXT* pctxt, H235ECKASDH_eckasdhp_weierstrassB* pvalue);
|
||||
|
||||
/**************************************************************/
|
||||
/* */
|
||||
/* ECKASDH_eckasdhp */
|
||||
/* */
|
||||
/**************************************************************/
|
||||
|
||||
typedef struct EXTERN H235ECKASDH_eckasdhp {
|
||||
H235ECpoint public_key;
|
||||
H235ECKASDH_eckasdhp_modulus modulus;
|
||||
H235ECpoint base;
|
||||
H235ECKASDH_eckasdhp_weierstrassA weierstrassA;
|
||||
H235ECKASDH_eckasdhp_weierstrassB weierstrassB;
|
||||
} H235ECKASDH_eckasdhp;
|
||||
|
||||
EXTERN int asn1PE_H235ECKASDH_eckasdhp (OOCTXT* pctxt, H235ECKASDH_eckasdhp* pvalue);
|
||||
|
||||
EXTERN int asn1PD_H235ECKASDH_eckasdhp (OOCTXT* pctxt, H235ECKASDH_eckasdhp* pvalue);
|
||||
|
||||
/**************************************************************/
|
||||
/* */
|
||||
/* ECKASDH_eckasdh2_fieldSize */
|
||||
/* */
|
||||
/**************************************************************/
|
||||
|
||||
typedef struct EXTERN H235ECKASDH_eckasdh2_fieldSize {
|
||||
ASN1UINT numbits;
|
||||
ASN1OCTET data[64];
|
||||
} H235ECKASDH_eckasdh2_fieldSize;
|
||||
|
||||
EXTERN int asn1PE_H235ECKASDH_eckasdh2_fieldSize (OOCTXT* pctxt, H235ECKASDH_eckasdh2_fieldSize* pvalue);
|
||||
|
||||
EXTERN int asn1PD_H235ECKASDH_eckasdh2_fieldSize (OOCTXT* pctxt, H235ECKASDH_eckasdh2_fieldSize* pvalue);
|
||||
|
||||
/**************************************************************/
|
||||
/* */
|
||||
/* ECKASDH_eckasdh2_weierstrassA */
|
||||
/* */
|
||||
/**************************************************************/
|
||||
|
||||
typedef struct EXTERN H235ECKASDH_eckasdh2_weierstrassA {
|
||||
ASN1UINT numbits;
|
||||
ASN1OCTET data[64];
|
||||
} H235ECKASDH_eckasdh2_weierstrassA;
|
||||
|
||||
EXTERN int asn1PE_H235ECKASDH_eckasdh2_weierstrassA (OOCTXT* pctxt, H235ECKASDH_eckasdh2_weierstrassA* pvalue);
|
||||
|
||||
EXTERN int asn1PD_H235ECKASDH_eckasdh2_weierstrassA (OOCTXT* pctxt, H235ECKASDH_eckasdh2_weierstrassA* pvalue);
|
||||
|
||||
/**************************************************************/
|
||||
/* */
|
||||
/* ECKASDH_eckasdh2_weierstrassB */
|
||||
/* */
|
||||
/**************************************************************/
|
||||
|
||||
typedef struct EXTERN H235ECKASDH_eckasdh2_weierstrassB {
|
||||
ASN1UINT numbits;
|
||||
ASN1OCTET data[64];
|
||||
} H235ECKASDH_eckasdh2_weierstrassB;
|
||||
|
||||
EXTERN int asn1PE_H235ECKASDH_eckasdh2_weierstrassB (OOCTXT* pctxt, H235ECKASDH_eckasdh2_weierstrassB* pvalue);
|
||||
|
||||
EXTERN int asn1PD_H235ECKASDH_eckasdh2_weierstrassB (OOCTXT* pctxt, H235ECKASDH_eckasdh2_weierstrassB* pvalue);
|
||||
|
||||
/**************************************************************/
|
||||
/* */
|
||||
/* ECKASDH_eckasdh2 */
|
||||
/* */
|
||||
/**************************************************************/
|
||||
|
||||
typedef struct EXTERN H235ECKASDH_eckasdh2 {
|
||||
H235ECpoint public_key;
|
||||
H235ECKASDH_eckasdh2_fieldSize fieldSize;
|
||||
H235ECpoint base;
|
||||
H235ECKASDH_eckasdh2_weierstrassA weierstrassA;
|
||||
H235ECKASDH_eckasdh2_weierstrassB weierstrassB;
|
||||
} H235ECKASDH_eckasdh2;
|
||||
|
||||
EXTERN int asn1PE_H235ECKASDH_eckasdh2 (OOCTXT* pctxt, H235ECKASDH_eckasdh2* pvalue);
|
||||
|
||||
EXTERN int asn1PD_H235ECKASDH_eckasdh2 (OOCTXT* pctxt, H235ECKASDH_eckasdh2* pvalue);
|
||||
|
||||
/**************************************************************/
|
||||
/* */
|
||||
/* ECKASDH */
|
||||
/* */
|
||||
/**************************************************************/
|
||||
|
||||
/* Choice tag constants */
|
||||
|
||||
#define T_H235ECKASDH_eckasdhp 1
|
||||
#define T_H235ECKASDH_eckasdh2 2
|
||||
#define T_H235ECKASDH_extElem1 3
|
||||
|
||||
typedef struct EXTERN H235ECKASDH {
|
||||
int t;
|
||||
union {
|
||||
/* t = 1 */
|
||||
H235ECKASDH_eckasdhp *eckasdhp;
|
||||
/* t = 2 */
|
||||
H235ECKASDH_eckasdh2 *eckasdh2;
|
||||
/* t = 3 */
|
||||
} u;
|
||||
} H235ECKASDH;
|
||||
|
||||
EXTERN int asn1PE_H235ECKASDH (OOCTXT* pctxt, H235ECKASDH* pvalue);
|
||||
|
||||
EXTERN int asn1PD_H235ECKASDH (OOCTXT* pctxt, H235ECKASDH* pvalue);
|
||||
|
||||
/**************************************************************/
|
||||
/* */
|
||||
/* ClearToken */
|
||||
/* */
|
||||
/**************************************************************/
|
||||
|
||||
typedef struct EXTERN H235ClearToken {
|
||||
struct {
|
||||
unsigned timeStampPresent : 1;
|
||||
unsigned passwordPresent : 1;
|
||||
unsigned dhkeyPresent : 1;
|
||||
unsigned challengePresent : 1;
|
||||
unsigned randomPresent : 1;
|
||||
unsigned certificatePresent : 1;
|
||||
unsigned generalIDPresent : 1;
|
||||
unsigned nonStandardPresent : 1;
|
||||
unsigned eckasdhkeyPresent : 1;
|
||||
unsigned sendersIDPresent : 1;
|
||||
} m;
|
||||
ASN1OBJID tokenOID;
|
||||
H235TimeStamp timeStamp;
|
||||
H235Password password;
|
||||
H235DHset dhkey;
|
||||
H235ChallengeString challenge;
|
||||
H235RandomVal random;
|
||||
H235TypedCertificate certificate;
|
||||
H235Identifier generalID;
|
||||
H235NonStandardParameter nonStandard;
|
||||
H235ECKASDH eckasdhkey;
|
||||
H235Identifier sendersID;
|
||||
} H235ClearToken;
|
||||
|
||||
EXTERN int asn1PE_H235ClearToken (OOCTXT* pctxt, H235ClearToken* pvalue);
|
||||
|
||||
EXTERN int asn1PD_H235ClearToken (OOCTXT* pctxt, H235ClearToken* pvalue);
|
||||
|
||||
/**************************************************************/
|
||||
/* */
|
||||
/* IV8 */
|
||||
/* */
|
||||
/**************************************************************/
|
||||
|
||||
typedef struct EXTERN H235IV8 {
|
||||
ASN1UINT numocts;
|
||||
ASN1OCTET data[8];
|
||||
} H235IV8;
|
||||
|
||||
EXTERN int asn1PE_H235IV8 (OOCTXT* pctxt, H235IV8* pvalue);
|
||||
|
||||
EXTERN int asn1PD_H235IV8 (OOCTXT* pctxt, H235IV8* pvalue);
|
||||
|
||||
/**************************************************************/
|
||||
/* */
|
||||
/* IV16 */
|
||||
/* */
|
||||
/**************************************************************/
|
||||
|
||||
typedef struct EXTERN H235IV16 {
|
||||
ASN1UINT numocts;
|
||||
ASN1OCTET data[16];
|
||||
} H235IV16;
|
||||
|
||||
EXTERN int asn1PE_H235IV16 (OOCTXT* pctxt, H235IV16* pvalue);
|
||||
|
||||
EXTERN int asn1PD_H235IV16 (OOCTXT* pctxt, H235IV16* pvalue);
|
||||
|
||||
/**************************************************************/
|
||||
/* */
|
||||
/* Params */
|
||||
/* */
|
||||
/**************************************************************/
|
||||
|
||||
typedef struct EXTERN H235Params {
|
||||
struct {
|
||||
unsigned ranIntPresent : 1;
|
||||
unsigned iv8Present : 1;
|
||||
unsigned iv16Present : 1;
|
||||
} m;
|
||||
ASN1INT ranInt;
|
||||
H235IV8 iv8;
|
||||
H235IV16 iv16;
|
||||
} H235Params;
|
||||
|
||||
EXTERN int asn1PE_H235Params (OOCTXT* pctxt, H235Params* pvalue);
|
||||
|
||||
EXTERN int asn1PD_H235Params (OOCTXT* pctxt, H235Params* pvalue);
|
||||
|
||||
/**************************************************************/
|
||||
/* */
|
||||
/* ENCRYPTED */
|
||||
/* */
|
||||
/**************************************************************/
|
||||
|
||||
typedef struct EXTERN H235ENCRYPTED {
|
||||
ASN1OBJID algorithmOID;
|
||||
H235Params paramS;
|
||||
ASN1DynOctStr encryptedData;
|
||||
} H235ENCRYPTED;
|
||||
|
||||
EXTERN int asn1PE_H235ENCRYPTED (OOCTXT* pctxt, H235ENCRYPTED* pvalue);
|
||||
|
||||
EXTERN int asn1PD_H235ENCRYPTED (OOCTXT* pctxt, H235ENCRYPTED* pvalue);
|
||||
|
||||
/**************************************************************/
|
||||
/* */
|
||||
/* CryptoToken_cryptoEncryptedToken */
|
||||
/* */
|
||||
/**************************************************************/
|
||||
|
||||
typedef struct EXTERN H235CryptoToken_cryptoEncryptedToken {
|
||||
ASN1OBJID tokenOID;
|
||||
H235ENCRYPTED token;
|
||||
} H235CryptoToken_cryptoEncryptedToken;
|
||||
|
||||
EXTERN int asn1PE_H235CryptoToken_cryptoEncryptedToken (OOCTXT* pctxt, H235CryptoToken_cryptoEncryptedToken* pvalue);
|
||||
|
||||
EXTERN int asn1PD_H235CryptoToken_cryptoEncryptedToken (OOCTXT* pctxt, H235CryptoToken_cryptoEncryptedToken* pvalue);
|
||||
|
||||
/**************************************************************/
|
||||
/* */
|
||||
/* EncodedGeneralToken */
|
||||
/* */
|
||||
/**************************************************************/
|
||||
|
||||
typedef ASN1OpenType H235EncodedGeneralToken;
|
||||
|
||||
EXTERN int asn1PE_H235EncodedGeneralToken (OOCTXT* pctxt, H235EncodedGeneralToken value);
|
||||
|
||||
EXTERN int asn1PD_H235EncodedGeneralToken (OOCTXT* pctxt, H235EncodedGeneralToken* pvalue);
|
||||
|
||||
/**************************************************************/
|
||||
/* */
|
||||
/* CryptoToken_cryptoSignedToken_token */
|
||||
/* */
|
||||
/**************************************************************/
|
||||
|
||||
typedef struct EXTERN H235CryptoToken_cryptoSignedToken_token {
|
||||
H235EncodedGeneralToken toBeSigned;
|
||||
ASN1OBJID algorithmOID;
|
||||
H235Params paramS;
|
||||
ASN1DynBitStr signature;
|
||||
} H235CryptoToken_cryptoSignedToken_token;
|
||||
|
||||
EXTERN int asn1PE_H235CryptoToken_cryptoSignedToken_token (OOCTXT* pctxt, H235CryptoToken_cryptoSignedToken_token* pvalue);
|
||||
|
||||
EXTERN int asn1PD_H235CryptoToken_cryptoSignedToken_token (OOCTXT* pctxt, H235CryptoToken_cryptoSignedToken_token* pvalue);
|
||||
|
||||
/**************************************************************/
|
||||
/* */
|
||||
/* CryptoToken_cryptoSignedToken */
|
||||
/* */
|
||||
/**************************************************************/
|
||||
|
||||
typedef struct EXTERN H235CryptoToken_cryptoSignedToken {
|
||||
ASN1OBJID tokenOID;
|
||||
H235CryptoToken_cryptoSignedToken_token token;
|
||||
} H235CryptoToken_cryptoSignedToken;
|
||||
|
||||
EXTERN int asn1PE_H235CryptoToken_cryptoSignedToken (OOCTXT* pctxt, H235CryptoToken_cryptoSignedToken* pvalue);
|
||||
|
||||
EXTERN int asn1PD_H235CryptoToken_cryptoSignedToken (OOCTXT* pctxt, H235CryptoToken_cryptoSignedToken* pvalue);
|
||||
|
||||
/**************************************************************/
|
||||
/* */
|
||||
/* HASHED */
|
||||
/* */
|
||||
/**************************************************************/
|
||||
|
||||
typedef struct EXTERN H235HASHED {
|
||||
ASN1OBJID algorithmOID;
|
||||
H235Params paramS;
|
||||
ASN1DynBitStr hash;
|
||||
} H235HASHED;
|
||||
|
||||
EXTERN int asn1PE_H235HASHED (OOCTXT* pctxt, H235HASHED* pvalue);
|
||||
|
||||
EXTERN int asn1PD_H235HASHED (OOCTXT* pctxt, H235HASHED* pvalue);
|
||||
|
||||
/**************************************************************/
|
||||
/* */
|
||||
/* CryptoToken_cryptoHashedToken */
|
||||
/* */
|
||||
/**************************************************************/
|
||||
|
||||
typedef struct EXTERN H235CryptoToken_cryptoHashedToken {
|
||||
ASN1OBJID tokenOID;
|
||||
H235ClearToken hashedVals;
|
||||
H235HASHED token;
|
||||
} H235CryptoToken_cryptoHashedToken;
|
||||
|
||||
EXTERN int asn1PE_H235CryptoToken_cryptoHashedToken (OOCTXT* pctxt, H235CryptoToken_cryptoHashedToken* pvalue);
|
||||
|
||||
EXTERN int asn1PD_H235CryptoToken_cryptoHashedToken (OOCTXT* pctxt, H235CryptoToken_cryptoHashedToken* pvalue);
|
||||
|
||||
/**************************************************************/
|
||||
/* */
|
||||
/* CryptoToken */
|
||||
/* */
|
||||
/**************************************************************/
|
||||
|
||||
/* Choice tag constants */
|
||||
|
||||
#define T_H235CryptoToken_cryptoEncryptedToken 1
|
||||
#define T_H235CryptoToken_cryptoSignedToken 2
|
||||
#define T_H235CryptoToken_cryptoHashedToken 3
|
||||
#define T_H235CryptoToken_cryptoPwdEncr 4
|
||||
#define T_H235CryptoToken_extElem1 5
|
||||
|
||||
typedef struct EXTERN H235CryptoToken {
|
||||
int t;
|
||||
union {
|
||||
/* t = 1 */
|
||||
H235CryptoToken_cryptoEncryptedToken *cryptoEncryptedToken;
|
||||
/* t = 2 */
|
||||
H235CryptoToken_cryptoSignedToken *cryptoSignedToken;
|
||||
/* t = 3 */
|
||||
H235CryptoToken_cryptoHashedToken *cryptoHashedToken;
|
||||
/* t = 4 */
|
||||
H235ENCRYPTED *cryptoPwdEncr;
|
||||
/* t = 5 */
|
||||
} u;
|
||||
} H235CryptoToken;
|
||||
|
||||
EXTERN int asn1PE_H235CryptoToken (OOCTXT* pctxt, H235CryptoToken* pvalue);
|
||||
|
||||
EXTERN int asn1PD_H235CryptoToken (OOCTXT* pctxt, H235CryptoToken* pvalue);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user