]> arthur.barton.de Git - ngircd.git/blobdiff - src/ngircd/irc.c
Implement new IRC+ "CHARCONV" command
[ngircd.git] / src / ngircd / irc.c
index efc34d4b2e087f8e3742c1d44ea6a820e2073f92..ceb649ecf350159d1db1bc969d0a5bb496372a2a 100644 (file)
@@ -25,6 +25,7 @@
 #include "conn-func.h"
 #include "conf.h"
 #include "channel.h"
+#include "conn-encoding.h"
 #include "defines.h"
 #include "irc-write.h"
 #include "log.h"
@@ -359,6 +360,7 @@ Send_Message(CLIENT * Client, REQUEST * Req, int ForceType, bool SendErrors)
        CHANNEL *chan;
        char *currentTarget = Req->argv[0];
        char *lastCurrentTarget = NULL;
+       char *message = NULL;
 
        assert(Client != NULL);
        assert(Req != NULL);
@@ -390,6 +392,13 @@ Send_Message(CLIENT * Client, REQUEST * Req, int ForceType, bool SendErrors)
                return IRC_WriteStrClient(Client, ERR_NOSUCHNICK_MSG,
                                          Client_ID(Client), Req->prefix);
 
+#ifdef ICONV
+       if (Client_Conn(Client) > NONE)
+               message = Conn_EncodingFrom(Client_Conn(Client), Req->argv[1]);
+       else
+#endif
+               message = Req->argv[1];
+
        /* handle msgtarget = msgto *("," msgto) */
        currentTarget = strtok_r(currentTarget, ",", &lastCurrentTarget);
        ngt_UpperStr(Req->command);
@@ -523,12 +532,12 @@ Send_Message(CLIENT * Client, REQUEST * Req, int ForceType, bool SendErrors)
                        }
                        if (!IRC_WriteStrClientPrefix(cl, from, "%s %s :%s",
                                                      Req->command, Client_ID(cl),
-                                                     Req->argv[1]))
+                                                     message))
                                return DISCONNECTED;
                } else if (ForceType != CLIENT_SERVICE
                           && (chan = Channel_Search(currentTarget))) {
                        if (!Channel_Write(chan, from, Client, Req->command,
-                                          SendErrors, Req->argv[1]))
+                                          SendErrors, message))
                                        return DISCONNECTED;
                } else if (ForceType != CLIENT_SERVICE
                        /* $#: server/target mask, RFC 2812, sec. 3.3.1 */
@@ -536,7 +545,7 @@ Send_Message(CLIENT * Client, REQUEST * Req, int ForceType, bool SendErrors)
                           && strchr(currentTarget, '.')) {
                        /* targetmask */
                        if (!Send_Message_Mask(from, Req->command, currentTarget,
-                                              Req->argv[1], SendErrors))
+                                              message, SendErrors))
                                return DISCONNECTED;
                } else {
                        if (!SendErrors)