mcabber/mcabber/otr.c
changeset 2213 0c78d31c753d
parent 2076 9fb1ccf291cc
child 2215 ba1a770dd632
equal deleted inserted replaced
2212:778280b01bcb 2213:0c78d31c753d
   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 {