From: Pekka Riikonen Date: Wed, 1 Oct 2003 17:33:28 +0000 (+0000) Subject: UTF-8 text message support for actions and notices. X-Git-Tag: silc.toolkit.0.9.10~33 X-Git-Url: http://git.silcnet.org/gitweb/?p=silc.git;a=commitdiff_plain;h=1d8e01544e0e44cbaa2a12ef69c14b7ae3602a02 UTF-8 text message support for actions and notices. Crashbug fix with channel message handling if libary returns incomplete SilcClientEntry. --- diff --git a/apps/irssi/src/silc/core/client_ops.c b/apps/irssi/src/silc/core/client_ops.c index b8f062aa..476fbeda 100644 --- a/apps/irssi/src/silc/core/client_ops.c +++ b/apps/irssi/src/silc/core/client_ops.c @@ -422,13 +422,47 @@ void silc_channel_message(SilcClient client, SilcClientConnection conn, /* FIXME: replace those printformat calls with signals and add signature information to them (if present) */ if (flags & SILC_MESSAGE_FLAG_ACTION) - printformat_module("fe-common/silc", server, channel->channel_name, - MSGLEVEL_ACTIONS, SILCTXT_CHANNEL_ACTION, - nick == NULL ? "[]" : nick->nick, message); + if(flags & SILC_MESSAGE_FLAG_UTF8 && !silc_term_utf8()) { + char tmp[256], *cp, *dm = NULL; + memset(tmp, 0, sizeof(tmp)); + cp = tmp; + if(message_len > sizeof(tmp) - 1) { + dm = silc_calloc(message_len + 1, sizeof(*dm)); + cp = dm; + } + silc_utf8_decode(message, message_len, SILC_STRING_LANGUAGE, + cp, message_len); + printformat_module("fe-common/silc", server, channel->channel_name, + MSGLEVEL_ACTIONS, SILCTXT_CHANNEL_ACTION, + nick == NULL ? "[]" : nick->nick, cp); + silc_free(dm); + } else { + printformat_module("fe-common/silc", server, channel->channel_name, + MSGLEVEL_ACTIONS, SILCTXT_CHANNEL_ACTION, + nick == NULL ? "[]" : nick->nick, + message); + } else if (flags & SILC_MESSAGE_FLAG_NOTICE) - printformat_module("fe-common/silc", server, channel->channel_name, - MSGLEVEL_NOTICES, SILCTXT_CHANNEL_NOTICE, - nick == NULL ? "[]" : nick->nick, message); + if(flags & SILC_MESSAGE_FLAG_UTF8 && !silc_term_utf8()) { + char tmp[256], *cp, *dm = NULL; + memset(tmp, 0, sizeof(tmp)); + cp = tmp; + if(message_len > sizeof(tmp) - 1) { + dm = silc_calloc(message_len + 1, sizeof(*dm)); + cp = dm; + } + silc_utf8_decode(message, message_len, SILC_STRING_LANGUAGE, + cp, message_len); + printformat_module("fe-common/silc", server, channel->channel_name, + MSGLEVEL_NOTICES, SILCTXT_CHANNEL_NOTICE, + nick == NULL ? "[]" : nick->nick, cp); + silc_free(dm); + } else { + printformat_module("fe-common/silc", server, channel->channel_name, + MSGLEVEL_NOTICES, SILCTXT_CHANNEL_NOTICE, + nick == NULL ? "[]" : nick->nick, + message); + } else { if (flags & SILC_MESSAGE_FLAG_UTF8 && !silc_term_utf8()) { char tmp[256], *cp, *dm = NULL; @@ -519,7 +553,8 @@ void silc_private_message(SilcClient client, SilcClientConnection conn, message = (const unsigned char *)data; } else { silc_emit_mime_sig(server, NULL, data, data_len, - enc, type, sender->nickname); + enc, type, sender->nickname ? sender->nickname : + "[]"); message = NULL; } } diff --git a/apps/irssi/src/silc/core/silc-channels.c b/apps/irssi/src/silc/core/silc-channels.c index 72cca3a3..2ebdcc7a 100644 --- a/apps/irssi/src/silc/core/silc-channels.c +++ b/apps/irssi/src/silc/core/silc-channels.c @@ -1030,7 +1030,7 @@ void silc_channels_init(void) command_bind_silc("notice", MODULE_NAME, (SIGNAL_FUNC) command_notice); command_bind_silc("away", MODULE_NAME, (SIGNAL_FUNC) command_away); command_bind_silc("key", MODULE_NAME, (SIGNAL_FUNC) command_key); - command_bind_silc("listkeys", MODULE_NAME, (SIGNAL_FUNC) command_listkeys); +/* command_bind_silc("listkeys", MODULE_NAME, (SIGNAL_FUNC) command_listkeys); */ silc_nicklist_init(); } @@ -1049,7 +1049,7 @@ void silc_channels_deinit(void) command_unbind("notice", (SIGNAL_FUNC) command_notice); command_unbind("away", (SIGNAL_FUNC) command_away); command_unbind("key", (SIGNAL_FUNC) command_key); - command_unbind("listkeys", (SIGNAL_FUNC) command_listkeys); +/* command_unbind("listkeys", (SIGNAL_FUNC) command_listkeys); */ silc_nicklist_deinit(); } diff --git a/apps/irssi/src/silc/core/silc-nicklist.c b/apps/irssi/src/silc/core/silc-nicklist.c index a8c302bc..c3419f98 100644 --- a/apps/irssi/src/silc/core/silc-nicklist.c +++ b/apps/irssi/src/silc/core/silc-nicklist.c @@ -33,6 +33,8 @@ SILC_NICK_REC *silc_nicklist_insert(SILC_CHANNEL_REC *channel, g_return_val_if_fail(IS_SILC_CHANNEL(channel), NULL); g_return_val_if_fail(user != NULL, NULL); + g_return_val_if_fail(user->client != NULL, NULL); + g_return_val_if_fail(user->client->nickname != NULL, NULL); rec = g_new0(SILC_NICK_REC, 1); rec->nick = g_strdup(user->client->nickname);