예제 #1
0
/* Full_URL is like "ftp://*****:*****@192.168.0.1/xxxx", user and password can be NULL*/
unsigned long libnet_download(char *full_url, char *outfile)
{
	UrlResource *rsrc	= NULL;
	Url *u			= NULL;
	int retval		= 0;


	rsrc 	= url_resource_new();
	u = url_new();

	rsrc->url = url_init(u, full_url);
	rsrc->options = 0;
	rsrc->outfile = strdup(outfile);
	rsrc->outfile_offset = 0;
	rsrc->running = 1;
	rsrc->options = OPT_RESUME; //default support the resume
		
	u = rsrc->url;

	if ( !rsrc->outfile && u->file )
		rsrc->outfile = strdup(u->file);

	if ( rsrc->outfile && (rsrc->options & OPT_RESUME))
	{
		rsrc->outfile_offset = get_file_size(rsrc->outfile);
		if (rsrc->outfile_offset < 0)
			rsrc->outfile_offset = 0;
	}

	create_transfer_task(rsrc, libnet_cb);
	
	return (unsigned long)rsrc;
}
예제 #2
0
/*
unsigned long libnet_download_to_pecache
branch from libnet_download_to_mem for download net work file to pe cache
use difference dump_data() when  UrlResource rsrc->use_pecache  != 0.
*/
unsigned long libnet_download_to_pecache(char *full_url, unsigned char* buffer, unsigned int buf_len,  unsigned int offset)
{
	UrlResource *rsrc	= NULL;
	Url *u			= NULL;
	int retval		= 0;

	if (offset >= buf_len)
	{
		return 0;
	}

	rsrc = url_resource_new();
	u = url_new();

	rsrc->url = url_init(u, full_url);
	rsrc->options = OPT_RESUME; //default support the resume
	rsrc->buffer = buffer;
	rsrc->outfile_offset = offset;
	rsrc->buffer_len = buf_len;
	rsrc->running = 1;
	rsrc->use_pecache = 1; //yuliang0604
	u = rsrc->url;

	if (0 == (rsrc->options & OPT_RESUME))
	{
		rsrc->outfile_offset = 0;
	}

    /* set rsrc->srcip and rsrc->srcport */
#ifdef LIB_W5300
    UINT8 ip_addr[4];
    char ip_str[32];
    if (w5300_ioctl(0, W5300_GET_IP, ip_addr) == 0)
    {
        sprintf(ip_str, "%d.%d.%d.%d", ip_addr[0], ip_addr[1], ip_addr[2], ip_addr[3]);
        rsrc->srcip = (char *)strdup(ip_str);
        rsrc->srcport = 1024 + RAND(5000 - 1024);
        LIBNET_DEBUG("w5300 tcp using: %s:%d\n", rsrc->srcip, rsrc->srcport);
    }
    else
    {
        LIBNET_DEBUG("get ip from w5300 failed!\n");
    }
#endif

	create_transfer_task(rsrc, libnet_cb);
	
	return (unsigned long)rsrc;
	
}
예제 #3
0
파일: group.c 프로젝트: DexterWard/comanche
int create_group_emergency_transfer_task (entity *en)
{
	entity
		*landing,
		*new_keysite,
		*new_task;

	int
		side,
		landing_type,
		sites_required;

	vec3d
		*pos;

	ASSERT (en);

	ASSERT (get_comms_model () == COMMS_MODEL_SERVER);

	side = get_local_entity_int_value (en, INT_TYPE_SIDE);

	pos = get_local_entity_vec3d_ptr (en, VEC3D_TYPE_POSITION);

	group_terminate_all_tasks (en);

	sites_required = get_local_group_member_count (en);

	landing_type = group_database [get_local_entity_int_value (en, INT_TYPE_ENTITY_SUB_TYPE)].default_landing_type;

	landing = get_closest_free_landing_site (landing_type, get_local_force_entity (side), pos, 0.0, NULL, sites_required);

	if (landing)
	{
		//
		// Found new keysite
		//

		new_keysite = get_local_entity_parent (landing, LIST_TYPE_LANDING_SITE);

		if (landing_type == ENTITY_SUB_TYPE_LANDING_HELICOPTER)
		{
			new_task = create_transfer_task (side, ENTITY_SUB_TYPE_TASK_TRANSFER_HELICOPTER, 10.0, new_keysite, new_keysite);
		}
		else
		{
			new_task = create_transfer_task (side, ENTITY_SUB_TYPE_TASK_TRANSFER_FIXED_WING, 10.0, new_keysite, new_keysite);
		}

		ASSERT (new_task);

		if (!assign_primary_task_to_group (en, new_task))
		{
			//
			// Failed to assign transfer task
			//

			ai_log ("(TRANSFER) Failed to assign Emergency Transfer to %s", get_local_entity_string (en, STRING_TYPE_FULL_NAME));

			group_kill_all_members (en);

			return FALSE;
		}
		else
		{
			ai_log ("(TRANSFER) Successfully assigned Emergency Transfer to %s", get_local_entity_string (en, STRING_TYPE_FULL_NAME));

			return TRUE;
		}
	}
	else
	{
		//
		// Failed to find alternate keysite
		//

		ai_log ("(TRANSFER) Failed to find Emergency Transfer keysite for %s", get_local_entity_string (en, STRING_TYPE_FULL_NAME));

		group_kill_all_members (en);

		return FALSE;
	}
}