mirror of
https://github.com/znc/znc.git
synced 2026-05-08 14:24:45 +02:00
delserver: Allow selecting the server more exactly
Before this you could only give the hostname of a server and delserver would delete the first server with that hostname. Now you can also specify port and password to select the server to remove more exactly. One can't specify the ssl flag for delserver since this would be a little ugly, but since you can't do ssl/plain-text on the same port anyway this shouldn't be a big problem. git-svn-id: https://znc.svn.sourceforge.net/svnroot/znc/trunk@1640 726aef4b-f618-498e-8847-2d620e286838
This commit is contained in:
+4
-2
@@ -329,9 +329,11 @@ void CClient::UserCommand(CString& sLine) {
|
||||
}
|
||||
} else if (sCommand.Equals("REMSERVER") || sCommand.Equals("DELSERVER")) {
|
||||
CString sServer = sLine.Token(1);
|
||||
unsigned short uPort = sLine.Token(2).ToUShort();
|
||||
CString sPass = sLine.Token(3);
|
||||
|
||||
if (sServer.empty()) {
|
||||
PutStatus("Usage: RemServer <host>");
|
||||
PutStatus("Usage: RemServer <host> [port] [pass]");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -340,7 +342,7 @@ void CClient::UserCommand(CString& sLine) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_pUser->DelServer(sServer)) {
|
||||
if (m_pUser->DelServer(sServer, uPort, sPass)) {
|
||||
PutStatus("Server removed");
|
||||
} else {
|
||||
PutStatus("No such server");
|
||||
|
||||
@@ -752,7 +752,7 @@ CServer* CUser::FindServer(const CString& sName) const {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
bool CUser::DelServer(const CString& sName) {
|
||||
bool CUser::DelServer(const CString& sName, unsigned short uPort, const CString& sPass) {
|
||||
if (sName.empty()) {
|
||||
return false;
|
||||
}
|
||||
@@ -762,29 +762,36 @@ bool CUser::DelServer(const CString& sName) {
|
||||
for (vector<CServer*>::iterator it = m_vServers.begin(); it != m_vServers.end(); it++, a++) {
|
||||
CServer* pServer = *it;
|
||||
|
||||
if (pServer->GetName().Equals(sName)) {
|
||||
CServer* pCurServer = GetCurrentServer();
|
||||
m_vServers.erase(it);
|
||||
if (!pServer->GetName().Equals(sName))
|
||||
continue;
|
||||
|
||||
if (pServer == pCurServer) {
|
||||
CIRCSock* pIRCSock = GetIRCSock();
|
||||
if (uPort != 0 && pServer->GetPort() != uPort)
|
||||
continue;
|
||||
|
||||
if (m_uServerIdx) {
|
||||
m_uServerIdx--;
|
||||
}
|
||||
if (!sPass.empty() && pServer->GetPass() != sPass)
|
||||
continue;
|
||||
|
||||
if (pIRCSock) {
|
||||
pIRCSock->Quit();
|
||||
PutStatus("Your current server was removed, jumping...");
|
||||
}
|
||||
} else if (m_uServerIdx >= m_vServers.size()) {
|
||||
m_uServerIdx = 0;
|
||||
CServer* pCurServer = GetCurrentServer();
|
||||
m_vServers.erase(it);
|
||||
|
||||
if (pServer == pCurServer) {
|
||||
CIRCSock* pIRCSock = GetIRCSock();
|
||||
|
||||
if (m_uServerIdx) {
|
||||
m_uServerIdx--;
|
||||
}
|
||||
|
||||
delete pServer;
|
||||
|
||||
return true;
|
||||
if (pIRCSock) {
|
||||
pIRCSock->Quit();
|
||||
PutStatus("Your current server was removed, jumping...");
|
||||
}
|
||||
} else if (m_uServerIdx >= m_vServers.size()) {
|
||||
m_uServerIdx = 0;
|
||||
}
|
||||
|
||||
delete pServer;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
@@ -57,7 +57,7 @@ public:
|
||||
void JoinChans();
|
||||
bool JoinChan(CChan* pChan);
|
||||
CServer* FindServer(const CString& sName) const;
|
||||
bool DelServer(const CString& sName);
|
||||
bool DelServer(const CString& sName, unsigned short uPort, const CString& sPass);
|
||||
bool AddServer(const CString& sName);
|
||||
bool AddServer(const CString& sName, unsigned short uPort, const CString& sPass = "", bool bSSL = false);
|
||||
CServer* GetNextServer();
|
||||
|
||||
Reference in New Issue
Block a user