596 return 1; |
596 return 1; |
597 } |
597 } |
598 return 0; |
598 return 0; |
599 } |
599 } |
600 |
600 |
601 int otr_send(char **msg, const char *buddy) |
601 char *otr_send(const char *msg, const char *buddy, int *encryption_status) |
602 { |
602 { |
603 gcry_error_t err; |
603 gcry_error_t err; |
604 char *newmessage = NULL; |
604 char *newmessage = NULL; |
605 char *htmlmsg; |
605 char *htmlmsg, *rmsg; |
606 ConnContext *ctx = otr_get_context(buddy); |
606 ConnContext *ctx = otr_get_context(buddy); |
|
607 |
|
608 *encryption_status = 0; |
|
609 |
|
610 if (!msg || !buddy || !encryption_status) |
|
611 return NULL; |
607 |
612 |
608 if (ctx->msgstate == OTRL_MSGSTATE_PLAINTEXT) |
613 if (ctx->msgstate == OTRL_MSGSTATE_PLAINTEXT) |
609 err = otrl_message_sending(userstate, &ops, NULL, ctx->accountname, |
614 err = otrl_message_sending(userstate, &ops, NULL, ctx->accountname, |
610 #ifdef HAVE_LIBOTR3 |
615 #ifdef HAVE_LIBOTR3 |
611 ctx->protocol, ctx->username, *msg, NULL, |
616 ctx->protocol, ctx->username, msg, NULL, |
612 &newmessage, NULL, NULL); |
617 &newmessage, NULL, NULL); |
613 #else |
618 #else |
614 // INSTAG XXX |
619 // INSTAG XXX |
615 ctx->protocol, ctx->username, OTRL_INSTAG_BEST, |
620 ctx->protocol, ctx->username, OTRL_INSTAG_BEST, |
616 *msg, NULL, &newmessage, OTRL_FRAGMENT_SEND_SKIP, |
621 msg, NULL, &newmessage, OTRL_FRAGMENT_SEND_SKIP, |
617 NULL, NULL, NULL); |
622 NULL, NULL, NULL); |
618 #endif |
623 #endif |
619 else { |
624 else { |
620 htmlmsg = html_escape(*msg); |
625 htmlmsg = html_escape(msg); |
621 err = otrl_message_sending(userstate, &ops, NULL, ctx->accountname, |
626 err = otrl_message_sending(userstate, &ops, NULL, ctx->accountname, |
622 #ifdef HAVE_LIBOTR3 |
627 #ifdef HAVE_LIBOTR3 |
623 ctx->protocol, ctx->username, htmlmsg, NULL, |
628 ctx->protocol, ctx->username, htmlmsg, NULL, |
624 &newmessage, NULL, NULL); |
629 &newmessage, NULL, NULL); |
625 #else |
630 #else |
629 NULL, NULL, NULL); |
634 NULL, NULL, NULL); |
630 #endif |
635 #endif |
631 g_free(htmlmsg); |
636 g_free(htmlmsg); |
632 } |
637 } |
633 |
638 |
634 if (err) |
639 if (err || !newmessage) |
635 *msg = NULL; /*something went wrong, don't send the plain-message! */ |
640 return NULL; /* something went wrong, don't send the plain-message! */ |
636 |
641 |
637 if (!err && newmessage) { |
642 if (cb_policy(NULL, ctx) & OTRL_POLICY_REQUIRE_ENCRYPTION || |
638 *msg = g_strdup(newmessage); |
643 ctx->msgstate == OTRL_MSGSTATE_ENCRYPTED) |
639 otrl_message_free(newmessage); |
644 *encryption_status = 1; |
640 if (cb_policy(NULL, ctx) & OTRL_POLICY_REQUIRE_ENCRYPTION || |
645 |
641 ctx->msgstate == OTRL_MSGSTATE_ENCRYPTED) |
646 /* Check the new message is not empty */ |
642 return 1; |
647 if (newmessage[0] || !msg[0]) { |
643 } |
648 rmsg = g_strdup(newmessage); |
644 return 0; |
649 } else { |
|
650 rmsg = NULL; |
|
651 *encryption_status = 0; |
|
652 } |
|
653 |
|
654 otrl_message_free(newmessage); |
|
655 return rmsg; |
645 } |
656 } |
646 |
657 |
647 /* Prints OTR connection state */ |
658 /* Prints OTR connection state */ |
648 void otr_print_info(const char *buddy) |
659 void otr_print_info(const char *buddy) |
649 { |
660 { |