added special modes handler
authorpk910 <philipp@zoelle1.de>
Fri, 12 Aug 2011 04:51:27 +0000 (06:51 +0200)
committerpk910 <philipp@zoelle1.de>
Fri, 12 Aug 2011 04:51:27 +0000 (06:51 +0200)
ChanNode.c
ChanUser.h

index 93f4266c4e754e68ad6f60ceb9aed0a8002d7ecb..5bca72ea2bf361cf9ca57ae8ecae8b248e63d5e2 100644 (file)
@@ -237,6 +237,21 @@ void* getModeValue(struct ChanNode* chan, char modeChar) {
     #undef MODE_VALUE_INDEX
 }
 
+static void parseModesUserPriv(struct ChanNode* chan, unsigned char flag, int add, char *nick) {
+    struct UserNode *user = getUserByNick(nick);
+    if(user == NULL) return;
+    struct ChanUser *chanuser = getChanUser(user, chan);
+    if(chanuser == NULL) return;
+    if(add)
+        chanuser->flags |= flag;
+    else
+        chanuser->flags &= ~flag;
+}
+
+static void parseModesBan(struct ChanNode* chan, int add, char *mask) {
+    //to be continued...
+}
+
 void parseModes(struct ChanNode* chan, char *modeStr, char **argv, int argc) {
     int i, argpos = 0, add = 1;
     #define MODE_TYPE (modeOpt[2] & CHANNEL_MODE_TYPE)
@@ -255,7 +270,23 @@ void parseModes(struct ChanNode* chan, char *modeStr, char **argv, int argc) {
         modeOpt = getModeOptions(modeStr[i]);
         if(!modeOpt) continue; // unknown mode?
         if(MODE_TYPE == CHANNEL_MODE_TYPE_A) {
+            if(argpos == argc) continue;
             //special mode ;)
+            switch(modeStr[i]) {
+                case 'o':
+                    parseModesUserPriv(chan, CHANUSERFLAG_OPPED, add, argv[argc]);
+                    break;
+                case 'v':
+                    parseModesUserPriv(chan, CHANUSERFLAG_VOICED, add, argv[argc]);
+                    break;
+                case 'b':
+                    parseModesBan(chan, add, argv[argc]);
+                    break;
+                default:
+                    //we have an unknown TYPE_A mode???
+                    break;
+            }
+            argc++;
             continue;
         }
         if(add) {
index f979893db5609efb31a0dfcfb6f9a71b9b0a8ff7..c12de4a362b453836060624d5a72df0708ee88cf 100644 (file)
@@ -11,7 +11,7 @@ struct ChanNode;
 struct UserNode;
 
 struct ChanUser {
-    char flags;
+    unsigned char flags;
     struct ChanNode *chan;
     struct UserNode *user;