]> gitweb.ps.run Git - matrix_esp_thesis/blobdiff - src/matrix.c
dont need length variables everywhere (i think)
[matrix_esp_thesis] / src / matrix.c
index bc0f1ca704af357798fff98fca2b1722b1d0c736..5759ba24334a3d1ee8aca71e927e3cef50f248ad 100644 (file)
@@ -1,38 +1,77 @@
 #include "matrix.h"\r
 \r
-FixedBuffer\r
-FixedBuf(const char * str)\r
-{\r
-    int len = strlen(str);\r
-    FixedBuffer result;\r
-    result.ptr = (char *)str;\r
-    result.size = len;\r
-    result.len = len;\r
-    return result;\r
-}\r
+#include <stdio.h>\r
+#include <mjson.h>\r
+\r
+\r
+#define LOGIN_REQUEST_SIZE 1024\r
+#define LOGIN_RESPONSE_SIZE 1024\r
+#define LOGIN_URL "/_matrix/client/v3/login"\r
 \r
 \r
 bool\r
 MatrixClientInit(\r
     MatrixClient * client,\r
-    FixedBuffer server\r
-) {\r
+    const char * server)\r
+{\r
+    strcpy_s(\r
+        client->server,\r
+        SERVER_SIZE,\r
+        server\r
+    );\r
 \r
+    return true;\r
 }\r
 \r
+// https://spec.matrix.org/v1.6/client-server-api/#post_matrixclientv3login\r
 bool\r
 MatrixClientLoginPassword(\r
     MatrixClient * client,\r
-    FixedBuffer username,\r
-    FixedBuffer password\r
-) {\r
+    const char * username,\r
+    const char * password,\r
+    const char * displayName)\r
+{\r
+    static char requestBuffer[LOGIN_REQUEST_SIZE];\r
 \r
-}\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
+    bool result =\r
+        MatrixHttpPost(client,\r
+            LOGIN_URL,\r
+            requestBuffer,\r
+            responseBuffer, LOGIN_RESPONSE_SIZE);\r
+    \r
+    int responseLen = strlen(responseBuffer);\r
+    \r
+    if (!result)\r
+        return false;\r
 \r
-bool\r
-MatrixClientGetAccessToken(\r
-    MatrixClient * client,\r
-    FixedBuffer * outBuffer\r
-) {\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