#endif
// Limit protocols to HTTPS, HTTP, FTP and FILE
- curl_easy_setopt(transfer->handle, CURLOPT_PROTOCOLS,
- CURLPROTO_HTTPS|CURLPROTO_HTTP|CURLPROTO_FTP|CURLPROTO_FILE);
+ curl_easy_setopt(transfer->handle, CURLOPT_PROTOCOLS_STR, "HTTPS,HTTP,FTP,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;
- long protocol;
+ char* scheme = NULL;
const char* url;
long response_code;
long http_version;
}
// Protocol
- curl_easy_getinfo(h, CURLINFO_PROTOCOL, &protocol);
+ curl_easy_getinfo(h, CURLINFO_SCHEME, &scheme);
// Effective URL
curl_easy_getinfo(h, CURLINFO_EFFECTIVE_URL, &url);
}
}
- switch (protocol) {
- case CURLPROTO_FILE:
- // Handle any errors
- if (code)
- r = pakfire_transfer_fail(downloader, transfer, code);
- else
- r = pakfire_transfer_save(downloader, transfer);
+ // 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;
-
- 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;
+ return r;
- case CURLPROTO_FTP:
- if (response_code == 226)
+ // HTTPS + HTTP
+ } else if ((strcmp(scheme, "HTTPS") == 0) || (strcmp(scheme, "HTTP") == 0)) {
+ switch (response_code) {
+ // 200 - OK
+ case 200:
r = pakfire_transfer_save(downloader, transfer);
- else
+ 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;
+ }
+
+ // 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);
+
+ return r;
}
// Success