- std::vector<User*> purge;
- std::vector<User*>::iterator iter;
- purge.clear();
- for (iter=ServerInstance->Users->local_users.begin();iter!=ServerInstance->Users->local_users.end();++iter)
- {
- if (!ServerInstance->IsNick((*iter)->nick.c_str(), ServerInstance->Config->Limits.NickMax))
- purge.push_back(*iter);
- }
- for (iter=purge.begin();iter!=purge.end();++iter)
- {
- ServerInstance->Users->QuitUser((*iter), message);
- }
- }
- virtual ~ModuleNationalChars()
+ Implementation eventlist[] = { I_OnRehash, I_On005Numeric };
+ ServerInstance->Modules->Attach(eventlist, this, 2);
+ OnRehash(NULL, "");
+ }
+
+ virtual void On005Numeric(std::string &output)
+ {
+ std::string tmp(casemapping);
+ tmp.insert(0, "CASEMAPPING=");
+ SearchAndReplace(output, std::string("CASEMAPPING=rfc1459"), tmp);
+ }
+
+ virtual void OnRehash(User* user, const std::string ¶meter)
+ {
+ ConfigReader* conf = new ConfigReader(ServerInstance);
+ charset = conf->ReadValue("nationalchars", "file", 0);
+ casemapping = conf->ReadValue("nationalchars", "casemapping", charset, 0, false);
+ charset.insert(0, "../locales/");
+ unsigned char * tables[8] = { m_additional, m_additionalMB, m_additionalUp, m_lower, m_upper, m_additionalUtf8, m_additionalUtf8range, m_additionalUtf8interval };
+ loadtables(charset, tables, 8, 5);
+ forcequit = conf->ReadFlag("nationalchars", "forcequit", 0);
+ CheckForceQuit("National character set changed");
+ delete conf;
+ }
+
+ void CheckForceQuit(const char * message)
+ {
+ if (!forcequit)
+ return;
+
+ for (std::vector<User*>::iterator iter = ServerInstance->Users->local_users.begin(); iter != ServerInstance->Users->local_users.end(); ++iter)