diff options
-rw-r--r-- | otr.c | 50 |
1 files changed, 35 insertions, 15 deletions
@@ -42,10 +42,9 @@ void op_still_secure(void *opdata, ConnContext *context, int is_reply); void op_log_message(void *opdata, const char *message); -/* TODO: int op_max_message_size(void *opdata, ConnContext *context); */ +int op_max_message_size(void *opdata, ConnContext *context); -/* TODO: const char *op_account_name(void *opdata, const char *account, - const char *protocol); */ +const char *op_account_name(void *opdata, const char *account, const char *protocol); /** otr sub-command handlers: **/ @@ -131,8 +130,8 @@ void otr_init(void) global.otr_ops.gone_insecure = &op_gone_insecure; global.otr_ops.still_secure = &op_still_secure; global.otr_ops.log_message = &op_log_message; - global.otr_ops.max_message_size = NULL; - global.otr_ops.account_name = NULL; + global.otr_ops.max_message_size = &op_max_message_size; + global.otr_ops.account_name = &op_account_name; global.otr_ops.account_name_free = NULL; } @@ -220,13 +219,12 @@ void otr_rename(const char *onick, const char *nnick) void otr_check_for_key(account_t *a) { irc_t *irc = a->irc; - char buf[45]; - char *fp; + OtrlPrivKey *k; - fp = otrl_privkey_fingerprint(irc->otr_us, buf, a->user, a->prpl->name); - if(fp) { - irc_usermsg(irc, "otr: %s/%s ready with f'print %s", - a->user, a->prpl->name, fp); + k = otrl_privkey_find(irc->otr_us, a->user, a->prpl->name); + if(k) { + irc_usermsg(irc, "otr: %s/%s ready", + a->user, a->prpl->name); } else { otr_keygen(irc, a->user, a->prpl->name); } @@ -241,8 +239,8 @@ char *otr_handle_message(struct im_connection *ic, const char *handle, const cha if(!g_mutex_trylock(ic->irc->otr_mutex)) { /* TODO: queue msgs received during keygen for later */ - irc_usermsg(ic->irc, "msg from %s/%s during keygen - dropped", - handle, ic->acc->prpl->name); + irc_usermsg(ic->irc, "msg from %s during keygen - dropped", + peernick(ic->irc, handle, ic->acc->prpl->name)); return NULL; } @@ -289,8 +287,8 @@ int otr_send_message(struct im_connection *ic, const char *handle, const char *m ConnContext *ctx = NULL; if(!g_mutex_trylock(ic->irc->otr_mutex)) { - irc_usermsg(ic->irc, "msg to %s/%s during keygen - not sent", - handle, ic->acc->prpl->name); + irc_usermsg(ic->irc, "msg to %s during keygen - not sent", + peernick(ic->irc, handle, ic->acc->prpl->name)); return 1; } @@ -488,6 +486,27 @@ void op_log_message(void *opdata, const char *message) log_message(LOGLVL_INFO, "%s", message); } +int op_max_message_size(void *opdata, ConnContext *context) +{ + /* TODO: make max_message_size a property of the prpl. + the values here are taken from the libotr UPGRADING file */ + if(!strcmp(context->protocol, "msn")) + return 1409; + if(!strcmp(context->protocol, "yahoo")) + return 832; + if(!strcmp(context->protocol, "oscar")) + return 2343; +} + +const char *op_account_name(void *opdata, const char *account, const char *protocol) +{ + struct im_connection *ic = (struct im_connection *)opdata; + + log_message(LOGLVL_DEBUG, "op_account_name '%s' '%s'", account, protocol); + + return peernick(ic->irc, account, protocol); +} + /*** OTR sub-command handlers ***/ @@ -946,6 +965,7 @@ void no_keygen(gpointer w, void *data) { account_t *acc = (account_t *)data; + /* TODO: remember that we didn't want a key? */ irc_usermsg(acc->irc, "proceeding without key, otr inoperable on %s/%s", acc->user, acc->prpl->name); } |