diff options
Diffstat (limited to 'otr.c')
-rw-r--r-- | otr.c | 14 |
1 files changed, 11 insertions, 3 deletions
@@ -124,6 +124,9 @@ void show_otr_context_info(irc_t *irc, ConnContext *ctx); /* show the list of fingerprints associated with a given context */ void show_fingerprints(irc_t *irc, ConnContext *ctx); +/* to log out accounts during keygen */ +extern void cmd_account(irc_t *irc, char **cmd); + /*** routines declared in otr.h: ***/ @@ -1121,14 +1124,12 @@ void show_otr_context_info(irc_t *irc, ConnContext *ctx) void otr_keygen(irc_t *irc, const char *handle, const char *protocol) { + char *account_off[] = {"account", "off", NULL}; GError *err; GThread *thr; struct kgdata *kg; gint ev; - irc_usermsg(irc, "generating new otr privkey for %s/%s...", - handle, protocol); - kg = g_new0(struct kgdata, 1); if(!kg) { irc_usermsg(irc, "otr keygen failed: out of memory"); @@ -1166,6 +1167,13 @@ void otr_keygen(irc_t *irc, const char *handle, const char *protocol) return; } + /* tell the user what's happening, go comatose, and start the keygen */ + irc_usermsg(irc, "going comatose for otr key generation, this will take a moment"); + irc_usermsg(irc, "all accounts logging out, user commands disabled"); + cmd_account(irc, account_off); + irc_usermsg(irc, "generating new otr privkey for %s/%s...", + handle, protocol); + thr = g_thread_create(&otr_keygen_thread_func, kg, FALSE, &err); if(!thr) { irc_usermsg(irc, "otr keygen failed: %s", err->message); |