summaryrefslogtreecommitdiff
path: root/request.h
diff options
context:
space:
mode:
Diffstat (limited to 'request.h')
-rw-r--r--request.h113
1 files changed, 12 insertions, 101 deletions
diff --git a/request.h b/request.h
index 932f75e..4c559fb 100644
--- a/request.h
+++ b/request.h
@@ -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