/* 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; }
/* 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; }
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; } }