]> gitweb.ps.run Git - matrix_esp_thesis/blobdiff - examples/Cli.c
cli send encrypted & manage megolm session, save/load megolm sessions
[matrix_esp_thesis] / examples / Cli.c
index af1d6b164f1e3aac6db909fb1d8cc30d10519f27..4a8e571c9df413bc74b39663511562f25f6c3545 100644 (file)
@@ -76,14 +76,13 @@ ExecuteCommand(
     const char * cmd,\r
     int nargs, char ** args\r
 ) {\r
     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 (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
         MatrixClientGenerateOnetimeKeys(client, atoi(args[0]));\r
     }\r
     else if (CheckCommand(cmd, "uploadkeys")) {\r
@@ -116,6 +115,75 @@ ExecuteCommand(
             "  ", mjson_print_fixed_buf, &fb);\r
         printf("%.*s\n", fb.len, fb.ptr);\r
     }\r
             "  ", 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
+        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
+    else if (CheckCommand(cmd, "sendencrypted")) {\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
+        MatrixClientSendEventEncrypted(client,\r
+            args[0],\r
+            "m.room.message",\r
+            body);\r
+    }\r
+    else if (CheckCommand(cmd, "sharesession")) {\r
+        CHECK_ARGS(2, "<user_id> <device_id>")\r
+\r
+        MatrixClientShareMegolmOutSession(&client,\r
+            args[0],\r
+            args[1],\r
+            &client->megolmOutSessions[0]);\r
+    }\r
+    else if (CheckCommand(cmd, "savesession")) {\r
+        CHECK_ARGS(2, "<filename> <key>")\r
+\r
+        MatrixMegolmOutSessionSave(\r
+            &client->megolmOutSessions[0],\r
+            args[0],\r
+            args[1]);\r
+    }\r
+    else if (CheckCommand(cmd, "loadsession")) {\r
+        CHECK_ARGS(2, "<filename> <key>")\r
+\r
+        MatrixMegolmOutSessionLoad(\r
+            &client->megolmOutSessions[0],\r
+            args[0],\r
+            args[1]);\r
+    }\r
+#undef CHECK_ARGS\r
 }\r
 \r
 int\r
 }\r
 \r
 int\r
@@ -135,7 +203,7 @@ main(void)
         USER_ID);\r
 \r
     static char cmd[BUFFER_SIZE];\r
         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
     char * args[NUMBER_ARGS];\r
     for (int i = 0; i < NUMBER_ARGS; i++)\r
         args[i] = args_[i];\r