/** * @file operator-logout.cc * @brief Implementation of the LOGOUT command * @author Andreas Aardal Hanssen * @date 2002-2005 */ #include "convert.h" #include "depot.h" #include "iodevice.h" #include "iofactory.h" #include "mailbox.h" #include "operators.h" #include "recursivedescent.h" #include "session.h" #include #include using namespace Binc; LogoutOperator::LogoutOperator() {} LogoutOperator::~LogoutOperator() {} const std::string LogoutOperator::getName() const { return "LOGOUT"; } Session::State LogoutOperator::getState() const { return Session::State(Session::NONAUTHENTICATED | Session::AUTHENTICATED | Session::SELECTED); } Operator::ProcessResult LogoutOperator::process(Depot &depot, Request &command) { bincClient << "* BYE Binc IMAP shutting down" << std::endl; bincClient << command.getTag() << " OK LOGOUT completed" << std::endl; bincClient.flush(); #ifdef BINCIMAPD Mailbox *mailbox = 0; if ((mailbox = depot.getSelected()) != 0) { mailbox->closeMailbox(); delete mailbox; } #endif Session &session = Session::getInstance(); session.setState(Session::LOGOUT); return Operator::ProcessResult::NOTHING; } Parser::ParseResult LogoutOperator::parse(Request &c_in) { Session &session = Session::getInstance(); if (c_in.getUidMode()) return Parser::ParseResult::REJECT; Parser::ParseResult res; if ((res = expectCRLF()) != Parser::ParseResult::ACCEPT) { session.setLastError("Expected CRLF"); return res; } c_in.setName("LOGOUT"); return Parser::ParseResult::ACCEPT; }