Example #1
0
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);
    }
}
Example #2
0
bool DesktopEntry::execAllowRemoteUrl()
{
	parseExec();

	return allowRemote_;
}
Example #3
0
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;
        }

    }
}
Example #4
0
bool DesktopEntry::execAllowMultipleUrl()
{
	parseExec();

	return allowMultiple_;
}