Support media-type parameter in Content-Type
This commit is contained in:
parent
963bcde476
commit
383641d70a
@ -20,6 +20,9 @@
|
|||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
#include "tool_setup.h"
|
#include "tool_setup.h"
|
||||||
|
|
||||||
|
#include "rawstr.h"
|
||||||
|
|
||||||
#include "tool_metalink.h"
|
#include "tool_metalink.h"
|
||||||
#include "tool_getparam.h"
|
#include "tool_getparam.h"
|
||||||
#include "tool_paramhlp.h"
|
#include "tool_paramhlp.h"
|
||||||
@ -142,3 +145,24 @@ int parse_metalink(struct Configurable *config, const char *infile)
|
|||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns nonzero if content_type includes mediatype.
|
||||||
|
*/
|
||||||
|
static int check_content_type(const char *content_type, const char *media_type)
|
||||||
|
{
|
||||||
|
const char *ptr = content_type;
|
||||||
|
size_t media_type_len = strlen(media_type);
|
||||||
|
for(; *ptr && (*ptr == ' ' || *ptr == '\t'); ++ptr);
|
||||||
|
if(!*ptr) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return Curl_raw_nequal(ptr, media_type, media_type_len) &&
|
||||||
|
(*(ptr+media_type_len) == '\0' || *(ptr+media_type_len) == ' ' ||
|
||||||
|
*(ptr+media_type_len) == '\t' || *(ptr+media_type_len) == ';');
|
||||||
|
}
|
||||||
|
|
||||||
|
int check_metalink_content_type(const char *content_type)
|
||||||
|
{
|
||||||
|
return check_content_type(content_type, "application/metalink+xml");
|
||||||
|
}
|
||||||
|
@ -50,4 +50,10 @@ void clean_metalink(struct Configurable *config);
|
|||||||
|
|
||||||
int parse_metalink(struct Configurable *config, const char *infile);
|
int parse_metalink(struct Configurable *config, const char *infile);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns nonzero if content_type includes "application/metalink+xml"
|
||||||
|
* media-type. The check is done in case-insensitive manner.
|
||||||
|
*/
|
||||||
|
int check_metalink_content_type(const char *content_type);
|
||||||
|
|
||||||
#endif /* HEADER_CURL_TOOL_METALINK_H */
|
#endif /* HEADER_CURL_TOOL_METALINK_H */
|
||||||
|
@ -1582,8 +1582,7 @@ int operate(struct Configurable *config, int argc, argv_item_t argv[])
|
|||||||
Metalink file, parse it and add getout for them. */
|
Metalink file, parse it and add getout for them. */
|
||||||
char *content_type;
|
char *content_type;
|
||||||
curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &content_type);
|
curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &content_type);
|
||||||
if(content_type &&
|
if(content_type && check_metalink_content_type(content_type)) {
|
||||||
Curl_raw_equal("application/metalink+xml", content_type)) {
|
|
||||||
if(!(config->mute)) {
|
if(!(config->mute)) {
|
||||||
fprintf(config->errors, "\nParsing Metalink file: %s\n",
|
fprintf(config->errors, "\nParsing Metalink file: %s\n",
|
||||||
outs.filename);
|
outs.filename);
|
||||||
|
Loading…
Reference in New Issue
Block a user