int main(int argc, char**argv) { int sfd,ssfd; char num[10]; char clientID[22]; char filename[100]; int result; int taskSize; int exitCode; int numBytes; char *msg; char *taskID; char ACK[]="OK\n"; char lifetime[]="10\n"; Task *task; char *back; if (argc!=5) { fprintf(stdout,"usage: client <IP> <port> <port> <debug>"); exit(1); } if (strcmp(argv[4],"-debug")==0) flag=1; recover: if(flag == 1) fprintf(stdout,"con_server() to %s on port %s\n", argv[1], argv[2]); sfd=con_server(atoi(argv[2]), argv[1]); set_sockopt(sfd); if(flag == 1) fprintf(stdout,"con_server() to %s on port %s\n", argv[1], argv[3]); ssfd=con_server(atoi(argv[3]), argv[1]); if (flag==1) fprintf(stdout,"connection established!\n"); /*numBytes=send(sfd, lifetime, sizeof(lifetime), 0); if (numBytes<0) { fprintf(stdout, "main: send lifetime error\n"); fprintf(stdout,"main: error description: EOF\n"); recovery(sfd, ssfd); goto recover; }*/ while (1) { task = (Task *)malloc(sizeof(Task)); if (task==NULL) printf("failed to allocate memory in main loop\n"); memset(filename,'\0',sizeof(filename)); memset(clientID,'\0',sizeof(clientID)); memset(num, '\0', sizeof(num)); /*receive clientID*/ recv_wrapper(sfd, ssfd, clientID, 22); if (flag==1) { fprintf(stdout,"main: clientID: %s\n", clientID); } /*receive size of task*/ recv_wrapper(sfd, ssfd, num, 10); if (flag==1) { fprintf(stdout,"main: size_of_task: %s\n", num); } /*allocate memory for task description*/ taskSize=atoi(num); msg=malloc(sizeof(char)*(taskSize+1)); if (msg==NULL) { fprintf(stdout,"main: allocate memory failed\n"); exit (1); } memset(msg,'\0',taskSize+1); /*receive task description*/ recv_wrapper(sfd, ssfd, msg, taskSize); if (flag==1) { fprintf(stdout,"main:received: %s\n", msg); } /*send acknoledgement for the received task*/ numBytes=send(sfd, ACK,strlen(ACK),0); if (numBytes < 0) { fprintf(stdout,"main: Sent ACK %s failed\n", ACK); fprintf(stdout,"main: error description: EOF\n"); recovery(sfd, ssfd); goto recover; } else { if (flag == 1) fprintf(stdout,"main: Sent ACK %s successful (%d)\n", ACK, numBytes); } parseExec(msg, task); exitCode = run_task(task); /*send results back to Falkon service*/ numBytes = sendResults(task, ssfd, sfd); if (numBytes < 0) { fprintf(stdout,"main: Send results failed\n"); recovery(sfd, ssfd); goto recover; } //free(task->taskID); //free(task->command); //free(task->directory); free(task); free(msg); //exit(1); } }
bool DesktopEntry::execAllowRemoteUrl() { parseExec(); return allowRemote_; }
int main(int argc, char**argv) { int sfd,ssfd; if (argc!=5) { fprintf(stdout,"usage: client <IP> <port> <port> <debug>"); exit(1); } if (strcmp(argv[4],"-debug")==0) flag=1; //commented out to hopefully make it work with static compiling /* char hostname[100]; struct hostent *h; gethostname(hostname, 100); fprintf(stdout,"hostname: %s\n", hostname); if ((h = gethostbyname(hostname))!=NULL) { fprintf(stdout,"ip address: %s\n", inet_ntoa(*((struct in_addr *)h->h_addr))); } */ recover: fprintf(stdout,"con_server() to %s on port %s\n", argv[1], argv[2]); sfd=con_server(atoi(argv[2]), argv[1]); set_sockopt(sfd); fprintf(stdout,"con_server() to %s on port %s\n", argv[1], argv[3]); ssfd=con_server(atoi(argv[3]), argv[1]); if (flag==1) fprintf(stdout,"connection established!\n"); char num[10]; char clientID[22]; char filename[100]; int result; char *msg; char *taskID; char lifetime[]="10\n"; pid_t pid; int n; /*n=send(sfd, lifetime, sizeof(lifetime), 0); if (n<0) { fprintf(stdout, "main: send lifetime error\n"); fprintf(stdout,"main: error description: EOF\n"); recovery(sfd, ssfd); goto recover; } char acknoledge[10]; memset(acknoledge, '\0', 10); read(sfd,acknoledge,sizeof(acknoledge)); printf("acknoledge: %s\n", acknoledge); fflush(stdout);*/ while (1) { memset(filename,'\0',sizeof(filename)); memset(clientID,'\0',sizeof(clientID)); memset(num, '\0', sizeof(num)); if (flag==1) { fprintf(stdout,"main: receiving from server\n"); fprintf(stdout,"main: sizeof clientID: %d\n", sizeof(clientID)); } int numBytes=0; int numBytesAll = 0; if (flag==1) { fprintf(stdout,"main:waiting to received %d bytes...\n", sizeof(clientID)); } while (numBytesAll < sizeof(clientID)) { numBytes = read(sfd,clientID,sizeof(clientID)); if (numBytes<0) { fprintf(stdout,"main: Receive clientID error after %d bytes received, when it was expecting %d...\n", numBytesAll, sizeof(clientID)); fprintf(stdout,"main: error description: %d\n", errno); recovery(sfd, ssfd); goto recover; } else if (numBytes==0) { fprintf(stdout,"main: Receive clientID error after %d bytes received, when it was expecting %d...\n", numBytesAll, sizeof(clientID)); fprintf(stdout,"main: error description: EOF\n"); recovery(sfd, ssfd); goto recover; } else { if (flag == 1) fprintf(stdout,"main: Received %d bytes...\n", numBytes); } numBytesAll += numBytes; if (numBytesAll == 3) { if (strncasecmp(clientID, "end", 3)==0) { fprintf(stdout, "main: receive end notice, exit\n"); //should shut down gracefully... closing all sockets... //exit(0); goto recover; } } } if (flag==1) { fprintf(stdout,"main:just received %d bytes...\n", numBytesAll); } fflush(stdout); if (flag==1) { fprintf(stdout,"main: clientID: %s\n", clientID); } numBytesAll = 0; if (flag==1) { fprintf(stdout,"main:waiting to received %d bytes...\n", sizeof(num)); } while (numBytesAll < sizeof(num)) { numBytes = read(sfd,num,sizeof(num)); if (numBytes<0) { fprintf(stdout,"main: Receive task size error after %d bytes received, when it was expecting %d...\n", numBytesAll, sizeof(num)); fprintf(stdout,"main: error description: %d\n", errno); recovery(sfd, ssfd); goto recover; } else if (numBytes==0) { fprintf(stdout,"main: Receive task size error after %d bytes received, when it was expecting %d...\n", numBytesAll, sizeof(clientID)); fprintf(stdout,"main: error description: EOF\n"); recovery(sfd, ssfd); goto recover; } else { if (flag == 1) fprintf(stdout,"main: Received %d bytes...\n", numBytes); } numBytesAll += numBytes; } if (flag==1) { fprintf(stdout,"main:just received %d bytes...\n", numBytesAll); } int taskSize=atoi(num); msg=malloc(sizeof(char)*(taskSize+1)); memset(msg,'\0',sizeof(msg)); if (msg==NULL) { fprintf(stdout,"main: allocate memory failed\n"); exit (1); } if (flag==1) { fprintf(stdout,"main:waiting to receive task description of %d bytes...\n", taskSize); //fprintf(fp,"main:received: %s\n", msg); } char buffer[10240]; numBytesAll = 0; while (numBytesAll < taskSize) { memset(buffer, 0, 10240); numBytes = read(sfd,buffer,taskSize); strcat(msg, buffer); if (numBytes<0) { fprintf(stdout,"main: Receive task failed after %d bytes received, when it was expecting %d...\n", numBytesAll, taskSize); fprintf(stdout,"main: error description: %d\n", errno); recovery(sfd, ssfd); goto recover; } else if (numBytes==0) { fprintf(stdout,"main: Receive task failed after %d bytes received, when it was expecting %d...\n", numBytesAll, sizeof(clientID)); fprintf(stdout,"main: error description: EOF\n"); recovery(sfd, ssfd); goto recover; } else { if (flag == 1) fprintf(stdout,"main: Received %d bytes...\n", numBytes); } numBytesAll += numBytes; } if (flag==1) { fprintf(stdout,"main:jst received %d bytes...\n", numBytesAll); } if (flag==1) { fprintf(stdout,"main:received: %s\n", msg); } //commented out ACK numBytes=send(sfd, ACK,strlen(ACK),0); if (numBytes < 0) { fprintf(stdout,"main: Sent ACK %s failed\n", ACK); fprintf(stdout,"main: error description: EOF\n"); recovery(sfd, ssfd); goto recover; } else { if (flag == 1) fprintf(stdout,"main: Sent ACK %s successful (%d)\n", ACK, numBytes); } fflush(stdout); taskID = getTaskID(msg); int exitCode; exitCode = parseExec(msg); free(msg); numBytes = sendResults(taskID, exitCode, argv, ssfd, sfd); if (numBytes < 0) { fprintf(stdout,"main: Send results failed\n"); //fprintf(stdout,"main: error description: EOF\n"); recovery(sfd, ssfd); goto recover; } } }
bool DesktopEntry::execAllowMultipleUrl() { parseExec(); return allowMultiple_; }