summaryrefslogtreecommitdiff
path: root/src/process_url.c
diff options
context:
space:
mode:
authorMole Shang <[email protected]>2023-08-09 15:00:56 +0800
committerMole Shang <[email protected]>2023-08-09 17:27:16 +0800
commit0947040d657bea73042bffd7a2c5c172d9c312a7 (patch)
tree9b1df14b6641c4062d666cff99f70265d78766ec /src/process_url.c
parent750643d1c7dd0b278f767eb832bb4e570c01d83f (diff)
downloadhinata-0947040d657bea73042bffd7a2c5c172d9c312a7.tar.gz
hinata-0947040d657bea73042bffd7a2c5c172d9c312a7.tar.bz2
hinata-0947040d657bea73042bffd7a2c5c172d9c312a7.zip
process_url: expose some new functions to be control cookies and referer
Diffstat (limited to 'src/process_url.c')
-rw-r--r--src/process_url.c33
1 files changed, 28 insertions, 5 deletions
diff --git a/src/process_url.c b/src/process_url.c
index 35abf46..77fd96d 100644
--- a/src/process_url.c
+++ b/src/process_url.c
@@ -244,7 +244,8 @@ static int parse_url(const char *URL, const char *outdir, char *fn) {
return 0;
}
-bool get_info(const char *URL, long *psize, char **p_content_type) {
+bool get_info(const char *URL, long *psize, char **p_content_type,
+ char **p_cookie) {
CURL *curl;
long resp_code;
bool support_range = false;
@@ -268,13 +269,22 @@ bool get_info(const char *URL, long *psize, char **p_content_type) {
*p_content_type = malloc(strlen(ct) + 1);
strcpy(*p_content_type, ct);
}
+ CURLHcode rh =
+ curl_easy_header(curl, "Set-Cookie", 0, CURLH_HEADER, -1, &pch);
+ if (logerr(rh)) {
+ goto end;
+ }
+ DEBUG_PRINT("Set-Cookie: %s\n", pch->value);
+ *p_cookie = malloc(strlen(pch->value) + 1);
+ strcpy(*p_cookie, pch->value);
+
r = curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD_T,
(curl_off_t *)psize);
if (logerr(r)) {
goto end;
}
- CURLHcode rh =
- curl_easy_header(curl, "Accept-Ranges", 0, CURLH_HEADER, -1, &pch);
+
+ rh = curl_easy_header(curl, "Accept-Ranges", 0, CURLH_HEADER, -1, &pch);
if (logerr(rh) || strcmp(pch->value, "bytes")) {
goto end;
}
@@ -392,7 +402,7 @@ static int download(curl_conf_t *curl_c) {
static thrd_info_t thrd_info[MAX_THREAD] = {0};
- bool support_range = get_info(curl_c->URL, &cl, NULL);
+ bool support_range = get_info(curl_c->URL, &cl, NULL, NULL);
DEBUG_PRINT("Size: %ld bytes.\n", cl);
if (support_range && cl > 0L) {
curl_c->dltotal = cl;
@@ -449,11 +459,24 @@ static char *callback_struct_convert_fullpath(char *filename) {
return tmp;
}
+void add_cookie(char *cookie) {
+ if (cookie_g) {
+ char *tmp = malloc(strlen(cookie_g) + strlen(cookie) + 3);
+ sprintf(tmp, "%s; %s", cookie_g, cookie);
+ free_and_nullify(cookie_g);
+ cookie_g = tmp;
+ } else {
+ cookie_g = cookie;
+ }
+}
+
+void set_referer(char *referer) { referer_g = referer; }
+
void curl_init(char *cookie) {
curl_global_init(CURL_GLOBAL_ALL);
h = curl_url();
+ add_cookie(cookie);
dl_queue = create_queue();
- cookie_g = cookie;
mtx_init(&mtx, mtx_plain);
cnd_init(&cnd);
}