]> gitweb.ps.run Git - matrix_esp_thesis/blobdiff - src/matrix.c
cli send, save and load
[matrix_esp_thesis] / src / matrix.c
index fbcf97e7d1dc46e3cd224ac40347ef67472ff420..80802c3e36953003e476b0e3d633b748d3ec767f 100644 (file)
@@ -258,6 +258,58 @@ MatrixClientInit(
     return true;\r
 }\r
 \r
+bool\r
+MatrixClientSave(\r
+    MatrixClient * client,\r
+    const char * filename)\r
+{\r
+    FILE * f = fopen(filename, "w");\r
+    \r
+    fwrite(client->deviceKey, 1, DEVICE_KEY_SIZE, f);\r
+    fwrite(client->signingKey, 1, DEVICE_KEY_SIZE, f);\r
+    fwrite(client->userId, 1, USER_ID_SIZE, f);\r
+    fwrite(client->server, 1, SERVER_SIZE, f);\r
+    fwrite(client->accessToken, 1, ACCESS_TOKEN_SIZE, f);\r
+    fwrite(client->deviceId, 1, DEVICE_ID_SIZE, f);\r
+    fwrite(client->expireMs, 1, EXPIRE_MS_SIZE, f);\r
+    fwrite(client->refreshToken, 1, REFRESH_TOKEN_SIZE, f);\r
+\r
+    fwrite(&client->numDevices, sizeof(int), 1, f);\r
+    for (int i = 0; i < client->numDevices; i++) {\r
+        fwrite(client->devices[i].deviceId, 1, DEVICE_ID_SIZE, f);\r
+        fwrite(client->devices[i].deviceKey, 1, DEVICE_KEY_SIZE, f);\r
+    }\r
+\r
+    fclose(f);\r
+    return true;\r
+}\r
+\r
+bool\r
+MatrixClientLoad(\r
+    MatrixClient * client,\r
+    const char * filename)\r
+{\r
+    FILE * f = fopen(filename, "r");\r
+    \r
+    fread(client->deviceKey, 1, DEVICE_KEY_SIZE, f);\r
+    fread(client->signingKey, 1, DEVICE_KEY_SIZE, f);\r
+    fread(client->userId, 1, USER_ID_SIZE, f);\r
+    fread(client->server, 1, SERVER_SIZE, f);\r
+    fread(client->accessToken, 1, ACCESS_TOKEN_SIZE, f);\r
+    fread(client->deviceId, 1, DEVICE_ID_SIZE, f);\r
+    fread(client->expireMs, 1, EXPIRE_MS_SIZE, f);\r
+    fread(client->refreshToken, 1, REFRESH_TOKEN_SIZE, f);\r
+\r
+    fread(&client->numDevices, sizeof(int), 1, f);\r
+    for (int i = 0; i < client->numDevices; i++) {\r
+        fread(client->devices[i].deviceId, 1, DEVICE_ID_SIZE, f);\r
+        fread(client->devices[i].deviceKey, 1, DEVICE_KEY_SIZE, f);\r
+    }\r
+\r
+    fclose(f);\r
+    return true;\r
+}\r
+\r
 bool\r
 MatrixClientSetAccessToken(\r
     MatrixClient * client,\r
@@ -270,6 +322,7 @@ MatrixClientSetAccessToken(
 \r
     for (int i = 0; i < accessTokenLen; i++)\r
         client->accessToken[i] = accessToken[i];\r
+    client->accessToken[accessTokenLen] = '\0';\r
 \r
     return true;\r
 }\r
@@ -286,6 +339,7 @@ MatrixClientSetDeviceId(
 \r
     for (int i = 0; i < deviceIdLen; i++)\r
         client->deviceId[i] = deviceId[i];\r
+    client->deviceId[deviceIdLen] = '\0';\r
 \r
     return true;\r
 }\r
@@ -302,6 +356,7 @@ MatrixClientSetUserId(
 \r
     for (int i = 0; i < userIdLen; i++)\r
         client->userId[i] = userId[i];\r
+    client->userId[userIdLen] = '\0';\r
 \r
     return true;\r
 }\r