summaryrefslogtreecommitdiff
path: root/src/recursivedescent.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/recursivedescent.cc')
-rw-r--r--src/recursivedescent.cc492
1 files changed, 245 insertions, 247 deletions
diff --git a/src/recursivedescent.cc b/src/recursivedescent.cc
index 68cd0e0..b734779 100644
--- a/src/recursivedescent.cc
+++ b/src/recursivedescent.cc
@@ -1,8 +1,8 @@
/**
- * @file recursivedescent.cc
- * @brief Implementation of a recursive descent IMAP command parser.
- * @author Andreas Aardal Hanssen
- * @date 2002-2005
+ * @file recursivedescent.cc
+ * @brief Implementation of a recursive descent IMAP command parser.
+ * @author Andreas Aardal Hanssen
+ * @date 2002-2005
*/
#include "recursivedescent.h"
@@ -11,39 +11,39 @@
#include "imapparser.h"
#include "iodevice.h"
#include "iofactory.h"
+#include "operators.h"
#include "session.h"
+#include <cctype>
#include <iomanip>
#include <iostream>
#include <stack>
-#include <ctype.h>
-#include <stdio.h>
-
using namespace Binc;
using std::string;
+using ParseResult = Binc::Parser::ParseResult;
-std::stack<int> Binc::inputBuffer;
-int Binc::charnr = 0;
+constexpr auto ERROR = Parser::ParseResult::ERROR;
+constexpr auto REJECT = Parser::ParseResult::REJECT;
+constexpr auto ACCEPT = Parser::ParseResult::ACCEPT;
+constexpr auto TIMEOUT = Parser::ParseResult::TIMEOUT;
-Operator::ParseResult Binc::expectThisString(const string &s_in)
+ParseResult Binc::expectThisString(const string &s_in)
{
Session &session = Session::getInstance();
- string tmp;
+ char c;
bool match = true;
for (string::const_iterator i = s_in.begin(); i != s_in.end(); ++i) {
- char c;
if (!bincClient.readChar(&c)) {
session.setLastError(bincClient.getLastErrorString());
- if (bincClient.getLastError() == IODevice::Timeout) return Operator::TIMEOUT;
- return Operator::ERROR;
+ if (bincClient.getLastError() == IODevice::Error::Timeout)
+ return Parser::ParseResult::TIMEOUT;
+ return ERROR;
}
- tmp += c;
-
if (toupper(*i) != toupper(c)) {
match = false;
break;
@@ -51,34 +51,34 @@ Operator::ParseResult Binc::expectThisString(const string &s_in)
}
if (!match) {
- bincClient.unreadStr(tmp);
- return Operator::REJECT;
+ bincClient.unreadChar(c);
+ return REJECT;
} else {
- return Operator::ACCEPT;
+ return ACCEPT;
}
}
-Operator::ParseResult Binc::expectDateTime(string &s_in)
+ParseResult Binc::expectDateTime(string &s_in)
{
Session &session = Session::getInstance();
- if (expectThisString("\"") != Operator::ACCEPT) return Operator::REJECT;
+ if (expectThisString("\"") != ACCEPT) return REJECT;
unsigned int digit1, digit2;
- if (expectSPACE() == Operator::ACCEPT) {
+ if (expectSPACE() == ACCEPT) {
digit1 = 0;
- Operator::ParseResult res;
- if ((res = expectDigit(digit2)) != Operator::ACCEPT) {
+ ParseResult res;
+ if ((res = expectDigit(digit2)) != ACCEPT) {
session.setLastError("expected digit (day) after \" and a SPACE.");
return res;
}
} else {
- Operator::ParseResult res;
- if ((res = expectDigit(digit1)) != Operator::ACCEPT) {
+ ParseResult res;
+ if ((res = expectDigit(digit1)) != ACCEPT) {
session.setLastError("expected first digit of day");
return res;
}
- if ((res = expectDigit(digit2)) != Operator::ACCEPT) {
+ if ((res = expectDigit(digit2)) != ACCEPT) {
session.setLastError("expected second digit of day");
return res;
}
@@ -93,8 +93,8 @@ Operator::ParseResult Binc::expectDateTime(string &s_in)
s_in += daystr.str();
- Operator::ParseResult res;
- if ((res = expectThisString("-")) != Operator::ACCEPT) {
+ ParseResult res;
+ if ((res = expectThisString("-")) != ACCEPT) {
session.setLastError("expected -");
return res;
}
@@ -102,36 +102,36 @@ Operator::ParseResult Binc::expectDateTime(string &s_in)
s_in += "-";
/* month */
- if ((res = expectThisString("Jan")) == Operator::ACCEPT) {
+ if ((res = expectThisString("Jan")) == ACCEPT) {
s_in += "Jan";
- } else if ((res = expectThisString("Feb")) == Operator::ACCEPT) {
+ } else if ((res = expectThisString("Feb")) == ACCEPT) {
s_in += "Feb";
- } else if ((res = expectThisString("Mar")) == Operator::ACCEPT) {
+ } else if ((res = expectThisString("Mar")) == ACCEPT) {
s_in += "Mar";
- } else if ((res = expectThisString("Apr")) == Operator::ACCEPT) {
+ } else if ((res = expectThisString("Apr")) == ACCEPT) {
s_in += "Apr";
- } else if ((res = expectThisString("May")) == Operator::ACCEPT) {
+ } else if ((res = expectThisString("May")) == ACCEPT) {
s_in += "May";
- } else if ((res = expectThisString("Jun")) == Operator::ACCEPT) {
+ } else if ((res = expectThisString("Jun")) == ACCEPT) {
s_in += "Jun";
- } else if ((res = expectThisString("Jul")) == Operator::ACCEPT) {
+ } else if ((res = expectThisString("Jul")) == ACCEPT) {
s_in += "Jul";
- } else if ((res = expectThisString("Aug")) == Operator::ACCEPT) {
+ } else if ((res = expectThisString("Aug")) == ACCEPT) {
s_in += "Aug";
- } else if ((res = expectThisString("Sep")) == Operator::ACCEPT) {
+ } else if ((res = expectThisString("Sep")) == ACCEPT) {
s_in += "Sep";
- } else if ((res = expectThisString("Oct")) == Operator::ACCEPT) {
+ } else if ((res = expectThisString("Oct")) == ACCEPT) {
s_in += "Oct";
- } else if ((res = expectThisString("Nov")) == Operator::ACCEPT) {
+ } else if ((res = expectThisString("Nov")) == ACCEPT) {
s_in += "Nov";
- } else if ((res = expectThisString("Dec")) == Operator::ACCEPT) {
+ } else if ((res = expectThisString("Dec")) == ACCEPT) {
s_in += "Dec";
} else {
session.setLastError("expected month");
return res;
}
- if ((res = expectThisString("-")) != Operator::ACCEPT) {
+ if ((res = expectThisString("-")) != ACCEPT) {
session.setLastError("expected -");
return res;
}
@@ -140,26 +140,26 @@ Operator::ParseResult Binc::expectDateTime(string &s_in)
/* year */
unsigned int year, c;
- if ((res = expectDigit(year)) != Operator::ACCEPT) {
+ if ((res = expectDigit(year)) != ACCEPT) {
session.setLastError("expected digit (first digit of year)");
return res;
}
- if ((res = expectDigit(c)) != Operator::ACCEPT) {
+ if ((res = expectDigit(c)) != ACCEPT) {
session.setLastError("expected digit (second digit of year)");
return res;
}
year = (year * 10) + c;
- if ((res = expectDigit(c)) != Operator::ACCEPT) {
+ if ((res = expectDigit(c)) != ACCEPT) {
session.setLastError("expected digit (third digit of year)");
return res;
}
year = (year * 10) + c;
- if ((res = expectDigit(c)) != Operator::ACCEPT) {
+ if ((res = expectDigit(c)) != ACCEPT) {
session.setLastError("expected digit (last digit of year)");
return res;
}
@@ -172,47 +172,47 @@ Operator::ParseResult Binc::expectDateTime(string &s_in)
s_in += yearstr.str();
- if ((res = expectSPACE()) != Operator::ACCEPT) {
+ if ((res = expectSPACE()) != ACCEPT) {
session.setLastError("expected SPACE");
return res;
}
s_in += " ";
- if ((res = expectTime(s_in)) != Operator::ACCEPT) {
+ if ((res = expectTime(s_in)) != ACCEPT) {
session.setLastError("expected time");
return res;
}
- if ((res = expectSPACE()) != Operator::ACCEPT) {
+ if ((res = expectSPACE()) != ACCEPT) {
session.setLastError("expected SPACE");
return res;
}
s_in += " ";
- if ((res = expectZone(s_in)) != Operator::ACCEPT) {
+ if ((res = expectZone(s_in)) != ACCEPT) {
session.setLastError("expected zone");
return res;
}
- if ((res = expectThisString("\"")) != Operator::ACCEPT) {
+ if ((res = expectThisString("\"")) != ACCEPT) {
session.setLastError("expected \"");
return res;
}
- return Operator::ACCEPT;
+ return ACCEPT;
}
-Operator::ParseResult Binc::expectTime(string &s_in)
+ParseResult Binc::expectTime(string &s_in)
{
Session &session = Session::getInstance();
unsigned int c, t;
- Operator::ParseResult res;
- if ((res = expectDigit(t)) != Operator::ACCEPT) return res;
+ ParseResult res;
+ if ((res = expectDigit(t)) != ACCEPT) return res;
- if ((res = expectDigit(c)) != Operator::ACCEPT) {
+ if ((res = expectDigit(c)) != ACCEPT) {
session.setLastError("expected digit");
return res;
}
@@ -225,19 +225,19 @@ Operator::ParseResult Binc::expectTime(string &s_in)
s_in += tstr.str();
- if ((res = expectThisString(":")) != Operator::ACCEPT) {
+ if ((res = expectThisString(":")) != ACCEPT) {
session.setLastError("expected colon");
return res;
}
s_in += ":";
- if ((res = expectDigit(t)) != Operator::ACCEPT) {
+ if ((res = expectDigit(t)) != ACCEPT) {
session.setLastError("expected digit");
return res;
}
- if ((res = expectDigit(c)) != Operator::ACCEPT) {
+ if ((res = expectDigit(c)) != ACCEPT) {
session.setLastError("expected digit");
return res;
}
@@ -250,19 +250,19 @@ Operator::ParseResult Binc::expectTime(string &s_in)
s_in += tstr.str();
- if ((res = expectThisString(":")) != Operator::ACCEPT) {
+ if ((res = expectThisString(":")) != ACCEPT) {
session.setLastError("expected colon");
return res;
}
s_in += ":";
- if ((res = expectDigit(t)) != Operator::ACCEPT) {
+ if ((res = expectDigit(t)) != ACCEPT) {
session.setLastError("expected digit");
return res;
}
- if ((res = expectDigit(c)) != Operator::ACCEPT) {
+ if ((res = expectDigit(c)) != ACCEPT) {
session.setLastError("expected digit");
return res;
}
@@ -275,42 +275,42 @@ Operator::ParseResult Binc::expectTime(string &s_in)
s_in += tstr.str();
- return Operator::ACCEPT;
+ return ACCEPT;
}
-Operator::ParseResult Binc::expectZone(string &s_in)
+ParseResult Binc::expectZone(string &s_in)
{
Session &session = Session::getInstance();
- Operator::ParseResult res;
- if ((res = expectThisString("-")) == Operator::ACCEPT)
+ ParseResult res;
+ if ((res = expectThisString("-")) == ACCEPT)
s_in += "-";
- else if ((res = expectThisString("+")) == Operator::ACCEPT)
+ else if ((res = expectThisString("+")) == ACCEPT)
s_in += "+";
else
return res;
unsigned int c, t;
- if ((res = expectDigit(t)) != Operator::ACCEPT) {
+ if ((res = expectDigit(t)) != ACCEPT) {
session.setLastError("expected digit");
return res;
}
- if ((res = expectDigit(c)) != Operator::ACCEPT) {
+ if ((res = expectDigit(c)) != ACCEPT) {
session.setLastError("expected digit");
return res;
}
t = (t * 10) + c;
- if ((res = expectDigit(c)) != Operator::ACCEPT) {
+ if ((res = expectDigit(c)) != ACCEPT) {
session.setLastError("expected digit");
return res;
}
t = (t * 10) + c;
- if ((res = expectDigit(c)) != Operator::ACCEPT) {
+ if ((res = expectDigit(c)) != ACCEPT) {
session.setLastError("expected digit");
return res;
}
@@ -323,40 +323,38 @@ Operator::ParseResult Binc::expectZone(string &s_in)
s_in += tstr.str();
- return Operator::ACCEPT;
+ return ACCEPT;
}
-Operator::ParseResult Binc::expectListWildcards(int &c_in)
+ParseResult Binc::expectListWildcards(int &c_in)
{
- Operator::ParseResult res;
- if ((res = expectThisString("%")) == Operator::ACCEPT) {
+ ParseResult res;
+ if ((res = expectThisString("%")) == ACCEPT) {
c_in = '%';
- return Operator::ACCEPT;
- } else if ((res = expectThisString("*")) == Operator::ACCEPT) {
+ return ACCEPT;
+ } else if ((res = expectThisString("*")) == ACCEPT) {
c_in = '*';
- return Operator::ACCEPT;
+ return ACCEPT;
} else {
return res;
}
}
-Operator::ParseResult Binc::expectListMailbox(string &s_in)
+ParseResult Binc::expectListMailbox(string &s_in)
{
- Operator::ParseResult res;
- if ((res = expectString(s_in)) == Operator::ACCEPT) return Operator::ACCEPT;
+ ParseResult res;
+ if ((res = expectString(s_in)) == ACCEPT) return ACCEPT;
int c;
- if ((res = expectAtomChar(c)) == Operator::ACCEPT
- || (res = expectListWildcards(c)) == Operator::ACCEPT
- || (res = expectThisString("]")) == Operator::ACCEPT)
+ if ((res = expectAtomChar(c)) == ACCEPT || (res = expectListWildcards(c)) == ACCEPT
+ || (res = expectThisString("]")) == ACCEPT)
{
do {
s_in += (char)c;
- if ((res = expectAtomChar(c)) != Operator::ACCEPT
- && (res = expectListWildcards(c)) != Operator::ACCEPT
- && (res = expectThisString("]")) != Operator::ACCEPT)
+ if ((res = expectAtomChar(c)) != ACCEPT && (res = expectListWildcards(c)) != ACCEPT
+ && (res = expectThisString("]")) != ACCEPT)
{
- return Operator::ACCEPT;
+ return ACCEPT;
}
} while (1);
}
@@ -366,54 +364,54 @@ Operator::ParseResult Binc::expectListMailbox(string &s_in)
return res;
}
-Operator::ParseResult Binc::expectFlag(std::vector<string> &v_in)
+ParseResult Binc::expectFlag(std::vector<string> &v_in)
{
Session &session = Session::getInstance();
- Operator::ParseResult res;
+ ParseResult res;
string flag;
- if ((res = expectThisString("\\Answered")) == Operator::ACCEPT) {
+ if ((res = expectThisString("\\Answered")) == ACCEPT) {
v_in.push_back("\\Answered");
- } else if ((res = expectThisString("\\Flagged")) == Operator::ACCEPT) {
+ } else if ((res = expectThisString("\\Flagged")) == ACCEPT) {
v_in.push_back("\\Flagged");
- } else if ((res = expectThisString("\\Deleted")) == Operator::ACCEPT) {
+ } else if ((res = expectThisString("\\Deleted")) == ACCEPT) {
v_in.push_back("\\Deleted");
- } else if ((res = expectThisString("\\Seen")) == Operator::ACCEPT) {
+ } else if ((res = expectThisString("\\Seen")) == ACCEPT) {
v_in.push_back("\\Seen");
- } else if ((res = expectThisString("\\Draft")) == Operator::ACCEPT) {
+ } else if ((res = expectThisString("\\Draft")) == ACCEPT) {
v_in.push_back("\\Draft");
- } else if ((res = expectThisString("\\Answered")) == Operator::ACCEPT) {
+ } else if ((res = expectThisString("\\Answered")) == ACCEPT) {
v_in.push_back("\\Answered");
- } else if ((res = expectThisString("\\")) == Operator::ACCEPT) {
- if ((res = expectAtom(flag)) == Operator::ACCEPT) {
+ } else if ((res = expectThisString("\\")) == ACCEPT) {
+ if ((res = expectAtom(flag)) == ACCEPT) {
v_in.push_back("\\" + flag);
} else {
session.setLastError("expected atom");
return res;
}
- } else if (expectAtom(flag) == Operator::ACCEPT) {
+ } else if (expectAtom(flag) == ACCEPT) {
v_in.push_back(flag);
} else {
return res;
}
- return Operator::ACCEPT;
+ return ACCEPT;
}
-Operator::ParseResult Binc::expectDate(string &s_in)
+ParseResult Binc::expectDate(string &s_in)
{
Session &session = Session::getInstance();
- Operator::ParseResult res;
+ ParseResult res;
bool quoted = false;
- if ((res = expectThisString("\"")) == Operator::ACCEPT) quoted = true;
+ if ((res = expectThisString("\"")) == ACCEPT) quoted = true;
/* day */
unsigned int day, c;
- if ((res = expectDigit(c)) == Operator::ACCEPT) {
+ if ((res = expectDigit(c)) == ACCEPT) {
day = c;
- if ((res = expectDigit(c)) == Operator::ACCEPT) day = (day * 10) + c;
+ if ((res = expectDigit(c)) == ACCEPT) day = (day * 10) + c;
BincStream daystr;
@@ -426,7 +424,7 @@ Operator::ParseResult Binc::expectDate(string &s_in)
}
/* - */
- if ((res = expectThisString("-")) != Operator::ACCEPT) {
+ if ((res = expectThisString("-")) != ACCEPT) {
session.setLastError("expected -");
return res;
}
@@ -434,29 +432,29 @@ Operator::ParseResult Binc::expectDate(string &s_in)
s_in += '-';
/* month */
- if ((res = expectThisString("Jan")) == Operator::ACCEPT) {
+ if ((res = expectThisString("Jan")) == ACCEPT) {
s_in += "Jan";
- } else if ((res = expectThisString("Feb")) == Operator::ACCEPT) {
+ } else if ((res = expectThisString("Feb")) == ACCEPT) {
s_in += "Feb";
- } else if ((res = expectThisString("Mar")) == Operator::ACCEPT) {
+ } else if ((res = expectThisString("Mar")) == ACCEPT) {
s_in += "Mar";
- } else if ((res = expectThisString("Apr")) == Operator::ACCEPT) {
+ } else if ((res = expectThisString("Apr")) == ACCEPT) {
s_in += "Apr";
- } else if ((res = expectThisString("May")) == Operator::ACCEPT) {
+ } else if ((res = expectThisString("May")) == ACCEPT) {
s_in += "May";
- } else if ((res = expectThisString("Jun")) == Operator::ACCEPT) {
+ } else if ((res = expectThisString("Jun")) == ACCEPT) {
s_in += "Jun";
- } else if ((res = expectThisString("Jul")) == Operator::ACCEPT) {
+ } else if ((res = expectThisString("Jul")) == ACCEPT) {
s_in += "Jul";
- } else if ((res = expectThisString("Aug")) == Operator::ACCEPT) {
+ } else if ((res = expectThisString("Aug")) == ACCEPT) {
s_in += "Aug";
- } else if ((res = expectThisString("Sep")) == Operator::ACCEPT) {
+ } else if ((res = expectThisString("Sep")) == ACCEPT) {
s_in += "Sep";
- } else if ((res = expectThisString("Oct")) == Operator::ACCEPT) {
+ } else if ((res = expectThisString("Oct")) == ACCEPT) {
s_in += "Oct";
- } else if ((res = expectThisString("Nov")) == Operator::ACCEPT) {
+ } else if ((res = expectThisString("Nov")) == ACCEPT) {
s_in += "Nov";
- } else if ((res = expectThisString("Dec")) == Operator::ACCEPT) {
+ } else if ((res = expectThisString("Dec")) == ACCEPT) {
s_in += "Dec";
} else {
session.setLastError("expected month");
@@ -464,7 +462,7 @@ Operator::ParseResult Binc::expectDate(string &s_in)
}
/* - */
- if ((res = expectThisString("-")) != Operator::ACCEPT) {
+ if ((res = expectThisString("-")) != ACCEPT) {
session.setLastError("expected -");
return res;
}
@@ -473,26 +471,26 @@ Operator::ParseResult Binc::expectDate(string &s_in)
/* year */
unsigned int year;
- if ((res = expectDigit(year)) != Operator::ACCEPT) {
+ if ((res = expectDigit(year)) != ACCEPT) {
session.setLastError("expected digit");
return res;
}
- if ((res = expectDigit(c)) != Operator::ACCEPT) {
+ if ((res = expectDigit(c)) != ACCEPT) {
session.setLastError("expected digit");
return res;
}
year = (year * 10) + c;
- if ((res = expectDigit(c)) != Operator::ACCEPT) {
+ if ((res = expectDigit(c)) != ACCEPT) {
session.setLastError("expected digit");
return res;
}
year = (year * 10) + c;
- if ((res = expectDigit(c)) != Operator::ACCEPT) {
+ if ((res = expectDigit(c)) != ACCEPT) {
session.setLastError("expected digit");
return res;
}
@@ -506,25 +504,25 @@ Operator::ParseResult Binc::expectDate(string &s_in)
s_in += yearstr.str();
if (quoted) {
- if ((res = expectThisString("\"")) != Operator::ACCEPT) {
+ if ((res = expectThisString("\"")) != ACCEPT) {
session.setLastError("expected \"");
return res;
}
}
- return Operator::ACCEPT;
+ return ACCEPT;
}
-Operator::ParseResult Binc::expectCRLF()
+ParseResult Binc::expectCRLF()
{
- Operator::ParseResult res;
- if ((res = expectCR()) == Operator::ACCEPT && (res = expectLF()) == Operator::ACCEPT)
- return Operator::ACCEPT;
+ ParseResult res;
+ if ((res = expectCR()) == ACCEPT && (res = expectLF()) == ACCEPT)
+ return ACCEPT;
else
return res;
}
-Operator::ParseResult Binc::expectCR()
+ParseResult Binc::expectCR()
{
Session &session = Session::getInstance();
@@ -532,19 +530,19 @@ Operator::ParseResult Binc::expectCR()
if (!bincClient.readChar(&c)) {
session.setLastError(bincClient.getLastErrorString());
- if (bincClient.getLastError() == IODevice::Timeout) return Operator::TIMEOUT;
- return Operator::ERROR;
+ if (bincClient.getLastError() == IODevice::Error::Timeout) return TIMEOUT;
+ return ERROR;
}
if (c == 0x0d) {
- return Operator::ACCEPT;
+ return ACCEPT;
} else {
bincClient.unreadChar(c);
- return Operator::REJECT;
+ return REJECT;
}
}
-Operator::ParseResult Binc::expectLF()
+ParseResult Binc::expectLF()
{
Session &session = Session::getInstance();
@@ -552,19 +550,19 @@ Operator::ParseResult Binc::expectLF()
if (!bincClient.readChar(&c)) {
session.setLastError(bincClient.getLastErrorString());
- if (bincClient.getLastError() == IODevice::Timeout) return Operator::TIMEOUT;
- return Operator::ERROR;
+ if (bincClient.getLastError() == IODevice::Error::Timeout) return TIMEOUT;
+ return ERROR;
}
if (c == 0x0a) {
- return Operator::ACCEPT;
+ return ACCEPT;
} else {
bincClient.unreadChar(c);
- return Operator::REJECT;
+ return REJECT;
}
}
-Operator::ParseResult Binc::expectTagChar(int &c_in)
+ParseResult Binc::expectTagChar(int &c_in)
{
Session &session = Session::getInstance();
@@ -572,8 +570,8 @@ Operator::ParseResult Binc::expectTagChar(int &c_in)
if (!bincClient.readChar(&c)) {
session.setLastError(bincClient.getLastErrorString());
- if (bincClient.getLastError() == IODevice::Timeout) return Operator::TIMEOUT;
- return Operator::ERROR;
+ if (bincClient.getLastError() == IODevice::Error::Timeout) return TIMEOUT;
+ return ERROR;
}
switch (c) {
@@ -664,28 +662,28 @@ Operator::ParseResult Binc::expectTagChar(int &c_in)
case 0175:
case 0176:
c_in = c;
- return Operator::ACCEPT;
+ return ACCEPT;
default:
break;
}
bincClient.unreadChar(c);
- return Operator::REJECT;
+ return REJECT;
}
-Operator::ParseResult Binc::expectTag(string &s_in)
+ParseResult Binc::expectTag(string &s_in)
{
string tag;
int tagchar;
- int eres = expectTagChar(tagchar);
- if (eres == Operator::REJECT) {
- return Operator::REJECT;
- } else if (eres == Operator::ERROR) {
- return Operator::ERROR;
- } else if (eres == Operator::TIMEOUT) {
- return Operator::TIMEOUT;
+ ParseResult eres = expectTagChar(tagchar);
+ if (eres == REJECT) {
+ return REJECT;
+ } else if (eres == ERROR) {
+ return ERROR;
+ } else if (eres == TIMEOUT) {
+ return TIMEOUT;
} else {
tag += tagchar;
@@ -693,26 +691,26 @@ Operator::ParseResult Binc::expectTag(string &s_in)
while (!done) {
switch (expectTagChar(tagchar)) {
- case Operator::ACCEPT:
+ case ACCEPT:
tag += tagchar;
break;
- case Operator::REJECT:
+ case REJECT:
done = true;
break;
- case Operator::ERROR:
- return Operator::ERROR;
- case Operator::TIMEOUT:
- return Operator::TIMEOUT;
+ case ERROR:
+ return ERROR;
+ case TIMEOUT:
+ return TIMEOUT;
}
}
}
s_in = tag;
- return Operator::ACCEPT;
+ return ACCEPT;
}
-Operator::ParseResult Binc::expectSPACE()
+ParseResult Binc::expectSPACE()
{
Session &session = Session::getInstance();
@@ -720,35 +718,35 @@ Operator::ParseResult Binc::expectSPACE()
if (!bincClient.readChar(&c)) {
session.setLastError(bincClient.getLastErrorString());
- if (bincClient.getLastError() == IODevice::Timeout) return Operator::TIMEOUT;
- return Operator::ERROR;
+ if (bincClient.getLastError() == IODevice::Error::Timeout) return TIMEOUT;
+ return ERROR;
}
if (c == ' ') {
- return Operator::ACCEPT;
+ return ACCEPT;
} else {
bincClient.unreadChar(c);
- return Operator::REJECT;
+ return REJECT;
}
}
-Operator::ParseResult Binc::expectMailbox(string &s_in)
+ParseResult Binc::expectMailbox(string &s_in)
{
return expectAstring(s_in);
}
// FIXME: This rule is wrong.
-Operator::ParseResult Binc::expectAstring(string &s_in)
+ParseResult Binc::expectAstring(string &s_in)
{
- Operator::ParseResult res;
- if ((res = expectAtom(s_in)) == Operator::ACCEPT) return Operator::ACCEPT;
+ ParseResult res;
+ if ((res = expectAtom(s_in)) == ACCEPT) return ACCEPT;
- if ((res = expectString(s_in)) == Operator::ACCEPT) return Operator::ACCEPT;
+ if ((res = expectString(s_in)) == ACCEPT) return ACCEPT;
return res;
}
-Operator::ParseResult Binc::expectAtomChar(int &c_in)
+ParseResult Binc::expectAtomChar(int &c_in)
{
Session &session = Session::getInstance();
@@ -756,8 +754,8 @@ Operator::ParseResult Binc::expectAtomChar(int &c_in)
if (!bincClient.readChar(&c)) {
session.setLastError(bincClient.getLastErrorString());
- if (bincClient.getLastError() == IODevice::Timeout) return Operator::TIMEOUT;
- return Operator::ERROR;
+ if (bincClient.getLastError() == IODevice::Error::Timeout) return TIMEOUT;
+ return ERROR;
}
switch (c) {
@@ -849,22 +847,22 @@ Operator::ParseResult Binc::expectAtomChar(int &c_in)
case 0175:
case 0176:
c_in = c;
- return Operator::ACCEPT;
+ return ACCEPT;
default:
break;
}
bincClient.unreadChar(c);
- return Operator::REJECT;
+ return REJECT;
}
-Operator::ParseResult Binc::expectAtom(string &s_in)
+ParseResult Binc::expectAtom(string &s_in)
{
string atom;
int atomchar;
- Operator::ParseResult res;
- while ((res = expectAtomChar(atomchar)) == Operator::ACCEPT)
+ ParseResult res;
+ while ((res = expectAtomChar(atomchar)) == ACCEPT)
atom += atomchar;
if (atom == "") {
@@ -874,40 +872,40 @@ Operator::ParseResult Binc::expectAtom(string &s_in)
s_in = atom;
}
- return Operator::ACCEPT;
+ return ACCEPT;
}
-Operator::ParseResult Binc::expectString(string &s_in)
+ParseResult Binc::expectString(string &s_in)
{
- Operator::ParseResult res;
- if ((res = expectQuoted(s_in)) == Operator::ACCEPT) return Operator::ACCEPT;
+ ParseResult res;
+ if ((res = expectQuoted(s_in)) == ACCEPT) return ACCEPT;
- if ((res = expectLiteral(s_in)) == Operator::ACCEPT) return Operator::ACCEPT;
+ if ((res = expectLiteral(s_in)) == ACCEPT) return ACCEPT;
return res;
}
-Operator::ParseResult Binc::expectQuoted(string &s_in)
+ParseResult Binc::expectQuoted(string &s_in)
{
string quoted;
int quotedchar;
- Operator::ParseResult res;
+ ParseResult res;
- if ((res = expectThisString("\"")) != Operator::ACCEPT) return res;
+ if ((res = expectThisString("\"")) != ACCEPT) return res;
- while ((res = expectQuotedChar(quotedchar)) == Operator::ACCEPT)
+ while ((res = expectQuotedChar(quotedchar)) == ACCEPT)
quoted += quotedchar;
- if ((res = expectThisString("\"")) != Operator::ACCEPT) {
+ if ((res = expectThisString("\"")) != ACCEPT) {
bincClient.unreadStr("\"" + quoted);
return res;
}
s_in = quoted;
- return Operator::ACCEPT;
+ return ACCEPT;
}
-Operator::ParseResult Binc::expectQuotedChar(int &c_in)
+ParseResult Binc::expectQuotedChar(int &c_in)
{
Session &session = Session::getInstance();
@@ -915,8 +913,8 @@ Operator::ParseResult Binc::expectQuotedChar(int &c_in)
if (!bincClient.readChar(&c)) {
session.setLastError(bincClient.getLastErrorString());
- if (bincClient.getLastError() == IODevice::Timeout) return Operator::TIMEOUT;
- return Operator::ERROR;
+ if (bincClient.getLastError() == IODevice::Error::Timeout) return TIMEOUT;
+ return ERROR;
}
switch (c) {
@@ -1044,23 +1042,23 @@ Operator::ParseResult Binc::expectQuotedChar(int &c_in)
case 0176:
case 0177:
c_in = c;
- return Operator::ACCEPT;
+ return ACCEPT;
case '\\': {
char d;
if (!bincClient.readChar(&d)) {
session.setLastError(bincClient.getLastErrorString());
- if (bincClient.getLastError() == IODevice::Timeout) return Operator::TIMEOUT;
- return Operator::ERROR;
+ if (bincClient.getLastError() == IODevice::Error::Timeout) return TIMEOUT;
+ return ERROR;
}
if (d == '\"' || d == '\\') {
c_in = d;
- return Operator::ACCEPT;
+ return ACCEPT;
} else {
bincClient.unreadChar(d);
bincClient.unreadChar(c);
- return Operator::REJECT;
+ return REJECT;
}
}
default:
@@ -1068,21 +1066,21 @@ Operator::ParseResult Binc::expectQuotedChar(int &c_in)
}
bincClient.unreadChar(c);
- return Operator::REJECT;
+ return REJECT;
}
-Operator::ParseResult Binc::expectLiteral(string &s_in)
+ParseResult Binc::expectLiteral(string &s_in)
{
Session &session = Session::getInstance();
string literal;
- Operator::ParseResult res;
+ ParseResult res;
- if ((res = expectThisString("{")) != Operator::ACCEPT) return res;
+ if ((res = expectThisString("{")) != ACCEPT) return res;
unsigned int nchar;
- if ((res = expectNumber(nchar)) != Operator::ACCEPT) {
+ if ((res = expectNumber(nchar)) != ACCEPT) {
session.setLastError("expected number");
return res;
}
@@ -1091,16 +1089,16 @@ Operator::ParseResult Binc::expectLiteral(string &s_in)
// sent by the client with an extra '+' appended after the octet
// count.
bool literalPlus = false;
- if ((res = expectThisString("+")) == Operator::ACCEPT) literalPlus = true;
+ if ((res = expectThisString("+")) == ACCEPT) literalPlus = true;
- if ((res = expectThisString("}")) != Operator::ACCEPT) {
+ if ((res = expectThisString("}")) != ACCEPT) {
session.setLastError("expected }");
return res;
}
- if ((res = expectCRLF()) != Operator::ACCEPT) {
+ if ((res = expectCRLF()) != ACCEPT) {
session.setLastError("expected CRLF");
- return Operator::ERROR;
+ return ERROR;
}
// Only send the reply if the client did not send a LITERAL+
@@ -1114,8 +1112,8 @@ Operator::ParseResult Binc::expectLiteral(string &s_in)
char c;
if (!bincClient.readChar(&c)) {
session.setLastError(bincClient.getLastErrorString());
- if (bincClient.getLastError() == IODevice::Timeout) return Operator::TIMEOUT;
- return Operator::ERROR;
+ if (bincClient.getLastError() == IODevice::Error::Timeout) return TIMEOUT;
+ return ERROR;
}
literal += c;
@@ -1123,27 +1121,27 @@ Operator::ParseResult Binc::expectLiteral(string &s_in)
s_in = literal;
- return Operator::ACCEPT;
+ return ACCEPT;
}
-Operator::ParseResult Binc::expectNumber(unsigned int &i_in)
+ParseResult Binc::expectNumber(unsigned int &i_in)
{
i_in = 0;
unsigned int n;
- Operator::ParseResult res;
+ ParseResult res;
- while ((res = expectDigit(n)) == Operator::ACCEPT)
+ while ((res = expectDigit(n)) == ACCEPT)
if (i_in == 0)
i_in = n;
else
i_in = (i_in * 10) + n;
- if (res == Operator::TIMEOUT) return res;
+ if (res == TIMEOUT) return res;
- return Operator::ACCEPT;
+ return ACCEPT;
}
-Operator::ParseResult Binc::expectDigit(unsigned int &i_in)
+ParseResult Binc::expectDigit(unsigned int &i_in)
{
Session &session = Session::getInstance();
@@ -1151,23 +1149,23 @@ Operator::ParseResult Binc::expectDigit(unsigned int &i_in)
if (!bincClient.readChar(&c)) {
session.setLastError(bincClient.getLastErrorString());
- if (bincClient.getLastError() == IODevice::Timeout) return Operator::TIMEOUT;
- return Operator::ERROR;
+ if (bincClient.getLastError() == IODevice::Error::Timeout) return TIMEOUT;
+ return ERROR;
}
if (c == '0') {
i_in = 0;
- return Operator::ACCEPT;
+ return ACCEPT;
} else {
bincClient.unreadChar(c);
}
- if (expectDigitNZ(i_in) != Operator::ACCEPT) return Operator::REJECT;
+ if (expectDigitNZ(i_in) != ACCEPT) return REJECT;
- return Operator::ACCEPT;
+ return ACCEPT;
}
-Operator::ParseResult Binc::expectDigitNZ(unsigned int &i_in)
+ParseResult Binc::expectDigitNZ(unsigned int &i_in)
{
Session &session = Session::getInstance();
@@ -1175,8 +1173,8 @@ Operator::ParseResult Binc::expectDigitNZ(unsigned int &i_in)
if (!bincClient.readChar(&c)) {
session.setLastError(bincClient.getLastErrorString());
- if (bincClient.getLastError() == IODevice::Timeout) return Operator::TIMEOUT;
- return Operator::ERROR;
+ if (bincClient.getLastError() == IODevice::Error::Timeout) return TIMEOUT;
+ return ERROR;
}
switch (c) {
@@ -1209,27 +1207,27 @@ Operator::ParseResult Binc::expectDigitNZ(unsigned int &i_in)
break;
case -1:
session.setLastError(bincClient.getLastErrorString());
- return Operator::ERROR;
+ return ERROR;
case -2:
- return Operator::TIMEOUT;
+ return TIMEOUT;
default:
bincClient.unreadChar(c);
- return Operator::REJECT;
+ return REJECT;
}
- return Operator::ACCEPT;
+ return ACCEPT;
}
-Operator::ParseResult Binc::expectSet(SequenceSet &s_in)
+ParseResult Binc::expectSet(SequenceSet &s_in)
{
Session &session = Session::getInstance();
unsigned int seqnum = (unsigned int)-1;
- Operator::ParseResult res;
+ ParseResult res;
/* if a set does not start with a sequencenum, then it's not a
* set. :-) seqnum == -1 means '*'. */
- if ((res = expectSequenceNum(seqnum)) != Operator::ACCEPT) return res;
+ if ((res = expectSequenceNum(seqnum)) != ACCEPT) return res;
/* the first number is always a part of the set */
s_in.addNumber(seqnum);
@@ -1237,9 +1235,9 @@ Operator::ParseResult Binc::expectSet(SequenceSet &s_in)
/* if _after_ a set there is a ':', then there will always be a
* sequencenum after the colon. if not, it's a syntax error. a
* colon delimits two numbers in a range. */
- if ((res = expectThisString(":")) == Operator::ACCEPT) {
+ if ((res = expectThisString(":")) == ACCEPT) {
unsigned int seqnum2 = (unsigned int)-1;
- if ((res = expectSequenceNum(seqnum2)) != Operator::ACCEPT) {
+ if ((res = expectSequenceNum(seqnum2)) != ACCEPT) {
session.setLastError("expected sequencenum");
return res;
}
@@ -1249,17 +1247,17 @@ Operator::ParseResult Binc::expectSet(SequenceSet &s_in)
/* if _after_ a set there is a ',', then there will always be
* a set after the comma. if not, it's a syntax error. */
- if ((res = expectThisString(",")) == Operator::ACCEPT) {
- if ((res = expectSet(s_in)) != Operator::ACCEPT) {
+ if ((res = expectThisString(",")) == ACCEPT) {
+ if ((res = expectSet(s_in)) != ACCEPT) {
session.setLastError("expected set");
return res;
}
}
- return Operator::ACCEPT;
+ return ACCEPT;
}
-Operator::ParseResult Binc::expectSequenceNum(unsigned int &i_in)
+ParseResult Binc::expectSequenceNum(unsigned int &i_in)
{
Session &session = Session::getInstance();
@@ -1267,35 +1265,35 @@ Operator::ParseResult Binc::expectSequenceNum(unsigned int &i_in)
if (!bincClient.readChar(&c)) {
session.setLastError(bincClient.getLastErrorString());
- if (bincClient.getLastError() == IODevice::Timeout) return Operator::TIMEOUT;
- return Operator::ERROR;
+ if (bincClient.getLastError() == IODevice::Error::Timeout) return TIMEOUT;
+ return ERROR;
}
if (c == '*') {
i_in = (unsigned int)-1;
- return Operator::ACCEPT;
+ return ACCEPT;
} else {
bincClient.unreadChar(c);
}
- if (expectNZNumber(i_in) != Operator::ACCEPT)
- return Operator::REJECT;
+ if (expectNZNumber(i_in) != ACCEPT)
+ return REJECT;
else
- return Operator::ACCEPT;
+ return ACCEPT;
}
-Operator::ParseResult Binc::expectNZNumber(unsigned int &i_in)
+ParseResult Binc::expectNZNumber(unsigned int &i_in)
{
unsigned int c;
- Operator::ParseResult res;
+ ParseResult res;
- if ((res = expectDigitNZ(c)) != Operator::ACCEPT) return res;
+ if ((res = expectDigitNZ(c)) != ACCEPT) return res;
i_in = c;
- while ((res = expectDigit(c)) == Operator::ACCEPT)
+ while ((res = expectDigit(c)) == ACCEPT)
i_in = (i_in * 10) + c;
- if (res == Operator::TIMEOUT) return res;
+ if (res == TIMEOUT) return res;
- return Operator::ACCEPT;
+ return ACCEPT;
}