diff --git a/.env b/.env index 38d5f288..baa3167c 100644 --- a/.env +++ b/.env @@ -130,6 +130,9 @@ SRS_GNB_IP=172.22.0.37 # GRAFANA GRAFANA_IP=172.22.0.39 +# IBCF +IBCF_IP=172.22.0.140 + # UE IPv4 Subnet Range for APN=internet UE_IPV4_INTERNET=192.168.100.0/24 diff --git a/dns/e164.arpa b/dns/e164.arpa index 192d01a5..67f7b05a 100644 --- a/dns/e164.arpa +++ b/dns/e164.arpa @@ -11,4 +11,7 @@ $TTL 1h ; Wildcard to match any tel:+xxxx and change to sip:xxxx@IMS_DOMAIN * IN NAPTR 10 100 "u" "E2U+sip" "!(^.*$)!sip:\\1@IMS_DOMAIN!" . -* IN NAPTR 20 100 "u" "E2U+sip" "!(^.*$)!sip:+\\1@IMS_DOMAIN!" . +; Record to route calls starting with DE +49 to IBCF : +*.9.4 IN NAPTR 20 100 "u" "E2U+sip" "!(^.*$)!sip:\\1@ibcf.IMS_DOMAIN!" . +; add more country codes to route over IBCF using the same format as above, you may need also to adjust the dialplan in Asterisk, e.g. for UK +44: +; *.4.4 IN NAPTR 20 100 "u" "E2U+sip" "!(^.*$)!sip:\\1@ibcf.IMS_DOMAIN!" . diff --git a/dns/ims_zone b/dns/ims_zone index 1e02e325..a1697e2a 100644 --- a/dns/ims_zone +++ b/dns/ims_zone @@ -27,3 +27,11 @@ hss 1D IN A PYHSS_IP smsc 1D IN A SMSC_IP _sip._udp.smsc 1D SRV 0 0 7090 smsc _sip._tcp.smsc 1D SRV 0 0 7090 smsc + +ibcf 1D IN A IBCF_IP +_sip._udp.ibcf 1D SRV 0 0 5090 ibcf +_sip._tcp.ibcf 1D SRV 0 0 5090 ibcf + +voicemail 1D IN A IBCF_IP +_sip._udp.voicemail 1D SRV 0 0 5090 voicemail +_sip._tcp.voicemail 1D SRV 0 0 5090 voicemail diff --git a/ibcf/Dockerfile b/ibcf/Dockerfile new file mode 100644 index 00000000..307f0d6e --- /dev/null +++ b/ibcf/Dockerfile @@ -0,0 +1,68 @@ +# syntax=docker/dockerfile:1 + +FROM debian:bullseye +# Install required packages +RUN apt-get update \ + && apt-get upgrade -y \ + && apt-get install -y \ + lsb-release \ + ca-certificates \ + git \ + vim \ + wget \ + curl \ + openssh-server \ + net-tools \ + && apt-get clean +RUN apt --no-install-recommends --assume-yes install unzip autoconf automake build-essential pkg-config libedit-dev libjansson-dev libsqlite3-dev uuid-dev libxslt1-dev xmlstarlet \ + && apt clean + +# Download Asterisk source : +WORKDIR /usr/src +RUN git clone -b releases/22 https://github.com/asterisk/asterisk.git +# Adding EVS and AMR support +# First EVS +WORKDIR /usr/src/asterisk +# install additional DEBs required by Asterisk +RUN sh contrib/scripts/install_prereq install +RUN sh contrib/scripts/get_mp3_source.sh +RUN git clone https://github.com/NUCLEAR-WAR/asterisk-evs.git +RUN cp --verbose --recursive ./asterisk-evs*/* ./ +RUN patch -p0 <./codec_evs.patch +RUN wget www.etsi.org/deliver/etsi_ts/126400_126499/126443/16.01.00_60/ts_126443v160100p0.zip +RUN unzip -qq ts_126443v*.zip +RUN unzip -qq 26443-*-ANSI-C_source_code.zip +WORKDIR /usr/src/asterisk/c-code +RUN chmod +r ./lib_*/*.h +RUN mkdir /usr/include/3gpp-evs +RUN cp --verbose --target-directory=/usr/include/3gpp-evs ./lib_*/*.h +RUN DEBUG=0 RELEASE=1 CFLAGS='-DNDEBUG -fPIC' make +WORKDIR /usr/src/asterisk/c-code/build +RUN rm ./decoder.o +RUN cc -shared -o lib3gpp-evs.so *.o +RUN cp ./lib3gpp-evs.so /usr/lib/ +WORKDIR /usr/src/asterisk +RUN patch -p0 <./build_evs.patch +RUN patch -p0 <./force_limitations.patch + +# Now AMR +RUN apt --assume-yes install libopencore-amrnb-dev libopencore-amrwb-dev libvo-amrwbenc-dev +RUN wget github.com/traud/asterisk-amr/archive/master.zip +RUN unzip -qq master.zip +RUN rm master.zip +RUN cp --verbose --recursive ./asterisk-amr*/* ./ +RUN patch -p0 <./codec_amr.patch +RUN patch -p0 <./build_tools.patch + +# Run the bootstrap script to re-generate configure files and configure patched Asterisk: +RUN ./bootstrap.sh +RUN ./configure +COPY menuselect.makedeps . +COPY menuselect.makeopts . +RUN make && make install + +COPY config/* /etc/asterisk/ + +CMD ["/mnt/ibcf/start-asterisk.sh"] + + diff --git a/ibcf/README.md b/ibcf/README.md new file mode 100644 index 00000000..d1a23c3c --- /dev/null +++ b/ibcf/README.md @@ -0,0 +1,5 @@ +This is a basic kind of IBCF based on Asterisk to handle calls from and to Docker_open5gs, I tried my best to do all the configs, but it still requires your adjustments. + +Please read the Comments carefully before starting the container, specially in : pjsip.conf, acl.conf, extenteions.conf and voiemail.conf, those files must be configured otherwise the IBCF will not work properly!! + +have fun Testing! diff --git a/ibcf/config/acl.conf b/ibcf/config/acl.conf new file mode 100644 index 00000000..7ebc71c6 --- /dev/null +++ b/ibcf/config/acl.conf @@ -0,0 +1 @@ +[ibcf_acl] \ No newline at end of file diff --git a/ibcf/config/asterisk.conf b/ibcf/config/asterisk.conf new file mode 100644 index 00000000..ff66ceea --- /dev/null +++ b/ibcf/config/asterisk.conf @@ -0,0 +1,13 @@ +[options] +; If we want to start Asterisk with a default verbosity for the verbose +; or debug logger channel types, then we use these settings (by default +; they are disabled). +;verbose = 5 +;debug = 2 + +; User and group to run asterisk as. NOTE: This will require changes to +; directory and device permissions. +;runuser = asterisk ; The user to run as. The default is root. +;rungroup = asterisk ; The group to run as. The default is root + +;defaultlanguage = es diff --git a/ibcf/config/cdr.conf b/ibcf/config/cdr.conf new file mode 100644 index 00000000..e8749e37 --- /dev/null +++ b/ibcf/config/cdr.conf @@ -0,0 +1,7 @@ +[general] +enable=yes + +[custom] +; We log the unique ID as it can be useful for troubleshooting any issues +; that arise. +loguniqueid=yes diff --git a/ibcf/config/cdr_custom.conf b/ibcf/config/cdr_custom.conf new file mode 100644 index 00000000..12ad24fe --- /dev/null +++ b/ibcf/config/cdr_custom.conf @@ -0,0 +1,4 @@ +[mappings] +; Our CDR log will be written to /var/log/asterisk/cdr-custom/Master.csv +; with the following schema. +Master.csv => ${CSV_QUOTE(${CDR(clid)})},${CSV_QUOTE(${CDR(src)})},${CSV_QUOTE(${CDR(dst)})},${CSV_QUOTE(${CDR(dcontext)})},${CSV_QUOTE(${CDR(channel)})},${CSV_QUOTE(${CDR(dstchannel)})},${CSV_QUOTE(${CDR(lastapp)})},${CSV_QUOTE(${CDR(lastdata)})},${CSV_QUOTE(${CDR(start)})},${CSV_QUOTE(${CDR(answer)})},${CSV_QUOTE(${CDR(end)})},${CSV_QUOTE(${CDR(duration)})},${CSV_QUOTE(${CDR(billsec)})},${CSV_QUOTE(${CDR(disposition)})},${CSV_QUOTE(${CDR(amaflags)})},${CSV_QUOTE(${CDR(accountcode)})},${CSV_QUOTE(${CDR(uniqueid)})},${CSV_QUOTE(${CDR(userfield)})},${CDR(sequence)} diff --git a/ibcf/config/confbridge.conf b/ibcf/config/confbridge.conf new file mode 100644 index 00000000..3a44e686 --- /dev/null +++ b/ibcf/config/confbridge.conf @@ -0,0 +1 @@ +; All conferences use default settings. This config must be present to load the confbridge application diff --git a/ibcf/config/extensions.conf b/ibcf/config/extensions.conf new file mode 100644 index 00000000..fbd847b6 --- /dev/null +++ b/ibcf/config/extensions.conf @@ -0,0 +1,176 @@ + +; extensions.conf - the Asterisk dial plan +; +; Static extension configuration file, used by +; the pbx_config module. This is where you configure all your +; inbound and outbound calls in Asterisk. +; +; This configuration file is reloaded +; - With the "dialplan reload" command in the CLI +; - With the "reload" command (that reloads everything) in the CLI + +; +; The "General" category is for certain variables. +; +[general] +; +; If static is set to no, or omitted, then the pbx_config will rewrite +; this file when extensions are modified. Remember that all comments +; made in the file will be lost when that happens. +; +; XXX Not yet implemented XXX +; +static=yes +; +; if static=yes and writeprotect=no, you can save dialplan by +; CLI command "dialplan save" too +; +writeprotect=yes +; +; If autofallthrough is set, then if an extension runs out of +; things to do, it will terminate the call with BUSY, CONGESTION +; or HANGUP depending on Asterisk's best guess. This is the default. +; +; If autofallthrough is not set, then if an extension runs out of +; things to do, Asterisk will wait for a new extension to be dialed +; (this is the original behavior of Asterisk 1.0 and earlier). +; +;autofallthrough=no +; +; +; +; If extenpatternmatchnew is set (true, yes, etc), then a new algorithm that uses +; Trie +extenpatternmatchnew=no +; +; If clearglobalvars is set, global variables will be cleared +; and reparsed on a dialplan reload, or Asterisk reload. +; +; If clearglobalvars is not set, then global variables will persist +; through reloads, and even if deleted from the extensions.conf or +; one of its included files, will remain set to the previous value. +; +; NOTE: A complication sets in, if you put your global variables into +; the AEL file, instead of the extensions.conf file. With clearglobalvars +; set, a "reload" will often leave the globals vars cleared, because it +; is not unusual to have extensions.conf (which will have no globals) +; load after the extensions.ael file (where the global vars are stored). +; So, with "reload" in this particular situation, first the AEL file will +; clear and then set all the global vars, then, later, when the extensions.conf +; file is loaded, the global vars are all cleared, and then not set, because +; they are not stored in the extensions.conf file. +; +clearglobalvars=yes +; +; User context is where entries from users.conf are registered. The +; default value is 'default' +; + + +; Welcome to Asterisk Dialplan!! its not complicated, you will get use to it in just a "few" tries +userscontext=unspecified + + +; Here are some deffined variables that will be used in the dialplan, some of them must be adjusted to your need! + +; I use a german Trunk so I have the +49, adjust depand on your country, this is used on incoming, as my provider sends only E164 numbers. +[globals] +INTERNAL_DIAL_OPT=,30 +ENUM_PREFIX_FOR_DE=+49 + +; this this the head number, you need to change it to teh value provided by your providers, in consist of 10 digit, this is important as we will cut the number and normalize it before it enters the IMS Core, there is various names for Head number like : Direct dial in .. prefix numbers..etc so its basiclly the number from your SIPTrunk Provider that can be extended and add digits to it + +PHONE_NR_HEAD=1234567890 + +; Dont change +ICP_OUT=ICP_LINK_out +ICP_IN=ims_core +; change to your provider's provided domain +SIPTRUNK_DOMAIN=PROVIDER_DOMAIN +; Dont change +IMS_CN_DOMAIN=IMS_DOMAIN +PAI_HEADER=P-Asserted-Identity +PPI_HEADER=P-Preferred-Identity +NO_FORK=Request-Disposition +P_HEADER=P-Early-Media +X_HEADER=P-MeinSipTrunk + +; now the dial plan, here is an explnination so you can adjust what you need to make it able to proccess calls and send it to and from teh IMS Core +; in "incoming" in my case i used an internal MSISDN for my open5GS Netwrok 0912584710 as you see this is a private self generated number. +; in normal world there is a shared Database for all operator so they know that a numer belong to a specific operator, in our case the netwrok is private and our +; numbers are unknown to teh wolrd, so I had to do a trick, this trick consist of the head numer provided from my SIPTrunk provider adding the UE MSISDN to it liek that: +; CC+HEADER_NUMER+MSSIDN = +49 228 1234567 0912584710 and then cut or add the CC+HEADER_NUMER depanding on the direction : +; to IMS Core cute CC+HEADER_NUMER, if to outside world then add CC+HEADER_NUMER +; this is using the ${EXTEN:n} "n" is where the digit that need to stay along with the digits the come after it. in my case its the 0, so the results will be 0912584710 that will +; be recognized insdie my private network, this need to be adjusted depand on the your needs like the lenth of your Head number and your MSISDN. +; after doing that we need to send the call to the ICSCF as we dont know where the user is registred, the rest will be done insdie the IMS Core+Open5GS +; +; its preconfigured here on digit 13 ( UK users please change it! not to trigger any bad luck!) + + +[incoming] + +; +49 228 1234567 + any +exten => _${ENUM_PREFIX_FOR_DE}${PHONE_NR_HEAD}X.,1,Verbose(incoming call from ICP from ${CALLERID(num)} calling to ${EXTEN:13}) +same => n,Verbose(check for exten ${EXTEN} 8 ${EXTEN:8} 9 ${EXTEN:9} 10 ${EXTEN:10} 11 ${EXTEN:11} 13 ${EXTEN:13} ) +; cutting until digi 13 CUT0912584710 set some headers and send to icscf to reach the users +same => n,Dial(PJSIP/${ICP_IN}/sip:${EXTEN:13}@${IMS_CN_DOMAIN},120,b(outgoing^ims_inc^1)) +same => n,Hangup() + +[outgoing] + +; Due to diffrent way that the devices do calls there is two way defined here eather the call will start with 0 ( in teh IMS is not possbile) or with + + +; here is with 0, its not applicale, our IMS is 3gpp compitable so it has always E164 +exten => _0X.,1,Verbose(outgoing conext leading null ${EXTEN} calling from IMS User ${CALLERID(num)} ) +same => n,Dial(PJSIP/${ICP_OUT}/sip:${ENUM_PREFIX_FOR_DE}${EXTEN:1}@${SIPTRUNK_DOMAIN},120,b(outgoing^headers^1)) +same => n,Hangup() + + +; here is the used one as we use E164 in IMS +exten => _${ENUM_PREFIX_FOR_DE}X.,1,Verbose(outgoing Call leading +49 calling from IMS User ${CALLERID(num)} to ${EXTEN} ) +same => n,Verbose(Sending INVITE to ICP) +; we set the head number and add the MSISDN to it then set it in the "From" header +same => n,Set(CALLERID(num)=${ENUM_PREFIX_FOR_DE}${PHONE_NR_HEAD}${CALLERID(num)}) +; setting some headers and sends the INVITE to the Provdier/ICP +same => n,Dial(PJSIP/${ICP_OUT}/sip:${EXTEN}@${SIPTRUNK_DOMAIN},120,b(outgoing^ims_out^1)) +same => n,Hangup() + +; this headers used in outgoing +exten => ims_out,1,Verbose(Setting required headers in outgoing INVITE) +; setting the P-Preferred-Identity and optionally P-Preferred-Identity ( PAI is only a Networ thing) here we do the the as we done with From: +; adding the MSISDN ot the head number before sending it out. +same => n,Set(PJSIP_HEADER(add,${PPI_HEADER})=) +same => n,Set(PJSIP_HEADER(add,${PAI_HEADER})=) +; Setting P-Early-Media to Supported, Asterisk know nothing about RFC5009, but its required by 3GPP, so we can only cheat here sorry! +same => n,Set(PJSIP_HEADER(add,${P_HEADER})=Supported) +same => n,Set(PJSIP_HEADER(add,Supported)=199) +same => n,Return() + +; for incoming we need to set the PAI, some devices need this header +exten => ims_inc,1,Verbose(Setting required headers in incoming INVITE) +same => n,Set(PJSIP_HEADER(add,${PAI_HEADER})=) +same => n,Set(PJSIP_HEADER(add,${PAI_HEADER})=) +same => n,Set(PJSIP_HEADER(add,${P_HEADER})=Supported) +same => n,Set(PJSIP_HEADER(add,Supported)=199) +same => n,Return() + +[IMS_INC] + +include => outgoing + +;;;;;;; Voicemail IMS, this is a WIP, need to add appreciate IFC for it, dont forget to confgure your MSISDN in the voicemail.conf!! + +; configure teh start of your number instaed of "09125" eg. if your MSISDN start with 09125123456 then exten => _09125X. +exten => _09125X.,1,Verbose(1, Caller ${CALLERID(all)} has entered Voicemail for ${EXTEN} from IMS ) +same => n,VoiceMail(${EXTEN}) + +exten => 500,1,Ringing() +exten => 500,n,Wait(2) +exten => 500,n,Answer +exten => 500,n,Wait(2) +exten => 500,n,VoiceMailMain(${CALLERID(num)}) +exten => 500,n,HangUp() +exten => 500,n,PlayBack(vm-goodbye) +exten => 500,n,HangUp() + diff --git a/ibcf/config/indications.conf b/ibcf/config/indications.conf new file mode 100644 index 00000000..6953c3ef --- /dev/null +++ b/ibcf/config/indications.conf @@ -0,0 +1,21 @@ +[general] +country = de + +[de] +description = Germany +; Reference: http://www.itu.int/ITU-T/inr/forms/files/tones-0203.pdf +ringcadence = 1000,4000 +dial = 425 +busy = 425/480,0/480 +ring = 425/1000,0/4000 +congestion = 425/240,0/240 +callwaiting = !425/200,!0/200,!425/200,!0/5000,!425/200,!0/200,!425/200,!0/5000,!425/200,!0/200,!425/200,!0/5000,!425/200,!0/200,!425/200,!0/5000,!425/200,!0/200,!425/200,0 +; DIALRECALL - not specified +dialrecall = !425/100,!0/100,!425/100,!0/100,!425/100,!0/100,425 +; RECORDTONE - not specified +record = 1400/80,0/15000 +info = 950/330,1400/330,1800/330,0/1000 +stutter = 425+400 + +; Additional country configurations can be found in the Asterisk source +; at /configs/samples/indications.conf.sample diff --git a/ibcf/config/logger.conf b/ibcf/config/logger.conf new file mode 100644 index 00000000..8b0a1c19 --- /dev/null +++ b/ibcf/config/logger.conf @@ -0,0 +1,9 @@ +[general] + +[logfiles] + +console = verbose,notice,warning,error + +;messages = notice,warning,error +;full = verbose,notice,warning,error,debug +;security = security diff --git a/ibcf/config/modules.conf b/ibcf/config/modules.conf new file mode 100644 index 00000000..b2277e29 --- /dev/null +++ b/ibcf/config/modules.conf @@ -0,0 +1,130 @@ +[modules] +autoload = no + +; This is a minimal module load. We are loading only the modules +; required for the Asterisk features used in the "Super Awesome +; Company" configuration. + +; Applications + +load = app_bridgewait.so +load = app_dial.so +load = app_playback.so +load = app_stack.so +load = app_verbose.so +load = app_voicemail.so +load = app_directory.so +load = app_confbridge.so +load = app_queue.so +load = app_echo.so +load = app_mp3.so +load = app_transfer.so + + +; Bridging + +load = bridge_builtin_features.so +load = bridge_builtin_interval_features.so +load = bridge_holding.so +load = bridge_native_rtp.so +load = bridge_simple.so +load = bridge_softmix.so + +; Call Detail Records + +load = cdr_custom.so + +; Channel Drivers + +load = chan_bridge_media.so +load = chan_pjsip.so + +; Codecs + +load = codec_gsm.so +load = codec_resample.so +load = codec_ulaw.so +load = codec_g722.so +load = codec_evs.so +load = codec_alaw.so +load = codec_amr.so + +; Formats + +load = format_gsm.so +load = format_pcm.so +load = format_wav_gsm.so +load = format_wav.so +load = format_mp3.so + +; Functions + +load = func_callerid.so +load = func_cdr.so +load = func_pjsip_endpoint.so +load = func_sorcery.so +load = func_devstate.so +load = func_strings.so +load = func_srv.so + +; Core/PBX + +load = pbx_config.so + +; Resources + +load = res_http_websocket.so +load = res_musiconhold.so +load = res_pjproject.so +load = res_pjsip_acl.so +load = res_pjsip_authenticator_digest.so +load = res_pjsip_caller_id.so +load = res_pjsip_dialog_info_body_generator.so +load = res_pjsip_diversion.so +load = res_pjsip_dtmf_info.so +load = res_pjsip_endpoint_identifier_anonymous.so +load = res_pjsip_endpoint_identifier_ip.so +load = res_pjsip_endpoint_identifier_user.so +load = res_pjsip_exten_state.so +load = res_pjsip_header_funcs.so +load = res_pjsip_logger.so +load = res_pjsip_messaging.so +load = res_pjsip_mwi_body_generator.so +load = res_pjsip_mwi.so +load = res_pjsip_nat.so +load = res_pjsip_notify.so +load = res_pjsip_one_touch_record_info.so +load = res_pjsip_outbound_authenticator_digest.so +load = res_pjsip_outbound_publish.so +load = res_pjsip_outbound_registration.so +load = res_pjsip_path.so +load = res_pjsip_pidf_body_generator.so +load = res_pjsip_pidf_digium_body_supplement.so +load = res_pjsip_pidf_eyebeam_body_supplement.so +load = res_pjsip_publish_asterisk.so +load = res_pjsip_pubsub.so +load = res_pjsip_refer.so +load = res_pjsip_registrar.so +load = res_pjsip_rfc3326.so +load = res_pjsip_sdp_rtp.so +load = res_pjsip_send_to_voicemail.so +load = res_pjsip_session.so +load = res_pjsip.so +load = res_pjsip_t38.so +load = res_pjsip_transport_websocket.so +load = res_pjsip_xpidf_body_generator.so +load = res_rtp_asterisk.so +load = res_sorcery_astdb.so +load = res_sorcery_config.so +load = res_sorcery_memory.so +load = res_sorcery_realtime.so +load = res_timing_timerfd.so +load = res_format_attr_amr.so +load = res_format_attr_evs.so + +; Do not load res_hep and kin unless you are using HEP monitoring +; in your network. + +noload = res_hep.so +noload = res_hep_pjsip.so +noload = res_hep_rtcp.so diff --git a/ibcf/config/musiconhold.conf b/ibcf/config/musiconhold.conf new file mode 100644 index 00000000..bc3ba212 --- /dev/null +++ b/ibcf/config/musiconhold.conf @@ -0,0 +1,5 @@ +[general] + +[default] +mode = files +directory = moh diff --git a/ibcf/config/pjsip.conf b/ibcf/config/pjsip.conf new file mode 100644 index 00000000..24894072 --- /dev/null +++ b/ibcf/config/pjsip.conf @@ -0,0 +1,148 @@ +; configure here your ICP Link towards outsdie ( SIPTRunk account ...etc) + +[global] +type=global +user_agent=IBCF VoLTE +keep_alive_interval=20 +; Add some default Number to be use in case From not specficed otherwise you can coment it out +default_from_user=_DEFAULT_NUMBER +;endpoint_identifier_order=ip +ignore_uri_user_options=yes +max_forwards=70 +allow_sending_180_after_183=yes + +; Protect your IBCF with ACL! write permit/deny IPs in acl.conf, this is important to prevent untrusted IP from trying to reach this PBX +[ibcf_acl] +type=acl +acl=ibcf_acl + +; Transport definations, nothing important here, unless you want to change something +[transport-tcp-nat] +type=transport +protocol=tcp +bind=0.0.0.0:5090 +tos=192 +local_net=172.22.0.0/24 + +[transport-udp] +type=transport +protocol=udp +bind=0.0.0.0:5090 +local_net=172.22.0.0/24 +;tos=192 + +; here is the registration info for your Trunking Account, if you use a real ICP over the "Ic" Reference Point the configuration is diffrent, it will be more like Static Registration +; IMPORTANT!!! change the vaulues : PROVIDER_PCSCF, PROVIDER_SIP_DOMIAN with your provider's provided info!, dont change other values! + +[defaults_registration](!) +type=registration +transport=transport-tcp-nat +outbound_proxy=sip:PROVIDER_PCSCF\;transport=tcp\;lr +server_uri=sip:PROVIDER_SIP_DOMIAN\;transport=tcp\;lr +retry_interval=900 +forbidden_retry_interval=1800 +fatal_retry_interval=1800 +expiration=480 +auth_rejection_permanent=no +line=yes +max_retries=99 + +; Replace with your account data!! +; Replace the values : AUTH_USERNAME@PROVIDER_DOMIAN and CONTACT_USER with your provider's provided info!, dont change other values! +[ICP_LINK](defaults_registration) +outbound_auth=ICP_LINK +client_uri=sip:AUTH_USERNAME@PROVIDER_DOMIAN +contact_user=CONTACT_USER +endpoint=ICP_LINK_in + +; here is the type of authentication, in Register Mode you need to provide a user name and password +; replace only : PROVIDER_USERNAME, PROVIDER_PASSWD and PROVIDER_DOMIAN with your provider's provided info!, dont change other values! +[ICP_LINK] +type=auth +auth_type=userpass +username=PROVIDER_USERNAME +password=PROVIDER_PASSWD +realm=PROVIDER_DOMIAN + +; Trunk Setting optimize what you like here, read Docs from Asterisk for more info. +; Replace PROVIDER_PCSCF with your provider's provided info. +[defaults_endpoint](!) +type=endpoint +transport=transport-tcp-nat +;removed for double contacts +outbound_proxy=sip:PROVIDER_PCSCF\;transport=tcp\;lr +allow=!all,amrwb,amr,g722,alaw,h264 +inband_progress=yes +direct_media=no +dtmf_mode=auto +;send_pai=yes +;send_rpid=yes +;100rel=required +100rel=yes +tos_audio=184 +rtp_symmetric=yes +rtp_keepalive=1 +moh_suggest=default +moh_passthrough=yes +send_diversion=yes +suppress_q850_reason_headers=yes +user_eq_phone=yes +preferred_codec_only=yes +;tos_video=af41 +;cos_video=4 +direct_media_glare_mitigation=outgoing +suppress_moh_on_sendonly=yes +use_ptime=yes + +; Outgoing Leg +; Replace PROVIDER_DOMIAN and CONTACT_USER with your provider's provided info. +[ICP_LINK_out](defaults_endpoint) +context=outgoing +outbound_auth=ICP_LINK +aors=ICP_LINK +;media_encryption=no +from_domain=PROVIDER_DOMIAN +contact_user=CONTACT_USER + +[ICP_LINK_in](defaults_endpoint) +outbound_auth=ICP_LINK +context=incoming + +; Replace CONTACT_USER with your provider's provided info. +[ICP_LINK] +type=aor +contact=sip:CONTACT_USER + +; here match the incoming request to only a specific IPs like your provider's Subnet and your IMS Core/Internal Subnet +[ICP_LINK_in] +type=identify +endpoint=ICP_LINK_in +match=PROVIDER_SUBNET/24 +match=DOCKER_HOST_SUBNET/24 + + +;;; here is the IMS Core IF, no need to change things here unless you have to. + +[ims_core] +type=endpoint +aors=ims_core +allow_unauthenticated_options=yes +transport=transport-udp +context=IMS_INC +allow=!all,evs,amrwb,amr,g722,alaw,h264 +dtmf_mode=auto +tos_audio=184 +send_diversion=yes +preferred_codec_only=yes + + +[ims_core] +type=identify +endpoint=ims_core +match=172.22.0.0/24 + +[ims_core] +type=aor +;contact=sip:172.22.0.20 +max_contacts=3 +;qualify_frequency=60 diff --git a/ibcf/config/pjsip_notify.conf b/ibcf/config/pjsip_notify.conf new file mode 100644 index 00000000..8224ee1f --- /dev/null +++ b/ibcf/config/pjsip_notify.conf @@ -0,0 +1,57 @@ +; rfc3842 +; put empty "Content=>" at the end to have CRLF after last body line + +[clear-mwi] +Event=>message-summary +Content-type=>application/simple-message-summary +Content=>Messages-Waiting: no +Content=>Message-Account: sip:asterisk@127.0.0.1 +Content=>Voice-Message: 0/0 (0/0) +Content=> + +; Aastra + +[aastra-check-cfg] +Event=>check-sync + +[aastra-xml] +Event=>aastra-xml + +; Digium + +[digium-check-cfg] +Event=>check-sync + +; Linksys + +[linksys-cold-restart] +Event=>reboot_now + +[linksys-warm-restart] +Event=>restart_now + +; Polycom + +[polycom-check-cfg] +Event=>check-sync + +; Sipura + +[sipura-check-cfg] +Event=>resync + +[sipura-get-report] +Event=>report + +; snom + +[snom-check-cfg] +Event=>check-sync\;reboot=false + +[snom-reboot] +Event=>check-sync\;reboot=true + +; Cisco + +[cisco-check-cfg] +Event=>check-sync diff --git a/ibcf/config/queues.conf b/ibcf/config/queues.conf new file mode 100644 index 00000000..8aaa0b4d --- /dev/null +++ b/ibcf/config/queues.conf @@ -0,0 +1,19 @@ +[general] +monitor-type = MixMonitor + +;========================Sales Queue == +; Calls all sales persons in a ring-all fashion +[sales] +strategy=ringall +member => PJSIP/1109 ; Terry Jules - Director of Sales +member => PJSIP/1105 ; Garnet Claude - Sales Associate +member => PJSIP/1112 ; Franny Ocean - Sales Associate + +;===================== Customer Advocate Queue == +; Calls all customer advocates in a ring-all fashion +[customer_advocate] +strategy=ringall +member => PJSIP/1101 ; Maria Berny - Director of Customer Experience +member => PJSIP/1115 ; Dusty Williams - Customer Advocate +member => PJSIP/1102 ; Tommy Briar - Customer Advocate + diff --git a/ibcf/config/rtp.conf b/ibcf/config/rtp.conf new file mode 100644 index 00000000..37283df2 --- /dev/null +++ b/ibcf/config/rtp.conf @@ -0,0 +1,3 @@ +[general] +rtpstart=10000 +rtpend=10100 \ No newline at end of file diff --git a/ibcf/config/voicemail.conf b/ibcf/config/voicemail.conf new file mode 100644 index 00000000..75bb8a71 --- /dev/null +++ b/ibcf/config/voicemail.conf @@ -0,0 +1,17 @@ +[general] +format=wav49 ; Voicemail file format +maxmsg=100 ; Maximum number of messages per mailbox +minsecs=3 ; Minimum length of a message in seconds +maxsecs=300 ; Maximum length of a message in seconds +maxlogins=3 ; Maximum number of incorrect password attempts before hanging up +sendvoicemail=yes ; Allow sending voicemail (yes/no) +emailsubject=New Voicemail Message ${VM_MSGNUM} in Mailbox ${VM_MAILBOX} +fromstring=Voicemail +serveremail=my_vonr-vm@voicemail.IMS_DOMAIN ; Default sender email address + + +[IMS_Users] +; Voicemail context for all internal users in the example.com domain. +; Format is : MSISDN => VM_PIN,Name,Email +MSISDN => 1234,VoNR_One,MSISDN@voicemail.IMS_DOMAIN +MSISDN => 4567,VoNR_Two,MSISDN@voicemail.IMS_DOMAIN diff --git a/ibcf/menuselect.makedeps b/ibcf/menuselect.makedeps new file mode 100644 index 00000000..89d2c798 --- /dev/null +++ b/ibcf/menuselect.makedeps @@ -0,0 +1,234 @@ +MENUSELECT_DEPENDS_chan_mobile=BLUETOOTH +MENUSELECT_DEPENDS_res_config_mysql=MYSQLCLIENT +MENUSELECT_DEPENDS_app_flash=DAHDI +MENUSELECT_DEPENDS_app_voicemail_imap=IMAP_TK +MENUSELECT_DEPENDS_app_voicemail_odbc=GENERIC_ODBC +MENUSELECT_DEPENDS_app_jack=JACK RESAMPLE +MENUSELECT_DEPENDS_app_meetme=DAHDI +MENUSELECT_DEPENDS_binaural_rendering_in_bridge_softmix=FFTW3 +MENUSELECT_DEPENDS_cdr_adaptive_odbc=GENERIC_ODBC +MENUSELECT_DEPENDS_cdr_beanstalkd=BEANSTALK +MENUSELECT_DEPENDS_cdr_odbc=GENERIC_ODBC +MENUSELECT_DEPENDS_cdr_pgsql=PGSQL +MENUSELECT_DEPENDS_cdr_radius=RADIUS +MENUSELECT_DEPENDS_cdr_sqlite3_custom=SQLITE3 +MENUSELECT_DEPENDS_cdr_tds=FREETDS +MENUSELECT_DEPENDS_cel_odbc=GENERIC_ODBC +MENUSELECT_DEPENDS_cel_beanstalkd=BEANSTALK +MENUSELECT_DEPENDS_cel_pgsql=PGSQL +MENUSELECT_DEPENDS_cel_radius=RADIUS +MENUSELECT_DEPENDS_cel_sqlite3_custom=SQLITE3 +MENUSELECT_DEPENDS_cel_tds=FREETDS +MENUSELECT_DEPENDS_chan_dahdi=DAHDI TONEZONE PRI SS7 OPENR2 +MENUSELECT_DEPENDS_chan_iax2=CRYPTO +MENUSELECT_DEPENDS_chan_motif=IKSEMEL OPENSSL +MENUSELECT_DEPENDS_chan_pjsip=PJPROJECT +MENUSELECT_DEPENDS_chan_console=PORTAUDIO +MENUSELECT_DEPENDS_codec_codec2=CODEC2 +MENUSELECT_DEPENDS_codec_dahdi=DAHDI +MENUSELECT_DEPENDS_codec_gsm=GSM +MENUSELECT_DEPENDS_codec_ilbc=ILBC +MENUSELECT_DEPENDS_codec_speex=SPEEX SPEEX_PREPROCESS SPEEXDSP +MENUSELECT_DEPENDS_codec_amr=AMR_NB AMR_WB_DECODER AMR_WB_ENCODER +MENUSELECT_DEPENDS_codec_evs=EVS +MENUSELECT_DEPENDS_codec_opus=XMLSTARLET BASH +MENUSELECT_DEPENDS_codec_silk=XMLSTARLET BASH +MENUSELECT_DEPENDS_codec_siren7=XMLSTARLET BASH +MENUSELECT_DEPENDS_codec_siren14=XMLSTARLET BASH +MENUSELECT_DEPENDS_codec_g729a=XMLSTARLET BASH +MENUSELECT_DEPENDS_format_ogg_vorbis=VORBIS OGG +MENUSELECT_DEPENDS_format_ogg_speex=SPEEX OGG +MENUSELECT_DEPENDS_func_aes=CRYPTO +MENUSELECT_DEPENDS_func_curl=CURL +MENUSELECT_DEPENDS_func_iconv=ICONV +MENUSELECT_DEPENDS_func_odbc=GENERIC_ODBC +MENUSELECT_DEPENDS_func_pjsip_aor=PJPROJECT +MENUSELECT_DEPENDS_func_pjsip_contact=PJPROJECT +MENUSELECT_DEPENDS_func_pjsip_endpoint=PJPROJECT +MENUSELECT_DEPENDS_func_speex=SPEEX SPEEX_PREPROCESS SPEEXDSP +MENUSELECT_DEPENDS_pbx_dundi=ZLIB CRYPTO +MENUSELECT_DEPENDS_pbx_lua=LUA +MENUSELECT_DEPENDS_res_config_curl=CURL +MENUSELECT_DEPENDS_res_config_odbc=GENERIC_ODBC +MENUSELECT_DEPENDS_res_config_sqlite3=SQLITE3 +MENUSELECT_DEPENDS_res_crypto=OPENSSL +MENUSELECT_DEPENDS_res_curl=CURL +MENUSELECT_DEPENDS_res_geolocation=LIBXML2 LIBXSLT +MENUSELECT_DEPENDS_res_http_media_cache=CURL +MENUSELECT_DEPENDS_res_http_post=GMIME +MENUSELECT_DEPENDS_res_odbc=GENERIC_ODBC +MENUSELECT_DEPENDS_res_odbc_transaction=GENERIC_ODBC +MENUSELECT_DEPENDS_res_pjproject=PJPROJECT +MENUSELECT_DEPENDS_res_pjsip=PJPROJECT +MENUSELECT_DEPENDS_res_pjsip_acl=PJPROJECT +MENUSELECT_DEPENDS_res_pjsip_authenticator_digest=PJPROJECT +MENUSELECT_DEPENDS_res_pjsip_caller_id=PJPROJECT +MENUSELECT_DEPENDS_res_pjsip_config_wizard=PJPROJECT +MENUSELECT_DEPENDS_res_pjsip_dialog_info_body_generator=PJPROJECT +MENUSELECT_DEPENDS_res_pjsip_diversion=PJPROJECT +MENUSELECT_DEPENDS_res_pjsip_dlg_options=PJPROJECT +MENUSELECT_DEPENDS_res_pjsip_dtmf_info=PJPROJECT +MENUSELECT_DEPENDS_res_pjsip_empty_info=PJPROJECT +MENUSELECT_DEPENDS_res_pjsip_endpoint_identifier_anonymous=PJPROJECT +MENUSELECT_DEPENDS_res_pjsip_endpoint_identifier_ip=PJPROJECT +MENUSELECT_DEPENDS_res_pjsip_endpoint_identifier_user=PJPROJECT +MENUSELECT_DEPENDS_res_pjsip_exten_state=PJPROJECT +MENUSELECT_DEPENDS_res_pjsip_geolocation=PJPROJECT LIBXML2 +MENUSELECT_DEPENDS_res_pjsip_header_funcs=PJPROJECT +MENUSELECT_DEPENDS_res_pjsip_logger=PJPROJECT +MENUSELECT_DEPENDS_res_pjsip_messaging=PJPROJECT +MENUSELECT_DEPENDS_res_pjsip_mwi=PJPROJECT +MENUSELECT_DEPENDS_res_pjsip_mwi_body_generator=PJPROJECT +MENUSELECT_DEPENDS_res_pjsip_nat=PJPROJECT +MENUSELECT_DEPENDS_res_pjsip_notify=PJPROJECT +MENUSELECT_DEPENDS_res_pjsip_one_touch_record_info=PJPROJECT +MENUSELECT_DEPENDS_res_pjsip_outbound_authenticator_digest=PJPROJECT +MENUSELECT_DEPENDS_res_pjsip_outbound_publish=PJPROJECT +MENUSELECT_DEPENDS_res_pjsip_outbound_registration=PJPROJECT +MENUSELECT_DEPENDS_res_pjsip_path=PJPROJECT +MENUSELECT_DEPENDS_res_pjsip_pidf_body_generator=PJPROJECT +MENUSELECT_DEPENDS_res_pjsip_pidf_digium_body_supplement=PJPROJECT +MENUSELECT_DEPENDS_res_pjsip_pidf_eyebeam_body_supplement=PJPROJECT +MENUSELECT_DEPENDS_res_pjsip_publish_asterisk=PJPROJECT +MENUSELECT_DEPENDS_res_pjsip_pubsub=PJPROJECT +MENUSELECT_DEPENDS_res_pjsip_refer=PJPROJECT +MENUSELECT_DEPENDS_res_pjsip_registrar=PJPROJECT +MENUSELECT_DEPENDS_res_pjsip_rfc3326=PJPROJECT +MENUSELECT_DEPENDS_res_pjsip_rfc3329=PJPROJECT +MENUSELECT_DEPENDS_res_pjsip_sdp_rtp=PJPROJECT +MENUSELECT_DEPENDS_res_pjsip_send_to_voicemail=PJPROJECT +MENUSELECT_DEPENDS_res_pjsip_session=PJPROJECT +MENUSELECT_DEPENDS_res_pjsip_sips_contact=PJPROJECT +MENUSELECT_DEPENDS_res_pjsip_stir_shaken=PJPROJECT +MENUSELECT_DEPENDS_res_pjsip_t38=PJPROJECT +MENUSELECT_DEPENDS_res_pjsip_transport_websocket=PJPROJECT +MENUSELECT_DEPENDS_res_pjsip_xpidf_body_generator=PJPROJECT +MENUSELECT_DEPENDS_res_resolver_unbound=UNBOUND +MENUSELECT_DEPENDS_res_rtp_asterisk=OPENSSL PJPROJECT +MENUSELECT_DEPENDS_res_srtp=SRTP OPENSSL +MENUSELECT_DEPENDS_res_stasis_test=TEST_FRAMEWORK +MENUSELECT_DEPENDS_res_stir_shaken=CURL LIBJWT +MENUSELECT_DEPENDS_res_timing_dahdi=DAHDI +MENUSELECT_DEPENDS_res_timing_timerfd=TIMERFD +MENUSELECT_DEPENDS_res_xmpp=IKSEMEL OPENSSL +MENUSELECT_DEPENDS_res_calendar_caldav=NEON ICAL LIBXML2 +MENUSELECT_DEPENDS_res_calendar_ews=NEON29 +MENUSELECT_DEPENDS_res_calendar_exchange=NEON ICAL IKSEMEL +MENUSELECT_DEPENDS_res_calendar_icalendar=NEON ICAL +MENUSELECT_DEPENDS_res_config_ldap=LDAP +MENUSELECT_DEPENDS_res_config_pgsql=PGSQL +MENUSELECT_DEPENDS_res_corosync=COROSYNC +MENUSELECT_DEPENDS_res_fax_spandsp=SPANDSP +MENUSELECT_DEPENDS_res_hep_pjsip=PJPROJECT +MENUSELECT_DEPENDS_res_pjsip_aoc=PJPROJECT +MENUSELECT_DEPENDS_res_pjsip_history=PJPROJECT +MENUSELECT_DEPENDS_res_pjsip_phoneprov_provider=PJPROJECT +MENUSELECT_DEPENDS_res_prometheus=PJPROJECT +MENUSELECT_DEPENDS_res_snmp=NETSNMP +MENUSELECT_DEPENDS_res_timing_kqueue=KQUEUE +MENUSELECT_DEPENDS_res_digium_phone=XMLSTARLET BASH +MENUSELECT_DEPENDS_res_pjsip_config_sangoma=XMLSTARLET BASH +MENUSELECT_DEPENDS_test_abstract_jb=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_acl=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_aeap=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_aeap_speech=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_aeap_transaction=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_aeap_transport=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_amihooks=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_aoc=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_app=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_ari=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_ari_model=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_ast_format_str_reduce=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_astobj2=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_astobj2_thrash=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_astobj2_weaken=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_bridging=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_bucket=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_callerid=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_capture=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_cdr=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_cel=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_channel=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_channel_feature_hooks=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_config=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_conversions=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_core_codec=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_core_format=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_crypto=TEST_FRAMEWORK CRYPTO +MENUSELECT_DEPENDS_test_data_buffer=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_db=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_devicestate=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_dlinklists=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_dns=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_dns_naptr=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_dns_query_set=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_dns_recurring=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_dns_srv=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_endpoints=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_event=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_expr=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_file=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_format_cache=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_format_cap=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_func_file=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_gosub=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_hashtab_thrash=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_heap=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_http_media_cache=TEST_FRAMEWORK CURL +MENUSELECT_DEPENDS_test_jitterbuf=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_json=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_linkedlists=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_locale=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_logger=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_media_cache=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_message=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_mwi=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_named_lock=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_netsock2=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_optional_api=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_pbx=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_poll=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_res_pjsip_scheduler=TEST_FRAMEWORK PJPROJECT +MENUSELECT_DEPENDS_test_res_pjsip_session_caps=TEST_FRAMEWORK PJPROJECT +MENUSELECT_DEPENDS_test_res_rtp=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_res_stasis=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_sched=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_scope_trace=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_scoped_lock=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_security_events=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_skel=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_sorcery=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_sorcery_astdb=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_sorcery_memory_cache_thrash=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_sorcery_realtime=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_stasis=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_stasis_channels=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_stasis_endpoints=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_stasis_state=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_stream=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_stringfields=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_strings=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_substitution=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_taskprocessor=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_threadpool=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_time=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_uri=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_utils=TEST_FRAMEWORK CRYPTO +MENUSELECT_DEPENDS_test_uuid=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_vector=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_voicemail_api=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_websocket_client=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_xml_escape=TEST_FRAMEWORK +MENUSELECT_DEPENDS_test_res_prometheus=TEST_FRAMEWORK CURL +MENUSELECT_DEPENDS_BETTER_BACKTRACES=BFD DLADDR +MENUSELECT_DEPENDS_BUILD_NATIVE=NATIVE_ARCH +MENUSELECT_DEPENDS_REBUILD_PARSERS=BISON FLEX +MENUSELECT_DEPENDS_USE_HOARD_ALLOCATOR=HOARD +MENUSELECT_DEPENDS_ADDRESS_SANITIZER=HAVE_ADDRESS_SANITIZER +MENUSELECT_DEPENDS_THREAD_SANITIZER=HAVE_THREAD_SANITIZER +MENUSELECT_DEPENDS_LEAK_SANITIZER=HAVE_LEAK_SANITIZER +MENUSELECT_DEPENDS_UNDEFINED_SANITIZER=HAVE_UNDEFINED_SANITIZER +MENUSELECT_DEPENDS_smsq=POPT +MENUSELECT_DEPENDS_conf_bridge_binaural_hrir_importer=SNDFILE +MENUSELECT_DEPENDS_astman=NEWT diff --git a/ibcf/menuselect.makeopts b/ibcf/menuselect.makeopts new file mode 100644 index 00000000..c777e1e9 --- /dev/null +++ b/ibcf/menuselect.makeopts @@ -0,0 +1,122 @@ +MENUSELECT_ADDONS=chan_mobile chan_ooh323 res_config_mysql +MENUSELECT_APPS=app_flash app_skel app_voicemail_imap app_voicemail_odbc app_statsd app_meetme +MENUSELECT_BRIDGES=binaural_rendering_in_bridge_softmix +MENUSELECT_CDR=cdr_beanstalkd +MENUSELECT_CEL=cel_beanstalkd +MENUSELECT_CHANNELS=chan_dahdi +MENUSELECT_CODECS=codec_dahdi codec_opus codec_silk codec_siren7 codec_siren14 codec_g729a +MENUSELECT_FORMATS= +MENUSELECT_FUNCS= +MENUSELECT_PBX= +MENUSELECT_RES=res_ari_mailboxes res_mwi_external res_mwi_external_ami res_pjsip_stir_shaken res_stasis_mailbox res_stasis_test res_stir_shaken res_timing_dahdi res_chan_stats res_cliexec res_corosync res_endpoint_stats res_remb_modifier res_timing_kqueue res_digium_phone res_pjsip_config_sangoma +MENUSELECT_TESTS=test_abstract_jb test_acl test_aeap test_aeap_speech test_aeap_transaction test_aeap_transport test_amihooks test_aoc test_app test_ari test_ari_model test_ast_format_str_reduce test_astobj2 test_astobj2_thrash test_astobj2_weaken test_bridging test_bucket test_callerid test_capture test_cdr test_cel test_channel test_channel_feature_hooks test_config test_conversions test_core_codec test_core_format test_crypto test_data_buffer test_db test_devicestate test_dlinklists test_dns test_dns_naptr test_dns_query_set test_dns_recurring test_dns_srv test_endpoints test_event test_expr test_file test_format_cache test_format_cap test_func_file test_gosub test_hashtab_thrash test_heap test_http_media_cache test_jitterbuf test_json test_linkedlists test_locale test_logger test_media_cache test_message test_mwi test_named_lock test_netsock2 test_optional_api test_pbx test_poll test_res_pjsip_scheduler test_res_pjsip_session_caps test_res_rtp test_res_stasis test_sched test_scope_trace test_scoped_lock test_security_events test_skel test_sorcery test_sorcery_astdb test_sorcery_memory_cache_thrash test_sorcery_realtime test_stasis test_stasis_channels test_stasis_endpoints test_stasis_state test_stream test_stringfields test_strings test_substitution test_taskprocessor test_threadpool test_time test_uri test_utils test_uuid test_vector test_voicemail_api test_websocket_client test_xml_escape test_res_prometheus +MENUSELECT_CFLAGS=BUILD_NATIVE OPTIONAL_API +MENUSELECT_UTILS=astcanary astdb2sqlite3 astdb2bdb +MENUSELECT_AGIS= +MENUSELECT_CORE_SOUNDS=CORE-SOUNDS-EN-WAV CORE-SOUNDS-EN-ALAW CORE-SOUNDS-EN-GSM CORE-SOUNDS-EN-G722 +MENUSELECT_MOH=MOH-OPSOUND-WAV MOH-OPSOUND-ALAW MOH-OPSOUND-GSM MOH-OPSOUND-G722 +MENUSELECT_EXTRA_SOUNDS=EXTRA-SOUNDS-EN-WAV EXTRA-SOUNDS-EN-ALAW EXTRA-SOUNDS-EN-GSM EXTRA-SOUNDS-EN-G722 +MENUSELECT_BUILD_DEPS=bridge_holding app_cdr func_periodic_hook app_confbridge res_speech res_agi res_stasis res_adsi res_smdi res_audiosocket res_odbc res_crypto res_xmpp res_pjsip res_pjsip_pubsub res_pjsip_session res_rtp_multicast res_curl app_chanspy func_cut func_groupcount func_uri res_ael_share res_http_websocket res_ari res_ari_model res_stasis_recording res_stasis_playback res_stasis_answer res_stasis_snoop res_stasis_device_state func_curl res_odbc_transaction res_sorcery_config res_pjproject res_sorcery_memory res_sorcery_astdb res_statsd res_geolocation res_pjsip_outbound_publish chan_pjsip res_calendar res_fax res_hep res_phoneprov res_pjsip_outbound_registration DONT_OPTIMIZE G711_NEW_ALGORITHM +MENUSELECT_DEPSFAILED=MENUSELECT_APPS=app_flash +MENUSELECT_DEPSFAILED=MENUSELECT_CDR=cdr_beanstalkd +MENUSELECT_DEPSFAILED=MENUSELECT_CEL=cel_beanstalkd +MENUSELECT_DEPSFAILED=MENUSELECT_CHANNELS=chan_dahdi +MENUSELECT_DEPSFAILED=MENUSELECT_CODECS=codec_dahdi +MENUSELECT_DEPSFAILED=MENUSELECT_RES=res_pjsip_stir_shaken +MENUSELECT_DEPSFAILED=MENUSELECT_RES=res_stasis_test +MENUSELECT_DEPSFAILED=MENUSELECT_RES=res_stir_shaken +MENUSELECT_DEPSFAILED=MENUSELECT_RES=res_timing_dahdi +MENUSELECT_DEPSFAILED=MENUSELECT_RES=res_timing_kqueue +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_abstract_jb +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_acl +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_aeap +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_aeap_speech +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_aeap_transaction +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_aeap_transport +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_amihooks +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_aoc +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_app +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_ari +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_ari_model +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_ast_format_str_reduce +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_astobj2 +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_astobj2_thrash +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_astobj2_weaken +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_bridging +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_bucket +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_callerid +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_capture +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_cdr +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_cel +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_channel +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_channel_feature_hooks +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_config +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_conversions +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_core_codec +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_core_format +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_crypto +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_data_buffer +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_db +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_devicestate +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_dlinklists +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_dns +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_dns_naptr +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_dns_query_set +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_dns_recurring +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_dns_srv +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_endpoints +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_event +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_expr +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_file +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_format_cache +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_format_cap +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_func_file +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_gosub +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_hashtab_thrash +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_heap +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_http_media_cache +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_jitterbuf +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_json +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_linkedlists +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_locale +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_logger +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_media_cache +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_message +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_mwi +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_named_lock +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_netsock2 +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_optional_api +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_pbx +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_poll +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_res_pjsip_scheduler +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_res_pjsip_session_caps +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_res_rtp +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_res_stasis +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_sched +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_scope_trace +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_scoped_lock +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_security_events +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_skel +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_sorcery +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_sorcery_astdb +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_sorcery_memory_cache_thrash +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_sorcery_realtime +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_stasis +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_stasis_channels +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_stasis_endpoints +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_stasis_state +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_stream +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_stringfields +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_strings +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_substitution +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_taskprocessor +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_threadpool +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_time +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_uri +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_utils +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_uuid +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_vector +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_voicemail_api +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_websocket_client +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_xml_escape +MENUSELECT_DEPSFAILED=MENUSELECT_TESTS=test_res_prometheus diff --git a/ibcf/start-asterisk.sh b/ibcf/start-asterisk.sh new file mode 100755 index 00000000..6dbeabaa --- /dev/null +++ b/ibcf/start-asterisk.sh @@ -0,0 +1,16 @@ +#!/bin/bash + + +[ ${#MNC} == 3 ] && IMS_DOMAIN="ims.mnc${MNC}.mcc${MCC}.3gppnetwork.org" || IMS_DOMAIN="ims.mnc0${MNC}.mcc${MCC}.3gppnetwork.org" + +cp /mnt/ibcf/config/* /etc/asterisk/ + +sed -i 's|IMS_DOMAIN|'$IMS_DOMAIN'|g' /etc/asterisk/pjsip.conf +sed -i 's|IMS_DOMAIN|'$IMS_DOMAIN'|g' /etc/asterisk/extensions.conf +sed -i 's|IMS_DOMAIN|'$IMS_DOMAIN'|g' /etc/asterisk/voicemail.conf +sed -i 's|IMS_DOMAIN|'$IMS_DOMAIN'|g' /etc/asterisk/extensions.conf + +# Start server. +echo 'Starting Asterisk' + +asterisk -f \ No newline at end of file diff --git a/icscf/icscf.cfg b/icscf/icscf.cfg index de681945..aba876b2 100644 --- a/icscf/icscf.cfg +++ b/icscf/icscf.cfg @@ -12,7 +12,7 @@ alias=IMS_DOMAIN #!subst "/NETWORKNAME/IMS_DOMAIN/" -#!define ENUM_SUFFIX "IMS_DOMAIN." +#!define ENUM_SUFFIX "e164.arpa." # SIP-Address of capturing node, if not set, capturing is disabled. ##!define CAPTURE_NODE "sip:127.0.0.1:9060" diff --git a/pcscf/route/mo.cfg b/pcscf/route/mo.cfg index ffc9b317..157767bf 100644 --- a/pcscf/route/mo.cfg +++ b/pcscf/route/mo.cfg @@ -77,7 +77,7 @@ route[MO] #!ifdef WITH_N5 if(is_method("INVITE")) { - route(N5_INIT_REQ); + route(N5_INIT_REQ); } #!endif @@ -104,7 +104,6 @@ route[MO] } #!ifdef WITH_N5 - # Route Logic for N5 Requests route[N5_INIT_REQ] { @@ -310,7 +309,6 @@ route[N5_INIT_REQ] { } #!endif - ###################################################################### # Replies to Originating Initial Requests ###################################################################### @@ -328,38 +326,18 @@ onreply_route[MO_reply] { #!ifdef WITH_N5 # N5 PATCH Request for updating AppSession context - if (t_check_status("180|183|200") && has_body("application/sdp")) { - xlog("L_INFO", "Received early answer in 18x. Patching N5 session in PCF\n"); - if (t_is_retr_async_reply()) { - xlog("L_INFO", "Dropping retransmitted reply which is still currently suspended\n"); - drop(); - } - route(N5_PATCH_REQ); + if(t_check_status("180|183|200") && has_body("application/sdp")){ + xlog("L_INFO", "Received early answer in 18x. Patching N5 session in PCF\n"); + if(t_is_retr_async_reply()) { + xlog("L_INFO", "Dropping retransmitted reply which is still currently suspended\n"); + drop(); } - - - # Terminating N5 AppSession after BYE - if (is_method("BYE|CANCEL") || status=~"[45][0-9][0-9]") { - xlog("L_ALERT", "Terminating AppSession for Call fom User $fU due to call END or Call Failed\n"); - # Retrieve the AppSession Id from the hash table - $var(user_id_midcall_rel) = $fU; - $var(user_appsess_midcall_rel) = $sht(user_data=>$var(user_id_midcall_rel)); - xlog("L_INFO", "Terminating stored AppSession for user $var(user_id_midcall_rel): $var(user_appsess_midcall_rel)\n"); - - $var(headers) = "X-SIP-Status: De-Registration\r\n"; - $var(headers) = $var(headers) + "3gpp-sbi-discovery-target-nf-type: NRF\r\n"; - $var(headers) = $var(headers) + "accept: application/json\r\n"; - $var(headers) = $var(headers) + "accept: application/problem+json\r\n"; - $var(headers) = $var(headers) + "3gpp-sbi-max-rsp-time: 10000\r\n"; - $var(headers) = $var(headers) + "3gpp-sbi-discovery-service-names: npcf-policyauthorization\r\n"; - $var(headers) = $var(headers) + "3gpp-sbi-sender-timestamp: " + $var(time_now); - - http_client_request_v2pk("POST", "http://172.22.0.27:7777/npcf-policyauthorization/v1/app-sessions/$var(user_appsess_midcall_rel)/delete", "$var(json_request)", "$var(headers)", "$var(result)" ); - xlog("L_INFO", "Termination resuts: $var(result)\n"); - xlog("L_INFO", "response header: $curlerror(error)\n"); - xlog("L_INFO", "response header: $var(response_code)\n"); - xlog("L_INFO", "response header: $httprhdr(location)\n"); - xlog("L_INFO", "response header: $rc\n"); + route(N5_PATCH_REQ); + } +# Terminating N5 AppSession after CANCEL/ERROR + if(is_method("CANCEL") || status=~"[45][0-9][0-9]"){ + xlog("L_ALERT", "Terminating AppSession For Call fom User $fU due to call END or Call Faild\n"); + route(N5_MOC_TERM); } #!endif @@ -418,33 +396,14 @@ route[MO_indialog] { #!ifdef WITH_N5 # N5 PATCH Request for updating AppSession context - if (is_method("INVITE")) { - xlog("L_INFO"," InDialog SDP Answer N5 Request for reINVITE\n"); - route(N5_PATCH_REQ); + if (is_method("INVITE")){ + xlog("L_INFO"," InDialog SDP Answer N5 Request for reINVITE\n"); + route(N5_PATCH_REQ); } # Terminating N5 AppSession after BYE - if (is_method("BYE|CANCEL")) { - xlog("L_ALERT","Terminating AppSession for Call from User $fU due to call END or Call Failed\n"); - # Retrieve the AppSession Id from the hash table - $var(user_id_call_rel) = $fU; - $var(user_appsess_call_rel) = $sht(user_data=>$var(user_id_call_rel)); - xlog("L_INFO", "Terminating stored AppSession for user $var(user_id_call_rel): $var(user_id_call_rel)\n"); - - $var(headers) = "X-SIP-Status: De-Registration\r\n"; - $var(headers) = $var(headers) + "3gpp-sbi-discovery-target-nf-type: NRF\r\n"; - $var(headers) = $var(headers) + "accept: application/json\r\n"; - $var(headers) = $var(headers) + "accept: application/problem+json\r\n"; - $var(headers) = $var(headers) + "3gpp-sbi-max-rsp-time: 10000\r\n"; - $var(headers) = $var(headers) + "3gpp-sbi-discovery-service-names: npcf-policyauthorization\r\n"; - $var(headers) = $var(headers) + "3gpp-sbi-sender-timestamp: " + $var(time_now); - - http_client_request_v2pk("POST", "http://172.22.0.27:7777/npcf-policyauthorization/v1/app-sessions/$var(user_appsess_call_rel)/delete", "$var(json_request)", "$var(headers)", "$var(result)" ); - xlog("L_INFO", "Termination resuls: $var(result)\n"); - xlog("L_INFO", "response header: $curlerror(error)\n"); - xlog("L_INFO", "response header: $var(response_code)\n"); - xlog("L_INFO", "response header: $httprhdr(location)\n"); - xlog("L_INFO", "response header: $rc\n"); + if(is_method("BYE|CANCEL")){ + route(N5_MOC_TERM); } #!endif @@ -532,7 +491,6 @@ route[MO_indialog_aar_reply] } #!ifdef WITH_N5 - # 5G VoNR N5 Policy Authorization PATCH request route[N5_PATCH_REQ] { xlog("L_INFO", "IMS: Received 183/200 inside orig_initial_reply\n"); @@ -669,3 +627,34 @@ route[N5_PATCH_REQ] { } } #!endif +#!ifdef WITH_N5 +route[N5_MOC_TERM]{ + # Retrieving and paying attention to whom ended the call + $var(user_id_call_rel) = $fU; # User Part of the from Header to get the USER + $var(user_appsess_call_rel) = $sht(user_data=>$var(user_id_call_rel)); + if $var(user_appsess_call_rel) == 0 { + xlog("L_INFO", "we dont have AppSessionID to terminate, doing alternative Method\n"); + + # Retrieving and paying attention to whom ended the call + $var(user_id_call_rel) = $tU; # User Part of the from Header to get the USER + $var(user_appsess_call_rel) = $sht(user_data=>$var(user_id_call_rel)); + xlog("L_INFO", "Alt-Method : Terminating Stored AppSession for user $var(user_id_call_rel): $var(user_appsess_call_rel)\n"); + } else { + xlog("L_INFO", "We have AppSessionID, doing normal Method\n"); + xlog("L_INFO", "Normal Method : Stored MOC AppSession for user $var(user_id_call_rel): $var(user_appsess_call_rel)\n"); + } + $var(headers) = "X-SIP-Status: Call-Termination\r\n"; + $var(headers) = $var(headers) + "3gpp-sbi-discovery-target-nf-type: NRF\r\n"; + $var(headers) = $var(headers) + "accept: application/json\r\n"; + $var(headers) = $var(headers) + "accept: application/problem+json\r\n"; + $var(headers) = $var(headers) + "3gpp-sbi-max-rsp-time: 10000\r\n"; + $var(headers) = $var(headers) + "3gpp-sbi-discovery-service-names: npcf-policyauthorization\r\n"; + $var(headers) = $var(headers) + "3gpp-sbi-sender-timestamp: " + $var(time_now); + http_client_request_v2pk("POST", "http://172.22.0.27:7777/npcf-policyauthorization/v1/app-sessions/$var(user_appsess_call_rel)/delete", "$var(json_request)", "$var(headers)", "$var(result)" ); + xlog("L_INFO", "Termination resuls: $var(result)\n"); + xlog("L_INFO", "response header: $curlerror(error)\n"); + xlog("L_INFO", "response header: $var(response_code)\n"); + xlog("L_INFO", "response header: $httprhdr(location)\n"); + xlog("L_INFO", "response header: $rc\n"); +} +#!endif diff --git a/sa-vonr-deploy.yaml b/sa-vonr-deploy.yaml index 814880b6..9eb829a4 100644 --- a/sa-vonr-deploy.yaml +++ b/sa-vonr-deploy.yaml @@ -506,6 +506,29 @@ services: networks: default: ipv4_address: ${GRAFANA_IP} +# ibcf: +# build: ./ibcf +# image: ibcf_cloud +# container_name: ibcf_voicemail +# dns: ${DNS_IP} +# privileged: true +# env_file: +# - .env +# volumes: +# - ./ibcf:/mnt/ibcf +# environment: +# - COMPONENT_NAME=ibcf_voicemail +# expose: +# - "5090/tcp" +# - "5090/udp" +# - "10000-10100/udp" +# ports: +# - "5090:5090/tcp" +# - "10000-10100:10000-10100/udp" +# networks: +# default: +# ipv4_address: ${IBCF_IP} + networks: default: ipam: