Esempio n. 1
0
struct task*
create_task(downloader *dler, const char *url, const char *fullname)
{
	struct task *task = (struct task*)malloc(sizeof(struct task));
	
	task->dler          = dler;
	task->next          = dler->tasks;
	dler->tasks         = task;

	task->head_request  = http_request_new(task);

	task->name          = strdup(fullname);
	task->cur_size      = 0;

	task->blocks        = NULL;

	task->start_time    = uv_now(dler->mainloop);
	task->consumed_time = 0;

	task->last_step_time = task->start_time;
	task->last_step_size = task->cur_size;

	if (strncmp(url, "http://", 7) == 0) {
		task->url = http_parse_url(url);
	} else {
		int   len     = strlen(url);
		char *new_url = (char*)calloc(1, len + 7 + 1);
		memcpy(new_url, "http://", 7);
		memcpy(new_url + 7, url, len);

		task->url = http_parse_url(new_url);

		free(new_url);
	}

	if (task->url == NULL) {
		printf("parse url failed\n");
		exit(-1);
	}

	/* change host to a zero-terminated string for uv_getaddrinfo() */
	uv_buf_t buf = http_url_get_field(task->url, UF_HOST);
	char *host = (char*)calloc(1, buf.len + 1);
	memcpy(host, buf.base, buf.len);

	struct addrinfo hints;
	hints.ai_family   = PF_INET;
	hints.ai_socktype = SOCK_STREAM;
	hints.ai_protocol = IPPROTO_TCP;
	hints.ai_flags    = 0;

	uv_getaddrinfo_t *getaddrinfo = (uv_getaddrinfo_t*)malloc(sizeof(uv_getaddrinfo_t));
	getaddrinfo->data = task;

	uv_getaddrinfo(dler->mainloop, getaddrinfo, on_resolved, host, NULL, &hints);

	free(host);

	return task;
}
Esempio n. 2
0
char * ICACHE_FLASH_ATTR http_url_get_query(http_connection *c){
	return http_url_get_field(c,UF_QUERY);
}
Esempio n. 3
0
char * ICACHE_FLASH_ATTR http_url_get_path(http_connection *c){
	return http_url_get_field(c,UF_PATH);
}
Esempio n. 4
0
char * ICACHE_FLASH_ATTR http_url_get_host(http_connection *c){
	return http_url_get_field(c,UF_HOST);
}