7 #define SERVER "https://matrix.org"
\r
8 #define USER_ID "@example:matrix.org"
\r
9 #define ROOM_ID "!example:matrix.org"
\r
12 #define DEVICE_NAME ""
\r
14 // event id of an encrypted event
\r
15 // devices can only be verified after they used e2ee in some way
\r
16 // (at least in Element)
\r
17 #define EVENT_ID "$example"
\r
18 // device id of another device to share the megolm session with
\r
19 // I used the device id of a logged in Element web session
\r
20 #define DEVICE_ID2 ""
\r
22 #define STATIC static
\r
27 MatrixClient * client = (MatrixClient*)malloc(sizeof(MatrixClient));
\r
28 MatrixClientInit(client);
\r
30 MatrixHttpInit(&client->hc, SERVER);
\r
31 MatrixClientSetUserId(client, USER_ID);
\r
33 MatrixClientLoginPassword(client,
\r
37 printf("deviceId: %s\n", client->deviceId);
\r
38 MatrixClientGenerateOnetimeKeys(client, 10);
\r
39 MatrixClientUploadOnetimeKeys(client);
\r
40 MatrixClientUploadDeviceKeys(client);
\r
42 STATIC char eventBuffer[1024];
\r
43 MatrixClientGetRoomEvent(client,
\r
47 printf("event: %s\n", eventBuffer);
\r
49 #define SYNC_BUFFER_SIZE 1024*10
\r
51 // char * syncBuffer = (char*)malloc(SYNC_BUFFER_SIZE);
\r
52 STATIC char syncBuffer[SYNC_BUFFER_SIZE];
\r
53 STATIC char nextBatch[1024];
\r
55 while (! client->verified) {
\r
56 MatrixClientSync(client, syncBuffer, SYNC_BUFFER_SIZE, nextBatch, 1024);
\r
59 printf("verified!\n");
\r
61 // create and share megolm out session
\r
62 MatrixMegolmOutSession * megolmOutSession;
\r
63 MatrixClientNewMegolmOutSession(client,
\r
66 printf("megolm session id: %.10s... key: %.10s...\n", megolmOutSession->id, megolmOutSession->key);
\r
67 MatrixClientShareMegolmOutSession(client,
\r
72 // send 10 random messages
\r
73 for (int i = 0; i < 10; i++) {
\r
74 static const char * msgs[] = { "A", "B", "C" };
\r
75 static char msg[128];
\r
76 snprintf(msg, 128, "{\"body\":\"%s\",\"msgtype\":\"m.text\"}", msgs[rand()%(sizeof(msgs)/sizeof(msgs[0]))]);
\r
78 MatrixClientSendEventEncrypted(client,
\r
84 MatrixClientDeleteDevice(client);
\r
86 MatrixHttpDeinit(&client->hc);
\r