comparison mcabber/src/otr.c @ 1301:37b41ed9ed35

Fixed compiler warnings
author Frank Zschockelt <mcabber_otr[at]freakysoft.de>
date Thu, 30 Aug 2007 02:49:36 +0200
parents 3b338a5c01fc
children b6fdbfa6b219
comparison
equal deleted inserted replaced
1300:0d4a1699accb 1301:37b41ed9ed35
27 #include "logprint.h" 27 #include "logprint.h"
28 #include "hbuf.h" 28 #include "hbuf.h"
29 #include "jab_priv.h" 29 #include "jab_priv.h"
30 #include "roster.h" 30 #include "roster.h"
31 #include "utils.h" 31 #include "utils.h"
32 #include "screen.h"
33 #include "settings.h"
32 34
33 35
34 static OtrlUserState userstate = NULL; 36 static OtrlUserState userstate = NULL;
35 static char * account = NULL; 37 static char * account = NULL;
36 static char * keyfile = NULL; 38 static char * keyfile = NULL;
37 static char * fprfile = NULL; 39 static char * fprfile = NULL;
38 static enum otr_policy policy = manual;
39 40
40 41
41 static OtrlPolicy cb_policy (void *opdata, ConnContext *ctx); 42 static OtrlPolicy cb_policy (void *opdata, ConnContext *ctx);
42 static void cb_create_privkey (void *opdata, 43 static void cb_create_privkey (void *opdata,
43 const char *accountname, 44 const char *accountname,
81 static void cb_log_message (void *opdata, const char *message); 82 static void cb_log_message (void *opdata, const char *message);
82 static int cb_max_message_size (void *opdata, ConnContext *context); 83 static int cb_max_message_size (void *opdata, ConnContext *context);
83 84
84 static OtrlMessageAppOps ops = 85 static OtrlMessageAppOps ops =
85 { 86 {
86 policy: cb_policy, 87 cb_policy,
87 create_privkey: cb_create_privkey, 88 cb_create_privkey,
88 is_logged_in: cb_is_logged_in, 89 cb_is_logged_in,
89 inject_message: cb_inject_message, 90 cb_inject_message,
90 notify: cb_notify, 91 cb_notify,
91 display_otr_message: cb_display_otr_message, 92 cb_display_otr_message,
92 update_context_list: cb_update_context_list, 93 cb_update_context_list,
93 protocol_name: cb_protocol_name, 94 cb_protocol_name,
94 protocol_name_free: cb_protocol_name_free, 95 cb_protocol_name_free,
95 new_fingerprint: cb_new_fingerprint, 96 cb_new_fingerprint,
96 write_fingerprints: cb_write_fingerprints, 97 cb_write_fingerprints,
97 gone_secure: cb_gone_secure, 98 cb_gone_secure,
98 gone_insecure: cb_gone_insecure, 99 cb_gone_insecure,
99 still_secure: cb_still_secure, 100 cb_still_secure,
100 log_message: cb_log_message, 101 cb_log_message,
101 max_message_size: cb_max_message_size 102 cb_max_message_size,
103 NULL, /*account_name*/
104 NULL /*account_name_free*/
102 }; 105 };
103 106
104 static void otr_message_disconnect(ConnContext *ctx); 107 static void otr_message_disconnect(ConnContext *ctx);
105 static ConnContext * otr_get_context(const char *buddy); 108 static ConnContext * otr_get_context(const char *buddy);
106 static void otr_startstop(const char * buddy, int start); 109 static void otr_startstop(const char * buddy, int start);
107 static void otr_handle_smp_tlvs(OtrlTLV * tlvs, ConnContext * ctx); 110 static void otr_handle_smp_tlvs(OtrlTLV * tlvs, ConnContext * ctx);
108 111
109 112
110 int otr_init(const char *jid) 113 void otr_init(const char *jid)
111 { 114 {
112 char * root = expand_filename("~/.mcabber/otr/"); 115 char * root = expand_filename("~/.mcabber/otr/");
113 account = jidtodisp(jid); 116 account = jidtodisp(jid);
114 keyfile = g_strdup_printf("%s%s.key", root, account); 117 keyfile = g_strdup_printf("%s%s.key", root, account);
115 fprfile = g_strdup_printf("%s%s.fpr", root, account); 118 fprfile = g_strdup_printf("%s%s.fpr", root, account);
282 sbuf = g_strdup("OTR: SMP aborted by your buddy"); 285 sbuf = g_strdup("OTR: SMP aborted by your buddy");
283 ctx->smstate->nextExpected = OTRL_SMP_EXPECT1; 286 ctx->smstate->nextExpected = OTRL_SMP_EXPECT1;
284 } 287 }
285 288
286 if (sbuf) { 289 if (sbuf) {
287 scr_WriteIncomingMessage(ctx->username, sbuf, 0, HBB_PREFIX_INFO); 290 scr_WriteIncomingMessage(ctx->username, sbuf, 0, HBB_PREFIX_INFO, 0);
288 g_free(sbuf); 291 g_free(sbuf);
289 } 292 }
290 } 293 }
291 294
292 /* 295 /*
399 default: 402 default:
400 auth = "unknown auth"; 403 auth = "unknown auth";
401 } 404 }
402 if (p == OTRL_POLICY_NEVER) 405 if (p == OTRL_POLICY_NEVER)
403 policy = "plain"; 406 policy = "plain";
404 else if (p == OTRL_POLICY_OPPORTUNISTIC & ~OTRL_POLICY_ALLOW_V1) 407 else if (p == (OTRL_POLICY_OPPORTUNISTIC & ~OTRL_POLICY_ALLOW_V1))
405 policy = "opportunistic"; 408 policy = "opportunistic";
406 else if (p == OTRL_POLICY_MANUAL & ~OTRL_POLICY_ALLOW_V1) 409 else if (p == (OTRL_POLICY_MANUAL & ~OTRL_POLICY_ALLOW_V1))
407 policy = "manual"; 410 policy = "manual";
408 else if (p == (OTRL_POLICY_ALWAYS & ~OTRL_POLICY_ALLOW_V1)) 411 else if (p == (OTRL_POLICY_ALWAYS & ~OTRL_POLICY_ALLOW_V1))
409 policy = "always"; 412 policy = "always";
410 else 413 else
411 policy = "unknown"; 414 policy = "unknown";
437 "Using SMP without a secret isn't a good idea."); 440 "Using SMP without a secret isn't a good idea.");
438 return; 441 return;
439 } 442 }
440 443
441 if (ctx) { 444 if (ctx) {
442 otrl_message_initiate_smp(userstate, &ops, NULL, ctx, secret, 445 otrl_message_initiate_smp(userstate, &ops, NULL, ctx,
446 (const unsigned char *)secret,
443 strlen(secret)); 447 strlen(secret));
444 scr_WriteIncomingMessage(ctx->username, 448 scr_WriteIncomingMessage(ctx->username,
445 "OTR: Socialist Millionaires' Protocol " 449 "OTR: Socialist Millionaires' Protocol "
446 "initiated.", 0, HBB_PREFIX_INFO); 450 "initiated.", 0, HBB_PREFIX_INFO, 0);
447 } 451 }
448 } 452 }
449 453
450 void otr_smp_respond(const char * buddy, const char * secret) 454 void otr_smp_respond(const char * buddy, const char * secret)
451 { 455 {
462 scr_LogPrint(LPRINT_LOGNORM, 466 scr_LogPrint(LPRINT_LOGNORM,
463 "Don't call smpr before you haven't received an SMP " 467 "Don't call smpr before you haven't received an SMP "
464 "Initiation!"); 468 "Initiation!");
465 return; 469 return;
466 } 470 }
467 otrl_message_respond_smp(userstate, &ops, NULL, ctx, secret, 471 otrl_message_respond_smp(userstate, &ops, NULL, ctx,
472 (const unsigned char *)secret,
468 strlen(secret)); 473 strlen(secret));
469 scr_WriteIncomingMessage(ctx->username, 474 scr_WriteIncomingMessage(ctx->username,
470 "OTR: Socialist Millionaires' Protocol: " 475 "OTR: Socialist Millionaires' Protocol: "
471 "response sent", 0, HBB_PREFIX_INFO); 476 "response sent", 0, HBB_PREFIX_INFO, 0);
472 } 477 }
473 } 478 }
474 479
475 void otr_smp_abort(const char * buddy) 480 void otr_smp_abort(const char * buddy)
476 { 481 {
478 483
479 if (ctx) { 484 if (ctx) {
480 otrl_message_abort_smp(userstate, &ops, NULL, ctx); 485 otrl_message_abort_smp(userstate, &ops, NULL, ctx);
481 scr_WriteIncomingMessage(ctx->username, 486 scr_WriteIncomingMessage(ctx->username,
482 "OTR: Socialist Millionaires' Protocol aborted.", 487 "OTR: Socialist Millionaires' Protocol aborted.",
483 0, HBB_PREFIX_INFO); 488 0, HBB_PREFIX_INFO, 0);
484 } 489 }
485 } 490 }
486 491
487 void otr_key(void) 492 void otr_key(void)
488 { 493 {
515 case manual: 520 case manual:
516 return OTRL_POLICY_MANUAL & ~OTRL_POLICY_ALLOW_V1; 521 return OTRL_POLICY_MANUAL & ~OTRL_POLICY_ALLOW_V1;
517 case always: 522 case always:
518 return OTRL_POLICY_ALWAYS & ~OTRL_POLICY_ALLOW_V1; 523 return OTRL_POLICY_ALWAYS & ~OTRL_POLICY_ALLOW_V1;
519 } 524 }
525
526 return OTRL_POLICY_MANUAL & ~OTRL_POLICY_ALLOW_V1;
520 } 527 }
521 528
522 /* Create a private key for the given accountname/protocol if 529 /* Create a private key for the given accountname/protocol if
523 * desired. */ 530 * desired. */
524 static void cb_create_privkey(void *opdata, const char *accountname, 531 static void cb_create_privkey(void *opdata, const char *accountname,
574 char *sbuf = NULL; 581 char *sbuf = NULL;
575 switch (level) { 582 switch (level) {
576 case OTRL_NOTIFY_ERROR: type = "error"; break; 583 case OTRL_NOTIFY_ERROR: type = "error"; break;
577 case OTRL_NOTIFY_WARNING: type = "warning"; break; 584 case OTRL_NOTIFY_WARNING: type = "warning"; break;
578 case OTRL_NOTIFY_INFO: type = "info"; break; 585 case OTRL_NOTIFY_INFO: type = "info"; break;
586 default: type = "unknown";
579 } 587 }
580 sbuf = g_strdup_printf("OTR %s:%s\n%s\n%s",type,title, primary, secondary); 588 sbuf = g_strdup_printf("OTR %s:%s\n%s\n%s",type,title, primary, secondary);
581 scr_WriteIncomingMessage(username, sbuf, 0, HBB_PREFIX_INFO); 589 scr_WriteIncomingMessage(username, sbuf, 0, HBB_PREFIX_INFO, 0);
582 g_free(sbuf); 590 g_free(sbuf);
583 } 591 }
584 592
585 /* Display an OTR control message for a particular 593 /* Display an OTR control message for a particular
586 * accountname / protocol / username conversation. Return 0 if you are able 594 * accountname / protocol / username conversation. Return 0 if you are able
590 * callback. */ 598 * callback. */
591 static int cb_display_otr_message(void *opdata, const char *accountname, 599 static int cb_display_otr_message(void *opdata, const char *accountname,
592 const char *protocol, const char *username, 600 const char *protocol, const char *username,
593 const char *msg) 601 const char *msg)
594 { 602 {
595 scr_WriteIncomingMessage(username, msg, 0, HBB_PREFIX_INFO); 603 scr_WriteIncomingMessage(username, msg, 0, HBB_PREFIX_INFO, 0);
596 return 0; 604 return 0;
597 } 605 }
598 606
599 /* When the list of ConnContexts changes (including a change in 607 /* When the list of ConnContexts changes (including a change in
600 * state), this is called so the UI can be updated. */ 608 * state), this is called so the UI can be updated. */
626 char *sbuf = NULL; 634 char *sbuf = NULL;
627 char readable[45]; 635 char readable[45];
628 636
629 otrl_privkey_hash_to_human(readable, fingerprint); 637 otrl_privkey_hash_to_human(readable, fingerprint);
630 sbuf = g_strdup_printf("OTR: new fingerprint: %s", readable); 638 sbuf = g_strdup_printf("OTR: new fingerprint: %s", readable);
631 scr_WriteIncomingMessage(username, sbuf, 0, HBB_PREFIX_INFO); 639 scr_WriteIncomingMessage(username, sbuf, 0, HBB_PREFIX_INFO, 0);
632 g_free(sbuf); 640 g_free(sbuf);
633 } 641 }
634 642
635 /* The list of known fingerprints has changed. Write them to disk. */ 643 /* The list of known fingerprints has changed. Write them to disk. */
636 static void cb_write_fingerprints(void *opdata) 644 static void cb_write_fingerprints(void *opdata)
640 648
641 /* A ConnContext has entered a secure state. */ 649 /* A ConnContext has entered a secure state. */
642 static void cb_gone_secure(void *opdata, ConnContext *context) 650 static void cb_gone_secure(void *opdata, ConnContext *context)
643 { 651 {
644 scr_WriteIncomingMessage(context->username, "OTR: channel established", 0, 652 scr_WriteIncomingMessage(context->username, "OTR: channel established", 0,
645 HBB_PREFIX_INFO); 653 HBB_PREFIX_INFO, 0);
646 } 654 }
647 655
648 /* A ConnContext has left a secure state. */ 656 /* A ConnContext has left a secure state. */
649 static void cb_gone_insecure(void *opdata, ConnContext *context) 657 static void cb_gone_insecure(void *opdata, ConnContext *context)
650 { 658 {
651 scr_WriteIncomingMessage(context->username, "OTR: channel closed", 0, 659 scr_WriteIncomingMessage(context->username, "OTR: channel closed", 0,
652 HBB_PREFIX_INFO); 660 HBB_PREFIX_INFO, 0);
653 } 661 }
654 662
655 /* We have completed an authentication, using the D-H keys we 663 /* We have completed an authentication, using the D-H keys we
656 * already knew. is_reply indicates whether we initiated the AKE. */ 664 * already knew. is_reply indicates whether we initiated the AKE. */
657 static void cb_still_secure(void *opdata, ConnContext *context, int is_reply) 665 static void cb_still_secure(void *opdata, ConnContext *context, int is_reply)
658 { 666 {
659 scr_WriteIncomingMessage(context->username, "OTR: channel reestablished", 0, 667 scr_WriteIncomingMessage(context->username, "OTR: channel reestablished", 0,
660 HBB_PREFIX_INFO); 668 HBB_PREFIX_INFO, 0);
661 } 669 }
662 670
663 /* Log a message. The passed message will end in "\n". */ 671 /* Log a message. The passed message will end in "\n". */
664 static void cb_log_message(void *opdata, const char *message) 672 static void cb_log_message(void *opdata, const char *message)
665 { 673 {