]>
Commit | Line | Data |
---|---|---|
05cae8fd CP |
1 | #include "../control/control.h" |
2 | #include "../lib/irc_string.h" | |
82a316e7 | 3 | #include "../core/config.h" |
05cae8fd CP |
4 | #include "trusts.h" |
5 | ||
6 | int trusts_migration_start(TrustDBMigrationCallback, void *); | |
7 | void trusts_migration_stop(void); | |
8 | static void registercommands(int, void *); | |
9 | static void deregistercommands(int, void *); | |
10 | ||
11 | static void migrate_status(int errcode, void *tag) { | |
12 | long sender = (long)tag; | |
13 | nick *np = getnickbynumeric(sender); | |
14 | ||
15 | if(!np) | |
16 | return; | |
17 | ||
18 | if(!errcode || errcode == MIGRATION_LASTERROR) { | |
19 | if(!errcode) { | |
20 | controlreply(np, "Migration complete."); | |
21 | controlreply(np, "Attempting to reload database. . ."); | |
22 | } else { | |
23 | controlreply(np, "An error occured after the database was unloaded, attempting reload. . ."); | |
24 | } | |
25 | if(trusts_loaddb()) { | |
26 | controlreply(np, "Database reloaded successfully."); | |
27 | } else { | |
28 | controlreply(np, "An error occured, please reload the module manually."); | |
29 | } | |
30 | } else { | |
31 | controlreply(np, "Error %d occured during migration, commands reregistered.", errcode); | |
32 | registercommands(0, NULL); | |
33 | } | |
34 | } | |
35 | ||
36 | static int trusts_cmdmigrate(void *source, int cargc, char **cargv) { | |
37 | nick *sender = source; | |
38 | int ret; | |
39 | ||
40 | /* iffy but temporary */ | |
41 | ret = trusts_migration_start(migrate_status, (void *)(sender->numeric)); | |
42 | if(!ret) { | |
43 | controlreply(sender, "Migration started, commands deregistered."); | |
44 | deregistercommands(0, NULL); | |
45 | } else { | |
46 | controlreply(sender, "Error %d starting migration.", ret); | |
47 | } | |
48 | ||
49 | return CMD_OK; | |
50 | } | |
51 | ||
52 | static int commandsregistered; | |
53 | ||
54 | static void registercommands(int hooknum, void *arg) { | |
55 | if(commandsregistered) | |
56 | return; | |
57 | commandsregistered = 1; | |
58 | ||
59 | registercontrolhelpcmd("trustmigrate", NO_DEVELOPER, 0, trusts_cmdmigrate, "Usage: trustmigrate\nCopies trust data from O and reloads the database."); | |
60 | } | |
61 | ||
62 | static void deregistercommands(int hooknum, void *arg) { | |
63 | if(!commandsregistered) | |
64 | return; | |
65 | commandsregistered = 0; | |
66 | ||
67 | deregistercontrolcmd("trustmigrate", trusts_cmdmigrate); | |
68 | } | |
69 | ||
82a316e7 | 70 | static int loaded = 0; |
05cae8fd | 71 | void _init(void) { |
82a316e7 CP |
72 | sstring *m; |
73 | ||
74 | m = getconfigitem("trusts", "master"); | |
75 | if(!m || (atoi(m->content) != 1)) { | |
76 | Error("trusts_migrationr", ERR_ERROR, "Not a master server, not loaded."); | |
77 | return; | |
78 | } | |
79 | ||
80 | loaded = 1; | |
81 | ||
05cae8fd CP |
82 | registerhook(HOOK_TRUSTS_DB_LOADED, registercommands); |
83 | registerhook(HOOK_TRUSTS_DB_CLOSED, deregistercommands); | |
84 | ||
85 | if(trustsdbloaded) | |
86 | registercommands(0, NULL); | |
87 | } | |
88 | ||
89 | void _fini(void) { | |
82a316e7 CP |
90 | if(!loaded) |
91 | return; | |
92 | ||
05cae8fd CP |
93 | deregisterhook(HOOK_TRUSTS_DB_LOADED, registercommands); |
94 | deregisterhook(HOOK_TRUSTS_DB_CLOSED, deregistercommands); | |
95 | ||
96 | trusts_migration_stop(); | |
97 | ||
98 | deregistercommands(0, NULL); | |
99 | } |