Bincimap 2.0.16
Easy Imapping
Loading...
Searching...
No Matches
operator-rename.cc
Go to the documentation of this file.
1
5#include <string>
6#include <iostream>
7
8#include <dirent.h>
9#include <sys/stat.h>
10#include <sys/types.h>
11
12#include "convert.h"
13#include "depot.h"
14#include "mailbox.h"
15#include "operators.h"
16#include "recursivedescent.h"
17#include "session.h"
18
19using namespace ::std;
20using namespace Binc;
21
22//----------------------------------------------------------------------
24{
25}
26
27//----------------------------------------------------------------------
29{
30}
31
32//----------------------------------------------------------------------
33const string RenameOperator::getName(void) const
34{
35 return "RENAME";
36}
37
38//----------------------------------------------------------------------
40{
42}
43
44//------------------------------------------------------------------------
46 Request &command)
47{
48 Session &session = Session::getInstance();
49
50 const string &srcmailbox = command.getMailbox();
51 const string &canonmailbox = toCanonMailbox(srcmailbox);
52 const string &canondestmailbox = toCanonMailbox(command.getNewMailbox());
53
54 // renaming INBOX should actually create the destination mailbox,
55 // move over all the messages and then leave INBOX empty.
56 if (canonmailbox == "INBOX") {
57 session.setLastError("Sorry, renaming INBOX is not yet supported"
58 " by this IMAP server. Try copying the messages"
59 " instead");
60 return NO;
61 }
62
63 if (canondestmailbox == "INBOX") {
64 session.setLastError("It is not allowed to rename a mailbox to INBOX");
65 return NO;
66 }
67
68 if (depot.renameMailbox(canonmailbox, canondestmailbox))
69 return OK;
70 else
71 return NO;
72}
73
74//----------------------------------------------------------------------
76{
77 Session &session = Session::getInstance();
78
79 if (c_in.getUidMode())
80 return REJECT;
81
83 if ((res = expectSPACE()) != ACCEPT) {
84 session.setLastError("Expected SPACE after RENAME");
85 return res;
86 }
87
88 string mailbox;
89 if ((res = expectMailbox(mailbox)) != ACCEPT) {
90 session.setLastError("Expected mailbox after RENAME SPACE");
91 return res;
92 }
93
94 if ((res = expectSPACE()) != ACCEPT) {
95 session.setLastError("Expected SPACE after RENAME SPACE mailbox");
96 return res;
97 }
98
99 string newmailbox;
100 if ((res = expectMailbox(newmailbox)) != ACCEPT) {
101 session.setLastError("Expected mailbox after RENAME SPACE"
102 " mailbox SPACE");
103 return res;
104 }
105
106 if ((res = expectCRLF()) != ACCEPT) {
107 session.setLastError("Expected CRLF after RENAME SPACE"
108 " mailbox SPACE mailbox");
109 return res;
110 }
111
112 session.mailboxchanges = true;
113
114 c_in.setName("RENAME");
115 c_in.setMailbox(mailbox);
116 c_in.setNewMailbox(newmailbox);
117
118 return ACCEPT;
119}
virtual bool renameMailbox(const std::string &m, const std::string &n) const
Definition: depot.cc:245
virtual ParseResult parse(Request &) const
int getState(void) const
ProcessResult process(Depot &, Request &)
const std::string getName(void) const
void setNewMailbox(const std::string &s_in)
Definition: imapparser.cc:191
void setMailbox(const std::string &s_in)
Definition: imapparser.cc:155
void setName(const std::string &s_in)
Definition: imapparser.cc:70
const std::string & getMailbox(void) const
Definition: imapparser.cc:161
bool getUidMode(void) const
Definition: imapparser.cc:40
const std::string & getNewMailbox(void) const
Definition: imapparser.cc:197
bool mailboxchanges
Definition: session.h:33
void setLastError(const std::string &error) const
Definition: session.cc:185
@ AUTHENTICATED
Definition: session.h:37
static Session & getInstance(void)
Definition: session.cc:33
Declaration of miscellaneous convertion functions.
Declaration of the Mailbox class (Mailbox is logical container)
Definition: bincimapd.cc:9
Operator::ParseResult expectSPACE(void)
std::string toCanonMailbox(const std::string &s_in)
Definition: convert.h:216
Operator::ParseResult expectCRLF(void)
Operator::ParseResult expectMailbox(std::string &s_in)
Declaration of all operators.
Declaration of a recursive descent IMAP command parser.