itgdecod.cpp

来自「D-ITG2.4源代码」· C++ 代码 · 共 1,314 行 · 第 1/3 页

CPP
1,314
字号
//v0.4
#include <fcntl.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <fstream.h>
#include <iostream.h>

#ifdef V23
#define ADDRESSLEN 16
#else
#define ADDRESSLEN 46
#endif
#define MaxNumFlow 1000

typedef char address[ADDRESSLEN];

struct stflowinfo {
	unsigned int flowId;
	double byterecv;
	unsigned long int pktrecv;
	double avdelay;
	double delvariation;
	double secfirstline;
	double seclastline;
	double maxdelay;
	double mindelay;
	address srcaddress;
	unsigned int srcport;
	address destaddress;
	unsigned int destport;
	double lastdelay;
	double avjitter;
	unsigned long int pktloss;
	unsigned int lastpktnum;
	unsigned int pktdup;
};

struct gestioneFileLog{
    unsigned int flowId;
    unsigned int srcPort;
    unsigned int destPort;
	address destAddr;
	address srcAddr;
	ofstream FileId;
	FILE *tempfile;
	char FileName[100];
	char FileNWE[100];
};

struct info {
	unsigned int flowId;
	unsigned int seqNum;
	char srcAddr[ADDRESSLEN];
	unsigned int srcPort;
	char destAddr[ADDRESSLEN];
	unsigned int destPort;
	long int txTime1;
	long int txTime2;
	double txTime3;
	long int rxTime1;
	long int rxTime2;
	double rxTime3;
	int size;
};
//Prototypes
double deltatime (double time1, double time2);
ofstream *FlowPresent(unsigned int flowId,char *destAddr,char *srcAddr);
void split();
void readline(int filetype);
void writeline(int filetype);
void printhelp();
void setline(double txTime, double rxTime);
void elabsplit(int flagbit, int flagjit, int flagdel, int flagpkt);
void merge(int type);

//Global variables
ifstream inbin;
ofstream outbin;
FILE *intxt;
FILE *outtxt;
int size, flagfilter;
unsigned int flownum;
double msbitrate, msjitter, mspktloss, msdelay, secfirstline_gl;
gestioneFileLog memFile[MaxNumFlow];
struct stflowinfo *flowinfo = (struct stflowinfo *) malloc (sizeof (struct stflowinfo));
info infos;

//**************************************************************************
//**********************   MAIN   ******************************************

int main (int argc, char *argv[])
{

//Declaration of variables
FILE *octavefpout;
char loginname[100];
char userstring[10];
char logoutname[100];
char octavename[100];
double sectxTime, secrxTime, avjitter, lastdelay, avdelay, delvariation;
int flagdelay, flagjitter, flagbitrate, flagpktloss, elab_type;
int flaglogout, flagsplit, flagps, flagidt;
int flagoctave, flagfirstline;
int logintype, logouttype, errornum;
unsigned long int pkterr, pktvalid;
unsigned int flownumsel, z, i;


//Inizializtion of variables
flagdelay=0;
flagjitter=0;
flagbitrate=0;
flagpktloss=0;
elab_type=0;
flaglogout=0;
flagoctave=0;
flagfilter=0;
flagsplit=0;
flagidt=0;
flagps=0;
flownum=0;
pkterr=0;
pktvalid=0;
logintype=0;
logouttype=0;
flagfirstline=1;
avjitter=0;
secfirstline_gl=90000;
avdelay=0;
delvariation=0;

//*********************************   Start Parser
if (argc <= 1){
	printf ("\nMissing filename!!!\nTry ITGDec -h or --help for more informations\n");
	exit (1);
	}
else if(argv[1][0]== '-' && (argv[1][1]=='h' || argv[1][1]=='-')) {
        printhelp();
		exit (1);}
strncpy (loginname, argv[1],100);
argv+=2;
argc-=2;
while (argc > 0){
	if (argv[0][0] == '-'){
      if(argv[0][1] == ' '){
         printf("Invalid option!!\n");
         printf("Use -h or --help for usage\n");
         exit(1);
         }    
      else{
		switch (argv[0][1]){
			case 'd':
				if ((argc < 2) || (argv[1][0] == '-')){
					printf ("Error 1 on delay time\n");
					argc -= 1;
					argv += 1;
     				}
				else{
					msdelay = (double)atof(argv[1]);
					if (msdelay <= 0){
						printf("Error 2 on delay time\n");
						exit(1);
 						}
    				else{
     					//if (msdelay == 0)
       						//dflagall = 1;
          				flagdelay = 1;
           				argv += 2;
           				argc -= 2;
            			}
                  	}
				break;
			case 'b':
				if ((argc < 2) || (argv[1][0] == '-')){
					printf ("Error 1 on bitrate time\n");
					argc -= 1;
					argv += 1;
     				}
				else{
					msbitrate = (double) atof (argv[1]);
					if (msbitrate <= 0){
						printf ("Error 2 on bitrate time\n");
						exit (1);
      					}
					else{
						flagbitrate = 1;
						argv += 2;
						argc -= 2;
      					}
           			}
				break;
			case 'j':
				if ((argc < 2) || (argv[1][0] == '-')){
					printf ("Error 1 on jitter time\n");
					argc -= 1;
					argv += 1;
					}
				else{
					msjitter = (double) atof (argv[1]);
					if (msjitter <= 0){
						printf ("Error 2 on jitter time\n");
						exit (1);
						}
					else{
						flagjitter = 1;
						argv += 2;
						argc -= 2;
						}
					}
				break;
			case 'p':
				if ((argc < 2) || (argv[1][0] == '-')){
					printf ("Error 1 on packet loss time\n");
					argc -= 1;
					argv += 1;
					}
				else{
					mspktloss = (double) atof (argv[1]);
					if (mspktloss <= 0){
						printf ("Error 2 on packet loss time\n");
						exit (1);
						}
					else{
						flagpktloss = 1;
						argv += 2;
						argc -= 2;
						}
					}
				break;
			case 'h':
				printhelp();
				exit (1);
				break;
			case '-':
				printhelp();
				exit (1);
				break;
			case 'v':
				elab_type = 1;
				argv += 1;
				argc -= 1;
				break;
			case 't':
				logintype = 1;
				argv += 1;
				argc -= 1;
				break;
			case 'P':
				flagps=1;
				argv += 1;
				argc -= 1;
				break;
			case 'I':
				flagidt=1;
				argv += 1;
				argc -= 1;
				break;
			case 's':
				flagsplit = 1;
				if ((argc < 2) || (argv[1][0] == '-')){
					strcpy(userstring,"log");
                    argc -= 1;
					argv += 1;
             		}
				else{
					strncpy (userstring, argv[1],10);
					argc -= 2;
					argv += 2;
					}
				break;
			case 'i':
				elab_type = 2;
				argv += 1;
				argc -= 1;
				break;
			case 'l':
				flaglogout = 1;
				if ((argc < 2) || (argv[1][0] == '-')){
					printf ("Error on output log file name\n");
					exit (1);
					}
				else{
					strncpy (logoutname, argv[1],100);
					argc -= 2;
					argv += 2;
					}
				break;
			case 'o':
				flagoctave = 1;
				if ((argc < 2) || (argv[1][0] == '-')) {
					printf("Error on output octave file name\n");
					exit(1);
					}
 				else{
					strncpy(octavename, argv[1],100);
					argc -= 2;
					argv += 2;
     				}
				break;
			case 'f':
				if ((argc < 2) || (argv[1][0] == '-')){
					printf ("Error 1 flow number\n");
					argc -= 1;
					argv += 1;
     				}
				else{
					if(argv[1][0] == 't'){
						flagfilter = 2;
						argv += 2;
						argc -= 2;
						}
					else{
						flownumsel = atoi (argv[1]);
						if (flownumsel <= 0){
							printf ("Error 2 on flow number\n");
							exit (1);
      						}
      					else{
      						flagfilter = 1;
      						argv += 2;
      						argc -= 2;
      						}
						}
           			}
				break;
			default:
                printf("Invalid option!!\n");
                printf("Use -h or --help for usage\n");
                exit(1);
				elab_type = 1;
				break;
			} // End switch
		  }//End Else if(argv[0][1]==' ')		  
		}//End if(argv[0][0]=='-')
  	else{
         printf("Invalid option!!\n");
         printf("Use -h or --help for usage\n");
         exit(1);
  		//strncpy (loginname, argv[0],100);
		//argc -= 1;
		//argv += 1;
		}
	} //End while(argc >0)
if (!((flagdelay) || (flagjitter) || (flagbitrate) || (elab_type)|| (flaglogout) || (flagpktloss) || (flagoctave)||(flagsplit)))
	elab_type = 1;
//*****************************************   End parser

if(logintype==0){
	//Open binary input file
	inbin.open (loginname, ios::in | ios::binary);
	if (!inbin.is_open ()){
		printf ("\n Error opening log file '%s'\n", loginname);
		perror("error ");
		exit (1);
		}
 	}
else{
	//Open text input file
	if((intxt = fopen (loginname, "r"))==NULL){
		printf ("\n Error opening log file '%s'\n", loginname);
		perror("error ");
		exit (1);
		}
	}

if (flaglogout){
	if(logouttype==0){
		//Open text logfile for output
		if((outtxt = fopen (logoutname, "w"))==NULL){
			printf ("\nError opening file '%s' for write\n", logoutname);
			perror("error ");
			exit (1);
			}
		}
	else{
		//Open binary logfile for output
		outbin.open(logoutname, ios::out | ios::binary | ios::trunc);
		if(!outbin.is_open()){
			printf ("\nError opening file '%s' for write\n", logoutname);
			perror("error ");
			exit(1);
			}
		}
	}
if (flagoctave){
	if((octavefpout = fopen(octavename, "w"))==NULL){
		printf("Error opening file '%s' for write", octavename);
		perror("error ");
		exit(1);
		}
	}
if (flagbitrate||flagdelay||flagjitter||flagpktloss||flagsplit){
	for (int j=0;j<MaxNumFlow;j++)//Initialize struct memFile
      	memFile[j].flowId=(unsigned int)-1;
	}

//Start reading input file
size = 1;
while (size>0){
	readline(logintype);
	if(size>0){ //Not Empty line
        if (flagps) printf("%u\n",infos.size);
        if (flagidt) printf("%lf\n",((double)infos.rxTime1*3600 + (double)infos.rxTime2*60 + infos.rxTime3)-secrxTime);
		if (flaglogout)
			writeline(logouttype);
		if (flagoctave){
			fprintf(octavefpout, "%7u ", infos.seqNum);
			fprintf(octavefpout, "%li %li %lf ",infos.txTime1, infos.txTime2, infos.txTime3);
			fprintf(octavefpout, "%li %li %lf ",infos.rxTime1, infos.rxTime2, infos.rxTime3);
			fprintf(octavefpout, "%u\n", infos.size);
			}

		//Validate current line
		errornum = 0;
		if ((infos.txTime1 > 24) || (infos.txTime1 < 0))
			errornum = 1;
		if ((infos.txTime2 > 59) || (infos.txTime2 < 0))
			errornum = 2;
		if ((infos.txTime3 > (double) (59.999999))|| (infos.txTime3 < 0))
			errornum = 3;
		if ((infos.rxTime1 > 24) || (infos.rxTime1 < 0))
			errornum = 4;
		if ((infos.rxTime2 > 59) || (infos.rxTime2 < 0))
			errornum = 5;
		if ((infos.rxTime3 > (double) (59.999999))|| (infos.rxTime3 < 0))
			errornum = 6;
		if ((flagfilter==1) && (infos.flowId>flownumsel))
			errornum =7;
		if (errornum > 0){	//Current line not valid
			pkterr++;
			//printf("%u ",errornum);
			}
		else{//Current line valid
			if(flagfilter==2){
			    strcpy(infos.srcAddr,"127.0.0.1");
				strcpy(infos.destAddr,"127.0.0.1");

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?