jcs
/subtext
/amendments
/510
db: Add location field to session{,_log}, ipdb db path to config
jcs made amendment 510 about 1 year ago
--- db.c Sat Apr 8 22:50:43 2023
+++ db.c Thu Jun 15 10:22:32 2023
@@ -61,6 +61,9 @@ struct struct_field config_fields[] = {
{ "Telnet Trusted Proxy UDP Port", CONFIG_TYPE_SHORT,
offsetof(struct config, trusted_proxy_udp_port),
0, 65535 },
+ { "IP Geolocation Database Path", CONFIG_TYPE_STRING,
+ offsetof(struct config, ipdb_path),
+ 0, member_size(struct config, ipdb_path) },
{ "Modem Port", CONFIG_TYPE_SHORT,
offsetof(struct config, modem_port),
@@ -724,6 +727,49 @@ db_migrate(struct db *tdb, short is_new, Str255 fullpa
bile_write(tdb->bile, DB_CONFIG_RTYPE, 1, &new_config,
sizeof(new_config));
+ break;
+ }
+ case 18: {
+ /* 18->19, ipdb_path, add session_log.location */
+ struct config new_config = { 0 };
+ Str255 newfullpath;
+ struct bile *sessions_bile;
+ size_t nids, n, size;
+ unsigned long *ids;
+ char *data;
+
+ bile_read(tdb->bile, DB_CONFIG_RTYPE, 1, (char *)&new_config,
+ sizeof(new_config));
+
+ new_config.ipdb_path[0] = '\0';
+
+ bile_write(tdb->bile, DB_CONFIG_RTYPE, 1, &new_config,
+ sizeof(new_config));
+
+ /* migrate session log entries */
+ memcpy(&newfullpath, fullpath, sizeof(newfullpath));
+ PtoCstr(newfullpath);
+ strlcat((char *)&newfullpath, "-sessions", sizeof(newfullpath));
+ CtoPstr(newfullpath);
+
+ sessions_bile = bile_open(newfullpath, tdb->bile->vrefnum);
+ if (sessions_bile == NULL)
+ /* nothing to migrate */
+ break;
+
+ nids = bile_ids_by_type(sessions_bile, SL_LOG_RTYPE, &ids);
+ for (n = 0; n < nids; n++) {
+ size = bile_read_alloc(sessions_bile, SL_LOG_RTYPE,
+ ids[n], &data);
+ size += member_size(struct session_log, location);
+ if (bile_resize(sessions_bile, SL_LOG_RTYPE,
+ ids[n], size) != size)
+ panic("failed resizing session log %ld", ids[n]);
+ }
+
+ bile_flush(sessions_bile, true);
+ xfree(&ids);
+ bile_close(sessions_bile);
break;
}
}
--- db.h Sat Apr 8 22:46:01 2023
+++ db.h Wed Jun 14 17:49:15 2023
@@ -19,7 +19,7 @@
#include <time.h>
-#define DB_CUR_VERS 18
+#define DB_CUR_VERS 19
#define SUBTEXT_CREATOR 'SUBT'
#define DB_TYPE 'STDB'
@@ -69,6 +69,7 @@
#include "bile.h"
#include "board.h"
#include "folder.h"
+#include "ipdb.h"
#include "settings.h"
struct config {
@@ -103,6 +104,7 @@ struct config {
short mail_prune_days;
unsigned long ftn_max_tossed_message_size;
short max_sysop_idle_minutes;
+ char ipdb_path[255];
};
extern struct struct_field config_fields[];
@@ -120,6 +122,7 @@ struct db {
struct folder *folders;
short nfolders;
struct bile *mail_bile;
+ struct ipdb_file *ipdb;
};
struct db * db_open(Str255 file, short vrefnum);
--- session.h Thu Apr 27 09:09:23 2023
+++ session.h Wed Jun 14 16:48:55 2023
@@ -64,11 +64,13 @@ struct session_log {
unsigned long logged_off_at;
unsigned long ip_address;
unsigned short tspeed;
+ char location[32];
};
struct session {
char node[16];
char via[16];
+ char location[32];
unsigned char obuf[768];
unsigned long obuf_canary;
unsigned char ibuf[512];