summaryrefslogtreecommitdiff
path: root/rapid-tunneling-status
diff options
context:
space:
mode:
authorAlex Landau <alex.landau@xorcom.com>2008-12-08 10:54:46 +0000
committerAlex Landau <alex.landau@xorcom.com>2008-12-08 10:54:46 +0000
commit9489a7eeeae753b144db0382423c432c0b4f960e (patch)
tree93a4a3768d471527af1a2bb1d23746e336a89441 /rapid-tunneling-status
parent817f3069a8eb684675d266d4b95aa0bb1a4de9ff (diff)
rapid-tunneling:
- Added status checker. - Tunnel is backgrounded with start-stop-daemon. git-svn-id: svn+ssh://xorcom/home/svn/debs/components/rapid-tunneling@6438 283159da-0705-0410-b60c-f2062b4bb6ad
Diffstat (limited to 'rapid-tunneling-status')
-rwxr-xr-xrapid-tunneling-status58
1 files changed, 58 insertions, 0 deletions
diff --git a/rapid-tunneling-status b/rapid-tunneling-status
new file mode 100755
index 0000000..e270ea1
--- /dev/null
+++ b/rapid-tunneling-status
@@ -0,0 +1,58 @@
+#!/bin/sh
+
+if [ "$1" = "--help" ]; then
+ echo "Usage: $0 [-p] [<pid-file>]" 1>&2
+ echo " -p: Print only pid of SSH process (if connecting or connected)." 1>&2
+ echo " Otherwise, print status" 1>&2
+ echo " Exit code: 0 if connected, 1 if connecting, 2 if not connected." 1>&2
+ echo " $0 -s [<pid-file>]" 1>&2
+ echo " -s: Stop the tunnel" 1>&2
+ exit 255
+fi
+
+if [ "$1" = "-p" ]; then
+ showpid=1
+ shift
+elif [ "$1" = "-s" ]; then
+ stop=1
+ shift
+fi
+pidfile="$1"
+[ -z "$pidfile" ] && pidfile="$HOME/pid"
+
+connected()
+{
+ [ "$showpid" = 1 ] && echo $pid || echo "Connected"
+ exit 0
+}
+
+connecting()
+{
+ [ "$showpid" = 1 ] && echo $pid || echo "Connecting"
+ exit 1
+}
+
+not_connected()
+{
+ [ "$showpid" = 1 ] || echo "Not connected"
+ exit 2
+}
+
+stop_it()
+{
+ kill $pid 2>/dev/null
+ exit 0
+}
+
+pid=`cat "$pidfile" 2>/dev/null`
+[ "$pid" ] || not_connected
+kill -s 0 $pid 2>/dev/null || not_connected
+for i in /proc/$pid/fd/*; do
+ socket=`readlink $i 2>/dev/null | sed -n 's/^socket:\[\(.*\)\]$/\1/p'`
+ [ "$socket" ] || continue
+ state=`awk '$10 == '"$socket"' {print $4}' /proc/net/tcp`
+ [ "$state" ] || continue
+ [ "$stop" = 1 ] && stop_it
+ [ "$state" = "01" ] && connected || connecting
+done
+not_connected