?? itgdecod.cpp
字號:
//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 + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -