7 #define SERVER "https://matrix.org"
\r
8 #define ACCESS_TOKEN "syt_cHNjaG8_yBvTjVTquGCikvsAenOJ_49mBMO"
\r
9 #define DEVICE_ID "MAZNCCZLBR"
\r
10 #define USER_ID "@pscho:matrix.org"
\r
11 #define ROOM_ID "!XKFUjAsGrSSrpDFIxB:matrix.org"
\r
13 #define BUFFER_SIZE 1024
\r
14 #define NUMBER_ARGS 10
\r
28 while ((c = getchar()), c != ' ' && c != '\n')
\r
37 char * arg = args[0];
\r
38 while ((c = getchar()), c != '\n') {
\r
41 arg = args[(*nargs)++];
\r
55 if (strlen(cmd) != strlen(str))
\r
58 for (size_t i = 0; i < strlen(cmd); i++) {
\r
59 if (cmd[i] != str[i])
\r
70 printf("Usage: %s %s\n", cmd, args);
\r
75 MatrixClient * client,
\r
77 int nargs, char ** args
\r
79 #define CHECK_ARGS(N, ARGS) if (nargs != N) { Usage(cmd, ARGS); return; }
\r
80 /**/ if (CheckCommand(cmd, "devicekey")) {
\r
81 printf("%s\n", client->deviceKey);
\r
83 else if (CheckCommand(cmd, "genkeys")) {
\r
84 CHECK_ARGS(1, "<number of keys>")
\r
86 MatrixClientGenerateOnetimeKeys(client, atoi(args[0]));
\r
88 else if (CheckCommand(cmd, "uploadkeys")) {
\r
89 MatrixClientUploadOnetimeKeys(client);
\r
91 else if (CheckCommand(cmd, "onetimekeys")) {
\r
92 static char buffer[1024];
\r
93 olm_account_one_time_keys(client->olmAccount.account, buffer, 1024);
\r
94 printf("%s\n", buffer);
\r
96 else if (CheckCommand(cmd, "getkeys")) {
\r
97 MatrixClientRequestDeviceKeys(client);
\r
98 for (int i = 0; i < client->numDevices; i++)
\r
99 printf("id: %s key: %s\n",
\r
100 client->devices[i].deviceId,
\r
101 client->devices[i].deviceKey);
\r
103 else if (CheckCommand(cmd, "todevice")) {
\r
104 static char buffer[30000];
\r
105 MatrixClientSync(client,
\r
107 const char * todevice;
\r
109 mjson_find(buffer, 30000,
\r
111 &todevice, &todeviceLen);
\r
112 static char prettyBuffer[10000];
\r
113 struct mjson_fixedbuf fb = { prettyBuffer, 10000, 0 };
\r
114 mjson_pretty(todevice, todeviceLen,
\r
115 " ", mjson_print_fixed_buf, &fb);
\r
116 printf("%.*s\n", fb.len, fb.ptr);
\r
118 else if (CheckCommand(cmd, "save")) {
\r
119 CHECK_ARGS(1, "<filename>")
\r
121 MatrixClientSave(client, args[0]);
\r
123 else if (CheckCommand(cmd, "load")) {
\r
124 CHECK_ARGS(1, "<filename>")
\r
126 MatrixClientLoad(client, args[0]);
\r
128 else if (CheckCommand(cmd, "send")) {
\r
129 CHECK_ARGS(2, "<room_id> <message>")
\r
131 static char body[1024];
\r
132 snprintf(body, 1024,
\r
133 "{\"body\":\"%s\",\"msgtype\":\"m.text\"}",
\r
136 MatrixClientSendEvent(client,
\r
141 else if (CheckCommand(cmd, "setuserid")) {
\r
142 CHECK_ARGS(1, "<user_id>")
\r
144 MatrixClientSetUserId(client, args[0]);
\r
146 else if (CheckCommand(cmd, "getuserid")) {
\r
147 printf("User ID: %s\n", client->userId);
\r
149 else if (CheckCommand(cmd, "sendencrypted")) {
\r
150 CHECK_ARGS(2, "<room_id> <message>")
\r
152 static char body[1024];
\r
153 snprintf(body, 1024,
\r
154 "{\"body\":\"%s\",\"msgtype\":\"m.text\"}",
\r
157 MatrixClientSendEventEncrypted(client,
\r
162 else if (CheckCommand(cmd, "sharesession")) {
\r
163 CHECK_ARGS(3, "<session_index> <user_id> <device_id>")
\r
165 int sessionIndex = atoi(args[0]);
\r
167 MatrixClientShareMegolmOutSession(client,
\r
170 &client->megolmOutSessions[sessionIndex]);
\r
172 else if (CheckCommand(cmd, "savesession")) {
\r
173 CHECK_ARGS(3, "<session_index> <filename> <key>")
\r
175 int sessionIndex = atoi(args[0]);
\r
177 MatrixMegolmOutSessionSave(
\r
178 &client->megolmOutSessions[sessionIndex],
\r
182 else if (CheckCommand(cmd, "loadsession")) {
\r
183 CHECK_ARGS(3, "<session_index> <filename> <key>")
\r
185 int sessionIndex = atoi(args[0]);
\r
187 MatrixMegolmOutSessionLoad(
\r
188 &client->megolmOutSessions[sessionIndex],
\r
192 else if (CheckCommand(cmd, "printsessions")) {
\r
193 for (int i = 0; i < client->numMegolmOutSessions; i++) {
\r
194 printf("%d: %s\t%s\t%s\n", i,
\r
195 client->megolmOutSessions[i].roomId,
\r
196 client->megolmOutSessions[i].id,
\r
197 client->megolmOutSessions[i].key);
\r
200 else if (CheckCommand(cmd, "initsession")) {
\r
201 CHECK_ARGS(1, "<room_id>")
\r
203 if (! MatrixClientInitMegolmOutSession(client,
\r
206 printf("Maximum number of Megolm sessions reached (%d)\n", NUM_MEGOLM_SESSIONS);
\r
212 printf("Unknown command\n");
\r
220 MatrixClient client;
\r
221 MatrixClientInit(&client,
\r
224 MatrixHttpInit(&client);
\r
226 MatrixClientSetAccessToken(&client,
\r
228 MatrixClientSetDeviceId(&client,
\r
230 MatrixClientSetUserId(&client,
\r
233 static char cmd[BUFFER_SIZE];
\r
234 static char args_[NUMBER_ARGS][BUFFER_SIZE];
\r
235 char * args[NUMBER_ARGS];
\r
236 for (int i = 0; i < NUMBER_ARGS; i++)
\r
237 args[i] = args_[i];
\r
240 GetCommand(cmd, &nargs, args);
\r
242 ExecuteCommand(&client, cmd, nargs, args);
\r
244 } while (strcmp(cmd, "exit") != 0);
\r
246 MatrixHttpDeinit(&client);
\r