summaryrefslogtreecommitdiffstats
path: root/binding/curl-wrap.c
diff options
context:
space:
mode:
Diffstat (limited to 'binding/curl-wrap.c')
-rw-r--r--binding/curl-wrap.c211
1 files changed, 0 insertions, 211 deletions
diff --git a/binding/curl-wrap.c b/binding/curl-wrap.c
deleted file mode 100644
index 986b69f..0000000
--- a/binding/curl-wrap.c
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * Copyright (C) 2015, 2016 "IoT.bzh"
- * Author: José Bollo <jose.bollo@iot.bzh>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#define _GNU_SOURCE
-
-#include <stdint.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <pthread.h>
-
-#include <curl/curl.h>
-
-#include "curl-wrap.h"
-#include "escape.h"
-
-
-/* internal representation of buffers */
-struct buffer {
- size_t size;
- char *data;
-};
-
-/* write callback for filling buffers with the response */
-static size_t write_callback(char *ptr, size_t size, size_t nmemb, void *userdata)
-{
- struct buffer *buffer = userdata;
- size_t sz = size * nmemb;
- size_t old_size = buffer->size;
- size_t new_size = old_size + sz;
- char *data = realloc(buffer->data, new_size + 1);
- if (!data)
- return 0;
- memcpy(&data[old_size], ptr, sz);
- data[new_size] = 0;
- buffer->size = new_size;
- buffer->data = data;
- return sz;
-}
-
-/*
- * Perform the CURL operation for 'curl' and put the result in
- * memory. If 'result' isn't NULL it receives the returned content
- * that then must be freed. If 'size' isn't NULL, it receives the
- * size of the returned content. Note that if not NULL, the real
- * content is one byte greater than the read size and the last byte
- * zero. This facility allows to handle the returned content as a
- * null terminated C-string.
- */
-int curl_wrap_perform(CURL *curl, char **result, size_t *size)
-{
- int rc;
- struct buffer buffer;
- CURLcode code;
-
- /* init tthe buffer */
- buffer.size = 0;
- buffer.data = NULL;
-
- /* Perform the request, res will get the return code */
- curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
- curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer);
-
- /* Perform the request, res will get the return code */
- code = curl_easy_perform(curl);
- rc = code == CURLE_OK;
-
- /* Check for no errors */
- if (rc) {
- /* no error */
- if (size)
- *size = buffer.size;
- if (result)
- *result = buffer.data;
- else
- free(buffer.data);
- } else {
- /* had error */
- if (size)
- *size = 0;
- if (result)
- *result = NULL;
- free(buffer.data);
- }
-
- return rc;
-}
-
-void curl_wrap_do(CURL *curl, void (*callback)(void *closure, int status, CURL *curl, const char *result, size_t size), void *closure)
-{
- int rc;
- char *result;
- size_t size;
- char errbuf[CURL_ERROR_SIZE];
-
- curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errbuf);
- rc = curl_wrap_perform(curl, &result, &size);
- if (rc)
- callback(closure, rc, curl, result, size);
- else
- callback(closure, rc, curl, errbuf, 0);
- free(result);
- curl_easy_cleanup(curl);
-}
-
-int curl_wrap_content_type_is(CURL *curl, const char *value)
-{
- char *actual;
- CURLcode code;
-
- code = curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &actual);
- if (code != CURLE_OK || !actual)
- return 0;
-
- return !strncasecmp(actual, value, strcspn(actual, "; "));
-}
-
-CURL *curl_wrap_prepare_get_url(const char *url)
-{
- CURL *curl;
- CURLcode code;
-
- curl = curl_easy_init();
- if(curl) {
- code = curl_easy_setopt(curl, CURLOPT_URL, url);
- if (code == CURLE_OK)
- return curl;
- curl_easy_cleanup(curl);
- }
- return NULL;
-}
-
-CURL *curl_wrap_prepare_get(const char *base, const char *path, const char * const *args)
-{
- CURL *res;
- char *url;
-
- url = escape_url(base, path, args, NULL);
- res = url ? curl_wrap_prepare_get_url(url) : NULL;
- free(url);
- return res;
-}
-
-int curl_wrap_add_header(CURL *curl, const char *header)
-{
- int rc;
- struct curl_slist *list;
-
- list = curl_slist_append(NULL, header);
- rc = list ? curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list) == CURLE_OK : 0;
-/*
- curl_slist_free_all(list);
-*/
- return rc;
-}
-
-int curl_wrap_add_header_value(CURL *curl, const char *name, const char *value)
-{
- char *h;
- int rc;
-
- rc = asprintf(&h, "%s: %s", name, value);
- rc = rc < 0 ? 0 : curl_wrap_add_header(curl, h);
- free(h);
- return rc;
-}
-
-
-CURL *curl_wrap_prepare_post_url_data(const char *url, const char *datatype, const char *data, size_t szdata)
-{
- CURL *curl;
-
- curl = curl_easy_init();
- if (curl
- && CURLE_OK == curl_easy_setopt(curl, CURLOPT_URL, url)
- && (!szdata || CURLE_OK == curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, szdata))
- && CURLE_OK == curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data)
- && (!datatype || curl_wrap_add_header_value(curl, "content-type", datatype)))
- return curl;
- curl_easy_cleanup(curl);
- return NULL;
-}
-
-CURL *curl_wrap_prepare_post(const char *base, const char *path, const char * const *args)
-{
- CURL *res;
- char *url;
- char *data;
- size_t szdata;
-
- url = escape_url(base, path, NULL, NULL);
- data = escape_args(args, &szdata);
- res = url ? curl_wrap_prepare_post_url_data(url, NULL, data, szdata) : NULL;
- free(url);
- return res;
-}
-
-/* vim: set colorcolumn=80: */