diff options
Diffstat (limited to 'request.h')
-rw-r--r-- | request.h | 113 |
1 files changed, 12 insertions, 101 deletions
@@ -1,105 +1,16 @@ -#ifndef RTCLIENT_REQUEST_H -#define RTCLIENT_REQUEST_H +#ifndef REQUEST_H +#define REQUEST_H -#if defined(ANDROID) && defined(DEBUG) -#include <android/log.h> -#endif -#include <string.h> -#include <stdarg.h> -#include <stdio.h> -#include <curl/curl.h> - -extern CURL *curl; -extern char *server_url; - -inline void request(size_t (*writefunction)(void *, size_t, size_t, void *) - , void *writedata, struct curl_httppost *post, char *fmt, ...) -{ - va_list ap; - char *p, *sval; - unsigned int uval; - size_t length = strlen(server_url) + strlen(fmt); - - va_start(ap, fmt); - for (p = fmt; *p; p++) { - if (*p != '%') - continue; - switch(*++p) { - case 's': - sval = va_arg(ap, char *); - length += strlen(sval) - 2; - break; - case 'u': - uval = va_arg(ap, unsigned int); - do { - length++; - } while ((uval /= 10)); - length -= 2; - break; - case 'c': - length++; - break; - default: - break; - } - } - va_end(ap); +#include "rtclient/typedefs.h" - char url[length + 1]; - length = 0; - strcpy(url, server_url); +struct body { + size_t num_pairs; + struct pair { + const char *key; + const char *value; + } pairs[20]; +}; - va_start(ap, fmt); - for (p = fmt; *p; p++) { - if (*p != '%') - continue; - switch(*++p) { - case 's': - sval = va_arg(ap, char *); - strcat(url, sval); - length = strlen(url); - break; - case 'u': - uval = va_arg(ap, unsigned int); - sprintf(url, "%s%u", url, uval); - length = strlen(url); - break; - case 'c': - url[length++] = (char)va_arg(ap, int); - url[length] = '\0'; - break; - default: - break; - } - } - va_end(ap); +void request(void (*)(rtclient_response *), void (*)(void *), struct body *, char *, ...); - curl_easy_setopt(curl, CURLOPT_URL, url); - curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writefunction); - if (writedata) - curl_easy_setopt(curl, CURLOPT_WRITEDATA, writedata); - else - curl_easy_setopt(curl, CURLOPT_WRITEDATA, stdout); - if (post) - curl_easy_setopt(curl, CURLOPT_HTTPPOST, post); - else - curl_easy_setopt(curl, CURLOPT_HTTPGET, 1L); - -#ifdef DEBUG - CURLcode res = -#endif // DEBUG - curl_easy_perform(curl); -#ifdef DEBUG - if (res != CURLE_OK) { - const char *error = curl_easy_strerror(res); -#ifdef ANDROID - __android_log_print(ANDROID_LOG_ERROR, "librtclient", "%s: %s" - , __func__, error); -#else - fprintf(stderr, "%s: %s\n", __func__, error); -#endif // ANDROID - } -#endif // DEBUG -} - -#endif // RTCLIENT_REQUEST_H +#endif |