X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=apps%2Firssi%2Fsrc%2Fsilc%2Fcore%2Fclient_ops.c;h=c138a51a3eae123ba9b6739352215b32dd25621e;hb=fa0904121c6cdc56d0bbc01437a09cf798e2e322;hp=d92b4eb06362cfa926a59b9e857d9e38840e8117;hpb=792b5d984aecd0a1a6dcc8b9435265a38a871b16;p=silc.git diff --git a/apps/irssi/src/silc/core/client_ops.c b/apps/irssi/src/silc/core/client_ops.c index d92b4eb0..c138a51a 100644 --- a/apps/irssi/src/silc/core/client_ops.c +++ b/apps/irssi/src/silc/core/client_ops.c @@ -39,6 +39,7 @@ #include "fe-common/silc/module-formats.h" #include "core.h" +#include "blob.h" static void silc_verify_public_key_internal(SilcClient client, SilcClientConnection conn, @@ -110,6 +111,20 @@ void silc_say_error(char *msg, ...) va_end(va); } +void silc_emit_mime_sig(SILC_SERVER_REC *server, SILC_CHANNEL_REC *channel, + const char *data, SilcUInt32 data_len, + const char *encoding, const char *type, + const char *nick) +{ + BLOB_REC blob; + + blob_fill(&blob); + blob.octets = data_len; + blob.data = (char *)data; + + signal_emit("mime", 6, server, channel, &blob, encoding, type, nick); +} + /* Message for a channel. The `sender' is the nickname of the sender received in the packet. The `channel_name' is the name of the channel. */ @@ -142,12 +157,14 @@ void silc_channel_message(SilcClient client, SilcClientConnection conn, if (flags & SILC_MESSAGE_FLAG_DATA) { /* MIME object received, try to display it as well as we can */ - char type[128]; + char type[128], enc[128]; unsigned char *data; + SilcUInt32 data_len; memset(type, 0, sizeof(type)); + memset(enc, 0, sizeof(enc)); if (!silc_mime_parse(message, message_len, NULL, 0, type, sizeof(type) - 1, - NULL, 0, &data, NULL)) + enc, sizeof(enc) - 1, &data, &data_len)) return; /* Then figure out what we can display */ @@ -156,9 +173,8 @@ void silc_channel_message(SilcClient client, SilcClientConnection conn, /* It is something textual, display it */ message = (const unsigned char *)data; } else { - printformat_module("fe-common/silc", server, channel->channel_name, - MSGLEVEL_CRAP, SILCTXT_MESSAGE_DATA, - nick == NULL ? "[]" : nick->nick, type); + silc_emit_mime_sig(server, chanrec, data, data_len, + enc, type, nick->nick); message = NULL; } } @@ -223,12 +239,14 @@ void silc_private_message(SilcClient client, SilcClientConnection conn, if (flags & SILC_MESSAGE_FLAG_DATA) { /* MIME object received, try to display it as well as we can */ - char type[128]; + char type[128], enc[128]; unsigned char *data; + SilcUInt32 data_len; memset(type, 0, sizeof(type)); + memset(enc, 0, sizeof(enc)); if (!silc_mime_parse(message, message_len, NULL, 0, type, sizeof(type) - 1, - NULL, 0, &data, NULL)) + enc, sizeof(enc) - 1, &data, &data_len)) return; /* Then figure out what we can display */ @@ -237,10 +255,8 @@ void silc_private_message(SilcClient client, SilcClientConnection conn, /* It is something textual, display it */ message = (const unsigned char *)data; } else { - printformat_module("fe-common/silc", server, NULL, - MSGLEVEL_CRAP, SILCTXT_MESSAGE_DATA, - sender->nickname ? sender->nickname : "[]", - type); + silc_emit_mime_sig(server, NULL, data, data_len, + enc, type, sender->nickname); message = NULL; } }