Wed Oct 30 14:06:52 CET 2003 Jochen Eisinger <jochen@penguin-breeder.org>
authorJochen Eisinger <coffee@silcnet.org>
Thu, 30 Oct 2003 13:14:42 +0000 (13:14 +0000)
committerJochen Eisinger <coffee@silcnet.org>
Thu, 30 Oct 2003 13:14:42 +0000 (13:14 +0000)
* Changed MIME signal handler to make things easier for the perl
  script. Affected files irssi/src/silc/core/client_ops.c,
  silc-servers.c, and irssi/docs/signals.txt

apps/irssi/docs/signals.txt
apps/irssi/src/silc/core/client_ops.c
apps/irssi/src/silc/core/silc-servers.c

index 8944ea0ef086a693297a7afdcc15018df0339d1c..e893b6d657ab3cf0920955816fad19a28691dbe2 100644 (file)
@@ -329,7 +329,7 @@ SILC
 ---
 
 silc-channels.c:
- "mime", SERVER_REC, CHANNEL_REC, char *blob, char *nick, int verified
+ "mime", SERVER_REC, WI_ITEM_REC, char *blob, char *nick, int verified
 
 silc-servers.c:
- "mime-send", SERVER_REC, WI_ITEM_REC, char *blob, int sign
+ "mime-send", SERVER_REC, int is_channel, char *to, char *blob, int sign
index f8347c96baa60c606af02ae0be3b7a0204ff913b..f57dc12a70af7d5684eb98e385e0952b4c30d14c 100644 (file)
@@ -345,7 +345,7 @@ char * silc_escape_data(const char *data, SilcUInt32 len)
     return escaped_data;
 }
 
-void silc_emit_mime_sig(SILC_SERVER_REC *server, SILC_CHANNEL_REC *channel,
+void silc_emit_mime_sig(SILC_SERVER_REC *server, WI_ITEM_REC *item,
                const char *data, SilcUInt32 data_len, const char *nick,
               int verified)
 {
@@ -353,7 +353,7 @@ void silc_emit_mime_sig(SILC_SERVER_REC *server, SILC_CHANNEL_REC *channel,
 
    escaped_data = silc_escape_data(data, data_len);
 
-   signal_emit("mime", 4, server, channel, escaped_data, nick, verified);
+   signal_emit("mime", 4, server, item, escaped_data, nick, verified);
  
    silc_free(escaped_data);
 }
@@ -402,7 +402,7 @@ void silc_channel_message(SilcClient client, SilcClientConnection conn,
   }
 
   if (flags & SILC_MESSAGE_FLAG_DATA) {
-    silc_emit_mime_sig(server, chanrec, message, message_len,
+    silc_emit_mime_sig(server, (WI_ITEM_REC *)chanrec, message, message_len,
                nick == NULL ? NULL : nick->nick,
                flags & SILC_MESSAGE_FLAG_SIGNED ? verified : -1);
     message = NULL;
@@ -527,7 +527,10 @@ void silc_private_message(SilcClient client, SilcClientConnection conn,
   }
 
   if (flags & SILC_MESSAGE_FLAG_DATA) {
-    silc_emit_mime_sig(server, NULL, message, message_len,
+    silc_emit_mime_sig(server,
+               sender->nickname ? 
+               (WI_ITEM_REC *)query_find(server, sender->nickname) : NULL,
+               message, message_len,
                sender->nickname ? sender->nickname : "[<unknown>]",
                flags & SILC_MESSAGE_FLAG_SIGNED ? verified : -1);
     message = NULL;
index 3cafc80c88d9a6e47c4c2bcd0164fc14e317825d..54803ba1c14025cdc42cab6bddfd56a35a9f8fc3 100644 (file)
@@ -174,33 +174,46 @@ static int silc_send_msg(SILC_SERVER_REC *server, char *nick, char *msg,
   return TRUE;
 }
 
-void silc_send_mime(SILC_SERVER_REC *server, WI_ITEM_REC *to,
+void silc_send_mime(SILC_SERVER_REC *server, int channel, const char *to,
                    const char *data, int sign)
 {
-  SILC_CHANNEL_REC *channel;
-  QUERY_REC *query;
   char *unescaped_data;
   SilcUInt32 unescaped_data_len;
+  int target_type;
 
   if (!(IS_SILC_SERVER(server)) || (data == NULL) || (to == NULL))
     return;
 
+  if (channel) {
+    target_type = SEND_TARGET_CHANNEL;
+  } else {
+    target_type = server_ischannel(SERVER(server), to) ?
+      SEND_TARGET_CHANNEL : SEND_TARGET_NICK;
+  }
+
   unescaped_data = silc_unescape_data(data, &unescaped_data_len);
 
-  if (IS_SILC_CHANNEL(to)) {
-    channel = SILC_CHANNEL(to);
-    silc_client_send_channel_message(silc_client, server->conn, channel->entry,
+  if (target_type == SEND_TARGET_CHANNEL) {
+    SILC_CHANNEL_REC *rec;
+
+    rec = silc_channel_find(server, to);
+    if (rec == NULL || rec->entry == NULL) {
+      cmd_return_error(CMDERR_NOT_JOINED);
+    }
+
+    silc_client_send_channel_message(silc_client, server->conn, rec->entry,
                                     NULL, SILC_MESSAGE_FLAG_DATA |
                                     (sign ? SILC_MESSAGE_FLAG_SIGNED : 0),
                                     unescaped_data, unescaped_data_len, TRUE);
-  } else if (IS_SILC_QUERY(to)) {
-    query = SILC_QUERY(to);
-    silc_send_msg(server, query->name, unescaped_data, unescaped_data_len,
+  } else {
+    silc_send_msg(server, to, unescaped_data, unescaped_data_len,
                  SILC_MESSAGE_FLAG_DATA | 
                  (sign ? SILC_MESSAGE_FLAG_SIGNED : 0));
 
   }
 
+  signal_stop();
+
   silc_free(unescaped_data);
 }