Annotation of embedaddon/hping2/rtt.c, revision 1.1
1.1 ! misho 1: /*
! 2: * $smu-mark$
! 3: * $name: rtt.c$
! 4: * $author: Salvatore Sanfilippo <antirez@invece.org>$
! 5: * $copyright: Copyright (C) 1999 by Salvatore Sanfilippo$
! 6: * $license: This software is under GPL version 2 of license$
! 7: * $date: Fri Nov 5 11:55:49 MET 1999$
! 8: * $rev: 3$
! 9: */
! 10:
! 11: #include <time.h>
! 12: #include <stdio.h>
! 13:
! 14: #include "hping2.h"
! 15: #include "globals.h"
! 16:
! 17: void minavgmax(float ms_delay)
! 18: {
! 19: static int avg_counter = 0;
! 20:
! 21: if (rtt_min == 0 || ms_delay < rtt_min)
! 22: rtt_min = ms_delay;
! 23: if (rtt_max == 0 || ms_delay > rtt_max)
! 24: rtt_max = ms_delay;
! 25: avg_counter++;
! 26: rtt_avg = (rtt_avg*(avg_counter-1)/avg_counter)+(ms_delay/avg_counter);
! 27: }
! 28:
! 29: int rtt(int *seqp, int recvport, float *ms_delay)
! 30: {
! 31: long sec_delay = 0, usec_delay = 0;
! 32: int i, tablepos = -1, status;
! 33:
! 34: if (*seqp != 0) {
! 35: for (i = 0; i < TABLESIZE; i++)
! 36: if (delaytable[i].seq == *seqp) {
! 37: tablepos = i;
! 38: break;
! 39: }
! 40: } else {
! 41: for (i=0; i<TABLESIZE; i++)
! 42: if (delaytable[i].src == recvport) {
! 43: tablepos = i;
! 44: break;
! 45: }
! 46: if (i != TABLESIZE)
! 47: *seqp = delaytable[i].seq;
! 48: }
! 49:
! 50: if (tablepos != -1)
! 51: {
! 52: status = delaytable[tablepos].status;
! 53: delaytable[tablepos].status = S_RECV;
! 54:
! 55: sec_delay = time(NULL) - delaytable[tablepos].sec;
! 56: usec_delay = get_usec() - delaytable[tablepos].usec;
! 57: if (sec_delay == 0 && usec_delay < 0)
! 58: usec_delay += 1000000;
! 59:
! 60: *ms_delay = (sec_delay * 1000) + ((float)usec_delay / 1000);
! 61: minavgmax(*ms_delay);
! 62: }
! 63: else
! 64: {
! 65: *ms_delay = 0; /* not in table.. */
! 66: status = 0; /* we don't know if it's DUP */
! 67: }
! 68:
! 69: /* SANITY CHECK */
! 70: if (*ms_delay < 0)
! 71: {
! 72: printf("\n\nSANITY CHECK in rtt.c FAILED!\n");
! 73: printf("- seqnum = %d\n", *seqp);
! 74: printf("- status = %d\n", status);
! 75: printf("- get_usec() = %ld\n", (long int) get_usec());
! 76: printf("- delaytable.usec = %ld\n",
! 77: (long int) delaytable[tablepos].usec);
! 78: printf("- usec_delay = %ld\n", usec_delay);
! 79: printf("- time(NULL) = %ld\n", (long int) time(NULL));
! 80: printf("- delaytable.sec = %ld\n",
! 81: (long int) delaytable[tablepos].sec);
! 82: printf("- sec_delay = %ld\n", sec_delay);
! 83: printf("- ms_delay = %f\n", *ms_delay);
! 84: printf("END SANITY CHECK REPORT\n\n");
! 85: }
! 86:
! 87: return status;
! 88: }
! 89:
! 90: void delaytable_add(int seq, int src, time_t sec, time_t usec, int status)
! 91: {
! 92: delaytable[delaytable_index % TABLESIZE].seq = seq;
! 93: delaytable[delaytable_index % TABLESIZE].src = src;
! 94: delaytable[delaytable_index % TABLESIZE].sec = sec;
! 95: delaytable[delaytable_index % TABLESIZE].usec = usec;
! 96: delaytable[delaytable_index % TABLESIZE].status = status;
! 97: delaytable_index++;
! 98: }
! 99:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>