mirror of https://github.com/asterisk/asterisk
master
24
22
23
20
releases/22
releases/23
releases/20
releases/24
releases/certified-22.8
certified/22.8
certified/18.9
certified/20.7
21
releases/21
releases/certified-20.7
releases/certified-18.9
18
releases/21-pre-reorder
releases/20-pre-reorder
releases/22.5
releases/20.15
releases/21.10
releases/18
releases/22.4
releases/21.9
releases/20.14
16
19
releases/19
releases/16
20.2
18.17
20.1
19.8
18.16
16.30
20.0
19.7
18.15
16.29
16.19
19.6
18.14
16.28
development/16/python3
development/16/geolocation
19.5
18.13
16.27
19.4
18.12
16.26
19.3
18.11
16.25
certified/16.8
19.2
18.10
16.24
certified/16.3
19.1
18.9
16.23
19.0
18.8
16.22
16.21
18.7
18.6
16.20
18.5
17.9
13.38
17
13
18.4
16.18
18.3
16.17
18.2
16.16
18.1
16.15
jenkinstest-16
18.0
17.8
16.14
13.37
17.7
16.13
13.36
certified/13.21
17.6
16.12
13.35
17.5
16.11
13.34
17.4
16.10
13.33
17.3
16.9
13.32
17.2
16.8
13.31
17.1
16.7
13.30
17.0
16.6
13.29
16.5
15.7
13.28
15
16.4
13.27
16.3
13.26
16.2
13.25
16.1
13.24
16.0
15.6
13.23
14.7
14
certified/13.18
certified/13.13
certified/11.6
11
certified/13.8
certified/13.1
1.8
certified/1.8.28
12
certified/1.8.15
certified/11.2
10-digiumphones
10
certified/1.8.11
certified/1.8.6
1.6.2
1.4
1.6.1
1.6.0
1.2
1.2-netsec
1.0
22.11.0
23.5.0
20.21.0
23.5.0-rc2
22.11.0-rc2
20.21.0-rc2
24.0.0-pre1
certified-22.8-cert4
23.5.0-rc1
22.11.0-rc1
20.21.0-rc1
23.4.1
22.10.1
21.12.3
20.20.1
certified-22.8-cert3
certified-20.7-cert11
23.4.0
22.10.0
20.20.0
23.4.0-rc1
22.10.0-rc1
20.20.0-rc1
certified-18.9-cert18
23.3.0
22.9.0
20.19.0
23.3.0-rc2
22.9.0-rc2
20.19.0-rc2
certified-22.8-cert2
certified-20.7-cert10
21.12.2
22.9.0-rc1
23.3.0-rc1
20.19.0-rc1
certified-22.8-cert1
certified-22.8-cert1-rc1
certified-22.8-cert1-pre1
23.2.2
21.12.1
22.8.2
20.18.2
certified-20.7-cert9
23.2.1
22.8.1
20.18.1
23.2.0
22.8.0
20.18.0
23.2.0-rc1
22.8.0-rc1
20.18.0-rc1
certified-20.7-cert8
22.7.0
21.12.0
23.1.0
20.17.0
23.1.0-rc2
22.7.0-rc2
21.12.0-rc2
20.17.0-rc2
22.7.0-rc1
23.1.0-rc1
21.12.0-rc1
20.17.0-rc1
23.0.0
22.6.0
21.11.0
20.16.0
21.11.0-rc2
23.0.0-rc2
22.6.0-rc2
20.16.0-rc2
20.15.0
20.15.0-rc1
20.15.0-rc2
20.15.0-rc3
20.15.1
20.15.2
20.16.0-rc1
21.10.0
21.10.0-rc1
21.10.0-rc2
21.10.0-rc3
21.10.1
21.10.2
21.11.0-rc1
22.5.0-rc1
22.5.0-rc2
22.5.0-rc3
22.5.0
22.5.1
22.5.2
22.6.0-rc1
23.0.0-rc1
18.26.4
certified-18.9-cert17
23.0.0-pre1
certified-20.7-cert7
certified-18.9-cert16
18.26.3
certified-20.7-cert6
certified-18.9-cert15
22.4.1
21.9.1
20.14.1
18.26.2
certified-20.7-cert5
certified-18.9-cert14
22.4.0
21.9.0
20.14.0
22.4.0-rc1
21.9.0-rc1
20.14.0-rc1
22.3.0
21.8.0
20.13.0
22.3.0-rc1
21.8.0-rc1
20.13.0-rc1
22.2.0
21.7.0
20.12.0
22.2.0-rc2
21.7.0-rc2
20.12.0-rc2
22.2.0-rc1
21.7.0-rc1
20.12.0-rc1
certified-20.7-cert4
certified-18.9-cert13
22.1.1
21.6.1
20.11.1
18.26.1
22.1.0
21.6.0
20.11.0
18.26.0
22.1.0-rc1
21.6.0-rc1
20.11.0-rc1
18.26.0-rc1
18.25.0
20.10.0
21.5.0
22.0.0
22.0.0-rc2
21.5.0-rc2
20.10.0-rc2
18.25.0-rc2
22.0.0-rc1
21.5.0-rc1
20.10.0-rc1
18.25.0-rc1
certified-20.7-cert3
certified-18.9-cert12
21.4.3
20.9.3
18.24.3
22.0.0-pre1
21.4.2
20.9.2
18.24.2
certified-20.7-cert2
certified-18.9-cert11
21.4.1
20.9.1
18.24.1
21.4.0
20.9.0
18.24.0
certified-20.7-cert1
certified-18.9-cert10
21.4.0-rc1
20.9.0-rc1
18.24.0-rc1
21.3.1
20.8.1
18.23.1
21.3.0
20.8.0
18.23.0
certified-20.7-cert1-rc2
certified-18.9-cert9
20.8.0-rc1
21.3.0-rc1
18.23.0-rc1
certified-20.7-cert1-rc1
certified-20.7-cert1-pre1
21.2.0
20.7.0
18.22.0
certified-18.9-cert8
21.2.0-rc2
20.7.0-rc2
18.22.0-rc2
21.2.0-rc1
20.7.0-rc1
18.22.0-rc1
certified-18.9-cert8-rc2
certified-18.9-cert8-rc1
21.1.0
20.6.0
18.21.0
21.1.0-rc2
20.6.0-rc2
18.21.0-rc2
21.1.0-rc1
20.6.0-rc1
18.21.0-rc1
21.0.2
20.5.2
18.20.2
certified-18.9-cert7
certified-18.9-cert6
21.0.1
20.5.1
18.20.1
21.0.0
20.5.0
18.20.0
21.0.0-rc1
20.5.0-rc1
18.20.0-rc1
21.0.0-pre1
18.19.0
20.4.0
20.4.0-rc2
18.19.0-rc2
20.4.0-rc1
18.19.0-rc1
20.3.1
certified-18.9-cert5
19.8.1
18.18.1
16.30.1
certified-18.9-cert4
20.3.0
18.18.0
20.3.0-rc1
18.18.0-rc1
20.2.1
18.17.1
20.2.0
18.17.0
20.2.0-rc1
18.17.0-rc1
certified/18.9-cert4
20.1.0
19.8.0
18.16.0
16.30.0
20.1.0-rc2
19.8.0-rc2
18.16.0-rc2
16.30.0-rc2
20.1.0-rc1
18.16.0-rc1
19.8.0-rc1
16.30.0-rc1
certified/18.9-cert3
20.0.1
19.7.1
18.15.1
16.29.1
19.7.0
20.0.0
18.15.0
16.29.0
certified/18.9-cert2
20.0.0-rc2
19.7.0-rc2
18.15.0-rc2
16.29.0-rc2
20.0.0-rc1
19.7.0-rc1
18.15.0-rc1
16.29.0-rc1
19.6.0
18.14.0
16.28.0
19.6.0-rc2
18.14.0-rc2
16.28.0-rc2
19.6.0-rc1
18.14.0-rc1
16.28.0-rc1
19.5.0
18.13.0
16.27.0
19.5.0-rc1
18.13.0-rc1
16.27.0-rc1
19.4.1
18.12.1
16.26.1
19.4.0
18.12.0
16.26.0
19.4.0-rc1
18.12.0-rc1
16.26.0-rc1
certified/18.9-cert1
19.3.3
18.11.3
16.25.3
certified/16.8-cert14
19.3.2
18.11.2
16.25.2
19.3.1
18.11.1
16.25.1
19.3.0
18.11.0
16.25.0
19.3.0-rc1
18.11.0-rc1
16.25.0-rc1
certified/16.8-cert13
19.2.1
18.10.1
16.24.1
19.2.0
18.10.0
16.24.0
19.2.0-rc1
18.10.0-rc1
16.24.0-rc1
certified/18.9-cert1-rc1
19.1.0
18.9.0
16.23.0
19.1.0-rc1
18.9.0-rc1
16.23.0-rc1
19.0.0
18.8.0
16.22.0
certified/16.8-cert12
19.0.0-rc1
18.8.0-rc1
16.22.0-rc1
16.21.1
18.7.1
18.7.0
16.21.0
18.7.0-rc3
16.21.0-rc3
18.7.0-rc2
16.21.0-rc2
18.7.0-rc1
16.21.0-rc1
certified/16.8-cert11
18.6.0
16.20.0
18.6.0-rc1
16.20.0-rc1
certified/16.8-cert10
18.5.1
17.9.4
16.19.1
13.38.3
18.5.0
16.19.0
certified/16.8-cert9
18.5.0-rc1
16.19.0-rc1
18.4.0
16.18.0
18.4.0-rc1
16.18.0-rc1
certified/16.8-cert8
18.3.0
16.17.0
18.3.0-rc2
16.17.0-rc2
18.3.0-rc1
16.17.0-rc1
certified/16.8-cert7
18.2.2
17.9.3
16.16.2
certified/16.8-cert6
18.2.1
17.9.2
16.16.1
13.38.2
18.2.0
16.16.0
18.2.0-rc1
16.16.0-rc1
18.1.1
17.9.1
16.15.1
13.38.1
18.1.0
17.9.0
16.15.0
13.38.0
18.1.0-rc1
17.9.0-rc1
16.15.0-rc1
13.38.0-rc1
18.0.1
17.8.1
16.14.1
certified/16.8-cert5
13.37.1
certified/16.8-cert4
certified/16.8-cert4-rc4
18.0.0
17.8.0
16.14.0
13.37.0
18.0.0-rc2
certified/16.8-cert4-rc3
18.0.0-rc1
17.8.0-rc1
16.14.0-rc1
13.37.0-rc1
17.7.0
16.13.0
13.36.0
17.7.0-rc2
16.13.0-rc2
13.36.0-rc2
17.7.0-rc1
16.13.0-rc1
13.36.0-rc1
certified/16.8-cert4-rc2
17.6.0
16.12.0
13.35.0
17.6.0-rc1
16.12.0-rc1
13.35.0-rc1
certified/16.8-cert4-rc1
certified/16.8-cert3
17.5.1
16.11.1
17.5.0
16.11.0
13.34.0
17.5.0-rc3
16.11.0-rc3
13.34.0-rc3
17.5.0-rc2
16.11.0-rc2
13.34.0-rc2
17.5.0-rc1
16.11.0-rc1
13.34.0-rc1
certified/16.8-cert2
17.4.0
16.10.0
13.33.0
certified/16.8-cert1
17.4.0-rc2
16.10.0-rc2
13.33.0-rc2
17.4.0-rc1
16.10.0-rc1
13.33.0-rc1
certified/16.8-cert1-rc5
certified/16.8-cert1-rc4
17.3.0
16.9.0
13.32.0
17.3.0-rc1
16.9.0-rc1
13.32.0-rc1
certified/16.8-cert1-rc3
certified/16.8-cert1-rc2
certified/16.8-cert1-rc1
17.2.0
16.8.0
13.31.0
17.2.0-rc2
16.8.0-rc2
13.31.0-rc2
17.2.0-rc1
16.8.0-rc1
13.31.0-rc1
certified/16.3-cert1
certified/13.21-cert6
17.1.0
16.7.0
13.30.0
17.1.0-rc2
16.7.0-rc2
13.30.0-rc2
17.1.0-rc1
16.7.0-rc1
13.30.0-rc1
certified/13.21-cert5
17.0.1
16.6.2
13.29.2
17.0.0
17.0.0-rc3
16.6.1
13.29.1
16.6.0
13.29.0
16.6.0-rc2
13.29.0-rc2
17.0.0-rc2
16.6.0-rc1
13.29.0-rc1
16.5.1
15.7.4
13.28.1
17.0.0-rc1
16.5.0
13.28.0
16.5.0-rc1
13.28.0-rc1
certified/13.21-cert4
16.4.1
15.7.3
13.27.1
16.4.0
13.27.0
16.4.0-rc1
13.27.0-rc1
16.3.0
13.26.0
16.3.0-rc1
13.26.0-rc1
16.2.1
15.7.2
16.2.0
13.25.0
13.25.0-rc3
16.2.0-rc2
13.25.0-rc2
16.2.0-rc1
13.25.0-rc1
16.1.1
15.7.1
13.24.1
16.1.0
13.24.0
15.7.0
16.1.0-rc1
15.7.0-rc1
13.24.0-rc1
16.0.1
15.6.2
16.0.0
16.0.0-rc3
certified/13.21-cert3
15.6.1
14.7.8
13.23.1
16.0.0-rc2
15.6.0
13.23.0
15.6.0-rc1
13.23.0-rc1
16.0.0-rc1
15.5.0
13.22.0
15.5.0-rc1
13.22.0-rc1
15.4.1
14.7.7
certified/13.21-cert2
certified/13.18-cert4
13.21.1
certified/13.21-cert1
certified/13.21-cert1-rc2
certified/13.21-cert1-rc1
15.4.0
13.21.0
15.4.0-rc2
15.4.0-rc1
13.21.0-rc1
15.3.0
13.20.0
15.3.0-rc2
13.20.0-rc2
15.3.0-rc1
13.20.0-rc1
15.2.2
certified/13.18-cert3
14.7.6
13.19.2
13.19.1
15.2.1
15.2.0
13.19.0
15.2.0-rc2
13.19.0-rc2
certified/13.18-cert2
15.1.5
14.7.5
13.18.5
certified/13.18-cert1
15.2.0-rc1
13.19.0-rc1
certified/13.18-cert1-rc3
certified/13.13-cert9
15.1.4
14.7.4
13.18.4
15.1.3
certified/13.13-cert8
14.7.3
13.18.3
certified/13.18-cert1-rc2
15.1.2
14.7.2
13.18.2
certified/13.18-cert1-rc1
certified/13.13-cert7
15.1.1
14.7.1
13.18.1
15.1.0
14.7.0
13.18.0
15.1.0-rc2
14.7.0-rc2
13.18.0-rc2
15.1.0-rc1
14.7.0-rc1
13.18.0-rc1
15.0.0
certified/13.13-cert6
certified/11.6-cert18
14.6.2
13.17.2
11.25.3
15.0.0-rc1
14.6.1
certified/13.13-cert5
13.17.1
certified/11.6-cert17
11.25.2
15.0.0-beta1
14.6.0
13.17.0
14.6.0-rc1
13.17.0-rc1
14.5.0
13.16.0
14.5.0-rc2
13.16.0-rc2
14.5.0-rc1
13.16.0-rc1
certified/13.13-cert4
14.4.1
13.15.1
14.4.0
13.15.0
14.4.0-rc3
13.15.0-rc3
14.3.1
13.14.1
certified/13.13-cert3
13.15.0-rc2
14.4.0-rc2
14.4.0-rc1
13.15.0-rc1
certified/13.13-cert2
14.3.0
13.14.0
certified/13.13-cert1
14.3.0-rc2
13.14.0-rc2
certified/13.13-cert1-rc4
14.3.0-rc1
13.14.0-rc1
certified/13.13-cert1-rc3
certified/13.13-cert1-rc2
certified/11.6-cert16
certified/13.8-cert4
14.2.1
13.13.1
11.25.1
certified/13.13-cert1-rc1
14.2.0
13.13.0
14.2.0-rc2
13.13.0-rc2
11.25.0
14.2.0-rc1
13.13.0-rc1
11.25.0-rc1
14.1.2
13.12.2
14.1.1
13.12.1
11.24.1
14.1.0
13.12.0
11.24.0
14.1.0-rc1
13.12.0-rc1
11.24.0-rc1
14.0.2
14.0.1
14.0.0
14.0.0-rc2
14.0.0-rc1
13.11.2
certified/11.6-cert15
certified/13.8-cert3
11.23.1
13.11.1
13.11.0
13.11.0-rc2
14.0.0-beta2
certified/11.6-cert14
certified/11.6-cert14-rc2
certified/13.8-cert2
certified/13.8-cert2-rc1
certified/11.6-cert14-rc1
13.11.0-rc1
14.0.0-beta1
11.23.0
13.10.0
certified/13.1-cert8
13.10.0-rc3
certified/13.8-cert1
13.10.0-rc2
11.23.0-rc1
13.10.0-rc1
certified/13.8-cert1-rc3
13.9.1
13.9.0
certified/13.8-cert1-rc2
13.9.0-rc2
certified/13.1-cert7
13.9.0-rc1
certified/13.1-cert6
13.8.2
13.8.1
certified/13.1-cert5
certified/13.8-cert1-rc1
13.8.0
11.22.0
certified/13.1-cert4
certified/11.6-cert13
11.21.2
13.7.2
11.20.0
13.6.0
13.5.0
11.19.0
certified/13.1-cert3-rc1
13.4.0
11.18.0
0.1.0
0.1.1
0.1.10
0.1.11
0.1.12
0.1.2
0.1.3
0.1.4
0.1.5
0.1.6
0.1.7
0.1.8
0.1.9
0.2.0
0.3.0
0.4.0
0.5.0
0.7.0
0.7.1
0.7.2
0.9.0
1.0.0
1.0.0-rc1
1.0.0-rc2
1.0.1
1.0.10
1.0.11
1.0.11.1
1.0.12
1.0.2
1.0.4
1.0.5
1.0.6
1.0.7
1.0.8
1.0.9
1.2.0
1.2.0-beta1
1.2.0-beta2
1.2.0-rc1
1.2.0-rc2
1.2.1
1.2.10
1.2.10-netsec
1.2.11
1.2.11-netsec
1.2.12
1.2.12-netsec
1.2.12.1
1.2.12.1-netsec
1.2.13
1.2.13-netsec
1.2.14
1.2.14-netsec
1.2.15
1.2.15-netsec
1.2.16
1.2.16-netsec
1.2.17
1.2.17-netsec
1.2.18
1.2.18-netsec
1.2.19
1.2.19-netsec
1.2.2
1.2.2-netsec
1.2.20
1.2.20-netsec
1.2.21
1.2.21-netsec
1.2.21.1
1.2.21.1-netsec
1.2.22
1.2.22-netsec
1.2.23
1.2.23-netsec
1.2.24
1.2.24-netsec
1.2.25
1.2.25-netsec
1.2.26
1.2.26-netsec
1.2.26.1
1.2.26.1-netsec
1.2.26.2
1.2.26.2-netsec
1.2.27
1.2.28
1.2.28.1
1.2.29
1.2.3
1.2.3-netsec
1.2.30
1.2.30.1
1.2.30.2
1.2.30.3
1.2.30.4
1.2.31
1.2.31.1
1.2.31.2
1.2.32
1.2.33
1.2.34
1.2.35
1.2.36
1.2.37
1.2.38
1.2.39
1.2.4
1.2.4-netsec
1.2.40
1.2.5
1.2.5-netsec
1.2.6
1.2.6-netsec
1.2.7
1.2.7-netsec
1.2.7.1
1.2.7.1-netsec
1.2.8
1.2.8-netsec
1.2.9
1.2.9-netsec
1.2.9.1
1.2.9.1-netsec
1.4.0
1.4.0-beta1
1.4.0-beta2
1.4.0-beta3
1.4.0-beta4
1.4.1
1.4.10
1.4.10.1
1.4.11
1.4.12
1.4.12.1
1.4.13
1.4.14
1.4.15
1.4.16
1.4.16.1
1.4.16.2
1.4.17
1.4.18
1.4.18.1
1.4.19
1.4.19-rc1
1.4.19-rc2
1.4.19-rc3
1.4.19-rc4
1.4.19.1
1.4.19.2
1.4.2
1.4.20
1.4.20-rc1
1.4.20-rc2
1.4.20-rc3
1.4.20.1
1.4.21
1.4.21-rc1
1.4.21-rc2
1.4.21.1
1.4.21.2
1.4.22
1.4.22-rc1
1.4.22-rc2
1.4.22-rc3
1.4.22-rc4
1.4.22-rc5
1.4.22.1
1.4.22.2
1.4.23
1.4.23-rc1
1.4.23-rc2
1.4.23-rc3
1.4.23-rc4
1.4.23-testing
1.4.23.1
1.4.23.2
1.4.24
1.4.24-rc1
1.4.24.1
1.4.25
1.4.25-rc1
1.4.25.1
1.4.26
1.4.26-rc1
1.4.26-rc2
1.4.26-rc3
1.4.26-rc4
1.4.26-rc5
1.4.26-rc6
1.4.26.1
1.4.26.2
1.4.26.3
1.4.27
1.4.27-rc1
1.4.27-rc2
1.4.27-rc3
1.4.27-rc4
1.4.27-rc5
1.4.27.1
1.4.28
1.4.28-rc1
1.4.29
1.4.29-rc1
1.4.29.1
1.4.3
1.4.30
1.4.30-rc1
1.4.30-rc2
1.4.30-rc3
1.4.31
1.4.31-rc1
1.4.31-rc2
1.4.32
1.4.32-rc1
1.4.32-rc2
1.4.33
1.4.33-rc1
1.4.33-rc2
1.4.33.1
1.4.34
1.4.34-rc1
1.4.34-rc2
1.4.35
1.4.35-rc1
1.4.36
1.4.36-rc1
1.4.37
1.4.37-rc1
1.4.37.1
1.4.38
1.4.38-rc1
1.4.38.1
1.4.39
1.4.39-rc1
1.4.39.1
1.4.39.2
1.4.4
1.4.40
1.4.40-rc1
1.4.40-rc2
1.4.40-rc3
1.4.40.1
1.4.40.2
1.4.41
1.4.41-rc1
1.4.41.1
1.4.41.2
1.4.42
1.4.42-rc1
1.4.42-rc2
1.4.43
1.4.44
1.4.5
1.4.6
1.4.7
1.4.7.1
1.4.8
1.4.9
1.6.0
1.6.0-beta1
1.6.0-beta2
1.6.0-beta3
1.6.0-beta4
1.6.0-beta5
1.6.0-beta6
1.6.0-beta7
1.6.0-beta7.1
1.6.0-beta8
1.6.0-beta9
1.6.0-rc1
1.6.0-rc2
1.6.0-rc3
1.6.0-rc4
1.6.0-rc5
1.6.0-rc6
1.6.0.1
1.6.0.10
1.6.0.11-rc1
1.6.0.11-rc2
1.6.0.12
1.6.0.13
1.6.0.13-rc1
1.6.0.14
1.6.0.14-rc1
1.6.0.15
1.6.0.16
1.6.0.16-rc1
1.6.0.16-rc2
1.6.0.17
1.6.0.18
1.6.0.18-rc1
1.6.0.18-rc2
1.6.0.18-rc3
1.6.0.19
1.6.0.2
1.6.0.20
1.6.0.20-rc1
1.6.0.21
1.6.0.21-rc1
1.6.0.22
1.6.0.23
1.6.0.23-rc1
1.6.0.23-rc2
1.6.0.24
1.6.0.25
1.6.0.26
1.6.0.26-rc1
1.6.0.27
1.6.0.27-rc1
1.6.0.27-rc2
1.6.0.27-rc3
1.6.0.28
1.6.0.28-rc1
1.6.0.28-rc2
1.6.0.3
1.6.0.3-rc1
1.6.0.3.1
1.6.0.4-rc1
1.6.0.4-testing
1.6.0.5
1.6.0.6
1.6.0.6-rc1
1.6.0.7
1.6.0.7-rc1
1.6.0.7-rc2
1.6.0.8
1.6.0.9
1.6.1-beta1
1.6.1-beta2
1.6.1-beta3
1.6.1-beta4
1.6.1-rc1
1.6.1.0
1.6.1.0-rc2
1.6.1.0-rc3
1.6.1.0-rc4
1.6.1.0-rc5
1.6.1.1
1.6.1.10
1.6.1.10-rc1
1.6.1.10-rc2
1.6.1.10-rc3
1.6.1.11
1.6.1.12
1.6.1.12-rc1
1.6.1.13
1.6.1.13-rc1
1.6.1.14
1.6.1.15-rc1
1.6.1.15-rc2
1.6.1.16
1.6.1.17
1.6.1.18
1.6.1.18-rc1
1.6.1.18-rc2
1.6.1.19
1.6.1.19-rc1
1.6.1.19-rc2
1.6.1.19-rc3
1.6.1.2
1.6.1.20
1.6.1.20-rc1
1.6.1.20-rc2
1.6.1.21
1.6.1.22
1.6.1.23
1.6.1.24
1.6.1.25
1.6.1.3-rc1
1.6.1.4
1.6.1.5
1.6.1.5-rc1
1.6.1.6
1.6.1.7-rc1
1.6.1.7-rc2
1.6.1.8
1.6.1.9
1.6.2.0
1.6.2.0-beta1
1.6.2.0-beta2
1.6.2.0-beta3
1.6.2.0-beta4
1.6.2.0-rc1
1.6.2.0-rc2
1.6.2.0-rc3
1.6.2.0-rc4
1.6.2.0-rc5
1.6.2.0-rc6
1.6.2.0-rc7
1.6.2.0-rc8
1.6.2.1
1.6.2.1-rc1
1.6.2.10
1.6.2.10-rc1
1.6.2.10-rc2
1.6.2.11
1.6.2.11-rc1
1.6.2.11-rc2
1.6.2.12
1.6.2.12-rc1
1.6.2.13
1.6.2.14
1.6.2.14-rc1
1.6.2.15
1.6.2.15-rc1
1.6.2.15.1
1.6.2.16
1.6.2.16-rc1
1.6.2.16.1
1.6.2.16.2
1.6.2.17
1.6.2.17-rc1
1.6.2.17-rc2
1.6.2.17-rc3
1.6.2.17.1
1.6.2.17.2
1.6.2.17.3
1.6.2.18
1.6.2.18-rc1
1.6.2.18.1
1.6.2.18.2
1.6.2.19
1.6.2.19-rc1
1.6.2.2
1.6.2.20
1.6.2.21
1.6.2.22
1.6.2.23
1.6.2.24
1.6.2.3-rc1
1.6.2.3-rc2
1.6.2.4
1.6.2.5
1.6.2.6
1.6.2.6-rc1
1.6.2.6-rc2
1.6.2.7
1.6.2.7-rc1
1.6.2.7-rc2
1.6.2.7-rc3
1.6.2.8
1.6.2.8-rc1
1.6.2.8-rc2
1.6.2.9
1.6.2.9-rc1
1.6.2.9-rc2
1.6.2.9-rc3
1.8.0
1.8.0-beta1
1.8.0-beta2
1.8.0-beta3
1.8.0-beta4
1.8.0-beta5
1.8.0-rc1
1.8.0-rc2
1.8.0-rc3
1.8.0-rc4
1.8.0-rc5
1.8.1
1.8.1-rc1
1.8.1.1
1.8.1.2
1.8.10.0
1.8.10.0-rc1
1.8.10.0-rc2
1.8.10.0-rc3
1.8.10.0-rc4
1.8.10.1
1.8.11.0
1.8.11.0-rc1
1.8.11.0-rc2
1.8.11.0-rc3
1.8.11.1
1.8.12.0
1.8.12.0-rc1
1.8.12.0-rc2
1.8.12.0-rc3
1.8.12.1
1.8.12.2
1.8.13.0
1.8.13.0-rc1
1.8.13.0-rc2
1.8.13.1
1.8.14.0
1.8.14.0-rc1
1.8.14.0-rc2
1.8.14.1
1.8.15-cert4
1.8.15.0
1.8.15.0-rc1
1.8.15.1
1.8.16.0
1.8.16.0-rc1
1.8.16.0-rc2
1.8.17.0
1.8.17.0-rc1
1.8.17.0-rc2
1.8.17.0-rc3
1.8.18.0
1.8.18.0-rc1
1.8.18.1
1.8.19.0
1.8.19.0-rc1
1.8.19.0-rc2
1.8.19.0-rc3
1.8.19.0-tc1
1.8.19.1
1.8.2
1.8.2-rc1
1.8.2.1
1.8.2.2
1.8.2.3
1.8.2.4
1.8.20.0
1.8.20.0-rc1
1.8.20.0-rc2
1.8.20.1
1.8.20.2
1.8.21.0
1.8.21.0-rc1
1.8.21.0-rc2
1.8.22.0
1.8.22.0-rc1
1.8.22.0-rc2
1.8.23.0
1.8.23.0-rc1
1.8.23.0-rc2
1.8.23.1
1.8.24.0
1.8.24.0-rc1
1.8.24.0-rc2
1.8.24.1
1.8.25.0
1.8.25.0-rc1
1.8.25.0-rc2
1.8.26.0
1.8.26.0-rc1
1.8.26.0-rc2
1.8.26.1
1.8.27.0
1.8.27.0-rc1
1.8.27.0-rc2
1.8.28-cert5
1.8.28.0
1.8.28.0-rc1
1.8.28.1
1.8.28.2
1.8.29.0
1.8.29.0-rc1
1.8.3
1.8.3-rc1
1.8.3-rc2
1.8.3-rc3
1.8.3.1
1.8.3.2
1.8.3.3
1.8.30.0
1.8.30.0-rc1
1.8.31.0
1.8.31.0-rc1
1.8.31.1
1.8.32.0
1.8.32.0-rc1
1.8.32.0-rc2
1.8.32.1
1.8.32.2
1.8.32.3
1.8.4
1.8.4-rc1
1.8.4-rc2
1.8.4-rc3
1.8.4.1
1.8.4.2
1.8.4.3
1.8.4.4
1.8.5-rc1
1.8.5.0
1.8.5.1
1.8.6.0
1.8.6.0-rc1
1.8.6.0-rc2
1.8.6.0-rc3
1.8.7.0
1.8.7.0-rc1
1.8.7.0-rc2
1.8.7.1
1.8.7.2
1.8.8.0
1.8.8.0-rc1
1.8.8.0-rc2
1.8.8.0-rc3
1.8.8.0-rc4
1.8.8.0-rc5
1.8.8.1
1.8.8.2
1.8.9.0
1.8.9.0-rc1
1.8.9.0-rc2
1.8.9.0-rc3
1.8.9.1
1.8.9.2
1.8.9.3
10.0.0
10.0.0-beta1
10.0.0-beta2
10.0.0-rc1
10.0.0-rc2
10.0.0-rc3
10.0.0-rc4
10.0.1
10.1.0
10.1.0-rc1
10.1.0-rc2
10.1.1
10.1.2
10.1.3
10.10.0
10.10.0-digiumphones
10.10.0-digiumphones-rc1
10.10.0-digiumphones-rc2
10.10.0-rc1
10.10.0-rc2
10.10.1
10.10.1-digiumphones
10.11.0
10.11.0-digiumphones
10.11.0-digiumphones-rc1
10.11.0-digiumphones-rc2
10.11.0-digiumphones-rc3
10.11.0-rc1
10.11.0-rc2
10.11.0-rc3
10.11.1
10.11.1-digiumphones
10.12.0
10.12.0-digiumphones
10.12.0-digiumphones-rc1
10.12.0-digiumphones-rc2
10.12.0-rc1
10.12.0-rc2
10.12.1
10.12.1-digiumphones
10.12.2
10.12.2-digiumphones
10.12.3
10.12.3-digiumphones
10.12.4
10.12.4-digiumphones
10.2.0
10.2.0-rc1
10.2.0-rc2
10.2.0-rc3
10.2.0-rc4
10.2.1
10.3.0
10.3.0-rc1
10.3.0-rc2
10.3.0-rc3
10.3.1
10.4.0
10.4.0-digiumphones-rc1
10.4.0-digiumphones-rc2
10.4.0-rc1
10.4.0-rc2
10.4.0-rc3
10.4.1
10.4.2
10.5.0
10.5.0-digiumphones
10.5.0-digiumphones-rc1
10.5.0-digiumphones-rc2
10.5.0-rc1
10.5.0-rc2
10.5.1
10.5.1-digiumphones
10.5.2
10.5.2-digiumphones
10.6.0
10.6.0-digiumphones
10.6.0-digiumphones-rc1
10.6.0-digiumphones-rc2
10.6.0-rc1
10.6.0-rc2
10.6.1
10.6.1-digiumphones
10.7.0
10.7.0-digiumphones
10.7.0-digiumphones-rc1
10.7.0-rc1
10.7.1
10.7.1-digiumphones
10.8.0
10.8.0-digiumphones
10.8.0-digiumphones-rc1
10.8.0-digiumphones-rc2
10.8.0-rc1
10.8.0-rc2
10.9.0
10.9.0-digiumphones
10.9.0-digiumphones-rc1
10.9.0-digiumphones-rc2
10.9.0-digiumphones-rc3
10.9.0-rc1
10.9.0-rc2
10.9.0-rc3
11.0.0
11.0.0-beta1
11.0.0-beta2
11.0.0-rc1
11.0.0-rc2
11.0.1
11.0.2
11.1.0
11.1.0-rc1
11.1.0-rc2
11.1.0-rc3
11.1.1
11.1.2
11.10.0
11.10.0-rc1
11.10.1
11.10.2
11.11.0
11.11.0-rc1
11.12.0
11.12.0-rc1
11.12.1
11.13.0
11.13.0-rc1
11.13.1
11.14.0
11.14.0-rc1
11.14.0-rc2
11.14.1
11.14.2
11.15.0
11.15.0-rc1
11.15.0-rc2
11.15.1
11.16.0
11.16.0-rc1
11.17.0
11.17.0-rc1
11.17.1
11.18.0-rc1
11.19.0-rc1
11.2.0
11.2.0-rc1
11.2.0-rc2
11.2.1
11.2.2
11.20.0-rc1
11.20.0-rc2
11.20.0-rc3
11.21.0
11.21.0-rc1
11.21.0-rc2
11.21.0-rc3
11.21.1
11.22.0-rc1
11.3.0
11.3.0-rc1
11.3.0-rc2
11.4.0
11.4.0-rc1
11.4.0-rc2
11.4.0-rc3
11.5.0
11.5.0-rc1
11.5.0-rc2
11.5.1
11.6-cert11
11.6.0
11.6.0-rc1
11.6.0-rc2
11.6.1
11.7.0
11.7.0-rc1
11.7.0-rc2
11.8.0
11.8.0-rc1
11.8.0-rc2
11.8.0-rc3
11.8.1
11.9.0
11.9.0-rc1
11.9.0-rc2
11.9.0-rc3
12.0.0
12.0.0-alpha1
12.0.0-alpha2
12.0.0-beta1
12.0.0-beta2
12.1.0
12.1.0-rc1
12.1.0-rc2
12.1.0-rc3
12.1.1
12.2.0
12.2.0-rc1
12.2.0-rc2
12.2.0-rc3
12.3.0
12.3.0-rc1
12.3.0-rc2
12.3.1
12.3.2
12.4.0
12.4.0-rc1
12.5.0
12.5.0-rc1
12.5.1
12.6.0
12.6.0-rc1
12.6.1
12.7.0
12.7.0-rc1
12.7.0-rc2
12.7.1
12.7.2
12.8.0
12.8.0-rc1
12.8.0-rc2
12.8.1
12.8.2
13.0.0
13.0.0-beta1
13.0.0-beta2
13.0.0-beta3
13.0.1
13.0.2
13.1-cert2
13.1.0
13.1.0-rc1
13.1.0-rc2
13.1.1
13.2.0
13.2.0-rc1
13.2.1
13.3.0
13.3.0-rc1
13.3.1
13.3.2
13.4.0-rc1
13.5.0-rc1
13.6.0-rc1
13.6.0-rc2
13.6.0-rc3
13.7.0
13.7.0-rc1
13.7.0-rc2
13.7.0-rc3
13.7.1
13.8.0-rc1
certified/1.8.11-cert1
certified/1.8.11-cert10
certified/1.8.11-cert2
certified/1.8.11-cert3-rc1
certified/1.8.11-cert3-rc2
certified/1.8.11-cert4
certified/1.8.11-cert5
certified/1.8.11-cert5-rc1
certified/1.8.11-cert5-rc2
certified/1.8.11-cert6
certified/1.8.11-cert7
certified/1.8.11-cert8
certified/1.8.11-cert9
certified/1.8.11-cert9-rc1
certified/1.8.15-cert1
certified/1.8.15-cert1-rc1
certified/1.8.15-cert1-rc2
certified/1.8.15-cert1-rc3
certified/1.8.15-cert2
certified/1.8.15-cert3
certified/1.8.15-cert4
certified/1.8.15-cert5
certified/1.8.15-cert6
certified/1.8.15-cert7
certified/1.8.28-cert1
certified/1.8.28-cert1-rc1
certified/1.8.28-cert2
certified/1.8.28-cert3
certified/1.8.28-cert4
certified/1.8.28-cert5
certified/1.8.6-cert1
certified/11.2-cert1
certified/11.2-cert1-rc1
certified/11.2-cert1-rc2
certified/11.2-cert2
certified/11.2-cert3
certified/11.6-cert1
certified/11.6-cert1-rc1
certified/11.6-cert1-rc2
certified/11.6-cert10
certified/11.6-cert11
certified/11.6-cert12
certified/11.6-cert2
certified/11.6-cert3
certified/11.6-cert4
certified/11.6-cert5
certified/11.6-cert6
certified/11.6-cert7
certified/11.6-cert8
certified/11.6-cert9
certified/13.1-cert1
certified/13.1-cert1-rc1
certified/13.1-cert1-rc2
certified/13.1-cert1-rc3
certified/13.1-cert2
certified/13.1-cert3
${ noResults }
34501 Commits (e5e265c8d9b714bdeebb419ec47b899f5ed9ff4e)
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
e5e265c8d9 |
func_channel: add NULL checks on channel tech for dummy channels
A dummy channel allocated with ast_dummy_channel_alloc() never gets a channel technology, so ast_channel_tech() returns NULL for it. func_channel_read() dereferences ast_channel_tech(chan)->type for CHANNEL(channeltype) without checking the tech for NULL, and func_channel_write_real() dereferences it the same way in its fallback branch. Both crash with a SIGSEGV on a dummy channel. This happens when CHANNEL(channeltype) is present in channelvars of ari.conf and the variable is evaluated on a dummy channel, e.g. when a voicemail is deposited for a mailbox that has an email address configured. Guard both dereferences. A dummy channel has no technology, so CHANNEL(channeltype) now reads as an empty string and a write falls through to the "Unknown or unavailable item requested" warning. This is very similar to the issue fixed by https://github.com/asterisk/asterisk/pull/1993 Resolves: #2150 AI disclaimer: Claude Opus 4.8 was used to find the cause of the crash and to find a solution. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> |
1 day ago |
|
|
5f5d1cfe22 |
chan_dahdi: Simplify checks for FXO signaling.
Many parts of chan_dahdi and sig_analog check if a channel is FXO-signaled (i.e. an FXS channel) by enumerating all 3 types of FXO-signaled channels. Add macros to simplify these checks and improve code readability (sig_analog already has one for FXS-signaled channels). Resolves: #2152 |
2 days ago |
|
|
903e4415bd |
app_amd: Correct and clarify the AMD documentation.
Fix the miniumWordLength and betweenWordSilence parameter names, which did not match the arguments AMD() accepts. Document the NOAUDIODATA cause, explain how values are appended to AMDCAUSE, and name the parameter each cause reports. MAXWORDLENGTH appends a single value, so its phantom second field is removed. Also note that both variables are set to the empty string when detection cannot be performed, state the millisecond unit once, and describe maximumWordLength as continuous voice, which is what the check measures. Resolves: #2154 |
2 days ago |
|
|
8d456966c7 |
apps/app_chanspy: don't delay spyee Hangup when spy channel has no reverse media
channel_spy() waited indefinitely on the spy channel, so after the spyee hung up the spy audiohook leaving RUNNING was not noticed until waitfor timed out. That kept an autochan reference on the spyee and delayed its destructor / Hangup. Poll with a short timeout instead. On timeout, only re-check hook status; call ast_read() only when the spy channel is readable. Resolves: #2123 |
2 days ago |
|
|
419ec6b68f |
res_prometheus: add toggle config for metrics
In high‑volume call scenarios, Prometheus exports a large number of channels‑related and bridges-related metrics.Not all users require channels_state, channels_duration and bridges_channels.Add conf options to enable or disable channel_details(covering channels_state, channels_duration) and bridge_details(covering bridges_channels). UserNote: Add new config option 'channels_detail_metrics_enabled' to disable export of 'asterisk_channels_state' and 'asterisk_channels_duration_seconds' metrics,It defaults to 'yes' to preserve existing behavior Add new config option 'bridges_detail_metrics_enabled' to disable export of 'asterisk_bridges_channels_count' metric, It defaults to 'yes' to preserve existing behavior Explicitly enable bridges_detail_metrics_enabled for the bridge_to_string unit‑test. |
3 days ago |
|
|
009dd3627f |
chan_dahdi: Make DAHDI device state cacheable to fix device state sync.
Commit
|
3 days ago |
|
|
01dbf849f3 |
app_confbridge: Add announcements option to disable conference announcements
Every conference unconditionally created an announcer channel (CBAnn) and a taskprocessor thread to play announcements to the conference as a whole, even on systems that never play any. That costs a channel, a thread and a bridge member per conference. A new bridge profile option, announcements, defaults to yes and preserves the previous behavior. When set to no, no announcer channel is created and nothing is played to the conference as a whole: the join and leave sounds, recorded name intros, the participant count announced to everyone, sound_begin and sound_leader_has_left are all suppressed, and users are never prompted to record their name regardless of the announce_join_leave user profile option. Prompts played only to the participant that caused them are unaffected, since they are played on that participant's own channel. sound_kicked, sound_muted, sound_unmuted, the join sound played back by hear_own_join_sound and the participant count requested from the DTMF menu all still play. The announcer channel exists for the lifetime of the conference, so the value that takes effect is the one from the bridge profile of the channel that creates the conference. Resolves: #2131 UserNote: A new ConfBridge bridge profile option, announcements, can be set to no to stop announcements from being played to the conference as a whole. No announcer channel is then created, which saves a channel and a taskprocessor thread per conference. Prompts played only to the participant that caused them are not affected. It defaults to yes, which is the previous behavior. |
3 days ago |
|
|
c6a592a0ef |
Bundled pjproject: Do not discard the ambient CFLAGS
Commit
|
3 days ago |
|
|
d9bce86f84 |
res_resolver_unbound: Include libunbound error reason
Failures returned by ub_resolve_async() are currently logged without the reason provided by libunbound, making resolver configuration failures difficult to diagnose. Include ub_strerror() in the error message so the underlying libunbound failure reason is available in the Asterisk log. Resolves: #2110 |
3 days ago |
|
|
437085acc0 |
app_queue: Update lastpause on realtime pause transition
Realtime queue members used lastpause to determine whether a member had transitioned from unpaused to paused. However, lastpause also stores the timestamp of the member's most recent pause and should not be cleared when the member is unpaused. Compare the existing paused state with the new realtime value instead, and update lastpause only when the member transitions from unpaused to paused. Resolves: #1760 |
3 days ago |
|
|
e80ed05877 |
chan_websocket: Add "unbuffered" mode and fix a few bugs.
Besides the User and Developer notes below, checks have been added to reject a START_MEDIA_BUFFERING buffering command if it's already active and to reject a STOP_MEDIA_BUFFERING command if a corresponding START_MEDIA_BUFFERING command was never issued. Resolves: #2115 UserNote: A new `unbuffered` chan_websocket mode has been added which sends frames to the core as they're received from the WebSocket and your app. It's similar to `passthrough` mode where your app is responsible for proper framing and timing except that, assuming you're not using an unbufferable codec (opus, speex, g729), in unbuffered mode, you can still use START_MEDIA_BUFFERING to send bulk media and have chan_websocket frame and time it. When you send STOP_MEDIA_BUFFERING, the channel will go back into unbuffered mode. Unbuffered mode is most useful when the media your app normally sends to Asterisk is already properly framed and timed but you may occasionally need to send bulk media. The mode is set with the `u` dialstring option. DeveloperNote: Two new fields have been added to the chan_websocket MEDIA_START event for both the plain text and JSON formats: `passthrough: true/false` `unbuffered: true/false` These indicate the mode the channel was created with and correspond to the `p` and `u` dialstring options. DeveloperNote: The MARK_MEDIA chan_websocket command can now be used by an app when in "passthrough" mode. |
1 week ago |
|
|
5eb9c9ce25 |
res_geolocation: Create alembic scripts and squash a SEGV.
If a profile contained a location_reference that pointed to a location that didn't exist, a segfault would occur when running the `geoloc show profiles` command. The command now prints a notice that there was an issue retrieving the profile as well as an ERROR log message with the explanation. UpgradeNote: An Alembic script has been added for res_geolocation that creates the geoloc_location and geoloc_profile tables. |
1 week ago |
|
|
f2d95be98e |
res_rtp_asterisk: Fix reported packet loss to use current report's difference
The lost packet calculation was using the cumulative number of lost packets instead of the current interval's lost packets. This lead to the MES caculation skewing over time. We now keep track of the last reported value so we can determine the current value vs the cumulative value. Fixes: #2101 |
2 weeks ago |
|
|
a9985d2340 |
res_rtp_asterisk: rtt stored before validation
The rtcp rtt value was updated before being validated. The calculating function was correctly returning an error, but only after setting the value. This could result in AMI and ARI events being generated with an invalid value. Fixes: #2099 |
2 weeks ago |
|
|
fbf7cb48c7 |
res_rtp_asterisk: Correct effective latency calculation
The effective latency calculation was using the full round trip time instead of the one-way, which causes the MES score to be worse than it would otherwise. Additionally, the rx jitter calculation was not scaling the normdev and stdev values to milliseconds, essentially disregarding their values in the calculation Fixes: #2097 |
2 weeks ago |
|
|
a7bcab0a7a |
res_rtp_asterisk: Change MES calculation to use long-term jitter mean
The MES score used the reported jitter value instead of the smoothed statistic value, which could cause a single high anomalous RTCP sample to unduly skew the overall score. Fixes: #2095 |
2 weeks ago |
|
|
367e0fe5e8 |
res_websocket_client: Release lock_obj when retries are exhausted
ast_websocket_client_connect() takes lock_obj at the top of every pass through the retry loop. When the attempts run out it leaves through the break and returns NULL without releasing it, so the calling thread ends up holding it. The other two exits, the ast_calloc failure and the success path, do release it. The retry path also takes the lock again instead of releasing it before sleeping. The header describes lock_obj as "an ao2 object to lock while the connection is being attempted", and the usleep is the wait between attempts rather than an attempt, so that is where it should be released. chan_websocket.c passes the per-call instance as lock_obj, allocated with ao2_alloc and no flags, so it gets the default AO2_ALLOC_OPT_LOCK_MUTEX. When the object is freed, __ao2_ref() reaches ast_mutex_destroy() with the mutex still held and frees the memory anyway. There is no deadlock, Asterisk mutexes are recursive, but every call that fails to connect logs two ERROR lines. With each pass balanced, the lock is held exactly once when the loop breaks, so a single unlock before the return is enough. Fixes: #2121 |
2 weeks ago |
|
|
688affc653 |
frame: Correct ast_frame_adjust_volume* documentation of 'adjustment'
The documentation for ast_frame_adjust_volume() and ast_frame_adjust_volume_float() described the 'adjustment' parameter as a dB value. In reality the parameter is a linear gain factor applied directly to the audio samples: a positive value multiplies each sample, a negative value divides each sample, and 0 leaves the audio unchanged. The documentation block has also been reformatted to use the standard ' *' Doxygen style (asterisk in the second column) for consistency with the rest of the file. To convert a dB change to this factor use adjustment = 10^(dB/20) (for example, 2 ~= +6 dB and 10 ~= +20 dB). Resolves: #1167 |
3 weeks ago |
|
|
cd80c1d469 |
res_config_odbc: Missing SQLFreeHandle in error paths.
Signed-off-by: Jaco Kroon <jaco@uls.co.za> |
3 weeks ago |
|
|
ae10be89fd |
res_cdrel_custom: Use extendable ast_str for JSON records.
Since JSON records include the field names, the actual record size can be quite lengthy and since the thread-local backed ast_str used by the DSV writer can't be extended, we need to use a regular, extendable ast_str. Resolves: #2106 |
3 weeks ago |
|
|
db172991f6 |
res_geolocation: Don't crash on invalid sorcery configuration
A crash will occur when you've configured object mappings using the
realtime wizard but neglect to set up your realtime configuration in
`extconfig.conf`. For example, adding the following to `sorcery.conf`:
[res_geolocation]
location = realtime,geo_location
profile = realtime,geo_profile
But not defining `geo_location` or `geo_profile` in `extconfig.conf`
will cause Asterisk to crash on startup.
|
3 weeks ago |
|
|
69629599ac |
res_geolocation: Load when explicitly configured in sorcery.conf
If you've explicitly configured your configuration objects in sorcery.conf, it is normal for `ast_sorcery_apply_default` to return something other than `AST_SORCERY_APPLY_SUCCESS` (e.g. `AST_SORCERY_APPLY_DEFAULT_UNNECESSARY`). This is one of the few places (outside of unit tests) that we actual pay attention to the return value of `ast_sorcery_apply_default` at all. |
3 weeks ago |
|
|
b46d9a8acf |
res_stasis_recording: Allow recording a channel that is dialing via ARI
When an ARI application dials a channel with channels.dial, the channel is placed into an internal, invisible holding bridge (the dial bridge) while dialing. record_file() rejected recording for any channel that was in a bridge, so channels.record failed with "Cannot record channel while in bridge" even though the application never joined the channel to a bridge of its own. Narrow the check so it only rejects recording when the channel is in a bridge that is NOT flagged invisible. The internal dial bridge is flagged AST_BRIDGE_FLAG_INVISIBLE (it is created by ARI internally, not by the application), so recording is still permitted there. A "real" bridge created by the application - including a user-created ARI holding bridge - is not invisible, so recording stays rejected. This keeps the fix targeted at the internal dial bridge only, rather than allowing recording in every holding bridge. Resolves: #2044 |
3 weeks ago |
|
|
6cb5e2e35b |
alembic: Preserve sub-second precision in the queue_log time column.
ast_queue_log() formats realtime queue_log timestamps with microseconds
("%F %T.%6q" in main/logger.c), but the queue_log table declares 'time' as
a generic SQLAlchemy DateTime. That renders on MySQL and MariaDB as bare
DATETIME, which has a fractional-seconds precision of 0, so MariaDB
truncates the fraction and MySQL rounds it. Every event of a single queue
entry can collapse onto one second, or move to the next one, and neither
server warns, not even in strict mode.
Once that happens, queue_log rows can no longer be ordered against each
other, or against the CEL records that cel_odbc and cel_pgsql do stamp
with microseconds.
This adds a revision that widens the queue_log column to DATETIME(6) on
MySQL and MariaDB. PostgreSQL is unaffected and left untouched: DateTime
already renders as TIMESTAMP, which keeps microseconds by default.
Fixes: #2072
UpgradeNote: (schema) On MySQL and MariaDB the queue_log 'time' column is widened
from DATETIME to DATETIME(6) so that the microsecond timestamps Asterisk
already writes are stored rather than discarded. This ALTER rewrites the
table, a datetime precision change is neither INSTANT nor INPLACE, so
queue_log writes will block for its duration on a large table. PostgreSQL
installations are unaffected. Rows already written at whole-second precision will remain as-is and won't be updated.
|
4 weeks ago |
|
|
2d24e36bab |
main/file.c: Log the reason a file could not be opened.
When ast_streamfile() failed to open a file it reported strerror(errno), but errno was not set by anything on that path. The value came from whatever syscall ran last, so the message routinely blamed an unrelated error. Drop errno from that message and log at the point of failure instead: filehelper() now reports the fopen() error, which does carry a meaningful errno, and an allocation failure from get_filestream(). Candidate files whose format does not match the channel are logged at debug level only, since filehelper() walks every registered format and skipping the ones that do not match is normal: a sound installed in several formats would otherwise warn on every successful playback. Failures inside the format module's open callback stay unlogged here, as those callbacks already report their own reason. Resolves: #1629 |
4 weeks ago |
|
|
05a5158126 |
chore: update .gitignore for clangd
Ignore clangd generated artifacts: compile_commands.json, .cache Ignores for .clangd, .clang-format, .clang-tidy tooling files |
4 weeks ago |
|
|
f06a824a59 |
func_speex: Hold channel lock while updating speex state.
speex_write() previously unlocked the channel immediately after looking up the speex datastore, then continued to create, modify, or destroy SpeexPreprocessState and related direction data without the lock. speex_callback() runs from the media path with the channel already locked, so concurrent Set(DENOISE)/Set(AGC) could free or mutate that state while preprocess was running and crash inside speex_preprocess_run(). Keep the channel locked for the full configuration update, unlock before ast_audiohook_attach()/detach(), and hold the lock across speex_read() while copying values out of the datastore. Fixes: #2091 |
4 weeks ago |
|
|
156edcc768 |
pjsip_wizard.conf.sample: Add IP authentication and TLS examples.
The only ITSP example in the file shows a single trunk that registers and authenticates. Many providers, including DIDWW which motivated this change, instead authenticate by IP address, deliver inbound calls from several regional POPs, and terminate outbound calls through a separate gateway that does require digest authentication. Several things about configuring that with the wizard are not obvious from the option reference: * remote_hosts alone generates the per-host identify matches, and is mandatory when registrations are not accepted. * Inbound and outbound need one wizard each, because a wizard has a single remote_hosts list. * A template carrying "type = wizard" is not turned into objects itself, so the two can share one. TLS has a pitfall of its own: the wizard cannot create transport objects, so the transport has to be defined in pjsip.conf and referenced here by name, while media_encryption belongs to the endpoint and needs the endpoint/ prefix. Add commented-out examples for an IP authenticated trunk pair sharing a template, and for a TLS trunk with SRTP. No functional change. UserNote: pjsip_wizard.conf.sample now includes examples for an ITSP that authenticates by IP address and delivers calls from several hosts, and for a TLS trunk with SRTP. |
4 weeks ago |
|
|
7c536e8029 |
res_http_websocket: Check for client before handling PONG frames.
websocket_handled_pong_or_close() now checks that session->client is valid before trying to check missed_pong_count. Resolves: #2085 |
4 weeks ago |
|
|
661660373a |
res_pjsip_config_wizard: Fix concurrent Named ACL reloads
Named ACL change notifications reloaded PJSIP sorcery directly from the Stasis callback. Under concurrent ACL, core, and config wizard reloads, that could overlap with config wizard object type observers that compare, prune, destroy, and replace the per-object-type last_config cache. Route the ACL-triggered reload through the PJSIP servant path and track when a Named ACL reload is pending or running so the observer still bypasses the unchanged-file optimization. Also serialize the observer cache update to prevent overlapping reload paths from mutating last_config at the same time. UserNote: Fixes a PJSIP config wizard reload hang during overlapping reloads. |
4 weeks ago |
|
|
898f495ca6 |
res_pjsip_endpoint_identifier_ip: Clarify identify DNS warning
When two DNS-based identify matches resolve to the same address, the first match makes the resolved address available for identify matching and the second match adds no new match address. The existing warning treated this as a DNS resolution failure and reported that the hostname did not resolve. Clarify the warning path so a hostname that resolves but only returns addresses already present for matching is not reported as unresolved. Fixes: #1723 |
1 month ago |
|
|
9552a73572 |
res_pjsip_config_wizard: Fix documentation errors.
The sample configuration and the module's XML documentation contained
several errors, two of which actively misled users:
* The sample said that sends_auth and accepts_auth require
"outbound/username" and "inbound/username". The wizard looks for
"outbound_auth/username" and "inbound_auth/username", so a
configuration written by following the sample fails to load with
"Wizard 'xxx' must have 'outbound_auth/username' if it sends
authentication."
* The sample claimed that hint_application defaults to "Dial(${HINT})".
There is no such default. When hint_application is not specified the
wizard removes the priority 1 extension it manages rather than
creating one.
The remaining corrections are a reversed object/field reference
(match/identify), a leftover line in the hint_exten description, an
option name (send_registrations), a stray space (remote _hosts), an
unbalanced quote in a synopsis, a misspelling (nneds), an unbalanced
bracket in the CLI usage text, and a copy/paste error in a log message
that referred to the "sangoma wizard" instead of pjsip_wizard. Two
"(default = ...)" annotations became "(default: ...)" to match the
other fourteen in the same file.
No functional change.
UserNote: The pjsip_wizard.conf sample documented the wrong option
names for sends_auth and accepts_auth, and claimed a default for
hint_application that does not exist. Configurations written by
following the sample would have failed to load.
|
1 month ago |
|
|
b650eba679 |
taskpool: count the in-flight task when selecting an executor
The taskpool selectors measure load with ast_taskprocessor_size(), which only reports queued tasks. A taskprocessor that is executing a long running task has an empty queue, so it looks identical to an idle one and the least full selector hands it more work while other executors sit free. Add ast_taskprocessor_is_executing() and include the in-flight task in the load the selectors compare. This is not a new semantic. taskprocessor_push() already counts the in-flight task as outstanding work when it notifies the listener: /* The currently executing task counts as still in queue */ was_empty = tps->executing ? 0 : previous_size == 0; The taskpool selectors are the one place that still measures only the queue. This change applies the same rule there. The accessor reads tps->executing without the object lock, the way the CLI already does in main/taskprocessor.c, because taking the lock on every push cost roughly six times the throughput: taskpool push efficiency went from 324438 to 52966 tasks per second and the serializer variant from 217467 to 38313. Without the lock both are back to baseline. A stale read only means one push is routed as if the taskprocessor had just changed state, which the selector already tolerates. Also add a unit test that holds one executor of a four executor pool inside a long task and checks that a task pushed to a different serializer runs on one of the three free executors. It fails on every run without this change. Fixes: #2074 UserNote: Taskpool executors that are running a long task are no longer considered idle when work is distributed, so tasks are routed to free executors instead of queueing behind a busy one. |
1 month ago |
|
|
c97bc56896 |
app_voicemail: Fix crash when VM_INFO reads an unset email address.
The email member of struct ast_vm_user is a pointer rather than a fixed array, and populate_defaults() leaves it NULL when a mailbox has no email address configured. Every other attribute VM_INFO reads is a fixed array, so only the email attribute is affected. VM_INFO passed vmu->email straight to ast_copy_string(), which dereferences its source unconditionally. Reading the email attribute of a mailbox that has no email address therefore crashed Asterisk from the dialplan. Guard the copy with S_OR() so an unset email address yields an empty string, matching how the language attribute already handles its fallback. The make_email_file() call sites were already guarded and are left alone. Add a regression test for the unset case, and restore the voicemail configuration when the VM_INFO test finishes. That test was the only one in app_voicemail that did not do so, which left its test mailbox in the users list and made the test fail if it ran a second time. Fixes: #2063 |
1 month ago |
|
|
fda60d1153 |
res_agi.c: Prevent out-of-bounds array access when parsing arguments
The `parse_args(...)` function writes to the `argv` array in 2 locations but was only bounds checking in one of them. Moved the bounds check so that it is encountered on each iteration through the parsing loop. Resolves: #2069 |
1 month ago |
|
|
69535d4837 |
res_pjsip_sdp_rtp: Fix intermittent call drop on reINVITE sdp change
A reINVITE that changed the offered codec set (e.g. ulaw+alaw -> alaw only) could lead to call teardown when a bridge write still using the old format occurred during the re-negotiation. This change avoids the termination by making the following changes. First, Asterisk now holds the lock across both the tx payload update and the channel format update so they commit atomically. Second, when processing the sdp on the new incoming offer, merge the new offer with the old until the negotiation is complete. Also adds unit tests for the sdp merge Fixes: #2059 |
1 month ago |
|
|
5071c104d3 |
chan_websocket: Fix NULL requestor dereference in webchan_request.
Two log statements in webchan_request() passed `requestor` straight to ast_channel_name(), which dereferences the channel with no NULL check. `requestor` is NULL whenever no originator channel is supplied: ARI POST /channels/externalMedia always passes NULL, and POST /channels/create passes NULL when `originator` is omitted. |
1 month ago |
|
|
4b1c0ad1cd |
backtrace.c: Include stdbool.h
stdbool.h is needed now that we use the bool type directly instead of bfd_boolean. See also 1d95b744c06974f0a00c143c6e0fc979af930908. Resolves: #2061 |
1 month ago |
|
|
ecef8fb208 |
res_musiconhold: Fix mohclass reference leak on answeredonly early return.
local_ast_moh_start() returns -1 from the answeredonly check without releasing the mohclass reference it holds, unlike every other exit path in the function. Nothing else ever releases that reference, so moh_class_destructor() never runs for the object. With realtime music on hold and cachertclasses disabled, each suppressed request leaks the class object, its monitor thread, the external application process and two file descriptors for the lifetime of Asterisk. For static classes the stale references prevent the class from ever being destroyed after it is replaced by a reload. Release the reference before returning, matching the other exit paths. Fixes: #2051 |
1 month ago |
|
|
7bd3e76cda |
backtrace.c: Avoid removed bfd_boolean type.
bfd_boolean has been deprecated for some time and has now been
removed in gdb, so use bool directly instead.
See:
|
1 month ago |
|
|
c5ab41ce91 |
app_voicemail.c: Fix may-be-uninitialized error
A pointer to `new` is passed to `inboxcount(...)` which increments the pointed-to value. |
1 month ago |
|
|
8883174cf5 |
pjproject: disable building pjsua when a sanitizer is used
Disable building the pjsua test application when any of the SANITIZER flags are set. Fixes: #2056 |
1 month ago |
|
|
f09c585ffa |
SECURITY.md: Add warning about reporting multiple issues in one advisory.
|
1 month ago |
|
|
c1a4cf2a81 |
chan_pjsip: Store transport info for outgoing channels
Outgoing PJSIP channels did not have transport information stored in their session datastore when CHANNEL(pjsip,local_addr) or CHANNEL(pjsip,remote_addr) was read. As a result, the address fields were empty on B-leg channels even though other dialog fields such as call-id and URIs were available. Store the selected local transport address and destination address for outgoing UAC session requests once the request is transmitted and the transport information is known. Fixes: #871 |
1 month ago |
|
|
09d2619d26 |
func_strings: Fix misspelling of "occurred" in FIELDNUM documentation.
The FIELDNUM description misspelled "occurred" as "occured". This text is user-visible: it is rendered on docs.asterisk.org and printed by "core show function FIELDNUM". |
1 month ago |
|
|
158f5ad02f |
tcptls: Don't inhibit escalations for outbound client connections.
handle_tcptls_connection() marks the current thread as inhibiting privilege escalations and as an external user interface so that dialplan functions considered 'dangerous' (STAT, SHELL, ...) cannot be executed on behalf of an external protocol. This is correct for inbound (server) connections, each of which runs on its own dedicated worker thread. However, the outbound (client) path calls handle_tcptls_connection() synchronously on the caller's own thread. When that caller is a channel/PBX thread, the thread-local flags are set and never cleared, permanently tainting the dialplan thread. Examples: - Calling Dial() for an outbound WebSocket and resuming dialplan execution with the "g" flag. - Running ExternalIVR() then continuing dialplan executing. Outbound connections are initiated by Asterisk itself and are not external user interfaces, so the flags should not be set for them. Gate the flag-setting on tcptls_session->client so it applies only to inbound connections. Resolves: #2038 |
2 months ago |
|
|
9664036fc5 |
res_rtp_asterisk: Avoid two lock inversion deadlocks with pj project
Fixes two related instance, group lock inversion deadlocks. When writing the RTP stream via rtp_sendto, the RTP instance was only unlocked before being passed to pj project when the instance was un-bundled (ie video was not bundled onto the audio stream's ICE transport.) The first change unlocks the instance whether bundled or unbundled to avoid the deadlock, then re-checks the bundled status upon return to know wether or not the transport should be used. For the second change, when an incoming RTCP NACK record was recieved, the parent (transport) and child (instance) locks were both held before the call to rtp_sendto, which is only able to release the child lock. Now in the un-bundled case the parent and child will be unlocked and re-locked in the correct order via a new helper function before and after the call to send_to. Fixes: #1946 |
2 months ago |
|
|
90c38cbab5 |
jansson: Upgrade version to jansson 2.15.1
UpgradeNote: jansson has been upgraded to 2.15.1. For more information visit jansson Github page: https://github.com/akheron/jansson/releases/tag/v2.15.1 Resolves: #2033 |
2 months ago |
|
|
c1df9b5b07 |
file.c: Ensure opening a stream opens at most one file
The functions used to stream files eventually end up calling into `filehelper(.., ACTION_OPEN)` which takes care of iterating over supported extensions and opening the first existing file. To do this, `filehelper` uses two nested loops: - An outer loop over the supported file formats. - An inner loop over the possible extensions for that format. We need to break out of both loops as soon as a file was successfully opened. Otherwise if a file exists in multiple formats (e.g `foo.wav` and `foo.alaw`) both files will be opened successively. Resolves: #1625 |
2 months ago |
|
|
9f838868f8 |
pjsip: Eliminate some unique taskprocessors.
When placing outbound calls each call would get its own taskprocessor for things related to the call. In practice this is overkill as few things actually occur. Inbound calls on the other hand already use one of the fixed number of distributor taskprocessors. This also occurred for OPTIONS requests with each AOR having its own taskprocessor. This change moves both to using a distributor taskprocessor instead. |
2 months ago |