#endif
// Limit protocols to HTTPS, HTTP, FTP and FILE
- curl_easy_setopt(transfer->handle, CURLOPT_PROTOCOLS_STR, "HTTPS,HTTP,FTP,FILE");
+ curl_easy_setopt(transfer->handle, CURLOPT_PROTOCOLS,
+ CURLPROTO_HTTPS|CURLPROTO_HTTP|CURLPROTO_FTP|CURLPROTO_FILE);
// Reference back to this transfer
curl_easy_setopt(transfer->handle, CURLOPT_PRIVATE, transfer);
static int pakfire_transfer_done(struct pakfire_downloader* downloader,
struct pakfire_transfer* transfer, int code) {
CURL* h = transfer->handle;
+
int r;
- char* scheme = NULL;
+ long protocol;
const char* url;
long response_code;
long http_version;
}
// Protocol
- curl_easy_getinfo(h, CURLINFO_SCHEME, &scheme);
+ curl_easy_getinfo(h, CURLINFO_PROTOCOL, &protocol);
// Effective URL
curl_easy_getinfo(h, CURLINFO_EFFECTIVE_URL, &url);
}
}
- // FILE
- if (strcmp(scheme, "FILE") == 0) {
- // Handle any errors
- if (code)
- r = pakfire_transfer_fail(downloader, transfer, code);
- else
- r = pakfire_transfer_save(downloader, transfer);
-
- return r;
-
- // HTTPS + HTTP
- } else if ((strcmp(scheme, "HTTPS") == 0) || (strcmp(scheme, "HTTP") == 0)) {
- switch (response_code) {
- // 200 - OK
- case 200:
+ switch (protocol) {
+ case CURLPROTO_FILE:
+ // Handle any errors
+ if (code)
+ r = pakfire_transfer_fail(downloader, transfer, code);
+ else
r = pakfire_transfer_save(downloader, transfer);
- if (r)
- return r;
- break;
- // Treat all other response codes as an error
- default:
- r = pakfire_transfer_fail(downloader, transfer, code);
- if (r)
- return r;
+ return r;
- // Error
- return 1;
- }
+ case CURLPROTO_HTTPS:
+ case CURLPROTO_HTTP:
+ switch (response_code) {
+ // 200 - OK
+ case 200:
+ r = pakfire_transfer_save(downloader, transfer);
+ if (r)
+ return r;
+ break;
+
+ // Treat all other response codes as an error
+ default:
+ r = pakfire_transfer_fail(downloader, transfer, code);
+ if (r)
+ return r;
+
+ // Error
+ return 1;
+ }
+ break;
- // FTP
- } else if (strcmp(scheme, "FTP") == 0) {
- if (response_code == 226)
- r = pakfire_transfer_save(downloader, transfer);
- else
- r = pakfire_transfer_fail(downloader, transfer, code);
+ case CURLPROTO_FTP:
+ if (response_code == 226)
+ r = pakfire_transfer_save(downloader, transfer);
+ else
+ r = pakfire_transfer_fail(downloader, transfer, code);
- return r;
+ return r;
}
// Success