Verifying reverse DNS lookups
[KiwiIRC.git] / server / clientcommands.js
index f5c870b02f27d35bc4852ff23912b7fcc14aa448..33edeffb79cabf93054688fd7871bf0e5c5cbfb3 100644 (file)
@@ -20,11 +20,40 @@ ClientCommands.prototype.run = function (command, args, irc_connection, callback
 \r
 \r
 \r
+/**\r
+ * Truncate a string into blocks of a set size\r
+ */\r
+function truncateString(str, block_size) {\r
+    block_size = block_size || 350;\r
+\r
+    var blocks = [],\r
+        current_pos;\r
+\r
+    for (current_pos = 0; current_pos < str.length; current_pos = current_pos + block_size) {\r
+        blocks.push(str.substr(current_pos, block_size));\r
+    }\r
+\r
+    return blocks;\r
+}\r
+\r
+\r
+\r
+\r
 var listeners = {\r
     PRIVMSG: function (args, irc_connection, callback) {\r
-         if (args.target && (args.msg)) {\r
-            irc_connection.write('PRIVMSG ' + args.target + ' :' + args.msg, callback);\r
-        }\r
+        // Maximum length of target + message we can send to the IRC server is 500 characters\r
+        // but we need to leave extra room for the sender prefix so the entire message can\r
+        // be sent from the IRCd to the target without being truncated.\r
+\r
+        var blocks = truncateString(args.msg, 350);\r
+        blocks.forEach(function (block, idx) {\r
+            // Apply the callback on the last message only\r
+            var cb = (idx === blocks.length - 1) ?\r
+                callback :\r
+                undefined;\r
+\r
+            irc_connection.write('PRIVMSG ' + args.target + ' :' + block, cb);\r
+        });\r
     },\r
     \r
 \r
@@ -77,7 +106,7 @@ var listeners = {
 \r
     KICK: function (args, irc_connection, callback) {\r
         if ((args.channel) && (args.nick)) {\r
-            irc_connection.write('KICK ' + args.channel + ' ' + args.nick + ':' + args.reason, callback);\r
+            irc_connection.write('KICK ' + args.channel + ' ' + args.nick + ' :' + args.reason, callback);\r
         }\r
     },\r
 \r
@@ -91,9 +120,19 @@ var listeners = {
 \r
 \r
     NOTICE: function (args, irc_connection, callback) {\r
-        if ((args.target) && (args.msg)) {\r
-            irc_connection.write('NOTICE ' + args.target + ' :' + args.msg, callback);\r
-        }\r
+        // Maximum length of target + message we can send to the IRC server is 500 characters\r
+        // but we need to leave extra room for the sender prefix so the entire message can\r
+        // be sent from the IRCd to the target without being truncated.\r
+\r
+        var blocks = truncateString(args.msg, 350);\r
+        blocks.forEach(function (block, idx) {\r
+            // Apply the callback on the last message only\r
+            var cb = (idx === blocks.length - 1) ?\r
+                callback :\r
+                undefined;\r
+\r
+            irc_connection.write('NOTICE ' + args.target + ' :' + block, cb);\r
+        });\r
     },\r
 \r
 \r
@@ -115,5 +154,11 @@ var listeners = {
         if ((args.target) && (args.data)) {\r
             irc_connection.write('PRIVMSG ' + args.target + ': ' + String.fromCharCode(1) + 'KIWI ' + args.data + String.fromCharCode(1), callback);\r
         }\r
+    },\r
+\r
+    ENCODING: function (args, irc_connection, callback) {\r
+        if (args.encoding) {\r
+            return callback(irc_connection.setEncoding(args.encoding));\r
+        }\r
     }\r
 };\r