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(2, "<user_id> <device_id>")
\r
165 MatrixClientShareMegolmOutSession(&client,
\r
168 &client->megolmOutSessions[0]);
\r
170 else if (CheckCommand(cmd, "savesession")) {
\r
171 CHECK_ARGS(2, "<filename> <key>")
\r
173 MatrixMegolmOutSessionSave(
\r
174 &client->megolmOutSessions[0],
\r
178 else if (CheckCommand(cmd, "loadsession")) {
\r
179 CHECK_ARGS(2, "<filename> <key>")
\r
181 MatrixMegolmOutSessionLoad(
\r
182 &client->megolmOutSessions[0],
\r
192 MatrixClient client;
\r
193 MatrixClientInit(&client,
\r
196 MatrixHttpInit(&client);
\r
198 MatrixClientSetAccessToken(&client,
\r
200 MatrixClientSetDeviceId(&client,
\r
202 MatrixClientSetUserId(&client,
\r
205 static char cmd[BUFFER_SIZE];
\r
206 static char args_[NUMBER_ARGS][BUFFER_SIZE];
\r
207 char * args[NUMBER_ARGS];
\r
208 for (int i = 0; i < NUMBER_ARGS; i++)
\r
209 args[i] = args_[i];
\r
212 GetCommand(cmd, &nargs, args);
\r
214 ExecuteCommand(&client, cmd, nargs, args);
\r
216 } while (strcmp(cmd, "exit") != 0);
\r
218 MatrixHttpDeinit(&client);
\r