Exemple #1
0
mulk_type_return_t mulk_add_new_url(const char *url)
{
	UriUriA *new_uri = NULL;
#ifdef ENABLE_RECURSION
	char *host = NULL;
#endif
	
	if ((new_uri = create_absolute_uri(NULL, url)) == NULL)
		goto Rejected;

#ifdef ENABLE_RECURSION
	if ((host = get_host(new_uri)) == NULL)
		goto Rejected; 
#endif

	if (!push_unique_uri(new_uri, 1))
		goto Rejected;

#ifdef ENABLE_RECURSION
	add_url_to_default_domains(host);

	string_free(host);
#endif

	return MULK_RET_OK;

Rejected:
#ifdef ENABLE_RECURSION
	string_free(host);
#endif
	uri_free(new_uri);

	return MULK_RET_URL_ERR;
}
Exemple #2
0
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;
}
Exemple #3
0
int	filter_uri(UriUriA **uri, int level)
{
	char *url;

	if (!option_values.exec_filter)
		return 0;

	if (!uri)
		return -1;

	if ((url = uri2string(*uri)) == NULL)
		return -1;

	uri_free(*uri);
	*uri = NULL;

	if (execute_filter(option_values.exec_filter, &url, level)) {
		string_free(url);
		return -1;
	}

	*uri = create_absolute_uri(NULL, url);
	string_free(url);

	if (!*uri)
		return -1;

	return 0;
}
Exemple #4
0
UriUriA *filename2absolute_uri(const char *abs_filename)
{
	UriUriA *abs_uri, *file_uri = NULL;
	int length = 8 + 3 * strlen(abs_filename);
	char *abs_str_uri = string_alloc(length);

#ifdef _WIN32
	if (uriWindowsFilenameToUriStringA(abs_filename, abs_str_uri) != URI_SUCCESS)
#else
	if (uriUnixFilenameToUriStringA(abs_filename, abs_str_uri) != URI_SUCCESS)
#endif
	{
		string_free(abs_str_uri);
		return NULL;
	}

	file_uri = create_absolute_uri(NULL, "file:///");
	abs_uri = create_absolute_uri(file_uri, abs_str_uri);

	string_free(abs_str_uri);
	uri_free(file_uri);

	return abs_uri;
}
Exemple #5
0
mulk_type_return_t mulk_add_new_url(const char *url)
{
	UriUriA *new_uri = NULL;
	mulk_type_return_t ret = MULK_RET_OK;
	
	if ((new_uri = create_absolute_uri(NULL, url)) == NULL)
		return MULK_RET_URL_ERR;

#ifdef ENABLE_RECURSION
	if ((ret = add_url_to_default_domains(new_uri)) != MULK_RET_OK)
		return ret;
#endif
	push_unique_uri(new_uri, 1);

	return ret;
}
Exemple #6
0
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);
}
Exemple #7
0
static mulk_type_return_t filter_buffer(int i, int valid_res, const char *base_url, long err_code, long resp_code)
{
	char *newfilename = NULL;
	char *newmimefilename = NULL;
	char *subtype = NULL;
	char *type = NULL;
	mulk_type_return_t ret = MULK_RET_OK;
	buffer_t *buffer = buffer_array + i;

#ifdef ENABLE_METALINK
	metalink_file_list_t *metalink = buffer->url->metalink_uri;

	if (metalink)
		buffer->url->http_code = 0;
	else
#endif
	{
		buffer->url->err_code = err_code;
		buffer->url->http_code = resp_code;
	}

	if (!valid_res) {
#ifdef ENABLE_METALINK
		if (metalink)
			buffer->url->err_code = METALINK_RES_NO_NORE_RESOURCES;
#endif
		remove(buffer->filename);
		return MULK_RET_ERR;
	}

#ifdef ENABLE_RECURSION
	if (is_html_file(buffer->url->mimetype)) 
		parse_urls(buffer->filename, base_url, buffer->url->level);
#endif

#ifdef ENABLE_METALINK
	if (option_values.follow_metalink && is_metalink_file(buffer->url->mimetype)) 
		add_new_metalink(buffer->filename, buffer->url->level);

	if (metalink) {
#ifdef ENABLE_CHECKSUM
		if (verify_metalink_file(metalink->file, buffer->filename) == CS_VERIFY_ERR) {
			MULK_NOTE((_("The file will be deleted.\n")));
			buffer->url->err_code = METALINK_RES_WRONG_CHECKSUM;

			ret = MULK_RET_ERR;
		}
		else
#endif /* ENABLE_CHECKSUM */
		{
			string_printf(&newfilename, "%s%s", option_values.file_output_directory,
				metalink->file->name);
			buffer->url->err_code = METALINK_RES_OK;
		}
	}
	else 
#endif /* ENABLE_METALINK */
	if (!option_values.disable_save_tree) {
		UriUriA *uri = create_absolute_uri(NULL, base_url);
		char *furi_str = uri2filename(uri);

		if (furi_str) {
			string_printf(&newfilename, "%s%s", option_values.file_output_directory, furi_str);

			/* add index.<mime-type> if the filename represents a directory name */
			if (newfilename[strlen(newfilename)-1] == *DIR_SEPAR_STR) {
				string_cat(&newfilename, "index.");
				if (extract_mime_type(buffer->url->mimetype, NULL, &subtype) == MULK_RET_OK) {
					string_cat(&newfilename, subtype);
					string_free(&subtype);
				} else
					string_cat(&newfilename, "bin");
			}
		}

		string_free(&furi_str);
		uri_free(uri);
	}

	if ((is_gif_image(buffer->url->mimetype) && is_valid_gif_image(buffer->filename))
		|| (is_png_image(buffer->url->mimetype) && is_valid_png_image(buffer->filename)) 
		|| (is_jpeg_image(buffer->url->mimetype) && is_valid_jpeg_image(buffer->filename))
		|| (is_saved_mime_type(buffer->url->mimetype))) {
		if (extract_mime_type(buffer->url->mimetype, &type, &subtype) == MULK_RET_OK) {
			string_printf(&newmimefilename, "%s%s%s%s_%05d.%s", option_values.mime_output_directory,
				type, DIR_SEPAR_STR, subtype, buffer->url->id, subtype);
			string_free(&type);
			string_free(&subtype);
		}
	}

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