コード例 #1
0
ファイル: url_list.c プロジェクト: emabo/mulk
int add_new_url_and_check(const url_list_t *base_elem, const char *url, char **relative_url)
{
	UriUriA *uri = NULL;
	url_list_t *elem;

	if ((uri = create_absolute_uri(base_elem->uri, url)) == NULL)
		goto Rejected; 

	/* check protocol */
	if (!is_uri_http(uri) && (!option_values.follow_ftp || !is_uri_ftp(uri)))
		goto Rejected; 

	/* check domains */
	if (!is_host_compatible_with_domains(uri))
		goto Rejected; 

	if (!(elem = push_unique_uri(uri, base_elem->level + 1)))
		goto Rejected; 

	if (relative_url)
		*relative_url = extract_relative_url(elem->filename, base_elem->filename);

	return 0;

Rejected:
	uri_free(uri);
	return -1;
}
コード例 #2
0
ファイル: buffer_array.c プロジェクト: henrycg/mulk
	/* save file */
	buffer->url->filename = string_new(newfilename);
	buffer->url->mimefilename = string_new(newmimefilename);

	if (newfilename && newmimefilename) {
		if ((ret = save_file_to_outputdir(buffer->filename, newfilename, 1)) == MULK_RET_OK)
			ret = save_file_to_outputdir(buffer->filename, newmimefilename, 0);
	}
	else if (newfilename) 
		ret = save_file_to_outputdir(buffer->filename, newfilename, 0);
	else if (newmimefilename) 
		ret = save_file_to_outputdir(buffer->filename, newmimefilename, 0);
	else
		remove(buffer->filename);

	string_free(&newmimefilename);
	string_free(&newfilename);

	return ret;
}

int is_uri_http_buffer(CURL *id)
{
	int i;

	if ((i = get_buffer(id)) < 0)
		return 0;

	if (is_uri_http(buffer_array[i].uri))
		return 1;

	return 0;
}

void set_buffer_mime_type(CURL *id, const char *mimetype)
{
	int i;
	char *ptr;
	buffer_t *buffer;

	if ((i = get_buffer(id)) < 0)
		return;

	buffer = buffer_array + i;

	string_free(&buffer->url->mimetype);
	
	if (mimetype) {
		buffer->url->mimetype = string_new(mimetype);
		if ((ptr = strchr(buffer->url->mimetype, ';')) != NULL)
			*ptr = 0;
		string_lower(buffer->url->mimetype);
	}
}

#ifdef ENABLE_METALINK
static int is_valid_response(UriUriA *uri, CURLcode err_code, long resp_code, chunk_t *chunk, int single_chunk)
#else /* not ENABLE_METALINK */
static int is_valid_response(UriUriA *uri, CURLcode err_code, long resp_code)
#endif /* not ENABLE_METALINK */
{
	if (err_code)
		return 0;

#ifdef ENABLE_METALINK
	if (chunk) {
		if (is_uri_http(uri))
			return (resp_code == 206 || (resp_code == 200 && single_chunk)) && is_chunk_downloaded(chunk);
		else
			return is_chunk_downloaded(chunk);
	}
#endif /* ENABLE_METALINK */

	if (is_uri_http(uri))
		return resp_code == 200;

	return 1;
}
コード例 #3
0
ファイル: buffer_array.c プロジェクト: henrycg/mulk
int is_uri_http_buffer(CURL *id)
{
	int i;

	if ((i = get_buffer(id)) < 0)
		return 0;

	if (is_uri_http(buffer_array[i].uri))
		return 1;

	return 0;
}
コード例 #4
0
ファイル: url_list.c プロジェクト: henrycg/mulk
void add_new_url_and_check(const char *base_url, const char *url, int level)
{
	UriUriA *uri = NULL;

	if ((uri = create_absolute_uri(base_url, url)) == NULL)
		return;

	/* check protocol */
	if (!is_uri_http(uri) && (!option_values.follow_ftp || !is_uri_ftp(uri))) {
		uri_free(uri);
		return;
	}

	/* check domains */
	if (!is_host_compatible_with_domains(uri)) {
		uri_free(uri);
		return;
	}

	push_unique_uri(uri, level);
}