FILE *openfile;
/*Opening the file*/
filePath=(char *)malloc(sizeof(char)*70); if(!strcmp(picToSEND->dirName,"Pic")) { sprintf(filePath,"Pic/%s",picToSEND->FileName); //FILE *openfile = fopen ( filePath, "r" ); openfile = fopen ( filePath, "r" ); if ( openfile == 0 ) { printf( "Could not open file\n" ); exit(1); } } else if(!strcmp(picToSEND->dirName,"UploadedPic")) { sprintf(filePath,"UploadedPic/%s",picToSEND->FileName); //FILE *openfile = fopen ( filePath, "r" ); openfile = fopen ( filePath, "r" ); if ( openfile == 0 ) { printf( "Could not open file\n" ); exit(1); } } while(bytesToSend>0) { if(RetransmitCounter<6) { if (NextPack==1) { /*Getting the next chank from file*/
//printf("\n\nBytes left to send %d\n",bytesToSend); if(ACK=='1') { ACK='0'; } else { ACK='1'; } if (bytesToSend>511) { // printf("reading next chank from file\n"); memset(line,0,sizeof(line)); readnum=fread(line,1,511,openfile); Packetnum=Packetnum+1; //printf("*open file pointer %d\n",openfile); //printf("read from file : %s\n",line); //printf("reading 511 bytes\n\n"); /*Fix*/ memset(packet,0,sizeof(packet)); sprintf(packet,"%c",ACK); memcpy(&packet,line,511); /*/ NextPack=0; } else {//last packet readnum=fread(line,1,bytesToSend,openfile); Packetnum=Packetnum+1; //printf("*open file pointer %d\n",openfile); /*FIX*/ memset(packet,0,sizeof(packet)); sprintf(packet,"%c",ACK); memcpy(&packet,line,bytesToSend); /*/ NextPack=0; } } slen=sizeof(UPDsocket); //printf("Sending now %s\n",packet); sendto(Soc, packet, readnum+1, 0, &UPDsocket, slen); /*timeout for ack*/ tv.tv_usec=500000; tv.tv_sec=0; FD_ZERO(&read_set); FD_SET(Soc,&read_set); resulte=select(Soc+1,&read_set,NULL,NULL,&tv); if(resulte>0) { if(FD_ISSET(Soc,&read_set)) { /*handle getting thisData*/ slen=sizeof(recvFromSocket); recvfrom(Soc, ACKrec, 1,0,(struct sockaddr *)&recvFromSocket,&slen); if(ACK==ACKrec) { sprintf(RecvIpAddress,"%s",inet_ntoa(recvFromSocket.sin_addr)); if(!strcmp(RecvIpAddress,IpAddress)) { //got the ack that expected and also from the destination that sent to. NextPack=1; RetransmitCounter=0; bytesToSend=bytesToSend-readnum; } else { RetransmitCounter++; } } else { RetransmitCounter++; } } } else if(resulte==0) { RetransmitCounter++; } } else { printf("Error : Stoping Upload after 5 Retransmition .\n"); fclose(openfile); close(Soc); return; } } ** close(openfile); ***- close(Soc);
return; }
|