]> gitweb.ps.run Git - matrix_esp_thesis/blobdiff - src/matrix.c
share, save, load, init, print megolm out sessions
[matrix_esp_thesis] / src / matrix.c
index fa7303f891e250dfc5d1349e6293ee8bf4d5a7ff..de936de0d47bc31247d4e5a5f4dba95a4bd808ce 100644 (file)
@@ -192,7 +192,7 @@ MatrixMegolmOutSessionInit(
     static uint8_t random[MEGOLM_INIT_RANDOM_SIZE];\r
     Randomize(random, MEGOLM_INIT_RANDOM_SIZE);\r
 \r
-    session->roomId = roomId;\r
+    strncpy(session->roomId, roomId, ROOM_ID_SIZE);\r
 \r
     session->session =\r
         olm_outbound_group_session(session->memory);\r
@@ -268,6 +268,8 @@ MatrixMegolmOutSessionLoad(
     size_t roomIdLen;\r
     fread(&roomIdLen, sizeof(size_t), 1, f);\r
     fread(session->roomId, 1, roomIdLen, f);\r
+    for (int i = roomIdLen; i < ROOM_ID_SIZE; i++)\r
+        session->roomId[i] = '\0';\r
 \r
     size_t pickleBufferLen;\r
     fread(&pickleBufferLen, sizeof(size_t), 1, f);\r
@@ -282,6 +284,9 @@ MatrixMegolmOutSessionLoad(
     \r
     free(pickleBuffer);\r
 \r
+    olm_outbound_group_session_id(session->session, (uint8_t *)session->id, MEGOLM_SESSION_ID_SIZE);\r
+    olm_outbound_group_session_key(session->session, (uint8_t *)session->key, MEGOLM_SESSION_KEY_SIZE);\r
+\r
     fclose(f);\r
 \r
     return true;\r
@@ -816,19 +821,29 @@ MatrixClientGetMegolmOutSession(
         }\r
     }\r
 \r
+    if (MatrixClientInitMegolmOutSession(client, roomId)) {\r
+        *outSession = &client->megolmOutSessions[client->numMegolmOutSessions-1];\r
+        return true;\r
+    }\r
+\r
+    return false;\r
+}\r
+\r
+bool\r
+MatrixClientInitMegolmOutSession(\r
+    MatrixClient * client,\r
+    const char * roomId)\r
+{\r
     if (client->numMegolmOutSessions < NUM_MEGOLM_SESSIONS)\r
     {\r
         MatrixMegolmOutSessionInit(\r
             &client->megolmOutSessions[client->numMegolmOutSessions],\r
             roomId);\r
-\r
-        *outSession = &client->megolmOutSessions[client->numMegolmOutSessions];\r
         \r
         client->numMegolmOutSessions++;\r
 \r
         return true;\r
     }\r
-\r
     return false;\r
 }\r
 \r