From ea2ccc181284e72007ea2450b7051aed1fd747c1 Mon Sep 17 00:00:00 2001 From: DanB Date: Tue, 12 Nov 2019 14:09:03 +0100 Subject: [PATCH] Updating kamailio tutorial to ignore -1 as MaxUsage, removing osips_mative from tutorial --- .../kamailio/etc/kamailio/kamailio.cfg | 14 +- .../cgrates/etc/cgrates/cgrates.json | 144 --------- .../osips_native/cgrates/etc/init.d/cgrates | 175 ----------- .../opensips/etc/default/opensips | 27 -- .../osips_native/opensips/etc/init.d/opensips | 199 ------------- .../opensips/etc/opensips/opensips.cfg | 275 ------------------ 6 files changed, 6 insertions(+), 828 deletions(-) delete mode 100644 data/tutorials/osips_native/cgrates/etc/cgrates/cgrates.json delete mode 100755 data/tutorials/osips_native/cgrates/etc/init.d/cgrates delete mode 100755 data/tutorials/osips_native/opensips/etc/default/opensips delete mode 100755 data/tutorials/osips_native/opensips/etc/init.d/opensips delete mode 100644 data/tutorials/osips_native/opensips/etc/opensips/opensips.cfg diff --git a/data/tutorials/kamevapi/kamailio/etc/kamailio/kamailio.cfg b/data/tutorials/kamevapi/kamailio/etc/kamailio/kamailio.cfg index 85672bced..452cd9d0d 100644 --- a/data/tutorials/kamevapi/kamailio/etc/kamailio/kamailio.cfg +++ b/data/tutorials/kamevapi/kamailio/etc/kamailio/kamailio.cfg @@ -217,14 +217,12 @@ route[CGRATES_SESSIONAUTH_REPLY] { $dlg_var(cgrDestination) = $rU; $dlg_var(paypalAccount) = $avp(PaypalAccount); - if $var(cgrMaxUsage) != -1 { - if $var(cgrMaxUsage) == 0 { // Not enough balance, do not allow the call to go through - sl_send_reply("403","Insufficient credit"); - exit; - } else if !dlg_set_timeout("$var(cgrMaxUsage)") { - sl_send_reply("503","CGR_MAX_USAGE_ERROR"); - exit; - } + if $var(cgrMaxUsage) == 0 { // Not enough balance, do not allow the call to go through + sl_send_reply("403","Insufficient credit"); + exit; + } else if !dlg_set_timeout("$var(cgrMaxUsage)") { + sl_send_reply("503","CGR_MAX_USAGE_ERROR"); + exit; } if $var(cgrSuppliers) != "" { # Enforce the supplier variable to the first one received from CGRateS, here more for demo purposes diff --git a/data/tutorials/osips_native/cgrates/etc/cgrates/cgrates.json b/data/tutorials/osips_native/cgrates/etc/cgrates/cgrates.json deleted file mode 100644 index 3a5a9ea2a..000000000 --- a/data/tutorials/osips_native/cgrates/etc/cgrates/cgrates.json +++ /dev/null @@ -1,144 +0,0 @@ -{ - -// Real-time Charging System for Telecom & ISP environments -// Copyright (C) ITsysCOM GmbH -// - - -"listen": { - "rpc_json": ":2012", - "rpc_gob": ":2013", - "http": ":2080", -}, - - -"stor_db": { - "db_password": "CGRateS.org", -}, - - -"scheduler": { - "enabled": true, -}, - - -"rals": { - "enabled": true, - "thresholds_conns": [ - {"address": "127.0.0.1:2012", "transport": "*json"} - ], - "stats_conns": [ - {"address": "127.0.0.1:2012", "transport": "*json"} - ], - "attributes_conns": [ - {"address": "*internal"} - ], -}, - - -"cdrs": { - "enabled": true, - "stats_conns": [ - {"address": "*internal"} - ], - "chargers_conns": [ - {"address": "*internal"} - ], - "sessions_cost_retries": 5, -}, - - -"chargers": { - "enabled": true, - "attributes_conns": [ - {"address": "*internal"} - ], -}, - - -"sessions": { - "enabled": true, - "listen_bijson": "127.0.0.1:2014", // address where to listen for bidirectional JSON-RPC requests - "rals_conns": [ - {"address": "*internal"} - ], - "cdrs_conns": [ - {"address": "*internal"} - ], - "resources_conns": [ - {"address": "*internal"} - ], - "suppliers_conns": [ - {"address": "*internal"} - ], - "attributes_conns": [ - {"address": "*internal"} - ], - "stats_conns": [ - {"address": "*internal"} - ], - "thresholds_conns": [ - {"address": "*internal"} - ], - "chargers_conns": [ - {"address": "*internal"} - ], - "store_session_costs": true, - "debit_interval": "10s", - "channel_sync_interval":"7s", -}, - - - -"attributes": { - "enabled": true, - "string_indexed_fields": ["Account"], -}, - - -"resources": { - "enabled": true, - "thresholds_conns": [ - {"address": "*internal"} - ], - "string_indexed_fields": ["Account"], - "prefix_indexed_fields": ["Destination"], -}, - - -"stats": { - "enabled": true, - "thresholds_conns": [ - {"address": "*internal"} - ], - "string_indexed_fields": ["Account"], -}, - - -"thresholds": { - "enabled": true, - "string_indexed_fields": ["Account"], -}, - - -"suppliers": { - "enabled": true, - "resources_conns": [ - {"address": "*internal"} - ], - "stats_conns": [ - {"address": "*internal"} - ], - "string_indexed_fields": ["Account"], - "prefix_indexed_fields": ["Destination"], -}, - - -"apier": { - "scheduler_conns": [ // connections to SchedulerS for reloads - {"address": "*internal"}, - ], -}, - - -} diff --git a/data/tutorials/osips_native/cgrates/etc/init.d/cgrates b/data/tutorials/osips_native/cgrates/etc/init.d/cgrates deleted file mode 100755 index f38563305..000000000 --- a/data/tutorials/osips_native/cgrates/etc/init.d/cgrates +++ /dev/null @@ -1,175 +0,0 @@ -#! /bin/sh -### BEGIN INIT INFO -# Provides: cgrates -# Required-Start: $remote_fs $syslog -# Required-Stop: $remote_fs $syslog -# Default-Start: 2 3 4 5 -# Default-Stop: 0 1 6 -# Short-Description: CGRateS real-time charging system -# Description: Control CGRateS - carrier grade real-time charging system -### END INIT INFO - -# Author: DanB -# -# Do NOT "set -e" - -# PATH should only include /usr/* if it runs after the mountnfs.sh script -PATH=/sbin:/usr/sbin:/bin:/usr/bin -DESC="CGRateS Online Charging System" -NAME=cgrates -DAEMON=/usr/bin/cgr-engine -USER=cgrates -GROUP=cgrates -DAEMON_OPTS="" -TUTFOLDER=/usr/share/cgrates/tutorials/osips_native/$NAME -TMP_DIR=/tmp/cgr_osipsnative/$NAME -SCRIPTNAME=$TUTFOLDER/etc/init.d/$NAME -RUNDIR=$TMP_DIR/run -PIDFILE=$RUNDIR/cgr-engine.pid -STACKTRACE=$RUNDIR/$NAME.strace -ENABLE=true -DAEMON_OPTS="-config_path=$TUTFOLDER/etc/cgrates" -CDREDIR=$TMP_DIR/cdre - -# Exit if the package is not installed -[ -x "$DAEMON" ] || exit 0 - -# Load the VERBOSE setting and other rcS variables -. /lib/init/vars.sh - -# Define LSB log_* functions. -# Depend on lsb-base (>= 3.2-14) to ensure that this file is present -# and status_of_proc is working. -. /lib/lsb/init-functions - -if [ "$ENABLE" != "true" ]; then - echo "$DESC not yet configured. Edit $DEFAULTS first." - exit 0 -fi - -# Install the run folder -if [ ! -d $RUNDIR ]; then - mkdir -p $RUNDIR - touch $STACKTRACE - chown -R $USER:$GROUP $RUNDIR -fi -# Install the cdre folder -if [ ! -d $CDREDIR ]; then - mkdir -p $CDREDIR - chown $USER:$GROUP $CDREDIR -fi - -# -# Function that starts the daemon/service -# -do_start() -{ - # Return - # 0 if daemon has been started - # 1 if daemon was already running - # 2 if daemon could not be started - echo "\n### Started at:" `date`>>$STACKTRACE - start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test\ - || return 1 - start-stop-daemon --start --quiet --chuid $USER:$GROUP --make-pidfile --pidfile $PIDFILE --background\ - --startas /bin/bash -- -c "exec $DAEMON $DAEMON_OPTS >> $STACKTRACE 2>&1" \ - || return 2 -} - -# -# Function that stops the daemon/service -# -do_stop() -{ - # Return - # 0 if daemon has been stopped - # 1 if daemon was already stopped - # 2 if daemon could not be stopped - # other if a failure occurred - start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE - RETVAL="$?" - [ "$RETVAL" = 2 ] && return 2 - # Wait for children to finish too if this is a daemon that forks - # and if the daemon is only ever run from this initscript. - # If the above conditions are not satisfied then add some other code - # that waits for the process to drop all resources that could be - # needed by services started subsequently. A last resort is to - # sleep for some time. - start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON - [ "$?" = 2 ] && return 2 - # Many daemons don't delete their pidfiles when they exit. - rm -f $PIDFILE - return "$RETVAL" -} - -# -# Function that sends a SIGHUP to the daemon/service -# -do_reload() { - # - # If the daemon can reload its configuration without - # restarting (for example, when it is sent a SIGHUP), - # then implement that here. - # - start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME - return 0 -} - -case "$1" in - start) - [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" - do_start - case "$?" in - 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; - 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; - esac - ;; - stop) - [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" - do_stop - case "$?" in - 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; - 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; - esac - ;; - status) - status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $? - ;; - #reload|force-reload) - # - # If do_reload() is not implemented then leave this commented out - # and leave 'force-reload' as an alias for 'restart'. - # - #log_daemon_msg "Reloading $DESC" "$NAME" - #do_reload - #log_end_msg $? - #;; - restart|force-reload) - # - # If the "reload" option is implemented then remove the - # 'force-reload' alias - # - log_daemon_msg "Restarting $DESC" "$NAME" - do_stop - case "$?" in - 0|1) - do_start - case "$?" in - 0) log_end_msg 0 ;; - 1) log_end_msg 1 ;; # Old process is still running - *) log_end_msg 1 ;; # Failed to start - esac - ;; - *) - # Failed to stop - log_end_msg 1 - ;; - esac - ;; - *) - echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2 - exit 3 - ;; -esac - -: diff --git a/data/tutorials/osips_native/opensips/etc/default/opensips b/data/tutorials/osips_native/opensips/etc/default/opensips deleted file mode 100755 index 0671f96a0..000000000 --- a/data/tutorials/osips_native/opensips/etc/default/opensips +++ /dev/null @@ -1,27 +0,0 @@ -# -# OpenSIPS startup options -# - -# Set to yes to enable opensips, once configured properly. -RUN_OPENSIPS=yes - -# User to run as -USER=opensips - -# Group to run as -GROUP=opensips - -# Amount of shared memory to allocate for the running OpenSIPS server (in Mb) -S_MEMORY=64 - -# Amount of pkg memory to allocate for the running OpenSIPS server (in Mb) -P_MEMORY=4 - -# Enable the server to leave a core file when it crashes. -# Set this to 'yes' to enable OpenSIPS to leave a core file when it crashes -# or 'no' to disable this feature. This option is case sensitive and only -# accepts 'yes' and 'no' and only in lowercase letters. -# On some systems (e.g. Ubuntu 6.10, Debian 4.0) it is necessary to specify -# a directory for the core files to get a dump. Look into the opensips -# init file for an example configuration. -DUMP_CORE=no diff --git a/data/tutorials/osips_native/opensips/etc/init.d/opensips b/data/tutorials/osips_native/opensips/etc/init.d/opensips deleted file mode 100755 index efc1031a3..000000000 --- a/data/tutorials/osips_native/opensips/etc/init.d/opensips +++ /dev/null @@ -1,199 +0,0 @@ -#! /bin/sh -# -### BEGIN INIT INFO -# Provides: opensips -# Required-Start: $syslog $network $local_fs $time -# Required-Stop: $syslog $network $local_fs -# Default-Start: 2 3 4 5 -# Default-Stop: 0 1 6 -# Short-Description: Start the OpenSIPS SIP server -# Description: Start the OpenSIPS SIP server -### END INIT INFO -# -# TODO: -# The following fields should be added (and completed): -# Should-Start: postgresql mysql radius -# Should-Stop: postgresql mysql radius - -PATH=/sbin:/bin:/usr/sbin:/usr/bin -DAEMON=/usr/sbin/opensips -NAME=opensips -DESC=opensips -TUTDIR=/usr/share/cgrates/tutorials/osips_native/$NAME -SCRIPTNAME=$TUTDIR/etc/init.d/$NAME -TMP_DIR=/tmp/cgr_osipsnative/$NAME -CFGFILE=$TUTDIR/etc/$NAME/opensips.cfg -M4CFGFILE=/etc/opensips/opensips.m4 -M4ARCHIVEDIR=/etc/opensips/archive -HOMEDIR=$TMP_DIR/run/opensips -PIDFILE=$HOMEDIR/$NAME.pid -DEFAULTS=$TUTDIR/etc/default/opensips -RUN_OPENSIPS=no - -if [ ! -d $HOMEDIR ]; then - mkdir -p $HOMEDIR - chown -R $USER:$GROUP $HOMEDIR -fi - -# Do not start opensips if fork=no is set in the config file -# otherwise the boot process will just stop -check_fork () -{ - if grep -q "^[[:space:]]*fork[[:space:]]*=[[:space:]]*no.*" $CFGFILE; then - echo "Not starting $DESC: fork=no specified in config file; run /etc/init.d/opensips debug instead" - exit 1 - fi -} - -check_opensips_config () -{ - # Check if opensips configuration is valid before starting the server - set +e - out=$($DAEMON -c 2>&1 > /dev/null) - retcode=$? - set -e - if [ "$retcode" != '0' ]; then - echo "Not starting $DESC: invalid configuration file!" - echo -e "\n$out\n" - exit 1 - fi -} - -create_radius_seqfile () -{ - # Create a radius sequence file to be used by the radius client if - # radius accounting is enabled. This is needed to avoid any issue - # with the file not being writable if opensips first starts as user - # root because DUMP_CORE is enabled and creates this file as user - # root and then later it switches back to user opensips and cannot - # write to the file. If the file exists before opensips starts, it - # won't change it's ownership and will be writable for both root - # and opensips, no matter what options are chosen at install time - RADIUS_SEQ_FILE=/var/run/opensips/opensips_radius.seq - if [ -d /var/run/opensips ]; then - chown ${USER}:${GROUP} /var/run/opensips - - if [ ! -f $RADIUS_SEQ_FILE ]; then - touch $RADIUS_SEQ_FILE - fi - - chown ${USER}:${GROUP} $RADIUS_SEQ_FILE - chmod 660 $RADIUS_SEQ_FILE - fi -} - -test -f $DAEMON || exit 0 - -# Load startup options if available -if [ -f $DEFAULTS ]; then - . $DEFAULTS || true -fi - -if [ "$RUN_OPENSIPS" != "yes" ]; then - echo "OpenSIPS not yet configured. Edit /etc/default/opensips first." - exit 0 -fi - -set -e - -S_MEMORY=$((`echo $S_MEMORY | sed -e 's/[^0-9]//g'`)) -P_MEMORY=$((`echo $P_MEMORY | sed -e 's/[^0-9]//g'`)) -[ -z "$USER" ] && USER=opensips -[ -z "$GROUP" ] && GROUP=opensips -[ $S_MEMORY -le 0 ] && S_MEMORY=32 -[ $P_MEMORY -le 0 ] && P_MEMORY=32 - -if test "$DUMP_CORE" = "yes" ; then - # set proper ulimit - ulimit -c unlimited - - # directory for the core dump files - # COREDIR=/home/corefiles - # [ -d $COREDIR ] || mkdir $COREDIR - # chmod 777 $COREDIR - # echo "$COREDIR/core.%e.sig%s.%p" > /proc/sys/kernel/core_pattern -fi - -OPTIONS="-f $CFGFILE -P $PIDFILE -m $S_MEMORY -M $P_MEMORY -u $USER -g $GROUP -w $HOMEDIR" - -case "$1" in - start|debug) - check_opensips_config - create_radius_seqfile - - if [ "$1" != "debug" ]; then - check_fork - fi - - # dirs under /var/run can go away on reboots. - mkdir -p "$HOMEDIR" - chmod 775 "$HOMEDIR" - chown "$USER:$GROUP" "$HOMEDIR" >/dev/null 2>&1 || true - - # Generate config from M4 - if [ -f $M4CFGFILE ]; then - m4 -Q $M4CFGFILE >$CFGFILE.tmp - if [ $? != 0 ]; then - echo "Cannot process m4 macro" - rm "$CFGFILE.tmp" - exit 1 - fi - - [ -e $CFGFILE ] || touch $CFGFILE - - # compare configs - if [ `md5sum $CFGFILE|awk '{print $1}'` != `md5sum $CFGFILE.tmp|awk '{print $1}'` ]; then - mkdir -p "$M4ARCHIVEDIR" - mv "$CFGFILE" "$M4ARCHIVEDIR/$NAME.cfg-`date +%Y%m%d_%H%M%S`" - fi - - mv "$CFGFILE.tmp" "$CFGFILE" - chown $USER:$GROUP $CFGFILE - chmod 640 $CFGFILE - fi - - echo -n "Starting $DESC: $NAME" - start-stop-daemon --start --quiet --pidfile $PIDFILE \ - --exec $DAEMON -- $OPTIONS || echo -n " already running" - echo "." - ;; - stop) - echo -n "Stopping $DESC: $NAME" - start-stop-daemon --oknodo --stop --quiet --pidfile $PIDFILE \ - --exec $DAEMON - echo "." - ;; - restart|force-reload) - check_opensips_config - create_radius_seqfile - - echo -n "Restarting $DESC: $NAME" - start-stop-daemon --oknodo --stop --quiet --pidfile \ - $PIDFILE --exec $DAEMON - sleep 1 - start-stop-daemon --start --quiet --pidfile \ - $PIDFILE --exec $DAEMON -- $OPTIONS - echo "." - ;; - status) - echo -n "Status of $DESC: " - if [ ! -r "$PIDFILE" ]; then - echo "$NAME is not running." - exit 3 - fi - if read pid < "$PIDFILE" && ps -p "$pid" > /dev/null 2>&1; then - echo "$NAME is running." - exit 0 - else - echo "$NAME is not running but $PIDFILE exists." - exit 1 - fi - ;; - *) - N=/etc/init.d/$NAME - echo "Usage: $N {start|stop|restart|force-reload|debug|status}" >&2 - exit 1 - ;; -esac - -exit 0 diff --git a/data/tutorials/osips_native/opensips/etc/opensips/opensips.cfg b/data/tutorials/osips_native/opensips/etc/opensips/opensips.cfg deleted file mode 100644 index 4c439a88c..000000000 --- a/data/tutorials/osips_native/opensips/etc/opensips/opensips.cfg +++ /dev/null @@ -1,275 +0,0 @@ -# -# OpenSIPS residential configuration script -# by OpenSIPS Solutions -# -# This script was generated via "make menuconfig", from -# the "Residential" scenario. -# You can enable / disable more features / functionalities by -# re-generating the scenario with different options.# -# -# Please refer to the Core CookBook at: -# http://www.opensips.org/Resources/DocsCookbooks -# for a explanation of possible statements, functions and parameters. -# - - -####### Global Parameters ######### - -log_level=3 -log_stderror=no -log_facility=LOG_LOCAL0 - -children=4 - -auto_aliases=no - -listen=udp:enp0s3:5060 -listen=udp:127.0.0.1:5080 -listen=udp:127.0.0.1:5060 -listen=udp:enp0s3:5080 - - - -####### Modules Section ######## - -#set module path -mpath="/usr/lib/x86_64-linux-gnu/opensips/modules/" - -#### SIGNALING module -loadmodule "signaling.so" - -#### StateLess module -loadmodule "sl.so" - -#### Transaction Module -loadmodule "tm.so" -modparam("tm", "fr_timeout", 5) -modparam("tm", "fr_inv_timeout", 30) -modparam("tm", "restart_fr_on_each_reply", 0) -modparam("tm", "onreply_avp_mode", 1) - -#### Record Route Module -loadmodule "rr.so" -/* do not append from tag to the RR (no need for this script) */ -modparam("rr", "append_fromtag", 0) - -#### MAX ForWarD module -loadmodule "maxfwd.so" - -#### SIP MSG OPerationS module -loadmodule "sipmsgops.so" - -#### FIFO Management Interface -loadmodule "mi_fifo.so" -modparam("mi_fifo", "fifo_name", "/tmp/opensips_fifo") -modparam("mi_fifo", "fifo_mode", 0666) - -#### URI module -# no need to load the module only to set varible to zero -# as default it's value is already 0 -# https://opensips.org/html/docs/modules/3.0.x/uri.html#param_use_uri_table -#loadmodule "uri.so" -#modparam("uri", "use_uri_table", 0) - -#### USeR LOCation module -loadmodule "usrloc.so" -modparam("usrloc", "nat_bflag", "NAT") -modparam("usrloc", "db_mode", 0) - -#### REGISTRAR module -loadmodule "registrar.so" -modparam("registrar", "tcp_persistent_flag", "TCP_PERSISTENT") - -#### ACCounting module -loadmodule "acc.so" -modparam("acc", "early_media", 0) -modparam("acc", "report_cancels", 0) -modparam("acc", "detect_direction", 0) - -loadmodule "proto_udp.so" - - -#### CGRateS module -loadmodule "dialog.so" -loadmodule "cgrates.so" -modparam("cgrates", "cgrates_engine", "127.0.0.1:2014") - - -####### Routing Logic ######## - -# main request routing logic - -route{ - - if (!mf_process_maxfwd_header(10)) { - send_reply(483,"Too Many Hops"); - exit; - } - - if (has_totag()) { - - # handle hop-by-hop ACK (no routing required) - if ( is_method("ACK") && t_check_trans() ) { - t_relay(); - exit; - } - - # sequential request within a dialog should - # take the path determined by record-routing - if ( !loose_route() ) { - # we do record-routing for all our traffic, so we should not - # receive any sequential requests without Route hdr. - send_reply(404, "Not here"); - exit; - } - - if (is_method("BYE")) { - # do accounting even if the transaction fails - do_accounting("log","failed"); - } - - # route it out to whatever destination was set by loose_route() - # in $du (destination URI). - route(relay); - exit; - } - - # CANCEL processing - if (is_method("CANCEL")) { - if (t_check_trans()) - t_relay(); - exit; - } - - # absorb retransmissions, but do not create transaction - t_check_trans(); - - if ( !(is_method("REGISTER") ) ) { - - if (is_myself("$fd")) { - - } else { - # if caller is not local, then called number must be local - - if (!is_myself("$rd")) { - send_reply(403,"Relay Forbidden"); - exit; - } - } - - } - - # preloaded route checking - if (loose_route()) { - xlog("L_ERR", - "Attempt to route with preloaded Route's [$fu/$tu/$ru/$ci]"); - if (!is_method("ACK")) - send_reply(403, "Preload Route denied"); - exit; - } - - # record routing - if (!is_method("REGISTER|MESSAGE")) - record_route(); - - if (!is_myself("$rd")) { - append_hf("P-hint: outbound\r\n"); - - route(relay); - } - - # requests for my domain - - if (is_method("PUBLISH|SUBSCRIBE")) { - send_reply(503, "Service Unavailable"); - exit; - } - - if (is_method("REGISTER")) { - - if (!save("location")) - sl_reply_error(); - - exit; - } - - if ($rU==NULL) { - # request with no Username in RURI - send_reply(484,"Address Incomplete"); - exit; - } - - # do lookup with method filtering - if (!lookup("location","m")) { - t_reply(404, "Not Found"); - exit; - } - - # check auth with CGRateS - $cgr_opt(GetMaxUsage) = 1; # also retrieve the max usage - $cgr_opt(GetAttributes) = 1; - $cgr_opt(GetSuppliers) = 1; - $cgr_opt(AuthorizeResources) = 1; - $cgr_opt(AllocateResources) = 1; - $cgr_opt(ReleaseResources) = 1; - $cgr_opt(ProcessThresholds) = 1; - $cgr_opt(ProcessStatQueues) = 1; - $cgr(RequestType) = "*prepaid"; - $cgr(OriginHost) = "127.0.0.1"; - $cgr(Source) = "OpenSIPS"; - - if (!async(cgrates_auth("$fU", "$rU"), resume_cgr_auth)) { - sl_send_reply(503, "Service Unavailable"); - exit; - } -} - -route [resume_cgr_auth] { - if ($rc == 0) { - xlog("Call not authorized: code=$cgrret!\n"); - send_reply(403, "Forbidden"); - exit; - } - $var(idx) = 0; - while ($(cgr_ret(AttributesDigest){s.select,$var(idx),,}) != NULL) { - $avp($(cgr_ret(AttributesDigest){s.select,$var(idx),,}{s.select,0,:})) - = $(cgr_ret(AttributesDigest){s.select,$var(idx),,}{s.select,1,:}); - $var(idx) = $var(idx) + 1; - } - cgrates_acc("cdr|missed", "$fU", "$rU"); - route(relay); -} - - -route[relay] { - # for INVITEs enable some additional helper routes - if (is_method("INVITE")) { - t_on_branch("per_branch_ops"); - t_on_reply("handle_nat"); - t_on_failure("missed_call"); - } - - if (!t_relay()) { - send_reply(500,"Internal Error"); - } - exit; -} - - - - -branch_route[per_branch_ops] { - xlog("new branch at $ru\n"); -} - - -onreply_route[handle_nat] { - xlog("incoming reply\n"); -} - - -failure_route[missed_call] { - if (t_was_cancelled()) { - exit; - } -}