Просмотр исходного кода

Fix some INSPIRCD list mode parsing

Change-Id: I88eee521770db9ec756a9c18c28f935cdbdc19d7
Reviewed-on: http://gerrit.dmdirc.com/2542
Reviewed-by: Greg Holmes <greg@dmdirc.com>
Automatic-Compile: DMDirc Build Manager
tags/0.7rc1
Shane Mc Cormack 11 лет назад
Родитель
Сommit
55b49488c9
1 измененных файлов: 18 добавлений и 1 удалений
  1. 18
    1
      src/com/dmdirc/parser/irc/ProcessListModes.java

+ 18
- 1
src/com/dmdirc/parser/irc/ProcessListModes.java Просмотреть файл

@@ -26,6 +26,7 @@ import com.dmdirc.parser.common.ParserError;
26 26
 import com.dmdirc.parser.interfaces.ChannelInfo;
27 27
 import com.dmdirc.parser.interfaces.callbacks.ChannelListModeListener;
28 28
 
29
+import java.util.Arrays;
29 30
 import java.util.Collection;
30 31
 import java.util.LinkedList;
31 32
 import java.util.Queue;
@@ -60,7 +61,7 @@ public class ProcessListModes extends IRCProcessor {
60 61
         byte tokenStart = 4; // Where do the relevent tokens start?
61 62
         boolean isCleverMode = false;
62 63
         long time = 0;
63
-        char mode = 'b';
64
+        char mode = ' ';
64 65
         boolean isItem = true; // true if item listing, false if "end of .." item
65 66
         if (channel == null) {
66 67
             return;
@@ -84,6 +85,14 @@ public class ProcessListModes extends IRCProcessor {
84 85
             // Censored words List
85 86
             mode = 'g';
86 87
             isItem = sParam.equals("941");
88
+        } else if ((serverType == ServerType.INSPIRCD) && (sParam.equals("910") || sParam.equals("911"))) {
89
+            // Channel Access List
90
+            mode = 'w';
91
+            isItem = sParam.equals("910");
92
+        } else if ((serverType == ServerType.INSPIRCD) && (sParam.equals("954") || sParam.equals("953"))) {
93
+            // Channel exemptchanops List
94
+            mode = 'X';
95
+            isItem = sParam.equals("954");
87 96
         } else if (sParam.equals("344") || sParam.equals("345")) {
88 97
             // Reop List, or bad words list, or quiet list. god damn.
89 98
             if (serverType == ServerType.EUIRCD) {
@@ -112,6 +121,12 @@ public class ProcessListModes extends IRCProcessor {
112 121
             isCleverMode = true;
113 122
         }
114 123
 
124
+        // Unknown mode.
125
+        if (mode == ' ') {
126
+            parser.callDebugInfo(IRCParser.DEBUG_LMQ, "Unknown mode line: " + Arrays.toString(token));
127
+            return;
128
+        }
129
+
115 130
         final Queue<Character> listModeQueue = channel.getListModeQueue();
116 131
         if (!isCleverMode && listModeQueue != null) {
117 132
             if ("482".equals(sParam)) {
@@ -257,6 +272,8 @@ public class ProcessListModes extends IRCProcessor {
257 272
                     "386", "387", /* Channel Owner List (swiftirc ) */
258 273
                     "388", "389", /* Protected User List (swiftirc) */
259 274
                     "940", "941", /* Censored words list */
275
+                    "910", "911", /* INSPIRCD Channel Access List. */
276
+                    "954", "953", /* INSPIRCD exemptchanops List. */
260 277
                     "482", /* Permission Denied */
261 278
                     "__LISTMODE__" /* Sensible List Modes */};
262 279
     }

Загрузка…
Отмена
Сохранить