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 char bannerBuffer[MAXBUF];
78 extern int boundPortCount;
80 extern int UDPportCount;
81 extern int ports[MAXSOCKS];
82 extern int defaultRoute;
84 extern std::vector<long> auth_cookies;
85 extern std::stringstream config_f;
87 extern serverrec* me[32];
89 extern FILE *log_file;
94 std::vector<ModeParameter> custom_mode_params;
99 strcpy(custom_modes,"");
103 created = topicset = limit = 0;
104 topiclock = noexternal = inviteonly = moderated = secret = c_private = false;
107 void chanrec::SetCustomMode(char mode,bool mode_on)
113 if (!strchr(this->custom_modes,mode))
115 strncat(custom_modes,m,MAXMODES);
117 log(DEBUG,"Custom mode %c set",mode);
122 for (int q = 0; q < strlen(custom_modes); q++) {
123 if (custom_modes[q] != mode) {
124 temp[count++] = mode;
128 strncpy(custom_modes,temp,MAXMODES);
129 log(DEBUG,"Custom mode %c removed",mode);
130 this->SetCustomModeParam(mode,"",false);
135 void chanrec::SetCustomModeParam(char mode,char* parameter,bool mode_on)
138 log(DEBUG,"SetCustomModeParam called");
141 strcpy(M.channel,this->name);
142 strcpy(M.parameter,parameter);
145 log(DEBUG,"Custom mode parameter %c %s added",mode,parameter);
146 custom_mode_params.push_back(M);
150 if (custom_mode_params.size())
152 for (vector<ModeParameter>::iterator i = custom_mode_params.begin(); i < custom_mode_params.end(); i++)
154 if ((i->mode == mode) && (!strcasecmp(this->name,i->channel)))
156 log(DEBUG,"Custom mode parameter %c %s removed",mode,parameter);
157 custom_mode_params.erase(i);
162 log(DEBUG,"*** BUG *** Attempt to remove non-existent mode parameter!");
166 bool chanrec::IsCustomModeSet(char mode)
168 log(DEBUG,"Checking ISCustomModeSet: %c %s",mode,this->custom_modes);
169 return (strchr(this->custom_modes,mode) != 0);
172 std::string chanrec::GetModeParameter(char mode)
174 if (custom_mode_params.size())
176 for (vector<ModeParameter>::iterator i = custom_mode_params.begin(); i < custom_mode_params.end(); i++)
178 if ((i->mode == mode) && (!strcasecmp(this->name,i->channel)))
180 return std::string(i->parameter);
184 return std::string("");