#include #include #include #include #include "iserver.h" #ifndef SO #define SO #include #include #include #include #endif #define myport 9500 #define Webport 9000 /*#define Webaddr "128.198.192.192"*/ /* use when running on viva */ #define Webaddr "128.198.192.194" /* use when running on gandalf */ void main(int argc, char *argv[ ]) { int childpid; int row = -1; char command_file[] = "command_file.txt"; char *b_command ; /*command to run bprobe */ char *c_command ; /*command to run cprobe */ FILE *fptr , *rptr, *cptr; int ch_cp, ch_bp, ch_web, *status, *status2; char MyBuffer[MaxLine]; char *probed_server_name; float probe_value; char my_result_file[] = "res.txt"; char my_cprobe_file[] = "c_res.txt"; /***************for socket*******************/ struct sockaddr_in from_web, me; int sock; int length, n, len, x; struct mirror_servers web_buf; float buf; extern int sock_flag; register struct hostent *hostptr; struct in_addr *my_addr; /*char this_server[] = "viva";*/ char this_server[] = "gandalf.uccs.edu"; /*web_buf = malloc(sizeof(struct mirror_servers));*/ /********************************************/ int FIRST_TIME = 1; struct tm *ptr1, ptr2 ; time_t secsnow1, secsnow2, secsnow3, secsnow4, secsnow5, secsnow6; int timezone; float left; int B_P = 0; int C_P = 0; /*time_t timer1, timer2;*/ timezone = 8* 60 * 60 ; /**********************************************/ if ( (fptr = fopen(command_file, "r") ) == NULL ) printf(" Cannot open file %s \n", command_file); b_command = (char*)malloc(sizeof(command_size)); c_command = (char*)malloc(sizeof(command_size)); if ( fgets(b_command, command_size, fptr)== NULL ) printf("unable to read line from command.txt\n"); if ( fgets(c_command, command_size, fptr)== NULL ) printf("unable to read line 2 from command.txt\n"); fclose(fptr); /*time_t *tp ;*/ /*time(time_t *tp);*/ /*printf("Time at start of program is: %H\n", tp->tm_hour);*/ /*if ( argc>2 ) printf(" Usage: Type only the program name followed by the input file name.\n"); /***************************for sockets********************************/ /******************************************************/ sock = socket(AF_INET, SOCK_DGRAM, 0); if (sock < 0) { perror("opening datagram socket"); exit(1); } bzero((char*)&me, sizeof(me)); /*exit(0);*/ hostptr = gethostbyname(this_server); if (hostptr == NULL ) { /*exit(0);*/ printf("unable to gethostbyname\n"); exit(1); } my_addr = (struct in_addr *) *( hostptr->h_addr_list ) ; me.sin_family = AF_INET; /*me.sin_addr.s_addr = my_addr->s_addr;*/ me.sin_addr.s_addr = INADDR_ANY; me.sin_port = htons(myport); bcopy(hostptr->h_addr, &me.sin_addr, hostptr->h_length); /* port no. < 1024 IPPORT_RESERVED is for privillege process */ /* here just initialized it, it will be assigned value after call */ /* getsockname() */ if (bind(sock, &me, sizeof(struct sockaddr_in))) { perror("binding name to datagram socket"); exit(1); } printsockaddr(&me); /*exit(0);*/ length = sizeof(me); /********** initialize the "from_web" addr *******/ /*from_web.sin_family = AF_INET;*/ /*from_web.sin_addr.s_addr = INADDR_ANY;*/ /*from_web.sin_port = 0;*/ /*from_web.sin_port = htons(Webport);*/ len = sizeof(from_web); /*********************************************************************/ Configure_Servers(argv[1]) ; PTR_FOUND = malloc(sizeof(struct mirror_servers)); PTR_FOUND = NULL; /*prompt_user_for_hostname();*/ /* printf("Host needed is %s\n", myhost); */ /*if( (row = search_name(myhost)) >= 0 ){ */ /*printf( "FOUND HOST %s on row= %d\n", MainPtr[row]->server_name, row);*/ /* printf("The host you requested was: %s \n", PTR_FOUND->server_name); */ /*}*/ /*else printf("Host %s not in database\n", myhost);*/ /*print_all_servers();*/ /*****************************************************************/ probed_server_name = (char*)malloc(sizeof(MaxLine)); /*len = sizeof(from_web);*/ /******************************************************************/ /*Erase the output files: res.txt and c_res.txt for a new run */ if ( (rptr= fopen(my_result_file, "w") ) == NULL ) { printf(" Cannot open file %s \n", my_result_file); exit(1); } fclose(rptr); if ( (cptr= fopen(my_cprobe_file, "w") ) == NULL ) { printf(" Cannot open file %s \n", my_cprobe_file); exit(1); } fclose(cptr); /*********************************************************************/ /* Start timers for a new run */ time(&secsnow2); time(&secsnow4); time(&secsnow6); do { time(&secsnow1); if ( (FIRST_TIME != 0)|| ((int)abs(difftime(secsnow1,secsnow2)) >= (int)(atoi(argv[2]))) ) { time(&secsnow2); printf("Now Waiting to Receive from Server..\n" ); /*while*/ if((n = recvfrom(sock, &buf, sizeof(float) , 0, &from_web, &len ) ) <= 0) perror("error receiving message\n"); /* ;*/ printf("WEB SERVER INFO: delay = %f\n", buf ); probed_server_name = printsockaddr(&from_web); printf("In Main:server is : %s\n", probed_server_name); strtok(probed_server_name, "."); printf("after strtok:server is : %s\n", probed_server_name); if( (row = search_name(probed_server_name)) >= 0 ) { printf("In after name search successs\n"); PTR_FOUND->delay = buf; } /*printf("THE LBA ADDRESS:\n");*/ /* printsockaddr(&me);*/ /*sleep(5);*/ /*time(&secsnow1);*/ /*Calculate_weights();*/ } /***************************************************/ time(&secsnow3); if ( (FIRST_TIME != 0)|| ((int)abs(difftime(secsnow3,secsnow4))>= (int)(atoi(argv[3]))) ) { /*printf("The agrv[3] value is %d\n", atoi(argv[3]));*/ /*exit(0);*/ time(&secsnow4); printf("before Run_Probe- B Probe func\n"); Run_Probe(b_command); printf("after Run_Probe func\n"); if ( (rptr = fopen(my_result_file, "r") ) == NULL ) { printf("In main:Can't open file %s \n",my_result_file); exit(0); } /*probed_server_name = (char*)malloc(sizeof(MaxLine));*/ while (fgets(MyBuffer, MaxLine, rptr) != NULL) { printf("!!!!!!!!!!FILE res.txt :%s\n", MyBuffer); sscanf(MyBuffer, "%s %f", probed_server_name, &probe_value); /* printf("Bprobe value fr str: %s - %f\n", probed_server_name, probe_value);*/ if( (row = search_name(probed_server_name)) >= 0 ) { PTR_FOUND->b_Result = probe_value; printf("Bprobe value for %s is %f\n\n", PTR_FOUND->server_name, PTR_FOUND->b_Result); } else exit(1); } B_P++; printf("&&&& B_Probe runs = %d\n", B_P); /*Calculate_weights();*/ if ( (rptr= fopen(my_result_file, "w") ) == NULL ) { printf(" Cannot open file %s \n", my_result_file); exit(1); } fclose(rptr); printf("$$$$$$$$$$$$$$$$$ DATABASE $$$$$$$$$$$$$$$$$$$$$$$\n"); print_all_servers(); } /******************************************************** */ time(&secsnow5); if ( (FIRST_TIME != 0)|| ((int)abs(difftime(secsnow5,secsnow6)) >=(int)atoi(argv[4])) ) { time(&secsnow6); printf("Before RunProbe for Cprobe\n"); Run_Probe(c_command); printf("after Run_Probe func with cprobe\n"); /* My_CProbe_Run();*/ if ( (cptr = fopen(my_cprobe_file, "r") ) == NULL ) { printf("In main:Can't open file %s \n",my_cprobe_file); exit(0); } /*probed_server_name = (char*)malloc(sizeof(MaxLine));*/ while (fgets(MyBuffer, MaxLine, cptr) != NULL) { printf("!!!!!!!!!!FILE c_res.txt :%s\n", MyBuffer); sscanf(MyBuffer, "%s %f", probed_server_name, &probe_value); /* printf("Cprobe value fr str: %s - %f\n", probed_server_name, probe_value);*/ if( (row = search_name(probed_server_name)) >= 0 ) { PTR_FOUND->c_Result = probe_value; printf("Cprobe value for %s is %f\n\n", PTR_FOUND->server_name, PTR_FOUND->c_Result); } else exit(1); }/* end while */ /*time(&secsnow5);*/ C_P++; printf("@@@@@@ C_Probe runs = %d\n", C_P); Calculate_weights(); if ( (cptr= fopen(my_cprobe_file, "w") ) == NULL ) { printf(" Cannot open file %s \n", my_cprobe_file); exit(1); } fclose(cptr); } /* end if */ FIRST_TIME = 0; /************************************************************************/ /*print_all_servers();*/ }while(1); print_all_servers(); }