]>
jfr.im git - irc/quakenet/newserv.git/blob - trusts/trusts_migration.c
1 #include "../lib/version.h"
2 #include "../control/control.h"
3 #include "../lib/irc_string.h"
4 #include "../core/config.h"
9 int trusts_migration_start(TrustDBMigrationCallback
, void *);
10 void trusts_migration_stop(void);
11 static void registercommands(int, void *);
12 static void deregistercommands(int, void *);
14 static void migrate_status(int errcode
, void *tag
) {
15 long sender
= (long)tag
;
16 nick
*np
= getnickbynumeric(sender
);
21 if(!errcode
|| errcode
== MIGRATION_LASTERROR
) {
23 controlreply(np
, "Migration complete.");
24 controlreply(np
, "Attempting to reload database. . .");
26 controlreply(np
, "An error occured after the database was unloaded, attempting reload. . .");
29 controlreply(np
, "Database reloaded successfully.");
31 controlreply(np
, "An error occured, please reload the module manually.");
34 controlreply(np
, "Error %d occured during migration, commands reregistered.", errcode
);
35 registercommands(0, NULL
);
39 static int trusts_cmdmigrate(void *source
, int cargc
, char **cargv
) {
40 nick
*sender
= source
;
43 /* iffy but temporary */
44 ret
= trusts_migration_start(migrate_status
, (void *)(sender
->numeric
));
46 controlreply(sender
, "Migration started, commands deregistered.");
47 deregistercommands(0, NULL
);
49 controlreply(sender
, "Error %d starting migration.", ret
);
55 static int commandsregistered
;
57 static void registercommands(int hooknum
, void *arg
) {
58 if(commandsregistered
)
60 commandsregistered
= 1;
62 registercontrolhelpcmd("trustmigrate", NO_DEVELOPER
, 0, trusts_cmdmigrate
, "Usage: trustmigrate\nCopies trust data from O and reloads the database.");
65 static void deregistercommands(int hooknum
, void *arg
) {
66 if(!commandsregistered
)
68 commandsregistered
= 0;
70 deregistercontrolcmd("trustmigrate", trusts_cmdmigrate
);
73 static int loaded
= 0;
77 m
= getconfigitem("trusts", "master");
78 if(!m
|| (atoi(m
->content
) != 1)) {
79 Error("trusts_migrationr", ERR_ERROR
, "Not a master server, not loaded.");
85 registerhook(HOOK_TRUSTS_DB_LOADED
, registercommands
);
86 registerhook(HOOK_TRUSTS_DB_CLOSED
, deregistercommands
);
89 registercommands(0, NULL
);
96 deregisterhook(HOOK_TRUSTS_DB_LOADED
, registercommands
);
97 deregisterhook(HOOK_TRUSTS_DB_CLOSED
, deregistercommands
);
99 trusts_migration_stop();
101 deregistercommands(0, NULL
);