]> gitweb.ps.run Git - matrix_esp_thesis/blobdiff - src/matrix.c
send example, http PUT
[matrix_esp_thesis] / src / matrix.c
index 790f0f572e77e446cbe56f86b64cb338ad378d44..7cc4de9fe11d25a054d6e62a44563d3f97682b82 100644 (file)
@@ -1,5 +1,6 @@
 #include "matrix.h"\r
 \r
+#include <time.h>\r
 #include <stdio.h>\r
 #include <mjson.h>\r
 \r
@@ -8,18 +9,37 @@
 #define LOGIN_RESPONSE_SIZE 1024\r
 #define LOGIN_URL "/_matrix/client/v3/login"\r
 \r
+#define ROOMEVENT_REQUEST_SIZE 1024\r
+#define ROOMEVENT_RESPONSE_SIZE 1024\r
+#define ROOMEVENT_URL "/_matrix/client/v3/rooms/%s/send/%s/%d"\r
+\r
 \r
 bool\r
 MatrixClientInit(\r
     MatrixClient * client,\r
-    char * server, int serverLen)\r
+    const char * server)\r
 {\r
     strcpy_s(\r
         client->server,\r
         SERVER_SIZE,\r
         server\r
     );\r
-    client->serverLen = serverLen;\r
+\r
+    return true;\r
+}\r
+\r
+bool\r
+MatrixClientSetAccessToken(\r
+    MatrixClient * client,\r
+    const char * accessToken)\r
+{\r
+    int accessTokenLen = strlen(accessToken);\r
+\r
+    if (accessTokenLen < ACCESS_TOKEN_SIZE - 1)\r
+        return false;\r
+\r
+    for (int i = 0; i < accessTokenLen; i++)\r
+        client->accessTokenBuffer[i] = accessToken[i];\r
 \r
     return true;\r
 }\r
@@ -28,55 +48,74 @@ MatrixClientInit(
 bool\r
 MatrixClientLoginPassword(\r
     MatrixClient * client,\r
-    char * username, int usernameLen,\r
-    char * password, int passwordLen,\r
-    char * displayName, int displayNameLen)\r
+    const char * username,\r
+    const char * password,\r
+    const char * displayName)\r
 {\r
     static char requestBuffer[LOGIN_REQUEST_SIZE];\r
 \r
-    int requestLen =\r
-        mjson_snprintf(requestBuffer, LOGIN_REQUEST_SIZE,\r
-            "{"\r
-                "\"type\": \"m.login.password\","\r
-                "\"identifier\": {"\r
-                    "\"type\": \"m.id.user\","\r
-                    "\"user\": \"%.*s\""\r
-                "},"\r
-                "\"password\": \"%.*s\","\r
-                "\"initial_device_display_name\": \"%.*s\""\r
-            "}",\r
-            usernameLen, username,\r
-            passwordLen, password,\r
-            displayNameLen, displayName);\r
+    mjson_snprintf(requestBuffer, LOGIN_REQUEST_SIZE,\r
+        "{"\r
+            "\"type\": \"m.login.password\","\r
+            "\"identifier\": {"\r
+                "\"type\": \"m.id.user\","\r
+                "\"user\": \"%s\""\r
+            "},"\r
+            "\"password\": \"%s\","\r
+            "\"initial_device_display_name\": \"%s\""\r
+        "}",\r
+        username,\r
+        password,\r
+        displayName);\r
     \r
     static char responseBuffer[LOGIN_RESPONSE_SIZE];\r
-    int responseLen;\r
     bool result =\r
         MatrixHttpPost(client,\r
             LOGIN_URL,\r
-            requestBuffer, requestLen,\r
-            responseBuffer, LOGIN_RESPONSE_SIZE, &responseLen);\r
+            requestBuffer,\r
+            responseBuffer, LOGIN_RESPONSE_SIZE,\r
+            false);\r
+    \r
+    int responseLen = strlen(responseBuffer);\r
     \r
     if (!result)\r
         return false;\r
 \r
-    client->accessTokenLen =\r
-        mjson_get_string(responseBuffer, responseLen,\r
-            "$.access_token",\r
-            client->accessTokenBuffer, ACCESS_TOKEN_SIZE);\r
-    client->deviceIdLen =\r
-        mjson_get_string(responseBuffer, responseLen,\r
-            "$.device_id",\r
-            client->deviceIdBuffer, DEVICE_ID_SIZE);\r
-    client->expireMsLen =\r
-        mjson_get_string(responseBuffer, responseLen,\r
-            "$.expires_in_ms",\r
-            client->expireMsBuffer, EXPIRE_MS_SIZE);\r
-    client->refreshTokenLen =\r
-        mjson_get_string(responseBuffer, responseLen,\r
-            "$.refresh_token",\r
-            client->refreshTokenBuffer, REFRESH_TOKEN_SIZE);\r
+    mjson_get_string(responseBuffer, responseLen,\r
+        "$.access_token",\r
+        client->accessTokenBuffer, ACCESS_TOKEN_SIZE);\r
+    mjson_get_string(responseBuffer, responseLen,\r
+        "$.device_id",\r
+        client->deviceIdBuffer, DEVICE_ID_SIZE);\r
+    mjson_get_string(responseBuffer, responseLen,\r
+        "$.expires_in_ms",\r
+        client->expireMsBuffer, EXPIRE_MS_SIZE);\r
+    mjson_get_string(responseBuffer, responseLen,\r
+        "$.refresh_token",\r
+        client->refreshTokenBuffer, REFRESH_TOKEN_SIZE);\r
 \r
     return true;\r
 }\r
+    \r
+bool\r
+MatrixClientSendEvent(\r
+    MatrixClient * client,\r
+    const char * roomId,\r
+    const char * msgType,\r
+    const char * msgBody)\r
+{    \r
+    static char requestUrl[MAX_URL_LEN];\r
+    sprintf_s(requestUrl, MAX_URL_LEN,\r
+        ROOMEVENT_URL, roomId, msgType, time(NULL));\r
+\r
+    static char responseBuffer[ROOMEVENT_RESPONSE_SIZE];\r
+    bool result =\r
+        MatrixHttpPut(client,\r
+            requestUrl,\r
+            msgBody,\r
+            responseBuffer, ROOMEVENT_RESPONSE_SIZE,\r
+            true);\r
+    \r
+    return result;\r
+}\r
 \r