BelledonneCommunications / flexisip

Linphone.org mirror for flexisip (git://git.linphone.org/flexisip.git)
http://flexisip.org
GNU Affero General Public License v3.0
140 stars 68 forks source link

systemctl start flexisip-regevent deprecated? #185

Closed petervnv closed 2 months ago

petervnv commented 3 months ago

Hi again guys,

Do we still need to run systemctl start flexisip-regevent as implied by the comments in flexisip.conf?

# Servers started by default when no --server option is specified
# on command line. Possible values are 'proxy', 'presence', 'conference',
# 'regevent' separated by whitespaces.

I ask if this has been deprecated because your wiki makes no mention of regevent service, only proxy, presence and conference as can be seen here which is confusing:

Flexisip's executable is installed in /opt/belledonne-communications/bin/flexisip . Running it without any argument will make Flexisip behave as a SIP proxy, but it can provide other kind of services. This can be chosen by using --server command-line argument, which takes three values:

proxy: launch Flexisip as a SIP proxy (default behaviour).
presence: launch Flexisip as a [presence server](https://wiki.linphone.org/xwiki/wiki/public/view/Flexisip/C.%20Features/Presence%20server/).
conference: launch Flexisip as a conference server (group chat).

When I do try to start flexisip-regevent I get a core dump because of missing database support (I think that's why it crashes):

liblinphone-warning-Database explicitely not requested, this Core is built with no database support.
liblinphone-message-Using [/root/.local/share/linphone/call-history.db] as legacy call history database path

Doesn't the regevent service use by default the same flexisip.conf as proxy, presence and conference? The other 3 services start normally and obviously they are using the database configured in flexisip.conf so I don't understand why regevent crashes. I am probably doing something wrong but it is hard to understand what's the current best practice to get it working.

Any ideas?

Cheers

Failxxx commented 3 months ago

Yes you need to run systemctl start flexisip-regevent if you want to run Flexisip as a regevent server. I agree with you, the documentation can be confusing. Could you please provide the version of Flexisip you are using along with full logs of the starting sequence of the regevent server?

petervnv commented 3 months ago

Sure, flexisip 2.3.3-28-g348ae391


2024-03-13 14:09:47:415 flexisip-message-Starting flexisip regevent-server version 2.3.3-28-g348ae391
2024-03-13 14:09:47:415 flexisip-debug-Sending trap flexisip: Flexisip regevent-server starting
2024-03-13 14:09:47:415 flexisip-debug-Pending trap: SNMP not initialized
2024-03-13 14:09:47:415 flexisip-message-system wide maximum number of file descriptors is 9223372036854775807
2024-03-13 14:09:47:415 flexisip-message-system wide maximum number open files is 1048576
2024-03-13 14:09:47:415 flexisip-message-Maximum number of open file descriptors is 1024, limit=524288, system wide limit=1048576
2024-03-13 14:09:47:415 flexisip-message-Maximum number of file descriptor set to 1048576
2024-03-13 14:09:47:415 flexisip-debug-tport_create(): 0x55c717028250
2024-03-13 14:09:47:415 flexisip-debug-tport_bind_client(0x55c717028250) to */*:*
2024-03-13 14:09:47:415 flexisip-debug-tport_alloc_primary(0x55c717028250): new primary tport 0x55c7170288f0
2024-03-13 14:09:47:415 flexisip-debug-tport_alloc_primary(0x55c717028250): new primary tport 0x55c717028e40
2024-03-13 14:09:47:415 flexisip-debug-tport_tls_init_master(0x55c717028e40): tls cert = /root/.sip/auth/agent.pem 
2024-03-13 14:09:47:415 flexisip-debug-tport_tls_init_master(0x55c717028e40): tls key = /root/.sip/auth/agent.pem 
2024-03-13 14:09:47:415 flexisip-debug-tport_tls_init_master(0x55c717028e40): tls ca = /root/.sip/auth/cafile.pem 
2024-03-13 14:09:47:446 flexisip-debug-Read 127.0.1.1 my.domain.com
2024-03-13 14:09:47:446 flexisip-debug-Read 127.0.0.1 localhost
2024-03-13 14:09:47:446 flexisip-debug-Read ::1 localhost
2024-03-13 14:09:47:446 flexisip-debug-Read ::1 ip6-localhost
2024-03-13 14:09:47:446 flexisip-debug-Read ::1 ip6-loopback
2024-03-13 14:09:47:446 flexisip-debug-Read ff02::1 ip6-allnodes
2024-03-13 14:09:47:446 flexisip-debug-Read ff02::2 ip6-allrouters
2024-03-13 14:09:47:446 flexisip-debug-Module chain computed succesfully.
2024-03-13 14:09:47:446 flexisip-message-Creating module instance of [DoSProtection].
2024-03-13 14:09:47:446 flexisip-debug-BasicThreadPool [0x55c717150b30]: init with 1 threads and queue size 1000
2024-03-13 14:09:47:446 flexisip-message-Creating module instance of [SanityChecker].
2024-03-13 14:09:47:446 flexisip-message-Creating module instance of [GarbageIn].
2024-03-13 14:09:47:446 flexisip-message-Creating module instance of [Capabilities].
2024-03-13 14:09:47:446 flexisip-message-Creating module instance of [NatHelper].
2024-03-13 14:09:47:446 flexisip-message-Creating module instance of [Authentication].
2024-03-13 14:09:47:446 flexisip-message-Creating module instance of [Redirect].
2024-03-13 14:09:47:446 flexisip-message-Creating module instance of [RegEvent].
2024-03-13 14:09:47:446 flexisip-message-Creating module instance of [B2bua].
2024-03-13 14:09:47:446 flexisip-message-Creating module instance of [GatewayAdapter].
2024-03-13 14:09:47:446 flexisip-message-Creating module instance of [Presence].
2024-03-13 14:09:47:446 flexisip-message-Creating module instance of [Registrar].
2024-03-13 14:09:47:446 flexisip-message-Creating module instance of [StatisticsCollector].
2024-03-13 14:09:47:446 flexisip-message-Creating module instance of [ContactRouteInserter].
2024-03-13 14:09:47:446 flexisip-message-Creating module instance of [Router].
2024-03-13 14:09:47:446 flexisip-message-Creating module instance of [PushNotification].
2024-03-13 14:09:47:446 flexisip-message-Creating module instance of [LoadBalancer].
2024-03-13 14:09:47:446 flexisip-message-Creating module instance of [MediaRelay].
2024-03-13 14:09:47:446 flexisip-message-Creating module instance of [Transcoder].
2024-03-13 14:09:47:446 mediastreamer-message-Mediastreamer2 factory 5.2.0 (git: 5.2.114) initialized.
2024-03-13 14:09:47:446 mediastreamer-message-CPU count set to 4
2024-03-13 14:09:47:446 mediastreamer-message-ms_factory_init() done: platform_tags=linux,x86,desktop
2024-03-13 14:09:47:446 mediastreamer-message-srtp init
2024-03-13 14:09:47:448 mediastreamer-message-Registering all soundcard handlers
2024-03-13 14:09:47:448 mediastreamer-message-Registering all webcam handlers
2024-03-13 14:09:47:448 mediastreamer-message-Webcam StaticImage: Static picture added
2024-03-13 14:09:47:448 mediastreamer-message-ms_factory_init_voip() done
2024-03-13 14:09:47:448 mediastreamer-message-Loading ms plugins from [/opt/belledonne-communications/lib/mediastreamer/plugins]
2024-03-13 14:09:47:448 mediastreamer-message-Cannot open directory /opt/belledonne-communications/lib/mediastreamer/plugins: No such file or directory
2024-03-13 14:09:47:448 flexisip-message-Creating module instance of [Forward].
2024-03-13 14:09:47:451 flexisip-debug-New network: Name: lo    Address: 127.0.0.1  Mask: 255.0.0.0
2024-03-13 14:09:47:451 flexisip-debug-New network: Name: eth0  Address: aa.bb.cc.dd    Mask: 255.255.255.255
2024-03-13 14:09:47:451 flexisip-debug-New network: Name: docker0   Address: 172.17.0.1 Mask: 255.255.0.0
2024-03-13 14:09:47:451 flexisip-debug-New network: Name: lo    Address: ::1    Mask: ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
2024-03-13 14:09:47:451 flexisip-debug-New network: Name: eth0  Address: 2a01:4f8:d2e:512::1    Mask: ffff:ffff:ffff:ffff::
2024-03-13 14:09:47:451 flexisip-debug-New network: Name: eth0  Address: fe80::9400:2ff:feca:6dc9%eth0  Mask: ffff:ffff:ffff:ffff::
2024-03-13 14:09:47:451 flexisip-debug-nta_agent_create: initialized hash tables
2024-03-13 14:09:47:451 flexisip-debug-nta_agent_create: initialized transports
2024-03-13 14:09:47:451 flexisip-debug-nta_agent_create: initialized random identifiers
2024-03-13 14:09:47:451 flexisip-debug-nta_agent_create: initialized timer
2024-03-13 14:09:47:451 flexisip-debug-nta_agent_create: initialized resolver
2024-03-13 14:09:47:452 flexisip-debug-List of host aliases:
2024-03-13 14:09:47:452 flexisip-debug-localhost
2024-03-13 14:09:47:452 flexisip-debug-my.domain.com
2024-03-13 14:09:47:452 flexisip-message-RegistrarDB implementation is REDIS
2024-03-13 14:09:47:452 flexisip-debug-Connecting to Redis server tcp://localhost:6379
2024-03-13 14:09:47:452 flexisip-debug-Creating main Redis connection
2024-03-13 14:09:47:452 flexisip-debug-Creating subscription Redis connection
2024-03-13 14:09:47:452 flexisip-debug-Collecting replication information
2024-03-13 14:09:47:452 flexisip-debug-Agent's preferred IP for internal routing find: v4: sip:127.0.0.1:5059;transport=tcp
2024-03-13 14:09:47:454 liblinphone-message-Initializing LinphoneCore 5.2.114
2024-03-13 14:09:47:455 liblinphone-message-Sal nat helper [enabled]
2024-03-13 14:09:47:455 mediastreamer-message-Mediastreamer2 factory 5.2.0 (git: 5.2.114) initialized.
2024-03-13 14:09:47:455 mediastreamer-message-CPU count set to 4
2024-03-13 14:09:47:455 mediastreamer-message-ms_factory_init() done: platform_tags=linux,x86,desktop
2024-03-13 14:09:47:455 mediastreamer-message-srtp init
2024-03-13 14:09:47:455 mediastreamer-message-Registering all soundcard handlers
2024-03-13 14:09:47:455 mediastreamer-message-Registering all webcam handlers
2024-03-13 14:09:47:455 mediastreamer-message-Webcam StaticImage: Static picture added
2024-03-13 14:09:47:455 mediastreamer-message-ms_factory_init_voip() done
2024-03-13 14:09:47:455 mediastreamer-message-Loading ms plugins from [/opt/belledonne-communications/lib/mediastreamer/plugins]
2024-03-13 14:09:47:455 mediastreamer-message-Cannot open directory /opt/belledonne-communications/lib/mediastreamer/plugins: No such file or directory
2024-03-13 14:09:47:455 liblinphone-message-Core callbacks [0x55c7172dd3c0] registered on core [0x55c71728ee40]
2024-03-13 14:09:47:455 liblinphone-message-Codec opus/48000 fmtp=[useinbandfec=1] number=-1, default enablement: 1) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec SILK/16000 fmtp=[] number=-1, default enablement: 1) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec speex/16000 fmtp=[vbr=on] number=-1, default enablement: 1) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec speex/8000 fmtp=[vbr=on] number=-1, default enablement: 1) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec PCMU/8000 fmtp=[] number=0, default enablement: 1) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec PCMA/8000 fmtp=[] number=8, default enablement: 1) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec red/1000 fmtp=[] number=-1, default enablement: 1) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec t140/1000 fmtp=[] number=-1, default enablement: 1) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec GSM/8000 fmtp=[] number=3, default enablement: 0) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec G722/8000 fmtp=[] number=9, default enablement: 0) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec iLBC/8000 fmtp=[mode=30] number=-1, default enablement: 0) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec AMR/8000 fmtp=[octet-align=1] number=-1, default enablement: 0) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec AMR-WB/16000 fmtp=[octet-align=1] number=-1, default enablement: 0) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec G729/8000 fmtp=[annexb=yes] number=18, default enablement: 1) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec mpeg4-generic/16000 fmtp=[config=F8EE2000; constantDuration=512; indexDeltaLength=3; indexLength=3; mode=AAC-hbr; profile-level-id=76; sizeLength=13; streamType=5] number=-1, default enablement: 0) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec mpeg4-generic/22050 fmtp=[config=F8EE2000; constantDuration=512; indexDeltaLength=3; indexLength=3; mode=AAC-hbr; profile-level-id=76; sizeLength=13; streamType=5] number=-1, default enablement: 0) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec mpeg4-generic/32000 fmtp=[config=F8E82000; constantDuration=512; indexDeltaLength=3; indexLength=3; mode=AAC-hbr; profile-level-id=76; sizeLength=13; streamType=5] number=-1, default enablement: 0) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec mpeg4-generic/44100 fmtp=[config=F8E82000; constantDuration=512; indexDeltaLength=3; indexLength=3; mode=AAC-hbr; profile-level-id=76; sizeLength=13; streamType=5] number=-1, default enablement: 0) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec mpeg4-generic/48000 fmtp=[config=F8EE2000; constantDuration=512; indexDeltaLength=3; indexLength=3; mode=AAC-hbr; profile-level-id=76; sizeLength=13; streamType=5] number=-1, default enablement: 0) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec iSAC/16000 fmtp=[] number=-1, default enablement: 0) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec speex/32000 fmtp=[vbr=on] number=-1, default enablement: 0) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec SILK/8000 fmtp=[] number=-1, default enablement: 0) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec SILK/12000 fmtp=[] number=-1, default enablement: 0) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec SILK/24000 fmtp=[] number=-1, default enablement: 0) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec G726-16/8000 fmtp=[] number=-1, default enablement: 0) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec G726-24/8000 fmtp=[] number=-1, default enablement: 0) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec G726-32/8000 fmtp=[] number=-1, default enablement: 0) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec G726-40/8000 fmtp=[] number=-1, default enablement: 0) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec AAL2-G726-16/8000 fmtp=[] number=-1, default enablement: 0) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec AAL2-G726-24/8000 fmtp=[] number=-1, default enablement: 0) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec AAL2-G726-32/8000 fmtp=[] number=-1, default enablement: 0) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec AAL2-G726-40/8000 fmtp=[] number=-1, default enablement: 0) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec CODEC2/8000 fmtp=[] number=-1, default enablement: 0) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec BV16/8000 fmtp=[] number=-1, default enablement: 0) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec VP8/90000 fmtp=[] number=-1, default enablement: 1) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec H264/90000 fmtp=[profile-level-id=42801F] number=-1, default enablement: 1) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec H265/90000 fmtp=[] number=-1, default enablement: 1) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec MP4V-ES/90000 fmtp=[profile-level-id=3] number=-1, default enablement: 1) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec H263-1998/90000 fmtp=[CIF=1;QCIF=1] number=-1, default enablement: 0) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec H263/90000 fmtp=[] number=34, default enablement: 0) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec 1016/8000 fmtp=[] number=1, default enablement: 0) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec G723/8000 fmtp=[] number=4, default enablement: 0) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec LPC/8000 fmtp=[] number=7, default enablement: 0) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec L16/44100 fmtp=[] number=10, default enablement: 0) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec L16/44100 fmtp=[] number=11, default enablement: 0) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec CN/8000 fmtp=[] number=13, default enablement: 0) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec H261/90000 fmtp=[] number=31, default enablement: 0) added to the list of possible codecs.
2024-03-13 14:09:47:455 liblinphone-message-Codec MPV/90000 fmtp=[] number=32, default enablement: 0) added to the list of possible codecs.
2024-03-13 14:09:47:455 belle-sip-message-Root ca path set to /etc/ssl/certs
2024-03-13 14:09:47:455 belle-sip-message-Root ca path set to /etc/ssl/certs
2024-03-13 14:09:47:456 mediastreamer-message-Loading ms plugins from [/opt/belledonne-communications/lib/mediastreamer/plugins]
2024-03-13 14:09:47:456 mediastreamer-message-Cannot open directory /opt/belledonne-communications/lib/mediastreamer/plugins: No such file or directory
2024-03-13 14:09:47:456 liblinphone-error-Could not find a suitable soundcard with capabilities : 2
2024-03-13 14:09:47:456 liblinphone-error-Could not find a suitable soundcard with capabilities : 2
2024-03-13 14:09:47:456 liblinphone-error-Could not find a suitable soundcard with capabilities : 1
2024-03-13 14:09:47:456 liblinphone-error-Could not find a suitable soundcard with capabilities : 2
2024-03-13 14:09:47:456 liblinphone-message-linphone_core_set_playback_gain_db(): no active call.
2024-03-13 14:09:47:456 liblinphone-message-linphone_core_enable_mic(): new state is [enabled], current state is [disabled]
2024-03-13 14:09:47:456 liblinphone-message-linphone_core_set_mic_gain_db(): no active call.
2024-03-13 14:09:47:456 liblinphone-message-Sal nat helper [enabled]
2024-03-13 14:09:47:456 liblinphone-message-Sal use rports [enabled]
2024-03-13 14:09:47:456 liblinphone-message-MTU is supposed to be 1300, rtp payload max size will be 1240
2024-03-13 14:09:47:456 liblinphone-message-Supported codec opus/48000 fmtp=useinbandfec=1 automatically added to codec list.
2024-03-13 14:09:47:456 mediastreamer-message-Could not find encoder for SILK
2024-03-13 14:09:47:456 liblinphone-message-Supported codec speex/16000 fmtp=vbr=on automatically added to codec list.
2024-03-13 14:09:47:456 liblinphone-message-Supported codec speex/8000 fmtp=vbr=on automatically added to codec list.
2024-03-13 14:09:47:456 liblinphone-message-Supported codec PCMU/8000 fmtp= automatically added to codec list.
2024-03-13 14:09:47:456 liblinphone-message-Supported codec PCMA/8000 fmtp= automatically added to codec list.
2024-03-13 14:09:47:456 liblinphone-message-Supported codec GSM/8000 fmtp= automatically added to codec list.
2024-03-13 14:09:47:456 liblinphone-message-Supported codec G722/8000 fmtp= automatically added to codec list.
2024-03-13 14:09:47:456 mediastreamer-message-Could not find encoder for iLBC
2024-03-13 14:09:47:456 mediastreamer-message-Could not find encoder for AMR
2024-03-13 14:09:47:456 mediastreamer-message-Could not find encoder for AMR-WB
2024-03-13 14:09:47:456 mediastreamer-message-Could not find encoder for G729
2024-03-13 14:09:47:456 mediastreamer-message-Could not find encoder for mpeg4-generic
2024-03-13 14:09:47:456 mediastreamer-message-Could not find encoder for mpeg4-generic
2024-03-13 14:09:47:456 mediastreamer-message-Could not find encoder for mpeg4-generic
2024-03-13 14:09:47:456 mediastreamer-message-Could not find encoder for mpeg4-generic
2024-03-13 14:09:47:456 mediastreamer-message-Could not find encoder for mpeg4-generic
2024-03-13 14:09:47:456 mediastreamer-message-Could not find encoder for iSAC
2024-03-13 14:09:47:456 liblinphone-message-Supported codec speex/32000 fmtp=vbr=on automatically added to codec list.
2024-03-13 14:09:47:456 mediastreamer-message-Could not find encoder for SILK
2024-03-13 14:09:47:456 mediastreamer-message-Could not find encoder for SILK
2024-03-13 14:09:47:456 mediastreamer-message-Could not find encoder for SILK
2024-03-13 14:09:47:456 mediastreamer-message-Could not find encoder for G726-16
2024-03-13 14:09:47:456 mediastreamer-message-Could not find encoder for G726-24
2024-03-13 14:09:47:456 mediastreamer-message-Could not find encoder for G726-32
2024-03-13 14:09:47:456 mediastreamer-message-Could not find encoder for G726-40
2024-03-13 14:09:47:456 mediastreamer-message-Could not find encoder for AAL2-G726-16
2024-03-13 14:09:47:456 mediastreamer-message-Could not find encoder for AAL2-G726-24
2024-03-13 14:09:47:456 mediastreamer-message-Could not find encoder for AAL2-G726-32
2024-03-13 14:09:47:456 mediastreamer-message-Could not find encoder for AAL2-G726-40
2024-03-13 14:09:47:456 mediastreamer-message-Could not find encoder for CODEC2
2024-03-13 14:09:47:456 mediastreamer-message-Could not find encoder for BV16
2024-03-13 14:09:47:456 mediastreamer-message-Could not find encoder for 1016
2024-03-13 14:09:47:456 mediastreamer-message-Could not find encoder for G723
2024-03-13 14:09:47:456 mediastreamer-message-Could not find encoder for LPC
2024-03-13 14:09:47:456 liblinphone-message-Supported codec L16/44100 fmtp= automatically added to codec list.
2024-03-13 14:09:47:456 liblinphone-message-Supported codec L16/44100 fmtp= automatically added to codec list.
2024-03-13 14:09:47:456 mediastreamer-message-Could not find encoder for CN
2024-03-13 14:09:47:456 liblinphone-message-Supported codec VP8/90000 fmtp= automatically added to codec list.
2024-03-13 14:09:47:456 mediastreamer-message-Could not find encoder for H264
2024-03-13 14:09:47:456 mediastreamer-message-Could not find encoder for H265
2024-03-13 14:09:47:456 mediastreamer-message-Could not find encoder for MP4V-ES
2024-03-13 14:09:47:456 mediastreamer-message-Could not find encoder for H263-1998
2024-03-13 14:09:47:456 mediastreamer-message-Could not find encoder for H263
2024-03-13 14:09:47:456 mediastreamer-message-Could not find encoder for H261
2024-03-13 14:09:47:456 mediastreamer-message-Could not find encoder for MPV
2024-03-13 14:09:47:456 liblinphone-message-Supported codec red/1000 fmtp= automatically added to codec list.
2024-03-13 14:09:47:456 liblinphone-message-Supported codec t140/1000 fmtp= automatically added to codec list.
2024-03-13 14:09:47:456 liblinphone-message-Sal use rports [enabled]
2024-03-13 14:09:47:456 belle-sip-message-belle_sip_stack_set_well_know_port() : set to [5060]
2024-03-13 14:09:47:456 belle-sip-message-belle_sip_stack_set_well_know_port_tls() : set to [5061]
2024-03-13 14:09:47:456 belle-sip-message-Root ca path set to /opt/belledonne-communications/share/linphone/rootca.pem
2024-03-13 14:09:47:456 liblinphone-message-Invalidating friends maps for list [0x55c7172a43b0]
2024-03-13 14:09:47:457 liblinphone-message-Sal::unlistenPorts(): done
2024-03-13 14:09:47:457 belle-sip-message-Creating listening point [0x55c7172e3250] on [sip:[::0]:6065;transport=TCP]
2024-03-13 14:09:47:457 belle-sip-warning-belle_sip_socket_set_dscp(): We are in the regret to inform that the linux kernel is unlikely to honor the DSCP fields for dual-stack sockets.
2024-03-13 14:09:47:457 liblinphone-message-Core callbacks [0x55c7172de550] registered on core [0x55c71728ee40]
2024-03-13 14:09:47:457 liblinphone-message-[ToneManager] create ToneManager()
2024-03-13 14:09:47:457 liblinphone-message-[LIME] instanciate a LimeX3dhEncryption engine 0x55c7172eeb40 - default server is [] and curve c25519 DB path: /root/.local/share/linphone/x3dh.c25519.sqlite3
2024-03-13 14:09:47:458 liblinphone-warning-Database explicitely not requested, this Core is built with no database support.
2024-03-13 14:09:47:458 liblinphone-message-Using [/root/.local/share/linphone/call-history.db] as legacy call history database path
petervnv commented 3 months ago

Hi @Failxxx , were the logs helpful? Were you able to reproduce?

Failxxx commented 3 months ago

Sorry for the delay. Yes, the regevent server reads its configuration from flexisip.conf. I was not able to reproduce the crash. Can you provide more information on what messages you have before the crash? Moreover, can you share your configuration so I can better understand what could be wrong?

petervnv commented 3 months ago

No worries. I don't see any messages before the crash. I am including full logs from a fresh start of proxy, conference, presence and regevent in case you can see anything useful I am missing. I also have the core dump that I can share if you want.

And here's my flexisip.conf

## Some global settings of the flexisip proxy.
##
[global]

# Servers started by default when no --server option is specified
# on command line. Possible values are 'proxy', 'presence', 'conference',
# 'regevent' separated by whitespaces.
# Default: proxy
default-servers=proxy conference presence regevent

# Automatically respawn flexisip in case of abnormal termination
# (crashes). This has an effect if Flexisip has been launched with
# '--daemon' option only
# Default: true
auto-respawn=false

# Path to the directory where plugins can be found.
# Default: /opt/belledonne-communications/lib/flexisip/plugins
#plugins-dir=/opt/belledonne-communications/lib/flexisip/plugins

# Plugins to load. Look at <prefix>/lib/flexisip/plugins to know
# the list of installed plugin. The name of a plugin can be derivated
# from the according library name by striping out the extension
# part and the leading 'lib' prefix.
# E.g. putting 'jweauth' in this setting will make libjweauth.so
# library to be load on runtime.
# Default: 
#plugins=

# Generate a core file on crash.
# On GNU/Linux, the action to do on core dump is defined by the
# kernel file '/proc/sys/kernel/core_pattern'. On recent distributions
# like RHEL 8, the generated cores is given by default to the core
# manager of SystemD and the core can be easily listed by using
# coredumpctl(1) command.
# On older distributions, the cores are often written in '/' directory.
# If your root directory has little available space, it is recommended
# to relocate your core dumps in another place by modifying the
# 'core_pattern' file on system boot. This may be done by adding
# this line in '/etc/rc.local':
#     echo '/home/cores/core.%e.%t.%p' > /proc/sys/kernel/core_pattern
# 
# See core(5) manual for more information about core handling on
# GNU/Linux.
# Default: false
dump-corefiles=true

# Enable SNMP.
# Default: false
#enable-snmp=false

# Directory where to create log files. Create logs are named as
# 'flexisip-<server_type>.log'. If If several server types have
# been specified by '--server' option or 'global/default-servers'
# parameter, then <server_type> is expanded by a concatenation of
# all the server types joined with '+' character.
# WARNING: Flexisip has no embedded log rotation system but provides
# a configuration file for logrotate. Please ensure that logrotate
# is installed and running on your system if you want to have Flexisip's
# logs rotated. Log rotation can be customized by editing /etc/logrotate.d/flexisip-logrotate.
# Default: /var/opt/belledonne-communications/log/flexisip
#log-directory=/var/opt/belledonne-communications/log/flexisip
log-directory=/var/log/flexisip

# Name of the log file. Any occurences of '{server}' will be replaced
# by the server type which has been given by '--server' option or
# 'default-servers' parameter. If several server types have been
# given, then '{server}' will be replaced by the concatenation of
# these separated by '+' character (e.g. 'proxy+presence')
# Default: flexisip-{server}.log
log-filename=flexisip-{server}.log

# Log file verbosity. Possible values are debug, message, warning
# and error
# Default: error
#log-level=error

log-level=debug

# Syslog verbosity. Possible values are debug, message, warning
# and error
# Default: error
#syslog-level=error

# Log (on a different log domain) user errors like authentication,
# registration, routing, etc...
# Default: false
#user-errors-logs=false

# A boolean expression applied to current SIP message being processed.
# When matched, logs are output provided that there level is greater
# than the value defined in contextual-log-level. The definition
# of the SIP boolean expression is the same as for entry filters
# of modules, which is documented here: https://wiki.linphone.org/xwiki/wiki/public/view/Flexisip/Configuration/Filter%20syntax/
# Default: 
#contextual-log-filter=

# Verbosity of contextual logs to output when the condition defined
# in 'contextual-log-filter' is met.
# Default: debug
#contextual-log-level=debug

# Filter expression applied to all messages, if true message body
# is shown, if false not. Can not be empty, use 'true' or 'false'
# constants instead. The definition of the SIP boolean expression
# is documented here: https://wiki.linphone.org/xwiki/wiki/public/view/Flexisip/Configuration/Filter%20syntax/
# Example : content-type == 'application/sdp' && request.method
# == 'MESSAGE'
# Default: content-type == 'application/sdp'
#show-body-for=content-type == 'application/sdp'

# List of white space separated SIP URIs where the proxy must listen.
# Wildcard (*) can be used to mean 'all local ip addresses'. If
# 'transport' parameter is unspecified, it will listen to both udp
# and tcp. A local address to bind onto can be indicated in the
# 'maddr' parameter, while the domain part of the uris are used
# as public domain or ip address.
# The 'sips' transport definitions accept two optional parameters:
#  - 'tls-certificates-dir' taking for value a path, with the same
#    meaning as the 'tls-certificates-dir' property of this section
#    and overriding it for this given transport.
#  - 'tls-certificates-file' taking for value a file path, with
#    the same meaning as the 'tls-certificates-file' property of this
#    section and overriding it for this given transport.
#  - 'tls-certificates-private-key' taking for value a file path,
#    with the same meaning as the 'tls-certificates-private-key' property
#    of this section and overriding it for this given transport.
#  - 'tls-certificates-ca-file' taking for value a file path, with
#    the same meaning as the 'tls-certificates-ca-file' property of
#    this section and overriding it for this given transport.
#  - 'tls-verify-incoming' taking for value '0' or '1', to indicate
#    whether clients connecting are required to present a valid client
#    certificate. Default value is 0.
#  - 'tls-allow-missing-client-certificate' taking for value '0'
#    or '1', to allow connections from clients which have no certificate
#    even if `tls-verify-incoming` has been enabled. That's useful
#    if you wish to have Flexisip to ask for a client certificate,
#    but without failing if the client cannot provide one.
#  - 'tls-verify-outgoing' taking for value '0' or '1', whether
#    flexisip should check the peer certificate when it make an outgoing
#    TLS connection to another server. Default value is 1.
#  - 'require-peer-certificate' (deprecated) same as tls-verify-incoming
# 
# It is HIGHLY RECOMMENDED to specify a canonical name for 'sips'
# transport, so that the proxy can advertise this information in
# Record-Route headers, which allows TLS cname check to be performed
# by clients.
# Specifying a sip uri with transport=tls is not allowed: the 'sips'
# scheme must be used instead. As requested by SIP RFC, IPv6 address
# must be enclosed within brakets.
# Here are some examples to understand:
#  - listen on all local interfaces for udp and tcp, on standard
#    port:
#   transports=sip:*
#  - listen on all local interfaces for udp,tcp and tls, on standard
#    ports:
#   transports=sip:* sips:*
#  - listen only a specific IPv6 interface, on standard ports, with
#    udp, tcp and tls
#   transports=sip:[2a01:e34:edc3:4d0:7dac:4a4f:22b6:2083] sips:[2a01:e34:edc3:4d0:7dac:4a4f:22b6:2083]
#  - listen on tls localhost with 2 different ports and SSL certificates:
#   transports=sips:localhost:5061;tls-certificates-dir=path_a sips:localhost:5062;tls-certificates-dir=path_b
#  - listen on tls localhost with 2 peer certificate requirements:
#   transports=sips:localhost:5061;tls-verify-incoming=0 sips:localhost:5062;tls-verify-incoming=1
#  - listen on 192.168.0.29:6060 with tls, but public hostname is
#    'sip.linphone.org' used in SIP messages. Bind address won't appear
#    in messages:
#   transports=sips:sip.linphone.org:6060;maddr=192.168.0.29
# Default: sip:*
#transports=sip:*

transports= sips:aa.bb.cc.dd:5061 sip:127.0.0.1:5070 

# List of white space separated host names pointing to this machine.
# This is to prevent loops while routing SIP messages.
# Default: localhost
aliases=localhost my.domain.com

# Time interval in seconds after which inactive connections are
# closed.
# Default: 3600
#idle-timeout=3600

# Time interval in seconds for sending "\r\n\r\n" keepalives packets
# on inbound and outbound connections. A value of zero stands for
# no keepalive. The main purpose of sending keepalives is to keep
# connection alive accross NATs, but it also helps in detecting
# silently broken connections which can reduce the number socket
# descriptors used by flexisip.
# Default: 1800
#keepalive-interval=1800

# Time interval in seconds for sending "\r\n\r\n" keepalives packets
# specifically for proxy to proxy connections. Indeed, while it
# is undesirable to send frequent keepalives to mobile clients because
# it drains their battery, sending frequent keepalives has proven
# to be helpful to keep connections up between proxy nodes in a
# very popular US virtualized datacenter. A value of zero stands
# for no keepalive.
# Default: 0
#proxy-to-proxy-keepalive-interval=0

# SIP transaction timeout in milliseconds. It is T1*64 (32000 ms)
# by default.
# Default: 32000
#transaction-timeout=32000

# The UDP MTU. Flexisip will fallback to TCP when sending a message
# whose size exceeds the UDP MTU. Please read http://sofia-sip.sourceforge.net/refdocs/nta/nta__tag_8h.html#a6f51c1ff713ed4b285e95235c4cc999a
# for more details. If sending large packets over UDP is not a problem,
# then set a big value such as 65535. Unlike the recommandation
# of the RFC, the default value of UDP MTU is 1460 in Flexisip (instead
# of 1300).
# Default: 1460
#udp-mtu=1460

# You can specify the bind address for all RTP streams (MediaRelay
# and Transcoder). This parameter is only useful for some specific
# networks, keeping the default value is recommended.
# Default: 0.0.0.0 ::0
#rtp-bind-address=0.0.0.0 ::0

# Path to the file containing the server certificate chain. The
# file must be in PEM format, see OpenSSLSSL_CTX_use_certificate_chain_file
# documentation. If used tls-certificates-private-key MUST be set.
# Default: 
tls-certificates-file=/etc/flexisip/tls/cert.pem

# Path to the file containing the private key. See OpenSSL SSL_CTX_use_PrivateKey_file
# documentation. If used tls-certificates-file MUST be set.
# Default: 
tls-certificates-private-key=/etc/flexisip/tls/privkey.pem

# Path to the file contain CA certificates. See OpenSSL SSL_CTX_load_verify_locations
# and SSL_CTX_set_client_CA_list documentation. Can be empty.
# Default: 
tls-certificates-ca-file=/etc/flexisip/tls/cafile.pem

# Ciphers string to pass to OpenSSL in order to limit the cipher
# suites to use while establishing TLS sessions. Please take a look
# to ciphers(1) UNIX manual to get the list of keywords supported
# by your current version of OpenSSL. You might visit https://www.openssl.org/docs/manmaster/man1/ciphers.html
# too. The default value set by Flexisip should provide a high level
# of security while keeping an acceptable level of interoperability
# with currenttly deployed clients on the market.
# Default: HIGH:!SSLv2:!SSLv3:!TLSv1:!EXP:!ADH:!RC4:!3DES:!aNULL:!eNULL
tls-ciphers=HIGH:!SSLv2:!SSLv3:!TLSv1:!EXP:!ADH:!RC4:!3DES:!aNULL:!eNULL

# Ask for client certificate on TLS session establishing.
# Default: false
#require-peer-certificate=false

# Unique ID used to identify that instance of Flexisip. It must
# be a randomly generated 16-sized hexadecimal number. If empty,
# it will be randomly generated on each start of Flexisip.
# Default: 
#unique-id=

# Number of SIP message that sofia can queue in a tport (a connection).
# It is 64 by default, hardcoded in sofia-sip (sofia-sip also used
# to hardcode a max value, 1000). This is not sufficient for IM.
# Default: 1000
#tport-message-queue-size=1000

##
## This section contains some parameters useful when the current
## proxy is part of a network of proxies (cluster) which serve the
## same domain.
##
[cluster]

# Enable cluster mode. If 'false', the parameters of [cluster] section
# won't have any effect.
# Default: false
enabled=true

# Domain name that enables external SIP agents to access to the
# cluster. Such domain is often associated to DNS SRV records for
# each proxy of the cluster, so that DNS resolution returns the
# address of a specific proxy randomly.
# Flexisip uses that domain when it needs to insert a 'Path' or
# 'Record-route' header addressing the cluster instead of itself.
# Default: 
#cluster-domain=

# List of IP addresses of all the proxies present in the cluster.
# SIP messages coming from these addresses won't be challenged by
# the authentication module and won't have any rate limit applied
# by the DoS protection module.
# Default: 
nodes=127.0.0.1

# Transport to use for communication with the other proxies of the
# cluster. This is useful only when no transport declared in 'global/transport'
# parameter can be used to reach the other proxies e.g. when inter-proxy
# communications are to be made through a private network.
# Ex: sip:10.0.0.8:5059;transport=tcp
# Default: 
internal-transport=sip:127.0.0.1:5059;transport=tcp

##
## Should the server be registered on a local domain, to be accessible
## via multicast DNS.
##
[mdns-register]

# Set to 'true' to enable multicast DNS register
# Default: false
#enabled=false

# Priority of this instance, lower value means more preferred.
# 'n': priority of n (example 10)
# 'n-m': random priority between n and m (example 10-50)
# Default: 0
#mdns-priority=0

# A relative weight for Flexisips with the same priority, higher
# value means more preferred.
# For example, if two Flexisips are registered on the same local
# domain with one at 20 and the other at 80, then 20% of Flexisip
# traffic will be redirected to the first Flexisip and 80% to the
# other one.
# The sum of all the weights of Flexisips on the same local domain
# must be 100.
# Default: 100
#mdns-weight=100

# Time To Live of any mDNS query that will ask for this Flexisip
# instance
# Default: 3600
#mdns-ttl=3600

##
## Event logs contain per domain and user information about processed
## registrations, calls and messages.
## See: https://wiki.linphone.org/xwiki/wiki/public/view/Flexisip/Event%20logs%20and%20queries/
## for architecture and queries.
##
[event-logs]

# Enable event logs.
# Default: false
enabled=true

# Define logger for storing logs. It supports "filesystem", "database"
# and "flexiapi".
# Default: filesystem
logger=database

# Directory where event logs are written as a filesystem (case when
# filesystem output is choosed).
# Default: /var/log/flexisip
filesystem-directory=/var/log/flexisip

# Choose the type of backend that Soci will use for the connection.
# Depending on your Soci package and the modules you installed,
# the supported databases are:`mysql`, `sqlite3` and `postgresql`
# Default: mysql
database-backend=mysql

# The configuration parameters of the backend.
# The basic format is "key=value key2=value2". For a mysql backend,
# this is a valid config: "db=mydb user=user password='pass' host=myhost.com".
# Please refer to the Soci documentation of your backend, for instance:
# http://soci.sourceforge.net/doc/master/backends/#supported-backends-and-features
# Default: db='mydb' user='myuser' password='mypass' host='myhost.com'
#database-connection-string=db='mydb' user='myuser' password='mypass' host='myhost.com'

database-connection-string=db=flexisip_conference user=flexisip password='mypassword' host=127.0.0.1 port=3306

# Amount of queries that will be allowed to be queued before bailing
# password requests.
# This value should be chosen accordingly with 'database-nb-threads-max',
# so that you have a coherent behavior.
# This limit is here mainly as a safeguard against out-of-control
# growth of the queue in the event of a flood or big delays in the
# database backend.
# Default: 100
database-max-queue-size=100

# Maximum number of threads for writing in database.
# If you get a `database is locked` error with sqlite3, you must
# set this variable to 1.
# Default: 10
#database-nb-threads-max=10

# Domain name or IP address of the FlexiAPI host. This setting will
# be used in combination with flexiapi-port and -prefix to contact
# the API located at <flexiapi-host>:<flexiapi-port><flexiapi-prefix>
# Default: localhost
flexiapi-host=localhost

# Port on the FlexiAPI host. See `flexiapi-host` for details.
# Default: 443
flexiapi-port=444

# Path prefix for FlexiAPI requests. See `flexiapi-host` for details.
# Default: /api/stats/
#flexiapi-prefix=/api/stats/
flexiapi-prefix=/panel/stats/

# Authentication token for the FlexiAPI
# Default: 
flexiapi-token=mytoken

##
## STUN server parameters.
##
[stun-server]

# Enable or disable stun server.
# Default: true
enabled=true

# Local ip address where to bind the socket.
# Default: 0.0.0.0
bind-address=0.0.0.0

# STUN server port number.
# Default: 3478
port=3478

##
## Flexisip presence server parameters.
##
[presence-server]

# Enable presence server
# Default: true
enabled=true

# List of white space separated SIP URIs where the presence server
# must listen. Must not be tls.
# Default: sip:127.0.0.1:5065;transport=tcp
transports=sip:127.0.0.1:5065;transport=tcp

# Default expires of PUBLISH request in second.
# Default: 600
#expires=600

# Max number of presentity sent in a single NOTIFY by default.
# Default: 200
#notify-limit=200

# Enable long-term presence notifies
# Default: false
long-term-enabled=true

# Soci connection string for the resource list database.
# Default: 
#rls-database-connection=
rls-database-connection=db=flexisip_conference user=flexisip password='mypassword' host=127.0.0.1 port=3306

# SQL request to obtain the list of the users corresponding to an
# resource list subscription.
# Named parameters are:
#  * ':from' : the URI of the sender of the SUBSCRIBE. (mandatory)
#  * ':to' : the URI of the users list which the sender want to
#    subscribe to. (mandatory)
#    
# Default: 
#rls-database-request=

# Max number of threads.
# Default: 50
#rls-database-max-thread=50

# Max legnth of threads queue.
# Default: 50
rls-database-max-thread-queue-size=50

# Soci SQL request used to obtain the username associated with a
# phone alias.
# The string MUST contains the ':phone' keyword which will be replaced
# by the phone number to look for.
# The result of the request is a 1x1 table containing the name of
# the user associated with the phone number.
# 
# Example: select login from accounts where phone = :phone 
# Default: 
#soci-user-with-phone-request=
soci-user-with-phone-request=SELECT username FROM accounts, aliases WHERE account_id=(SELECT id from accounts WHERE username= :id AND domain= :domain) AND aliases.alias = :phone

# Same as 'soci-user-with-phone-request' but allows to fetch several
# users by a unique SQL request.
# The string MUST contains the ':phones' keyword which will be replaced
# by the list of phone numbers to look for. Each element of the
# list is seperated by a comma character and is protected by simple
# quotes (e.g. '0336xxxxxxxx','0337yyyyyyyy','034zzzzzzzzz').
# If you use phone number linked accounts you'll need to select
# login, domain, phone in your request for flexisip to work.
# Example: select login, domain, phone from accounts where phone
# in (:phones)
# Default: 
#soci-users-with-phones-request=

#soci-users-with-phones-request=SELECT password, algorithm FROM passwords WHERE account_id=(SELECT id from accounts WHERE username= :id AND domain= :domain)

# Duration in milliseconds during which the last activity is kept
# in memory. Default is 1 day.
# Default: 86400000
#last-activity-retention-time=86400000

##
## Flexisip conference server parameters.
## The Flexisip conference server is in charge of groupchat and audio/video
## conferences.It follows the concepts of RFC4579 for conference
## establishment and management, and as such factory and focus URIs
## must be configured.
## It requires a MariaDB/MySQL database in order to persistently
## store chatroom or conference state (participants and their devices).
## For chat, it requires the Registrar backend (see section module::Registrar)
## to discover devices (or client instances) of each participant,
## which creates an explicit dependency on Flexisip proxy server.
## This dependency is not required for audio/video conferences.
##
[conference-server]

# Enable conference server
# Default: true
enabled=true

# URI where the conference server must listen. Only one URI can
# be specified.
# Default: sip:127.0.0.1:6064;transport=tcp
transport=sip:127.0.0.1:6064;transport=tcp

# List of SIP URIs used by clients to create a conference. This
# implicitely defines the list of SIP domains managed by the conference
# server. For example:
# conference-factory-uris=sip:conference-factory@sip.linphone.org
# sip:conference-factory@sip.linhome.org
# Default: 
conference-factory-uris=sip:conference-factory@my.domain.com sip:videoconference-factory@my.domain.com

# List of respective template SIP focus URIs to use for conferences
# created by the factory URIs given in 'conference-factory-uris'.
# The focus URIs are unique SIP URIs targeting a specific conference.
# A 'conf-id' URI parameter providing uniqueness is automatically
# appended at runtime. For example, setting:
# conference-focus-uris=sip:conference-focus@sip.linphone.org
# causes the conference server to generate conference URIs in the
# form of 'sip:conference-focus@sip.linphone.org;conf-id=<something
# random>' when requested to create a conference. 
# Default: 
conference-focus-uris=sip:conference-focus@my.domain.com sip:videoconference-focus@my.domain.com

# The SIP proxy URI to which the conference server should sent all
# its outgoing SIP requests.
# Default: sip:127.0.0.1:5060;transport=tcp
#outbound-proxy=sip:127.0.0.1:5060;transport=tcp
#outbound-proxy=sips:aa.bb.cc.dd:5061
outbound-proxy=sip:127.0.0.1:5070;transport=tcp

# Domains managed by the local SIP service, ie domains for which
# user registration information can be found directly from the local
# registrar database (redis database). For external domains (not
# in this list), a 'reg' SUBSCRIBE (RFC3680) will be emitted.It
# is not necessary to list here domains that appear in the 'conference-factory-uris'
# property. They are assumed to be local domains already.
# Ex: local-domains=sip.linphone.org conf.linphone.org linhome.org
# Default: 
local-domains=my.domain.com

# Choose the type of database backend that the conference server
# will use persistency of chatrooms and conferences data.
# Provided that the requested Soci modules are installed, the supported
# database backends are: `mysql`, `sqlite3`
# Default: mysql
database-backend=mysql

# The configuration parameters of the database backend used for
# persistency of chatrooms and conference data.
# The basic format is "key=value key2=value2". For a MySQL backend,
# this is a valid config: "db=mydb user=user password='pass' host=myhost.com".
# Please refer to the Soci documentation of your backend, for instance:
# http://soci.sourceforge.net/doc/3.2/backends/mysql.htmlhttp://soci.sourceforge.net/doc/3.2/backends/sqlite3.html
# Default: db='mydb' user='myuser' password='mypass' host='myhost.com'
#database-connection-string=db='mydb' user='myuser' password='mypass' host='myhost.com'

database-connection-string=db=flexisip_conference user=flexisip password='mypassword' host=127.0.0.1 port=3306

# Whether the conference server shall check device capabilities
# before inviting them to a session.
# The capability check is currently limited to Linphone client that
# put a +org.linphone.specs contact parameter in order to indicate
# whether they support group chat and secured group chat.
# Default: true
check-capabilities=false

# List of media supported by the conference server. This typically
# allows to specify whether this conference server instance is able
# to provide chat service or audio/video conference service, or
# both.Valid values are: audio, video and text. For example:
# supported-media-types=audio video text
# Default: text
supported-media-types=audio video text

# The media encryption the conference server will offer when calling
# participants to an audio or video conference .
# Valid values are: none, sdes, zrtp and dtls.
# Default: none
encryption=zrtp

# Public host name or IP addresses of the conference server machine.
# Configuring this property is required when the conference server
# is deployed behind a firewall, so that the public IP address (v4,
# v6) can be advertised in SDP, as ICE server-reflexive candidates
# in order for the conference server to receive RTP media packets
# from clients. If no hostname is given, the v4 and v6 IP address
# can be listed separated by whitespaces, in any order. It is not
# possible  to configure several v4 addresses or several v6 addresses.For
# example:
# nat-addresses=conference.linphone.org
# nat-addresses=5.135.31.160   2001:41d0:303:3aee::1
# Default: 
#nat-addresses=

# Whether the conference server will delete chat rooms that have
# no participants registered.
# 
# Default: true
empty-chat-room-deletion=true

##
## Flexisip RegEvent server parameters.The regevent server is in
## charge of responding to SIP SUBSCRIBEs for the 'reg' event as
## defined by RFC3680 - A Session Initiation Protocol (SIP) Event
## Package for Registrations - https://tools.ietf.org/html/rfc3680
## .To generate the outgoing NOTIFY, it will rely upon the registrar
## database, as setup in module::Registrar section.
##
[regevent-server]

# SIP uri on which the RegEvent server is listening on.
# Default: sip:127.0.0.1:6065;transport=tcp
transport=sip:127.0.0.1:6065;transport=tcp

##
## Flexisip back-to-back user agent server parameters.
##
[b2bua-server]

# The type of application that will handle calls bridged through
# the B2BUA. Possible values:
# - `trenscrypter` Bridge different encryption types on both ends
# transparently.
# - `sip-bridge` Bridge calls through an external SIP provider.
# (e.g. for PSTN gateways)
# Default: trenscrypter
application=trenscrypter

# SIP uri on which the back-to-back user agent server is listening
# on.
# Default: sip:127.0.0.1:6067;transport=tcp
transport=sip:127.0.0.1:6067;transport=tcp

# Value of User-Agent header. Use the following syntax: <name>[/<version>]
# where <version> can bet set to '{version}' that is a placeholder
# for the Flexisip version.
# Default: Flexisip-B2BUA/{version}
#user-agent=Flexisip-B2BUA/{version}

# Directory where to store b2bua core local files
# Default
# Default: /var/opt/belledonne-communications/flexisip/b2b
data-directory=/var/opt/belledonne-communications/flexisip/b2b

# The Flexisip proxy URI to which the B2bua server should send all
# its outgoing SIP requests.
# Default: sip:127.0.0.1:5060;transport=tcp
outbound-proxy=sip:127.0.0.1:5061;transport=tls

# Duration after which the B2BUA will terminate a call if no RTP
# packet is received from the other call participant. Unit: seconds.
# Default: 30
no-rtp-timeout=30

# Any call bridged through the B2BUA that has been running for longer
# than this amount of seconds will be terminated. 0 to disable and
# let calls run unbounded.
# Default: 0
#max-call-duration=0

# When not null, force outgoing video call to use the specified
# codec.
# Warning: all outgoing calls will list only this codec, which means
# incoming calls must use it too.
# Default: 
#video-codec=

##
## Encryption transcoder bridge parameters.
##
[b2bua-server::trenscrypter]

# Select the call outgoing encryption mode, this is a list of regular
# expressions and encryption mode.
# Valid encryption modes are: zrtp, dtls-srtp, sdes, none.
# 
# The list is formatted in the following mode:
# mode1 regex1 mode2 regex2 ... moden regexn
# regex use posix syntax, any invalid one is skipped
# Each regex is applied, in the given order, on the callee sip uri(including
# parameters if any). First match found determines the encryption
# mode. if no regex matches, the incoming call encryption mode is
# used.
# 
# Example: zrtp .*@sip\.secure-example\.org dtsl-srtp .*dtls@sip\.example\.org
# zrtp .*zrtp@sip\.example\.org sdes .*@sip\.example\.org
# In this example: the address is matched in order with
# .*@sip\.secure-example\.org so any call directed to an address
# on domain sip.secure-example-org uses zrtp encryption mode
# .*dtls@sip\.example\.org any call on sip.example.org to a username
# ending with dtls uses dtls-srtp encryption mode
# .*zrtp@sip\.example\.org any call on sip.example.org to a username
# ending with zrtp uses zrtp encryption mode
# The previous example will fail to match if the call is directed
# to a specific device(having a GRUU as callee address)
# To ignore sip URI parameters, use (;.*)? at the end of the regex.
# Example: .*@sip\.secure-example\.org(;.*)?
# Default:Selected encryption mode(if any) is enforced and the call
# will fail if the callee does not support this mode
# Default: 
outgoing-enc-regex=zrtp .*@sip\.my.domain\.com

# Outgoing SRTP crypto suite in SDES encryption mode:
# Select the call outgoing SRTP crypto suite when outgoing encryption
# mode is SDES, this is a list of regular expressions and crypto
# suites list.
# Valid srtp crypto suites are :
# AES_CM_128_HMAC_SHA1_80, AES_CM_128_HMAC_SHA1_32
# AES_192_CM_HMAC_SHA1_80, AES_192_CM_HMAC_SHA1_32 // currently
# not supported
# AES_256_CM_HMAC_SHA1_80, AES_256_CM_HMAC_SHA1_80
# AEAD_AES_128_GCM, AEAD_AES_256_GCM
# 
# The list is formatted in the following mode:
# cryptoSuiteList1 regex1 cryptoSuiteList2 regex2 ... crytoSuiteListn
# regexn
# with cryptoSuiteList being a ; separated list of crypto suites.
# 
# Regex use posix syntax, any invalid one is skipped
# Each regex is applied, in the given order, on the callee sip uri(including
# parameters if any). First match found determines the crypto suite
# list used.
# 
# if no regex matches, core setting is applied
# or default to AES_CM_128_HMAC_SHA1_80;AES_CM_128_HMAC_SHA1_32;AES_256_CM_HMAC_SHA1_80;AES_256_CM_HMAC_SHA1_32
# when no core setting is available
# 
# Example:
# AES_256_CM_HMAC_SHA1_80;AES_256_CM_HMAC_SHA1_32 .*@sip\.secure-example\.org
# AES_CM_128_HMAC_SHA1_80 .*@sip\.example\.org
# 
# In this example: the address is matched in order with
# .*@sip\.secure-example\.org so any call directed to an address
# on domain sip.secure-example-org uses AES_256_CM_HMAC_SHA1_80;AES_256_CM_HMAC_SHA1_32
# suites (in that order)
# .*@sip\.example\.org any call directed to an address on domain
# sip.example.org use AES_CM_128_HMAC_SHA1_80 suite
# The previous example will fail to match if the call is directed
# to a specific device(having a GRUU as callee address)
# To ignore sip URI parameters, use (;.*)? at the end of the regex.
# Example: .*@sip\.secure-example\.org(;.*)?
# Default:
# Default: 
#outgoing-srtp-regex=

##
## External SIP Provider Bridge parameters.
##
[b2bua-server::sip-bridge]

# Path to a file containing the accounts to use for external SIP
# bridging, organised by provider, in JSON format.
# Here is a template of what should be in this file:
# [{"name": "<user-friendly provider name for CLI output>",
#   "pattern": "<regexp to match callee address>",
#   "outboundProxy": "<sip:some.provider.example.com;transport=tls>",
#   "registrationRequired": true,
#   "maxCallsPerLine": 42,
#   "accounts": [{
#     "uri": "sip:account1@some.provider.example.com",
#     "userid": "<optional (e.g. an API key)>",
#     "password": "<password or API token>"
#   }]
# }]
# Default: example-path.json
#providers=example-path.json

##
## This module bans user when they are sending too much packets within
## a given timeframe. To see the list of currently banned IPs/ports,
## use iptables -L. 
##
[module::DoSProtection]

# Indicate whether the module is activated.
# Default: true
enabled=true

# A request/response enters module if the boolean filter evaluates
# to true. Ex: from.uri.domain contains 'sip.linphone.org', from.uri.domain
# in 'a.org b.org c.org', (to.uri.domain in 'a.org b.org c.org')
# && (user-agent == 'Linphone v2'). You can consult the full filter
# documentation here : https://wiki.linphone.org/xwiki/wiki/public/view/Flexisip/Configuration/Filter%20syntax/
# Default: 
filter=user-agent == 'PortSIP VoIP SDK'

# Number of milliseconds to consider to compute the packet rate
# Default: 3000
time-period=3000

# Maximum packet rate in packets/seconds,  averaged over [time-period]
# millisecond(s) to consider it as a DoS attack.
# Default: 20
packet-rate-limit=20

# Number of minutes to ban the ip/port using iptables
# Default: 2
ban-time=5

# Name of the chain flexisip will create to store the banned IPs
# Default: FLEXISIP
iptables-chain=FLEXISIP

# List of IP addresses or hostnames for which no DoS protection
# is made. This is typically for trusted servers from which we can
# receive high traffic. Please note that nodes from the local flexisip
# cluster (see [cluster] section) are automatically added to the
# white list, as well as 127.0.0.1 and ::1.
# Example:
# white-list=sip.example.org sip.linphone.org 15.128.128.93
# Default: 
#white-list=

##
## The SanitChecker module checks that required fields of a SIP message
## are present to avoid unecessary checking while processing message
## further.
## If the message doesn't meet these sanity check criterias, then
## it is stopped and bad request response is sent.
##
[module::SanityChecker]

# Indicate whether the module is activated.
# Default: true
enabled=true

# A request/response enters module if the boolean filter evaluates
# to true. Ex: from.uri.domain contains 'sip.linphone.org', from.uri.domain
# in 'a.org b.org c.org', (to.uri.domain in 'a.org b.org c.org')
# && (user-agent == 'Linphone v2'). You can consult the full filter
# documentation here : https://wiki.linphone.org/xwiki/wiki/public/view/Flexisip/Configuration/Filter%20syntax/
# Default: 
#filter=

##
## The GarbageIn module collects incoming garbage and prevent any
## further processing.
##
[module::GarbageIn]

# Indicate whether the module is activated.
# Default: false
enabled=true

# A request/response enters module if the boolean filter evaluates
# to true. Ex: from.uri.domain contains 'sip.linphone.org', from.uri.domain
# in 'a.org b.org c.org', (to.uri.domain in 'a.org b.org c.org')
# && (user-agent == 'Linphone v2'). You can consult the full filter
# documentation here : https://wiki.linphone.org/xwiki/wiki/public/view/Flexisip/Configuration/Filter%20syntax/
# Default: false
#filter=false

##
## Enable this module in order the proxy replies to OPTION requests
## by “200 Ok”. Today, no supported header is added in the response,
## so this mechanism cannot be used for capabilities introspection.
## If the module is disabled, the request will be silently discarded.
##
[module::Capabilities]

# Indicate whether the module is activated.
# Default: true
enabled=false

# A request/response enters module if the boolean filter evaluates
# to true. Ex: from.uri.domain contains 'sip.linphone.org', from.uri.domain
# in 'a.org b.org c.org', (to.uri.domain in 'a.org b.org c.org')
# && (user-agent == 'Linphone v2'). You can consult the full filter
# documentation here : https://wiki.linphone.org/xwiki/wiki/public/view/Flexisip/Configuration/Filter%20syntax/
# Default: 
#filter=

##
## The NatHelper module executes small tasks to make SIP work smoothly
## despite firewalls. It corrects the Contact headers that contain
## obviously inconsistent addresses, and adds a Record-Route to ensure
## subsequent requests are routed also by the proxy, through the
## same UDP or TCP channel used for the initial request.
##
[module::NatHelper]

# Indicate whether the module is activated.
# Default: true
enabled=true

# A request/response enters module if the boolean filter evaluates
# to true. Ex: from.uri.domain contains 'sip.linphone.org', from.uri.domain
# in 'a.org b.org c.org', (to.uri.domain in 'a.org b.org c.org')
# && (user-agent == 'Linphone v2'). You can consult the full filter
# documentation here : https://wiki.linphone.org/xwiki/wiki/public/view/Flexisip/Configuration/Filter%20syntax/
# Default: 
#filter=

# Internal URI parameter added to response contact by first proxy
# and cleaned by last one.
# Default: verified
contact-verified-param=verified

# Fix record-routes, to workaround proxies behind firewalls but
# not aware of it.
# Default: false
fix-record-routes=false

# Policy to recognize nat'd record-route and fix them. There are
# two modes: 'safe' and 'always'
# Default: safe
fix-record-routes-policy=safe

##
## The authentication module challenges and authenticates SIP requests
## using two possible methods:
##  * if the request is received via a TLS transport and 'require-peer-certificate'
##    is set in transport definition in [Global] section for this transport,
##    then the From header of the request is matched with the CN claimed
##    by the client certificate. The CN must contain sip:user@domain
##    or alternate name with URI=sip:user@domain corresponding to the
##    URI in the from header for the request to be accepted. Optionnaly,
##    the property tls-client-certificate-required-subject may contain
##    a regular expression for additional checks to execute on certificate
##    subjects.
##  * if no TLS client based authentication can be performed, or
##    has failed, then a SIP digest authentication is performed. The
##    password verification is made by querying a database or a password
##    file on disk.
##
[module::Authentication]

# Indicate whether the module is activated.
# Default: false
enabled=true

# A request/response enters module if the boolean filter evaluates
# to true. Ex: from.uri.domain contains 'sip.linphone.org', from.uri.domain
# in 'a.org b.org c.org', (to.uri.domain in 'a.org b.org c.org')
# && (user-agent == 'Linphone v2'). You can consult the full filter
# documentation here : https://wiki.linphone.org/xwiki/wiki/public/view/Flexisip/Configuration/Filter%20syntax/
# Default: 
#filter=

# List of whitespace-separated IP addresses which will be judged
# as trustful. Messages coming from these addresses won't be challenged.
# Default: 
#trusted-hosts=

# List of whitespace separated domains to challenge. Others are
# automatically denied. The wildcard domain '*' is accepted, which
# means that requests are challenged whatever the originating domain
# is. This is convenient for a proxy serving multiple SIP domains.
# 
# Default: localhost
auth-domains=my.domain.com

# List of digest algorithms to use for password hashing. Think this
# setting as filter applied after fetching the credentials of a
# user from the user database. For example, if a user has its password
# hashed by MD5 and SHA-256 but 'available-algorithms' only has
# MD5, then only a MD5-based challenged will be submited to the
# UAC.
# Furthermore, should a user have several hashed passwords and these
# are present in the list, then a challenge header will be put in
# the 401 response for each fetched password in the order given
# by the list.
# Supported algorithems are MD5 and SHA-256.
# Default: MD5
available-algorithms=SHA-256 MD5

# Disable the QOP authentication method. Default is to use it, use
# this flag to disable it if needed.
# Default: false
#disable-qop-auth=false

# Don't reply 403 when authentication fails. Instead, generate a
# new 401 (or 407) response containing a new challenge.
# Default: false
#no-403=false

# Expiration time before generating a new nonce.
# Unit: second
# Default: 3600
nonce-expires=3600

# The realm to use for digest authentication. It will used whatever
# the domain of the From-URI.
# If the value starts with 'regex:', then this parameter will have
# the same effect than 'realm-regex', using all the remaining string
# as regular expression.
# WARNING: this parameter is exclusive with 'realm-regex'
# 
# Examples:
#   realm=sip.example.org
#   realm=regex:sip:.*@sip\.(.*)\.com
# 
# Default: 
realm=my.domain.com

# Extraction regex applied on the URI of the 'from' header (or P-Prefered-Identity
# header if present) in order to extract the realm. The realm is
# found out by getting the first slice of the URI that matches the
# regular expression. If it has one or more capturing parentheses,
# the content of the first one is used as realm.
# If no regex is specified, then the realm will be the domain part
# of the URI.
# 
# For instance, given auth-domains=sip.example.com, you might use
# 'sip:.*@sip\.(.*)\.com' in order to use 'example' as realm.
# 
# WARNING: this parameter is exclusive with 'realm'
# Default: 
#realm-regex=

# If set to true, the module will simply reject with "403 forbidden"
# any request coming from clients which have presented a bad TLS
# certificate (regardless of reason: improper signature, unmatched
# subjects). Otherwise, the module will fallback to a digest authentication.
# This policy applies only for transports configured which have
# 'required-peer-certificate=1' parameter; indeed no certificate
# is requested to the client otherwise. 
# Default: false
#reject-wrong-client-certificates=false

# An optional regular expression used to accept or deny a request
# basing on subject fields of the client certificate. The request
# is allowed if one of the subjects matches the regular expression.
# The list of subjects to check is built by extracting the following
# fields, in order:
#   subjectAltNames.DNS, subjectAltNames.URI, subjectAltNames.IP
# and CN
# Default: 
#tls-client-certificate-required-subject=

# Accept requests which the client certificate enables to trust
# the domaine of its Request-URI.
# Default: false
#trust-domain-certificates=false

# When receiving a proxy authenticate challenge, generate a new
# challenge for this proxy.
# Default: false
#new-auth-on-407=false

# Database backend implementation for digest authentication [soci,file].
# Default: file
db-implementation=soci

# Duration of the validity of the credentials added to the cache
# in seconds.
# Default: 1800
#cache-expire=1800

# Path of the file in which user credentials are stored.
# The file must start with 'version:1' as the first line, and then
# contains lines in the form of:
# user@domain clrtxt:clear-text-password md5:md5-password sha256:sha256-password
# ;
# For example: 
# bellesip@sip.linphone.org clrtxt:secret ;
# bellesip@sip.linphone.org md5:97ffb1c6af18e5687bf26cdf35e45d30
# ;
# bellesip@sip.linphone.org clrtxt:secret md5:97ffb1c6af18e5687bf26cdf35e45d30
# sha256:d7580069de562f5c7fd932cc986472669122da91a0f72f30ef1b20ad6e4f61a3
# ;
# Default: 
#file-path=/etc/flexisip/creds.txt

# Choose the type of backend that Soci will use for the connection.
# Depending on your Soci package and the modules you installed,
# this could be 'mysql', 'oracle', 'postgresql' or something else.
# Default: mysql
soci-backend=mysql

# The configuration parameters of the Soci backend.
# The basic format is "key=value key2=value2". For a mysql backend,
# this is a valid config: "db=mydb user=user password='pass' host=myhost.com".
# Please refer to the Soci documentation of your backend, for intance:
# http://soci.sourceforge.net/doc/release/4.0/backends/mysql/
# Default: db=mydb user=myuser password='mypass' host=myhost.com
#soci-connection-string=db=mydb user=myuser password='mypass' host=myhost.com

soci-connection-string=db=flexisip_accounts user=flexisip password='mypassword' host=127.0.0.1 port=3306

# Soci SQL request used to obtain the password of a given user.
# Each keywords starting with ':' character will be replaced by
# strings extracted from the SIP request to authenticate.
# 
# Only these keywords are supported: - ':id'     : the user found
# in the from header (mandatory)
#  - ':domain' : the authorization realm
#  - ':authid' : the authorization username
# 
# The request MUST returns a two-columns table, which columns are
# defined as follow:
#  - 1st column: hashed password of the user or plain password if
#    the associated algorithm is CLRTXT.
#  - 2nd column: the algorithm used to hash the associated password.
#    Supported values: 'CLRTXT', 'MD5', 'SHA-256'
# 
# Examples:
#  - the password and algorithm are both available in the database
#   select password, algorithm from accounts where login = :id and
# domain = :domain
# 
#  - all the passwords from the database are MD5
#   select password, 'MD5' from accounts where login = :id and domain
# = :domain
# Default: select password, 'MD5' from accounts where login = :id and domain = :domain
#soci-password-request=select password, 'MD5' from accounts where login = :id and domain = :domain

soci-password-request=SELECT password, algorithm FROM passwords WHERE account_id=(SELECT id from accounts WHERE username= :id AND domain= :domain)

# Amount of queries that will be allowed to be queued before bailing
# password requests.
# This value should be chosen accordingly with 'soci-poolsize',
# so that you have a coherent behavior.
# This limit is here mainly as a safeguard against out-of-control
# growth of the queue in the event of a flood or big delays in the
# database backend.
# Default: 1000
#soci-max-queue-size=1000

# Size of the pool of connections that Soci will use. A thread is
# opened for each DB query, and this pool will allow each thread
# to get a connection.
# The threads are blocked until a connection is released back to
# the pool, so increasing the pool size will allow more connections
# to occur simultaneously.
# On the other hand, you should not keep too many open connections
# to your DB at the same time.
# Default: 100
#soci-poolsize=100

##
## This module redirect sip requests with a 302 move temporarily.
##
[module::Redirect]

# Indicate whether the module is activated.
# Default: false
#enabled=false

# A request/response enters module if the boolean filter evaluates
# to true. Ex: from.uri.domain contains 'sip.linphone.org', from.uri.domain
# in 'a.org b.org c.org', (to.uri.domain in 'a.org b.org c.org')
# && (user-agent == 'Linphone v2'). You can consult the full filter
# documentation here : https://wiki.linphone.org/xwiki/wiki/public/view/Flexisip/Configuration/Filter%20syntax/
# Default: 
#filter=

# A contact where to redirect requests. ex: <sip:127.0.0.1:5065>;expires=100
# Default: 
#contact=

##
## This module is in charge of routing 'reg' event SUBSCRIBE requests
## to the flexisip-regevent server.
##
[module::RegEvent]

# Indicate whether the module is activated.
# Default: false
enabled=true

# A request/response enters module if the boolean filter evaluates
# to true. Ex: from.uri.domain contains 'sip.linphone.org', from.uri.domain
# in 'a.org b.org c.org', (to.uri.domain in 'a.org b.org c.org')
# && (user-agent == 'Linphone v2'). You can consult the full filter
# documentation here : https://wiki.linphone.org/xwiki/wiki/public/view/Flexisip/Configuration/Filter%20syntax/
# Default: 
filter=from.uri.domain contains 'my.domain.com'

# A sip uri where to send all the reg-event related requests.
# Default: sip:127.0.0.1:6065;transport=tcp
regevent-server=sip:127.0.0.1:6065;transport=tcp

##
## This module is in charge of intercepting calls and route them
## to the back-to-back user agent server
##
[module::B2bua]

# Indicate whether the module is activated.
# Default: false
#enabled=false

# A request/response enters module if the boolean filter evaluates
# to true. Ex: from.uri.domain contains 'sip.linphone.org', from.uri.domain
# in 'a.org b.org c.org', (to.uri.domain in 'a.org b.org c.org')
# && (user-agent == 'Linphone v2'). You can consult the full filter
# documentation here : https://wiki.linphone.org/xwiki/wiki/public/view/Flexisip/Configuration/Filter%20syntax/
# Default: 
#filter=

# A sip uri where to send all the relevent requests.
# Default: sip:127.0.0.1:6067;transport=tcp
#b2bua-server=sip:127.0.0.1:6067;transport=tcp

##
## This module transfers SIP presence messages, like subscribe/notify/publish
## to a presence server.
##
[module::Presence]

# Indicate whether the module is activated.
# Default: false
enabled=false

# A request/response enters module if the boolean filter evaluates
# to true. Ex: from.uri.domain contains 'sip.linphone.org', from.uri.domain
# in 'a.org b.org c.org', (to.uri.domain in 'a.org b.org c.org')
# && (user-agent == 'Linphone v2'). You can consult the full filter
# documentation here : https://wiki.linphone.org/xwiki/wiki/public/view/Flexisip/Configuration/Filter%20syntax/
# Default: is_request && (request.method-name == 'PUBLISH' || request.method-name == 'NOTIFY' || request.method-name == 'SUBSCRIBE')
#filter=is_request && (request.method-name == 'PUBLISH' || request.method-name == 'NOTIFY' || request.method-name == 'SUBSCRIBE')

# A SIP URI where to send all presence related requests.
# Default: sip:127.0.0.1:5065;transport=tcp
#presence-server=sip:127.0.0.1:5065;transport=tcp

# If true, only manage list subscription.
# Default: false
#only-list-subscription=false

# When getting the list of users with phones, if this setting is
# enabled, it will limit the results to the ones that have the same
# domain.
# Default: false
#check-domain-in-presence-results=false

##
## The ModuleRegistrar module handles REGISTERs for domains it is
## in charge of, and store the address of record in order to allow
## routing requests destinated to the client who registered. REGISTERs
## for other domains are simply ignored and given to the next module.
##
[module::Registrar]

# Indicate whether the module is activated.
# Default: true
enabled=true

# A request/response enters module if the boolean filter evaluates
# to true. Ex: from.uri.domain contains 'sip.linphone.org', from.uri.domain
# in 'a.org b.org c.org', (to.uri.domain in 'a.org b.org c.org')
# && (user-agent == 'Linphone v2'). You can consult the full filter
# documentation here : https://wiki.linphone.org/xwiki/wiki/public/view/Flexisip/Configuration/Filter%20syntax/
# Default: 
#filter=

# List of whitespace separated domain names which the registar is
# in charge of. It can eventually be the '*' (wildcard) in order
# to match any domain name.
# Default: localhost
reg-domains=my.domain.com

# Register users based on response obtained from a back-end server.
# This mode is for using flexisip as a front-end server to hold
# client connections but registeracceptance is deferred to backend
# server to which the REGISTER is routed.
# Default: false
#reg-on-response=false

# Maximum number of registered contacts per address of record.
# Default: 12
#max-contacts-by-aor=12

# List of contact URI parameters that can be used to identify a
# user's device. The contact parameters are searched in the order
# of the list, the first matching parameter is used and the others
# ignored.
# Default: +sip.instance pn-tok line
unique-id-parameters=+sip.instance pn-tok line

# When supported by the client, assign a pub-gruu address to the
# client, returned in the response. 
# Default: true
enable-gruu=true

# Maximum expire time for a REGISTER, in seconds.
# Default: 86400
max-expires=16811200

# Minimum expire time for a REGISTER, in seconds.
# Default: 60
min-expires=60

# Set a value that will override expire times given by the REGISTER
# requests. A null or negative value disables that feature. If it
# is enabled, max-expires and min-expires will not have any effect.
# Default: -1
force-expires=15811200

# File containing the static records to add to database on startup.
# Format: one 'sip_uri contact_header' by line. Example:
# <sip:contact@domain> <sip:127.0.0.1:5460>,<sip:192.168.0.1:5160>
# Default: 
#static-records-file=

# Timeout in seconds after which the static records file is re-read
# and the contacts updated.
# Default: 600
#static-records-timeout=600

# Implementation used for storing the contact URIs of each address
# of record. Two backends are available:
#  - redis : contacts are stored in a Redis database, which allows
#    persistent and shared storage accross multiple Flexisip instances.
#  - internal : contacts are stored in RAM. Of course, if flexisip
#    is restarted, all the contact URIs are lost until clients update
#    their registration.
# The redis backend is recommended, the internal being more adapted
# to very small deployments.
# Default: internal
db-implementation=redis

# Hostname or address of the Redis server. 
# Default: localhost
redis-server-domain=localhost

# Port of the Redis server.
# Default: 6379
redis-server-port=6379

# ACL username used to authenticate on Redis. Empty to disable.
# Setting this but not `redis-auth-password` is a misconfiguration,
# and will be ignored.
# Default: 
#redis-auth-user=

# Authentication password for Redis. Empty to disable. If set but
# `redis-auth-user` is left unset or empty, Flexisip will attempt
# to register in legacy mode.
# Default: 
redis-auth-password=

# Timeout in milliseconds of the Redis connection.
# Default: 1500
redis-server-timeout=1500

# When Redis is configured in master-slave, Flexisip will periodically
# ask which Redis instances are the slaves and the master. This
# is the period with which it will query the server. It will then
# determine whether is is connected to the master, and if not, let
# go of the connection and migrate to the master.
# Note: This requires that all Redis instances have the same password.
# Otherwise the authentication will fail.
# Default: 60
#redis-slave-check-period=60

# Tell if Flexisip should try to connect to Redis slaves if master
# went down. Can be disabled if slaves hostname info are on private
# network for example.
# Default: true
#redis-use-slaves-as-backup=true

# Sequence of proxies (space-separated) where requests will be redirected
# through (RFC3608)
# Default: 
#service-route=

# Name of the custom Contact header parameter which is to indicate
# the expire time for chat message delivery.
# Default: message-expires
#message-expires-param-name=message-expires

# If not zero, the expire time put in the 200 OK response won't
# be the one required by the user agent, but will be slightly modified
# by substracting a random value. The value given by this parameter
# is the maximum percentage of the initial expire that can be substracted.
# If zero, no randomization is applied.
# Default: 0
#register-expire-randomizer-max=0

##
## The purpose of the StatisticsCollector module is to collect call
## statistics (RFC 6035) and store them on the server.
##
[module::StatisticsCollector]

# Indicate whether the module is activated.
# Default: false
enabled=true

# A request/response enters module if the boolean filter evaluates
# to true. Ex: from.uri.domain contains 'sip.linphone.org', from.uri.domain
# in 'a.org b.org c.org', (to.uri.domain in 'a.org b.org c.org')
# && (user-agent == 'Linphone v2'). You can consult the full filter
# documentation here : https://wiki.linphone.org/xwiki/wiki/public/view/Flexisip/Configuration/Filter%20syntax/
# Default: is_request && request.method-name == 'PUBLISH'
filter=is_request && request.method-name == 'PUBLISH'

# SIP URI of the statistics collector. Note that application/vq-rtcpxr
# messages for this address will be deleted by this module and thus
# not be delivered.
# Default: 
collector-address=sips:voip-metrics@my.domain.com

##
## The Router module routes requests for domains it manages.
## The routing algorithm is as follows: 
##  - first skip route headers that directly point to this proxy.
##  - if a route header is found that doesn't point to this proxy,
##    then the request is not processed by the Router module, and will
##    be handled by the Forward module at the end of the processing
##    chain.
##  - examine the request-uri: if it is part of the domains managed
##    by this proxy (according to Registrar module 'reg-domains' definition,
##    then attempt to resolve the request-uri from the Registrar database.
##  - the results from the registrar database, in the form of contact
##    headers, are sorted by priority (q parameter), if any.
##  - for each set of contact with equal priorities, the request
##    is forked, and sent to their corresponding sip URI. After a timeout
##    defined by property 'call-fork-current-branches-timeout', a next
##    set of contact header is determined.
##  - responses are received from all attempted branches, and sent
##    back to the request originator, according to the procedure of
##    RFC3261 16.7 Response processing.
## The router module offers different variations of the routing logic,
## depending on whether it is an INVITE, a MESSAGE, or another type
## of request. The processing of MESSAGE request essentially differs
## from others because it allows to keep the MESSAGE for a later
## delivery, in which case the incoming transaction will be terminated
## with a 202 Accepted response.
##
[module::Router]

# Indicate whether the module is activated.
# Default: true
enabled=true

# A request/response enters module if the boolean filter evaluates
# to true. Ex: from.uri.domain contains 'sip.linphone.org', from.uri.domain
# in 'a.org b.org c.org', (to.uri.domain in 'a.org b.org c.org')
# && (user-agent == 'Linphone v2'). You can consult the full filter
# documentation here : https://wiki.linphone.org/xwiki/wiki/public/view/Flexisip/Configuration/Filter%20syntax/
# Default: 
#filter=

# Store and retrieve contacts without using the domain.
# Default: false
#use-global-domain=false

# Fork invites to late registers.
# Default: false
fork-late=true

# All the forked have to decline in order to decline the caller
# invite.
# Default: false
#fork-no-global-decline=false

# Treat 603 Declined answers as urgent. Only relevant if fork-no-global-decline
# is set to true.
# Default: false
#treat-decline-as-urgent=false

# During a fork procedure, treat all failure response as urgent.
# Default: false
#treat-all-as-urgent=false

# Maximum time for a call fork to try to reach a callee, in seconds.
# Default: 90
call-fork-timeout=30

# Maximum time before delivering urgent responses during a call
# fork, in seconds. The typical fork process requires to wait the
# best response from all branches before transmitting it to the
# client. However some error responses are retryable immediately
# (like 415 unsupported media, 401, 407) thus it is painful for
# the client to need to wait the end of the transaction time (32
# seconds) for these error codes.
# Default: 5
call-fork-urgent-timeout=5

# Maximum time in seconds before trying the next set of lower priority
# contacts.
# Default: 10
call-fork-current-branches-timeout=3

# Fork MESSAGE requests to client registering lately.
# Default: true
message-fork-late=true

# Maximum duration for delivering a MESSAGE request. This property
# applies only if message-fork-late is 'true'; otherwise, the duration
# can't exceed the normal transaction duration.
# Default: 604800
message-delivery-timeout=604800

# Maximum duration (in seconds) for accepting a MESSAGE request
# if no response is received from any recipients. This property
# is meaningful when message-fork-late is set to true.
# Default: 5
message-accept-timeout=5

# If 'true', the message that are waiting for delivery will be stored
# in database instead of memory.
# Default: false
message-database-enabled=true

# Choose the type of backend that Soci will use for the connection.
# Depending on your Soci package and the modules you installed,
# the supported databases are:`mysql` (and `sqlite3` soon)
# Default: mysql
message-database-backend=mysql

# The configuration parameters of the backend. The basic format
# is "key=value key2=value2". For a mysql backend, this is a valid
# config: "db=mydb user=user password='pass' host=myhost.com". Please
# refer to the Soci documentation of your backend, for instance:
# http://soci.sourceforge.net/doc/master/backends/#supported-backends-and-features
# Default: db='mydb' user='myuser' password='mypass' host='myhost.com'
#message-database-connection-string=db='mydb' user='myuser' password='mypass' host='myhost.com'

message-database-connection-string=db=flexisip_conference user=flexisip password='mypassword' host=127.0.0.1 port=3306

# Size of the pool of connections that Soci will use for accessing
# the message database.
# Default: 100
message-database-pool-size=100
# Default route to apply when the recipient is unreachable or when
# when all attempted destination have failed.It is given as a SIP
# URI, for example: sip:example.org;transport=tcp (without surrounding
# brakets)
# Default: 
#fallback-route=

# During a call forking, allow several INVITEs going to the same
# next hop to be grouped into a single one. A proprietary custom
# header 'X-target-uris' is added to the INVITE to indicate the
# final targets of the INVITE.
# Default: false
#allow-target-factorization=false

# Whether the proxy is allowed to generate and send provisional
# responses during a call forking process. A typical example for
# this is the '110 Push sent' emitted by the proxy when at least
# one push notification has been sent to a target UA while routing
# an INVITE. Some old versions of Linphone (below linphone-sdk 4.2)
# suffer from an issue when receiving such kind of provisional responses
# that don't come from a remote client. This setting is mainly intended
# to temporarily workaround this situation.
# Default: true
#permit-self-generated-provisional-response=true

# Whether or not to resolve next hop in route header against registrar
# database. This is an extension to RFC3261, and should not be used
# unless in some specific deployment cases. A next hope in route
# header is otherwise resolved through standard DNS procedure by
# the Forward module.
# Default: false
#resolve-routes=false

# Whether or not to fallback to the parent domain if there is no
# fallback route set and the recipient is unreachable. For example,
# if routing to sip:bob@a.b.com returns no result, route the request
# to b.com. This is also a non-standard behavior.
# Default: false
#parent-domain-fallback=false

# Only use the fallback route if the expression is true.
# Default: true
#fallback-route-filter=true

# Max time, in seconds, the proxy will retain a request in order
# to maintain order.
# Default: 30
#max-request-retention-time=30

##
## This module performs push notifications to mobile phone notification
## systems: apple, android, as well as a generic http get/post to
## a custom server to which actual sending of the notification is
## delegated. The push notification is sent when an INVITE or MESSAGE
## request is not answered by the destination of the request within
## a certain period of time, configurable hereunder by 'timeout'
## parameter. The PushNotification has an implicit dependency on
## the Router module, which is in charge of creating the incoming
## and outgoing transactions and the context associated with the
## request forking process. No push notification can hence be sent
## if the Router module isn't activated. The time-to-live of the
## push notification depends on event for which the push notification
## is generated.  - if it is for a call (INVITE), it will be set
## equal 'call-fork-timeout' property of the Router module, which
## corresponds to the maximum time for a call attempt.
##  - if it is for an IM (MESSAGE or INVITE for a text session),
##    then it will be set equal to the 'message-time-to-live' property.
##
[module::PushNotification]

# Indicate whether the module is activated.
# Default: false
enabled=true

# A request/response enters module if the boolean filter evaluates
# to true. Ex: from.uri.domain contains 'sip.linphone.org', from.uri.domain
# in 'a.org b.org c.org', (to.uri.domain in 'a.org b.org c.org')
# && (user-agent == 'Linphone v2'). You can consult the full filter
# documentation here : https://wiki.linphone.org/xwiki/wiki/public/view/Flexisip/Configuration/Filter%20syntax/
# Default: 
#filter=

# Number of seconds to wait before sending a push notification to
# device. A value lesser or equal to zero will make the push notification
# to be sent immediately, which is recommended since most of the
# time devices can't have a permanent connection with the Flexisip
# server.
# Default: 0
#timeout=0

# Time to live for the push notifications related to IM messages,
# in seconds. The default value '0' is interpreted as using the
# same value as for message-delivery-timeout of Router module.
# Default: 0
#message-time-to-live=0

# Maximum number of notifications queued for each push notification
# service
# Default: 100
#max-queue-size=100

# Number of push notification request retransmissions sent to a
# client for a same event (call or message). Retransmissions cease
# when a response is received from the client. Setting a value of
# zero disables retransmissions.
# Default: 0
#retransmission-count=0

# Retransmission interval in seconds for push notification requests,
# when a retransmission-count has been specified above.
# Default: 5
#retransmission-interval=5

# Default interval between to subsequent PNs when remote push notifications
# are used to notify a call invite to a clients that haven't published
# any token for VoIP and background push notifications. In that
# case, several PNs are sent subsequently until the call is picked
# up, declined or canceled. This parameter can be overridden by
# the client by using the 'pn-call-remote-push-interval' push parameter.
# A value of zero will cause the deactivation of push notification
# repetitions and the sending of thefinal notification. Thus, only
# the first push notification will be sent.
# The value must be in [0;30]
# Default: 0
#call-remote-push-interval=0

# If true, the following key in the payload of the push request
# will be set:
#  * 'from-uri': the SIP URI of the caller or the message sender.
#  * 'display-name': the display name of the caller or the message
#    sender.
#  * 'loc-args': the display name if not empty or the SIP URI instead.
# 
# If false, the keys will be set but as empty.
# Default: false
#display-from-uri=false

# Enable push notification for apple devices
# Default: true
apple=true

# Path to directory where to find Apple Push Notification service
# certificates. They should bear the appid of the application, suffixed
# by the release mode and .pem extension. For example: org.linphone.dev.pem
# org.linphone.prod.pem com.somephone.dev.pem etc... The files should
# be .pem format, and made of certificate followed by private key.
# This is also the path to the directory where to find Voice Over
# IP certificates (certicates to use PushKit). They should bear
# the appid of the application, suffixed by the release mode and
# .pem extension, and made of certificate followed by private key.
# For example: org.linphone.voip.dev.pem org.linphone.voip.prod.pem
# com.somephone.voip.dev.pem etc...
# Default: /etc/flexisip/apn
apple-certificate-dir=/etc/flexisip/apn

# Set the badge value to 0 for Apple push
# Default: false
#no-badge=false

# Enable push notification for Android devices.
# Default: true
firebase=true

# List of pairs of <Firebase Project Number>:<Firebase Cloud Messaging
# API (Legacy) Server Key> for each Android project that supports
# push notifications.
# Default: 
firebase-projects-api-keys=myAPIkeys

# List of pairs of <Firebase Project Number>:<Path to service account
# json file> for each Android project that supports push notifications.
# Default: 
#firebase-service-accounts=

# Represents the time in seconds to execute the access token refresh
# operation just before the current access token expires. This parameter
# is used to control overlapping access token lifetimes.
# Default: 300
#firebase-token-expiration-anticipation-time=300

# Default interval in seconds to execute the access token refresh
# operation in the event that the access token has not been successfully
# obtained.
# Default: 60
#firebase-default-refresh-interval=60

# Instead of having Flexisip sending the push notification directly
# to the Google/Apple/Microsoft push servers, send an http request
# to a server with all required information encoded in the URL,
# to which the actual sending of the push notification is delegated.
# The following arguments can be substituted in the http request
# uri, with the following values:
#  - $type      : apple, google, wp, firebase
#  - $token     : device token
#  - $api-key   : the api key to use (google and firebase only)
#  - $app-id    : application ID
#  - $from-name : the display name in the from header
#  - $from-uri  : the sip uri of the from header
#  - $from-tag  : the tag of the from header 
#  - $to-uri    : the sip uri of the to header
#  - $call-id   : the call-id of the INVITE or MESSAGE request
#  - $event     : call, message
#  - $sound     : the sound file to play with the notification
#  - $msgid     : the message id to put in the notification
#  - $uid       : 
#  
# The content of the text message is put in the body of the http
# request as text/plain, if any.
# Example: http://292.168.0.2/$type/$event?from-uri=$from-uri&tag=$from-tag&callid=$callid&to=$to-uri
# Default: 
#external-push-uri=

# Method for reaching external-push-uri, typically GET or POST
# Default: GET
#external-push-method=GET

# Protocol used for reaching external-push-uri, http2 or http (deprecated)
# Default: http2
#external-push-protocol=http2

# Send service push notification every n minutes to all devices
# that are about to expire and should wake up to REGISTER back.
# 0 to disable. Recommended value: 30
# Default: 0
#register-wakeup-interval=0

# Start sending wake-up push notifications to contacts when they
# pass that percentage of their lifetime.
# Default: 50
#register-wakeup-threshold=50

##
## The MediaRelay module masquerades SDP message so that all RTP
## and RTCP streams go through the proxy. When the client has set
## ICE candidates in the SDP offer, then the MediaRelay module will
## automatically add ICE relay candidates. The RTP and RTCP streams
## are then routed so that each client receives the stream of the
## other. MediaRelay makes sure that RTP is ALWAYS established, even
## with uncooperative firewalls.
##
[module::MediaRelay]

# Indicate whether the module is activated.
# Default: true
enabled=true

# A request/response enters module if the boolean filter evaluates
# to true. Ex: from.uri.domain contains 'sip.linphone.org', from.uri.domain
# in 'a.org b.org c.org', (to.uri.domain in 'a.org b.org c.org')
# && (user-agent == 'Linphone v2'). You can consult the full filter
# documentation here : https://wiki.linphone.org/xwiki/wiki/public/view/Flexisip/Configuration/Filter%20syntax/
# Default: 
#filter=

# The name of the SDP attribute to set by the first proxy to forbid
# subsequent proxies to provide relay. Use 'disable' to disable.
# Default: nortpproxy
#nortpproxy=nortpproxy

# The minimal value of SDP port range
# Default: 1024
#sdp-port-range-min=1024

# The maximal value of SDP port range
# Default: 65535
#sdp-port-range-max=65535

# Sends a ACK and BYE to 200Ok for INVITEs not belonging to any
# established call. This is to solve the race condition that happens
# when two callees answer the same call at the same time. According
# to RFC3261, the caller is expected to send an ACK followed by
# a BYE to the loser callee. This is not the case in RFC2543, where
# the proxy was supposed to do this. When set to true, the MediaRelay
# module will implement the RFC2543 behavior. Note that it may sound
# inappropriate to bundle this property with the media relay feature.
# However the MediaRelay module is the only one in Flexisip that
# has the visibility of SIP dialogs, which is necessary to implement
# this feature.
# Default: false
#bye-orphan-dialogs=false

# Maximum concurrent calls processed by the media-relay. Calls arriving
# when the limit is exceed will be rejected. A value of 0 means
# no limit.
# Default: 0
#max-calls=0

# When true, the 'c=' line and port number are set to the relay
# ip/port even if ICE candidates are present in the request, while
# the standard behavior is to leave the c= line and port number
# as they are in the original offer sent by the client. This variation
# allows callees that do not support ICE at all to benefit from
# the media relay service.
# Default: true
#force-relay-for-non-ice-targets=true

# Prevent media-relay ports to loop between them, which can cause
# 100% cpu on the media relay thread. You need to set this property
# to false if you are running test calls from clients running on
# the same IP address as the flexisip server
# Default: true
#prevent-loops=true

# In case multiples '183 Early media' responses are received for
# a call, only the first one will have RTP streams forwarded back
# to caller. This feature prevents the caller to receive 'mixed'
# streams, but it breaks scenarios where multiple servers play early
# media announcement in sequence.
# Default: true
early-media-relay-single=true

# Maximum number of relayed early media streams per call. This is
# useful to limit the cpu usage due to early media relaying on embedded
# systems. A value of 0 stands for unlimited.
# Default: 0
#max-early-media-per-call=0

# Period of time in seconds, after which a relayed call without
# any activity is considered as no longer running. Activity counts
# RTP/RTCP packets exchanged through the relay and SIP messages.
# Default: 3600
#inactivity-period=3600

# Force the media relay to use the public address of Flexisip to
# relay calls. It not enabled, Flexisip will deduce a suitable IP
# address by basing on data from SIP messages, which could fail
# in tricky situations e.g. when Flexisip is behind a TCP proxy.
# Default: false
#force-public-ip-for-sdp-masquerading=false

##
## The purpose of the Transcoder module is to transparently transcode
## from one audio codec to another to make the communication possible
## between clients that do not share the same set of supported codecs.
## Concretely, it adds all missing codecs into the INVITEs it receives,
## and adds codecs matching the original INVITE into the 200Ok. Rtp
## ports and addresses are masqueraded so that the streams can be
## processed by the proxy. The transcoding job is done in the background
## by the Mediastreamer2 library, as consequence the set of supported
## codecs is exactly the the same as the codec set supported by Mediastreamer2,
## including the possible plugins you may installed to extend Mediastreamer2.
## 
## WARNING: this module can conflict with the MediaRelay module as
## they are both changing the SDP. Make sure to configure them with
## different to-domains or from-domains filter if you want to enable
## both of them.
##
[module::Transcoder]

# Indicate whether the module is activated.
# Default: false
#enabled=false

# A request/response enters module if the boolean filter evaluates
# to true. Ex: from.uri.domain contains 'sip.linphone.org', from.uri.domain
# in 'a.org b.org c.org', (to.uri.domain in 'a.org b.org c.org')
# && (user-agent == 'Linphone v2'). You can consult the full filter
# documentation here : https://wiki.linphone.org/xwiki/wiki/public/view/Flexisip/Configuration/Filter%20syntax/
# Default: 
#filter=

# Nominal size of RTP jitter buffer, in milliseconds. A value of
# 0 means no jitter buffer (packet processing).
# Default: 0
#jb-nom-size=0

# Whitespace separated list of user-agent strings for which audio
# rate control is performed.
# Default: 
#rc-user-agents=

# Whitespace seprated list of audio codecs, in order of preference.
# The 'telephone-event' codec is necessary for inband DTMF processing.
# Default: speex/8000 amr/8000 iLBC/8000 gsm/8000 pcmu/8000 pcma/8000 telephone-event/8000
#audio-codecs=speex/8000 amr/8000 iLBC/8000 gsm/8000 pcmu/8000 pcma/8000 telephone-event/8000

# Remove the bandwidth limitations from SDP offers and answers
# Default: false
#remove-bw-limits=false

# If true, retransmissions of INVITEs will be blocked. The purpose
# of this option is to limit bandwidth usage and server load on
# reliable networks.
# Default: false
#block-retransmissions=false

##
## This module executes the basic routing task of SIP requests and
## pass them to the transport layer. It must always be enabled.
##
[module::Forward]

# Indicate whether the module is activated.
# Default: true
#enabled=true

# A request/response enters module if the boolean filter evaluates
# to true. Ex: from.uri.domain contains 'sip.linphone.org', from.uri.domain
# in 'a.org b.org c.org', (to.uri.domain in 'a.org b.org c.org')
# && (user-agent == 'Linphone v2'). You can consult the full filter
# documentation here : https://wiki.linphone.org/xwiki/wiki/public/view/Flexisip/Configuration/Filter%20syntax/
# Default: 
#filter=

# A path to a configuration file describing routes to be prepended
# before forwarding a request, when specific conditions for the
# SIP request being forwarded are met. The condition is described
# using flexisip's filter syntax, as described on 
# https://wiki.linphone.org/xwiki/wiki/public/view/Flexisip/Configuration/Filter%20syntax/
# The configuration file comprises lines using the following syntax:
# <sip route>   <condition expressed as a filter expression> 
# Comments are allowed with '#'.
# Conditions can spread over multiples lines provided that the continuation
# line starts with either spaces or tabs.
# The special condition '*' matches every request.
# The conditions are matched in the order they appear in the configuration
# file. The first fulfilled condition determines the route that
# is prepended.If the request does not match any condition, no route
# is prepended.
# The file may be empty, or no path may be specified, in which case
# no route is preprended either. Here is a an example of a valid
# routes configuration file:
# <sip:example.org;transport=tls>     request.uri.domain == 'example.org'
# <sip:10.0.0.2:5070;transport=tcp>   request.uri.params contains
# 'user=phone'
# 
# Beware: that is not just a SIP URI, but a route. As a result,
# when the URI has parameters, brackets must enclose the URI, otherwise
# the parameters will be parsed as route parameters.
# Default: 
#routes-config-path=

# Add a path header of this proxy
# Default: true
#add-path=true

# For SIP URIs, in asbsence of transport parameter, assume the given
# transport is to be used. Possible values are udp, tcp or tls.
# Default: udp
default-transport=tcp

# List of URL and contact params to remove
# Default: pn-tok pn-type app-id pn-msg-str pn-call-str pn-call-snd pn-msg-snd pn-timeout pn-silent pn-provider pn-prid pn-param
#params-to-remove=pn-tok pn-type app-id pn-msg-str pn-call-str pn-call-snd pn-msg-snd pn-timeout pn-silent pn-provider pn-prid pn-param

##
## Inter domain connections is a set of feature allowing to dynamically
## connect several Flexisip servers together in order to manage SIP
## routing at local and global scope. Let's suppose you have two
## SIP network a.example.net and b.example.net run privately and
## independently (no one from a.example.net needs to call someone
## at b.example.net). However, when people from a and b are outside
## of their network, they register to a worldwide available Flexisip
## instance running on 'global.example.net'. It is then possible
## to:
##  * have calls made within a.example.net routed locally and sent
##    to global.example.net in order to reach users inside and outside
##    of a's network. Example: 1@a.example.net calls 2@a.example.net.
##    If 2 is registered on a.example.net then the call is routed locally.
##    On the contrary if 2 is absent and registered, the call is then
##    sent to global.example.net and then routed by the global proxy.
##  * when global.example.net receives a call from a user not within
##    its native network (ex: 1@a.example.net calls 2@a.example.net),
##    it can route this call to the proxy that is responsible for managing
##    the local domain (a.example.net).
## 
## This system is dynamic: the physical IP address of a and b network
## can change (dynamic ip address allocation)
## .This scenario is achieved with two key features:
##  * a.example.net sends a REGISTER to global.example.net to indicate
##    that it is the responsible for the entire domain a.example.net.
##    The global.example.net authenticates this REGISTER thanks to TLS
##    client certificate presented by a.example.net.
##  * global.example.net is configured to accept this domain registration
##    and route all calls it receives directly and destinated to a.example.net
##    domain through the connection established by a.example.net during
##    the domain registration.
##
[inter-domain-connections]

# Whether Flexisip shall accept registrations for entire domains
# Default: false
#accept-domain-registrations=false

# Whether Flexisip shall assume that there is a unique server per
# registered domain, which allows to clean old registrations and
# simplifies the routing logic.
# Default: false
#assume-unique-domains=false

# Path to a text file describing the domain registrations to make.
# This file must contains lines like:
#  <local domain name> <SIP URI of proxy/registrar where to send
# the domain REGISTER> [password]>
#  where:
#  <local domain name> is a domain name managed locally by this
# proxy
#  <SIP URI of proxy/registrar> is the SIP URI where the domain
# registration will be sent. The special uri parameter 'tls-certificates-dir'
# is understood in order to specify a TLS client certificate to
# present to the remote proxy.
#  [password] is the password to use if the remote proxy/registrar
# requests a digest authentication. It is optional.
#  If the file is absent or empty, no registrations are done.An
# example of such line is:
# belledonne.linphone.org <sips:sip.linphone.org;tls-certificates-dir=/etc/flexisip/client-cert>
# gghhiioozz
# Default: /etc/flexisip/domain-registrations.conf
#domain-registrations=/etc/flexisip/domain-registrations.conf

# When submitting a domain registration to a server over TLS, verify
# the certificate presented by the server. Disabling this option
# is only for test, because it is a security flaw
# Default: true
#verify-server-certs=true

# Interval in seconds for sending \r\n\r\n keepalives through the
# outgoing domain registration connection.A value of zero disables
# keepalives.
# Default: 30
#keepalive-interval=30

# Delay in milliseconds after which TCP/TLS connections will be
# considered as broken if no CRLF pong has beenreceived from the
# registrar. A delay of 0 means that no pong is expected after ping.
# The registrar must advertise the 'outbound' option tag in a Supported
# header for this detection to be active.
# Warning: This parameter must be strictly lower than “keepalive-interval”.
# Default: 0
#ping-pong-timeout-delay=0

# Delay in seconds before creating a new connection after connection
# is known as broken. Set '0' in order the connection be recreated
# immediately.
# Default: 5
#reconnection-delay=5

# Whether Flexisip shall only send a domain registration when a
# device is registered
# Default: false
#reg-when-needed=false

# Route received REGISTER request to the server in charge of the
# domain, according to accepted domain registrations. This option
# is intended to be used with 'reg-on-response' mode of Registrar
# module, and 'accept-domain-registrations' enabled too.The 'reg-on-response'
# mode typically allows Flexisip to forward an incoming REGISTER
# to an upstream server, and record the client's contact address
# upon receiving the 200 Ok response from the upstream server. When
# 'relay-reg-to-domains' is enabled, the routing to the upstream
# server is performed according to the domain registrations received
# previously by flexisip, instead of usual DNS-based procedures.
# Default: false
#relay-reg-to-domains=false

# regex to match domain names (host part of URL) for which the register
# requests should be routed to the upstream server.This option is
# intended to be used with 'relay-reg-to-domains' mode enabled.
# Default: 
#relay-reg-to-domains-regex=

flexisip-proxy+presence+conference+regevent.log

Let me know if you need me to share the core dump or anything else.

Cheers

petervnv commented 3 months ago

And here are my proxy and regevent systemd service files

systemctl cat flexisip-proxy
# /etc/systemd/system/flexisip-proxy.service
[Unit]
Description=Flexisip proxy server
Documentation=http://www.linphone.org/technical-corner/flexisip/overview
After=syslog.target network.service network.target redis.service mysqld.service mariadb.service

[Service]
Type=forking
Environment="HOME=/root"
ExecStart=/opt/belledonne-communications/bin/flexisip --server proxy --daemon --syslog --pidfile /var/run/flexisip-proxy.pid

[Install]
WantedBy=multi-user.target

root@server:/var/log/flexisip# systemctl cat flexisip-regevent

# /etc/systemd/system/flexisip-regevent.service
[Unit]
Description=Flexisip RegEvent server
Documentation=http://www.linphone.org/technical-corner/flexisip/overview
After=syslog.target network.service network.target redis.service

[Service]
Type=forking
Environment="HOME=/root"
ExecStart=/opt/belledonne-communications/bin/flexisip --server regevent --daemon --syslog --pidfile /var/run/flexisip-regevent.pid

[Install]
WantedBy=multi-user.target

Notice that the only change I made was adding Environment="HOME=/root" because I was getting error messages about HOME not being found when starting the services.

Failxxx commented 3 months ago

Thank you for sharing your configuration. The configuration appears to be correct based on my current understanding. Could you provide the core dump please?

petervnv commented 3 months ago

Thanks @Failxxx

It's too big to upload here so I used wetransfer instead. Here you go https://we.tl/t-YsIi3JlXP5

Cheers

Failxxx commented 3 months ago

I am sorry but I am not able to easily do the analysis since we do not have the exact same configuration (linux kernel, library versions, path to libraries, etc). Could you provide the logs generated by the core dump analysis using gdb? Thank you.

petervnv commented 3 months ago

Ok, let me try and will let you know

Edit: It seems the problem lies in soci. Interestingly when I run the service without the environment variable set in systemd file I get these error messages but the service does not crash:

 2024-03-18 19:35:30:679 liblinphone-message-Invalidating friends maps for list [0x55f1ba218580]
2024-03-18 19:35:30:679 liblinphone-error-Unable to get $HOME directory, will use current directory instead as base directory.
2024-03-18 19:35:30:679 liblinphone-message-Sal::unlistenPorts(): done
2024-03-18 19:35:30:679 belle-sip-message-Creating listening point [0x55f1ba257420] on [sip:[::0]:6065;transport=TCP]
2024-03-18 19:35:30:679 belle-sip-warning-belle_sip_socket_set_dscp(): We are in the regret to inform that the linux kernel is unlikely to honor the DSCP fields for dual-stack sockets.
2024-03-18 19:35:30:679 liblinphone-message-Core callbacks [0x55f1ba252720] registered on core [0x55f1ba203010]
2024-03-18 19:35:30:679 liblinphone-message-[ToneManager] create ToneManager()
2024-03-18 19:35:30:679 liblinphone-message-[LIME] instanciate a LimeX3dhEncryption engine 0x55f1ba262710 - default server is [] and curve c25519 DB path: //.local/share/linphone/x3dh.c2551>
2024-03-18 19:35:30:680 bctbx-error-bctbx_file_open: Error opening '/.local/share/linphone/x3dh.c25519.sqlite3': No such file or directory
2024-03-18 19:35:30:680 bctbx-warning-BctbxException occurred:
2024-03-18 19:35:30:680 liblinphone-message-[LIME] exception at Encryption engine instanciation /builds/BC/public/flexisip/linphone-sdk/lime/src/lime_localStorage.cpp:224 Db instanciation o>
2024-03-18 19:35:30:680 liblinphone-warning-Database explicitely not requested, this Core is built with no database support.
2024-03-18 19:35:30:680 liblinphone-message-Using [//.local/share/linphone/call-history.db] as legacy call history database path
2024-03-18 19:35:30:680 bctbx-error-bctbx_file_open: Error opening '/.local/share/linphone/call-history.db': No such file or directory
2024-03-18 19:35:30:680 liblinphone-warning-Unable to build db session with uri: Cannot establish connection to the database. unable to open database file
2024-03-18 19:35:30:680 liblinphone-warning-Unable to connect to: `sqlite3:////.local/share/linphone/call-history.db`.
2024-03-18 19:35:30:680 liblinphone-warning-nothing to migrate, skipping...
2024-03-18 19:35:30:680 liblinphone-message-Using [//.local/share/linphone/zrtp-secrets.db] as default zrtp secrets database path
2024-03-18 19:35:30:680 bctbx-error-bctbx_file_open: Error opening '/.local/share/linphone/zrtp-secrets.db': No such file or directory
2024-03-18 19:35:30:680 liblinphone-error-Error in the opening zrtp_cache_db_file(//.local/share/linphone/zrtp-secrets.db): unable to open database file.

2024-03-18 19:35:30:680 belle-sip-message-Root ca path set to /opt/belledonne-communications/share/linphone/rootca.pem
2024-03-18 19:35:30:681 liblinphone-message-SIP network reachability state is now [UP]
2024-03-18 19:35:30:681 liblinphone-message-Media network reachability state is now [UP]
gdb /opt/belledonne-communications/bin/flexisip core
GNU gdb (Debian 13.1-3) 13.1
Copyright (C) 2023 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /opt/belledonne-communications/bin/flexisip...
(No debugging symbols found in /opt/belledonne-communications/bin/flexisip)
[New LWP 15279]
[New LWP 15280]
[New LWP 15308]
[New LWP 15509]
[New LWP 15510]
[New LWP 15511]
--Type <RET> for more, q to quit, c to continue without paging--
[New LWP 15281]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `/opt/belledonne-communications/bin/flexisip'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x00007f910a36ae50 in soci::session::begin() () from /opt/belledonne-communications/lib/libsoci_core.so.4.0
[Current thread is 1 (Thread 0x7f910595ba00 (LWP 15279))]
Failxxx commented 3 months ago

Thank you for sharing these additional information. Indeed, it is interesting. I am still not able to reproduce the crash using a default configuration and editing the regevent systemd service file as you did. So the cause may rely in your Flexisip configuration along with editing the systemd service file I guess.

Thank you for the core dump analysis. Can you run it again with backtrace --full please? Doc for backtrace: https://sourceware.org/gdb/current/onlinedocs/gdb.html/Backtrace.html

petervnv commented 3 months ago

No problem. I'll try that over the weekend.

But given the soci error in the trace as well as sql errors in the logs I suspect it may have something to do with the sql settings in the presence configuration section.

My current config

# Enable long-term presence notifies
# Default: false
long-term-enabled=true

# Soci connection string for the resource list database.
# Default: 
#rls-database-connection=
rls-database-connection=db=flexisip_conference user=flexisip password='mypassword' host=127.0.0.1 port=3306

# SQL request to obtain the list of the users corresponding to an
# resource list subscription.
# Named parameters are:
#  * ':from' : the URI of the sender of the SUBSCRIBE. (mandatory)
#  * ':to' : the URI of the users list which the sender want to
#    subscribe to. (mandatory)
#    
# Default: 
#rls-database-request=

# Max number of threads.
# Default: 50
#rls-database-max-thread=50

# Max legnth of threads queue.
# Default: 50
#rls-database-max-thread-queue-size=50

# Soci SQL request used to obtain the username associated with a
# phone alias.
# The string MUST contains the ':phone' keyword which will be replaced
# by the phone number to look for.
# The result of the request is a 1x1 table containing the name of
# the user associated with the phone number.
# 
# Example: select login from accounts where phone = :phone 
# Default: 
#soci-user-with-phone-request=
soci-user-with-phone-request=SELECT username FROM accounts, aliases WHERE account_id=(SELECT id from accounts WHERE username= :id AND domain= :domain) AND aliases.alias = :phone

# Same as 'soci-user-with-phone-request' but allows to fetch several
# users by a unique SQL request.
# The string MUST contains the ':phones' keyword which will be replaced
# by the list of phone numbers to look for. Each element of the
# list is seperated by a comma character and is protected by simple
# quotes (e.g. '0336xxxxxxxx','0337yyyyyyyy','034zzzzzzzzz').
# If you use phone number linked accounts you'll need to select
# login, domain, phone in your request for flexisip to work.
# Example: select login, domain, phone from accounts where phone
# in (:phones)
# Default: 
#soci-users-with-phones-request=

Errors in flexisip-presence logs:

2024-03-21 19:09:16:252 flexisip-error-[SOCI] MySQL error after 0ms: 1065 Query was empty
2024-03-21 19:09:16:252 flexisip-error-[SOCI] Trying close/reconnect session

I presume I am doing something wrong in the config but not sure what. Probably the fact that the

rls-database-request= sql request is empty. I previously asked here for help for an example for me to follow since I am using your default DB schema from flexisip-account-manager but unfortunately Vish wasn't able to help.

Can you share your presence section of flexisip.conf (with the passwords deleted) from your production server so I can compare with mine?

Cheers

Failxxx commented 3 months ago

Were you able to run the core dump analysis with backtrace --full ? This would be very helpful to understand what is wrong and causes a segmentation fault when starting the server.

Other than that, I can't share you the full configuration of the presence configuration section. However, I can tell you that we do not set the value for the following settings: rls-database-connection and rls-database-request. Which means our production servers do not enable the following feature: Resource Lists Feature RF4662

petervnv commented 3 months ago

Hi @Failxxx

Sorry for the delay. Here it is. Hope it helps

There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /opt/belledonne-communications/bin/flexisip...
(No debugging symbols found in /opt/belledonne-communications/bin/flexisip)
[New LWP 95668]
[New LWP 95669]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `/opt/belledonne-communications/bin/flexisip --server regevent --daemon --syslog'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x00007f8f9ffd6e50 in soci::session::begin() () from /opt/belledonne-communications/lib/libsoci_core.so.4.0
[Current thread is 1 (Thread 0x7f8f9d7d7a00 (LWP 95668))]
(gdb) bt full
#0  0x00007f8f9ffd6e50 in soci::session::begin() () from /opt/belledonne-communications/lib/libsoci_core.so.4.0
No symbol table info available.
#1  0x00007f8f9f70f669 in LinphonePrivate::MainDbPrivate::importLegacyHistory(LinphonePrivate::DbSession&) () from /opt/belledonne-communications/lib/liblinphone.so.10
No symbol table info available.
#2  0x00007f8f9f710b99 in LinphonePrivate::MainDb::import(LinphonePrivate::AbstractDb::Backend, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ()
   from /opt/belledonne-communications/lib/liblinphone.so.10
No symbol table info available.
#3  0x00007f8f9f50a57d in linphone_core_set_call_logs_database_path () from /opt/belledonne-communications/lib/liblinphone.so.10
No symbol table info available.
#4  0x00007f8f9f6db1e1 in LinphonePrivate::CorePrivate::init() () from /opt/belledonne-communications/lib/liblinphone.so.10
No symbol table info available.
#5  0x00007f8f9f50ea64 in linphone_core_start () from /opt/belledonne-communications/lib/liblinphone.so.10
No symbol table info available.
#6  0x00007f8fa142d11a in flexisip::RegistrationEvent::Server::_init() () from /opt/belledonne-communications/lib/libflexisip.so
No symbol table info available.
#7  0x0000560339369637 in ?? ()
No symbol table info available.
#8  0x00007f8fa084624a in ?? () from /lib/x86_64-linux-gnu/libc.so.6
No symbol table info available.
#9  0x00007f8fa0846305 in __libc_start_main () from /lib/x86_64-linux-gnu/libc.so.6
No symbol table info available.
#10 0x000056033936b0e1 in ?? ()
No symbol table info available.
(gdb) 
petervnv commented 3 months ago

Hi again @Failxxx

Were you able to determine the origin of this bug?

Cheers, Peter

Failxxx commented 2 months ago

Hi @petervnv, Sorry for the delay, I was unavailable for the past weeks.

Thank you for the core dump analysis. As we can see, the issue may come from liblinphone. Let me investigate and I will come back to you as soon as possible.

Another question: what is your linux distribution ?

petervnv commented 2 months ago

Hi @Failxxx No worries. Running Debian 12.5

Cheers

Failxxx commented 2 months ago

Unfortunately I cannot precisely determine the origin of the bug since the core dump analysis isn't precise enough. However, what you can do in order to better understand what happens before the crash is:

However, I have new information and questions for you:

Thank you.

petervnv commented 2 months ago

Unfortunately I cannot precisely determine the origin of the bug since the core dump analysis isn't precise enough. However, what you can do in order to better understand what happens before the crash is:

  • install flexisip package with debug information from here
  • reproduce the crash
  • rerun the core dump analysis with backtrace and share it

However, I have new information and questions for you:

  • you should not modify flexisip systemd service files, please use them as provided.
  • does the path printed in your logs /root/.local/share/linphone/call-history.db actually points to an existing file? If yes, can you confirm it is not corrupted and that you can read its content using mariadb and/or mysql without any issue?
  • the crash may be due to a lack of permissions to read/write to this file. Does the user that runs the server has enough rights on this file?

Thank you.

Hi,

Sorry for the late reply. Been traveling.

I did a clean install from scratch on debian 12.5 and followed your instructions (didn't change the systemd files at all).

The path /root/.local/share/linphone/call-history.db does point to a file but it is empty. And yes the flexisip user (root) has all the needed permissions.

I haven't seen the crash since then but if I see it again I will install flexisip debug and provide a backtrace.

I will go ahead and close this ticket now.

Cheers, Peter