+++ /dev/null
-#include "matrix.h"\r
-\r
-#include <curl/curl.h>\r
-\r
-\r
-\r
-typedef struct {\r
- char * ptr;\r
- int cap;\r
- int len;\r
-} WriteStr;\r
-\r
-// typedef struct {\r
-// Str str;\r
-// size_t pos;\r
-// } ReadStr;\r
-\r
-size_t curlWriteString(char *ptr, size_t size, size_t nmemb, void *userdata) {\r
- WriteStr *writeStr = (WriteStr *)userdata;\r
-\r
- int toWrite = (int)size*nmemb;\r
-\r
- int writable = writeStr->cap - writeStr->len;\r
- int gonnaWrite = writable < (toWrite) ? writable : (toWrite);\r
-\r
- for (int i = 0; i < gonnaWrite; i++)\r
- {\r
- int offset = writeStr->len;\r
- writeStr->ptr[i+offset] = ptr[i];\r
- }\r
-\r
- writeStr->len += gonnaWrite;\r
-\r
- return gonnaWrite;\r
-}\r
-// size_t curlReadString(char *dst, size_t size, size_t nmemb, void *userdata) {\r
-// ReadStr *readStr = (ReadStr *)userdata;\r
-\r
-// size_t copyAmount = size*nmemb;\r
-// if (copyAmount > (readStr->str.len - readStr->pos)) {\r
-// copyAmount = (readStr->str.len - readStr->pos);\r
-// }\r
-\r
-// memcpy(dst, readStr->str.str + readStr->pos, copyAmount);\r
-// readStr->pos += copyAmount;\r
-// return copyAmount;\r
-// }\r
-\r
-CURLcode\r
-curlPerform(CURL *curl) {\r
- // struct curl_slist *list = NULL;\r
- // list = curl_slist_append(list, uTokenHeaderStr);\r
- \r
- // curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list);\r
- \r
- CURLcode result = curl_easy_perform(curl);\r
-\r
- // curl_slist_free_all(list);\r
-\r
- return result;\r
-}\r
-\r
-\r
-\r
-bool\r
-MatrixHttpPost(\r
- MatrixClient * client,\r
- const char * url,\r
- char * requestBuffer, int requestLen,\r
- char * outResponseBuffer, int outResponseCap, int * outResponseLen\r
-) {\r
- CURL *curl = (CURL *)client->httpUserData;\r
-\r
- CURLcode res;\r
- \r
- if(curl) {\r
- int urlLen = strlen(url);\r
-\r
- char fullUrl[MAX_URL_LEN];\r
- for (int i = 0; i < client->serverLen; i++)\r
- fullUrl[i] = client->server[i];\r
- for (int i = 0; i < urlLen; i++)\r
- fullUrl[client->serverLen+i] = url[i];\r
- fullUrl[client->serverLen+urlLen] = '\0';\r
- curl_easy_setopt(curl, CURLOPT_URL, fullUrl);\r
- \r
- curl_easy_setopt(curl, CURLOPT_POST, 1L);\r
- curl_easy_setopt(curl, CURLOPT_POSTFIELDS, requestBuffer);\r
- curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, requestLen);\r
- \r
- curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);\r
- curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);\r
-\r
- WriteStr writeStr = {\r
- outResponseBuffer,\r
- outResponseCap,\r
- 0\r
- };\r
- curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, curlWriteString);\r
- curl_easy_setopt(curl, CURLOPT_WRITEDATA, &writeStr);\r
-\r
- res = curlPerform(curl);\r
-\r
- *outResponseLen = writeStr.len;\r
-\r
- if(res != CURLE_OK)\r
- fprintf(stderr, "curl_easy_perform() failed: %s\n",\r
- curl_easy_strerror(res));\r
- }\r
- \r
-\r
- return res == CURLE_OK;\r
-}
\ No newline at end of file