From: pk910 Date: Sun, 28 Aug 2011 15:22:17 +0000 (+0200) Subject: fixed last commits X-Git-Tag: v5.3~466 X-Git-Url: http://git.pk910.de/?p=NeonServV5.git;a=commitdiff_plain;h=909c04dffe92f3a611aee1ddb83502caa61c0e70 fixed last commits --- diff --git a/BanNode.c b/BanNode.c index 45ba199..9be81b3 100644 --- a/BanNode.c +++ b/BanNode.c @@ -8,6 +8,7 @@ struct BanNode* addChannelBan(struct ChanNode *chan, char *mask) { ban->mask = strdup(mask); ban->next = chan->bans; chan->bans = ban; + return ban; } void removeChannelBanMask(struct ChanNode *chan, char *mask) { @@ -15,14 +16,14 @@ void removeChannelBanMask(struct ChanNode *chan, char *mask) { for(cban = chan->bans; cban; cban = cban->next) { if(!strcmp(cban->mask, mask)) { if(last) - last->next = ban->next; + last->next = cban->next; else - chan->bans = ban->next; - free(ban->mask); - free(ban); + chan->bans = cban->next; + free(cban->mask); + free(cban); break; } else - last = ban; + last = cban; } } @@ -39,7 +40,7 @@ void removeChannelBan(struct BanNode *ban) { free(ban); break; } else - last = ban; + last = cban; } } @@ -50,5 +51,5 @@ void removeChannelBans(struct ChanNode *chan) { free(ban->mask); free(ban); } - channel->bans = NULL; + chan->bans = NULL; } diff --git a/BanNode.h b/BanNode.h index 56937e7..5b3d406 100644 --- a/BanNode.h +++ b/BanNode.h @@ -12,7 +12,7 @@ struct BanNode { }; struct BanNode* addChannelBan(struct ChanNode *chan, char *mask); -void removeChannelBanMask(char *mask); +void removeChannelBanMask(struct ChanNode *chan, char *mask); void removeChannelBan(struct BanNode *ban); void removeChannelBans(struct ChanNode *chan); diff --git a/ChanNode.c b/ChanNode.c index 7313bf3..4568e63 100644 --- a/ChanNode.c +++ b/ChanNode.c @@ -1,6 +1,7 @@ #include "ChanNode.h" #include "ChanUser.h" #include "UserNode.h" +#include "BanNode.h" #include "modcmd.h" static struct ChanNode **chanList; @@ -216,6 +217,8 @@ void freeChanNode(struct ChanNode* chan) { } free(chan->mode_str_args); free(chan->mode_int_args); + if(chan->bans) + removeChannelBans(chan); free(chan); } diff --git a/cmd_neonserv_set.c b/cmd_neonserv_set.c index cd54d20..353287a 100644 --- a/cmd_neonserv_set.c +++ b/cmd_neonserv_set.c @@ -1,9 +1,9 @@ -typedef int neonserv_cmd_set_function(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *argument); -static int neonserv_cmd_set_trigger(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *argument); -static int neonserv_cmd_set_modes(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *argument); -static int neonserv_cmd_set_dynlimit(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *argument); -static int neonserv_cmd_set_nodelete(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *argument); +typedef char* neonserv_cmd_set_function(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, int set, char *argument); +static char* neonserv_cmd_set_trigger(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, int set, char *argument); +static char* neonserv_cmd_set_modes(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, int set, char *argument); +static char* neonserv_cmd_set_dynlimit(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, int set, char *argument); +static char* neonserv_cmd_set_nodelete(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, int set, char *argument); #define NS_VALID_FUNCTION 0x01 #define NS_VALID_STRING 0x02 @@ -14,7 +14,7 @@ static int neonserv_cmd_set_nodelete(struct ClientSocket *client, struct UserNod #define NS_VALID_BOOLEAN 0x40 #define NS_HAS_OPT 0x100 /* options (SET_OPTION_{NAME}_{VALUE}) */ -#define NS_HAS_HALP 0x200 /* help (SET_HELP_{NAME}) - only shown if help is requested */ +#define NS_HAS_HELP 0x200 /* help (SET_HELP_{NAME}) - only shown if help is requested */ static const struct { const char *setting; @@ -22,7 +22,7 @@ static const struct { unsigned int valid; void *parameter; } channel_settings[] = { - {"TRIGGER", "channel_trigger", NS_VALID_FUNCTION, neonserv_cmd_set_trigger}, + {"TRIGGER", NULL, NS_VALID_FUNCTION, neonserv_cmd_set_trigger}, {"DEFAULTTOPIC", "channel_defaulttopic", NS_VALID_STRING, NULL}, {"TOPICMASK", "channel_topicmask", NS_VALID_STRING, NULL}, {"GREETING", "channel_greeting", NS_VALID_STRING, NULL}, @@ -46,7 +46,7 @@ static const struct { {"SETTERS", "channel_setters", NS_VALID_ACCESS | NS_VALID_NO501, NULL}, {"ADDUSER", "channel_canadd", NS_VALID_ACCESS, NULL}, {"DELUSER", "channel_candel", NS_VALID_ACCESS, NULL}, - {"CLVL", "channel_canclvl", NS_VALID_ACCESS, NULL2}, + {"CLVL", "channel_canclvl", NS_VALID_ACCESS, NULL}, {"RESYNC", "channel_canresync", NS_VALID_ACCESS, NULL}, {"SUSPEND", "channel_cansuspend", NS_VALID_ACCESS, NULL}, {"NOTICEUSERS", "channel_notice", NS_VALID_ACCESS, NULL}, @@ -61,34 +61,45 @@ static const struct { }; static CMD_BIND(neonserv_cmd_set) { - int i; + int i, j; if(argc && strcmp(argv[0], "help")) { } else { check_mysql(); - char query[512], *value, *tmp, nameBuf[64]; + char query[1024], *value, *org_value, *tmp, nameBuf[64]; int querypos = 0; - MYSQL_RES *res; + MYSQL_RES *res, *defaults_res; MYSQL_ROW row, defaults; struct Table *table; char *content[2]; i = 0; - while(channel_settings[i]->setting) { - querypos += sprintf(query + querypos, ", `%s`", channel_settings[i]->chanfield); + while(channel_settings[i].setting) { + if(channel_settings[i].chanfield) + querypos += sprintf(query + querypos, ", `%s`", channel_settings[i].chanfield); i++; } table = table_init(2, i, 0); table_set_bold(table, 0, 1); - printf_mysql_query("SELECT `channel_id` %s FROM `channels` WHERE `channel_id` = 'defaults'", query); - defaults = mysql_fetch_row(mysql_use()); - printf_mysql_query("SELECT `channel_name` %s FROM `channels` WHERE `channel_id` = '%s'", query, chan->channel_id); + printf_mysql_query("SELECT `channel_id` %s FROM `channels` WHERE `channel_name` = 'defaults'", query); + defaults_res = mysql_use(); + defaults = mysql_fetch_row(defaults_res); + printf_mysql_query("SELECT `channel_name` %s FROM `channels` WHERE `channel_id` = '%d'", query, chan->channel_id); res = mysql_use(); row = mysql_fetch_row(res); i = 0; - reply(textclient, user, "NS_SET_HEADER", chan->name); - while(channel_settings[i]->setting) { - value = (row[1+i] ? row[1+i] : defaults[1+i]); - if(channel_settings[i]->valid & NS_VALID_BOOLEAN) { + j = 0; + reply(getTextBot(), user, "NS_SET_HEADER", chan->name); + while(channel_settings[i].setting) { + if(channel_settings[i].chanfield) { + j++; + org_value = (row[j] ? row[j] : defaults[j]); + } else if(channel_settings[i].valid & NS_VALID_FUNCTION) { + neonserv_cmd_set_function *func = channel_settings[i].parameter; + org_value = func(client, user, chan, 0, NULL); + } else + org_value = "0"; + value = org_value; + if(channel_settings[i].valid & NS_VALID_BOOLEAN) { if(!strcmp(value, "0")) value = get_language_string(user, "NS_SET_OFF"); else @@ -96,45 +107,46 @@ static CMD_BIND(neonserv_cmd_set) { } strcpy(query, value); querypos = strlen(query); - if(channel_settings[i]->valid & NS_HAS_OPT) { - sprintf(nameBuf, "NS_SET_OPTION_%s_%s", channel_settings[i]->setting, (row[1+i] ? row[1+i] : defaults[1+i])); + if(channel_settings[i].valid & NS_HAS_OPT) { + sprintf(nameBuf, "NS_SET_OPTION_%s_%s", channel_settings[i].setting, org_value); tmp = get_language_string(user, nameBuf); if(tmp) { querypos += sprintf(query+querypos, " - %s", tmp); } } - if(argc && channel_settings[i]->valid & NS_HAS_HELP) { - sprintf(nameBuf, "NS_SET_HELP_%s", channel_settings[i]->setting); + if(argc && channel_settings[i].valid & NS_HAS_HELP) { + sprintf(nameBuf, "NS_SET_HELP_%s", channel_settings[i].setting); tmp = get_language_string(user, nameBuf); if(tmp) { querypos += sprintf(query+querypos, " - %s", tmp); } } - content[0] = channel_settings[i]->setting; + content[0] = (char*)channel_settings[i].setting; content[1] = query; table_add(table, content); + i++; } char **table_lines = table_end(table); for(i = 0; i < table->entrys; i++) { reply(getTextBot(), user, table_lines[i]); } - free_table(table); + table_free(table); } } -static int neonserv_cmd_set_trigger(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *argument) { - return 1; +static char* neonserv_cmd_set_trigger(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, int set, char *argument) { + return "+"; } -static int neonserv_cmd_set_modes(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *argument) { - return 1; +static char* neonserv_cmd_set_modes(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, int set, char *argument) { + return NULL; } -static int neonserv_cmd_set_dynlimit(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *argument) { - return 1; +static char* neonserv_cmd_set_dynlimit(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, int set, char *argument) { + return NULL; } -static int neonserv_cmd_set_nodelete(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *argument) { - return 1; +static char* neonserv_cmd_set_nodelete(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, int set, char *argument) { + return NULL; }