kamailio-5.x: add ip translation to init
[feed/telephony.git] / net / kamailio-5.x / files / kamailio.init
index 75a8302b8e89621ef9195960b32a6773a9bc3d64..a7964070d9349a6762128699d366007ac7c4d604 100644 (file)
@@ -15,6 +15,69 @@ USE_PROCD=1
 
 #PROCD_DEBUG=1
 
+check_listen() {
+  local value="$1"
+  local type="$2"
+
+  local address
+  local has_proto=0
+  local one two three
+  local tmp
+
+  [ -z "$value" ] && {
+    $LOG_ERR empty $type entry
+    exit 1
+  }
+
+  # IPv6 addresses need to be enclosed in square brackets. If there are
+  # square brackets in the listen entry, just copy it.
+  echo "$value" | grep "\[[0-9:A-Fa-f]*\]" &> /dev/null && {
+    options=$options" -l $value"
+    return
+  }
+
+  # Bail if more than 2 colons.
+  [ $(echo "$value" | awk -F ":" '{print NF-1}') -gt 2 ] && {
+    $LOG_ERR init script does not understand $type entry \""$value"\"
+    exit 1
+  }
+
+  IFS=":" read one two three << EOF
+$value
+EOF
+
+  case "$one" in
+    udp|tcp|tls|sctp)
+      tmp="$two"
+      has_proto=1
+      ;;
+    *)
+      tmp="$one"
+      ;;
+  esac
+
+  if [ "$type" = "listen" ]; then
+    network_get_ipaddr address "$tmp" || address="$tmp"
+  else
+    network_get_ipaddr6 address "$tmp" && address="[$address]" || \
+                                                     address="$tmp"
+  fi
+
+  if [ -n "$three" ]; then
+    tmp="$one:$address:$three"
+  elif [ -n "$two" ]; then
+    if [ $has_proto = 1 ]; then
+      tmp="$one:$address"
+    else
+      tmp="$address:$two"
+    fi
+  else
+    tmp="$address"
+  fi
+
+  options=$options" -l $tmp"
+}
+
 start_service() {
   local enabled
   local user
@@ -40,6 +103,11 @@ start_service() {
   config_get cfg_file   general cfg_file   /etc/$NAME/$NAME.cfg
   config_get options    general options
 
+  . /lib/functions/network.sh
+
+  config_list_foreach general listen  check_listen listen
+  config_list_foreach general listen6 check_listen listen6
+
   if [ ! -d $RUNDIR ]; then
     mkdir -p $RUNDIR
     chown "$user":"$group" $RUNDIR