#!/bin/sh linphone_socket=/tmp/linphonec-$(id -u) warn() { printf '%s\n' "$0" "${*:-something is wrong.}" >&2; } die() { warn "$@"; exit 1; } init() { out=$(linphonecsh init -CD 2>&1) [ -z "$out" ] && return case "$out" in *'running linphonec has been found'*) printf '%s\n' "$out" >&2 return 1 ;; '') return 0 ;; *) die "Error: unexpected output from linphonecsh: $out" ;; esac } wait_for_linphone_socket() { for n in $(seq 1 50); do test -e ${linphone_socket} && break sleep 0.1 done } getip() { upnpc -s|sed -ne 's/^ExternalIPAddress = //p' } generic() { linphonecsh generic "$*" } atexit() { if [ "$kill_linphonec" ]; then linphonecsh exit fi } init trap atexit EXIT wait_for_linphone_socket if ip=$(getip); then generic nat $ip generic firewall nat fi generic friend list