]> gitweb.ps.run Git - matrix_esp_thesis/blobdiff - src/matrix.c
mongoose as http client
[matrix_esp_thesis] / src / matrix.c
index bc0f1ca704af357798fff98fca2b1722b1d0c736..790f0f572e77e446cbe56f86b64cb338ad378d44 100644 (file)
@@ -1,38 +1,82 @@
 #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
+    char * server, int serverLen)\r
+{\r
+    strcpy_s(\r
+        client->server,\r
+        SERVER_SIZE,\r
+        server\r
+    );\r
+    client->serverLen = serverLen;\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
+    char * username, int usernameLen,\r
+    char * password, int passwordLen,\r
+    char * displayName, int displayNameLen)\r
+{\r
+    static char requestBuffer[LOGIN_REQUEST_SIZE];\r
 \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
+    \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
+    \r
+    if (!result)\r
+        return false;\r
 \r
-bool\r
-MatrixClientGetAccessToken(\r
-    MatrixClient * client,\r
-    FixedBuffer * outBuffer\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
 \r
+    return true;\r
 }\r
+\r