From bf1c50634417151793b25df7a8c6f1ff60e539e6 Mon Sep 17 00:00:00 2001 From: Art Cancro Date: Thu, 13 Apr 2023 11:24:05 -0400 Subject: [PATCH] The data format used by GenerateRelationshipIndex() is now codified in the headers --- citadel/server/server.h | 7 +++++++ citadel/server/user_ops.c | 13 ++----------- citadel/utils/ctdl3264.c | 20 +++++++++++++++++++- citadel/utils/ctdl3264_prep.sh | 1 + 4 files changed, 29 insertions(+), 12 deletions(-) diff --git a/citadel/server/server.h b/citadel/server/server.h index 2e8fca38d..4ded36179 100644 --- a/citadel/server/server.h +++ b/citadel/server/server.h @@ -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 diff --git a/citadel/server/user_ops.c b/citadel/server/user_ops.c index fc21caf46..7b311fcb6 100644 --- a/citadel/server/user_ops.c +++ b/citadel/server/user_ops.c @@ -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; diff --git a/citadel/utils/ctdl3264.c b/citadel/utils/ctdl3264.c index 1ddb0bcff..4b15e7054 100644 --- a/citadel/utils/ctdl3264.c +++ b/citadel/utils/ctdl3264.c @@ -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 diff --git a/citadel/utils/ctdl3264_prep.sh b/citadel/utils/ctdl3264_prep.sh index 34c0d42dc..80ec0a233 100755 --- a/citadel/utils/ctdl3264_prep.sh +++ b/citadel/utils/ctdl3264_prep.sh @@ -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" -- 2.39.2