mirror of
https://github.com/znc/znc.git
synced 2026-07-04 08:51:14 +02:00
Added SHUTDOWN user command by way of an exception
git-svn-id: https://znc.svn.sourceforge.net/svnroot/znc/trunk@154 726aef4b-f618-498e-8847-2d620e286838
This commit is contained in:
@@ -453,6 +453,8 @@ void CUserSock::UserCommand(const string& sLine) {
|
||||
PutStatus("Detaching you from [" + sChan + "]");
|
||||
pChan->DetachUser();
|
||||
}
|
||||
} else if (strcasecmp(sCommand.c_str(), "SHUTDOWN") == 0) {
|
||||
throw CException(CException::EX_Shutdown);
|
||||
} else if (strcasecmp(sCommand.c_str(), "JUMP") == 0) {
|
||||
if (m_pUser) {
|
||||
if (m_pIRCSock) {
|
||||
@@ -788,6 +790,7 @@ void CUserSock::HelpUser() {
|
||||
Table.AddRow(); Table.SetCell("Command", "ListNicks"); Table.SetCell("Arguments", "<#chan>"); Table.SetCell("Description", "List all nicks on a channel");
|
||||
Table.AddRow(); Table.SetCell("Command", "Topics"); Table.SetCell("Arguments", ""); Table.SetCell("Description", "Show topics in all channels");
|
||||
Table.AddRow(); Table.SetCell("Command", "SetBuffer"); Table.SetCell("Arguments", "<#chan> [linecount]"); Table.SetCell("Description", "Set the buffer count for a channel");
|
||||
Table.AddRow(); Table.SetCell("Command", "Shutdown"); Table.SetCell("Arguments", ""); Table.SetCell("Description", "Shutdown znc completely");
|
||||
Table.AddRow(); Table.SetCell("Command", "Jump"); Table.SetCell("Arguments", ""); Table.SetCell("Description", "Jump to the next server in the list");
|
||||
Table.AddRow(); Table.SetCell("Command", "Send"); Table.SetCell("Arguments", "<nick> <file>"); Table.SetCell("Description", "Send a shell file to a nick on IRC");
|
||||
Table.AddRow(); Table.SetCell("Command", "Get"); Table.SetCell("Arguments", "<file>"); Table.SetCell("Description", "Send a shell file to yourself");
|
||||
|
||||
@@ -65,6 +65,24 @@ protected:
|
||||
};
|
||||
|
||||
|
||||
class CException {
|
||||
public:
|
||||
typedef enum {
|
||||
EX_Shutdown,
|
||||
} EType;
|
||||
|
||||
CException(EType e) {
|
||||
m_eType = e;
|
||||
}
|
||||
virtual ~CException() {}
|
||||
|
||||
EType GetType() const { return m_eType; }
|
||||
private:
|
||||
protected:
|
||||
EType m_eType;
|
||||
};
|
||||
|
||||
|
||||
class CTable : public vector<map<string, string>* > {
|
||||
public:
|
||||
CTable();
|
||||
|
||||
@@ -198,7 +198,20 @@ int main(int argc, char** argv) {
|
||||
sigaction(SIGSEGV, &sa, (struct sigaction *)NULL);
|
||||
sigaction(SIGTERM, &sa, (struct sigaction *)NULL);
|
||||
|
||||
int iRet = pZNC->Loop();
|
||||
int iRet = 0;
|
||||
|
||||
try {
|
||||
iRet = pZNC->Loop();
|
||||
} catch (CException e) {
|
||||
// EX_Shutdown is thrown to exit
|
||||
switch (e.GetType()) {
|
||||
case CException::EX_Shutdown:
|
||||
iRet = 0;
|
||||
default:
|
||||
iRet = 1;
|
||||
}
|
||||
}
|
||||
|
||||
delete pZNC;
|
||||
|
||||
return iRet;
|
||||
|
||||
Reference in New Issue
Block a user