[SR-Users] Fail call from Webrct to PSTN SIP trunk

Abdul Rahman Reza rahman77889 at gmail.com
Mon Aug 16 06:15:29 CEST 2021


Hi, good morning

there is something I want to ask, I'm really stuck looking for a solution,
haven't found it yet,

So I want to make Webrct able to call SIP and PSTN numbers via SIP trunk,
but it keeps failing
For testing as follows:

webrct => SIP OK
webrct => PSTN NOK
webrct => webrct OK
SIP => webrct OK
SIP => PSTN OK
SIP => SIP OK

Thank you very much in advance

this is error log from kamailio

webrct => PSTN gagal dan error muncul seperti ini :

Aug 16 11:25:16 esbdev01 /usr/sbin/kamailio[28300]: INFO: : START WEBSOCKET
: INVITE from sip:500 at domain.name (IP:127.0.0.1:43402) websocket id 12

Aug 16 11:25:16 esbdev01 /usr/sbin/kamailio[28300]: INFO: : MANAGE_BRANCH:
New branch [0] to sip:+6282311XXXXXX at IP_SIP_TRUNK:5060

Aug 16 11:25:16 esbdev01 /usr/sbin/kamailio[28300]: INFO: : NATMANAGE
branch_id:0 ruri: sip:+6282311XXXXXX at IP_SIP_TRUNK:5060, method:INVITE,
status:, extra_id: z9hG4bK46635730, rtpengine_manage: replace-origin
replace-session-connection via-branch=extra rtcp-mux-demux DTLS=off
SDES-off ICE=remove RTP/AVP

Aug 16 11:25:16 esbdev01 rtpengine[16670]: INFO: [eq07esfe0a3mcjvpait6]:
[control] Received command ‘offer’ from 127.0.0.1:38616

Aug 16 11:25:16 esbdev01 rtpengine[16670]: NOTICE: [eq07esfe0a3mcjvpait6]:
[core] Creating new call

Aug 16 11:25:16 esbdev01 rtpengine[16670]: WARNING: [eq07esfe0a3mcjvpait6]:
[core] Ignoring updated remote endpoint as the local socket is IPv4

Aug 16 11:25:16 esbdev01 rtpengine[16670]: WARNING: [eq07esfe0a3mcjvpait6]:
[core] Ignoring updated remote endpoint as the local socket is IPv4

Aug 16 11:25:16 esbdev01 rtpengine[16670]: INFO: [eq07esfe0a3mcjvpait6]:
[control] Replying to ‘offer’ from 127.0.0.1:38616 (elapsed time 0.005891
sec)

Aug 16 11:25:16 esbdev01 /usr/sbin/kamailio[28280]: INFO: : BRANCH FAILED:
z9hG4bK4663573 + 0

Aug 16 11:25:16 esbdev01 rtpengine[16670]: INFO: [eq07esfe0a3mcjvpait6]:
[control] Received command ‘delete’ from 127.0.0.1:44664

Aug 16 11:25:16 esbdev01 rtpengine[16670]: INFO: [eq07esfe0a3mcjvpait6]:
[core] Scheduling deletion of call branch ‘’ (via-branch ‘z9hG4bK46635730’)
in 30 seconds

Aug 16 11:25:16 esbdev01 rtpengine[16670]: INFO: [eq07esfe0a3mcjvpait6]:
[control] Replying to ‘delete’ from 127.0.0.1:44664 (elapsed time 0.000210
sec)

Aug 16 11:25:16 esbdev01 /usr/sbin/kamailio[28280]: INFO: : Failure:




and this is log from webrct browser using jssip

LoggerFactory.js:100 Mon Aug 16 2021 10:42:54 GMT+0700 (Western Indonesia
Time) | sip.invitecontext.sessionDescriptionHandler |
SessionDescriptionHandlerOptions:
{"peerConnectionOptions":{"rtcConfiguration":{"iceServers":[{"urls":"turn:domain_name:443?transport=tcp","username":"websip","credential":"websip"},{"urls":"turns:domain_name:80?transport=tcp","username":"websip","credential":"websip"}]},"iceCheckingTimeout":5000}}
LoggerFactory.js:100 Mon Aug 16 2021 10:42:54 GMT+0700 (Western Indonesia
Time) | sip.invitecontext.sessionDescriptionHandler | initPeerConnection
LoggerFactory.js:100 Mon Aug 16 2021 10:42:54 GMT+0700 (Western Indonesia
Time) | sip.invitecontext.sessionDescriptionHandler | New peer connection
created
LoggerFactory.js:100 Mon Aug 16 2021 10:42:54 GMT+0700 (Western Indonesia
Time) | sip.invitecontext.sessionDescriptionHandler | acquiring local media
LoggerFactory.js:100 Mon Aug 16 2021 10:42:55 GMT+0700 (Western Indonesia
Time) | sip.invitecontext.sessionDescriptionHandler | acquired local media
streams
LoggerFactory.js:100 Mon Aug 16 2021 10:42:55 GMT+0700 (Western Indonesia
Time) | sip.invitecontext.sessionDescriptionHandler | createOffer
LoggerFactory.js:100 Mon Aug 16 2021 10:42:55 GMT+0700 (Western Indonesia
Time) | sip.invitecontext.sessionDescriptionHandler |
resetIceGatheringComplete
LoggerFactory.js:100 Mon Aug 16 2021 10:42:55 GMT+0700 (Western Indonesia
Time) | sip.invitecontext.sessionDescriptionHandler | Setting local sdp.
LoggerFactory.js:100 Mon Aug 16 2021 10:42:55 GMT+0700 (Western Indonesia
Time) | sip.invitecontext.sessionDescriptionHandler | sdp is v=0
o=- 5499752371154858348 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0 1
a=extmap-allow-mixed
a=msid-semantic: WMS 2yMfiToO0B0g0rBtLDd7vEaYmQ9PrZ0QUC9w
m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 110 112 113 126
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:c/YU
a=ice-pwd:7VB8/SEvBOYMyPpKgYKzOpPK
a=ice-options:trickle
a=fingerprint:sha-256
92:73:F2:E2:70:7C:43:BD:59:3A:6C:F3:7D:B9:9F:75:19:81:4C:40:0E:DA:63:D9:FF:90:60:41:49:E6:B0:9C
a=setup:actpass
a=mid:0
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:3
http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:5 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=extmap:6 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id
a=sendrecv
a=msid:2yMfiToO0B0g0rBtLDd7vEaYmQ9PrZ0QUC9w
f8941c64-0252-4ab7-b1c5-3731f47c9fd7
a=rtcp-mux
a=rtpmap:111 opus/48000/2
a=rtcp-fb:111 transport-cc
a=fmtp:111 minptime=10;useinbandfec=1
a=rtpmap:103 ISAC/16000
a=rtpmap:104 ISAC/32000
a=rtpmap:9 G722/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:106 CN/32000
a=rtpmap:105 CN/16000
a=rtpmap:13 CN/8000
a=rtpmap:110 telephone-event/48000
a=rtpmap:112 telephone-event/32000
a=rtpmap:113 telephone-event/16000
a=rtpmap:126 telephone-event/8000
a=ssrc:3068753223 cname:vdFflh5e6U+kdnYw
a=ssrc:3068753223 msid:2yMfiToO0B0g0rBtLDd7vEaYmQ9PrZ0QUC9w
f8941c64-0252-4ab7-b1c5-3731f47c9fd7
a=ssrc:3068753223 mslabel:2yMfiToO0B0g0rBtLDd7vEaYmQ9PrZ0QUC9w
a=ssrc:3068753223 label:f8941c64-0252-4ab7-b1c5-3731f47c9fd7
m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 121 127 120 125 107 108
109 35 36 124 119 123 118 114 115 116
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:c/YU
a=ice-pwd:7VB8/SEvBOYMyPpKgYKzOpPK
a=ice-options:trickle
a=fingerprint:sha-256
92:73:F2:E2:70:7C:43:BD:59:3A:6C:F3:7D:B9:9F:75:19:81:4C:40:0E:DA:63:D9:FF:90:60:41:49:E6:B0:9C
a=setup:actpass
a=mid:1
a=extmap:14 urn:ietf:params:rtp-hdrext:toffset
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:13 urn:3gpp:video-orientation
a=extmap:3
http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:12 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay
a=extmap:11 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type
a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing
a=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:5 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=extmap:6 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id
a=sendrecv
a=msid:2yMfiToO0B0g0rBtLDd7vEaYmQ9PrZ0QUC9w
1e978692-178f-46cb-8c18-8f130343f637
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:96 VP8/90000
a=rtcp-fb:96 goog-remb
a=rtcp-fb:96 transport-cc
a=rtcp-fb:96 ccm fir
a=rtcp-fb:96 nack
a=rtcp-fb:96 nack pli
a=rtpmap:97 rtx/90000
a=fmtp:97 apt=96
a=rtpmap:98 VP9/90000
a=rtcp-fb:98 goog-remb
a=rtcp-fb:98 transport-cc
a=rtcp-fb:98 ccm fir
a=rtcp-fb:98 nack
a=rtcp-fb:98 nack pli
a=fmtp:98 profile-id=0
a=rtpmap:99 rtx/90000
a=fmtp:99 apt=98
a=rtpmap:100 VP9/90000
a=rtcp-fb:100 goog-remb
a=rtcp-fb:100 transport-cc
a=rtcp-fb:100 ccm fir
a=rtcp-fb:100 nack
a=rtcp-fb:100 nack pli
a=fmtp:100 profile-id=2
a=rtpmap:101 rtx/90000
a=fmtp:101 apt=100
a=rtpmap:102 H264/90000
a=rtcp-fb:102 goog-remb
a=rtcp-fb:102 transport-cc
a=rtcp-fb:102 ccm fir
a=rtcp-fb:102 nack
a=rtcp-fb:102 nack pli
a=fmtp:102
level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f
a=rtpmap:121 rtx/90000
a=fmtp:121 apt=102
a=rtpmap:127 H264/90000
a=rtcp-fb:127 goog-remb
a=rtcp-fb:127 transport-cc
a=rtcp-fb:127 ccm fir
a=rtcp-fb:127 nack
a=rtcp-fb:127 nack pli
a=fmtp:127
level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f
a=rtpmap:120 rtx/90000
a=fmtp:120 apt=127
a=rtpmap:125 H264/90000
a=rtcp-fb:125 goog-remb
a=rtcp-fb:125 transport-cc
a=rtcp-fb:125 ccm fir
a=rtcp-fb:125 nack
a=rtcp-fb:125 nack pli
a=fmtp:125
level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f
a=rtpmap:107 rtx/90000
a=fmtp:107 apt=125
a=rtpmap:108 H264/90000
a=rtcp-fb:108 goog-remb
a=rtcp-fb:108 transport-cc
a=rtcp-fb:108 ccm fir
a=rtcp-fb:108 nack
a=rtcp-fb:108 nack pli
a=fmtp:108
level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f
a=rtpmap:109 rtx/90000
a=fmtp:109 apt=108
a=rtpmap:35 AV1X/90000
a=rtcp-fb:35 goog-remb
a=rtcp-fb:35 transport-cc
a=rtcp-fb:35 ccm fir
a=rtcp-fb:35 nack
a=rtcp-fb:35 nack pli
a=rtpmap:36 rtx/90000
a=fmtp:36 apt=35
a=rtpmap:124 H264/90000
a=rtcp-fb:124 goog-remb
a=rtcp-fb:124 transport-cc
a=rtcp-fb:124 ccm fir
a=rtcp-fb:124 nack
a=rtcp-fb:124 nack pli
a=fmtp:124
level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=4d0032
a=rtpmap:119 rtx/90000
a=fmtp:119 apt=124
a=rtpmap:123 H264/90000
a=rtcp-fb:123 goog-remb
a=rtcp-fb:123 transport-cc
a=rtcp-fb:123 ccm fir
a=rtcp-fb:123 nack
a=rtcp-fb:123 nack pli
a=fmtp:123
level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=640032
a=rtpmap:118 rtx/90000
a=fmtp:118 apt=123
a=rtpmap:114 red/90000
a=rtpmap:115 rtx/90000
a=fmtp:115 apt=114
a=rtpmap:116 ulpfec/90000
a=ssrc-group:FID 1593038176 4012956172
a=ssrc:1593038176 cname:vdFflh5e6U+kdnYw
a=ssrc:1593038176 msid:2yMfiToO0B0g0rBtLDd7vEaYmQ9PrZ0QUC9w
1e978692-178f-46cb-8c18-8f130343f637
a=ssrc:1593038176 mslabel:2yMfiToO0B0g0rBtLDd7vEaYmQ9PrZ0QUC9w
a=ssrc:1593038176 label:1e978692-178f-46cb-8c18-8f130343f637
a=ssrc:4012956172 cname:vdFflh5e6U+kdnYw
a=ssrc:4012956172 msid:2yMfiToO0B0g0rBtLDd7vEaYmQ9PrZ0QUC9w
1e978692-178f-46cb-8c18-8f130343f637
a=ssrc:4012956172 mslabel:2yMfiToO0B0g0rBtLDd7vEaYmQ9PrZ0QUC9w
a=ssrc:4012956172 label:1e978692-178f-46cb-8c18-8f130343f637

LoggerFactory.js:100 Mon Aug 16 2021 10:42:55 GMT+0700 (Western Indonesia
Time) | sip.invitecontext.sessionDescriptionHandler |
waitForIceGatheringComplete
LoggerFactory.js:100 Mon Aug 16 2021 10:42:55 GMT+0700 (Western Indonesia
Time) | sip.invitecontext.sessionDescriptionHandler | ICE is not complete.
Returning promise
LoggerFactory.js:100 Mon Aug 16 2021 10:42:55 GMT+0700 (Western Indonesia
Time) | sip.invitecontext.sessionDescriptionHandler | RTCIceGatheringState
changed: gathering
LoggerFactory.js:100 Mon Aug 16 2021 10:42:55 GMT+0700 (Western Indonesia
Time) | sip.invitecontext.sessionDescriptionHandler | ICE candidate
received: candidate:3250795810 1 udp 2122260223 10.XX.XX.XX 63469 typ host
generation 0 ufrag c/YU network-id 2 network-cost 50
LoggerFactory.js:100 Mon Aug 16 2021 10:42:55 GMT+0700 (Western Indonesia
Time) | sip.invitecontext.sessionDescriptionHandler | ICE candidate
received: candidate:211156821 1 udp 2122194687 192.XXX.X.X 50637 typ host
generation 0 ufrag c/YU network-id 1 network-cost 10
LoggerFactory.js:100 Mon Aug 16 2021 10:42:55 GMT+0700 (Western Indonesia
Time) | sip.invitecontext.sessionDescriptionHandler | ICE candidate
received: candidate:3250795810 1 udp 2122260223 10.XX.XX.XX 55429 typ host
generation 0 ufrag c/YU network-id 2 network-cost 50
LoggerFactory.js:100 Mon Aug 16 2021 10:42:55 GMT+0700 (Western Indonesia
Time) | sip.invitecontext.sessionDescriptionHandler | ICE candidate
received: candidate:211156821 1 udp 2122194687 192.XXX.X.X 50147 typ host
generation 0 ufrag c/YU network-id 1 network-cost 10
LoggerFactory.js:100 Mon Aug 16 2021 10:42:56 GMT+0700 (Western Indonesia
Time) | sip.invitecontext.sessionDescriptionHandler | ICE candidate
received: candidate:2403387858 1 tcp 1518280447 10.XX.XX.XX 9 typ host
tcptype active generation 0 ufrag c/YU network-id 2 network-cost 50
LoggerFactory.js:100 Mon Aug 16 2021 10:42:56 GMT+0700 (Western Indonesia
Time) | sip.invitecontext.sessionDescriptionHandler | ICE candidate
received: candidate:1108738981 1 tcp 1518214911 192.XXX.X.X 9 typ host
tcptype active generation 0 ufrag c/YU network-id 1 network-cost 10
LoggerFactory.js:100 Mon Aug 16 2021 10:42:56 GMT+0700 (Western Indonesia
Time) | sip.invitecontext.sessionDescriptionHandler | ICE candidate
received: candidate:2403387858 1 tcp 1518280447 10.XX.XX.XX 9 typ host
tcptype active generation 0 ufrag c/YU network-id 2 network-cost 50
LoggerFactory.js:100 Mon Aug 16 2021 10:42:56 GMT+0700 (Western Indonesia
Time) | sip.invitecontext.sessionDescriptionHandler | ICE candidate
received: candidate:1108738981 1 tcp 1518214911 192.XXX.X.X 9 typ host
tcptype active generation 0 ufrag c/YU network-id 1 network-cost 10
LoggerFactory.js:100 Mon Aug 16 2021 10:42:56 GMT+0700 (Western Indonesia
Time) | sip.invitecontext.sessionDescriptionHandler | RTCIceGatheringState
changed: complete
LoggerFactory.js:100 Mon Aug 16 2021 10:42:56 GMT+0700 (Western Indonesia
Time) | sip.transport | sending WebSocket message:

INVITE sip:+6282311XXXXXX at domain_name SIP/2.0
Via: SIP/2.0/WSS asv5il0mh6sc.invalid;branch=z9hG4bK4035596
Max-Forwards: 70
To: <sip:+6282311XXXXXX at domain_name>
From: "webrtc" <sip:500 at domain_name>;tag=t9cuh03rp3
Call-ID: eq07e6in98hmjs1uulas
CSeq: 8516 INVITE
Contact: <sip:tfqbf6kb at asv5il0mh6sc.invalid;transport=ws;ob>
Allow: ACK,CANCEL,INVITE,MESSAGE,BYE,OPTIONS,INFO,NOTIFY,REFER
Supported: outbound
User-Agent: SIP.js/0.13.6
Content-Type: application/sdp
Content-Length: 6891

v=0
o=- 5499752371154858348 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0 1
a=extmap-allow-mixed
a=msid-semantic: WMS 2yMfiToO0B0g0rBtLDd7vEaYmQ9PrZ0QUC9w
m=audio 63469 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 110 112 113 126
c=IN IP4 10.XX.XX.XX
a=rtcp:9 IN IP4 0.0.0.0
a=candidate:3250795810 1 udp 2122260223 10.XX.XX.XX 63469 typ host
generation 0 network-id 2 network-cost 50
a=candidate:211156821 1 udp 2122194687 192.XXX.X.X 50637 typ host
generation 0 network-id 1 network-cost 10
a=candidate:2403387858 1 tcp 1518280447 10.XX.XX.XX 9 typ host tcptype
active generation 0 network-id 2 network-cost 50
a=candidate:1108738981 1 tcp 1518214911 192.XXX.X.X 9 typ host tcptype
active generation 0 network-id 1 network-cost 10
a=ice-ufrag:c/YU
a=ice-pwd:7VB8/SEvBOYMyPpKgYKzOpPK
a=ice-options:trickle
a=fingerprint:sha-256
92:73:F2:E2:70:7C:43:BD:59:3A:6C:F3:7D:B9:9F:75:19:81:4C:40:0E:DA:63:D9:FF:90:60:41:49:E6:B0:9C
a=setup:actpass
a=mid:0
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:3
http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:5 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=extmap:6 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id
a=sendrecv
a=msid:2yMfiToO0B0g0rBtLDd7vEaYmQ9PrZ0QUC9w
f8941c64-0252-4ab7-b1c5-3731f47c9fd7
a=rtcp-mux
a=rtpmap:111 opus/48000/2
a=rtcp-fb:111 transport-cc
a=fmtp:111 minptime=10;useinbandfec=1
a=rtpmap:103 ISAC/16000
a=rtpmap:104 ISAC/32000
a=rtpmap:9 G722/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:106 CN/32000
a=rtpmap:105 CN/16000
a=rtpmap:13 CN/8000
a=rtpmap:110 telephone-event/48000
a=rtpmap:112 telephone-event/32000
a=rtpmap:113 telephone-event/16000
a=rtpmap:126 telephone-event/8000
a=ssrc:3068753223 cname:vdFflh5e6U+kdnYw
a=ssrc:3068753223 msid:2yMfiToO0B0g0rBtLDd7vEaYmQ9PrZ0QUC9w
f8941c64-0252-4ab7-b1c5-3731f47c9fd7
a=ssrc:3068753223 mslabel:2yMfiToO0B0g0rBtLDd7vEaYmQ9PrZ0QUC9w
a=ssrc:3068753223 label:f8941c64-0252-4ab7-b1c5-3731f47c9fd7
m=video 55429 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 121 127 120 125 107
108 109 35 36 124 119 123 118 114 115 116
c=IN IP4 10.XX.XX.XX
a=rtcp:9 IN IP4 0.0.0.0
a=candidate:3250795810 1 udp 2122260223 10.XX.XX.XX 55429 typ host
generation 0 network-id 2 network-cost 50
a=candidate:211156821 1 udp 2122194687 192.XXX.X.X 50147 typ host
generation 0 network-id 1 network-cost 10
a=candidate:2403387858 1 tcp 1518280447 10.XX.XX.XX 9 typ host tcptype
active generation 0 network-id 2 network-cost 50
a=candidate:1108738981 1 tcp 1518214911 192.XXX.X.X 9 typ host tcptype
active generation 0 network-id 1 network-cost 10
a=ice-ufrag:c/YU
a=ice-pwd:7VB8/SEvBOYMyPpKgYKzOpPK
a=ice-options:trickle
a=fingerprint:sha-256
92:73:F2:E2:70:7C:43:BD:59:3A:6C:F3:7D:B9:9F:75:19:81:4C:40:0E:DA:63:D9:FF:90:60:41:49:E6:B0:9C
a=setup:actpass
a=mid:1
a=extmap:14 urn:ietf:params:rtp-hdrext:toffset
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:13 urn:3gpp:video-orientation
a=extmap:3
http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:12 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay
a=extmap:11 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type
a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing
a=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:5 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=extmap:6 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id
a=sendrecv
a=msid:2yMfiToO0B0g0rBtLDd7vEaYmQ9PrZ0QUC9w
1e978692-178f-46cb-8c18-8f130343f637
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:96 VP8/90000
a=rtcp-fb:96 goog-remb
a=rtcp-fb:96 transport-cc
a=rtcp-fb:96 ccm fir
a=rtcp-fb:96 nack
a=rtcp-fb:96 nack pli
a=rtpmap:97 rtx/90000
a=fmtp:97 apt=96
a=rtpmap:98 VP9/90000
a=rtcp-fb:98 goog-remb
a=rtcp-fb:98 transport-cc
a=rtcp-fb:98 ccm fir
a=rtcp-fb:98 nack
a=rtcp-fb:98 nack pli
a=fmtp:98 profile-id=0
a=rtpmap:99 rtx/90000
a=fmtp:99 apt=98
a=rtpmap:100 VP9/90000
a=rtcp-fb:100 goog-remb
a=rtcp-fb:100 transport-cc
a=rtcp-fb:100 ccm fir
a=rtcp-fb:100 nack
a=rtcp-fb:100 nack pli
a=fmtp:100 profile-id=2
a=rtpmap:101 rtx/90000
a=fmtp:101 apt=100
a=rtpmap:102 H264/90000
a=rtcp-fb:102 goog-remb
a=rtcp-fb:102 transport-cc
a=rtcp-fb:102 ccm fir
a=rtcp-fb:102 nack
a=rtcp-fb:102 nack pli
a=fmtp:102
level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f
a=rtpmap:121 rtx/90000
a=fmtp:121 apt=102
a=rtpmap:127 H264/90000
a=rtcp-fb:127 goog-remb
a=rtcp-fb:127 transport-cc
a=rtcp-fb:127 ccm fir
a=rtcp-fb:127 nack
a=rtcp-fb:127 nack pli
a=fmtp:127
level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f
a=rtpmap:120 rtx/90000
a=fmtp:120 apt=127
a=rtpmap:125 H264/90000
a=rtcp-fb:125 goog-remb
a=rtcp-fb:125 transport-cc
a=rtcp-fb:125 ccm fir
a=rtcp-fb:125 nack
a=rtcp-fb:125 nack pli
a=fmtp:125
level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f
a=rtpmap:107 rtx/90000
a=fmtp:107 apt=125
a=rtpmap:108 H264/90000
a=rtcp-fb:108 goog-remb
a=rtcp-fb:108 transport-cc
a=rtcp-fb:108 ccm fir
a=rtcp-fb:108 nack
a=rtcp-fb:108 nack pli
a=fmtp:108
level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f
a=rtpmap:109 rtx/90000
a=fmtp:109 apt=108
a=rtpmap:35 AV1X/90000
a=rtcp-fb:35 goog-remb
a=rtcp-fb:35 transport-cc
a=rtcp-fb:35 ccm fir
a=rtcp-fb:35 nack
a=rtcp-fb:35 nack pli
a=rtpmap:36 rtx/90000
a=fmtp:36 apt=35
a=rtpmap:124 H264/90000
a=rtcp-fb:124 goog-remb
a=rtcp-fb:124 transport-cc
a=rtcp-fb:124 ccm fir
a=rtcp-fb:124 nack
a=rtcp-fb:124 nack pli
a=fmtp:124
level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=4d0032
a=rtpmap:119 rtx/90000
a=fmtp:119 apt=124
a=rtpmap:123 H264/90000
a=rtcp-fb:123 goog-remb
a=rtcp-fb:123 transport-cc
a=rtcp-fb:123 ccm fir
a=rtcp-fb:123 nack
a=rtcp-fb:123 nack pli
a=fmtp:123
level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=640032
a=rtpmap:118 rtx/90000
a=fmtp:118 apt=123
a=rtpmap:114 red/90000
a=rtpmap:115 rtx/90000
a=fmtp:115 apt=114
a=rtpmap:116 ulpfec/90000
a=ssrc-group:FID 1593038176 4012956172
a=ssrc:1593038176 cname:vdFflh5e6U+kdnYw
a=ssrc:1593038176 msid:2yMfiToO0B0g0rBtLDd7vEaYmQ9PrZ0QUC9w
1e978692-178f-46cb-8c18-8f130343f637
a=ssrc:1593038176 mslabel:2yMfiToO0B0g0rBtLDd7vEaYmQ9PrZ0QUC9w
a=ssrc:1593038176 label:1e978692-178f-46cb-8c18-8f130343f637
a=ssrc:4012956172 cname:vdFflh5e6U+kdnYw
a=ssrc:4012956172 msid:2yMfiToO0B0g0rBtLDd7vEaYmQ9PrZ0QUC9w
1e978692-178f-46cb-8c18-8f130343f637
a=ssrc:4012956172 mslabel:2yMfiToO0B0g0rBtLDd7vEaYmQ9PrZ0QUC9w
a=ssrc:4012956172 label:1e978692-178f-46cb-8c18-8f130343f637


LoggerFactory.js:100 Mon Aug 16 2021 10:42:56 GMT+0700 (Western Indonesia
Time) | sip.invitecontext.sessionDescriptionHandler | ICE candidate
gathering complete
LoggerFactory.js:100 Mon Aug 16 2021 10:42:56 GMT+0700 (Western Indonesia
Time) | sip.transport | received WebSocket text message:

SIP/2.0 407 Proxy Authentication Required
Via: SIP/2.0/WSS
asv5il0mh6sc.invalid;branch=z9hG4bK4035596;rport=43402;received=127.0.0.1
To: <sip:+6282311XXXXXX at domain_name
>;tag=a2d3384ccaf3d0890b1d994026562a34.429c0000
From: "webrtc" <sip:500 at domain_name>;tag=t9cuh03rp3
Call-ID: eq07e6in98hmjs1uulas
CSeq: 8516 INVITE
Proxy-Authenticate: Digest realm="domain_name",
nonce="YRnf9GEZ3shCY5HMSWfzE6ctJ5ig1Kd7"
Server: kamailio (5.5.0 (x86_64/linux))
Content-Length: 0



LoggerFactory.js:100 Mon Aug 16 2021 10:42:56 GMT+0700 (Western Indonesia
Time) | sip.transport | sending WebSocket message:

ACK sip:+6282311XXXXXX at domain_name SIP/2.0
Via: SIP/2.0/WSS asv5il0mh6sc.invalid;branch=z9hG4bK7163476
Max-Forwards: 70
To: <sip:+6282311XXXXXX at domain_name
>;tag=a2d3384ccaf3d0890b1d994026562a34.429c0000
From: "webrtc" <sip:500 at domain_name>;tag=t9cuh03rp3
Call-ID: eq07e6in98hmjs1uulas
CSeq: 8516 ACK
Supported: outbound
User-Agent: SIP.js/0.13.6
Content-Length: 0



LoggerFactory.js:100 Mon Aug 16 2021 10:42:56 GMT+0700 (Western Indonesia
Time) | sip.transport | sending WebSocket message:

INVITE sip:+6282311XXXXXX at domain_name SIP/2.0
Via: SIP/2.0/WSS asv5il0mh6sc.invalid;branch=z9hG4bK6711062
Max-Forwards: 70
To: <sip:+6282311XXXXXX at domain_name>
From: "webrtc" <sip:500 at domain_name>;tag=t9cuh03rp3
Call-ID: eq07e6in98hmjs1uulas
CSeq: 8517 INVITE
Proxy-Authorization: Digest algorithm=MD5, username="500",
realm="domain_name", nonce="YRnf9GEZ3shCY5HMSWfzE6ctJ5ig1Kd7",
uri="sip:+6282311XXXXXX at domain_name",
response="da7c3cf9c21d8aa85f72c5e723f8d42c"
Contact: <sip:tfqbf6kb at asv5il0mh6sc.invalid;transport=ws;ob>
Allow: ACK,CANCEL,INVITE,MESSAGE,BYE,OPTIONS,INFO,NOTIFY,REFER
Supported: outbound
User-Agent: SIP.js/0.13.6
Content-Type: application/sdp
Content-Length: 6891

v=0
o=- 5499752371154858348 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0 1
a=extmap-allow-mixed
a=msid-semantic: WMS 2yMfiToO0B0g0rBtLDd7vEaYmQ9PrZ0QUC9w
m=audio 63469 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 110 112 113 126
c=IN IP4 10.XX.XX.XX
a=rtcp:9 IN IP4 0.0.0.0
a=candidate:3250795810 1 udp 2122260223 10.XX.XX.XX 63469 typ host
generation 0 network-id 2 network-cost 50
a=candidate:211156821 1 udp 2122194687 192.XXX.X.X 50637 typ host
generation 0 network-id 1 network-cost 10
a=candidate:2403387858 1 tcp 1518280447 10.XX.XX.XX 9 typ host tcptype
active generation 0 network-id 2 network-cost 50
a=candidate:1108738981 1 tcp 1518214911 192.XXX.X.X 9 typ host tcptype
active generation 0 network-id 1 network-cost 10
a=ice-ufrag:c/YU
a=ice-pwd:7VB8/SEvBOYMyPpKgYKzOpPK
a=ice-options:trickle
a=fingerprint:sha-256
92:73:F2:E2:70:7C:43:BD:59:3A:6C:F3:7D:B9:9F:75:19:81:4C:40:0E:DA:63:D9:FF:90:60:41:49:E6:B0:9C
a=setup:actpass
a=mid:0
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:3
http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:5 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=extmap:6 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id
a=sendrecv
a=msid:2yMfiToO0B0g0rBtLDd7vEaYmQ9PrZ0QUC9w
f8941c64-0252-4ab7-b1c5-3731f47c9fd7
a=rtcp-mux
a=rtpmap:111 opus/48000/2
a=rtcp-fb:111 transport-cc
a=fmtp:111 minptime=10;useinbandfec=1
a=rtpmap:103 ISAC/16000
a=rtpmap:104 ISAC/32000
a=rtpmap:9 G722/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:106 CN/32000
a=rtpmap:105 CN/16000
a=rtpmap:13 CN/8000
a=rtpmap:110 telephone-event/48000
a=rtpmap:112 telephone-event/32000
a=rtpmap:113 telephone-event/16000
a=rtpmap:126 telephone-event/8000
a=ssrc:3068753223 cname:vdFflh5e6U+kdnYw
a=ssrc:3068753223 msid:2yMfiToO0B0g0rBtLDd7vEaYmQ9PrZ0QUC9w
f8941c64-0252-4ab7-b1c5-3731f47c9fd7
a=ssrc:3068753223 mslabel:2yMfiToO0B0g0rBtLDd7vEaYmQ9PrZ0QUC9w
a=ssrc:3068753223 label:f8941c64-0252-4ab7-b1c5-3731f47c9fd7
m=video 55429 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 121 127 120 125 107
108 109 35 36 124 119 123 118 114 115 116
c=IN IP4 10.XX.XX.XX
a=rtcp:9 IN IP4 0.0.0.0
a=candidate:3250795810 1 udp 2122260223 10.XX.XX.XX 55429 typ host
generation 0 network-id 2 network-cost 50
a=candidate:211156821 1 udp 2122194687 192.XXX.X.X 50147 typ host
generation 0 network-id 1 network-cost 10
a=candidate:2403387858 1 tcp 1518280447 10.XX.XX.XX 9 typ host tcptype
active generation 0 network-id 2 network-cost 50
a=candidate:1108738981 1 tcp 1518214911 192.XXX.X.X 9 typ host tcptype
active generation 0 network-id 1 network-cost 10
a=ice-ufrag:c/YU
a=ice-pwd:7VB8/SEvBOYMyPpKgYKzOpPK
a=ice-options:trickle
a=fingerprint:sha-256
92:73:F2:E2:70:7C:43:BD:59:3A:6C:F3:7D:B9:9F:75:19:81:4C:40:0E:DA:63:D9:FF:90:60:41:49:E6:B0:9C
a=setup:actpass
a=mid:1
a=extmap:14 urn:ietf:params:rtp-hdrext:toffset
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:13 urn:3gpp:video-orientation
a=extmap:3
http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:12 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay
a=extmap:11 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type
a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing
a=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:5 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=extmap:6 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id
a=sendrecv
a=msid:2yMfiToO0B0g0rBtLDd7vEaYmQ9PrZ0QUC9w
1e978692-178f-46cb-8c18-8f130343f637
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:96 VP8/90000
a=rtcp-fb:96 goog-remb
a=rtcp-fb:96 transport-cc
a=rtcp-fb:96 ccm fir
a=rtcp-fb:96 nack
a=rtcp-fb:96 nack pli
a=rtpmap:97 rtx/90000
a=fmtp:97 apt=96
a=rtpmap:98 VP9/90000
a=rtcp-fb:98 goog-remb
a=rtcp-fb:98 transport-cc
a=rtcp-fb:98 ccm fir
a=rtcp-fb:98 nack
a=rtcp-fb:98 nack pli
a=fmtp:98 profile-id=0
a=rtpmap:99 rtx/90000
a=fmtp:99 apt=98
a=rtpmap:100 VP9/90000
a=rtcp-fb:100 goog-remb
a=rtcp-fb:100 transport-cc
a=rtcp-fb:100 ccm fir
a=rtcp-fb:100 nack
a=rtcp-fb:100 nack pli
a=fmtp:100 profile-id=2
a=rtpmap:101 rtx/90000
a=fmtp:101 apt=100
a=rtpmap:102 H264/90000
a=rtcp-fb:102 goog-remb
a=rtcp-fb:102 transport-cc
a=rtcp-fb:102 ccm fir
a=rtcp-fb:102 nack
a=rtcp-fb:102 nack pli
a=fmtp:102
level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f
a=rtpmap:121 rtx/90000
a=fmtp:121 apt=102
a=rtpmap:127 H264/90000
a=rtcp-fb:127 goog-remb
a=rtcp-fb:127 transport-cc
a=rtcp-fb:127 ccm fir
a=rtcp-fb:127 nack
a=rtcp-fb:127 nack pli
a=fmtp:127
level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f
a=rtpmap:120 rtx/90000
a=fmtp:120 apt=127
a=rtpmap:125 H264/90000
a=rtcp-fb:125 goog-remb
a=rtcp-fb:125 transport-cc
a=rtcp-fb:125 ccm fir
a=rtcp-fb:125 nack
a=rtcp-fb:125 nack pli
a=fmtp:125
level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f
a=rtpmap:107 rtx/90000
a=fmtp:107 apt=125
a=rtpmap:108 H264/90000
a=rtcp-fb:108 goog-remb
a=rtcp-fb:108 transport-cc
a=rtcp-fb:108 ccm fir
a=rtcp-fb:108 nack
a=rtcp-fb:108 nack pli
a=fmtp:108
level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f
a=rtpmap:109 rtx/90000
a=fmtp:109 apt=108
a=rtpmap:35 AV1X/90000
a=rtcp-fb:35 goog-remb
a=rtcp-fb:35 transport-cc
a=rtcp-fb:35 ccm fir
a=rtcp-fb:35 nack
a=rtcp-fb:35 nack pli
a=rtpmap:36 rtx/90000
a=fmtp:36 apt=35
a=rtpmap:124 H264/90000
a=rtcp-fb:124 goog-remb
a=rtcp-fb:124 transport-cc
a=rtcp-fb:124 ccm fir
a=rtcp-fb:124 nack
a=rtcp-fb:124 nack pli
a=fmtp:124
level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=4d0032
a=rtpmap:119 rtx/90000
a=fmtp:119 apt=124
a=rtpmap:123 H264/90000
a=rtcp-fb:123 goog-remb
a=rtcp-fb:123 transport-cc
a=rtcp-fb:123 ccm fir
a=rtcp-fb:123 nack
a=rtcp-fb:123 nack pli
a=fmtp:123
level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=640032
a=rtpmap:118 rtx/90000
a=fmtp:118 apt=123
a=rtpmap:114 red/90000
a=rtpmap:115 rtx/90000
a=fmtp:115 apt=114
a=rtpmap:116 ulpfec/90000
a=ssrc-group:FID 1593038176 4012956172
a=ssrc:1593038176 cname:vdFflh5e6U+kdnYw
a=ssrc:1593038176 msid:2yMfiToO0B0g0rBtLDd7vEaYmQ9PrZ0QUC9w
1e978692-178f-46cb-8c18-8f130343f637
a=ssrc:1593038176 mslabel:2yMfiToO0B0g0rBtLDd7vEaYmQ9PrZ0QUC9w
a=ssrc:1593038176 label:1e978692-178f-46cb-8c18-8f130343f637
a=ssrc:4012956172 cname:vdFflh5e6U+kdnYw
a=ssrc:4012956172 msid:2yMfiToO0B0g0rBtLDd7vEaYmQ9PrZ0QUC9w
1e978692-178f-46cb-8c18-8f130343f637
a=ssrc:4012956172 mslabel:2yMfiToO0B0g0rBtLDd7vEaYmQ9PrZ0QUC9w
a=ssrc:4012956172 label:1e978692-178f-46cb-8c18-8f130343f637


LoggerFactory.js:100 Mon Aug 16 2021 10:42:56 GMT+0700 (Western Indonesia
Time) | sip.transport | received WebSocket text message:

SIP/2.0 100 trying -- your call is important to us
Via: SIP/2.0/WSS
asv5il0mh6sc.invalid;branch=z9hG4bK6711062;rport=43402;received=127.0.0.1
To: <sip:+6282311XXXXXX at domain_name>
From: "webrtc" <sip:500 at domain_name>;tag=t9cuh03rp3
Call-ID: eq07e6in98hmjs1uulas
CSeq: 8517 INVITE
Server: kamailio (5.5.0 (x86_64/linux))
Content-Length: 0



LoggerFactory.js:100 Mon Aug 16 2021 10:42:56 GMT+0700 (Western Indonesia
Time) | sip.invitecontext.sessionDescriptionHandler | ICE Connection State
changed to iceConnectionChecking
LoggerFactory.js:100 Mon Aug 16 2021 10:42:56 GMT+0700 (Western Indonesia
Time) | sip.transport | received WebSocket text message:

SIP/2.0 500 Server Internal Error
Via: SIP/2.0/WSS
asv5il0mh6sc.invalid;branch=z9hG4bK6711062;received=127.0.0.1;rport=43402
Call-ID: eq07e6in98hmjs1uulas
From: "webrtc"<sip:500 at domain_name>;tag=t9cuh03rp3
To: <sip:+6282311XXXXXX at domain_name>;tag=23r36zzp
CSeq: 8517 INVITE
Warning: 399 03077.08860.B.005.422.228.0.15.01039.00000000.00000 "SDP body
length beyond limit"
Content-Length: 0



LoggerFactory.js:100 Mon Aug 16 2021 10:42:56 GMT+0700 (Western Indonesia
Time) | sip.transport | sending WebSocket message:

ACK sip:+6282311XXXXXX at domain_name SIP/2.0
Via: SIP/2.0/WSS asv5il0mh6sc.invalid;branch=z9hG4bK2860365
Max-Forwards: 70
To: <sip:+6282311XXXXXX at domain_name>;tag=23r36zzp
From: "webrtc" <sip:500 at domain_name>;tag=t9cuh03rp3
Call-ID: eq07e6in98hmjs1uulas
CSeq: 8517 ACK
Supported: outbound
User-Agent: SIP.js/0.13.6
Content-Length: 0



LoggerFactory.js:100 Mon Aug 16 2021 10:42:56 GMT+0700 (Western Indonesia
Time) | sip.inviteclientcontext | closing INVITE session
eq07e6in98hmjs1uulast9cuh03rp3
LoggerFactory.js:100 Mon Aug 16 2021 10:42:56 GMT+0700 (Western Indonesia
Time) | sip.invitecontext.sessionDescriptionHandler | closing PeerConnection
LoggerFactory.js:100 Mon Aug 16 2021 10:42:56 GMT+0700 (Western Indonesia
Time) | sip.invitecontext.sessionDescriptionHandler |
resetIceGatheringComplete





and this is config of kamailio.cfg

#!KAMAILIO
#

#!define WITH_MYSQL
#!define WITH_AUTH
#!define WITH_USRLOCDB
#!define WITH_TLS
#!define WITH_HOMER
#!define WITH_WEBSOCKETS
#!define WITH_ANTIFLOOD
##!define WITH_IPV6
##!define WITH_BRIDGE_ON_FAIL
#!define WITH_LOCALHOST_WS
##!define WITH_LOCALHOST_SIP
#!define WITH_PSTN

#!substdef "!MY_SIP_PORT!5060!g"
#!substdef "!MY_SIPS_PORT!5061!g"
#!substdef "!MY_WS_PORT!8080!g"
#!substdef "!MY_WSS_PORT!4443!g"

#!substdef "!MY_IP4_ADDR!IP-SERVER!g"
#!substdef "!IP4_LOCALHOST!127.0.0.1!g"
#!substdef "!MY_WS4_ADDR!tcp:MY_IP4_ADDR:MY_WS_PORT!g"
#!substdef "!MY_WSS4_ADDR!tls:MY_IP4_ADDR:MY_WSS_PORT!g"
#!substdef "!LOCALHOST_WS4_ADDR!tcp:IP4_LOCALHOST:MY_WS_PORT!g"
#!substdef "!LOCALHOST_WSS4_ADDR!tls:IP4_LOCALHOST:MY_WSS_PORT!g"

#!ifdef WITH_IPV6
#!substdef "!MY_IP6_ADDR![IPv6-SERVER]!g"
#!substdef "!IP6_LOCALHOST![::1]!g"
#!substdef "!MY_WS6_ADDR!tcp:MY_IP6_ADDR:MY_WS_PORT!g"
#!substdef "!MY_WSS6_ADDR!tls:MY_IP6_ADDR:MY_WSS_PORT!g"
#!substdef "!LOCALHOST_WS6_ADDR!tcp:IP6_LOCALHOST:MY_WS_PORT!g"
#!substdef "!LOCALHOST_WSS6_ADDR!tls:IP6_LOCALHOST:MY_WSS_PORT!g"
#!endif

#!substdef "!MY_DOMAIN!DOMAIN-NAME!g"

# *** Value defines - IDs used later in config
#!ifdef WITH_MYSQL
# - database URL - used to connect to database server by modules such
# as: auth_db, acc, usrloc, a.s.o.
#!ifndef DBURL
#!define DBURL "mysql://kamailio:kamailiorw@localhost/kamailio"
#!endif
#!endif

# - flags
# FLT_ - per transaction (message) flags
# FLB_ - per branch flags
#!define FLT_NATS 5

#!define FLB_NATB 6
#!define FLB_NATSIPPING 7
#!define FLB_RTPWS 8
#!define FLB_IPV6 9
#!define FLB_V4V6 10
#!define FLB_BRIDGE 11

####### Global Parameters #########

### LOG Levels: 3=DBG, 2=INFO, 1=NOTICE, 0=WARN, -1=ERR
#!ifdef WITH_DEBUG
debug=4
log_stderror=no
#!else
debug=2
log_stderror=no
#!endif

memdbg=5
memlog=5

log_facility=LOG_LOCAL0

fork=yes
children=4

port=MY_SIP_PORT
tls_port_no=MY_SIPS_PORT

#!ifdef WITH_TLS
enable_tls=yes
#!endif


listen=MY_IP4_ADDR
#!ifdef WITH_LOCALHOST_SIP
listen=IP4_LOCALHOST
#!endif
#!ifdef WITH_IPV6
listen=MY_IP6_ADDR
#!ifdef WITH_LOCALHOST_SIP
listen=IP6_LOCALHOST
#!endif
#!endif

#!ifdef WITH_WEBSOCKETS
listen=MY_WS4_ADDR
#!ifdef WITH_LOCALHOST_WS
listen=LOCALHOST_WS4_ADDR
#!endif
#!ifdef WITH_IPV6
listen=MY_WS6_ADDR
#!ifdef WITH_LOCALHOST_WS
listen=LOCALHOST_WS6_ADDR
#!endif
#!endif
#!ifdef WITH_TLS
listen=MY_WSS4_ADDR
#!ifdef WITH_LOCALHOST_WS
listen=LOCALHOST_WSS4_ADDR
#!endif
#!ifdef WITH_IPV6
listen=MY_WSS6_ADDR
#!ifdef WITH_LOCALHOST_WS
listen=LOCALHOST_WSS6_ADDR
#!endif
#!endif
#!endif
#!endif

use_dns_cache = on # Use KAMAILIO internal DNS cache
use_dns_failover = on # Depends on KAMAILIO internal DNS cache
dns_srv_loadbalancing = on #
dns_try_naptr = on #
dns_retr_time=1 # Time in seconds before retrying a DNS request
dns_retr_no=3 # Number of DNS retransmissions before giving up

# Set protocol preference order - ignore target priority
dns_naptr_ignore_rfc= yes # Ignore target NAPTR priority
dns_tls_pref=50 # First priority: TLS
dns_tcp_pref=30 # Second priority: TCP
dns_udp_pref=10 # Third priority: UDP

tcp_connection_lifetime=3604
tcp_accept_no_cl=yes
tcp_rd_buf_size=16384


#!ifdef WITH_PSTN
/* PSTN GW Routing
 *
 * - pstn.gw_ip: valid IP or hostname as string value, example:
 * pstn.gw_ip = "10.0.0.101" desc "My PSTN GW Address"
 *
 * - by default is empty to avoid misrouting */

pstn.gw_ip = "IP-SIP-TRUNK-SERVER"
pstn.gw_port = "5060"

#!endif


# set paths to location of modules (to sources or installation folders)
#!ifdef WITH_SRCPATH
mpath="modules/"
#!else
mpath="/usr/lib64/kamailio/modules/"
#!endif

#!ifdef WITH_MYSQL
loadmodule "db_mysql.so"
#!endif

loadmodule "kex.so"
loadmodule "corex.so"
loadmodule "tm.so"
loadmodule "tmx.so"
loadmodule "sl.so"
loadmodule "rr.so"
loadmodule "pv.so"
loadmodule "maxfwd.so"
loadmodule "usrloc.so"
loadmodule "registrar.so"
loadmodule "textops.so"
loadmodule "siputils.so"
loadmodule "xlog.so"
loadmodule "sanity.so"
loadmodule "ctl.so"
loadmodule "cfg_rpc.so"
loadmodule "sdpops.so"
loadmodule "textopsx.so"

#!ifdef WITH_AUTH
loadmodule "auth.so"
loadmodule "auth_db.so"
#!ifdef WITH_IPAUTH
loadmodule "permissions.so"
#!endif
#!endif

#!ifdef WITH_PRESENCE
loadmodule "presence.so"
loadmodule "presence_xml.so"
#!endif

#!ifdef WITH_TLS
loadmodule "tls.so"
#!endif

#!ifdef WITH_HOMER
loadmodule "siptrace.so"
#!endif

#!ifdef WITH_WEBSOCKETS
loadmodule "xhttp.so"
loadmodule "websocket.so"
loadmodule "nathelper.so"
loadmodule "rtpengine.so"
#!endif

#!ifdef WITH_ANTIFLOOD
loadmodule "htable.so"
loadmodule "pike.so"
#!endif

#!ifdef WITH_DEBUG
loadmodule "debugger.so"
#!endif

# ----------------- setting module-specific parameters ---------------


# ----- rr params -----
# add value to ;lr param to cope with most of the UAs
modparam("rr", "enable_full_lr", 1)
# do not append from tag to the RR (no need for this script)
modparam("rr", "append_fromtag", 0)


# ----- registrar params -----
modparam("registrar", "method_filtering", 1)
# max value for expires of registrations
modparam("registrar", "max_expires", 3600)


# ----- usrloc params -----
/* enable DB persistency for location entries */
#!ifdef WITH_USRLOCDB
modparam("usrloc", "db_url", DBURL)
modparam("usrloc", "db_mode", 2)
#!endif


# ----- auth_db params -----
#!ifdef WITH_AUTH
modparam("auth_db", "db_url", DBURL)
modparam("auth_db", "calculate_ha1", 1)
modparam("auth_db", "password_column", "password")
modparam("auth_db", "load_credentials", "")
#!endif

#!ifdef WITH_PRESENCE
# ----- presence params -----
modparam("presence", "db_url", DBURL)

# ----- presence_xml params -----
modparam("presence_xml", "db_url", DBURL)
modparam("presence_xml", "force_active", 1)
#!endif


##!ifdef WITH_NAT
# ----- rtpproxy params -----
modparam("rtpengine", "rtpengine_sock", "udp:127.0.0.1:22222")
modparam("rtpengine", "extra_id_pv", "$avp(extra_id)")

# ----- nathelper params -----
modparam("nathelper", "natping_interval", 30)
modparam("nathelper", "ping_nated_only", 1)
modparam("nathelper", "sipping_bflag", FLB_NATSIPPING)
modparam("nathelper", "sipping_from", "sip:pinger at DOMAIN-NAME")
modparam("nathelper|registrar", "received_avp", "$avp(RECEIVED)")
modparam("usrloc", "nat_bflag", FLB_NATB)
##!endif

# ----- corex params -----
modparam("corex", "alias_subdomains", "MY_DOMAIN")

#!ifdef WITH_TLS
# ----- tls params -----
modparam("tls", "config", "/etc/kamailio/tls.cfg")
modparam("tls", "tls_force_run", 1)
#!endif

#!ifdef WITH_WEBSOCKETS
modparam("nathelper|registrar", "received_avp", "$avp(RECEIVED)")
#!endif

#!ifdef WITH_HOMER
#Siptrace
modparam("siptrace", "duplicate_uri", "sip:127.0.0.1:9060")
modparam("siptrace", "hep_mode_on", 1)
modparam("siptrace", "trace_to_database", 0)
modparam("siptrace", "trace_flag", 22)
modparam("siptrace", "trace_on", 1)
#!endif

#!ifdef WITH_ANTIFLOOD
# ----- pike params -----
modparam("pike", "sampling_time_unit", 2)
modparam("pike", "reqs_density_per_unit", 16)
modparam("pike", "remove_latency", 4)

# ----- htable params -----
# ip ban htable with autoexpire after 5 minutes
modparam("htable", "htable", "ipban=>size=8;autoexpire=300;")
#!endif

#!ifdef WITH_DEBUG
# ----- debugger params -----
modparam("debugger", "cfgtrace", 1)
#!endif

####### Routing Logic ########
request_route {
#!ifdef WITH_HOMER
# start duplicate the SIP message here
sip_trace();
setflag(22);
#!endif

# per request initial checks
route(REQINIT);

xlog("L_INFO", "START: $rm from $fu (IP:$si:$sp)\n");

#!ifdef WITH_WEBSOCKETS

if ($proto =~ "ws") {
xlog("L_INFO", "START WEBSOCKET : $rm from $fu (IP:$si:$sp) websocket id
$ws_conid\n");
}

if (nat_uac_test(64)) {
# Do NAT traversal stuff for requests from a WebSocket
# connection - even if it is not behind a NAT!
# This won't be needed in the future if Kamailio and the
# WebSocket client support Outbound and Path.
force_rport();
if (is_method("REGISTER")) {
fix_nated_register();
} else if (!add_contact_alias()) {
xlog("L_ERR", "Error aliasing contact <$ct>\n");
sl_send_reply("400", "Bad Request");
exit;
}
}
#!endif

# NAT detection
route(NATDETECT);

# CANCEL processing
if (is_method("CANCEL")) {
if (t_check_trans()) {
route(RELAY);
}
exit;
}

# handle requests within SIP dialogs
route(WITHINDLG);

### only initial requests (no To tag)

t_check_trans();

# authentication
route(AUTH);

# record routing for dialog forming requests (in case they are routed)
# - remove preloaded route headers
remove_hf("Route");
if (is_method("INVITE|SUBSCRIBE")) {
record_route();
}

# dispatch requests to foreign domains
route(SIPOUT);

### requests for my local domains

# handle presence related requests
route(PRESENCE);

# handle registrations
route(REGISTRAR);

if ($rU == $null) {
# request with no Username in RURI
sl_send_reply("484","Address Incomplete");
exit;
}

# dispatch destinations to PSTN
        route(PSTN);

# user location service
route(LOCATION);
}

# Wrapper for relaying requests
route[RELAY] {
# enable additional event routes for forwarded requests
# - serial forking, RTP relaying handling, a.s.o.
if (is_method("INVITE|BYE|SUBSCRIBE|UPDATE")) {
if (!t_is_set("branch_route")) {
t_on_branch("MANAGE_BRANCH");
}
}

if (is_method("INVITE|SUBSCRIBE|UPDATE")) {
if (!t_is_set("onreply_route")) {
t_on_reply("MANAGE_REPLY");
}
}

if (is_method("INVITE")) {
if (!t_is_set("failure_route")) {
t_on_failure("MANAGE_FAILURE");
}
}

if (!t_relay()) {
sl_reply_error();
}
exit;
}

# Per SIP request initial checks
route[REQINIT] {
#!ifdef WITH_ANTIFLOOD
# flood dection from same IP and traffic ban for a while
# be sure you exclude checking trusted peers, such as pstn gateways
# - local host excluded (e.g., loop to self)
if (src_ip != myself) {
if ($sht(ipban=>$si) != $null) {
# ip is already blocked
xdbg("request from blocked IP - $rm from $fu (IP:$si:$sp)\n");
exit;
}

if (!pike_check_req()) {
xlog("L_ALERT","ALERT: pike blocking $rm from $fu (IP:$si:$sp)\n");
$sht(ipban=>$si) = 1;
exit;
}
}
#!endif

if (!mf_process_maxfwd_header("10")) {
sl_send_reply("483","Too Many Hops");
exit;
}

if (!sanity_check("1511", "7")) {
xlog("Malformed SIP message from $si:$sp\n");
exit;
}
}

# Handle requests within SIP dialogs
route[WITHINDLG] {
if (has_totag()) {
# sequential request withing a dialog should
# take the path determined by record-routing
if (loose_route()) {
#!ifdef WITH_WEBSOCKETS
if ($du == "") {
if (!handle_ruri_alias()) {
xlog("L_ERR", "Bad alias <$ru>\n");
sl_send_reply("400", "Bad Request");
exit;
}
}
#!endif
route(DLGURI);
if (is_method("ACK")) {
# ACK is forwarded statelessy
route(NATMANAGE);
} else if (is_method("NOTIFY")) {
# Add Record-Route for in-dialog NOTIFY as per RFC 6665.
record_route();
}
route(RELAY);
} else {
if (is_method("SUBSCRIBE") && uri == myself) {
# in-dialog subscribe requests
route(PRESENCE);
exit;
}
if (is_method("ACK")) {
if (t_check_trans()) {
# no loose-route, but stateful ACK;
# must be an ACK after a 487
# or e.g. 404 from upstream server
route(RELAY);
exit;
} else {
# ACK without matching transaction ... ignore and discard
exit;
}
}
sl_send_reply("404","Not here");
}
exit;
}
}

# Handle SIP registrations
route[REGISTRAR] {
if (is_method("REGISTER")) {
if (isflagset(FLT_NATS)) {
setbflag(FLB_NATB);
# uncomment next line to do SIP NAT pinging
## setbflag(FLB_NATSIPPING);
}

#!ifdef WITH_IPV6
if (af == INET6) {
setbflag(FLB_IPV6);
}
#!endif

if (!save("location")) {
sl_reply_error();
}

exit;
}
}

# USER location service
route[LOCATION] {
if (!lookup("location")) {
$var(rc) = $rc;
t_newtran();
switch ($var(rc)) {
case -1:
case -3:
send_reply("404", "Not Found");
exit;
case -2:
send_reply("405", "Method Not Allowed");
exit;
}
}

route(RELAY);
exit;
}

# Presence server route
route[PRESENCE] {
if (!is_method("PUBLISH|SUBSCRIBE")) {
return;
}

if (is_method("SUBSCRIBE") && $hdr(Event) == "message-summary") {
# returns here if no voicemail server is configured
sl_send_reply("404", "No voicemail service");
exit;
}

#!ifdef WITH_PRESENCE
if (!t_newtran()) {
sl_reply_error();
exit;
}

if (is_method("PUBLISH")) {
handle_publish();
t_release();
} else if (is_method("SUBSCRIBE")) {
handle_subscribe();
t_release();
}
exit;
#!endif

# if presence enabled, this part will not be executed
if (is_method("PUBLISH") || $rU == $null) {
sl_send_reply("404", "Not here");
exit;
}
return;
}

# Authentication route
route[AUTH] {
#!ifdef WITH_AUTH
if (is_method("REGISTER") || from_uri == myself) {
# authenticate requests
if (!auth_check("$fd", "subscriber", "1")) {
auth_challenge("$fd", "0");
exit;
}
# user authenticated - remove auth header
if (!is_method("REGISTER|PUBLISH")) {
consume_credentials();
}
}
# if caller is not local subscriber, then check if it calls
# a local destination, otherwise deny, not an open relay here
if (from_uri != myself && uri != myself) {
sl_send_reply("403","Not relaying");
exit;
}

#!endif
return;
}

# Caller NAT detection route
route[NATDETECT] {
#!ifdef WITH_IPV6
if(af==INET6) {
return;
}
#!endif

force_rport();
if (nat_uac_test("19")) {
if (is_method("REGISTER")) {
fix_nated_register();
} else if (is_first_hop()) {
set_contact_alias();
}
setflag(FLT_NATS);
}
return;
}

# NAT handling
route[NATMANAGE] {
if (is_request()) {
if (has_totag()) {
if (check_route_param("nat=yes")) {
setbflag(FLB_NATB);
}

if (check_route_param("rtp=bridge")) {
setbflag(FLB_BRIDGE);
}

if (check_route_param("rtp=ws")) {
setbflag(FLB_RTPWS);
}

#!ifdef WITH_IPV6
if (check_route_param("rtp=v46")) {
setbflag(FLB_V4V6);
}
#!endif
}
}

if (!isbflagset(FLB_BRIDGE)) {
return;
}

if (
!(isflagset(FLT_NATS)
|| isbflagset(FLB_NATB)
|| isbflagset(FLB_RTPWS)
#!ifdef WITH_IPV6
|| isbflagset(FLB_V4V6)
#!endif
)) {
return;
}

$xavp(r=>$T_branch_idx) = "replace-origin replace-session-connection";

if (!nat_uac_test("8")) {
$xavp(r=>$T_branch_idx) = $xavp(r=>$T_branch_idx) + " trust-address";
}


if (is_request()) {
if (!has_totag()) {
if (!t_is_failure_route()) {
$avp(extra_id) = @via[1].branch + $T_branch_idx;
$xavp(r=>$T_branch_idx) = $xavp(r=>$T_branch_idx) + " via-branch=extra";
}
}
}

if (is_reply()) {
$avp(extra_id) = @via[2].branch + $T_branch_idx;
$xavp(r=>$T_branch_idx) = $xavp(r=>$T_branch_idx) + " via-branch=extra";
}

#!ifdef WITH_IPV6
if (af == INET && isbflagset(FLB_IPV6)) { # IPv4 --> IPv6
$xavp(r=>$T_branch_idx) = $xavp(r=>$T_branch_idx) + " address-family=IP6";
} else if (af == INET6 && !isbflagset(FLB_IPV6)) { # IPv6 --> IPv4
$xavp(r=>$T_branch_idx) = $xavp(r=>$T_branch_idx) + " address-family=IP4";
}
#!endif

if (isbflagset(FLB_RTPWS)) {
if ($proto =~ "ws") { # web --> SIP
$xavp(r=>$T_branch_idx) = $xavp(r=>$T_branch_idx) + " rtcp-mux-demux
DTLS=off SDES-off ICE=remove RTP/AVP";
} else { # SIP --> web
$xavp(r=>$T_branch_idx) = $xavp(r=>$T_branch_idx) + " rtcp-mux-offer
generate-mid DTLS=passive SDES-off ICE=force RTP/SAVPF";
}
} else {
if ($proto =~ "ws") { # web --> web
$xavp(r=>$T_branch_idx) = $xavp(r=>$T_branch_idx) + " generate-mid
DTLS=passive SDES-off ICE=force";
}
# else {
# $xavp(r=>$T_branch_idx) = $xavp(r=>$T_branch_idx) + "";
# }
}

xlog("L_INFO", "NATMANAGE branch_id:$T_branch_idx ruri: $ru, method:$rm,
status:$rs, extra_id: $avp(extra_id), rtpengine_manage:
$xavp(r=>$T_branch_idx)\n");

rtpengine_manage($xavp(r=>$T_branch_idx));

if (is_request()) {
if (!has_totag()) {
if (t_is_branch_route()) {
if (isbflagset(FLB_NATB)) {
add_rr_param(";nat=yes");
}

if (isbflagset(FLB_BRIDGE)) {
add_rr_param(";rtp=bridge");
}

if (isbflagset(FLB_RTPWS)) {
add_rr_param(";rtp=ws");
}

#!ifdef WITH_IPV6
if (isbflagset(FLB_V4V6)) {
add_rr_param(";rtp=v46");
}
#!endif
}
}
}

if (is_reply()) {
if (isbflagset(FLB_NATB)) {
if (is_first_hop()) {
if (af == INET) {
set_contact_alias();
}
}
}
}
return;
}

# URI update for dialog requests
route[DLGURI] {
if (!isdsturiset()) {
handle_ruri_alias();
}
return;
}

# Routing to foreign domains
route[SIPOUT] {
if (!uri == myself) {
append_hf("P-hint: outbound\r\n");
route(RELAY);
}
}

route[BRIDGING] {
if (!has_totag()) {
if ($proto =~ "ws" && !($ru =~ "transport=ws")) { # Coming from WS, NOT to
WS
setbflag(FLB_RTPWS); # Need bridging
} else if (!($proto =~ "ws") && $ru =~ "transport=ws") { # Coming from NOT
WS, going to WS
setbflag(FLB_RTPWS); # Need bridging
}

#!ifdef WITH_IPV6
if (af == INET6 && !isbflagset(FLB_IPV6)) {
setbflag(FLB_V4V6);
} else if(af == INET && isbflagset(FLB_IPV6)) {
setbflag(FLB_V4V6);
}
#!endif
}
}

# manage outgoing branches
branch_route[MANAGE_BRANCH] {
xlog("L_INFO", "MANAGE_BRANCH: New branch [$T_branch_idx] to $ru\n");

t_on_branch_failure("rtpengine");

#!ifndef WITH_BRIDGE_ON_FAIL
setbflag(FLB_BRIDGE);
#!endif

route(BRIDGING);
route(NATMANAGE);
}

# manage incoming replies
onreply_route[MANAGE_REPLY] {
xdbg("incoming reply\n");
if (status =~ "[12][0-9][0-9]") {
route(NATMANAGE);
}
}

# manage failure routing cases
failure_route[MANAGE_FAILURE] {
xlog("L_INFO", "Failure: $rs");
}

#!ifdef WITH_WEBSOCKETS
onreply_route {
if ((($Rp == MY_WS_PORT || $Rp == MY_WSS_PORT)
&& !(proto == WS || proto == WSS))) {
xlog("L_WARN", "SIP response received on $Rp\n");
drop;
}

if (nat_uac_test(64)) {
# Do NAT traversal stuff for replies to a WebSocket connection
# - even if it is not behind a NAT!
# This won't be needed in the future if Kamailio and the
# WebSocket client support Outbound and Path.
add_contact_alias();
}
}

event_route[tm:branch-failure:rtpengine] {
xlog("L_INFO", "BRANCH FAILED: $sel(via[1].branch) + $T_branch_idx");

#!ifdef WITH_BRIDGE_ON_FAIL
if (!isbflagset(FLB_BRIDGE) && t_check_status("415|488")) {
t_reuse_branch();
setbflag(FLB_BRIDGE);
xlog("L_INFO", "event_route[branch-failure:rtpengine]: trying again\n");

route(RELAY);
} else {
$avp(extra_id) = @via[1].branch + $T_branch_idx;
rtpengine_delete("via-branch=extra");
xlog("L_INFO", "event_route[branch-failure:rtpengine]: failed\n");
}
#!else
$avp(extra_id) = @via[1].branch + $T_branch_idx;
rtpengine_delete("via-branch=extra");
#!endif
}

event_route[xhttp:request] {
set_reply_close();
set_reply_no_connect();

if ($Rp != MY_WS_PORT
#!ifdef WITH_TLS
&& $Rp != MY_WSS_PORT
#!endif
) {
xlog("L_WARN", "HTTP request received on $Rp\n");
xhttp_reply("403", "Forbidden", "", "");
exit;
}

xlog("L_INFO", "HTTP Request Received\n");

if ($hdr(Upgrade) =~ "websocket"
&& $hdr(Connection) =~ "Upgrade"
&& $rm =~ "GET"
) {

# Validate Host - make sure the client is using the correct
# alias for WebSockets
if ($hdr(Host) == $null || !is_myself("sip:" + $hdr(Host))) {
xlog("L_WARN", "Bad host $hdr(Host)\n");
xhttp_reply("403", "Forbidden", "", "");
exit;
}

# Optional... validate Origin - make sure the client is from an
# authorised website. For example,
#
# if ($hdr(Origin) != "https://example.com"
# && $hdr(Origin) != "https://example.com") {
# xlog("L_WARN", "Unauthorised client $hdr(Origin)\n");
# xhttp_reply("403", "Forbidden", "", "");
# exit;
# }

# Optional... perform HTTP authentication

# ws_handle_handshake() exits (no further configuration file
# processing of the request) when complete.
if (ws_handle_handshake()) {
# Optional... cache some information about the
# successful connection
exit;
}
}

xhttp_reply("404", "Not Found", "", "");
}

event_route[websocket:closed] {
xlog("L_INFO", "WebSocket connection from $si:$sp has closed\n");
}
#!endif

# PSTN GW routing
route[PSTN] {
#!ifdef WITH_PSTN
        # check if PSTN GW IP is defined
        if (strempty($sel(cfg_get.pstn.gw_ip))) {
                xlog("SCRIPT: PSTN routing enabled but pstn.gw_ip not
defined\n");
                return;
        }

        # route to PSTN dialed numbers starting with '+' or '00'
        #     (international format)
        # - update the condition to match your dialing rules for PSTN
routing
        if(!($rU=~"^(\+|00)[1-9][0-9]{3,20}$")) return;

        # only local users allowed to call
        if(from_uri!=myself) {
                sl_send_reply("403", "Not Allowed");
                exit;
        }

        # normalize target number for pstn gateway
# - convert leading 00 to +
        if (starts_with("$rU", "00")) {
                strip(2);
                prefix("+");
        }

if (strempty($sel(cfg_get.pstn.gw_port))) {
                $ru = "sip:" + $rU + "@" + $sel(cfg_get.pstn.gw_ip);
        } else {
                $ru = "sip:" + $rU + "@" + $sel(cfg_get.pstn.gw_ip) + ":"
                                        + $sel(cfg_get.pstn.gw_port);
        }

route(RELAY);
        exit;
#!endif

return;
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.kamailio.org/pipermail/sr-users/attachments/20210816/8be48c61/attachment.htm>


More information about the sr-users mailing list