mirror of
https://github.com/Llewellynvdm/conky.git
synced 2025-01-27 00:58:36 +00:00
C++ify some curl stuff.
This commit is contained in:
parent
93c6baebb6
commit
ca9acc13c0
@ -54,18 +54,17 @@ typedef struct _ccurl_headers_t {
|
||||
} ccurl_headers_t;
|
||||
|
||||
/* finds a location based on uri in the list provided */
|
||||
ccurl_location_ptr ccurl_find_location(ccurl_location_list &locations, char *uri)
|
||||
ccurl_location_ptr ccurl_find_location(ccurl_location_list &locations, const std::string &uri)
|
||||
{
|
||||
for (ccurl_location_list::iterator i = locations.begin();
|
||||
i != locations.end(); i++) {
|
||||
if ((*i)->uri &&
|
||||
strcmp((*i)->uri, uri) == EQUAL) {
|
||||
if ((*i)->uri == std::string(uri)) {
|
||||
return *i;
|
||||
}
|
||||
}
|
||||
ccurl_location_ptr next = ccurl_location_ptr(new ccurl_location_t);
|
||||
DBGP("new curl location: '%s'", uri);
|
||||
next->uri = strndup(uri, text_buffer_size);
|
||||
DBGP("new curl location: '%s'", uri.c_str());
|
||||
next->uri = std::string(uri, text_buffer_size);
|
||||
locations.push_back(next);
|
||||
return next;
|
||||
}
|
||||
@ -75,9 +74,6 @@ void ccurl_free_locations(ccurl_location_list &locations)
|
||||
{
|
||||
for (ccurl_location_list::iterator i = locations.begin();
|
||||
i != locations.end(); i++) {
|
||||
free_and_zero((*i)->uri);
|
||||
free_and_zero((*i)->last_modified);
|
||||
free_and_zero((*i)->etag);
|
||||
free_and_zero((*i)->result);
|
||||
(*i)->p_timed_thread.reset();
|
||||
}
|
||||
@ -130,7 +126,7 @@ void ccurl_fetch_data(thread_handle &handle, const ccurl_location_ptr &curloc)
|
||||
CURLcode res;
|
||||
struct curl_slist *headers = NULL;
|
||||
|
||||
// curl temps
|
||||
/* curl temps */
|
||||
ccurl_memory_t chunk;
|
||||
ccurl_headers_t response_headers;
|
||||
|
||||
@ -140,8 +136,8 @@ void ccurl_fetch_data(thread_handle &handle, const ccurl_location_ptr &curloc)
|
||||
|
||||
curl = curl_easy_init();
|
||||
if (curl) {
|
||||
DBGP("reading curl data from '%s'", curloc->uri);
|
||||
curl_easy_setopt(curl, CURLOPT_URL, curloc->uri);
|
||||
DBGP("reading curl data from '%s'", curloc->uri.c_str());
|
||||
curl_easy_setopt(curl, CURLOPT_URL, curloc->uri.c_str());
|
||||
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1);
|
||||
curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, ccurl_parse_header_callback);
|
||||
curl_easy_setopt(curl, CURLOPT_HEADERDATA, (void *) &response_headers);
|
||||
@ -152,19 +148,19 @@ void ccurl_fetch_data(thread_handle &handle, const ccurl_location_ptr &curloc)
|
||||
curl_easy_setopt(curl, CURLOPT_LOW_SPEED_LIMIT, 1000);
|
||||
curl_easy_setopt(curl, CURLOPT_LOW_SPEED_TIME, 60);
|
||||
|
||||
if (curloc->last_modified) {
|
||||
if (!curloc->last_modified.empty()) {
|
||||
const char *header = "If-Modified-Since: ";
|
||||
int len = strlen(header) + strlen(curloc->last_modified) + 1;
|
||||
int len = strlen(header) + curloc->last_modified.size() + 1;
|
||||
char *str = (char*) malloc(len);
|
||||
snprintf(str, len, "%s%s", header, curloc->last_modified);
|
||||
snprintf(str, len, "%s%s", header, curloc->last_modified.c_str());
|
||||
headers = curl_slist_append(headers, str);
|
||||
free(str);
|
||||
}
|
||||
if (curloc->etag) {
|
||||
if (!curloc->etag.empty()) {
|
||||
const char *header = "If-None-Match: ";
|
||||
int len = strlen(header) + strlen(curloc->etag) + 1;
|
||||
int len = strlen(header) + curloc->etag.size() + 1;
|
||||
char *str = (char*) malloc(len);
|
||||
snprintf(str, len, "%s%s", header, curloc->etag);
|
||||
snprintf(str, len, "%s%s", header, curloc->etag.c_str());
|
||||
headers = curl_slist_append(headers, str);
|
||||
free(str);
|
||||
}
|
||||
@ -182,14 +178,14 @@ void ccurl_fetch_data(thread_handle &handle, const ccurl_location_ptr &curloc)
|
||||
case 200:
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(handle.mutex());
|
||||
free_and_zero(curloc->last_modified);
|
||||
free_and_zero(curloc->etag);
|
||||
curloc->last_modified.clear();
|
||||
curloc->etag.clear();
|
||||
if (response_headers.last_modified) {
|
||||
curloc->last_modified =
|
||||
strdup(response_headers.last_modified);
|
||||
std::string(response_headers.last_modified);
|
||||
}
|
||||
if (response_headers.etag) {
|
||||
curloc->etag = strdup(response_headers.etag);
|
||||
curloc->etag = std::string(response_headers.etag);
|
||||
}
|
||||
curloc->process_function(curloc->result, chunk.memory);
|
||||
}
|
||||
@ -269,7 +265,7 @@ static void ccurl_parse_data(char *result, const char *data)
|
||||
}
|
||||
|
||||
/* prints result data to text buffer, used by $curl */
|
||||
void ccurl_process_info(char *p, int p_max_size, char *uri, int interval)
|
||||
void ccurl_process_info(char *p, int p_max_size, const std::string &uri, int interval)
|
||||
{
|
||||
ccurl_location_ptr curloc = ccurl_find_location(ccurl_locations, uri);
|
||||
if (!curloc->p_timed_thread) {
|
||||
|
@ -34,9 +34,9 @@
|
||||
struct ccurl_location_t {
|
||||
ccurl_location_t() : uri(0), last_modified(0), etag(0), result(0) {}
|
||||
/* uri of location */
|
||||
char *uri;
|
||||
char *last_modified;
|
||||
char *etag;
|
||||
std::string uri;
|
||||
std::string last_modified;
|
||||
std::string etag;
|
||||
/* a pointer to some arbitrary data, will be freed by ccurl_free_info() if
|
||||
* non-null */
|
||||
char *result;
|
||||
@ -52,7 +52,7 @@ typedef std::shared_ptr<ccurl_location_t> ccurl_location_ptr;
|
||||
typedef std::list<ccurl_location_ptr> ccurl_location_list;
|
||||
|
||||
/* find an existing location for the uri specified */
|
||||
ccurl_location_ptr ccurl_find_location(ccurl_location_list &locations, char *uri);
|
||||
ccurl_location_ptr ccurl_find_location(ccurl_location_list &locations, const std::string &uri);
|
||||
/* free all locations (as well as location->uri and location->result if
|
||||
* non-null) */
|
||||
void ccurl_free_locations(ccurl_location_list &locations);
|
||||
@ -68,7 +68,7 @@ void ccurl_init_thread(const ccurl_location_ptr &curloc, int interval);
|
||||
/* for $curl, free internal list pointer */
|
||||
void ccurl_free_info(void);
|
||||
/* runs instance of $curl */
|
||||
void ccurl_process_info(char *p, int p_max_size, char *uri, int interval);
|
||||
void ccurl_process_info(char *p, int p_max_size, const std::string &uri, int interval);
|
||||
|
||||
void curl_parse_arg(struct text_object *, const char *);
|
||||
void curl_print(struct text_object *, char *, int);
|
||||
|
@ -52,7 +52,7 @@ void rss_free_info(void)
|
||||
ccurl_free_locations(locations_rss);
|
||||
}
|
||||
|
||||
static void rss_process_info(char *p, int p_max_size, char *uri, char *action, int
|
||||
static void rss_process_info(char *p, int p_max_size, const std::string &uri, char *action, int
|
||||
act_par, int interval, unsigned int nrspaces)
|
||||
{
|
||||
PRSS *data;
|
||||
|
@ -234,7 +234,7 @@ char *scan_graph(struct text_object *obj, const char *args, double defscale)
|
||||
if (*buf == '"') {
|
||||
char *_ptr;
|
||||
size_t _size;
|
||||
if (_ptr = const_cast<char*>(strrchr(args, '"'))) {
|
||||
if ((_ptr = const_cast<char*>(strrchr(args, '"')))) {
|
||||
_size = _ptr - args - 1;
|
||||
}
|
||||
_size = _size < 1024 ? _size : 1023;
|
||||
|
@ -709,7 +709,8 @@ void wind_deg_to_dir(char *p, int p_max_size, int wind_deg) {
|
||||
}
|
||||
|
||||
#ifdef BUILD_WEATHER_XOAP
|
||||
static void weather_forecast_process_info(char *p, int p_max_size, char *uri, unsigned int day, char *data_type, int interval)
|
||||
static void weather_forecast_process_info(char *p, int p_max_size, const
|
||||
std::string &uri, unsigned int day, char *data_type, int interval)
|
||||
{
|
||||
PWEATHER_FORECAST *data;
|
||||
|
||||
@ -754,7 +755,7 @@ static void weather_forecast_process_info(char *p, int p_max_size, char *uri, un
|
||||
}
|
||||
#endif /* BUILD_WEATHER_XOAP */
|
||||
|
||||
static void weather_process_info(char *p, int p_max_size, char *uri, char *data_type, int interval)
|
||||
static void weather_process_info(char *p, int p_max_size, const std::string &uri, char *data_type, int interval)
|
||||
{
|
||||
static const char *wc[] = {
|
||||
"", "drizzle", "rain", "hail", "soft hail",
|
||||
|
Loading…
x
Reference in New Issue
Block a user