12949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source ProjectBEGIN	{
22949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	# we need the number of bytes in a packet to do the output
32949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	# in packet numbers rather than byte numbers.
42949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	if (packetsize <= 0)
52949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		packetsize = 512
62949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	expectNext = 1
72949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	lastwin = -1
82949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	}
92949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	{
102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	# convert tcp trace to send/ack form.
112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	n = split ($1,t,":")
122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	tim = t[1]*3600 + t[2]*60 + t[3]
132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	if (NR <= 1) {
142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		tzero = tim
152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		ltim = tim
162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		OFS = "\t"
172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	}
182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	if ($6 != "ack") {
192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		# we have a data packet record:
202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		# ignore guys with syn, fin or reset 'cause we
212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		# can't handle their sequence numbers.  Try to
222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		# detect and add a flag character for 'anomalies':
232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		#   * -> re-sent packet
242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		#   - -> packet after hole (missing packet(s))
252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		#   # -> odd size packet
262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		if ($5 !~ /[SFR]/) {
272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project			i = index($6,":")
282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project			j = index($6,"(")
292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project			strtSeq = substr($6,1,i-1)
302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project			endSeq = substr($6,i+1,j-i-1)
312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project			len = endSeq - strtSeq
322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project			id = endSeq
332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project			if (! timeOf[id])
342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project				timeOf[id] = tim
352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project			if (endSeq - expectNext < 0)
362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project				flag = "*"
372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project			else {
382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project				if (strtSeq - expectNext > 0)
392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project					flag = "-"
402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project				else if (len != packetsize)
412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project					flag = "#"
422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project				else
432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project					flag = " "
442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project				expectNext = endSeq
452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project			}
462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project			printf "%7.2f\t%7.2f\t%s send %s %d", tim-tzero, tim-ltim,\
472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project				flag, $5, strtSeq
482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project			if (++timesSent[id] > 1)
492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project				printf "  (%.2f) [%d]", tim - timeOf[id], timesSent[id]
502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project			if (len != packetsize)
512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project				printf " <%d>", len
522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		}
532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	} else {
542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		id = $7
552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		printf "%7.2f\t%7.2f\t%s  ack %s %d", tim-tzero, tim-ltim,\
572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project			flag, $5, id
582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		if ($9 != lastwin) {
592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project			printf "  win %d", $9
602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project			lastwin = $9
612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		}
622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		printf "  (%.2f)", tim - timeOf[id]
632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		if (++timesAcked[id] > 1)
642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project			printf " [%d]", timesAcked[id]
652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	}
662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	printf "\n"
672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	ltim = tim
682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	}
69