So, just to make sure my production Asterisk server (1.4) isn’t the culprit, I decided to install the latest stable Asterisk version available on Debian 9 where I also have Jitsi-Meet & Jigasi.
That would be Asterisk 13 where I configured it as “basic” as possible, listening on port 5061 as port 5060 is already taken by Jitsi. I created two SIP extensions: 4901 (used by jigasi) and 4053 (a softphone I’d like to invite into a jitsi-meet conference room).
Here’s my super simple Asterisk configuration:
# cat /etc/asterisk/extensions.conf
[from-internal]
exten = 4053,1,Dial(SIP/4053,300,tTWg)
same = n,Hangup()
# cat /etc/asterisk/sip.conf
[general]
bindaddr=0.0.0.0:5061
context=default
[4053]
deny=0.0.0.0/0.0.0.0
disallow=all
type=friend
secret=somesecret
qualify=yes
port=5060
permit=0.0.0.0/0.0.0.0
nat=yes
host=dynamic
dtmfmode=info
dial=SIP/4053
context=from-internal
canreinvite=no
allow=gsm,alaw,ulaw,h264
[4901]
deny=0.0.0.0/0.0.0.0
type=friend
secret=jigasisecret
qualify=yes
port=5060
permit=0.0.0.0/0.0.0.0
nat=yes
host=dynamic
dtmfmode=rfc2833
dial=SIP/4901
context=from-internal
canreinvite=yes
Both SIP extensions seem to be OK:
# asterisk -rx "sip show peers"
Name/username Host Dyn Forcerport Comedia ACL Port Status Description
4053/4053 10.215.144.48 D Yes Yes A 5060 OK (3 ms)
4901/4901 10.215.144.139 D Yes Yes A 5060 OK (5 ms)
Unfortunately, I was unable to see the above SIP extension 4901 with “status OK” with the default jigasi properties. I had to add PREFERRED_TRANSPORT=udp. Here’s the full config:
# grep -v ^# /etc/jitsi/jigasi/sip-communicator.properties | grep -v ^$
org.jitsi.jigasi.DEFAULT_JVB_ROOM_NAME=testhman
net.java.sip.communicator.impl.protocol.SingleCallInProgressPolicy.enabled=false
net.java.sip.communicator.impl.neomedia.codec.audio.opus.encoder.COMPLEXITY=10
net.java.sip.communicator.packetlogging.PACKET_LOGGING_ENABLED=true
net.java.sip.communicator.impl.protocol.sip.acc1403273890647=acc1403273890647
net.java.sip.communicator.impl.protocol.sip.acc1403273890647.ACCOUNT_UID=SIP\:4901@10.215.144.139
net.java.sip.communicator.impl.protocol.sip.acc1403273890647.PASSWORD=jigasisecretencoded
net.java.sip.communicator.impl.protocol.sip.acc1403273890647.PROTOCOL_NAME=SIP
net.java.sip.communicator.impl.protocol.sip.acc1403273890647.SERVER_ADDRESS=10.215.144.139
net.java.sip.communicator.impl.protocol.sip.acc1403273890647.SERVER_ADDRESS_VALIDATED=true
net.java.sip.communicator.impl.protocol.sip.acc1403273890647.SERVER_PORT=5061
net.java.sip.communicator.impl.protocol.sip.acc1403273890647.PROXY_ADDRESS=10.215.144.139
net.java.sip.communicator.impl.protocol.sip.acc1403273890647.PROXY_PORT=5061
net.java.sip.communicator.impl.protocol.sip.acc1403273890647.PROXY_ADDRESS_VALIDATED=true
net.java.sip.communicator.impl.protocol.sip.acc1403273890647.PROXY_AUTO_CONFIG=false
net.java.sip.communicator.impl.protocol.sip.acc1403273890647.USER_ID=4901@10.215.144.139
net.java.sip.communicator.impl.protocol.sip.acc1403273890647.KEEP_ALIVE_INTERVAL=25
net.java.sip.communicator.impl.protocol.sip.acc1403273890647.KEEP_ALIVE_METHOD=OPTIONS
net.java.sip.communicator.impl.protocol.sip.acc1403273890647.PREFERRED_TRANSPORT=udp
net.java.sip.communicator.impl.protocol.sip.acc1403273890647.VOICEMAIL_ENABLED=false
net.java.sip.communicator.impl.protocol.sip.acc1403273890647.Encodings.AMR-WB/16000=750
net.java.sip.communicator.impl.protocol.sip.acc1403273890647.Encodings.G722/8000=700
net.java.sip.communicator.impl.protocol.sip.acc1403273890647.Encodings.GSM/8000=0
net.java.sip.communicator.impl.protocol.sip.acc1403273890647.Encodings.H263-1998/90000=0
net.java.sip.communicator.impl.protocol.sip.acc1403273890647.Encodings.H264/90000=0
net.java.sip.communicator.impl.protocol.sip.acc1403273890647.Encodings.PCMA/8000=600
net.java.sip.communicator.impl.protocol.sip.acc1403273890647.Encodings.PCMU/8000=650
net.java.sip.communicator.impl.protocol.sip.acc1403273890647.Encodings.SILK/12000=0
net.java.sip.communicator.impl.protocol.sip.acc1403273890647.Encodings.SILK/16000=0
net.java.sip.communicator.impl.protocol.sip.acc1403273890647.Encodings.SILK/24000=0
net.java.sip.communicator.impl.protocol.sip.acc1403273890647.Encodings.SILK/8000=0
net.java.sip.communicator.impl.protocol.sip.acc1403273890647.Encodings.VP8/90000=0
net.java.sip.communicator.impl.protocol.sip.acc1403273890647.Encodings.iLBC/8000=10
net.java.sip.communicator.impl.protocol.sip.acc1403273890647.Encodings.opus/48000=1000
net.java.sip.communicator.impl.protocol.sip.acc1403273890647.Encodings.red/90000=0
net.java.sip.communicator.impl.protocol.sip.acc1403273890647.Encodings.speex/16000=0
net.java.sip.communicator.impl.protocol.sip.acc1403273890647.Encodings.speex/32000=0
net.java.sip.communicator.impl.protocol.sip.acc1403273890647.Encodings.speex/8000=0
net.java.sip.communicator.impl.protocol.sip.acc1403273890647.Encodings.telephone-event/8000=1
net.java.sip.communicator.impl.protocol.sip.acc1403273890647.Encodings.ulpfec/90000=0
net.java.sip.communicator.impl.protocol.sip.acc1403273890647.OVERRIDE_ENCODINGS=true
net.java.sip.communicator.impl.protocol.sip.acc1403273890647.DEFAULT_ENCRYPTION=false
net.java.sip.communicator.impl.protocol.sip.acc1403273890647.DOMAIN_BASE=meet.mydomain.org
org.jitsi.jigasi.xmpp.acc.IS_SERVER_OVERRIDDEN=true
org.jitsi.jigasi.xmpp.acc.SERVER_ADDRESS=127.0.0.1
org.jitsi.jigasi.xmpp.acc.VIDEO_CALLING_DISABLED=true
org.jitsi.jigasi.xmpp.acc.JINGLE_NODES_ENABLED=false
org.jitsi.jigasi.xmpp.acc.IM_DISABLED=true
org.jitsi.jigasi.xmpp.acc.SERVER_STORED_INFO_DISABLED=true
org.jitsi.jigasi.xmpp.acc.IS_FILE_TRANSFER_DISABLED=true
net.java.sip.communicator.service.gui.ALWAYS_TRUST_MODE_ENABLED=true
org.jitsi.jigasi.ENABLE_SIP=true
I then connected to https://meet.mydomain.org/testhman, clicked on the + sign, typed in “4053”, and noticed that the jitsi-meet web UI keeps notifying me that " has been invited" (ie. blank string instead of “4053”). Anyway, I guess that’s a minor bug if and only if the number I dialed is honored.
Now I’m finally getting an error in /var/log/jitsi/jigasi.log that I wasn’t seeing before when connecting to Asterisk 1.4:
2020-04-04 01:22:16.994 WARNING: [82] org.jitsi.jigasi.xmpp.CallControl.checkAuthorized().287 Requests are not secured by JID filter!
2020-04-04 01:22:16.994 INFO: [82] org.jitsi.jigasi.xmpp.CallControl.handleDialIq().211 [ctx=158595613699230988622] Got dial request fromnumber -> 4053 room: testhman@conference.meet.mydomain.org
2020-04-04 01:22:17.001 INFO: [82] org.jitsi.jigasi.JvbConference.setXmppProvider().539 [ctx=158595613699230988622] Using ProtocolProviderServiceJabberImpl(Jabber:5646fa2f@meet.mydomain.org/5646fa2f)
2020-04-04 01:22:17.009 WARNING: [82] org.jitsi.xmpp.component.ComponentBase.log() PROCESSING TIME LIMIT EXCEEDED - it took 17ms to process: <iq type="set" to="callcontrol.meet.mydomain.org" from="focus@auth.meet.mydomain.org/focus368795356414708" id="lKMaD-260886"><dial xmlns="urn:xmpp:rayo:1" to="4053" from="fromnumber"><header value="testhman@conference.meet.mydomain.org" name="JvbRoomName"/></dial></iq>
2020-04-04 01:22:17.235 INFO: [83] impl.protocol.jabber.OperationSetBasicTelephonyJabberImpl.registrationStateChanged().125 Jingle : ON
2020-04-04 01:22:17.236 INFO: [83] org.jitsi.jigasi.JvbConference.registrationStateChanged().577 [ctx=158595613699230988622] Registering XMPP.
2020-04-04 01:22:17.237 SEVERE: [83] impl.protocol.jabber.ProtocolProviderServiceJabberImpl.connectAndLogin().1003 Failed to connect to XMPP service
org.jivesoftware.smack.SmackException: No supported and enabled SASL Mechanism provided by server. Server announced mechanisms: [PLAIN]. Registered SASL mechanisms with Smack: [SASL Mech: GSSAPI, Prio: 100, SASL Mech: SCRAM-SHA-1-PLUS, Prio: 100, SASL Mech: SCRAM-SHA-1, Prio: 110, SASL Mech: DIGEST-MD5, Prio: 200, SASL Mech: CRAM-MD5, Prio: 300, SASL Mech: PLAIN, Prio: 400, SASL Mech: X-OAUTH2, Prio: 410, SASL Mech: EXTERNAL, Prio: 500, SASL Mech: ANONYMOUS, Prio: 500]. Enabled SASL mechanisms for this connection: [ANONYMOUS]. Blacklisted SASL mechanisms: [SCRAM-SHA-1-PLUS].
at org.jivesoftware.smack.SASLAuthentication.selectMechanism(SASLAuthentication.java:361)
at org.jivesoftware.smack.SASLAuthentication.authenticate(SASLAuthentication.java:192)
at org.jivesoftware.smack.tcp.XMPPTCPConnection.loginInternal(XMPPTCPConnection.java:387)
at org.jivesoftware.smack.AbstractXMPPConnection.login(AbstractXMPPConnection.java:491)
at org.jivesoftware.smack.AbstractXMPPConnection.login(AbstractXMPPConnection.java:448)
at net.java.sip.communicator.impl.protocol.jabber.AnonymousLoginStrategy.login(AnonymousLoginStrategy.java:84)
at net.java.sip.communicator.impl.protocol.jabber.ProtocolProviderServiceJabberImpl.connectAndLogin(ProtocolProviderServiceJabberImpl.java:1371)
at net.java.sip.communicator.impl.protocol.jabber.ProtocolProviderServiceJabberImpl.connectAndLogin(ProtocolProviderServiceJabberImpl.java:970)
at net.java.sip.communicator.impl.protocol.jabber.ProtocolProviderServiceJabberImpl.initializeConnectAndLogin(ProtocolProviderServiceJabberImpl.java:795)
at net.java.sip.communicator.impl.protocol.jabber.ProtocolProviderServiceJabberImpl.register(ProtocolProviderServiceJabberImpl.java:500)
at org.jitsi.jigasi.util.RegisterThread.run(RegisterThread.java:59)
2020-04-04 01:22:17.268 WARNING: [87] org.jivesoftware.smack.roster.Roster.processStanza() Roster not loaded while processing Presence Stanza [id=9aD0m-38,type=error,]
2020-04-04 01:22:17.270 SEVERE: [83] org.jitsi.jigasi.JvbConference.registrationStateChanged().581 [ctx=158595613699230988622] XMPP Connection failed.
# cat /etc/prosody/conf.d/meet.mydomain.org.cfg.lua
VirtualHost "meet.mydomain.org"
authentication = "ldap2"
- ssl = {
key = "/etc/prosody/certs/meet.mydomain.org.key";
certificate = "/etc/prosody/certs/meet.mydomain.org.crt";
}
-- we need bosh
modules_enabled = {
"bosh";
"pubsub";
"ping"; -- Enable mod_ping
}
c2s_require_encryption = false
Component "conference.meet.mydomain.org" "muc"
storage = "null"
--modules_enabled = { "token_verification" }
admins = { "focus@auth.meet.mydomain.org" }
Component "jitsi-videobridge.meet.mydomain.org"
component_secret = "czzEeVRH"
VirtualHost "auth.meet.mydomain.org"
ssl = {
key = "/etc/prosody/certs/auth.meet.mydomain.org.key";
certificate = "/etc/prosody/certs/auth.meet.mydomain.org.crt";
}
authentication = "internal_plain"
Component "focus.meet.mydomain.org"
component_secret = "lqrfPXSD"
VirtualHost "guest.meet.mydomain.org"
authentication = "anonymous"
Component "callcontrol.meet.mydomain.org"
component_secret = "ivqzsJSh"
Any ideas?