Ejemplo n.º 1
0
static url_list_t *push_uri(UriUriA *uri, int level)
{
	url_list_t *elem;

	if (!uri)
		return NULL;

	if (filter_uri(&uri, level))
		return NULL;

	elem = create_new_element();
	elem->level = level;
	elem->uri = uri;
	elem->filename = uri2filename(uri);

	return elem;
}
Ejemplo n.º 2
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;
}