projects
/
NeonServV5.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
08f5201
)
added special modes handler
author
pk910
<philipp@zoelle1.de>
Fri, 12 Aug 2011 04:51:27 +0000
(06:51 +0200)
committer
pk910
<philipp@zoelle1.de>
Fri, 12 Aug 2011 04:51:27 +0000
(06:51 +0200)
ChanNode.c
patch
|
blob
|
history
ChanUser.h
patch
|
blob
|
history
diff --git
a/ChanNode.c
b/ChanNode.c
index 93f4266c4e754e68ad6f60ceb9aed0a8002d7ecb..5bca72ea2bf361cf9ca57ae8ecae8b248e63d5e2 100644
(file)
--- a/
ChanNode.c
+++ b/
ChanNode.c
@@
-237,6
+237,21
@@
void* getModeValue(struct ChanNode* chan, char modeChar) {
#undef MODE_VALUE_INDEX
}
#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)
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) {
modeOpt = getModeOptions(modeStr[i]);
if(!modeOpt) continue; // unknown mode?
if(MODE_TYPE == CHANNEL_MODE_TYPE_A) {
+ if(argpos == argc) continue;
//special mode ;)
//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) {
continue;
}
if(add) {
diff --git
a/ChanUser.h
b/ChanUser.h
index f979893db5609efb31a0dfcfb6f9a71b9b0a8ff7..c12de4a362b453836060624d5a72df0708ee88cf 100644
(file)
--- a/
ChanUser.h
+++ b/
ChanUser.h
@@
-11,7
+11,7
@@
struct ChanNode;
struct UserNode;
struct ChanUser {
struct UserNode;
struct ChanUser {
- char flags;
+
unsigned
char flags;
struct ChanNode *chan;
struct UserNode *user;
struct ChanNode *chan;
struct UserNode *user;