Beispiel #1
0
/**
 * Converts a generic \a spreadconv_data structure into an ods
 * file.
 * \param data The data to covert to a spreadsheet
 * \returns The created file's name, with extension and full path
 */
char * 
ods_create_spreadsheet(struct spreadconv_data *data)
{
	char *dirname;
	char *file_name;
	char *prev_dir = 0;
	char *buffer, *buffer2;

	prev_dir = getcwd(prev_dir, 0);
	if (chdir(spreadconv_dir_name) == -1) {
		free(spreadconv_dir_name);
		spreadconv_dir_name = strdup("/tmp/");
		chdir(spreadconv_dir_name);
	}

	dirname = strdup("libspreadconvXXXXXX");
	if (mkdtemp(dirname) == 0)
		return 0;

	chdir(dirname);

	/* create the files for the package*/
	if (create_manifest_file(data)) {
		goto ERR;
	}
	if (create_mimetype_file()) {
		goto ERR;
	}
	if (create_settings_file(data)) {
		goto ERR;
	}
	if (create_style_file(data)) {
		goto ERR;
	}
	if (create_meta_file(data)) {
		goto ERR;
	}
	if (create_content_file(data)) {
		goto ERR;
	}

	/* package the files according to the standard */
	buffer = malloc(1000);
	snprintf(buffer, 1000, "zip -q -r %s.ods mimetype META-INF "
			"content.xml meta.xml styles.xml settings.xml -n mimetype", dirname);
	system(buffer);

	/* 
	 * Move created file a level up and delete the temporary
	 * directory.
	 */
	buffer2 = malloc(1000);
	snprintf(buffer, 1000, "%s.ods", dirname);

	file_name = malloc(512);
	snprintf(file_name, 512, "%s%s", spreadconv_dir_name, buffer);

	snprintf(buffer2, 1000, "../%s", buffer);
	rename(buffer, buffer2);

	chdir("..");
	/* 
	 * This doesn't work. Directory remains there. Dammit.
	 */
	/*
	if (remove(dirname) != 0)
		perror("libspreadconv: create_spreadsheet");
	*/
#ifndef __DEBUG__
	/*
	 * portabilitate 0
	 */
	char *rm_command;
	rm_command = malloc(512);
	snprintf(rm_command, 512, "rm -rf %s", dirname);
	system(rm_command);
	free(rm_command);
#endif 
	chdir(prev_dir);
	free(buffer);
	free(buffer2);
	free(prev_dir);
	free(dirname);
	
	return file_name;

	ERR:
	free(prev_dir);
	free(dirname);
	return NULL;
}
Beispiel #2
0
/**
* Main
* @param  argc  number of arguments
* @param  argv  array of arguments
* @return   boolean success or failure
*/
int main(int argc, char* argv[])
{
  if(argc > 1)
  {
    if( (strstr(argv[1], "new") != NULL) )
    {
      if(argc < 4)
      {
        printf("Please enter a filename and a tracker url\n");
        exit(1);
      }
      else
      {
        MetaData* newTorrent;
        newTorrent = create_meta_file(argv[2], argv[3]);
      }
    }
    else if( (strstr(argv[1], "read")) )
    {
      if(argc != 3)
      {
        printf("Please enter the name of a torrent file!\n");
        exit(1);
      }
      else
      {
        MetaData* curTorrent;
        curTorrent = parse_meta_file(argv[2]);
        print_MetaData(curTorrent, FALSE);
      }
    }
    else if( (strstr(argv[2], "start")) )
    {
      if(argc != 4)
      {
        printf("Invalid arguments.\n  Proper usage:\n   client.o name:port start filename.trrnt\n");
        exit(1);
      }
      else
      {
        parse_host_info(argv[1], myHostName, &myPort);
        printf("Using HostName: %s:%i\n", myHostName, myPort);

        MetaData* curTorrent;
        curTorrent = parse_meta_file(argv[3]);
        
        pthread_t threads[2];
        // Listen for requests
        pthread_create(&(threads[0]), NULL, request_listener_thread, NULL);
        // Start the download
        pthread_create(&(threads[1]), NULL, download_manager_thread, (void*)curTorrent);
        
        //sync on the threads
        pthread_join(threads[0], NULL);
        pthread_join(threads[1], NULL);

        linkedList_free_ts(threadPool);
        pthread_cond_destroy(&threadPoolCondition);
      }
    }
    else if( (strstr(argv[2], "listen")) )
    {
      if( !(argc == 3 || argc == 5) )
      {
        printf("Invalid arguments. Please enter a port and/or hostname.\n");
        exit(1);
      }
      else
      {
        parse_host_info(argv[1], myHostName, &myPort);
        printf("Using HostName: %s:%i\n", myHostName, myPort);
        
        if( (argc == 5 && strstr(argv[3], "tracker") != NULL) )
        {
            char trackerName[255];
            int trackerPort;
            parse_host_info(argv[4], trackerName, &trackerPort);
            broadcast_finished_files(trackerName, trackerPort);
        }

        listen_for_requests();
      }
    }
  }
}