Metalink: updated message format

This commit is contained in:
Tatsuhiro Tsujikawa 2012-06-26 22:55:16 +09:00 committed by Yang Tse
parent 7aa95afadd
commit 3e6dfe138a
3 changed files with 41 additions and 21 deletions

View File

@ -330,12 +330,10 @@ static int check_hash(const char *filename,
digest_context *dctx;
int check_ok;
int fd;
fprintf(error,
"Metalink: Validating %s checksum (This may take some time)...\n",
digest_def->hash_name);
fprintf(error, "Metalink: validating (%s)...\n", filename);
fd = open(filename, O_RDONLY);
if(fd == -1) {
fprintf(error, "Metalink: Could not open file %s: %s\n", filename,
fprintf(error, "Metalink: validating (%s) FAILED (%s)\n", filename,
strerror(errno));
return -1;
}
@ -348,7 +346,7 @@ static int check_hash(const char *filename,
break;
}
else if(len == -1) {
fprintf(error, "Metalink: Could not read file %s: %s\n", filename,
fprintf(error, "Metalink: validating (%s) FAILED (%s)\n", filename,
strerror(errno));
Curl_digest_final(dctx, result);
close(fd);
@ -361,9 +359,10 @@ static int check_hash(const char *filename,
digest_def->dparams->digest_resultlen) == 0;
/* sha*sum style verdict output */
if(check_ok)
fprintf(error, "Metalink: %s: OK\n", filename);
fprintf(error, "Metalink: validating (%s) OK\n", filename);
else
fprintf(error, "Metalink: %s: FAILED\n", filename);
fprintf(error, "Metalink: validating (%s) FAILED (digest mismatch)\n",
filename);
free(result);
close(fd);
@ -469,7 +468,8 @@ static metalinkfile *new_metalinkfile(metalink_file_t *fileinfo)
return f;
}
int parse_metalink(struct Configurable *config, struct OutStruct *outs)
int parse_metalink(struct Configurable *config, struct OutStruct *outs,
const char *metalink_url)
{
metalink_error_t r;
metalink_t* metalink;
@ -482,8 +482,9 @@ int parse_metalink(struct Configurable *config, struct OutStruct *outs)
return -1;
}
if(metalink->files == NULL) {
fprintf(config->errors,
"\nMetalink: Metalink XML file does not contain any file.\n");
fprintf(config->errors, "\nMetalink: parsing (%s) WARNING "
"(missing or invalid file name)\n",
metalink_url);
metalink_delete(metalink);
return 0;
}
@ -491,9 +492,9 @@ int parse_metalink(struct Configurable *config, struct OutStruct *outs)
struct getout *url;
/* Skip an entry which has no resource. */
if(!(*files)->resources) {
fprintf(config->errors,
"\nMetalink: File %s does not have any resource.\n",
(*files)->name);
fprintf(config->errors, "\nMetalink: parsing (%s) WARNING "
"(missing or invalid resource)\n",
metalink_url, (*files)->name);
continue;
}
if(config->url_get ||
@ -558,7 +559,7 @@ size_t metalink_write_cb(void *buffer, size_t sz, size_t nmemb,
if(rv == 0)
return sz * nmemb;
else {
warnf(config, "Metalink: Failed to parse Metalink XML file\n");
fprintf(config->errors, "Metalink: parsing FAILED\n");
return failure;
}
}

View File

@ -90,7 +90,8 @@ extern const digest_params SHA256_DIGEST_PARAMS[1];
int count_next_metalink_resource(metalinkfile *mlfile);
void clean_metalink(struct Configurable *config);
int parse_metalink(struct Configurable *config, struct OutStruct *outs);
int parse_metalink(struct Configurable *config, struct OutStruct *outs,
const char *metalink_url);
/*
* Callback function for CURLOPT_WRITEFUNCTION

View File

@ -1346,7 +1346,12 @@ int operate(struct Configurable *config, int argc, argv_item_t argv[])
res = CURLE_OUT_OF_MEMORY;
goto show_error;
}
fprintf(config->errors, "Metalink: parsing (%s) metalink/XML...\n",
this_url);
}
else if(metalink)
fprintf(config->errors, "Metalink: fetching (%s) from (%s)...\n",
mlfile->filename, this_url);
#endif /* USE_METALINK */
res = curl_easy_perform(curl);
@ -1486,12 +1491,25 @@ int operate(struct Configurable *config, int argc, argv_item_t argv[])
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response);
if(response != 200 && response != 206) {
metalink_next_res = 1;
fprintf(config->errors,
"Metalink: fetching (%s) from (%s) FAILED "
"(HTTP status code %d)\n",
mlfile->filename, this_url, response);
}
}
}
else
else {
metalink_next_res = 1;
fprintf(config->errors,
"Metalink: fetching (%s) from (%s) FAILED (%s)\n",
mlfile->filename, this_url,
(errorbuffer[0]) ?
errorbuffer : curl_easy_strerror((CURLcode)res));
}
}
if(metalink && !metalink_next_res)
fprintf(config->errors, "Metalink: fetching (%s) from (%s) OK\n",
mlfile->filename, this_url);
/* In all ordinary cases, just break out of loop here */
break; /* curl_easy_perform loop */
@ -1603,12 +1621,12 @@ int operate(struct Configurable *config, int argc, argv_item_t argv[])
#ifdef USE_METALINK
if(!metalink && config->use_metalink && res == CURLE_OK) {
if(parse_metalink(config, &outs) == 0)
fprintf(config->errors,
"Metalink: Metalink XML file was parsed successfully\n");
if(parse_metalink(config, &outs, this_url) == 0)
fprintf(config->errors, "Metalink: parsing (%s) OK\n",
this_url);
else
fprintf(config->errors,
"Metalink: Could not parse Metalink XML file\n");
fprintf(config->errors, "Metalink: parsing (%s) FAILED\n",
this_url);
}
else if(metalink && res == CURLE_OK && !metalink_next_res) {
int rv = metalink_check_hash(config, mlfile, outs.filename);