void Client::updateCounts(bool aRemove) { // We always remove the count and then add the correct one if requested... if(countType == COUNT_NORMAL) { Thread::safeDec(counts.normal); } else if(countType == COUNT_REGISTERED) { Thread::safeDec(counts.registered); } else if(countType == COUNT_OP) { Thread::safeDec(counts.op); } countType = COUNT_UNCOUNTED; if(!aRemove) { if(getMyIdentity().isOp()) { Thread::safeInc(counts.op); countType = COUNT_OP; } else if(getMyIdentity().isRegistered()) { Thread::safeInc(counts.registered); countType = COUNT_REGISTERED; } else { Thread::safeInc(counts.normal); countType = COUNT_NORMAL; } } }
bool Client::updateCounts(bool aRemove) { // We always remove the count and then add the correct one if requested... if(countType != COUNT_UNCOUNTED) { counts[countType]--; countType = COUNT_UNCOUNTED; } if(!aRemove) { if(getMyIdentity().isOp()) { countType = COUNT_OP; } else if(getMyIdentity().isRegistered()) { countType = COUNT_REGISTERED; } else { //disconnect before the hubcount is updated. if(SETTING(DISALLOW_CONNECTION_TO_PASSED_HUBS)) { fire(ClientListener::AddLine(), this, STRING(HUB_NOT_PROTECTED)); disconnect(true); setAutoReconnect(false); return false; } countType = COUNT_NORMAL; } counts[countType]++; } return true; }
string Client::getLocalIp() const { // [!] IRainman fix: // [!] If possible, always return the hub that IP, which he identified with us when you connect. // [!] This saves the user from a variety of configuration problems. const string& myUserIp = getMyIdentity().getIpAsString(); // [!] opt, and fix done: [4] https://www.box.net/shared/c497f50da28f3dfcc60a if (!myUserIp.empty()) { return myUserIp; // [!] Best case - the server detected it. } // Favorite hub Ip if (!getFavIp().empty()) { return Socket::resolve(getFavIp()); } const auto& settingIp = SETTING(EXTERNAL_IP); if (!BOOLSETTING(NO_IP_OVERRIDE) && !settingIp.empty() && SETTING(INCOMING_CONNECTIONS) != SettingsManager::INCOMING_DIRECT) // !SMT!-F { return Socket::resolve(settingIp); } { #ifdef FLYLINKDC_USE_CS_CLIENT_SOCKET FastLock lock(csSock); // [+] brain-ripper #endif if (m_client_sock) { return m_client_sock->getLocalIp(); } } return Util::getLocalOrBindIp(false); // [~] IRainman fix. }
string Client::getLocalIp() const { // Best case - the server detected it if((!BOOLSETTING(NO_IP_OVERRIDE) || SETTING(EXTERNAL_IP).empty()) && !getMyIdentity().getIp().empty()) { return getMyIdentity().getIp(); } if(!SETTING(EXTERNAL_IP).empty()) { return Socket::resolve(SETTING(EXTERNAL_IP)); } if(localIp.empty()) { return Util::getLocalIp(); } return localIp; }
void Client::onChatMessage(const ChatMessagePtr& aMessage) noexcept { if (MessageManager::getInstance()->isIgnoredOrFiltered(aMessage, this, false)) return; if (get(HubSettings::LogMainChat)) { ParamMap params; params["message"] = aMessage->format(); getHubIdentity().getParams(params, "hub", false); params["hubURL"] = getHubUrl(); getMyIdentity().getParams(params, "my", true); LOG(LogManager::CHAT, params); } cache.addMessage(aMessage); fire(ClientListener::ChatMessage(), this, aMessage); }
void Client::statusMessage(const string& aMessage, LogMessage::Severity aSeverity, int aFlag) noexcept { auto message = make_shared<LogMessage>(aMessage, aSeverity); if (aFlag != ClientListener::FLAG_IS_SPAM) { cache.addMessage(message); if (SETTING(LOG_STATUS_MESSAGES)) { ParamMap params; getHubIdentity().getParams(params, "hub", false); params["hubURL"] = getHubUrl(); getMyIdentity().getParams(params, "my", true); params["message"] = aMessage; LOG(LogManager::STATUS, params); } } fire(ClientListener::StatusMessage(), this, message, aFlag); }