chiark / gitweb /
wireshark/: Replace ancient dissector with a new one written in Lua.
[tripe] / wireshark / capture-session
diff --git a/wireshark/capture-session b/wireshark/capture-session
new file mode 100755 (executable)
index 0000000..4b5d81a
--- /dev/null
@@ -0,0 +1,77 @@
+#! /bin/sh -e
+###
+### A simple script for capturing TrIPE sessions, for testing the Wireshark
+### dissector.
+
+ty=${1?ty} param=${2-$ty}
+tripe=${TRIPE-tripe}
+rm -rf captmp
+mkdir captmp
+cd captmp
+
+cp ../keyring .
+for i in alice bob; do
+  key add -eforever -a$ty -t$i -pparam-$param tripe
+done
+cp keyring keyring.pub
+
+for i in alice bob; do
+  mkfifo $i.in $i.out
+  TRIPE_SLIPIF=/usr/bin/tripe-uslip \
+    $tripe -d. -as.$i -F -nslip -t$i -p0 <$i.in >$i.out 2>$i.err&
+done
+exec 3>alice.in 4<alice.out; alice_in=3 alice_out=4
+exec 5>bob.in 6<bob.out; bob_in=5 bob_out=6
+
+docmd () {
+  who=$1; shift
+  eval in=\$${who}_in out=\$${who}_out
+  echo "$*" >&$in
+  while read tag tail; do
+    : "$tag $tail"
+    case $tag in
+      INFO) echo $tail ;;
+      FAIL) echo >&2 "command \`$*' failed: $tail"; exit 10 ;;
+      OK) break ;;
+    esac
+  done <&$out
+}
+
+await () {
+  who=$1
+  eval out=\$${who}_out
+  while read tag kind rest; do
+    : "$tag $kind $rest"
+    case $tag,$kind in
+      NOTE,KXDONE) break ;;
+    esac
+  done <&$out
+}
+
+docmd alice watch n-tw
+docmd bob watch n-tw
+
+p_alice=$(docmd alice port)
+p_bob=$(docmd bob port)
+
+tshark -ilo -f"udp port $p_alice or udp port $p_bob" \
+       -w../cap.$param& shark=$!
+pause
+
+docmd alice add -cork bob 127.0.0.1 $p_bob
+c=$(docmd bob getchal)
+docmd alice greet bob $c
+docmd bob add alice 127.0.0.1 $p_alice
+await alice& walice=$!
+await bob& wbob=$!
+wait $walice
+wait $wbob
+
+echo ping | tripe-uslip -p bob
+x=$(tripe-uslip -g alice)
+
+pause
+
+exec 3>&- 4>&- 5>&- 6>&-
+kill $shark
+wait