move old kamikaze out of trunk - will put buildroot-ng in there as soon as all the...
[openwrt/svn-archive/archive.git] / openwrt / package / pipacs / src / parser.c
diff --git a/openwrt/package/pipacs/src/parser.c b/openwrt/package/pipacs/src/parser.c
deleted file mode 100644 (file)
index 330d7cd..0000000
+++ /dev/null
@@ -1,907 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include<string.h>
-#include <time.h>
-//#include <process.h>
-#include "parser.h"
-
-#define printit
-
-extern BOOL bFilter;
-extern int iline;
-extern char * author;
-extern char myipname[];
-extern int justheader;
-extern int gre,sortbysize,fromip,toip;
-int nomac=1;
-int mostird=0;
-char mypbuff[2048];
-// accounting variables
-#define MAXHASH 0xffff
-#define MAXTCPPORT 4096
-unsigned long *iph=NULL; //[MAXHASH];
-
-typedef struct {
-                unsigned short from;
-                unsigned short to;
-                unsigned long byte;
-                unsigned short pkt;
-                unsigned short sport;
-                unsigned short dport;
-} ta;
-
-ta *acc = NULL;
-unsigned long tcppb[MAXTCPPORT];
-unsigned long tcppp[MAXTCPPORT];
-unsigned long typp[255];
-unsigned long typb[255];
-unsigned long udpb,tcpb,udpp,tcpp;
-time_t elapsed=0;
-int iCycle=10;
-int iScreen=1;
-int iFile=0;
-long lNum=0;
-char filename[128];
-char intlist[128];
-int iRun=1;
-int iDetail=0;
-FILE *f=NULL;
-int iProto=0;
-int iSum=0;
-char execname[255];
-char pbuf[8196];
-char str[255];
-extern char pattern[];
-#ifndef LINUX
-int iLnxplus=0;                 // Windows buffer without the MAC frame !
-#else
-int iLnxplus=14;                        // Linux plus IP header len =14 !!!
-#endif
-//
-// A list of protocol types in the IP protocol header
-//
-char *szProto[255] = {"IP",     //  0
-                   "ICMP",         //  1
-                   "IGMP",         //  2
-                   "GGP",          //  3
-                   "IP",           //  4
-                   "ST",           //  5
-                   "TCP",          //  6
-                   "UCL",          //  7
-                   "EGP",          //  8
-                   "IGP",          //  9
-                   "BBN-RCC-MON",  // 10
-                   "NVP-II",       // 11
-                   "PUP",          // 12
-                   "ARGUS",        // 13
-                   "EMCON",        // 14
-                   "XNET",         // 15
-                   "CHAOS",        // 16
-                   "UDP",          // 17
-                   "MUX",          // 18
-                   "DCN-MEAS",     // 19
-                   "HMP",          // 20
-                   "PRM",          // 21
-                   "XNS-IDP",      // 22
-                   "TRUNK-1",      // 23
-                   "TRUNK-2",      // 24
-                   "LEAF-1",       // 25
-                   "LEAF-2",       // 26
-                   "RDP",          // 27
-                   "IRTP",         // 28
-                   "ISO-TP4",      // 29
-                   "NETBLT",       // 30
-                   "MFE-NSP",      // 31
-                   "MERIT-INP",    // 32
-                   "SEP",          // 33
-                   "3PC",          // 34
-                   "IDPR",         // 35
-                   "XTP",          // 36
-                   "DDP",          // 37
-                   "IDPR-CMTP",    // 38
-                   "TP++",         // 39
-                   "IL",           // 40
-                   "SIP",          // 41
-                   "SDRP",         // 42
-                   "SIP-SR",       // 43
-                   "SIP-FRAG",     // 44
-                   "IDRP",         // 45
-                   "RSVP",         // 46
-                   "GRE",          // 47
-                   "MHRP",         // 48
-                   "BNA",          // 49
-                   "IPSEC-ESP",     // 50
-                   "IPSEC-AH",      // 51
-                   "I-NLSP",       // 52
-                   "SWIPE",        // 53
-                   "NHRP",         // 54
-                   "?55?",   // 55
-                   "?56?",   // 56
-                   "SKIO",   // 57
-                   "V6ICMP",   // 58
-                   "V6NoNXT",   // 59
-                   "V6OPT",   // 60
-                   "int.host",  // 61
-                   "CFTP",         // 62
-                   "loc.net",           // 63
-                   "SAT-EXPAK",    // 64
-                   "KRYPTOLAN",    // 65
-                   "RVD",          // 66
-                   "IPPC",         // 67
-                   "dist.fs", // 68
-                   "SAT-MON",    // 69
-                   "VISA",       // 70
-                   "IPCV",       // 71
-                   "CPNX",       // 72
-                   "CPHB",       // 73
-                   "WSN",        // 74
-                   "PVP",        // 75
-                   "BR-SAT-MON", // 76
-                   "SUN-ND",     // 77
-                   "WB-MON",     // 78
-                   "WB-EXPAK",   // 79
-                   "ISO-IP",     // 80
-                   "VMTP",       // 81
-                   "SECURE-VMTP",// 82
-                   "VINES",      // 83
-                   "TTP",        // 84
-                   "NSFNET-IGP", // 85
-                   "DGP",        // 86
-                   "TCF",        // 87
-                   "IGRP",       // 88
-                   "OSPF",    // 89
-                   "Sprite-RPC", // 90
-                   "LARP",       // 91
-                   "MTP",        // 92
-                   "AX.25",      // 93
-                   "IPIP",       // 94
-                   "MICP",       // 95
-                   "SCC-SP",     // 96
-                   "ETHERIP",    // 97
-                   "ENCAP",      // 98
-                   "priv.enc",    // 99
-                   "GMTP"        // 99
-                  };
-//
-// The types of IGMP messages
-//
-char *szIgmpType[] = {"",
-                      "Host Membership Query",
-                      "HOst Membership Report",
-                      "",
-                      "",
-                      "",
-                      "Version 2 Membership Report",
-                      "Leave Group",
-                                          "",
-                                          ""
-                     };
-
-//
-// Function: PrintRawBytes
-//
-// Description:
-//    This function simply prints out a series of bytes
-//    as hexadecimal digits.
-//
-void PrintRawBytes(BYTE *ptr, DWORD len)
-{
-    int        i,j;
-//      if (! iFile) {
-*(ptr+len)=0;
-if ((*pattern==0) || strstr(ptr,pattern) ) {
-        fprintf(iFile?f:stdout,"%s",pbuf);
-        fprintf(iFile?f:stdout,"   " );
-                while (len > 0)    {
-        for(i=0; i < 16; i++)   {
-            fprintf(iFile?f:stdout,"%x%x ", HI_WORD(*ptr), LO_WORD(*ptr));
-            len--;
-            ptr++;
-            if (len == 0) {j=i++; while(++j < 16) fprintf(iFile?f:stdout,"   ");  break; }
-        }
-          fprintf(iFile?f:stdout," ");
-        for(j=0; j < i; j++)    fprintf(iFile?f:stdout,"%c",isprint(*(ptr-i+j))?*(ptr-i+j):'.');
-        if (len) fprintf(iFile?f:stdout,"\n   ");
-    }
-//      } else {
-//              fwrite(ptr,sizeof(BYTE),len,f);
-//      }
-}
-}
-
-static char *ICMPTypeTable[]={
-    "Echo Reply", "ICMP 1", "ICMP 2", "Dest Unreachable","SrcQuench", "Redirect", "6", "7","Echo Request","9","10",
-    "Time Exceed", "ParamPrblm", "Timestamp", "Timestamp reply","InfoRqst", "InfoRply"
-};
-static char *Dstunreach[]={
-"net unreach.","host unreach.","protocol unreach.","port unreach.",
-"frag needed","source route?","",""
-};
-int DecodeICMPHeader(WSABUF *wsabuf, DWORD iphdrlen) {
-    BYTE          *hdr = (BYTE *)((BYTE *)wsabuf->buf + iphdrlen + iLnxplus );
-    unsigned short type,code,chksum,
-                   id,
-                   seq;
- unsigned long resptime,r1,r2;
-    BYTE *hhh;
-    SOCKADDR_IN    addr;
-    type=*hdr++; code=*hdr++;
-    sprintf(str," Type:%-12s Code:%3d,",ICMPTypeTable[type],code);
-
-    strcat(pbuf,str);
-    memcpy(&chksum, hdr, 2);
-    hdr += 2; hhh=hdr;
-    memcpy(&id, hdr, 2);
-    hdr += 2;
-    memcpy(&seq, hdr, 2);
-    hdr+=2;
-//    memcpy(&resptime, hdr, 4);
-//   hdr+=4;
-    switch (type) {
-    case 3:
-        memcpy(&addr.sin_addr.s_addr, hdr+16, 4);
-        if (code==4 ) sprintf(str,"frag needed-Max MTU:%u at %-15s\n",ntohs(seq), inet_ntoa(addr.sin_addr));
-        else sprintf(str,"%s at %-15s\n",Dstunreach[code&7],inet_ntoa(addr.sin_addr));
-        hdr+=iphdrlen;
-        break;
-    case 11:
-        memcpy(&addr.sin_addr.s_addr, hdr+16, 4);
-        sprintf(str,"%s  at %-15s\n",code?"frag reass. exceed":"ttl exceed",inet_ntoa(addr.sin_addr));
-        hdr+=iphdrlen;
-        break;
-    case 12:
-        memcpy(&addr.sin_addr.s_addr, hdr+16, 4);
-        sprintf(str," err:%d  at %-15s\n",id,inet_ntoa(addr.sin_addr));
-        hdr+=iphdrlen;
-        break;
-    case 4:
-        memcpy(&addr.sin_addr.s_addr, hdr+16, 4);
-        sprintf(str," wait for %-15s\n",ntohs(id),inet_ntoa(addr.sin_addr));
-        hdr+=iphdrlen;
-        break;
-    case 5:
-        memcpy(&addr.sin_addr.s_addr, hhh, 4);
-        sprintf(str," from gw: %-15s\n",inet_ntoa(addr.sin_addr));
-        hdr+=iphdrlen;
-        break;
-    case 0:
-    case 8:
-         sprintf(str," Id:%3u Seq:%3u\n",ntohs(id),ntohs(seq));
-         break;
-    case 13:
-    case 14:
-        memcpy(&resptime, hdr, 4);
-        hdr+=4;
-        memcpy(&r1, hdr, 4);
-        hdr+=4;
-        memcpy(&r2, hdr, 4);
-        hdr+=4;
-        sprintf(str," Id:%3u Seq:%3d Rec/Tr %ld/%ld ms\n",ntohs(id),ntohs(seq),ntohl(r1)-ntohl(resptime),ntohl(r2)-ntohl(resptime));
-        break;
-    case 15:
-    case 16:
-         sprintf(str," Id:%3u Seq:%3d\n",ntohs(id),ntohs(seq));
-         break;
-    }
-    strcat(pbuf,str);
-    return hdr-(BYTE *)(wsabuf->buf + iphdrlen + iLnxplus);
-}
-
-//
-// Function: DecodeIGMPHeader
-//
-// Description:
-//    This function takes a pointer to a buffer containing
-//    an IGMP packet and prints it out in a readable form.
-//
-
-int DecodeIGMPHeader(WSABUF *wsabuf, DWORD iphdrlen) {
-    BYTE          *hdr = (BYTE *)((BYTE *)wsabuf->buf + iphdrlen + iLnxplus);
-    unsigned short chksum,
-                   version,
-                   type,
-                   maxresptime;
-    SOCKADDR_IN    addr;
-    version = HI_WORD(*hdr);
-    type    = LO_WORD(*hdr);
-
-    hdr++;
-    maxresptime = *hdr;
-    hdr++;
-
-    memcpy(&chksum, hdr, 2);
-    chksum = ntohs(chksum);
-    hdr += 2;
-
-    memcpy(&(addr.sin_addr.s_addr), hdr, 4);
-    sprintf(str,"   IGMP HEADER:\n");
-    strcat(pbuf,str);
-    if ((type == 1) || (type == 2))        version = 1;
-    else        version = 2;
-    sprintf(str,"   IGMP Version = %d\n   IGMP Type = %s\n",version, szIgmpType[type]);
-    strcat(pbuf,str);
-    if (version == 2) {
-     sprintf(str,"   Max Resp Time = %d\n", maxresptime);
-     strcat(pbuf,str);
-    }
-    sprintf(str,"   IGMP Grp Addr = %s\n", inet_ntoa(addr.sin_addr));
-    strcat(pbuf,str);
-
-    return 8;
-}
-
-//
-// Function: DecodeUDPHeader
-//
-// Description:
-//    This function takes a buffer which points to a UDP
-//    header and prints it out in a readable form.
-//
-int DecodeUDPHeader(WSABUF *wsabuf, DWORD iphdrlen) {
-    BYTE          *hdr = (BYTE *)((BYTE *)wsabuf->buf + iphdrlen + iLnxplus);
-    unsigned short shortval,
-                   udp_src_port,
-                   udp_dest_port,
-                   udp_len,
-                   udp_chksum;
-    memcpy(&shortval, hdr, 2);
-    udp_src_port = ntohs(shortval);
-    hdr += 2;
-
-    memcpy(&shortval, hdr, 2);
-    udp_dest_port = ntohs(shortval);
-    hdr += 2;
-
-    memcpy(&shortval, hdr, 2);
-    udp_len = ntohs(shortval);
-    hdr += 2;
-
-    memcpy(&shortval, hdr, 2);
-    udp_chksum = ntohs(shortval);
-    hdr += 2;
-
-    sprintf(str," UDP:  SPort: %-05d  | DPort: %-05d",udp_src_port, udp_dest_port);
-    strcat(pbuf,str);
-    sprintf(str," | Len: %-05d | CSum: 0x%08x\n",udp_len, udp_chksum);
-    strcat(pbuf,str);
-    return hdr-(BYTE *)(wsabuf->buf + iphdrlen + iLnxplus);
-}
-
-//
-// Function: DecodeTCPHeader
-//
-// Description:
-//    This function takes a buffer pointing to a TCP header
-//    and prints it out in a readable form.
-//
-int DecodeTCPHeader(WSABUF *wsabuf, DWORD iphdrlen) {
-    BYTE           *hdr = (BYTE *)((BYTE *)wsabuf->buf + iphdrlen + iLnxplus);
-    unsigned short shortval;
-    unsigned long   longval;
-
-    memcpy(&shortval, hdr, 2);
-    shortval = ntohs(shortval);
-    sprintf(str," TCP: SPort: %u", shortval);
-    strcat(pbuf,str);
-    hdr += 2;
-
-    memcpy(&shortval, hdr, 2);
-    shortval = ntohs(shortval);
-    sprintf(str,"  DPort: %u", shortval);
-    strcat(pbuf,str);
-    hdr += 2;
-
-    memcpy(&longval, hdr, 4);
-    longval = ntohl(longval);
-    sprintf(str," Seq: %lX", longval);
-    strcat(pbuf,str);
-    hdr += 4;
-
-    memcpy(&longval, hdr, 4);
-    longval = ntohl(longval);
-    sprintf(str," ACK: %lX", longval);
-    strcat(pbuf,str);
-    hdr += 4;
-//    printf("   Header Len : %d (bytes %d)\n", HI_WORD(*hdr), (HI_WORD(*hdr) * 4));
-
-    memcpy(&shortval, hdr, 2);
-    shortval = ntohs(shortval) & 0x3F;
-    sprintf(str," Flags: ");
-    strcat(pbuf,str);
-    if (shortval & 0x20)        strcat(pbuf,"URG ");
-    if (shortval & 0x10)        strcat(pbuf,"ACK ");
-    if (shortval & 0x08)        strcat(pbuf,"PSH ");
-    if (shortval & 0x04)        strcat(pbuf,"RST ");
-    if (shortval & 0x02)        strcat(pbuf,"SYN ");
-    if (shortval & 0x01)        strcat(pbuf,"FIN ");
-    strcat(pbuf,"\n");
-    hdr += 2;
-
-    memcpy(&shortval, hdr, 2);
-    shortval = ntohs(shortval);
-//    printf("   Window size: %d\n", shortval);
-    hdr += 2;
-
-    memcpy(&shortval, hdr, 2);
-    shortval = ntohs(shortval);
-//    printf("   TCP Chksum : %d\n", shortval);
-    hdr += 2;
-
-    memcpy(&shortval, hdr, 2);
-    shortval = ntohs(shortval);
-    hdr += 2;
-//    printf("   Urgent ptr : %d\n", shortval);
-
-    return hdr-(BYTE *)(wsabuf->buf + iphdrlen + iLnxplus);
-}
-
-int DecodeGREHeader(WSABUF *wsabuf, DWORD iphdrlen,DWORD bytesret,
- unsigned int srcip, unsigned short srcport, unsigned long srcnet,unsigned int destip, unsigned short destport, unsigned long destnet,
- unsigned short xport,unsigned int xip, unsigned long xnet)
- {
-    BYTE           *hdr = (BYTE *)((BYTE *)wsabuf->buf + iphdrlen + iLnxplus);
-    unsigned short shortval;
-    unsigned long   longval;
-    int ipe;
-    BYTE           *orihdr;
-    char *sstr;
-    SOCKADDR_IN         srcaddr;
-
-    orihdr=hdr;
-    memcpy(&shortval, hdr, 2);
-    shortval = ntohs(shortval);
-    sprintf(str," GRE Flag: %u Prot:", shortval);
-    strcat(mypbuff,str);
-    hdr += 2;
-
-    memcpy(&shortval, hdr, 2);
-    shortval = ntohs(shortval);
-    ipe=0;
-    sstr=str;
-//    sprintf(str,"  Prot: %u", shortval);
-    switch ( shortval ) {
-    case 4: sstr="SNA";
-       break;
-    case 0xfe: sstr="OSI";
-       break;
-    case 0x200: sstr="PUP";
-       break;
-    case 0x600: sstr="XNS";
-       break;
-    case 0x800: sstr="IP";
-        ipe=1;
-       break;
-    case 0x804: sstr="Chaos";
-       break;
-    case 0x806: sstr="ARP";
-       break;
-    case 0x6558: sstr="Tr.bridge";
-       break;
-    default: sprintf(str,"%u", shortval);
-       break;
-    }
-    hdr += 2;
-    strcat(mypbuff,sstr);
-    if (ipe && gre) {
-        int plusment,jj,protoment;
-        plusment=iLnxplus;
-        protoment=iProto;
-        if (iProto==47)  iProto=0;
-        iLnxplus+=4;
-        nomac=0;
-        iLnxplus=plusment+24;
-        DecodeIPHeader(wsabuf,srcip,srcport,srcnet,destip,destport,destnet,bytesret,xport,xip,xnet);
-        nomac=1;
-        iLnxplus=plusment;
-        iProto=protoment;
-    }
-return -1;
-//    return hdr-(BYTE *)(wsabuf->buf + iphdrlen + iLnxplus);
-}
-
-
-int ClearIPAcc() {
-        unsigned long i;
-        ta *tai;
-        for(i=0;i<MAXHASH;i++) *(iph + i)=0;
-        tai=acc;
-        for(i=0;i<MAXHASH;i++) { tai->from=tai->to=0; tai++; }
-        for (i=0;i<MAXTCPPORT; i++) tcppb[i]=tcppp[i]=0;
-        udpb=udpp=tcpp=tcpb=0;
-        for (i=0;i<255; i++) typp[i]=0;
-        for (i=0;i<255; i++) typb[i]=0;
-        return 0;
-        };
-
-int InitIPAcc() {
-        acc=malloc(MAXHASH*sizeof(ta));
-        iph=malloc(MAXHASH*sizeof(long));
-        if (!acc || !iph ) return 0;
-        ClearIPAcc();
-        time(&elapsed);
-        return 1;
-}
-
-int bytesort(const void *s1, const void *s2) { // sorting tale in byte order
-        ta *d1;
-        ta *d2;
-        d1= (ta *)s1; d2=(ta *)s2;
-        if (d1->byte > d2->byte) return -1;
-        if (d1->byte < d2->byte) return 1;
-        return 0;
-}
-int countsort(const void *s1, const void *s2) { // sorting tale in packet count order
-        ta *d1;
-        ta *d2;
-        d1= (ta *)s1; d2=(ta *)s2;
-        if (d1->pkt > d2->pkt) return -1;
-        if (d1->pkt < d2->pkt) return 1;
-        return 0;
-}
-int CloseIPAcc( long ti) {
-        unsigned long i;
-        ta *tai;
-    SOCKADDR_IN    srcaddr;
-    SOCKADDR_IN    dstaddr;
-        float ff;
-        char str[16];
-        unsigned long j,k,l;
-        int lin=0;
-        int linn;
-
-        time(&elapsed);
-        if (iFile) f=fopen(filename,"w+");
-        k=0;
-        if (sortbysize) qsort(acc,MAXHASH,sizeof(ta),bytesort);
-       else  qsort(acc,MAXHASH,sizeof(ta),countsort);
-        ff=0.0;
-        for (i=0;i<255;i++) ff+=typb[i];
-        for (i=0; i<MAXHASH; i++) {
-            tai=acc + i;
-            if ((tai->from!=0) && (tai->to!=0)) ++k;
-        }
-        if (iScreen) {
-#ifndef LINUX
-                system("cls");
-#else
-                system("clear");
-//              printf("\033[1~");
-#endif
-                printf("%-16s Speed: %5.2f Kbit/s , %ld IP pairs / %ld secs.    %s@%s.hu",myipname,ff/ti/1024*8,k,ti,author,author);
-                printf("\nProt:"); j=0; ++lin;
-                while (1) {
-                        l=k=0;
-                        for (i=0;i<100;i++) if ( typb[i]>k) { k=typb[i]; l=i; }
-                        if (k==0) break;
-                        if ((j>0) && ((j%3)==0)) { printf("\n     "); ++lin; }
-                        if (k>1024*1024) printf(" %-8.8s:%5.1fk/%-6.1f M",szProto[l],(float)typp[l]/1024,(float)k/(1024*1024));
-                        else if (k>1024) printf(" %-8.8s:%5ld/%-6.1f k",szProto[l],typp[l],(float)k/1024);
-                        else printf(" %-8.8s:%5ld/%-8ld",szProto[l],typp[l],k);
-                        typb[l]=0;
-                        ++j;
-                }
-                printf("\nPort:"); j=0; ++lin;
-                k=0; linn=lin;
-                while (1) {
-                        l=k=0;
-                        for (i=0;i<MAXTCPPORT;i++) if (tcppb[i]>k) { k=tcppb[i]; l=i; }
-                        if (k==0) break;
-                        if (j && (j%4)==0) {
-                                if (lin >= linn+1) break;
-                                printf("\n     ");
-                                ++lin;
-                        }
-                        if (k>1024*1024) printf(" %04d:%4.1fk/%-5.1f M",l,(float)tcppp[l]/1024,(float)k/(1024*1024));
-                        else if (k>1024) printf(" %04d:%4ld/%-5.1f k",l,tcppp[l],(float)k/1024);
-                        else printf(" %04d:%4ld/%-7ld",l,tcppp[l],k);
-                        tcppb[l]=0;
-                        ++j;
-                }
-        } else if (f) {
-                fprintf(f,"%-16s Speed: %5.2f Kbit/s , %ld IP pairs / %ld secs.    %s@%s.hu",myipname,ff/ti/1024*8,k,ti,author,author);
-                fprintf(f,"\nProt:"); j=0;
-                while (1) {
-                        l=k=0;
-                        for (i=0;i<100;i++) if ( typb[i]>k) { k=typb[i]; l=i; }
-                        if (k==0) break;
-                        if (k>1024*1024) fprintf(f," %-8.8s:%5.1fk/%-6.1f M",szProto[l],(float)typp[l]/1024,(float)k/(1024*1024));
-                        else if (k>1024) fprintf(f," %-8.8s:%5ld/%-6.1f k",szProto[l],typp[l],(float)k/1024);
-                        else fprintf(f," %-8.8s:%5ld/%-8ld",szProto[l],typp[l],k);
-                        typb[l]=0;
-                        ++j;
-                }
-                printf("\nPort:"); j=0;
-                k=0; linn=lin;
-                while (1) {
-                        l=k=0;
-                        for (i=0;i<MAXTCPPORT;i++) if (tcppb[i]>k) { k=tcppb[i]; l=i; }
-                        if (k==0) break;
-                        if (k>1024*1024) fprintf(f," %04d:%4.1fk/%-5.1f M",l,(float)tcppp[l]/1024,(float)k/(1024*1024));
-                        else if (k>1024) fprintf(f," %04d:%4ld/%-5.1f k",l,tcppp[l],(float)k/1024);
-                        else fprintf(f," %04d:%4ld/%-7ld",l,tcppp[l],k);
-                        tcppb[l]=0;
-                        ++j;
-                }
-       }
-
-        for (i=0; i<MAXHASH; i++) {
-                tai=acc + i;
-                if ((tai->from!=0) && (tai->to!=0)) { ++k;
-                if (!iSum) {
-                        dstaddr.sin_addr.s_addr = htonl(*(iph+tai->from));
-                        srcaddr.sin_addr.s_addr = htonl(*(iph+(tai->to)));
-                        strcpy(str,inet_ntoa(dstaddr.sin_addr));
-                        if (iScreen && (++lin<iline) ) printf("\n%-15s\t%-15s\t%5d pkt, %10ld byte :%7.2f Kbps",str,inet_ntoa(srcaddr.sin_addr),tai->pkt,tai->byte,((float)tai->byte)/ti/1024*8);
-                        if (f) fprintf(f,"%-15s\t%-15s\t%d\t%ld\n",str,inet_ntoa(srcaddr.sin_addr),tai->pkt,tai->byte);
-                }
-                }
-        }
-      if (iScreen) printf("\n");
-#ifdef LINUX
-        if (iScreen) fflush(stdout);
-#endif
-        ClearIPAcc();
-        if (f) {
-                char cmdline[255];
-                fclose(f);
-//              if (*execname) _spawnle(_P_NOWAIT,execname,execname,filename);
-//              if (*execname) _execl(execname,execname);
-                if (*execname) {
-#ifndef LINUX
-                sprintf(cmdline,"%s %s",execname,filename);
-#else
-                sprintf(cmdline,"%s %s",execname,filename);
-#endif
-                system(cmdline);
-//              iRun=0;
-                }
-        }
-        f=NULL;
-        return 0;
-}
-
-unsigned short FindIPHash( unsigned long ip ) {
-        unsigned short hashval;
-        unsigned long *ipt;
-
-        hashval = (unsigned short)(((ip&0xFFFF0000)>>16) ^ (ip&0x0000FFFF));
-        ipt=iph + hashval;
-        while (*ipt != 0 && (*ipt!=ip)) { ipt++; hashval++; }
-        if (*ipt==0) *ipt=ip;
-        return hashval;
-}
-
-unsigned short SetIPAcc( unsigned long src, unsigned long dst, unsigned long byte, unsigned short typ, unsigned short sport, unsigned short dport) {
-        unsigned short from,to,hash;
-        ta *tai;
-        hash=0;
-        if (src) {
-
-                if (fromip) from=FindIPHash(src); else from=-1;
-                if (toip) to=FindIPHash(dst); else to=-1;
-                hash=from^to;
-                tai=acc + hash;
-                while ( ((tai->from!=from) && (tai->to!=to)) && ((tai->from!=0) && (tai->to!=0)) ) {tai++; hash++; }
-                if ((tai->from==0)&&(tai->to==0)) {
-                        tai->byte=byte; tai->from=from; tai->to=to; tai->pkt=1;
-                } else { tai->byte+=byte; tai->pkt++; }
-
-                typp[typ]++;
-                typb[typ]+=byte;
-                if ((sport>0) && (sport<MAXTCPPORT)) { tcppp[sport]++; tcppb[sport]+=byte; }
-                if ((dport>0) && (dport<MAXTCPPORT)) { tcppp[dport]++; tcppb[dport]+=byte; }
-        }
-        return hash;
-}
-
-//
-// Function: DecodeIPHeader
-//
-// Description:
-//    This function takes a pointer to an IP header and prints
-//    it out in a readable form.
-//
-int DecodeIPHeader(WSABUF *wsabuf, unsigned int srcip, unsigned short srcport, unsigned long srcnet,
-        unsigned int destip, unsigned short destport, unsigned long destnet, DWORD bytesret,
-        unsigned short xport,unsigned int xip, unsigned long xnet)
-{
-    BYTE                        *hdr = (BYTE *)wsabuf->buf,
-                                        *nexthdr = NULL,
-                                        *ohdr;
-    unsigned short      shortval;
-    SOCKADDR_IN         srcaddr,
-                                        destaddr;
-
-    unsigned short ip_version,
-                   ip_hdr_len,
-                   ip_tos,
-                   ip_total_len,
-                   ip_id,
-                   ip_flags,
-                   ip_ttl,
-                   ip_frag_offset,
-                   ip_proto,
-                   ip_hdr_chksum,
-                   ip_src_port,
-                   ip_dest_port;
-    unsigned int   ip_src,
-                   ip_dest;
-    BOOL           bPrint = FALSE;
-    char       ip_prtype=0;
-    int     j;
-    time_t tt;
-    struct tm *tmm;
-
-    ohdr=hdr;
-    if (iLnxplus) ip_prtype=*(hdr+iLnxplus-1);
-    if (ip_prtype) return 0;
-    hdr += iLnxplus;
-    ip_version = HI_WORD(*hdr);
-    ip_hdr_len = LO_WORD(*hdr) * 4;
-    nexthdr = (BYTE *)((BYTE *)hdr + ip_hdr_len);
-    hdr++;
-
-    ip_tos = *hdr;
-    hdr++;
-
-    memcpy(&shortval, hdr, 2);
-    ip_total_len = ntohs(shortval);
-    hdr += 2;
-
-    memcpy(&shortval, hdr, 2);
-    ip_id = ntohs(shortval);
-    hdr += 2;
-
-    ip_flags = ((*hdr) >> 5);
-
-    memcpy(&shortval, hdr, 2);
-    ip_frag_offset = ((ntohs(shortval)) & 0x1FFF);
-    hdr += 2;
-
-    ip_ttl = *hdr;
-    hdr++;
-
-    ip_proto = *hdr;
-    hdr++;
-
-    memcpy(&shortval, hdr, 2);
-    ip_hdr_chksum = ntohs(shortval);
-    hdr += 2;
-
-    memcpy(&srcaddr.sin_addr.s_addr, hdr, 4);
-    ip_src = ntohl(srcaddr.sin_addr.s_addr);
-    hdr += 4;
-
-    memcpy(&destaddr.sin_addr.s_addr, hdr, 4);
-    ip_dest = ntohl(destaddr.sin_addr.s_addr);
-    hdr += 4;
-    //
-    // If packet is UDP, TCP, or IGMP read ahead and
-    //  get the port values.
-    //
-        ip_src_port=ip_dest_port=0;
-    if (((ip_proto == 2) ||
-         (ip_proto == 6) ||
-         (ip_proto == 17)) ) //&& bFilter)
-    {
-        memcpy(&ip_src_port, nexthdr, 2);
-        ip_src_port = ntohs(ip_src_port);
-        memcpy(&ip_dest_port, nexthdr+2, 2);
-        ip_dest_port = ntohs(ip_dest_port);
-
-    };
-    bPrint = 0;
-//      xaok=   (xip!=0) && (((xip&xnet)==(ip_src&xnet))||((xip&xnet)==(ip_dest&xnet)));
-//      saok= ((srcip==0)||((srcip&srcnet)==(ip_src&srcnet)));
-//      daok = ((destip==0)||((destip&destnet)==(ip_dest&destnet)));
-//      xpok=(xport!=0) && ((xport==ip_src_port)||(xport==ip_dest_port));
-//      spok=((srcport==0)||(srcport == ip_src_port));
-//      dpok=((destport==0)||(destport == ip_dest_port));
-//printf("\nf:%d xa:%d sa:%d da:%d xp:%d sp:%d dp:%d",bFilter,xaok,saok,daok,xpok,spok,dpok);
-//      if (!bFilter || ( (xaok||(saok&&daok)) && (xpok||(spok&&dpok)))) {
-if ((!bFilter) || ((ip_proto==47)&&gre) ||
-                (
-                ((iProto==0)||(ip_proto==iProto)) &&
-                 (
-                  ((xip!=0) && (((xip&xnet)==(ip_src&xnet))||((xip&xnet)==(ip_dest&xnet)))
-                  ) || (
-                   ((srcip==0) || ((srcip&srcnet)==(ip_src&srcnet))) && ((destip==0)||((destip&destnet)==(ip_dest&destnet)))
-                  )
-                 )
-                 &&
-                 (
-                  ((xport!=0) && ((xport==ip_src_port)||(xport==ip_dest_port))
-                  ) || (
-                   ((srcport==0)||(srcport == ip_src_port))&&((destport==0)||(destport == ip_dest_port))
-                  )
-                 )
-                )
-                ) {
-                        if (! iDetail) {
-                            if ((ip_proto==47)&&gre) {
-                            *mypbuff=0;
-                             DecodeGREHeader(wsabuf, ip_hdr_len, bytesret,
-                    srcip,srcport,srcnet,destip,destport,destnet,xport,xip,xnet);
-//                            SetIPAcc(0,0,0,0,0,0);
-                            return ip_hdr_len;
-                            }
-                            SetIPAcc(ip_src,ip_dest,ip_total_len,ip_proto,ip_src_port,ip_dest_port);
-                        }
-                        else bPrint=TRUE;
-//                        printf("%d %ld %ld %ld %ld",ip_proto,xip,xip&xnet,ip_src&xnet,ip_dest&xnet);
-        } else {
-                        if (! iDetail)          SetIPAcc(0,0,0,0,0,0);
-//                      else bPrint=TRUE;
-        }
-        time(&tt);
-        if ((!iSum && ( tt-elapsed > iCycle)) || !iRun || mostird) {
-           mostird=0;
-                if (! iDetail) CloseIPAcc(tt-elapsed-1);
-                else {
-                        time(&elapsed);
-                        if (f) fclose(f);
-                        if (iFile) f=fopen(filename,"a");
-                }
-        }
-        if (lNum) { if (--lNum <= 0) iRun=0; }
-
-    //
-    *pbuf=0;
-    if (bPrint)    {
-                tmm=localtime(&tt);
-if (! nomac ) {
-    strcpy(pbuf,mypbuff);
-} else {
-        sprintf(str,"\n%4.4d.%2.2d.%2.2d %2.2d:%2.2d:%2.2d ",
-            tmm->tm_year+1900,tmm->tm_mon+1,tmm->tm_mday,tmm->tm_hour,tmm->tm_min,tmm->tm_sec);
-        strcat(pbuf,str);
-#ifdef LINUX
-        sprintf(str,"%x:%x:%x:%x:%x:%x > %x:%x:%x:%x:%x:%x",*ohdr,*(ohdr+1),*(ohdr+2),*(ohdr+3),*(ohdr+4),*(ohdr+5),
-            *(ohdr+6),*(ohdr+7),*(ohdr+8),*(ohdr+9),*(ohdr+10),*(ohdr+11));
-        strcat(pbuf,str);
-#endif
-}
-        sprintf(str,"  %d bytes\n%-15s>", ip_total_len, inet_ntoa(srcaddr.sin_addr));
-        strcat(pbuf,str);
-        sprintf(str,"%-15s", inet_ntoa(destaddr.sin_addr));
-        strcat(pbuf,str);
-        sprintf(str," TTL:%-3d Proto:%-6s F:%d/%d TOS:%X%X\n",
-            ip_ttl, szProto[ip_proto],ip_flags,ip_frag_offset,HI_WORD(ip_tos), LO_WORD(ip_tos));
-        strcat(pbuf,str);
-        if (iFile) strcat(pbuf,".");
-        strcpy(mypbuff,pbuf);
-
-    }
-    else        return ip_hdr_len;
-
-    if (justheader) { if (*pbuf) fprintf(iFile?f:stdout,"%s",pbuf); return ip_hdr_len; }
-        if (iDetail) {
-                switch (ip_proto)    {
-                        case 1:        // ICMP
-                                j=DecodeICMPHeader(wsabuf, ip_hdr_len);
-                                break;
-                        case 2:        // IGMP
-                                j=DecodeIGMPHeader(wsabuf, ip_hdr_len);
-                                break;
-                        case 6:        // TCP
-                                j=DecodeTCPHeader(wsabuf, ip_hdr_len);
-                                break;
-                        case 17:       // UDP
-                                j=DecodeUDPHeader(wsabuf, ip_hdr_len);
-                                break;
-                        case 47:       // UDP
-                                j=DecodeGREHeader(wsabuf, ip_hdr_len, bytesret,
-                    srcip,srcport,srcnet,destip,destport,destnet,xport,xip,xnet);
-                                break;
-                        default:
-                                j=0;  hdr=(BYTE *)wsabuf->buf;
-                                sprintf(str,"   No decoder installed for protocol\n");
-                                strcat(pbuf,str);
-                                break;
-                }
-                if (j>=0) PrintRawBytes(hdr+j,bytesret-j-ip_hdr_len-12); //(hdr-(BYTE *)(wsabuf->buf + iLnxplus)));
-        }
-        else if (*pbuf) fprintf(iFile?f:stdout,"%s",pbuf);
-
-    return ip_hdr_len;
-}