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