2 * Copyright (C) 2012 Toni Gundogdu <legatvs@gmail.com>
4 * This file is part of libquvi-scripts <http://quvi.sourceforge.net>.
6 * This program is free software: you can redistribute it and/or
7 * modify it under the terms of the GNU Affero General Public
8 * License as published by the Free Software Foundation, either
9 * version 3 of the License, or (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU Affero General Public License for more details.
16 * You should have received a copy of the GNU Affero General
17 * Public License along with this program. If not, see
18 * <http://www.gnu.org/licenses/>.
26 #include <curl/curl.h>
33 typedef struct temp_s
*temp_t
;
35 static gpointer
temp_new()
37 return (g_new0(struct temp_s
, 1));
40 static void temp_free(temp_t t
)
52 /* cURL write callback. */
53 static gsize
temp_wrcb(gpointer p
, gsize sz
, gsize nmemb
, gpointer d
)
55 const gsize rsize
= sz
*nmemb
;
60 np
= g_realloc(t
->p
, t
->size
+rsize
+1);
65 memcpy(&(t
->p
[t
->size
]), p
, rsize
);
72 static void set_opts(CURL
*c
, temp_t t
, const gchar
*url
)
74 typedef curl_write_callback cwc
;
76 curl_easy_setopt(c
, CURLOPT_USERAGENT
, "Mozilla/5.0");
77 curl_easy_setopt(c
, CURLOPT_FOLLOWLOCATION
, 1L);
78 curl_easy_setopt(c
, CURLOPT_MAXREDIRS
, 5L); /* http://is.gd/kFsvE4 */
79 curl_easy_setopt(c
, CURLOPT_NOBODY
, 0L);
81 curl_easy_setopt(c
, CURLOPT_WRITEFUNCTION
, (cwc
) temp_wrcb
);
82 curl_easy_setopt(c
, CURLOPT_URL
, url
);
83 curl_easy_setopt(c
, CURLOPT_WRITEDATA
, t
);
84 /* CURLOPT_ENCODING -> CURLOPT_ACCEPT_ENCODING 7.21.6+ */
85 curl_easy_setopt(c
, CURLOPT_ENCODING
, "");
87 if (chk_env("TEST_VERBOSE", NULL
) == TRUE
)
88 curl_easy_setopt(c
, CURLOPT_VERBOSE
, 1L);
91 static void reset_opts(CURL
*c
)
93 curl_easy_setopt(c
, CURLOPT_WRITEFUNCTION
, NULL
);
94 curl_easy_setopt(c
, CURLOPT_WRITEDATA
, NULL
);
97 static gint
_fetch(CURL
*c
)
103 curlcode
= curl_easy_perform(c
);
104 curl_easy_getinfo(c
, CURLINFO_RESPONSE_CODE
, &respcode
);
108 if (curlcode
== CURLE_OK
&& respcode
== 200)
112 if (curlcode
== CURLE_OK
)
114 #define _EOK "server responded with code %03ld"
115 g_test_message(_EOK
, respcode
);
120 const gchar
*s
= curl_easy_strerror(curlcode
);
121 const glong c
= respcode
;
122 const gint cc
= curlcode
;
123 #define _ENO "%s (HTTP/%03ld, cURL=0x%03x)"
124 g_test_message(_ENO
, s
, c
, cc
);
132 gchar
*fetch(const gchar
*url
)
139 curl_global_init(CURL_GLOBAL_ALL
);
141 c
= curl_easy_init();
144 g_message("curl_easy_init returned NULL");
161 curl_easy_cleanup(c
);
164 curl_global_cleanup();
169 /* vim: set ts=2 sw=2 tw=72 expandtab: */