]> gitweb.ps.run Git - matrix_esp_thesis/blob - examples/Verify.c
remove rdbg files
[matrix_esp_thesis] / examples / Verify.c
1 #include <matrix.h>\r
2 #include <mjson.h>\r
3 #include <olm/sas.h>\r
4 \r
5 #include <stdio.h>\r
6 \r
7 #define SERVER        "https://matrix.org"\r
8 #define USER_ID       "@example:matrix.org"\r
9 #define ROOM_ID       "!example:matrix.org"\r
10 #define USERNAME      ""\r
11 #define PASSWORD      ""\r
12 #define DEVICE_NAME   ""\r
13 \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
21 \r
22 #define STATIC static\r
23 \r
24 int\r
25 main(void)\r
26 {\r
27     MatrixClient * client = (MatrixClient*)malloc(sizeof(MatrixClient));\r
28     MatrixClientInit(client);\r
29 \r
30     MatrixHttpInit(&client->hc, SERVER);\r
31     MatrixClientSetUserId(client, USER_ID);\r
32 \r
33     MatrixClientLoginPassword(client,\r
34         USERNAME,\r
35         PASSWORD,\r
36         DEVICE_NAME);\r
37     printf("deviceId: %s\n", client->deviceId);\r
38     MatrixClientGenerateOnetimeKeys(client, 10);\r
39     MatrixClientUploadOnetimeKeys(client);\r
40     MatrixClientUploadDeviceKeys(client);\r
41 \r
42     STATIC char eventBuffer[1024];\r
43     MatrixClientGetRoomEvent(client,\r
44         ROOM_ID,\r
45         EVENT_ID,\r
46         eventBuffer, 1024);\r
47     printf("event: %s\n", eventBuffer);\r
48 \r
49     #define SYNC_BUFFER_SIZE 1024*10\r
50 \r
51     // char * syncBuffer = (char*)malloc(SYNC_BUFFER_SIZE);\r
52     STATIC char syncBuffer[SYNC_BUFFER_SIZE];\r
53     STATIC char nextBatch[1024];\r
54 \r
55     while (! client->verified) {\r
56         MatrixClientSync(client, syncBuffer, SYNC_BUFFER_SIZE, nextBatch, 1024);\r
57     }\r
58 \r
59     printf("verified!\n");\r
60 \r
61     // create and share megolm out session\r
62     MatrixMegolmOutSession * megolmOutSession;\r
63     MatrixClientNewMegolmOutSession(client,\r
64         ROOM_ID,\r
65         &megolmOutSession);\r
66     printf("megolm session id: %.10s... key: %.10s...\n", megolmOutSession->id, megolmOutSession->key);\r
67     MatrixClientShareMegolmOutSession(client,\r
68         USER_ID,\r
69         DEVICE_ID2,\r
70         megolmOutSession);\r
71 \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
77 \r
78         MatrixClientSendEventEncrypted(client,\r
79             ROOM_ID,\r
80             "m.room.message",\r
81             msg);\r
82     }\r
83 \r
84     MatrixClientDeleteDevice(client);\r
85         \r
86     MatrixHttpDeinit(&client->hc);\r
87 \r
88     return 0;\r
89 }\r