// Data types for the Citadel Server
//
-// Copyright (c) 1987-2023 by the citadel.org team
+// Copyright (c) 1987-2024 by the citadel.org team
//
// This program is open source software. Use, duplication, or disclosure
// is subject to the terms of the GNU General Public License, version 3.
// Row being stored or fetched in the database
struct cdbdata {
- size_t len;
- char *ptr;
+ size_t len; // size of datum pointed to by ptr
+ char *ptr; // datum
+};
+
+
+// Row being fetched from the database, both key and value are returned
+struct cdbkeyval {
+ struct cdbdata key; // size and pointer to key
+ struct cdbdata val; // size and pointer to value
};
// NOTE: if you add fields to this, you have to also write export/import code in server/modules/migrate/serv_migrate.c
// NOTE: if you add fields to this, you have to also write conversion code in utils/ctdl3264/*
struct visit {
- long v_roomnum;
- long v_roomgen;
- long v_usernum;
+ long v_roomnum; //
+ long v_roomgen; // The first three fields , sizeof(long)*3 , are the index format.
+ long v_usernum; //
long v_lastseen;
unsigned v_flags;
char v_seen[SIZ];
};
+// 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;
+};
+
+
// Supplementary data for a message on disk
// These are kept separate from the message itself for one of two reasons:
// 1. Either their values may change at some point after initial save, or
// 2. They are merely caches of data which exist somewhere else, for speed.
// DO NOT PUT BIG DATA IN HERE ... we need this struct to be tiny for lots of quick r/w
-struct MetaData {
// NOTE: if you add fields to this, you have to also write export/import code in server/modules/migrate/serv_migrate.c
// NOTE: if you add fields to this, you have to also write conversion code in utils/ctdl3264/*
+struct MetaData {
long meta_msgnum; // Message number in *local* message base
int meta_refcount; // Number of rooms pointing to this msg
char meta_content_type[64]; // Cached MIME content-type
};
-// Serialization routines use this struct to return a pointer and a length
-struct ser_ret {
- size_t len;
- unsigned char *ser;
-};
-
-
// The S_USETABLE database is used in several modules now, so we define its format here.
struct UseTable {
- char ut_msgid[SIZ];
- time_t ut_timestamp;
+ int hash;
+ time_t timestamp;
};
uid_t uid; // Associate with a unix account?
char password[32]; // password
unsigned flags; // See US_ flags below
- long timescalled; // Total number of logins
- long posted; // Number of messages ever submitted
+ long unused1;
+ long unused2;
cit_uint8_t axlevel; // Access level
long usernum; // User number (never recycled)
time_t lastcall; // Date/time of most recent login
};
+// Database records beginning with this magic number are assumed to
+// be compressed. In the event that a database record actually begins with
+// this magic number, we *must* compress it whether we want to or not,
+// because the fetch function will try to uncompress it anyway.
+//
+// (No need to #ifdef this stuff; it compiles ok even if zlib is not present
+// and doesn't declare anything so it won't bloat the code)
+#define COMPRESS_MAGIC 0xc0ffeeee
+
+struct CtdlCompressHeader {
+ int magic;
+ size_t uncompressed_len;
+ size_t compressed_len;
+};
+
+
#endif // SERVER_H