Csock* CRealListener::GetSockObj(const CString& sHost, unsigned short uPort) { CIncomingConnection *pClient = new CIncomingConnection(sHost, uPort, m_pParent->GetAcceptType()); if (CZNC::Get().AllowConnectionFrom(sHost)) { GLOBALMODULECALL(OnClientConnect(pClient, sHost, uPort), NULL, NULL, NOTHING); } else { pClient->Write(":irc.znc.in 464 unknown-nick :Too many anonymous connections from your IP\r\n"); pClient->Close(Csock::CLT_AFTERWRITE); GLOBALMODULECALL(OnFailedLogin("", sHost), NULL, NULL, NOTHING); } return pClient; }
// Add a new user to our server void CServerSocket::AddUser( SOCKET sock, sockaddr_in* ClientInfo, bool server ) { ConnectedClients++; CClientSocket* thisclient = this->CreateClientSocket( ); if (thisclient==NULL) { closesocket( thisclient->sock ); if (thisclient!=0) delete thisclient; thisclient=0; return; } #ifdef USE124 thisclient->ct = new char[TABLE_SIZE]; buildCryptTable(thisclient->ct, csum, csumlen); #endif thisclient->CryptTable = CryptTable; thisclient->CryptStatus.CurAddValue = 0; thisclient->CryptStatus.CurEncryptionValue = CryptTable->EncryptionStartValue; thisclient->GS = this; thisclient->sock = sock; thisclient->isActive = true; if (!OnClientConnect( thisclient )) { closesocket( thisclient->sock ); if (thisclient!=0) delete thisclient; thisclient=0; return; } thisclient->ClientIP = ""; thisclient->ClientIP = inet_ntoa( ClientInfo->sin_addr ); /* char *tmp; */ memset(&thisclient->ClientSubNet, '\0', 12 ); sprintf(thisclient->ClientSubNet, "%i.%i.%i", (ClientInfo->sin_addr.s_addr )&0xFF, (ClientInfo->sin_addr.s_addr>>8 )&0xFF, (ClientInfo->sin_addr.s_addr>>16)&0xFF); ClientList.push_back( thisclient ); if(Config.usethreads) { pthread_create( &threads[sock], NULL, ClientMainThread, (PVOID)thisclient); } memcpy( &thisclient->clientinfo, ClientInfo, sizeof(struct sockaddr_in)); if(server==true) { thisclient->isserver=true; Log( MSG_INFO, "Server connected from %s", inet_ntoa( ClientInfo->sin_addr ) ); } else { thisclient->isserver=false; Log( MSG_INFO, "User connected from %s", inet_ntoa( ClientInfo->sin_addr ) ); } }
bool CGlobalModules::OnClientConnect(CZNCSock* pClient, const CString& sHost, unsigned short uPort) { GLOBALMODCALL(OnClientConnect(pClient, sHost, uPort)); return false; }
void CGlobalModules::OnClientConnect(CClient* pClient, const CString& sHost, unsigned short uPort) { GLOBALMODCALL(OnClientConnect(pClient, sHost, uPort)); }
void PlayerManager::OnClientPutInServer(edict_t *pEntity, const char *playername) { cell_t res; int client = engine->IndexOfEdict(pEntity); CPlayer *pPlayer = &m_Players[client]; /* If they're not connected, they're a bot */ if (!pPlayer->IsConnected()) { /* Run manual connection routines */ char error[255]; const char *authid = engine->GetPlayerNetworkIDString(pEntity); pPlayer->Authorize(authid); pPlayer->m_bFakeClient = true; if (!OnClientConnect(pEntity, playername, "127.0.0.1", error, sizeof(error))) { /* :TODO: kick the bot if it's rejected */ return; } List<IClientListener *>::iterator iter; IClientListener *pListener = NULL; for (iter=m_hooks.begin(); iter!=m_hooks.end(); iter++) { pListener = (*iter); pListener->OnClientConnected(client); /* See if bot was kicked */ if (!pPlayer->IsConnected()) { return; } } /* Now do authorization */ for (iter=m_hooks.begin(); iter!=m_hooks.end(); iter++) { pListener = (*iter); pListener->OnClientAuthorized(client, authid); } /* Finally, tell plugins */ if (m_clauth->GetFunctionCount()) { m_clauth->PushCell(client); m_clauth->PushString(authid); m_clauth->Execute(NULL); } pPlayer->Authorize_Post(); } if (playerinfo) { pPlayer->m_Info = playerinfo->GetPlayerInfo(pEntity); } /* Get the client's language */ if (m_QueryLang) { const char *name; if (!pPlayer->IsFakeClient() && (name=engine->GetClientConVarValue(client, "cl_language"))) { unsigned int langid; pPlayer->m_LangId = (g_Translator.GetLanguageByName(name, &langid)) ? langid : g_Translator.GetServerLanguage(); } else { pPlayer->m_LangId = g_Translator.GetServerLanguage(); } } pPlayer->Connect(); m_PlayerCount++; List<IClientListener *>::iterator iter; IClientListener *pListener = NULL; for (iter=m_hooks.begin(); iter!=m_hooks.end(); iter++) { pListener = (*iter); pListener->OnClientPutInServer(client); } m_clputinserver->PushCell(client); m_clputinserver->Execute(&res, NULL); if (pPlayer->IsAuthorized()) { pPlayer->DoPostConnectAuthorization(); } }
bool CModules::OnClientConnect(CZNCSock* pClient, const CString& sHost, unsigned short uPort) { MODUNLOADCHK(OnClientConnect(pClient, sHost, uPort)); return false; }