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; }
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; }
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; }
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; }
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; }
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); }
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; }