mirror of https://github.com/asterisk/asterisk
master
24
22
23
20
releases/24
releases/23
releases/22
releases/20
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
24.0.0-rc2
23.6.0-rc2
22.12.0-rc2
20.22.0-rc2
24.0.0-rc1
22.12.0-rc1
23.6.0-rc1
20.22.0-rc1
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 }
34544 Commits (master)
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
ebbc0a655d |
res_pjsip_pubsub: Persist the CSeq of the NOTIFY that answers a refresh.
Since pjproject 2.13 the NOTIFY generated while handling a SUBSCRIBE refresh is cached and sent after the 200 OK, and the dialog's local CSeq only advances when it is sent. Both persistence updates made for the refresh therefore store the CSeq from before that NOTIFY. If the subscription is recreated from persistence before another NOTIFY is sent, its first NOTIFY reuses that CSeq, which subscribers reject (e.g. with 500), and the subscription is then terminated. The subscription is now persisted again from a task on its serializer, which runs after the cached NOTIFY has been sent. Assisted-by: Claude Opus 5.5 Resolves: #2189 |
3 days ago |
|
|
47949eff1b |
res_rtp_asterisk.c: Fix cleanup after RTP allocation failure.
Initialize DTLS timer IDs before RTP allocation can fail, preventing cleanup from cancelling uninitialized timers. Add a regression test for port exhaustion and reuse without a scheduler. AI assistance: Codex generated the code, test, validation scripts and text. Fixes: #1757 |
4 days ago |
|
|
9623a69d49 |
res_pjsip_pubsub: Expire subscriptions recreated from persistence.
A subscription recreated from persistence after a restart is never accepted by pjproject, so its server timeout never fires. The expiration task scheduled in its place called pubsub_on_refresh_timeout(), which in the normal state only sends another NOTIFY. If the subscriber had stopped refreshing, the subscription therefore never ended: at expiry Asterisk sent "Subscription-State: active;expires=0", then kept notifying with a wrapped expires value on every state change until the next restart. The expiration task now moves the subscription to the terminate pending state first, as pubsub_on_server_timeout() does, so it ends with a final "terminated" NOTIFY. A refresh still cancels the task, so subscriptions that are refreshed are unaffected. Assisted-by: Claude Opus 5.5 Resolves: #2187 |
6 days ago |
|
|
85de5156d5 |
res_pjsip: Accept zero-port BUNDLE-only media offers
|
1 week ago |
|
|
2184ab5493 |
res_pjsip: Use unique payload types for bundled streams
Ensure that locally generated media sections within the same BUNDLE group use unique RTP payload types. Reusing the same payload type across bundled media sections makes RTP stream association ambiguous when payload-type-based demultiplexing is used. Fixes: #2010 |
1 week ago |
|
|
ee51d78c68 |
cdr: Preserve ANSWERED disposition with ignoredialchanges
When ignoredialchanges is enabled, Dial End events update the disposition of the single CDR. With calls that dial multiple destinations, such as Queue(), one destination can answer while other dialed channels are subsequently cancelled. Those later Dial End events currently overwrite ANSWERED with a non-answer disposition even though the call was answered. Once the CDR reaches AST_CDR_ANSWERED, retain that disposition while dial changes are ignored. Fixes: #2181 UserNote: With ignoredialchanges enabled, answered calls retain an ANSWERED disposition when later dial attempts end without answer. |
1 week ago |
|
|
b62d340366 |
hashtab.c: Object lookups can be const
The objects passed to the various hashtable removal functions are not modified, so they can - and should - be `const`. |
1 week ago |
|
|
b21e03d9c8 |
app_minivm.c: Fix NULL pointer dereference in MINIVMCOUNTER write
minivm_counter_func_write() parses its argument as account:countername:operand. When the first separator is missing, strchr() returns NULL and countername is set to NULL, but it is then passed to a second strchr() call. Passing NULL to strchr() is undefined behavior and crashes Asterisk. Only look for the operand separator after the account/counter separator has been found, and initialize operand to NULL so the existing argument validation rejects input that never had an operand instead of reading an uninitialized pointer. Partially addresses #1424 |
1 week ago |
|
|
3e5765a009 |
res_manager_devicestate: Add AMI actions to set device/mailbox state.
Add AMI actions that can be used to set device states and mailbox states. This allows these states to be manually set in the same way that res_pjsip_publish_asterisk can be used to manually synchronize these states. This overcomes some existing limitations: * func_devstate only allows setting Custom device states * res_mwi_external_ami has a conflict with app_voicemail Resolves: #2173 UserNote: The new DeviceStateChange and MailboxStateChange manager actions allow setting device and mailbox states via AMI (the latter of which, unlike the existing MWIUpdate action, doesn't require res_mwi_external or conflict with app_voicemail). |
1 week ago |
|
|
5841ae7248 |
file.c: Remove long-deprecated `languageprefix` option
This was deprecated in
|
1 week ago |
|
|
c097df5d41 |
Audiohooks: Fix whisper framehook timer leak and masquerade handling
Resolves several issues with the framehook added to allow whispering without an underlying stream. The timer is now owned by the audiohook list rather than the framehook. It is retired on both channels during a masquerade and recreated when the audiohook(s) are moved. If the timer cannot be started, whisper audio is still mixed into the outbound media as it was previously (requiring an underlying stream.) An audiohook that cannot be moved to the new channel is now left DONE so that its owner does not wait on it forever. Resolves: #2134 DeveloperNote: ast_channel_fd_add() now returns -1 if it fails to allocate space for the descriptor. |
2 weeks ago |
|
|
5750f7c608 |
extstate/pjsip: Handle lack of or late loading of presence state.
The extension state implementation is stateful resulting in state not being updated if a presence state provider does not publish an update after loading. To handle providers which don't do this we query for updated state if we are asked for it and the existing state is invalid. This ensures that if the presence state provider is loaded later we will get the updated state when asked. The func_presencestate module is written to publish the persisted custom presence states at load time. This failed for entries with a not_set state as this resulted in querying the presence provider that was not yet registered. The provider is now registered before this ensuring the update can be published. This change also fixes an issue in PJSIP where a SUBSCRIBE for a hint that had an invalid presence state configuration would not send an initial NOTIFY. We now treat an invalid presence state as not set instead. Fixes: #2179 |
2 weeks ago |
|
|
e73cceb5b7 |
extstate: Include causing device channel details in legacy callbacks.
When a legacy extension state callback registers it can optionally do so in a way that it will receive the channel(s) that have caused a device to ring. This is used in PJSIP for the dialog-info+xml support so that phones can display who is calling the monitored extension. An issue was introduced in the extension state rewrite where this did not occur for the actual device that caused the extension state update. It was only being done for additional devices that could be involved. This has been fixed so that it is now done for the causing device. Fixes: #2186 |
2 weeks ago |
|
|
291d170b73 |
say.c: Look for "and" in several locations, falling back to `vm-and`
`vm-and` exists in all of the core sounds files that the project distributes, so while we will now try to find `digits/and` and `and` first, we always fallback to `vm-and`. Resolves: #622 |
2 weeks ago |
|
|
9082118693 |
utils: fix SWAP64_32 macro precedence bug on big-endian
The SWAP64_32 macro did not parenthesize its argument. When a combined flag mask such as (AST_OPT_FLAG_EXEC | AST_OPT_FLAG_NO_COLOR) was passed, the '<<' shift bound tighter than the '|', so the wrong bits were set. On big-endian systems (e.g. s390x) this caused ast_set_flag64() and a later single-flag ast_test_flag64() to disagree, so 'asterisk -rx <cmd>' dropped into the interactive console instead of executing the command. Parenthesize the macro argument so the whole expression is evaluated before the word swap. Little-endian was unaffected. |
2 weeks ago |
|
|
56df106bee |
chan_iax2.c: Support IPv6 addresses in registrations
Registrations could already occur over IPv6 but only when hostnames
were used. We now support IPv6 addresses directly using the standard
bracket notation, e.g.:
register => foo@[2001:0db8::42]
UserNote: IAX2 registrations in iax.conf can now use literal IPv6
addresses by wrapping the address in square brackets. See
iax.conf.sample for an example.
|
3 weeks ago |
|
|
3a41b4329c |
codec_ilbc: Build against system libilbc 3.x
libilbc 3.x removed the RFC 3951 compatibility function names (initDecode, initEncode, iLBC_decode, iLBC_encode). Map them to the WebRtcIlbcfix_* symbols the library exposes, and drop the "libilbc < 3" configure restriction, so codec_ilbc is built against the system libilbc even when it is version 3.x. Resolves: #2135 Signed-off-by: Peter Lemenkov <lemenkov@gmail.com> |
3 weeks ago |
|
|
b768dec4a4 |
file.c: Reduce number of allocations when searching for sound files
Depending on the requested format, the number of format modules loaded, and the order those modules were loaded, it's possible for dozens of small allocations to occur for each file playback on a channel. So instead we now allocate a single buffer big enough for any registered file format extension and we use that for all lookups. |
3 weeks ago |
|
|
021c85c7aa |
res_pjsip: Fix crash on NULL endpoint snapshot in CLI output
ast_sip_get_endpoint_snapshot() returns NULL when an endpoint has no entry in the Stasis cache, which can happen for an endpoint that is still in the sorcery container but whose snapshot has already been removed. cli_endpoint_print_body() dereferenced the result without checking, crashing the process on 'pjsip show endpoints', 'pjsip list endpoints' and 'pjsip show endpoint <id>'. ast_sip_for_each_channel_snapshot() takes the same pointer and has the same unchecked dereference. 'pjsip show endpoints' reaches it through the recursive channel formatter, using a separately fetched snapshot, so guarding only the CLI formatter would move the crash rather than remove it. Guard both. active_channels_to_str() in the same file already handles a NULL snapshot this way. Assisted-by: Claude Opus 5 Resolves: #2172 |
3 weeks ago |
|
|
9a3bd18d4d |
Fix build of bundled libpjsip with OpenSSL 4.x
|
3 weeks ago |
|
|
1fca15ad7a |
res_geolocation: Fix alembic scripts for MySQL.
Depending on the backend storage type, MySQL rows could have a maximum length of 65535 bytes including storage overhead. The number and size of the fixed-size string columns in the geoloc_profile table cause this to be exceeded. Unfortunately, this isn't detected until you try to actually create the table. To address this, the string columns types have been changed to TEXT, which both MySQL and PostgreSQL handle without counting to maximum row size. For long, variable-length strings, TEXT is also more storage efficient. MySQL also had an issue with the way the Enums were created. These were also fixed. |
4 weeks ago |
|
|
545c459873 |
res_pjsip: Qualify all resolved contact targets
Previously, PJSIP endpoint qualification was offloaded to pjproject which used a single, internally selected contact based on DNS results. This could result in unused SRV, A, or AAAA targets, leaving a contact marked as unreachable without probing the remaining targets. Now, we resolve the complete set of records before sending and creating OPTIONS transactions for every resolved target. The contact will be marked as reachable as soon as any target succeeds and unreachable only after every target fails. Fixes: #1927 UserNote: DNS-backed PJSIP contacts are now considered reachable when any resolved SRV, A, or AAAA target responds to qualification. |
4 weeks ago |
|
|
48e8d5a7ac |
func_env: Fix line counting in FILE function for DOS (CR LF) endings.
The DOS line counting mode was looking for LF CR, when it should have
been looking for CR LF. As a result, line mode never worked properly
for files with DOS (CR LF) line endings, instead erroneously
triggering an error about the offset being negative.
This bug has been present since line mode was introduced in
commit
|
4 weeks ago |
|
|
a596c215df |
ARI, chan_websocket, res_websocket_client: Handle non-blocking and timeout correctly.
This change was prompted by an issue where if the websocket peer to which ARI or chan_websocket is connected stops consuming TCP packets, its TCP receive buffer will begin to fill and ultimately cause the client's TCP send buffer to start filling. When the send buffer is completely filled, further writes to the websocket will block. This can cause a cascading lock situation with chan_websocket because it sends large amounts of data very quickly but can also affect ARI. * Added "write_timeout" parameters to websocket_client.conf and chan_websocket.conf. ari.conf already had the "websocket_write_timeout" parameter. See notes below. * Updated chan_websocket to use the write_timeout set in chan_websocket.conf for incoming/server connections if set and to use AST_DEFAULT_WEBSOCKET_WRITE_TIMEOUT (100ms) as the default if not set. * Updated chan_websocket to use the write_timeout set in websocket_client.conf for outgoing/client connections if set and to use write_timeout from chan_websocket.conf if not set. If neither is set, AST_DEFAULT_WEBSOCKET_WRITE_TIMEOUT (100ms) is used as the default. * Set non-blocking mode on the websocket in chan_websocket for both client and server connections. ARI already sets it. This is required for the timeouts to operate correctly. * Updated sample config files and XML documentation for all 3 areas. Resolves: #2140 UpgradeNote: A new "write_timeout" parameter has been added to websocket_client.conf that allows setting the maximum amount of time a write operation can take before returning an error. UpgradeNote: A new "write_timeout" parameter has been added to chan_websocket.conf setting the maximum amount of time a write operation can take before returning an error. Outgoing/client connections can override this with the new "write_timeout" parameter that was also added to websocket_client.conf. DeveloperNote: A new "write_timeout" field has been added to the ast_websocket_client_options structure that allows setting the maximum amount of time a write operation can take before returning an error. The websocket session must be set to nonblocking for this to take effect. |
4 weeks ago |
|
|
7d585413e9 |
chan_dahdi: Avoid transitioning device state from INUSE to RINGING.
By default, DAHDI relies on the Asterisk code to provide most device state, especially for analog lines, in which case it relies entirely on the core. When an incoming call arrives to a DAHDI line, it immediately asks the core to update device state for the channel. This can sometimes lead to unoptimal outcomes; for example, when ringing an FXS line (station), the device state is momentarily "INUSE" and then almost immediately transitions to "RINGING". However, this is incompatible with the state machines of some CPE. For example, Polycom IP phones' BLFs will ignore any "RINGING" received after an "INUSE". This makes sense because a line can't ring after being in use without first being made idle. (The reverse case, RINGING followed by INUSE, is allowed, since one can answer a ringing phone.) Thus, to ensure that BLFs accurately display the status of DAHDI channels, we need to avoid the momentary "INUSE" device state for ringing channels. Resolves: #2159 |
4 weeks ago |
|
|
a950dc420b |
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 month ago |
|
|
5839ce9de2 |
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 |
1 month ago |
|
|
af7936f26f |
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 |
1 month ago |
|
|
ea04aadb33 |
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 |
1 month ago |
|
|
cecb374d91 |
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. |
1 month ago |
|
|
62edbf0fc7 |
chan_dahdi: Make DAHDI device state cacheable to fix device state sync.
Commit
|
1 month ago |
|
|
0db5198b3f |
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. |
1 month ago |
|
|
78b7c4e882 |
Bundled pjproject: Do not discard the ambient CFLAGS
Commit
|
1 month ago |
|
|
a5b010b6ea |
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 |
1 month ago |
|
|
fcd5d4d03c |
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 |
1 month ago |
|
|
050332665f |
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 month ago |
|
|
23cd94fe49 |
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 month ago |
|
|
70eff7f8a9 |
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 months ago |
|
|
25b305203e |
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 months ago |
|
|
f00427e631 |
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 months ago |
|
|
2cde76d820 |
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 months ago |
|
|
7380030f3a |
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 months ago |
|
|
03b5137ba9 |
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 |
2 months ago |
|
|
2015e6f81c |
res_config_odbc: Missing SQLFreeHandle in error paths.
Signed-off-by: Jaco Kroon <jaco@uls.co.za> |
2 months ago |
|
|
cb65043877 |
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 |
2 months ago |
|
|
d43f53820d |
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.
|
2 months ago |
|
|
c116d562c6 |
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. |
2 months ago |
|
|
0c43ff2679 |
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 |
2 months ago |
|
|
9f5c28e83a |
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.
|
2 months ago |
|
|
ffbc0d6bab |
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 |
2 months ago |