The data format used by GenerateRelationshipIndex() is now codified in the headers
authorArt Cancro <ajc@citadel.org>
Thu, 13 Apr 2023 15:24:05 +0000 (11:24 -0400)
committerArt Cancro <ajc@citadel.org>
Thu, 13 Apr 2023 15:24:05 +0000 (11:24 -0400)
citadel/server/server.h
citadel/server/user_ops.c
citadel/utils/ctdl3264.c
citadel/utils/ctdl3264_prep.sh

index 2e8fca38de7f1b7ad8e6097a35eec904502838b2..4ded3617956a49714da533af39c222d6d857b1d4 100644 (file)
@@ -210,5 +210,12 @@ struct CtdlCompressHeader {
 };
 
 
+// This is the db index format for "visit" records, which describe the relationship between one user and one room.
+struct visit_index {
+       long iRoomID;
+       long iRoomGen;
+       long iUserID;
+};
+
 
 #endif // SERVER_H
index fc21caf462fd63384f716c7f42ce47f06fb07ed3..7b311fcb608cdf1bf017b4c001b44ea7ec9a0548 100644 (file)
@@ -225,17 +225,8 @@ void reindex_user_928(char *username, void *out_data) {
 
 
 // Index-generating function used by Ctdl[Get|Set]Relationship
-int GenerateRelationshipIndex(char *IndexBuf,
-                             long RoomID,
-                             long RoomGen,
-                             long UserID
-) {
-       struct {
-               long iRoomID;
-               long iRoomGen;
-               long iUserID;
-       } TheIndex;
-
+int GenerateRelationshipIndex(char *IndexBuf, long RoomID, long RoomGen, long UserID) {
+       struct visit_index TheIndex;
        TheIndex.iRoomID = RoomID;
        TheIndex.iRoomGen = RoomGen;
        TheIndex.iUserID = UserID;
index 1ddb0bcff788e4a61500eb6adfdea6c14a67c0d4..4b15e7054861c7f20b2452a21f5c6ee6f6ea7678 100644 (file)
@@ -293,13 +293,31 @@ void convert_msglists(int which_cdb, DBT *in_key, DBT *in_data, DBT *out_key, DB
 }
 
 
+// convert function for a visit record
+void convert_visits(int which_cdb, DBT *in_key, DBT *in_data, DBT *out_key, DBT *out_data) {
+
+       // the key is a... FIXME
+       out_key->size = in_key->size;
+       out_key->data = realloc(out_key->data, out_key->size);
+       memcpy(out_key->data, in_key->data, in_key->size);
+
+       // data
+       struct visit_32 *visit32 = (struct visit_32 *)in_data->data;
+       out_data->size = sizeof(struct visit);
+       out_data->data = realloc(out_data->data, out_data->size);
+       struct visit *visit64 = (struct visit *)out_data->data;
+
+       // FIXME do the conv
+}
+
+
 void (*convert_functions[])(int which_cdb, DBT *in_key, DBT *in_data, DBT *out_key, DBT *out_data) = {
        convert_msgmain,        // CDB_MSGMAIN
        convert_users,          // CDB_USERS
        convert_rooms,          // CDB_ROOMS
        convert_floors,         // CDB_FLOORTAB
        convert_msglists,       // CDB_MSGLISTS
-       null_function,          // CDB_VISIT
+       convert_visits,         // CDB_VISIT
        null_function,          // CDB_DIRECTORY
        null_function,          // CDB_USETABLE
        null_function,          // CDB_BIGMSGS
index 34c0d42dc95e732e7ac4d4a12c25c3f900283f72..80ec0a233b1a6bf117d1f1d3599de10a86e3ef89 100755 (executable)
@@ -32,6 +32,7 @@ convert_struct() {
        convert_struct "ctdlroom"
        convert_struct "floor"
        convert_struct "visit"
+       convert_struct "visit_index"
        convert_struct "MetaData"
        convert_struct "CtdlCompressHeader"