3 #include <curl/curl.h>
\r
18 size_t curlWriteString(char *ptr, size_t size, size_t nmemb, void *userdata) {
\r
19 WriteStr *writeStr = (WriteStr *)userdata;
\r
21 int toWrite = (int)size*nmemb;
\r
23 int writable = writeStr->cap - writeStr->len;
\r
24 int gonnaWrite = writable < (toWrite) ? writable : (toWrite);
\r
26 for (int i = 0; i < gonnaWrite; i++)
\r
28 int offset = writeStr->len;
\r
29 writeStr->ptr[i+offset] = ptr[i];
\r
32 writeStr->len += gonnaWrite;
\r
36 // size_t curlReadString(char *dst, size_t size, size_t nmemb, void *userdata) {
\r
37 // ReadStr *readStr = (ReadStr *)userdata;
\r
39 // size_t copyAmount = size*nmemb;
\r
40 // if (copyAmount > (readStr->str.len - readStr->pos)) {
\r
41 // copyAmount = (readStr->str.len - readStr->pos);
\r
44 // memcpy(dst, readStr->str.str + readStr->pos, copyAmount);
\r
45 // readStr->pos += copyAmount;
\r
46 // return copyAmount;
\r
50 curlPerform(CURL *curl) {
\r
51 // struct curl_slist *list = NULL;
\r
52 // list = curl_slist_append(list, uTokenHeaderStr);
\r
54 // curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list);
\r
56 CURLcode result = curl_easy_perform(curl);
\r
58 // curl_slist_free_all(list);
\r
67 MatrixClient * client,
\r
69 char * requestBuffer, int requestLen,
\r
70 char * outResponseBuffer, int outResponseCap, int * outResponseLen
\r
72 CURL *curl = (CURL *)client->httpUserData;
\r
77 int urlLen = strlen(url);
\r
79 char fullUrl[MAX_URL_LEN];
\r
80 for (int i = 0; i < client->serverLen; i++)
\r
81 fullUrl[i] = client->server[i];
\r
82 for (int i = 0; i < urlLen; i++)
\r
83 fullUrl[client->serverLen+i] = url[i];
\r
84 fullUrl[client->serverLen+urlLen] = '\0';
\r
85 curl_easy_setopt(curl, CURLOPT_URL, fullUrl);
\r
87 curl_easy_setopt(curl, CURLOPT_POST, 1L);
\r
88 curl_easy_setopt(curl, CURLOPT_POSTFIELDS, requestBuffer);
\r
89 curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, requestLen);
\r
91 curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
\r
92 curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
\r
94 WriteStr writeStr = {
\r
99 curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, curlWriteString);
\r
100 curl_easy_setopt(curl, CURLOPT_WRITEDATA, &writeStr);
\r
102 res = curlPerform(curl);
\r
104 *outResponseLen = writeStr.len;
\r
106 if(res != CURLE_OK)
\r
107 fprintf(stderr, "curl_easy_perform() failed: %s\n",
\r
108 curl_easy_strerror(res));
\r
112 return res == CURLE_OK;
\r