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