]> gitweb.ps.run Git - matrix_esp_thesis/blobdiff - examples/Cli.c
remove newline
[matrix_esp_thesis] / examples / Cli.c
index af1d6b164f1e3aac6db909fb1d8cc30d10519f27..bcd3a12837d1e0df6f827039764b9799fb455f3c 100644 (file)
@@ -4,11 +4,11 @@
 #include <mjson.h>\r
 #include <matrix.h>\r
 \r
-#define SERVER       "https://matrix.org"\r
-#define ACCESS_TOKEN "syt_cHNjaG8_yBvTjVTquGCikvsAenOJ_49mBMO"\r
-#define DEVICE_ID    "MAZNCCZLBR"\r
-#define USER_ID      "@pscho:matrix.org"\r
-#define ROOM_ID      "!XKFUjAsGrSSrpDFIxB:matrix.org"\r
+#define SERVER        "https://matrix.org"\r
+#define USER_ID       "@example:matrix.org"\r
+#define USERNAME      ""\r
+#define PASSWORD      ""\r
+#define DEVICE_NAME   ""\r
 \r
 #define BUFFER_SIZE 1024\r
 #define NUMBER_ARGS 10\r
@@ -70,30 +70,59 @@ Usage(
     printf("Usage: %s %s\n", cmd, args);\r
 }\r
 \r
-void\r
+bool\r
 ExecuteCommand(\r
     MatrixClient * client,\r
     const char * cmd,\r
     int nargs, char ** args\r
 ) {\r
-    /**/ if (CheckCommand(cmd, "devicekey")) {\r
-        printf("%s\n", client->deviceKey);\r
+#define CHECK_ARGS(N, ARGS) if (nargs != N) { Usage(cmd, ARGS); return true; }\r
+\r
+    /**/ if (CheckCommand(cmd, "exit")) {\r
+        return false;\r
+    }\r
+    else if (CheckCommand(cmd, "devicekey")) {\r
+        static char key[DEVICE_KEY_SIZE];\r
+        if (MatrixOlmAccountGetDeviceKey(&client->olmAccount, key, DEVICE_KEY_SIZE))\r
+            printf("%s\n", key);\r
+    }\r
+    else if (CheckCommand(cmd, "accesstoken")) {\r
+        printf("%s\n", client->accessToken);\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
+    else if (CheckCommand(cmd, "uploadonetimekeys")) {\r
         MatrixClientUploadOnetimeKeys(client);\r
     }\r
+    else if (CheckCommand(cmd, "uploaddevicekey")) {\r
+        MatrixClientUploadDeviceKeys(client);\r
+    }\r
     else if (CheckCommand(cmd, "onetimekeys")) {\r
         static char buffer[1024];\r
         olm_account_one_time_keys(client->olmAccount.account, buffer, 1024);\r
         printf("%s\n", buffer);\r
     }\r
+    else if (CheckCommand(cmd, "sendto")) {\r
+        CHECK_ARGS(3, "<device_id> <msgtype> <msg>")\r
+\r
+        MatrixClientSendToDevice(client,\r
+            USER_ID,\r
+            args[0],\r
+            args[2],\r
+            args[1]);\r
+    }\r
+    else if (CheckCommand(cmd, "sendtoe")) {\r
+        CHECK_ARGS(3, "<device_id> <msgtype> <msg>")\r
+\r
+        MatrixClientSendToDeviceEncrypted(client,\r
+            USER_ID,\r
+            args[0],\r
+            args[2],\r
+            args[1]);\r
+    }\r
     else if (CheckCommand(cmd, "getkeys")) {\r
         MatrixClientRequestDeviceKeys(client);\r
         for (int i = 0; i < client->numDevices; i++)\r
@@ -103,8 +132,9 @@ ExecuteCommand(
     }\r
     else if (CheckCommand(cmd, "todevice")) {\r
         static char buffer[30000];\r
+        static char nextBatch[128];\r
         MatrixClientSync(client,\r
-            buffer, 30000);\r
+            buffer, 30000, nextBatch, 128);\r
         const char * todevice;\r
         int todeviceLen;\r
         mjson_find(buffer, 30000,\r
@@ -116,38 +146,135 @@ ExecuteCommand(
             "  ", mjson_print_fixed_buf, &fb);\r
         printf("%.*s\n", fb.len, fb.ptr);\r
     }\r
+    else if (CheckCommand(cmd, "login")) {\r
+        CHECK_ARGS(3, "<username> <password> <displayname>")\r
+\r
+        MatrixClientLoginPassword(client,\r
+            args[0],\r
+            args[1],\r
+            args[2]);\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, "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, "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(3, "<session_index> <user_id> <device_id>")\r
+\r
+        int sessionIndex = atoi(args[0]);\r
+\r
+        MatrixClientShareMegolmOutSession(client,\r
+            args[1],\r
+            args[2],\r
+            &client->megolmOutSessions[sessionIndex]);\r
+    }\r
+    else if (CheckCommand(cmd, "printsessions")) {\r
+        for (int i = 0; i < client->numMegolmOutSessions; i++) {\r
+            printf("%d: %s\t%s\t%s\n", i,\r
+                client->megolmOutSessions[i].roomId,\r
+                client->megolmOutSessions[i].id,\r
+                client->megolmOutSessions[i].key);\r
+        }\r
+    }\r
+    else if (CheckCommand(cmd, "initsession")) {\r
+        CHECK_ARGS(1, "<room_id>")\r
+\r
+        MatrixMegolmOutSession * megolmOutSession;\r
+        if (! MatrixClientNewMegolmOutSession(client,\r
+            args[0],\r
+            &megolmOutSession))\r
+        {\r
+            printf("Maximum number of Megolm sessions reached (%d)\n", NUM_MEGOLM_SESSIONS);\r
+        }\r
+    }\r
+    \r
+    \r
+    else {\r
+        printf("Unknown command\n");\r
+    }\r
+#undef CHECK_ARGS\r
+\r
+    return true;\r
 }\r
 \r
 int\r
 main(void)\r
 {\r
     MatrixClient client;\r
-    MatrixClientInit(&client,\r
-        SERVER);\r
+    MatrixClientInit(&client);\r
     \r
-    MatrixHttpInit(&client);\r
+    MatrixHttpInit(&client.hc, SERVER);\r
+\r
+\r
+    MatrixClientSetUserId(&client, USER_ID);\r
+    MatrixClientLoginPassword(&client, USERNAME, PASSWORD, DEVICE_NAME);\r
+    MatrixClientGenerateOnetimeKeys(&client, 10);\r
+    MatrixClientUploadDeviceKeys(&client);\r
+    MatrixClientUploadOnetimeKeys(&client);\r
 \r
-    MatrixClientSetAccessToken(&client,\r
-        ACCESS_TOKEN);\r
-    MatrixClientSetDeviceId(&client,\r
-        DEVICE_ID);\r
-    MatrixClientSetUserId(&client,\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
     int nargs;\r
-    do {\r
+    while (1) {\r
         GetCommand(cmd, &nargs, args);\r
 \r
-        ExecuteCommand(&client, cmd, nargs, args);\r
-        \r
-    } while (strcmp(cmd, "exit") != 0);\r
+        bool res =\r
+            ExecuteCommand(&client, cmd, nargs, args);\r
         \r
-    MatrixHttpDeinit(&client);\r
+        if (! res)\r
+            break;\r
+    }\r
+    \r
+    MatrixClientDeleteDevice(&client);\r
+\r
+    MatrixHttpDeinit(&client.hc);\r
 \r
     return 0;\r
 }\r