Tue Jan 04 02:43:44 CET 2004 Jochen Eisinger <jochen@penguin-breeder.org>
authorJochen Eisinger <coffee@silcnet.org>
Tue, 6 Jan 2004 01:47:25 +0000 (01:47 +0000)
committerJochen Eisinger <coffee@silcnet.org>
Tue, 6 Jan 2004 01:47:25 +0000 (01:47 +0000)
* Changed the way NOTICE flagged messages are treated. Added support
  for notices in queries and signing notices.  Affected files
  irssi/default.theme; irssi/docs/help/in/notice.in;
  irssi/src/fe-common/silc/module-formats.[ch], fe-silc-messages.c;
  irssi/src/silc/core/client_ops.c, silc-channels.c, silc-servers.c

CHANGES
apps/irssi/default.theme
apps/irssi/docs/help/in/notice.in
apps/irssi/src/fe-common/silc/fe-silc-messages.c
apps/irssi/src/fe-common/silc/module-formats.c
apps/irssi/src/fe-common/silc/module-formats.h
apps/irssi/src/silc/core/client_ops.c
apps/irssi/src/silc/core/silc-channels.c
apps/irssi/src/silc/core/silc-servers.c

diff --git a/CHANGES b/CHANGES
index 95706be013ade551c7c38776311cb785288cd177..06ec28a28cb08c4254ac41e4a9da9c93f4230b39 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,14 @@
+Tue Jan 04 02:43:44 CET 2004  Jochen Eisinger <jochen@penguin-breeder.org>
+
+       * Changed the way NOTICE flagged messages are treated. Added support
+         for notices in queries and signing notices.  Affected files
+         irssi/default.theme; irssi/docs/help/in/notice.in;
+         irssi/src/fe-common/silc/module-formats.[ch], fe-silc-messages.c;
+         irssi/src/silc/core/client_ops.c, silc-channels.c, silc-servers.c
+
+       * Fixed typo in /ACTION help.  Affected file 
+         irssi/docs/help/in/action.in
+
 Mon Jan 03 23:26:38 CET 2004  Jochen Eisinger <jochen@penguin-breeder.org>
 
        * Fixed typo in perl module.  Affected file 
index b29bb017e8c5fc8b5e49416ff321e46bd3938def..f7e6d668ba9c79e34b6ea7ac35136c7020479b40 100644 (file)
@@ -139,10 +139,10 @@ abstracts = {
   ##
 
   # Generic notice
-  notice = "%C- $0 $1-";
-
-  # Own sent notice
-  ownnotice = "%g- $0 $1-";
+  ownnotice = "%g- $1 -%n ";
+  notice = "%C- $* -%n ";
+  pubnotice_channel = "";
+  pvtnotice_host = "";
 
 
   ##
index e93d2c2a6aeaadb0501790a77d15bdea9337f5a6..3763cb6072cac09da685b198ed4127318c80a5a8 100644 (file)
@@ -3,6 +3,11 @@
 
 Sends a notice to the nick or the channel. Usually notices
 are used in bots and scripts for different kinds of replies.
+For example: /NOTICE * command executed. (sends NOTICE "command executed" to
+the current window)
+
+      -channel: interpret <target> as channel name
+      -sign: add signature
 
 See also: ACTION
 
index 07cf4a01e91e52a01380dc25159b59d6fcd9634e..475c9e9ef717e6c76d22897a73f1ed20afe65508 100644 (file)
@@ -352,6 +352,79 @@ static void sig_message_private_action_signed(SERVER_REC *server,
   sig_message_action_all(server, msg, nick, address, target, FALSE, verified);
 }
 
+static void sig_message_own_notice_all(SERVER_REC *server, 
+                                       const char *msg, const char *target,
+                                       bool is_signed)
+{
+  printformat(server, target,
+             MSGLEVEL_NOTICES | MSGLEVEL_NOHILIGHT | MSGLEVEL_NO_ACT,
+             (is_signed ? SILCTXT_OWN_NOTICE_SIGNED : SILCTXT_OWN_NOTICE),
+             target, msg);
+}
+
+static void sig_message_own_notice(SERVER_REC *server, const char *msg,
+                                  const char *target)
+{
+  sig_message_own_notice_all(server, msg, target, FALSE);
+}
+
+static void sig_message_own_notice_signed(SERVER_REC *server,
+                                         const char *msg, const char *target)
+{
+  sig_message_own_notice_all(server, msg, target, TRUE);
+}
+
+static void sig_message_notice_all(SERVER_REC *server, const char *msg,
+                                  const char *nick, const char *address,
+                                  const char *target, int is_channel,
+                                  int verified)
+{
+  if (ignore_check(server, nick, address, target, msg, MSGLEVEL_NOTICES))
+    return;
+
+  if (is_channel) {
+    /* channel notice */ 
+      printformat(server, target, MSGLEVEL_NOTICES,
+                 VERIFIED_MSG2(verified, SILCTXT_NOTICE_PUBLIC), 
+                 nick, target, msg);
+  } else {
+    /* private notice */
+    printformat(server, nick, MSGLEVEL_NOTICES,
+               VERIFIED_MSG2(verified, SILCTXT_NOTICE_PRIVATE),
+               nick, address == NULL ? "" : address, msg);
+  }
+
+}
+
+static void sig_message_notice(SERVER_REC *server, const char *msg,
+                                  const char *nick, const char *address,
+                                  const char *target)
+{
+  sig_message_notice_all(server, msg, nick, address, target, TRUE, -1);
+}
+
+static void sig_message_private_notice(SERVER_REC *server, const char *msg,
+                                  const char *nick, const char *address,
+                                  const char *target)
+{
+  sig_message_notice_all(server, msg, nick, address, target, FALSE, -1);
+}
+
+static void sig_message_notice_signed(SERVER_REC *server, const char *msg,
+                                  const char *nick, const char *address,
+                                  const char *target, int verified)
+{
+  sig_message_notice_all(server, msg, nick, address, target, TRUE, verified);
+}
+
+static void sig_message_private_notice_signed(SERVER_REC *server,
+                                  const char *msg, const char *nick,
+                                  const char *address, const char *target,
+                                  int verified)
+{
+  sig_message_notice_all(server, msg, nick, address, target, FALSE, verified);
+}
+
 void fe_silc_messages_init(void)
 {
   signal_add_last("message signed_public",
@@ -379,6 +452,23 @@ void fe_silc_messages_init(void)
                  (SIGNAL_FUNC) sig_message_own_private_action_signed);
   signal_add_last("message silc signed_private_action",
                  (SIGNAL_FUNC) sig_message_private_action_signed);
+
+  signal_add_last("message silc own_notice",
+                 (SIGNAL_FUNC) sig_message_own_notice);
+  signal_add_last("message silc notice",
+                 (SIGNAL_FUNC) sig_message_notice);
+  signal_add_last("message silc signed_own_notice",
+                 (SIGNAL_FUNC) sig_message_own_notice_signed);
+  signal_add_last("message silc signed_notice",
+                 (SIGNAL_FUNC) sig_message_notice_signed);
+  signal_add_last("message silc own_private_notice",
+                 (SIGNAL_FUNC) sig_message_own_notice);
+  signal_add_last("message silc private_notice",
+                 (SIGNAL_FUNC) sig_message_private_notice);
+  signal_add_last("message silc signed_own_private_notice",
+                 (SIGNAL_FUNC) sig_message_own_notice_signed);
+  signal_add_last("message silc signed_private_notice",
+                 (SIGNAL_FUNC) sig_message_private_notice_signed);
 }
 
 void fe_silc_messages_deinit(void)
@@ -408,4 +498,21 @@ void fe_silc_messages_deinit(void)
                (SIGNAL_FUNC) sig_message_own_private_action_signed);
   signal_remove("message silc signed_private_action",
                (SIGNAL_FUNC) sig_message_private_action_signed);
+
+  signal_remove("message silc own_notice",
+               (SIGNAL_FUNC) sig_message_own_notice);
+  signal_remove("message silc notice",
+               (SIGNAL_FUNC) sig_message_notice);
+  signal_remove("message silc signed_own_notice",
+               (SIGNAL_FUNC) sig_message_own_notice_signed);
+  signal_remove("message silc signed_notice",
+               (SIGNAL_FUNC) sig_message_notice_signed);
+  signal_remove("message silc own_private_notice",
+               (SIGNAL_FUNC) sig_message_own_notice);
+  signal_remove("message silc private_notice",
+               (SIGNAL_FUNC) sig_message_private_notice);
+  signal_remove("message silc signed_own_private_notice",
+               (SIGNAL_FUNC) sig_message_own_notice_signed);
+  signal_remove("message silc signed_private_notice",
+               (SIGNAL_FUNC) sig_message_private_notice_signed);
 }
index aa1880c16c9aa523b3fc33be347d8cb585d1c2b7..88736464ccd9e1d93a83560e6e44acc29a5b1cce 100644 (file)
@@ -33,8 +33,6 @@ FORMAT_REC fecommon_silc_formats[] = {
        { "channel_topic_not_set", "Topic for {channel $0} not set", 1, { 0 } },
        { "cmode", "channel mode/{channel $0} {mode $1} by {nick $2}", 3, { 0, 0, 0 } },
        { "cumode", "channel user mode/{channel $0}/{nick $1} {mode $2} by {nick $3}", 4, { 0, 0, 0, 0 } },
-       { "notice", "{notice $0-}", 2, { 0, 0 } },
-       { "ownnotice", "{ownnotice $0-}", 2, { 0, 0 } },
        { "inviteban_list", "channel {channel $0} $1 list:", 2, { 0, 0 } },
        { "inviteban_string", "$0 - {channel $1}: $2 {ban $3}", 4, { 1, 0, 0, 0 } },
        { "inviteban_pubkey", "$0 - {channel $1}: $2 Fingerprint (SHA1) {ban $3} (Babbleprint (SHA1)  {ban $4})", 5, { 1, 0, 0, 0, 0 } },
@@ -100,6 +98,16 @@ FORMAT_REC fecommon_silc_formats[] = {
        { "action_private_query_signed", "{pvtaction_query {flag_signed}$0}$2", 3, { 0, 0, 0 } },
        { "action_private_query_unknown", "{pvtaction_query {flag_unknown}$0}$2", 3, { 0, 0, 0 } },
        { "action_private_query_failed", "{pvtaction_query {flag_failed}$0}$2", 3, { 0, 0, 0 } },
+       { "own_notice", "{ownnotice notice $0}$1", 2, { 0, 0 } },
+       { "own_notice_signed", "{ownnotice notice {flag_signed}$0}$1", 2, { 0, 0 } },
+       { "notice_public", "{notice $0{pubnotice_channel $1}}$2", 3, { 0, 0, 0 } },
+       { "notice_public_signed", "{notice {flag_signed}$0{pubnotice_channel $1}}$2", 3, { 0, 0, 0 } },
+       { "notice_public_unknown", "{notice {flag_unknown}$0{pubnotice_channel $1}}$2", 3, { 0, 0, 0 } },
+       { "notice_public_failed", "{notice {flag_failed}$0{pubnotice_channel $1}}$2", 3, { 0, 0, 0 } },
+       { "notice_private", "{notice $0{pvtnotice_host $1}}$2", 3, { 0, 0, 0 } },
+       { "notice_private_signed", "{notice {flag_signed}$0{pvtnotice_host $1}}$2", 3, { 0, 0, 0 } },
+       { "notice_private_unknown", "{notice {flag_unknown}$0{pvtnotice_host $1}}$2", 3, { 0, 0, 0 } },
+       { "notice_private_failed", "{notice {flag_failed}$0{pvtnotice_host $1}}$2", 3, { 0, 0, 0 } },
 
        /* WHOIS, WHOWAS and USERS (alias WHO) messages */
        { NULL, "Who Queries", 0 },
index a983274518d5635eb574193af93d2e0aa918378d..27a94e9ed66cb34d2ec4de61f8c5fbca45bf04f0 100644 (file)
@@ -30,8 +30,6 @@ enum {
   SILCTXT_CHANNEL_TOPIC_NOT_SET,
   SILCTXT_CHANNEL_CMODE,
   SILCTXT_CHANNEL_CUMODE,
-  SILCTXT_CHANNEL_NOTICE,
-  SILCTXT_CHANNEL_OWNNOTICE,
   SILCTXT_CHANNEL_INVITEBAN_LIST,
   SILCTXT_CHANNEL_INVITEBAN_STRING,
   SILCTXT_CHANNEL_INVITEBAN_PUBKEY,
@@ -97,6 +95,16 @@ enum {
   SILCTXT_ACTION_PRIVATE_QUERY_SIGNED,
   SILCTXT_ACTION_PRIVATE_QUERY_UNKNOWN,
   SILCTXT_ACTION_PRIVATE_QUERY_FAILED,
+  SILCTXT_OWN_NOTICE,
+  SILCTXT_OWN_NOTICE_SIGNED,
+  SILCTXT_NOTICE_PUBLIC,
+  SILCTXT_NOTICE_PUBLIC_SIGNED,
+  SILCTXT_NOTICE_PUBLIC_UNKNOWN,
+  SILCTXT_NOTICE_PUBLIC_FAILED,
+  SILCTXT_NOTICE_PRIVATE,
+  SILCTXT_NOTICE_PRIVATE_SIGNED,
+  SILCTXT_NOTICE_PRIVATE_UNKNOWN,
+  SILCTXT_NOTICE_PRIVATE_FAILED,
 
 
   SILCTXT_FILL_2,
index fb9782ff8b52aeddd41b1d604ec34e25dec3b1a7..d47dfc99f5cc3486074d052fd73a4390d419d6aa 100644 (file)
@@ -452,8 +452,6 @@ void silc_channel_message(SilcClient client, SilcClientConnection conn,
         signal_emit("message silc action", 5, server, message,
                    nick->nick, nick->host, channel->channel_name);
     }
-  /* FIXME: replace those printformat calls with signals and add signature
-            information to them (if present) */
   else if (flags & SILC_MESSAGE_FLAG_NOTICE)
     if(flags & SILC_MESSAGE_FLAG_UTF8 && !silc_term_utf8()) {
       char tmp[256], *cp, *dm = NULL;
@@ -465,15 +463,20 @@ void silc_channel_message(SilcClient client, SilcClientConnection conn,
       }
       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 ? "[<unknown>]" : nick->nick, cp);
+      if (flags & SILC_MESSAGE_FLAG_SIGNED)
+       signal_emit("message silc signed_notice", 6, server, cp, nick->nick,
+               nick->host, channel->channel_name, verified);
+      else
+       signal_emit("message silc notice", 5, server, cp, nick->nick,
+               nick->host, channel->channel_name);
       silc_free(dm);
     } else {
-      printformat_module("fe-common/silc", server, channel->channel_name,
-                         MSGLEVEL_NOTICES, SILCTXT_CHANNEL_NOTICE,
-                         nick == NULL ? "[<unknown>]" : nick->nick,
-                         message);
+      if (flags & SILC_MESSAGE_FLAG_SIGNED)
+       signal_emit("message silc signed_notice", 6, server, message,
+               nick->nick, nick->host, channel->channel_name, verified);
+      else
+       signal_emit("message silc notice", 5, server, message,
+               nick->nick, nick->host, channel->channel_name);
     }
   else {
     if (flags & SILC_MESSAGE_FLAG_UTF8 && !silc_term_utf8()) {
@@ -560,7 +563,7 @@ void silc_private_message(SilcClient client, SilcClientConnection conn,
   if (!message)
     return;
 
-  if (flags & SILC_MESSAGE_FLAG_ACTION) {
+  if (flags & SILC_MESSAGE_FLAG_ACTION)
     if(flags & SILC_MESSAGE_FLAG_UTF8 && !silc_term_utf8()) {
       char tmp[256], *cp, *dm = NULL;
       memset(tmp, 0, sizeof(tmp));
@@ -592,42 +595,72 @@ void silc_private_message(SilcClient client, SilcClientConnection conn,
                    sender->nickname ? sender->nickname : "[<unknown>]",
                    sender->username ? userhost : NULL, NULL);
     }
-    return;
-  }
-  /* FIXME: added notices */
+  else if (flags & SILC_MESSAGE_FLAG_NOTICE)
+    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);
+      if (flags & SILC_MESSAGE_FLAG_SIGNED)
+        signal_emit("message silc signed_private_notice", 6, server, cp, 
+                   sender->nickname ? sender->nickname : "[<unknown>]",
+                   sender->username ? userhost : NULL, 
+                   NULL, verified);
+      else
+        signal_emit("message silc private_notice", 5, server, cp, 
+                   sender->nickname ? sender->nickname : "[<unknown>]",
+                   sender->username ? userhost : NULL, NULL);
+      silc_free(dm);
+    } else {
+      if (flags & SILC_MESSAGE_FLAG_SIGNED)
+        signal_emit("message silc signed_private_notice", 6, server, message, 
+                   sender->nickname ? sender->nickname : "[<unknown>]",
+                   sender->username ? userhost : NULL, 
+                   NULL, verified);
+      else
+        signal_emit("message silc private_notice", 5, server, message, 
+                   sender->nickname ? sender->nickname : "[<unknown>]",
+                   sender->username ? userhost : NULL, NULL);
+    }
+  else {
+    if (flags & SILC_MESSAGE_FLAG_UTF8 && !silc_term_utf8()) {
+      char tmp[256], *cp, *dm = NULL;
 
-  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;
+      }
 
-    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);
+      if (flags & SILC_MESSAGE_FLAG_SIGNED)
+        signal_emit("message signed_private", 5, server, cp,
+                 sender->nickname ? sender->nickname : "[<unknown>]",
+                 sender->username ? userhost : NULL, verified);
+      else
+        signal_emit("message private", 4, server, cp,
+                 sender->nickname ? sender->nickname : "[<unknown>]",
+                 sender->username ? userhost : NULL);
+      silc_free(dm);
+      return;
+    } 
 
-    silc_utf8_decode(message, message_len, SILC_STRING_LANGUAGE,
-                    cp, message_len);
     if (flags & SILC_MESSAGE_FLAG_SIGNED)
-      signal_emit("message signed_private", 5, server, cp,
-                 sender->nickname ? sender->nickname : "[<unknown>]",
-                 sender->username ? userhost : NULL, verified);
+      signal_emit("message signed_private", 5, server, message,
+              sender->nickname ? sender->nickname : "[<unknown>]",
+              sender->username ? userhost : NULL, verified);
     else
-      signal_emit("message private", 4, server, cp,
-                 sender->nickname ? sender->nickname : "[<unknown>]",
-                 sender->username ? userhost : NULL);
-    silc_free(dm);
-    return;
-  }
-
-  if (flags & SILC_MESSAGE_FLAG_SIGNED)
-    signal_emit("message signed_private", 5, server, message,
-               sender->nickname ? sender->nickname : "[<unknown>]",
-               sender->username ? userhost : NULL, verified);
-  else
-    signal_emit("message private", 4, server, message,
-               sender->nickname ? sender->nickname : "[<unknown>]",
-               sender->username ? userhost : NULL);
+      signal_emit("message private", 4, server, message,
+              sender->nickname ? sender->nickname : "[<unknown>]",
+              sender->username ? userhost : NULL);
+  } 
 }
 
 /* Notify message to the client. The notify arguments are sent in the
index 6340283a8e7d39dfb843997357e1edf6d0ec215b..66b9e990bce565f86cdc5f3335999e9e427cf4fd 100644 (file)
@@ -310,60 +310,79 @@ static void command_me(const char *data, SILC_SERVER_REC *server,
 static void command_notice(const char *data, SILC_SERVER_REC *server,
                           WI_ITEM_REC *item)
 {
-  SILC_CHANNEL_REC *chanrec;
-  char *tmpcmd = "NOTICE", *tmp;
-  SilcUInt32 argc = 0;
-  unsigned char *message = NULL;
-  unsigned char **argv;
-  SilcUInt32 *argv_lens, *argv_types;
-  int i;
+  GHashTable *optlist;
+  char *target, *msg;
+  char *message = NULL;
+  int target_type;
+  void *free_arg;
+
   CMD_SILC_SERVER(server);
   if (!IS_SILC_SERVER(server) || !server->connected)
     cmd_return_error(CMDERR_NOT_CONNECTED);
 
-  if (!IS_SILC_CHANNEL(item))
+  if ((item != NULL) && (!IS_SILC_CHANNEL(item) && !IS_SILC_QUERY(item)))
     cmd_return_error(CMDERR_NOT_JOINED);
 
   /* Now parse all arguments */
-  tmp = g_strconcat(tmpcmd, " ", data, NULL);
-  silc_parse_command_line(tmp, &argv, &argv_lens,
-                         &argv_types, &argc, 2);
-  g_free(tmp);
+  if (!cmd_get_params(data, &free_arg, 2 | PARAM_FLAG_OPTIONS | 
+                     PARAM_FLAG_GETREST, 
+                     "notice", &optlist, &target, &msg))
+    return;
 
-  if (argc < 2)
-    cmd_return_error(CMDERR_NOT_ENOUGH_PARAMS);
+  if (*target == '\0' || *msg == '\0')
+    cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS);
 
-  chanrec = silc_channel_find(server, item->visible_name);
-  if (chanrec == NULL) 
-    cmd_return_error(CMDERR_CHAN_NOT_FOUND);
+  if (strcmp(target, "*") == 0) {
+    /* send to active channel/query */
+    if (item == NULL)
+      cmd_param_error(CMDERR_NOT_JOINED);
+
+    target_type = IS_SILC_CHANNEL(item) ? 
+           SEND_TARGET_CHANNEL : SEND_TARGET_NICK;
+    target = (char *)window_item_get_target(item);
+  } else if (g_hash_table_lookup(optlist, "channel") != NULL)
+    target_type = SEND_TARGET_CHANNEL;
+  else {
+    target_type = SEND_TARGET_NICK;
+  }
 
   if (!silc_term_utf8()) {
-    int len = silc_utf8_encoded_len(argv[1], argv_lens[1],
+    int len = silc_utf8_encoded_len(msg, strlen(msg),
                                    SILC_STRING_LANGUAGE);
     message = silc_calloc(len + 1, sizeof(*message));
     g_return_if_fail(message != NULL);
-    silc_utf8_encode(argv[1], argv_lens[1], SILC_STRING_LANGUAGE,
+    silc_utf8_encode(msg, strlen(msg), SILC_STRING_LANGUAGE,
                     message, len);
   }
 
-  /* Send the action message */
-  silc_client_send_channel_message(silc_client, server->conn, 
-                                  chanrec->entry, NULL,
-                                  SILC_MESSAGE_FLAG_NOTICE |
-                                  SILC_MESSAGE_FLAG_UTF8,
-                                  message ? message : argv[1],
-                                  message ? strlen(message) : argv_lens[1],
-                                  TRUE);
-
-  printformat_module("fe-common/silc", server, chanrec->entry->channel_name,
-                    MSGLEVEL_NOTICES, SILCTXT_CHANNEL_OWNNOTICE, 
-                     server->conn->local_entry->nickname, argv[1]);
-
-  for (i = 0; i < argc; i++)
-    silc_free(argv[i]);
-  silc_free(argv_lens);
-  silc_free(argv_types);
+  if (target != NULL) {
+    if (target_type == SEND_TARGET_CHANNEL) {
+      if (silc_send_channel(server, target, (message != NULL ? message : msg),
+                           SILC_MESSAGE_FLAG_NOTICE | SILC_MESSAGE_FLAG_UTF8 |
+                           (g_hash_table_lookup(optlist, "sign") != NULL ?
+                            SILC_MESSAGE_FLAG_SIGNED : 0))) {
+       if (g_hash_table_lookup(optlist, "sign"))
+          signal_emit("message silc signed_own_notice", 3, server, msg, target);
+       else
+          signal_emit("message silc own_notice", 3, server, msg, target);
+      }
+    } else {
+      if (silc_send_msg(server, target, (message != NULL ? message : msg),
+                       (message != NULL ? strlen(message) : strlen(msg)),
+                       SILC_MESSAGE_FLAG_NOTICE | SILC_MESSAGE_FLAG_UTF8 |
+                       (g_hash_table_lookup(optlist, "sign") != NULL ?
+                        SILC_MESSAGE_FLAG_SIGNED : 0))) {
+       if (g_hash_table_lookup(optlist, "sign"))
+         signal_emit("message silc signed_own_private_notice", 3, 
+                         server, msg, target);
+       else
+         signal_emit("message silc own_private_notice", 3,
+                         server, msg, target);
+      }
+    }
+  }
+
+  cmd_params_free(free_arg);
   silc_free(message);
 }
 
@@ -1208,6 +1227,7 @@ void silc_channels_init(void)
 
   command_set_options("listkeys", "clients servers");
   command_set_options("action", "sign channel");
+  command_set_options("notice", "sign channel");
 
   silc_nicklist_init();
 }
index 444cda53325e53e554e1adc4ef24e872e807e8a4..cc901cad3bcf4c34a3d6365efddb961155c993dc 100644 (file)
@@ -430,7 +430,7 @@ char *silc_server_get_channels(SILC_SERVER_REC *server)
 /* SYNTAX: AWAY [<message>] */
 /* SYNTAX: INFO [<server>] */
 /* SYNTAX: NICK <nickname> */
-/* SYNTAX: NOTICE <message> */
+/* SYNTAX: NOTICE [-sign] [-channel] <target> <message> */
 /* SYNTAX: PART [<channel>] */
 /* SYNTAX: PING */
 /* SYNTAX: SCONNECT <server> [<port>] */