mcabber/src/otr.c
changeset 1320 cb400799db8f
parent 1308 b17754d9221b
child 1335 ab1b7f7a682e
equal deleted inserted replaced
1319:dc83548be698 1320:cb400799db8f
   107 static void otr_message_disconnect(ConnContext *ctx);
   107 static void otr_message_disconnect(ConnContext *ctx);
   108 static ConnContext * otr_get_context(const char *buddy);
   108 static ConnContext * otr_get_context(const char *buddy);
   109 static void otr_startstop(const char * buddy, int start);
   109 static void otr_startstop(const char * buddy, int start);
   110 static void otr_handle_smp_tlvs(OtrlTLV * tlvs, ConnContext * ctx);
   110 static void otr_handle_smp_tlvs(OtrlTLV * tlvs, ConnContext * ctx);
   111 
   111 
       
   112 static char * otr_get_dir(void);
   112 
   113 
   113 void otr_init(const char *jid)
   114 void otr_init(const char *jid)
   114 {
   115 {
   115   char * root = expand_filename("~/.mcabber/otr/");
   116   char * root = otr_get_dir();
   116   account = jidtodisp(jid);
   117   account = jidtodisp(jid);
   117   keyfile = g_strdup_printf("%s%s.key", root, account);
   118   keyfile = g_strdup_printf("%s%s.key", root, account);
   118   fprfile = g_strdup_printf("%s%s.fpr", root, account);
   119   fprfile = g_strdup_printf("%s%s.fpr", root, account);
   119   g_free(root);
   120   g_free(root);
   120 
   121 
   133 
   134 
   134 void otr_terminate(void)
   135 void otr_terminate(void)
   135 {
   136 {
   136   ConnContext * ctx;
   137   ConnContext * ctx;
   137 
   138 
   138   for(ctx = userstate->context_root; ctx; ctx = ctx->next)
   139   for (ctx = userstate->context_root; ctx; ctx = ctx->next)
   139     if (ctx->msgstate == OTRL_MSGSTATE_ENCRYPTED)
   140     if (ctx->msgstate == OTRL_MSGSTATE_ENCRYPTED)
   140       otr_message_disconnect(ctx);
   141       otr_message_disconnect(ctx);
   141 
   142 
   142   g_free(account);
   143   g_free(account);
   143   account = NULL;
   144   account = NULL;
   154   otrl_userstate_free(userstate);
   155   otrl_userstate_free(userstate);
   155 
   156 
   156   userstate = NULL;
   157   userstate = NULL;
   157   g_free(keyfile);
   158   g_free(keyfile);
   158   keyfile = NULL;
   159   keyfile = NULL;
       
   160 }
       
   161 
       
   162 static char * otr_get_dir(void)
       
   163 {
       
   164   char * configured_dir = (char *)settings_opt_get("otr_dir");
       
   165 
       
   166   if (configured_dir)
       
   167     return expand_filename(configured_dir);
       
   168   else
       
   169     return expand_filename("~/.mcabber/otr/");
   159 }
   170 }
   160 
   171 
   161 static ConnContext * otr_get_context(const char *buddy)
   172 static ConnContext * otr_get_context(const char *buddy)
   162 {
   173 {
   163   int null = 0;
   174   int null = 0;
   546  * desired. */
   557  * desired. */
   547 static void cb_create_privkey(void *opdata, const char *accountname,
   558 static void cb_create_privkey(void *opdata, const char *accountname,
   548                               const char *protocol)
   559                               const char *protocol)
   549 {
   560 {
   550   gcry_error_t e;
   561   gcry_error_t e;
       
   562   char * root;
   551 
   563 
   552   scr_LogPrint(LPRINT_LOGNORM,
   564   scr_LogPrint(LPRINT_LOGNORM,
   553                "Generating new OTR key for %s. This may take a while...",
   565                "Generating new OTR key for %s. This may take a while...",
   554                accountname);
   566                accountname);
   555   scr_DoUpdate();
   567   scr_DoUpdate();
   556 
   568 
   557   e = otrl_privkey_generate(userstate, keyfile, accountname, protocol);
   569   e = otrl_privkey_generate(userstate, keyfile, accountname, protocol);
   558 
   570 
   559   if (e)
   571   if (e) {
   560     scr_LogPrint(LPRINT_LOGNORM, "OTR key generation failed!"
   572     root = otr_get_dir();
   561                  " Please mkdir ~/.mcabber/otr/ and restart mcabber.");
   573     scr_LogPrint(LPRINT_LOGNORM, "OTR key generation failed! Please mkdir "
       
   574                  "%s if you want to use otr encryption.", root);
       
   575     g_free(root);
       
   576   }
   562   else
   577   else
   563     scr_LogPrint(LPRINT_LOGNORM, "OTR key generated.");
   578     scr_LogPrint(LPRINT_LOGNORM, "OTR key generated.");
   564 }
   579 }
   565 
   580 
   566 /* Report whether you think the given user is online.  Return 1 if
   581 /* Report whether you think the given user is online.  Return 1 if