#include <mongoose.h>\r
\r
//#define HTTP_DATA_SIZE 1024\r
+#define AUTHORIZATION_HEADER_LEN 64\r
\r
typedef struct MatrixHttpConnection {\r
struct mg_mgr mgr;\r
// memcpy_s(client->data, 1024, hm->message.ptr, hm->message.len);\r
// client->dataLen = hm->message.len;\r
memcpy_s(conn->data, conn->dataCap, hm->body.ptr, hm->body.len);\r
+ conn->data[hm->body.len] = '\0';\r
conn->dataLen = hm->body.len;\r
conn->dataReceived = true;\r
}\r
MatrixHttpGet(\r
MatrixClient * client,\r
const char * url,\r
- char * outResponseBuffer, int outResponseCap)\r
+ char * outResponseBuffer, int outResponseCap,\r
+ bool authenticated)\r
{\r
MatrixHttpConnection * conn = (MatrixHttpConnection *)client->httpUserData;\r
\r
\r
struct mg_str host = mg_url_host(client->server);\r
\r
+ static char authorizationHeader[AUTHORIZATION_HEADER_LEN] = "\0";\r
+ if (authenticated)\r
+ sprintf_s(authorizationHeader, AUTHORIZATION_HEADER_LEN,\r
+ "Authorization: Bearer %s\r\n", client->accessTokenBuffer);\r
+\r
mg_printf(conn->connection,\r
"GET %s HTTP/1.1\r\n"\r
"Host: %.*s\r\n"\r
+ "%s"\r
"\r\n",\r
url,\r
- host.len, host.ptr);\r
+ host.len, host.ptr,\r
+ authorizationHeader);\r
\r
conn->data = outResponseBuffer;\r
conn->dataCap = outResponseCap;\r
MatrixClient * client,\r
const char * url,\r
const char * requestBuffer,\r
- char * outResponseBuffer, int outResponseCap)\r
+ char * outResponseBuffer, int outResponseCap,\r
+ bool authenticated)\r
{\r
MatrixHttpConnection * conn = (MatrixHttpConnection *)client->httpUserData;\r
\r
\r
struct mg_str host = mg_url_host(client->server);\r
\r
+ static char authorizationHeader[AUTHORIZATION_HEADER_LEN] = "\0";\r
+ if (authenticated)\r
+ sprintf_s(authorizationHeader, AUTHORIZATION_HEADER_LEN,\r
+ "Authorization: Bearer %s\r\n", client->accessTokenBuffer);\r
+\r
mg_printf(conn->connection,\r
"POST %s HTTP/1.0\r\n"\r
"Host: %.*s\r\n"\r
+ "%s"\r
+ "Content-Type: application/json\r\n"\r
+ "Content-Length: %d\r\n"\r
+ "\r\n"\r
+ "%s"\r
+ "\r\n",\r
+ url,\r
+ host.len, host.ptr,\r
+ authorizationHeader,\r
+ strlen(requestBuffer),\r
+ requestBuffer);\r
+\r
+ conn->data = outResponseBuffer;\r
+ conn->dataCap = outResponseCap;\r
+ \r
+ while (! conn->dataReceived)\r
+ mg_mgr_poll(&conn->mgr, 1000);\r
+\r
+ return conn->dataReceived;\r
+}\r
+\r
+bool\r
+MatrixHttpPut(\r
+ MatrixClient * client,\r
+ const char * url,\r
+ const char * requestBuffer,\r
+ char * outResponseBuffer, int outResponseCap,\r
+ bool authenticated)\r
+{\r
+ MatrixHttpConnection * conn = (MatrixHttpConnection *)client->httpUserData;\r
+\r
+ conn->dataReceived = false;\r
+\r
+ struct mg_str host = mg_url_host(client->server);\r
+\r
+ static char authorizationHeader[AUTHORIZATION_HEADER_LEN];\r
+ if (authenticated)\r
+ sprintf_s(authorizationHeader, AUTHORIZATION_HEADER_LEN,\r
+ "Authorization: Bearer %s\r\n", client->accessTokenBuffer);\r
+ else\r
+ authorizationHeader[0] = '\0';\r
+\r
+ mg_printf(conn->connection,\r
+ "PUT %s HTTP/1.0\r\n"\r
+ "Host: %.*s\r\n"\r
+ "%s"\r
"Content-Type: application/json\r\n"\r
"Content-Length: %d\r\n"\r
"\r\n"\r
"\r\n",\r
url,\r
host.len, host.ptr,\r
+ authorizationHeader,\r
strlen(requestBuffer),\r
requestBuffer);\r
\r
mg_mgr_poll(&conn->mgr, 1000);\r
\r
return conn->dataReceived;\r
-}
\ No newline at end of file
+}\r