2 #include "inspircd_io.h"
3 #include "inspircd_util.h"
4 #include "inspircd_config.h"
9 #include <sys/utsname.h>
14 #include <ext/hash_map>
26 #include "connection.h"
39 #define nspace __gnu_cxx
47 extern vector<Module*> modules;
48 extern vector<ircd_module*> factory;
51 extern char ServerName[MAXBUF];
52 extern char Network[MAXBUF];
53 extern char ServerDesc[MAXBUF];
54 extern char AdminName[MAXBUF];
55 extern char AdminEmail[MAXBUF];
56 extern char AdminNick[MAXBUF];
57 extern char diepass[MAXBUF];
58 extern char restartpass[MAXBUF];
59 extern char motd[MAXBUF];
60 extern char rules[MAXBUF];
61 extern char list[MAXBUF];
62 extern char PrefixQuit[MAXBUF];
63 extern char DieValue[MAXBUF];
66 extern int WHOWAS_STALE;
67 extern int WHOWAS_MAX;
69 extern time_t startup_time;
70 extern int NetBufferSize;
72 extern time_t nb_start;
74 extern std::vector<int> fd_reap;
75 extern std::vector<std::string> module_names;
77 extern int boundPortCount;
79 extern int UDPportCount;
80 extern int ports[MAXSOCKS];
81 extern int defaultRoute;
83 extern std::vector<long> auth_cookies;
84 extern std::stringstream config_f;
86 extern serverrec* me[32];
88 extern FILE *log_file;
93 std::vector<ModeParameter> custom_mode_params;
98 strcpy(custom_modes,"");
102 created = topicset = limit = 0;
103 topiclock = noexternal = inviteonly = moderated = secret = c_private = false;
106 void chanrec::SetCustomMode(char mode,bool mode_on)
112 if (!strchr(this->custom_modes,mode))
114 strncat(custom_modes,m,MAXMODES);
116 log(DEBUG,"Custom mode %c set",mode);
121 for (int q = 0; q < strlen(custom_modes); q++) {
122 if (custom_modes[q] != mode) {
123 temp[count++] = mode;
127 strncpy(custom_modes,temp,MAXMODES);
128 log(DEBUG,"Custom mode %c removed",mode);
129 this->SetCustomModeParam(mode,"",false);
134 void chanrec::SetCustomModeParam(char mode,char* parameter,bool mode_on)
137 log(DEBUG,"SetCustomModeParam called");
140 strcpy(M.channel,this->name);
141 strcpy(M.parameter,parameter);
144 log(DEBUG,"Custom mode parameter %c %s added",mode,parameter);
145 custom_mode_params.push_back(M);
149 if (custom_mode_params.size())
151 for (vector<ModeParameter>::iterator i = custom_mode_params.begin(); i < custom_mode_params.end(); i++)
153 if ((i->mode == mode) && (!strcasecmp(this->name,i->channel)))
155 log(DEBUG,"Custom mode parameter %c %s removed",mode,parameter);
156 custom_mode_params.erase(i);
161 log(DEBUG,"*** BUG *** Attempt to remove non-existent mode parameter!");
165 bool chanrec::IsCustomModeSet(char mode)
167 log(DEBUG,"Checking ISCustomModeSet: %c %s",mode,this->custom_modes);
168 return (strchr(this->custom_modes,mode) != 0);
171 std::string chanrec::GetModeParameter(char mode)
173 if (custom_mode_params.size())
175 for (vector<ModeParameter>::iterator i = custom_mode_params.begin(); i < custom_mode_params.end(); i++)
177 if ((i->mode == mode) && (!strcasecmp(this->name,i->channel)))
179 return std::string(i->parameter);
183 return std::string("");