diff options
Diffstat (limited to 'libmail/nntplogout.C')
| -rw-r--r-- | libmail/nntplogout.C | 81 | 
1 files changed, 81 insertions, 0 deletions
| diff --git a/libmail/nntplogout.C b/libmail/nntplogout.C new file mode 100644 index 0000000..474f383 --- /dev/null +++ b/libmail/nntplogout.C @@ -0,0 +1,81 @@ +/* +** Copyright 2003, Double Precision Inc. +** +** See COPYING for distribution information. +*/ +#include "nntplogout.H" + +mail::nntp::LogoutTask::LogoutTask(callback *callbackArg, nntp &myserverArg, +				   bool inactivityTimeoutArg) +	: Task(callbackArg, myserverArg), +	  inactivityTimeout(inactivityTimeoutArg), +	  goodDisconnect(false) +{ +} + +mail::nntp::LogoutTask::~LogoutTask() +{ +} + +void mail::nntp::LogoutTask::installedTask() +{ +	if (myserver->getfd() < 0) +	{ +		success("Ok."); +		return; +	} + +	myserver->socketWrite("QUIT\r\n"); +} + +void mail::nntp::LogoutTask::done() +{ +	if (inactivityTimeout) +	{ +		Task::done(); +		return; +	} + +	callback::disconnect *d=myserver->disconnectCallback; + +	myserver->disconnectCallback=NULL; + +	Task::done(); +	if (d) +		d->disconnected(""); +} + +void mail::nntp::LogoutTask::serverResponse(const char *msg) +{ +	goodDisconnect=true; + +	if (!myserver->socketEndEncryption()) +	{ +		myserver->socketDisconnect(); +		success("Ok"); +	} +} + +void mail::nntp::LogoutTask::disconnected(const char *reason) +{ +	if (goodDisconnect) +		reason=""; + +	if (inactivityTimeout) +	{ +		success("Ok."); +		return; +	} + +	callback::disconnect *d=myserver->disconnectCallback; + +	myserver->disconnectCallback=NULL; + +	success("Ok."); +	if (d) +		d->disconnected(reason); +} + +void mail::nntp::LogoutTask::emptyQueue() +{ +} | 
