1 /* +------------------------------------+
2 * | Inspire Internet Relay Chat Daemon |
3 * +------------------------------------+
5 * Inspire is copyright (C) 2002-2004 ChatSpike-Dev.
7 * <brain@chatspike.net>
8 * <Craig@chatspike.net>
10 * Written by Craig Edwards, Craig McLure, and others.
11 * This program is free but copyrighted software; see
12 * the file COPYING for details.
14 * ---------------------------------------------------
18 #include "inspircd_io.h"
19 #include "inspircd_util.h"
20 #include "inspircd_config.h"
22 #include <sys/errno.h>
23 #include <sys/ioctl.h>
24 #include <sys/utsname.h>
28 #include <ext/hash_map>
36 #include "connection.h"
47 #include "inspstring.h"
48 #include "helperfuncs.h"
51 #define nspace __gnu_cxx
59 extern std::vector<Module*> modules;
60 extern std::vector<ircd_module*> factory;
63 extern char ServerName[MAXBUF];
64 extern char Network[MAXBUF];
65 extern char ServerDesc[MAXBUF];
66 extern char AdminName[MAXBUF];
67 extern char AdminEmail[MAXBUF];
68 extern char AdminNick[MAXBUF];
69 extern char diepass[MAXBUF];
70 extern char restartpass[MAXBUF];
71 extern char motd[MAXBUF];
72 extern char rules[MAXBUF];
73 extern char list[MAXBUF];
74 extern char PrefixQuit[MAXBUF];
75 extern char DieValue[MAXBUF];
78 extern int WHOWAS_STALE;
79 extern int WHOWAS_MAX;
81 extern time_t startup_time;
82 extern int NetBufferSize;
84 extern time_t nb_start;
86 extern std::vector<int> fd_reap;
87 extern std::vector<std::string> module_names;
89 extern int boundPortCount;
91 extern int SERVERportCount;
92 extern int ports[MAXSOCKS];
93 extern int defaultRoute;
95 extern std::vector<long> auth_cookies;
96 extern std::stringstream config_f;
98 extern serverrec* me[32];
100 extern FILE *log_file;
106 std::vector<ModeParameter> custom_mode_params;
111 strcpy(custom_modes,"");
115 created = topicset = limit = 0;
117 internal_userlist.clear();
120 void chanrec::SetCustomMode(char mode,bool mode_on)
126 if (!strchr(this->custom_modes,mode))
128 strlcat(custom_modes,m,MAXMODES);
130 log(DEBUG,"Custom mode %c set",mode);
134 std::string a = this->custom_modes;
135 int pos = a.find(mode);
137 strncpy(this->custom_modes,a.c_str(),MAXMODES);
139 log(DEBUG,"Custom mode %c removed: modelist='%s'",mode,this->custom_modes);
140 this->SetCustomModeParam(mode,"",false);
145 void chanrec::SetCustomModeParam(char mode,char* parameter,bool mode_on)
148 log(DEBUG,"SetCustomModeParam called");
151 strlcpy(M.channel,this->name,CHANMAX);
152 strlcpy(M.parameter,parameter,MAXBUF);
155 log(DEBUG,"Custom mode parameter %c %s added",mode,parameter);
156 custom_mode_params.push_back(M);
160 if (custom_mode_params.size())
162 for (vector<ModeParameter>::iterator i = custom_mode_params.begin(); i < custom_mode_params.end(); i++)
164 if ((i->mode == mode) && (!strcasecmp(this->name,i->channel)))
166 log(DEBUG,"Custom mode parameter %c %s removed",mode,parameter);
167 custom_mode_params.erase(i);
172 log(DEBUG,"*** BUG *** Attempt to remove non-existent mode parameter!");
176 bool chanrec::IsCustomModeSet(char mode)
178 log(DEBUG,"Checking ISCustomModeSet: %c %s",mode,this->custom_modes);
179 return (strchr(this->custom_modes,mode) != 0);
182 std::string chanrec::GetModeParameter(char mode)
184 if (custom_mode_params.size())
186 for (vector<ModeParameter>::iterator i = custom_mode_params.begin(); i < custom_mode_params.end(); i++)
188 if ((i->mode == mode) && (!strcasecmp(this->name,i->channel)))
197 long chanrec::GetUserCounter()
199 return (this->internal_userlist.size());
202 void chanrec::AddUser(char* castuser)
204 internal_userlist.push_back(castuser);
205 log(DEBUG,"Added casted user to channel's internal list");
208 void chanrec::DelUser(char* castuser)
210 for (std::vector<char*>::iterator a = internal_userlist.begin(); a < internal_userlist.end(); a++)
214 log(DEBUG,"Removed casted user from channel's internal list");
215 internal_userlist.erase(a);
219 log(DEBUG,"BUG BUG BUG! Attempt to remove an uncasted user from the internal list of %s!",name);
222 std::vector<char*> *chanrec::GetUsers()
224 return &internal_userlist;