void dazeus::Network::connectToNetwork( bool reconnect ) { if( !reconnect && activeServer_ ) return; printf("Connecting to network: %s\n", dazeus::Network::toString(this).c_str()); // Check if there *is* a server to use if( servers().size() == 0 ) { printf("Trying to connect to network '%s', but there are no servers to connect to!\n", config_->displayName.c_str()); return; } // Find the best server to use // First, sort the list by priority and earlier failures std::vector<ServerConfigPtr> sortedServers = servers(); std::sort( sortedServers.begin(), sortedServers.end(), ServerSorter(this) ); // Then, take the first one and create a Server around it ServerConfigPtr best = sortedServers[0]; // And set it as the active server, and connect. connectToServer( best, true ); }
void Layer3::deregisterServer (BaseServer * s) { unsigned i; for (i = 0; i < servers (); i++) if (servers[i] == s) { servers[i] = servers[servers () - 1]; servers.resize (servers () - 1); TRACEPRINTF (t, 3, this, "deregisterServer %08X = 1", s); return; } TRACEPRINTF (t, 3, this, "deregisterServer %08X = 0", s); }
int Locator_Repository::remove_activator (const ACE_CString& name) { int err = sync_load (); if (err != 0) { return err; } int ret = activators().unbind (lcase(name)); if (ret != 0) { return ret; } Locator_Repository::SIMap::ENTRY* sientry = 0; Locator_Repository::SIMap::ITERATOR siit (servers ()); for (; siit.next (sientry); siit.advance() ) { Server_Info *info = sientry->int_id_->active_info (); if (info->death_notify && info->activator == name) { info->death_notify = false; } } return persistent_remove(name, true); }
int Locator_Repository::link_peers (Server_Info_Ptr base, const CORBA::StringSeq p) { sync_load (); CORBA::ULong len = base->peers.length(); base->peers.length (len + p.length()); for (CORBA::ULong i = 0; i < p.length(); i++) { base->peers[len + i] = p[i]; Server_Info *si; ACE_CString peer(p[i]); ACE_NEW_RETURN (si, Server_Info (base->server_id, peer, base->is_jacorb, base), -1); Server_Info_Ptr sip(si); servers ().bind (si->key_name_, sip); this->persistent_update (sip, true); } this->persistent_update (base, true); return 0; }
nsresult NrIceCtx::SetStunServers(const std::vector<NrIceStunServer>& stun_servers) { if (stun_servers.empty()) return NS_OK; ScopedDeleteArray<nr_ice_stun_server> servers( new nr_ice_stun_server[stun_servers.size()]); int r; for (size_t i=0; i < stun_servers.size(); ++i) { r = nr_praddr_to_transport_addr(&stun_servers[i].addr(), &servers[i].addr, 0); if (r) { MOZ_MTLOG(PR_LOG_ERROR, "Couldn't set STUN server for '" << name_ << "'"); return NS_ERROR_FAILURE; } } r = nr_ice_ctx_set_stun_servers(ctx_, servers, stun_servers.size()); if (r) { MOZ_MTLOG(PR_LOG_ERROR, "Couldn't set STUN server for '" << name_ << "'"); return NS_ERROR_FAILURE; } return NS_OK; }
// TODO([email protected]): This is just SetStunServers with s/Stun/Turn // Could we do a template or something? nsresult NrIceCtx::SetTurnServers(const std::vector<NrIceTurnServer>& turn_servers) { if (turn_servers.empty()) return NS_OK; ScopedDeleteArray<nr_ice_turn_server> servers( new nr_ice_turn_server[turn_servers.size()]); for (size_t i=0; i < turn_servers.size(); ++i) { nsresult rv = turn_servers[i].ToNicerTurnStruct(&servers[i]); if (NS_FAILED(rv)) { MOZ_MTLOG(ML_ERROR, "Couldn't set TURN server for '" << name_ << "'"); return NS_ERROR_FAILURE; } } int r = nr_ice_ctx_set_turn_servers(ctx_, servers, turn_servers.size()); if (r) { MOZ_MTLOG(ML_ERROR, "Couldn't set TURN server for '" << name_ << "'"); return NS_ERROR_FAILURE; } // TODO([email protected]): This leaks the username/password. Need to free that. return NS_OK; }
Server_Info_Ptr Locator_Repository::get_active_server (const ACE_CString& name, int pid) { sync_load (); ACE_CString key; Server_Info_Ptr si; if (name.length() == 0) { return si; } Server_Info::fqname_to_key (name.c_str(), key); servers ().find (key, si); if (si.null()) { if (this->opts_.debug() > 5) { ORBSVCS_DEBUG ((LM_DEBUG, ACE_TEXT ("(%P|%t) get_active_server could not find %C\n"), name.c_str())); } si = find_by_poa (key); if (si.null()) { if (name.find ("JACORB:") == ACE_CString::npos) { ACE_CString jo_key ("JACORB:"); ACE_CString::size_type pos = name.find (':'); if (pos == ACE_CString::npos) { jo_key += name; } else { jo_key += name.substring (0, pos); jo_key += '/'; jo_key += name.substring (pos+1); } return this->get_active_server (jo_key, pid); } else { return si; } } } if (pid != 0 && si->pid != 0 && si->pid != pid) { if (this->opts_.debug() > 5) { ORBSVCS_DEBUG ((LM_DEBUG, ACE_TEXT ("(%P|%t) get_active_server could not") ACE_TEXT (" find %C, %d != %d\n"), name.c_str(), pid, si->pid)); } si.reset (); } return si; }
void PollThread::parse(QByteArray json) { QVariantMap dataset = JSON(json.data()).getSerial().toMap(); emit count(dataset.value("count").toInt()); emit queuetimes(dataset.value("spyeeQueueTime").toDouble(), dataset.value("spyQueueTime").toDouble()); emit timestamp(dataset.value("timestamp").toDouble()); emit servers(dataset.value("servers").toStringList()); }
Server_Info_Ptr Locator_Repository::get_info (const ACE_CString& name) { sync_load (); Server_Info_Ptr si; servers ().find (name, si); return si; }
Status loginServerUploadLogs(Account *account) { const auto url = ABC_SERVER_ROOT "/v1/account/debug"; ServerRequestJson json; if (account) { json.setup(account->login); // Failure is fine JsonArray jsonArray; auto ids = account->wallets.list(); for (const auto &id: ids) { std::shared_ptr<Wallet> wallet = cacheWalletSoft(id); if (wallet) { const auto name = wallet->name(); logInfo("Wallet '" + name + "' " + id); const auto addresses = wallet->addresses.list(); for (const auto &address: addresses) logInfo(address); } DataChunk watchData; if (fileLoad(watchData, WalletPaths(id).cachePath())) { jsonArray.append( json_string(base64Encode(watchData).c_str())); } } json.set("watchers", jsonArray); // Failure is fine AutoFree<tABC_AccountSettings, accountSettingsFree> settings; settings.get() = accountSettingsLoad(*account); std::string servers(settings->szOverrideBitcoinServerList); std::string strOverride = (settings->bOverrideBitcoinServers ? "true" : "false"); logInfo("bOverrideBitcoinServers:" + strOverride); logInfo("szOverrideBitcoinServerList:" + servers); } DataChunk logData = debugLogLoad(); json.set("log", base64Encode(logData)); // Failure is fine HttpReply reply; ABC_CHECK(AirbitzRequest().post(reply, url, json.encode())); return Status(); }
int main () { // Prepare our context and sockets zmq::context_t context (1); zmq::socket_t servers (context, ZMQ_DEALER); servers.bind ("tcp://*:5555"); zmq::socket_t clients (context, ZMQ_ROUTER); clients.bind ("tcp://*:5556"); zmq_device (ZMQ_FORWARDER, (void *)clients, (void *)servers); return 0; }
Layer3::~Layer3 () { TRACEPRINTF (t, 3, this, "Close"); Stop (); while (servers ()) delete servers[0]; while (layer2 ()) delete layer2[0]; // the next loops should do exactly nothing while (vbusmonitor ()) deregisterVBusmonitor (vbusmonitor[0].cb); for (unsigned int i = 0; i < tracers (); i++) delete tracers[i]; }
Server_Info_Ptr Locator_Repository::find_by_poa (const ACE_CString & name) { Locator_Repository::SIMap::ENTRY* sientry = 0; Locator_Repository::SIMap::ITERATOR siit (servers ()); for (; siit.next (sientry); siit.advance() ) { Server_Info_Ptr& info = sientry->int_id_; if (info->poa_name == name) { return info; } } return Server_Info_Ptr(); }
int Locator_Repository::add_server_i (Server_Info *si) { Server_Info_Ptr info(si); int err = sync_load (); if (err != 0) { return err; } err = servers ().bind (si->key_name_, info); if (err != 0) { return err; } this->persistent_update(info, true); return 0; }
int DistributorLauncher::CreateDistributor(Master **ppNewMaster, int nNumSlaves) { // if (Options::Instance().Option("slave-count", nNumSlaves)) // return m_fb.Error(E_DISTRIBUTOR_CREATESLAVES); std::vector<std::string> servers(nNumSlaves); for (int nSlave = 0; nSlave < nNumSlaves; nSlave++) { std::stringstream ssServerID; ssServerID << "server-" << nSlave; servers[nSlave] = ssServerID.str(); } std::string sSlave, sSlaveArgs; if (GetChild(m_fb, "slave", sSlave, sSlaveArgs)) return m_fb.Error(E_DISTRIBUTOR_CREATESLAVES) << ": Failed to get slave program and/or arguments from option(s)."; return CreateDistributor(servers, sSlave, sSlaveArgs, ppNewMaster); }
/* our server */ void StartServer(std::string root) { // This section will need to be done via config.. //loadvserver("127.0.0.1", "./libwebmem.so"); //loadvserver("127.0.0.1", "./libwebqueue.so"); serverroot = root; loadConfig(root); loadMimeTypes(); std::cout << "Starting nmbls" << std::endl; boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::tcp::v4(), HTTPLISTENPORT); try { http_server server(io_service, endpoint); try { // If we can't load certificate, then we will just let know and not start then // HTTPS service. https_server servers(io_service, HTTPSLISTENPORT); } catch(std::exception& e) { std::cerr << e.what() << std::endl; } mainthreadid = boost::this_thread::get_id(); io_service.run(); } catch (std::exception& e) { std::cerr << e.what() << std::endl; } // Clean up std::cout << "Cleaning up" << std::endl; return; }
nsresult NrIceCtx::SetStunServers(const std::vector<NrIceStunServer>& stun_servers) { if (stun_servers.empty()) return NS_OK; ScopedDeleteArray<nr_ice_stun_server> servers( new nr_ice_stun_server[stun_servers.size()]); for (size_t i=0; i < stun_servers.size(); ++i) { nsresult rv = stun_servers[i].ToNicerStruct(&servers[i]); if (NS_FAILED(rv)) { MOZ_MTLOG(PR_LOG_ERROR, "Couldn't set STUN server for '" << name_ << "'"); return NS_ERROR_FAILURE; } } int r = nr_ice_ctx_set_stun_servers(ctx_, servers, stun_servers.size()); if (r) { MOZ_MTLOG(PR_LOG_ERROR, "Couldn't set STUN server for '" << name_ << "'"); return NS_ERROR_FAILURE; } return NS_OK; }
bool CServerSocket::ProcessPacket(char* packet, uint32 size, uint8 opcode) { try { switch(opcode) { case OP_SERVERMESSAGE: { if (thePrefs.GetDebugServerTCPLevel() > 0) Debug(_T("ServerMsg - OP_ServerMessage\n")); CServer* pServer = cur_server ? theApp.serverlist->GetServerByAddress(cur_server->GetAddress(),cur_server->GetPort()) : NULL; CSafeMemFile data((const BYTE*)packet, size); CString strMessages(data.ReadString(pServer ? pServer->GetUnicodeSupport() : false)); if (thePrefs.GetDebugServerTCPLevel() > 0) { UINT uAddData = data.GetLength() - data.GetPosition(); if (uAddData > 0) { Debug(_T("*** NOTE: OP_ServerMessage: ***AddData: %u bytes\n"), uAddData); DebugHexDump((uint8*)packet + data.GetPosition(), uAddData); } } // 16.40 servers do not send separate OP_SERVERMESSAGE packets for each line; // instead of this they are sending all text lines with one OP_SERVERMESSAGE packet. int iPos = 0; CString message = strMessages.Tokenize(_T("\r\n"), iPos); while (!message.IsEmpty()) { bool bOutputMessage = true; if (_tcsnicmp(message, _T("server version"), 14) == 0) { CString strVer = message.Mid(14); strVer.Trim(); strVer = strVer.Left(64); // truncate string to avoid misuse by servers in showing ads if (pServer) { pServer->SetVersion(strVer); theApp.emuledlg->serverwnd->serverlistctrl.RefreshServer(pServer); theApp.emuledlg->serverwnd->UpdateMyInfo(); } if (thePrefs.GetDebugServerTCPLevel() > 0) Debug(_T("%s\n"), message); } else if (_tcsncmp(message, _T("ERROR"), 5) == 0) { LogError(LOG_STATUSBAR, _T("%s %s (%s:%u) - %s"), GetResString(IDS_ERROR), pServer ? pServer->GetListName() : GetResString(IDS_PW_SERVER), cur_server ? cur_server->GetAddress() : _T(""), cur_server ? cur_server->GetPort() : 0, message.Mid(5).Trim(_T(" :"))); bOutputMessage = false; } else if (_tcsncmp(message, _T("WARNING"), 7) == 0) { LogWarning(LOG_STATUSBAR, _T("%s %s (%s:%u) - %s"), GetResString(IDS_WARNING), pServer ? pServer->GetListName() : GetResString(IDS_PW_SERVER), cur_server ? cur_server->GetAddress() : _T(""), cur_server ? cur_server->GetPort() : 0, message.Mid(7).Trim(_T(" :"))); bOutputMessage = false; } if (message.Find(_T("[emDynIP: ")) != -1 && message.Find(_T("]")) != -1 && message.Find(_T("[emDynIP: ")) < message.Find(_T("]"))) { CString dynip = message.Mid(message.Find(_T("[emDynIP: ")) + 10, message.Find(_T("]")) - (message.Find(_T("[emDynIP: ")) + 10)); dynip.Trim(_T(" ")); if (dynip.GetLength() && dynip.GetLength() < 51) { if (pServer) { pServer->SetDynIP(dynip); if (cur_server) cur_server->SetDynIP(dynip); theApp.emuledlg->serverwnd->serverlistctrl.RefreshServer(pServer); theApp.emuledlg->serverwnd->UpdateMyInfo(); } } } if (bOutputMessage) theApp.emuledlg->AddServerMessageLine(message); message = strMessages.Tokenize(_T("\r\n"), iPos); } break; } case OP_IDCHANGE: { if (thePrefs.GetDebugServerTCPLevel() > 0) Debug(_T("ServerMsg - OP_IDChange\n")); if (size < sizeof(LoginAnswer_Struct)) { throw GetResString(IDS_ERR_BADSERVERREPLY); } LoginAnswer_Struct* la = (LoginAnswer_Struct*)packet; // save TCP flags in 'cur_server' ASSERT( cur_server ); if (cur_server) { if (size >= sizeof(LoginAnswer_Struct)+4) { DWORD dwFlags = *((uint32*)(packet + sizeof(LoginAnswer_Struct))); if (thePrefs.GetDebugServerTCPLevel() > 0) { CString strInfo; strInfo.AppendFormat(_T(" TCP Flags=0x%08x"), dwFlags); const DWORD dwKnownBits = SRV_TCPFLG_COMPRESSION | SRV_TCPFLG_NEWTAGS | SRV_TCPFLG_UNICODE; if (dwFlags & ~dwKnownBits) strInfo.AppendFormat(_T(" ***UnkBits=0x%08x"), dwFlags & ~dwKnownBits); if (dwFlags & SRV_TCPFLG_COMPRESSION) strInfo.AppendFormat(_T(" Compression=1")); if (dwFlags & SRV_TCPFLG_NEWTAGS) strInfo.AppendFormat(_T(" NewTags=1")); if (dwFlags & SRV_TCPFLG_UNICODE) strInfo.AppendFormat(_T(" Unicode=1")); Debug(_T("%s\n"), strInfo); } cur_server->SetTCPFlags(dwFlags); } else cur_server->SetTCPFlags(0); // copy TCP flags into the server in the server list CServer* pServer = theApp.serverlist->GetServerByAddress(cur_server->GetAddress(), cur_server->GetPort()); if (pServer) pServer->SetTCPFlags(cur_server->GetTCPFlags()); } if (la->clientid == 0) { uint8 state = thePrefs.GetSmartIdState(); if ( state > 0 ) { state++; if( state > 3 ) thePrefs.SetSmartIdState(0); else thePrefs.SetSmartIdState(state); } break; } if( thePrefs.GetSmartIdCheck() ) { if (!IsLowID(la->clientid)) thePrefs.SetSmartIdState(1); else { uint8 state = thePrefs.GetSmartIdState(); if ( state > 0 ) { state++; if( state > 3 ) thePrefs.SetSmartIdState(0); else thePrefs.SetSmartIdState(state); break; } } } //==>Lowid retry by SlugFiller [cyrex2001] #ifdef LOWID if (thePrefs.GetLowIdRetried()) { if (la->clientid < 16777216 ) { SetConnectionState(CS_ERROR); AddLogLine(true,GetResString(IDS_LOWIDRETRYING),thePrefs.GetLowIdRetried()); thePrefs.SetLowIdRetried(); break; } } #endif //Lowid retry //<==Lowid retry [cyrex2001] // we need to know our client's HighID when sending our shared files (done indirectly on SetConnectionState) serverconnect->clientid = la->clientid; if (connectionstate != CS_CONNECTED) { SetConnectionState(CS_CONNECTED); theApp.OnlineSig(); // Added By Bouc7 } serverconnect->SetClientID(la->clientid); AddLogLine(false, GetResString(IDS_NEWCLIENTID), la->clientid); //==>Reask sourcen after ip change [cyrex2001] #ifdef RSAIC_MAELLA theApp.CheckIDChange(); #endif //Reask sourcen after ip change //<==Reask sourcen after ip change [cyrex2001] theApp.downloadqueue->ResetLocalServerRequests(); break; } case OP_SEARCHRESULT: { if (thePrefs.GetDebugServerTCPLevel() > 0) Debug(_T("ServerMsg - OP_SearchResult\n")); CServer* cur_srv = (serverconnect) ? serverconnect->GetCurrentServer() : NULL; CServer* pServer = cur_srv ? theApp.serverlist->GetServerByAddress(cur_srv->GetAddress(), cur_srv->GetPort()) : NULL; bool bMoreResultsAvailable; uint16 uSearchResults = theApp.searchlist->ProcessSearchanswer(packet, size, true/*pServer ? pServer->GetUnicodeSupport() : false*/, cur_srv ? cur_srv->GetIP() : 0, cur_srv ? cur_srv->GetPort() : 0, &bMoreResultsAvailable); theApp.emuledlg->searchwnd->LocalSearchEnd(uSearchResults, bMoreResultsAvailable); break; } case OP_FOUNDSOURCES: { if (thePrefs.GetDebugServerTCPLevel() > 0) Debug(_T("ServerMsg - OP_FoundSources; Sources=%u %s\n"), (UINT)(uchar)packet[16], DbgGetFileInfo((uchar*)packet)); ASSERT( cur_server ); if (cur_server) { CSafeMemFile sources((BYTE*)packet,size); uchar fileid[16]; sources.ReadHash16(fileid); if (CPartFile* file = theApp.downloadqueue->GetFileByID(fileid)) file->AddSources(&sources,cur_server->GetIP(), cur_server->GetPort()); } break; } case OP_SERVERSTATUS: { if (thePrefs.GetDebugServerTCPLevel() > 0) Debug(_T("ServerMsg - OP_ServerStatus\n")); // FIXME some statuspackets have a different size -> why? structur? if (size < 8) break;//throw "Invalid status packet"; uint32 cur_user = PeekUInt32(packet); uint32 cur_files = PeekUInt32(packet+4); CServer* update = cur_server ? theApp.serverlist->GetServerByAddress(cur_server->GetAddress(), cur_server->GetPort()) : NULL; if (update) { update->SetUserCount(cur_user); update->SetFileCount(cur_files); theApp.emuledlg->ShowUserCount(); theApp.emuledlg->serverwnd->serverlistctrl.RefreshServer( update ); theApp.emuledlg->serverwnd->UpdateMyInfo(); } if (thePrefs.GetDebugServerTCPLevel() > 0) { if (size > 8) { Debug(_T("*** NOTE: OP_ServerStatus: ***AddData: %u bytes\n"), size - 8); DebugHexDump((uint8*)packet + 8, size - 8); } } break; } case OP_SERVERIDENT: { // OP_SERVERIDENT - this is sent by the server only if we send a OP_GETSERVERLIST if (thePrefs.GetDebugServerTCPLevel() > 0) Debug(_T("ServerMsg - OP_ServerIdent\n")); if (size<16+4+2+4) { if (thePrefs.GetVerbose()) DebugLogError(_T("%s"), GetResString(IDS_ERR_KNOWNSERVERINFOREC)); break;// throw "Invalid server info received"; } CServer* pServer = cur_server ? theApp.serverlist->GetServerByAddress(cur_server->GetAddress(),cur_server->GetPort()) : NULL; CString strInfo; CSafeMemFile data((BYTE*)packet, size); uint8 aucHash[16]; data.ReadHash16(aucHash); if (thePrefs.GetDebugServerTCPLevel() > 0) strInfo.AppendFormat(_T("Hash=%s (%s)"), md4str(aucHash), DbgGetHashTypeString(aucHash)); uint32 nServerIP = data.ReadUInt32(); uint16 nServerPort = data.ReadUInt16(); if (thePrefs.GetDebugServerTCPLevel() > 0) strInfo.AppendFormat(_T(" IP=%s:%u"), ipstr(nServerIP), nServerPort); UINT nTags = data.ReadUInt32(); if (thePrefs.GetDebugServerTCPLevel() > 0) strInfo.AppendFormat(_T(" Tags=%u"), nTags); CString strName; CString strDescription; for (UINT i = 0; i < nTags; i++) { CTag tag(&data, pServer ? pServer->GetUnicodeSupport() : false); if (tag.GetNameID() == ST_SERVERNAME) { if (tag.IsStr()) { strName = tag.GetStr(); if (thePrefs.GetDebugServerTCPLevel() > 0) strInfo.AppendFormat(_T(" Name=%s"), strName); } } else if (tag.GetNameID() == ST_DESCRIPTION) { if (tag.IsStr()) { strDescription = tag.GetStr(); if (thePrefs.GetDebugServerTCPLevel() > 0) strInfo.AppendFormat(_T(" Desc=%s"), strDescription); } } else if (thePrefs.GetDebugServerTCPLevel() > 0) strInfo.AppendFormat(_T(" ***UnkTag: 0x%02x=%u"), tag.GetNameID(), tag.GetInt()); } if (thePrefs.GetDebugServerTCPLevel() > 0) { strInfo += _T('\n'); Debug(_T("%s"), strInfo); UINT uAddData = data.GetLength() - data.GetPosition(); if (uAddData > 0) { Debug(_T("*** NOTE: OP_ServerIdent: ***AddData: %u bytes\n"), uAddData); DebugHexDump((uint8*)packet + data.GetPosition(), uAddData); } } if (pServer) { pServer->SetListName(strName); pServer->SetDescription(strDescription); if (((uint32*)aucHash)[0] == 0x2A2A2A2A) { const CString& rstrVersion = pServer->GetVersion(); if (!rstrVersion.IsEmpty()) pServer->SetVersion(_T("eFarm ") + rstrVersion); else pServer->SetVersion(_T("eFarm")); } theApp.emuledlg->ShowConnectionState(); theApp.emuledlg->serverwnd->serverlistctrl.RefreshServer(pServer); theApp.emuledlg->serverwnd->UpdateMyInfo(); } break; } // tecxx 1609 2002 - add server's serverlist to own serverlist case OP_SERVERLIST: { if (thePrefs.GetDebugServerTCPLevel() > 0) Debug(_T("ServerMsg - OP_ServerList\n")); try { CSafeMemFile servers((BYTE*)packet,size); UINT count = servers.ReadUInt8(); // check if packet is valid if (1 + count*(4+2) > size) count = 0; int addcount = 0; while(count) { uint32 ip = servers.ReadUInt32(); uint16 port = servers.ReadUInt16(); CServer* srv = new CServer(port, ipstr(ip)); srv->SetListName(srv->GetFullIP()); if (!theApp.emuledlg->serverwnd->serverlistctrl.AddServer(srv, true)) delete srv; else addcount++; count--; } if (addcount) AddLogLine(false, GetResString(IDS_NEWSERVERS), addcount); if (thePrefs.GetDebugServerTCPLevel() > 0) { UINT uAddData = servers.GetLength() - servers.GetPosition(); if (uAddData > 0) { Debug(_T("*** NOTE: OP_ServerList: ***AddData: %u bytes\n"), uAddData); DebugHexDump((uint8*)packet + servers.GetPosition(), uAddData); } } } catch(CFileException* error) { if (thePrefs.GetVerbose()) DebugLogError(_T("%s"), GetResString(IDS_ERR_BADSERVERLISTRECEIVED)); error->Delete(); } break; } case OP_CALLBACKREQUESTED: { if (thePrefs.GetDebugServerTCPLevel() > 0) Debug(_T("ServerMsg - OP_CallbackRequested\n")); if (size == 6) { uint32 dwIP = PeekUInt32(packet); if (theApp.ipfilter->IsFiltered(dwIP)) { theStats.filteredclients++; if (thePrefs.GetLogFilteredIPs()) AddDebugLogLine(false, _T("Ignored callback request (IP=%s) - IP filter (%s)"), ipstr(dwIP), theApp.ipfilter->GetLastHit()); break; } if (theApp.clientlist->IsBannedClient(dwIP)) { if (thePrefs.GetLogBannedClients()) { CUpDownClient* pClient = theApp.clientlist->FindClientByIP(dwIP); AddDebugLogLine(false, _T("Ignored callback request from banned client %s; %s"), ipstr(dwIP), pClient->DbgGetClientInfo()); } break; } uint16 nPort = PeekUInt16(packet+4); CUpDownClient* client = theApp.clientlist->FindClientByIP(dwIP,nPort); if (client) client->TryToConnect(); else { client = new CUpDownClient(0,nPort,dwIP,0,0,true); theApp.clientlist->AddClient(client); client->TryToConnect(); } } break; } case OP_CALLBACK_FAIL: { if (thePrefs.GetDebugServerTCPLevel() > 0) Debug(_T("ServerMsg - OP_Callback_Fail %s\n"), DbgGetHexDump((uint8*)packet, size)); break; } case OP_REJECT: { if (thePrefs.GetDebugServerTCPLevel() > 0) Debug(_T("ServerMsg - OP_Reject %s\n"), DbgGetHexDump((uint8*)packet, size)); // this could happen if we send a command with the wrong protocol (e.g. sending a compressed packet to // a server which does not support that protocol). if (thePrefs.GetVerbose()) DebugLogError(_T("Server rejected last command")); break; } default: if (thePrefs.GetDebugServerTCPLevel() > 0) Debug(_T("***NOTE: ServerMsg - Unknown message; opcode=0x%02x %s\n"), opcode, DbgGetHexDump((uint8*)packet, size)); ; } return true; } catch(CFileException* error) { if (thePrefs.GetVerbose()) { TCHAR szError[MAX_CFEXP_ERRORMSG]; error->m_strFileName = _T("server packet"); error->GetErrorMessage(szError, ARRSIZE(szError)); DebugLogError(GetResString(IDS_ERR_PACKAGEHANDLING), szError); } error->Delete(); ASSERT(0); if (opcode==OP_SEARCHRESULT || opcode==OP_FOUNDSOURCES) return true; } catch(CMemoryException* error) { if (thePrefs.GetVerbose()) DebugLogError(GetResString(IDS_ERR_PACKAGEHANDLING), _T("CMemoryException")); error->Delete(); ASSERT(0); if (opcode==OP_SEARCHRESULT || opcode==OP_FOUNDSOURCES) return true; } catch(CString error) { if (thePrefs.GetVerbose()) DebugLogError(GetResString(IDS_ERR_PACKAGEHANDLING), error); ASSERT(0); } catch(...) { if (thePrefs.GetVerbose()) DebugLogError(GetResString(IDS_ERR_PACKAGEHANDLING), _T("Unknown exception")); ASSERT(0); } SetConnectionState(CS_DISCONNECTED); return false; }
bool CServerSocket::ProcessPacket(const BYTE* packet, uint32 size, uint8 opcode) { try { switch (opcode) { case OP_SERVERMESSAGE:{ if (thePrefs.GetDebugServerTCPLevel() > 0) Debug(_T("ServerMsg - OP_ServerMessage\n")); CServer* pServer = cur_server ? theApp.serverlist->GetServerByAddress(cur_server->GetAddress(), cur_server->GetPort()) : NULL; CSafeMemFile data(packet, size); CString strMessages(data.ReadString(pServer ? pServer->GetUnicodeSupport() : false)); if (thePrefs.GetDebugServerTCPLevel() > 0){ UINT uAddData = (UINT)(data.GetLength() - data.GetPosition()); if (uAddData > 0){ Debug(_T("*** NOTE: OP_ServerMessage: ***AddData: %u bytes\n"), uAddData); DebugHexDump(packet + data.GetPosition(), uAddData); } } // 16.40 servers do not send separate OP_SERVERMESSAGE packets for each line; // instead of this they are sending all text lines with one OP_SERVERMESSAGE packet. int iPos = 0; CString message = strMessages.Tokenize(_T("\r\n"), iPos); while (!message.IsEmpty()) { bool bOutputMessage = true; if (_tcsnicmp(message, _T("server version"), 14) == 0){ CString strVer = message.Mid(14); strVer.Trim(); strVer = strVer.Left(64); // truncate string to avoid misuse by servers in showing ads if (pServer){ UINT nVerMaj, nVerMin; if (_stscanf(strVer, _T("%u.%u"), &nVerMaj, &nVerMin) == 2) strVer.Format(_T("%u.%02u"), nVerMaj, nVerMin); pServer->SetVersion(strVer); theApp.emuledlg->serverwnd->serverlistctrl.RefreshServer(pServer); theApp.emuledlg->serverwnd->UpdateMyInfo(); } if (thePrefs.GetDebugServerTCPLevel() > 0) Debug(_T("%s\n"), message); } else if (_tcsncmp(message, _T("ERROR"), 5) == 0){ LogError(LOG_STATUSBAR, _T("%s %s (%s:%u) - %s"), GetResString(IDS_ERROR), pServer ? pServer->GetListName() : GetResString(IDS_PW_SERVER), cur_server ? cur_server->GetAddress() : _T(""), cur_server ? cur_server->GetPort() : 0, message.Mid(5).Trim(_T(" :"))); bOutputMessage = false; } else if (_tcsncmp(message, _T("WARNING"), 7) == 0){ LogWarning(LOG_STATUSBAR, _T("%s %s (%s:%u) - %s"), GetResString(IDS_WARNING), pServer ? pServer->GetListName() : GetResString(IDS_PW_SERVER), cur_server ? cur_server->GetAddress() : _T(""), cur_server ? cur_server->GetPort() : 0, message.Mid(7).Trim(_T(" :"))); bOutputMessage = false; } if (message.Find(_T("[emDynIP: ")) != -1 && message.Find(_T("]")) != -1 && message.Find(_T("[emDynIP: ")) < message.Find(_T("]"))){ CString dynip = message.Mid(message.Find(_T("[emDynIP: ")) + 10, message.Find(_T("]")) - (message.Find(_T("[emDynIP: ")) + 10)); dynip.Trim(); if (dynip.GetLength() && dynip.GetLength() < 51){ // Verify that we really received a DN. if (pServer && inet_addr(CStringA(dynip)) == INADDR_NONE){ // Update the dynIP of this server, but do not reset it's IP // which we just determined during connecting. CString strOldDynIP = pServer->GetDynIP(); pServer->SetDynIP(dynip); // If a dynIP-server changed its address or, if this is the // first time we get the dynIP-address for a server which we // already have as non-dynIP in our list, we need to remove // an already available server with the same 'dynIP:port'. if (strOldDynIP.CompareNoCase(pServer->GetDynIP()) != 0) theApp.serverlist->RemoveDuplicatesByAddress(pServer); if (cur_server) cur_server->SetDynIP(dynip); theApp.emuledlg->serverwnd->serverlistctrl.RefreshServer(pServer); theApp.emuledlg->serverwnd->UpdateMyInfo(); } } } if (bOutputMessage) { if (m_bStartNewMessageLog) { m_bStartNewMessageLog = false; theApp.emuledlg->AddServerMessageLine(LOG_INFO, _T("")); if (cur_server) { CString strMsg; if (IsObfusicating()) strMsg.Format(_T("%s: ") + GetResString(IDS_CONNECTEDTOOBFUSCATED) + _T(" (%s:%u)"), CTime::GetCurrentTime().Format(thePrefs.GetDateTimeFormat4Log()), cur_server->GetListName(), cur_server->GetAddress(), cur_server->GetObfuscationPortTCP()); else strMsg.Format(_T("%s: ") + GetResString(IDS_CONNECTEDTO) + _T(" (%s:%u)"), CTime::GetCurrentTime().Format(thePrefs.GetDateTimeFormat4Log()), cur_server->GetListName(), cur_server->GetAddress(), cur_server->GetPort()); theApp.emuledlg->AddServerMessageLine(LOG_SUCCESS, strMsg); } } theApp.emuledlg->AddServerMessageLine(LOG_INFO, message); } message = strMessages.Tokenize(_T("\r\n"), iPos); } break; } case OP_IDCHANGE:{ if (thePrefs.GetDebugServerTCPLevel() > 0) Debug(_T("ServerMsg - OP_IDChange\n")); if (size < sizeof(LoginAnswer_Struct)){ throw GetResString(IDS_ERR_BADSERVERREPLY); } LoginAnswer_Struct* la = (LoginAnswer_Struct*)packet; // save TCP flags in 'cur_server' CServer* pServer = NULL; ASSERT( cur_server ); if (cur_server){ if (size >= sizeof(LoginAnswer_Struct)+4){ DWORD dwFlags = *((uint32*)(packet + sizeof(LoginAnswer_Struct))); if (thePrefs.GetDebugServerTCPLevel() > 0){ CString strInfo; strInfo.AppendFormat(_T(" TCP Flags=0x%08x"), dwFlags); const DWORD dwKnownBits = SRV_TCPFLG_COMPRESSION | SRV_TCPFLG_NEWTAGS | SRV_TCPFLG_UNICODE | SRV_TCPFLG_RELATEDSEARCH | SRV_TCPFLG_TYPETAGINTEGER | SRV_TCPFLG_LARGEFILES | SRV_TCPFLG_TCPOBFUSCATION; if (dwFlags & ~dwKnownBits) strInfo.AppendFormat(_T(" ***UnkBits=0x%08x"), dwFlags & ~dwKnownBits); if (dwFlags & SRV_TCPFLG_COMPRESSION) strInfo.AppendFormat(_T(" Compression=1")); if (dwFlags & SRV_TCPFLG_NEWTAGS) strInfo.AppendFormat(_T(" NewTags=1")); if (dwFlags & SRV_TCPFLG_UNICODE) strInfo.AppendFormat(_T(" Unicode=1")); if (dwFlags & SRV_TCPFLG_RELATEDSEARCH) strInfo.AppendFormat(_T(" RelatedSearch=1")); if (dwFlags & SRV_TCPFLG_TYPETAGINTEGER) strInfo.AppendFormat(_T(" IntTypeTags=1")); if (dwFlags & SRV_TCPFLG_LARGEFILES) strInfo.AppendFormat(_T(" LargeFiles=1")); if (dwFlags & SRV_TCPFLG_TCPOBFUSCATION) strInfo.AppendFormat(_T(" TCP_Obfscation=1")); Debug(_T("%s\n"), strInfo); } cur_server->SetTCPFlags(dwFlags); } else cur_server->SetTCPFlags(0); // copy TCP flags into the server in the server list pServer = theApp.serverlist->GetServerByAddress(cur_server->GetAddress(), cur_server->GetPort()); if (pServer) pServer->SetTCPFlags(cur_server->GetTCPFlags()); } uint32 dwServerReportedIP = 0; uint32 dwObfuscationTCPPort = 0; if (size >= 20){ dwServerReportedIP = *((uint32*)(packet + 12)); if (::IsLowID(dwServerReportedIP)){ ASSERT( false ); dwServerReportedIP = 0; } ASSERT( dwServerReportedIP == la->clientid || ::IsLowID(la->clientid) ); dwObfuscationTCPPort = *((uint32*)(packet + 16)); if (cur_server != NULL && dwObfuscationTCPPort != 0) cur_server->SetObfuscationPortTCP((uint16)dwObfuscationTCPPort); if (pServer != NULL && dwObfuscationTCPPort != 0) pServer->SetObfuscationPortTCP((uint16)dwObfuscationTCPPort); } //Xman // Maella -Activate Smart Low ID check- /* if (la->clientid == 0) { uint8 state = thePrefs.GetSmartIdState(); if ( state > 0 ) { if (state == 1) theApp.emuledlg->RefreshUPnP(false); // refresh the UPnP mappings once state++; if( state > 2 ) thePrefs.SetSmartIdState(0); else thePrefs.SetSmartIdState(state); } break; } if( thePrefs.GetSmartIdCheck() ){ if (!IsLowID(la->clientid)) thePrefs.SetSmartIdState(1); else{ uint8 state = thePrefs.GetSmartIdState(); if ( state > 0 ) { if (state == 1) theApp.emuledlg->RefreshUPnP(false); // refresh the UPnP mappings once state++; if( state > 2 ) thePrefs.SetSmartIdState(0); else thePrefs.SetSmartIdState(state); if (!m_bManualSingleConnect) break; // if this is a connect to any/multiple server connection try, disconnect and try another one } } } */ if(la->clientid == 0){ // Reset attempts counter thePrefs.SetSmartIdState(0); } else if(la->clientid >= 16777216){ // High ID => reset attempts counter thePrefs.SetSmartIdState(0); } else if(thePrefs.GetSmartIdCheck() == true){ // Low ID => Check and increment attempts counter uint8 attempts = thePrefs.GetSmartIdState(); if(attempts < 3){ //zz_fly :: not needed, rebind upnp on ipchange :: start //Official UPNP /* if (!thePrefs.m_bUseACATUPnPCurrent && (attempts == 1)) theApp.emuledlg->RefreshUPnP(false); // refresh the UPnP mappings once */ //zz_fly :: end SetConnectionState(CS_ERROR); thePrefs.SetSmartIdState(++attempts); AddLogLine(true, _T("LowID -- Trying Again (attempts %i)"), attempts); break; // Retries } else if (!m_bManualSingleConnect) break; // if this is a connect to any/multiple server connection try, disconnect and try another one } //Xman end // we need to know our client's HighID when sending our shared files (done indirectly on SetConnectionState) serverconnect->clientid = la->clientid; if (connectionstate != CS_CONNECTED) { SetConnectionState(CS_CONNECTED); theApp.OnlineSig(); // Added By Bouc7 } serverconnect->SetClientID(la->clientid); if (::IsLowID(la->clientid) && dwServerReportedIP != 0) theApp.SetPublicIP(dwServerReportedIP); AddLogLine(false, GetResString(IDS_NEWCLIENTID), la->clientid); //Xman -Reask sources after IP change- v4 if(serverconnect->GetClientID() != 0 && theApp.last_valid_ip != 0 && serverconnect->GetClientID() != theApp.last_valid_ip && serverconnect->GetClientID() != theApp.last_valid_serverid) { //remark: this code doesn't trigger when changing low->hidh-ID and we already had //a session with this HighID-IP. This is because we don't know when this last lowID-session was. //but there is no need to trigger when changing low to high-id but keeping the IP, we can'tt loose the waiting-position! { // Public IP has been changed, it's necessary to inform all sources about it // All sources would be informed during their next session refresh (with TCP) // about the new IP. // ==> Quick start [TPT] - Max if(thePrefs.GetQuickStart() && thePrefs.GetQuickStartAfterIPChange()) { theApp.downloadqueue->quickflag = 0; theApp.downloadqueue->quickflags = 0; } // <== Quick start [TPT] - Max if(GetTickCount() - theApp.last_ip_change > FILEREASKTIME + 60000){ theApp.clientlist->TrigReaskForDownload(true); theApp.last_ip_change=::GetTickCount(); theApp.m_bneedpublicIP=false; AddLogLine(false, _T("Change from %u (%s ID) to %u (%s ID) detected%s"), theApp.last_valid_serverid, (theApp.last_valid_serverid < 16777216) ? _T("low") : _T("high"), serverconnect->GetClientID(), (serverconnect->GetClientID() < 16777216) ? _T("low") : _T("high"), _T(", all sources will be reasked immediately")); } else { theApp.clientlist->TrigReaskForDownload(false); theApp.last_ip_change=::GetTickCount(); theApp.m_bneedpublicIP=false; AddLogLine(false, _T("Change from %u (%s ID) to %u (%s ID) detected%s"), theApp.last_valid_serverid, (theApp.last_valid_serverid < 16777216) ? _T("low") : _T("high"), serverconnect->GetClientID(), (serverconnect->GetClientID() < 16777216) ? _T("low") : _T("high"), _T(", all sources will be reasked within the next 10 minutes")); } // ==> UPnP support [MoNKi] - leuk_he /* // official UPNP theApp.emuledlg->RefreshUPnP(false); // refresh the UPnP mappings once // official UPNP */ theApp.RebindUPnP(); // <== UPnP support [MoNKi] - leuk_he } } if(serverconnect->GetClientID() != 0 && theApp.last_ip_change==0) theApp.last_ip_change=::GetTickCount(); if(serverconnect->GetClientID() != 0 && serverconnect->GetClientID() != theApp.last_valid_serverid){ // Keep track of a change of the global IP theApp.last_valid_serverid = serverconnect->GetClientID(); } theApp.last_valid_ip=theApp.GetPublicIP(true); //can also be 0 theApp.last_traffic_reception=::GetTickCount(); theApp.internetmaybedown=false; //we have to reopen here if we are using server only // Xman end theApp.downloadqueue->ResetLocalServerRequests(); break; } case OP_SEARCHRESULT:{ if (thePrefs.GetDebugServerTCPLevel() > 0) Debug(_T("ServerMsg - OP_SearchResult\n")); CServer* cur_srv = (serverconnect) ? serverconnect->GetCurrentServer() : NULL; CServer* pServer = cur_srv ? theApp.serverlist->GetServerByAddress(cur_srv->GetAddress(), cur_srv->GetPort()) : NULL; (void)pServer; bool bMoreResultsAvailable; UINT uSearchResults = theApp.searchlist->ProcessSearchAnswer(packet, size, true/*pServer ? pServer->GetUnicodeSupport() : false*/, cur_srv ? cur_srv->GetIP() : 0, cur_srv ? cur_srv->GetPort() : (uint16)0, &bMoreResultsAvailable); theApp.emuledlg->searchwnd->LocalEd2kSearchEnd(uSearchResults, bMoreResultsAvailable); break; } case OP_FOUNDSOURCES_OBFU: case OP_FOUNDSOURCES:{ if (thePrefs.GetDebugServerTCPLevel() > 0) Debug(_T("ServerMsg - OP_FoundSources%s; Sources=%u %s\n"), (opcode == OP_FOUNDSOURCES_OBFU) ? _T("_OBFU") : _T(""), (UINT)packet[16], DbgGetFileInfo(packet)); ASSERT( cur_server ); if (cur_server) { CSafeMemFile sources(packet, size); uchar fileid[16]; sources.ReadHash16(fileid); if (CPartFile* file = theApp.downloadqueue->GetFileByID(fileid)) file->AddSources(&sources,cur_server->GetIP(), cur_server->GetPort(), (opcode == OP_FOUNDSOURCES_OBFU)); } break; } case OP_SERVERSTATUS:{ if (thePrefs.GetDebugServerTCPLevel() > 0) Debug(_T("ServerMsg - OP_ServerStatus\n")); // FIXME some statuspackets have a different size -> why? structur? if (size < 8) break;//throw "Invalid status packet"; uint32 cur_user = PeekUInt32(packet); uint32 cur_files = PeekUInt32(packet+4); CServer* pServer = cur_server ? theApp.serverlist->GetServerByAddress(cur_server->GetAddress(), cur_server->GetPort()) : NULL; if (pServer){ pServer->SetUserCount(cur_user); pServer->SetFileCount(cur_files); theApp.emuledlg->ShowUserCount(); theApp.emuledlg->serverwnd->serverlistctrl.RefreshServer(pServer); theApp.emuledlg->serverwnd->UpdateMyInfo(); } if (thePrefs.GetDebugServerTCPLevel() > 0){ if (size > 8){ Debug(_T("*** NOTE: OP_ServerStatus: ***AddData: %u bytes\n"), size - 8); DebugHexDump(packet + 8, size - 8); } } break; } case OP_SERVERIDENT:{ // OP_SERVERIDENT - this is sent by the server only if we send a OP_GETSERVERLIST if (thePrefs.GetDebugServerTCPLevel() > 0) Debug(_T("ServerMsg - OP_ServerIdent\n")); if (size<16+4+2+4){ if (thePrefs.GetVerbose()) DebugLogError(_T("%s"), GetResString(IDS_ERR_KNOWNSERVERINFOREC)); break;// throw "Invalid server info received"; } CServer* pServer = cur_server ? theApp.serverlist->GetServerByAddress(cur_server->GetAddress(),cur_server->GetPort()) : NULL; CString strInfo; CSafeMemFile data(packet, size); uint8 aucHash[16]; data.ReadHash16(aucHash); if (thePrefs.GetDebugServerTCPLevel() > 0) strInfo.AppendFormat(_T("Hash=%s (%s)"), md4str(aucHash), DbgGetHashTypeString(aucHash)); uint32 nServerIP = data.ReadUInt32(); uint16 nServerPort = data.ReadUInt16(); if (thePrefs.GetDebugServerTCPLevel() > 0) strInfo.AppendFormat(_T(" IP=%s:%u"), ipstr(nServerIP), nServerPort); UINT nTags = data.ReadUInt32(); if (thePrefs.GetDebugServerTCPLevel() > 0) strInfo.AppendFormat(_T(" Tags=%u"), nTags); CString strName; CString strDescription; for (UINT i = 0; i < nTags; i++){ CTag tag(&data, pServer ? pServer->GetUnicodeSupport() : false); if (tag.GetNameID() == ST_SERVERNAME){ if (tag.IsStr()){ strName = tag.GetStr(); if (thePrefs.GetDebugServerTCPLevel() > 0) strInfo.AppendFormat(_T(" Name=%s"), strName); } } else if (tag.GetNameID() == ST_DESCRIPTION){ if (tag.IsStr()){ strDescription = tag.GetStr(); if (thePrefs.GetDebugServerTCPLevel() > 0) strInfo.AppendFormat(_T(" Desc=%s"), strDescription); } } else if (thePrefs.GetDebugServerTCPLevel() > 0) strInfo.AppendFormat(_T(" ***UnkTag: 0x%02x=%u"), tag.GetNameID(), tag.GetInt()); } if (thePrefs.GetDebugServerTCPLevel() > 0){ strInfo += _T('\n'); Debug(_T("%s"), strInfo); UINT uAddData = (UINT)(data.GetLength() - data.GetPosition()); if (uAddData > 0){ Debug(_T("*** NOTE: OP_ServerIdent: ***AddData: %u bytes\n"), uAddData); DebugHexDump(packet + data.GetPosition(), uAddData); } } if (pServer){ pServer->SetListName(strName); pServer->SetDescription(strDescription); if (((uint32*)aucHash)[0] == 0x2A2A2A2A){ const CString& rstrVersion = pServer->GetVersion(); if (!rstrVersion.IsEmpty()) pServer->SetVersion(_T("eFarm ") + rstrVersion); else pServer->SetVersion(_T("eFarm")); } theApp.emuledlg->ShowConnectionState(); theApp.emuledlg->serverwnd->serverlistctrl.RefreshServer(pServer); } break; } // tecxx 1609 2002 - add server's serverlist to own serverlist case OP_SERVERLIST:{ if (!thePrefs.GetAddServersFromServer()) break; if (thePrefs.GetDebugServerTCPLevel() > 0) Debug(_T("ServerMsg - OP_ServerList\n")); try{ CSafeMemFile servers(packet, size); UINT count = servers.ReadUInt8(); // check if packet is valid if (1 + count*(4+2) > size) count = 0; int addcount = 0; while(count) { uint32 ip = servers.ReadUInt32(); uint16 port = servers.ReadUInt16(); CServer* srv = new CServer(port, ipstr(ip)); srv->SetListName(srv->GetFullIP()); srv->SetPreference(SRV_PR_LOW); if (!theApp.emuledlg->serverwnd->serverlistctrl.AddServer(srv, true)) delete srv; else addcount++; count--; } if (addcount) AddLogLine(false, GetResString(IDS_NEWSERVERS), addcount); if (thePrefs.GetDebugServerTCPLevel() > 0){ UINT uAddData = (UINT)(servers.GetLength() - servers.GetPosition()); if (uAddData > 0){ Debug(_T("*** NOTE: OP_ServerList: ***AddData: %u bytes\n"), uAddData); DebugHexDump(packet + servers.GetPosition(), uAddData); } } } catch(CFileException* error){ if (thePrefs.GetVerbose()) DebugLogError(_T("%s"), GetResString(IDS_ERR_BADSERVERLISTRECEIVED)); error->Delete(); } break; } case OP_CALLBACKREQUESTED:{ if (thePrefs.GetDebugServerTCPLevel() > 0) Debug(_T("ServerMsg - OP_CallbackRequested: %s\n"), (size >= 23) ? _T("With Cryptflag and Userhash") : _T("Without Cryptflag and Userhash")); if (size >= 6) { uint32 dwIP = PeekUInt32(packet); if (theApp.ipfilter->IsFiltered(dwIP)){ theStats.filteredclients++; if (thePrefs.GetLogFilteredIPs()) AddDebugLogLine(false, _T("Ignored callback request (IP=%s) - IP filter (%s)"), ipstr(dwIP), theApp.ipfilter->GetLastHit()); break; } if (theApp.clientlist->IsBannedClient(dwIP)){ if (thePrefs.GetLogBannedClients()){ CUpDownClient* pClient = theApp.clientlist->FindClientByIP(dwIP); //Xman Code Fix /* AddDebugLogLine(false, _T("Ignored callback request from banned client %s; %s"), ipstr(dwIP), pClient->DbgGetClientInfo()); */ AddDebugLogLine(false, _T("Ignored callback request from banned client %s; %s"), ipstr(dwIP), pClient ? pClient->DbgGetClientInfo() : _T("unknown")); //Xman end } break; } uint16 nPort = PeekUInt16(packet+4); uint8 byCryptOptions = 0; uchar achUserHash[16]; if (size >= 23){ byCryptOptions = packet[6]; md4cpy(achUserHash, packet + 7); } CUpDownClient* client = theApp.clientlist->FindClientByIP(dwIP,nPort); if (client == NULL) { client = new CUpDownClient(0,nPort,dwIP,0,0,true); //Xman Code Improvement don't search new generated clients in lists /* theApp.clientlist->AddClient(client); */ theApp.clientlist->AddClient(client, true); //Xman end } if (size >= 23 && client->HasValidHash()){ if (md4cmp(client->GetUserHash(), achUserHash) != 0){ DebugLogError(_T("Reported Userhash from OP_CALLBACKREQUESTED differs with our stored hash")); // disable crypt support since we dont know which hash is true client->SetCryptLayerRequest(false); client->SetCryptLayerSupport(false); client->SetCryptLayerRequires(false); } else{ client->SetConnectOptions(byCryptOptions, true, false); client->SetDirectUDPCallbackSupport(false); } } else if (size >= 23){ client->SetUserHash(achUserHash); client->SetCryptLayerSupport((byCryptOptions & 0x01) != 0); client->SetCryptLayerRequest((byCryptOptions & 0x02) != 0); client->SetCryptLayerRequires((byCryptOptions & 0x04) != 0); client->SetDirectUDPCallbackSupport(false); } client->TryToConnect(); } break; } case OP_CALLBACK_FAIL:{ if (thePrefs.GetDebugServerTCPLevel() > 0) Debug(_T("ServerMsg - OP_Callback_Fail %s\n"), DbgGetHexDump(packet, size)); break; } case OP_REJECT:{ if (thePrefs.GetDebugServerTCPLevel() > 0) Debug(_T("ServerMsg - OP_Reject %s\n"), DbgGetHexDump(packet, size)); // this could happen if we send a command with the wrong protocol (e.g. sending a compressed packet to // a server which does not support that protocol). if (thePrefs.GetVerbose()) DebugLogError(_T("Server rejected last command")); break; } default: if (thePrefs.GetDebugServerTCPLevel() > 0) Debug(_T("***NOTE: ServerMsg - Unknown message; opcode=0x%02x %s\n"), opcode, DbgGetHexDump(packet, size)); ; } return true; } catch(CFileException* error) { if (thePrefs.GetVerbose()) { TCHAR szError[MAX_CFEXP_ERRORMSG]; error->m_strFileName = _T("server packet"); error->GetErrorMessage(szError, ARRSIZE(szError)); ProcessPacketError(size, opcode, szError); } ASSERT(0); error->Delete(); if (opcode==OP_SEARCHRESULT || opcode==OP_FOUNDSOURCES) return true; } catch(CMemoryException* error) { ProcessPacketError(size, opcode, _T("CMemoryException")); ASSERT(0); error->Delete(); if (opcode==OP_SEARCHRESULT || opcode==OP_FOUNDSOURCES) return true; } catch(CString error) { ProcessPacketError(size, opcode, error); ASSERT(0); } #ifndef _DEBUG catch(...) { ProcessPacketError(size, opcode, _T("Unknown exception")); ASSERT(0); } #endif SetConnectionState(CS_DISCONNECTED); return false; }
int Locator_Repository::unregister_if_address_reused (const ACE_CString& fqname, const char* partial_ior, ImR_Locator_i* imr_locator) { if (this->opts_.debug() > 0) { ORBSVCS_DEBUG ((LM_DEBUG, ACE_TEXT ("(%P|%t)ImR: checking reuse address ") ACE_TEXT ("for server \"%C\" ior \"%C\"\n"), fqname.c_str(), partial_ior)); } ACE_CString key; Server_Info_Ptr si; Server_Info::fqname_to_key (fqname.c_str(), key); servers ().find (key, si); ACE_CString poa_name; ACE_CString server_id; if (si.null()) { Server_Info::parse_id (fqname.c_str(), server_id, poa_name); } else { server_id = si->active_info ()->server_id; poa_name = si->active_info ()->poa_name; } Locator_Repository::SIMap::ENTRY* sientry = 0; Locator_Repository::SIMap::ITERATOR siit (servers ()); for (; siit.next (sientry); siit.advance() ) { Server_Info *info = sientry->int_id_->active_info (); if (this->opts_.debug() > 0) { ORBSVCS_DEBUG ((LM_DEBUG, ACE_TEXT ("(%P|%t)ImR: iterating - registered server") ACE_TEXT ("\"%C:%C\" key = <%C> ior \"%C\"\n"), info->server_id.c_str(), info->poa_name.c_str (), info->key_name_.c_str(), info->partial_ior.c_str ())); } bool same_server = info->server_id == server_id; if (same_server && (server_id.length () == 0)) { same_server = info->poa_name == poa_name; } if (info->partial_ior == partial_ior && !same_server) { if (this->opts_.debug() > 0) { ORBSVCS_DEBUG ((LM_DEBUG, ACE_TEXT ("(%P|%t)ImR: reuse address %C so remove server %C \n"), info->partial_ior.c_str (), info->poa_name.c_str ())); } imr_locator->pinger ().remove_server (info->key_name_.c_str()); AsyncAccessManager_ptr aam = imr_locator->find_aam (info->key_name_.c_str ()); if (!aam.is_nil()) { aam->server_is_shutting_down (); } info->reset_runtime (); } } return 0; }
void SettingsCache::translateLegacySettings() { if (isPortableBuild) return; // Layouts QFile layoutFile(getSettingsPath() + "layouts/deckLayout.ini"); if (layoutFile.exists()) if (layoutFile.copy(getSettingsPath() + "layouts.ini")) layoutFile.remove(); QStringList usedKeys; QSettings legacySetting; // Sets legacySetting.beginGroup("sets"); QStringList setsGroups = legacySetting.childGroups(); for (int i = 0; i < setsGroups.size(); i++) { legacySetting.beginGroup(setsGroups.at(i)); cardDatabase().setEnabled(setsGroups.at(i), legacySetting.value("enabled").toBool()); cardDatabase().setIsKnown(setsGroups.at(i), legacySetting.value("isknown").toBool()); cardDatabase().setSortKey(setsGroups.at(i), legacySetting.value("sortkey").toUInt()); legacySetting.endGroup(); } QStringList setsKeys = legacySetting.allKeys(); for (int i = 0; i < setsKeys.size(); ++i) { usedKeys.append("sets/" + setsKeys.at(i)); } legacySetting.endGroup(); // Servers legacySetting.beginGroup("server"); servers().setPreviousHostLogin(legacySetting.value("previoushostlogin").toInt()); servers().setPreviousHostList(legacySetting.value("previoushosts").toStringList()); servers().setHostName(legacySetting.value("hostname").toString()); servers().setPort(legacySetting.value("port").toString()); servers().setPlayerName(legacySetting.value("playername").toString()); servers().setPassword(legacySetting.value("password").toString()); servers().setSavePassword(legacySetting.value("save_password").toInt()); servers().setAutoConnect(legacySetting.value("auto_connect").toInt()); servers().setFPHostName(legacySetting.value("fphostname").toString()); servers().setFPPort(legacySetting.value("fpport").toString()); servers().setFPPlayerName(legacySetting.value("fpplayername").toString()); usedKeys.append(legacySetting.allKeys()); QStringList allKeysServer = legacySetting.allKeys(); for (int i = 0; i < allKeysServer.size(); ++i) { usedKeys.append("server/" + allKeysServer.at(i)); } legacySetting.endGroup(); // Messages legacySetting.beginGroup("messages"); QStringList allMessages = legacySetting.allKeys(); for (int i = 0; i < allMessages.size(); ++i) { if (allMessages.at(i) != "count") { QString temp = allMessages.at(i); int index = temp.remove("msg").toInt(); messages().setMessageAt(index, legacySetting.value(allMessages.at(i)).toString()); } } messages().setCount(legacySetting.value("count").toInt()); QStringList allKeysmessages = legacySetting.allKeys(); for (int i = 0; i < allKeysmessages.size(); ++i) { usedKeys.append("messages/" + allKeysmessages.at(i)); } legacySetting.endGroup(); // Game filters legacySetting.beginGroup("filter_games"); gameFilters().setUnavailableGamesVisible(legacySetting.value("unavailable_games_visible").toBool()); gameFilters().setShowPasswordProtectedGames(legacySetting.value("show_password_protected_games").toBool()); gameFilters().setGameNameFilter(legacySetting.value("game_name_filter").toString()); gameFilters().setShowBuddiesOnlyGames(legacySetting.value("show_buddies_only_games").toBool()); gameFilters().setMinPlayers(legacySetting.value("min_players").toInt()); if (legacySetting.value("max_players").toInt() > 1) gameFilters().setMaxPlayers(legacySetting.value("max_players").toInt()); else gameFilters().setMaxPlayers(99); // This prevents a bug where no games will show if max was not set before QStringList allFilters = legacySetting.allKeys(); for (int i = 0; i < allFilters.size(); ++i) { if (allFilters.at(i).startsWith("game_type")) { gameFilters().setGameHashedTypeEnabled(allFilters.at(i), legacySetting.value(allFilters.at(i)).toBool()); } } QStringList allKeysfilter_games = legacySetting.allKeys(); for (int i = 0; i < allKeysfilter_games.size(); ++i) { usedKeys.append("filter_games/" + allKeysfilter_games.at(i)); } legacySetting.endGroup(); QStringList allLegacyKeys = legacySetting.allKeys(); for (int i = 0; i < allLegacyKeys.size(); ++i) { if (usedKeys.contains(allLegacyKeys.at(i))) continue; settings->setValue(allLegacyKeys.at(i), legacySetting.value(allLegacyKeys.at(i))); } }