Annotation of embedaddon/hping2/rtt.c, revision 1.1.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>