]> gitweb.ps.run Git - matrix_esp_thesis/commitdiff
cli send, save and load
authorPatrick <patrick.schoenberger@posteo.de>
Mon, 17 Jul 2023 15:37:49 +0000 (17:37 +0200)
committerPatrick <patrick.schoenberger@posteo.de>
Mon, 17 Jul 2023 15:37:49 +0000 (17:37 +0200)
examples/Cli.c
src/matrix.c
src/matrix.h

index af1d6b164f1e3aac6db909fb1d8cc30d10519f27..b2fbe451f967bab7c672e04a8f063a2da9b06cea 100644 (file)
@@ -76,14 +76,13 @@ ExecuteCommand(
     const char * cmd,\r
     int nargs, char ** args\r
 ) {\r
+#define CHECK_ARGS(N, ARGS) if (nargs != N) { Usage(cmd, ARGS); return; }\r
     /**/ if (CheckCommand(cmd, "devicekey")) {\r
         printf("%s\n", client->deviceKey);\r
     }\r
     else if (CheckCommand(cmd, "genkeys")) {\r
-        if (nargs != 1) {\r
-            Usage(cmd, "<number of keys>");\r
-            return;\r
-        }\r
+        CHECK_ARGS(1, "<number of keys>")\r
+\r
         MatrixClientGenerateOnetimeKeys(client, atoi(args[0]));\r
     }\r
     else if (CheckCommand(cmd, "uploadkeys")) {\r
@@ -116,6 +115,40 @@ ExecuteCommand(
             "  ", mjson_print_fixed_buf, &fb);\r
         printf("%.*s\n", fb.len, fb.ptr);\r
     }\r
+    else if (CheckCommand(cmd, "save")) {\r
+        CHECK_ARGS(1, "<filename>")\r
+\r
+        MatrixClientSave(client, args[0]);\r
+    }\r
+    else if (CheckCommand(cmd, "load")) {\r
+        CHECK_ARGS(1, "<filename>")\r
+\r
+        MatrixClientLoad(client, args[0]);\r
+    }\r
+    else if (CheckCommand(cmd, "send")) {\r
+        CHECK_ARGS(2, "<room_id> <message>")\r
+\r
+        static char body[1024];\r
+        snprintf(body, 1024,\r
+            "{\"body\":\"%s\",\"msgtype\":\"m.text\"}",\r
+            args[1]);\r
+\r
+        printf("Sending %s to %s\n", body, args[0]);\r
+\r
+        MatrixClientSendEvent(client,\r
+            args[0],\r
+            "m.room.message",\r
+            body);\r
+    }\r
+    else if (CheckCommand(cmd, "setuserid")) {\r
+        CHECK_ARGS(1, "<user_id>")\r
+\r
+        MatrixClientSetUserId(client, args[0]);\r
+    }\r
+    else if (CheckCommand(cmd, "getuserid")) {\r
+        printf("User ID: %s\n", client->userId);\r
+    }\r
+#undef CHECK_ARGS\r
 }\r
 \r
 int\r
@@ -135,7 +168,7 @@ main(void)
         USER_ID);\r
 \r
     static char cmd[BUFFER_SIZE];\r
-    static char args_[BUFFER_SIZE][NUMBER_ARGS];\r
+    static char args_[NUMBER_ARGS][BUFFER_SIZE];\r
     char * args[NUMBER_ARGS];\r
     for (int i = 0; i < NUMBER_ARGS; i++)\r
         args[i] = args_[i];\r
index fbcf97e7d1dc46e3cd224ac40347ef67472ff420..80802c3e36953003e476b0e3d633b748d3ec767f 100644 (file)
@@ -258,6 +258,58 @@ MatrixClientInit(
     return true;\r
 }\r
 \r
+bool\r
+MatrixClientSave(\r
+    MatrixClient * client,\r
+    const char * filename)\r
+{\r
+    FILE * f = fopen(filename, "w");\r
+    \r
+    fwrite(client->deviceKey, 1, DEVICE_KEY_SIZE, f);\r
+    fwrite(client->signingKey, 1, DEVICE_KEY_SIZE, f);\r
+    fwrite(client->userId, 1, USER_ID_SIZE, f);\r
+    fwrite(client->server, 1, SERVER_SIZE, f);\r
+    fwrite(client->accessToken, 1, ACCESS_TOKEN_SIZE, f);\r
+    fwrite(client->deviceId, 1, DEVICE_ID_SIZE, f);\r
+    fwrite(client->expireMs, 1, EXPIRE_MS_SIZE, f);\r
+    fwrite(client->refreshToken, 1, REFRESH_TOKEN_SIZE, f);\r
+\r
+    fwrite(&client->numDevices, sizeof(int), 1, f);\r
+    for (int i = 0; i < client->numDevices; i++) {\r
+        fwrite(client->devices[i].deviceId, 1, DEVICE_ID_SIZE, f);\r
+        fwrite(client->devices[i].deviceKey, 1, DEVICE_KEY_SIZE, f);\r
+    }\r
+\r
+    fclose(f);\r
+    return true;\r
+}\r
+\r
+bool\r
+MatrixClientLoad(\r
+    MatrixClient * client,\r
+    const char * filename)\r
+{\r
+    FILE * f = fopen(filename, "r");\r
+    \r
+    fread(client->deviceKey, 1, DEVICE_KEY_SIZE, f);\r
+    fread(client->signingKey, 1, DEVICE_KEY_SIZE, f);\r
+    fread(client->userId, 1, USER_ID_SIZE, f);\r
+    fread(client->server, 1, SERVER_SIZE, f);\r
+    fread(client->accessToken, 1, ACCESS_TOKEN_SIZE, f);\r
+    fread(client->deviceId, 1, DEVICE_ID_SIZE, f);\r
+    fread(client->expireMs, 1, EXPIRE_MS_SIZE, f);\r
+    fread(client->refreshToken, 1, REFRESH_TOKEN_SIZE, f);\r
+\r
+    fread(&client->numDevices, sizeof(int), 1, f);\r
+    for (int i = 0; i < client->numDevices; i++) {\r
+        fread(client->devices[i].deviceId, 1, DEVICE_ID_SIZE, f);\r
+        fread(client->devices[i].deviceKey, 1, DEVICE_KEY_SIZE, f);\r
+    }\r
+\r
+    fclose(f);\r
+    return true;\r
+}\r
+\r
 bool\r
 MatrixClientSetAccessToken(\r
     MatrixClient * client,\r
@@ -270,6 +322,7 @@ MatrixClientSetAccessToken(
 \r
     for (int i = 0; i < accessTokenLen; i++)\r
         client->accessToken[i] = accessToken[i];\r
+    client->accessToken[accessTokenLen] = '\0';\r
 \r
     return true;\r
 }\r
@@ -286,6 +339,7 @@ MatrixClientSetDeviceId(
 \r
     for (int i = 0; i < deviceIdLen; i++)\r
         client->deviceId[i] = deviceId[i];\r
+    client->deviceId[deviceIdLen] = '\0';\r
 \r
     return true;\r
 }\r
@@ -302,6 +356,7 @@ MatrixClientSetUserId(
 \r
     for (int i = 0; i < userIdLen; i++)\r
         client->userId[i] = userId[i];\r
+    client->userId[userIdLen] = '\0';\r
 \r
     return true;\r
 }\r
index 32b8294c835dd82c90bc0276c6c378d21dbf783f..91ed208623a94804b5a398726a74c56dc8cc7e2e 100644 (file)
@@ -156,6 +156,16 @@ MatrixClientInit(
     MatrixClient * client,\r
     const char * server);\r
 \r
+bool\r
+MatrixClientSave(\r
+    MatrixClient * client,\r
+    const char * filename);\r
+\r
+bool\r
+MatrixClientLoad(\r
+    MatrixClient * client,\r
+    const char * filename);\r
+\r
 bool\r
 MatrixClientSetAccessToken(\r
     MatrixClient * client,\r