summaryrefslogtreecommitdiffstats
path: root/src/uscxml/plugins/invoker/imap/IMAPInvoker.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/uscxml/plugins/invoker/imap/IMAPInvoker.cpp')
-rw-r--r--src/uscxml/plugins/invoker/imap/IMAPInvoker.cpp310
1 files changed, 155 insertions, 155 deletions
diff --git a/src/uscxml/plugins/invoker/imap/IMAPInvoker.cpp b/src/uscxml/plugins/invoker/imap/IMAPInvoker.cpp
index 5237977..d3686f9 100644
--- a/src/uscxml/plugins/invoker/imap/IMAPInvoker.cpp
+++ b/src/uscxml/plugins/invoker/imap/IMAPInvoker.cpp
@@ -84,22 +84,22 @@ size_t IMAPInvoker::writeCurlData(void *ptr, size_t size, size_t nmemb, void *us
size_t IMAPInvoker::readCurlData(void *ptr, size_t size, size_t nmemb, void *userdata) {
if (!userdata)
return 0;
-
+
IMAPContext* ctx = (IMAPContext*)userdata;
ctx->inContent << std::string((char*)ptr, size * nmemb);
-
+
return size * nmemb;
}
-
+
void IMAPInvoker::send(const SendRequest& req) {
IMAPContext* ctx = NULL;
-
+
if (false) {
} else if (iequals(req.name, "select")) {
IMAPContext::Select* args = new IMAPContext::Select();
Event::getParam(req.params, "mailbox", args->mailbox);
-
+
ctx = new IMAPContext();
ctx->command = IMAPContext::IMAP_SELECT;
ctx->arguments = args;
@@ -107,7 +107,7 @@ void IMAPInvoker::send(const SendRequest& req) {
} else if (iequals(req.name, "examine")) {
IMAPContext::Examine* args = new IMAPContext::Examine();
Event::getParam(req.params, "mailbox", args->mailbox);
-
+
ctx = new IMAPContext();
ctx->command = IMAPContext::IMAP_EXAMINE;
ctx->arguments = args;
@@ -115,7 +115,7 @@ void IMAPInvoker::send(const SendRequest& req) {
} else if (iequals(req.name, "delete")) {
IMAPContext::Delete* args = new IMAPContext::Delete();
Event::getParam(req.params, "mailbox", args->mailbox);
-
+
ctx = new IMAPContext();
ctx->command = IMAPContext::IMAP_DELETE;
ctx->arguments = args;
@@ -124,7 +124,7 @@ void IMAPInvoker::send(const SendRequest& req) {
IMAPContext::Rename* args = new IMAPContext::Rename();
Event::getParam(req.params, "mailbox", args->mailbox);
Event::getParam(req.params, "name", args->newName);
-
+
ctx = new IMAPContext();
ctx->command = IMAPContext::IMAP_RENAME;
ctx->arguments = args;
@@ -132,7 +132,7 @@ void IMAPInvoker::send(const SendRequest& req) {
} else if (iequals(req.name, "subscribe")) {
IMAPContext::Subscribe* args = new IMAPContext::Subscribe();
Event::getParam(req.params, "mailbox", args->mailbox);
-
+
ctx = new IMAPContext();
ctx->command = IMAPContext::IMAP_SUBSCRIBE;
ctx->arguments = args;
@@ -140,7 +140,7 @@ void IMAPInvoker::send(const SendRequest& req) {
} else if (iequals(req.name, "unsubscribe")) {
IMAPContext::Unsubscribe* args = new IMAPContext::Unsubscribe();
Event::getParam(req.params, "mailbox", args->mailbox);
-
+
ctx = new IMAPContext();
ctx->command = IMAPContext::IMAP_UNSUBSCRIBE;
ctx->arguments = args;
@@ -149,7 +149,7 @@ void IMAPInvoker::send(const SendRequest& req) {
IMAPContext::List* args = new IMAPContext::List();
Event::getParam(req.params, "mailbox", args->mailbox);
Event::getParam(req.params, "reference", args->refName);
-
+
ctx = new IMAPContext();
ctx->command = IMAPContext::IMAP_LIST;
ctx->arguments = args;
@@ -158,7 +158,7 @@ void IMAPInvoker::send(const SendRequest& req) {
IMAPContext::LSub* args = new IMAPContext::LSub();
Event::getParam(req.params, "mailbox", args->mailbox);
Event::getParam(req.params, "reference", args->refName);
-
+
ctx = new IMAPContext();
ctx->command = IMAPContext::IMAP_LSUB;
ctx->arguments = args;
@@ -167,7 +167,7 @@ void IMAPInvoker::send(const SendRequest& req) {
IMAPContext::Status* args = new IMAPContext::Status();
Event::getParam(req.params, "mailbox", args->mailbox);
Event::getParam(req.params, "dataitems", args->dataItems);
-
+
ctx = new IMAPContext();
ctx->command = IMAPContext::IMAP_STATUS;
ctx->arguments = args;
@@ -181,107 +181,107 @@ void IMAPInvoker::send(const SendRequest& req) {
if (!Event::getParam(req.params, "message", args->literal)) {
args->literal = req.content;
}
-
+
ctx = new IMAPContext();
ctx->command = IMAPContext::IMAP_APPEND;
ctx->arguments = args;
} else if (iequals(req.name, "check")) {
IMAPContext::Check* args = new IMAPContext::Check();
-
+
ctx = new IMAPContext();
ctx->command = IMAPContext::IMAP_CHECK;
ctx->arguments = args;
} else if (iequals(req.name, "close")) {
IMAPContext::Close* args = new IMAPContext::Close();
-
+
ctx = new IMAPContext();
ctx->command = IMAPContext::IMAP_CLOSE;
ctx->arguments = args;
-
+
} else if (iequals(req.name, "expunge")) {
IMAPContext::Expunge* args = new IMAPContext::Expunge();
-
+
ctx = new IMAPContext();
ctx->command = IMAPContext::IMAP_EXPUNGE;
ctx->arguments = args;
-
+
} else if (iequals(req.name, "search")) {
IMAPContext::Search* args = new IMAPContext::Search();
Event::getParam(req.params, "charset", args->charSet);
Event::getParam(req.params, "criteria", args->criteria);
-
+
ctx = new IMAPContext();
ctx->command = IMAPContext::IMAP_SEARCH;
ctx->arguments = args;
-
+
} else if (iequals(req.name, "fetch")) {
IMAPContext::Fetch* args = new IMAPContext::Fetch();
Event::getParam(req.params, "sequence", args->sequence);
Event::getParam(req.params, "itemnames", args->itemNames);
-
+
ctx = new IMAPContext();
ctx->command = IMAPContext::IMAP_FETCH;
ctx->arguments = args;
-
+
} else if (iequals(req.name, "store")) {
IMAPContext::Store* args = new IMAPContext::Store();
Event::getParam(req.params, "sequence", args->sequence);
Event::getParam(req.params, "itemnames", args->itemNames);
Event::getParam(req.params, "values", args->values);
-
+
ctx = new IMAPContext();
ctx->command = IMAPContext::IMAP_STORE;
ctx->arguments = args;
-
+
} else if (iequals(req.name, "copy")) {
IMAPContext::Copy* args = new IMAPContext::Copy();
Event::getParam(req.params, "mailbox", args->mailbox);
Event::getParam(req.params, "sequence", args->sequence);
-
+
ctx = new IMAPContext();
ctx->command = IMAPContext::IMAP_COPY;
ctx->arguments = args;
-
+
} else if (iequals(req.name, "uid")) {
IMAPContext::UId* args = new IMAPContext::UId();
Event::getParam(req.params, "command", args->command);
Event::getParam(req.params, "arguments", args->arguments);
-
+
ctx = new IMAPContext();
ctx->command = IMAPContext::IMAP_UID;
ctx->arguments = args;
-
+
} else if (boost::istarts_with(req.name, "x")) {
IMAPContext::XExtension* args = new IMAPContext::XExtension();
args->command = req.name;
Event::getParam(req.params, "arguments", args->arguments);
-
+
ctx = new IMAPContext();
ctx->command = IMAPContext::IMAP_XEXTENSION;
ctx->arguments = args;
-
+
}
-
+
if (ctx == NULL) {
returnErrorExecution("Event '" + req.name + "' not known");
return;
}
-
+
Event::getParam(req.params, "verbose", ctx->verbose);
Event::getParam(req.params, "ssl", ctx->useSSL);
ctx->invoker = this;
ctx->sendReq = req;
-
+
_workQueue.push(ctx);
}
void IMAPInvoker::process(IMAPContext* ctx) {
CURL* _curl;
CURLcode curlError;
-
+
// see http://curl.haxx.se/libcurl/c/imap-tls.html
_curl = curl_easy_init();
if(_curl) {
@@ -291,7 +291,7 @@ void IMAPInvoker::process(IMAPContext* ctx) {
LOG(ERROR) << "Cannot set password: " << curl_easy_strerror(curlError);
(curlError = curl_easy_setopt(_curl, CURLOPT_URL, _server.c_str())) == CURLE_OK ||
LOG(ERROR) << "Cannot set server string: " << curl_easy_strerror(curlError);
-
+
if (ctx->useSSL) {
(curlError = curl_easy_setopt(_curl, CURLOPT_USE_SSL, (long)CURLUSESSL_ALL)) == CURLE_OK ||
LOG(ERROR) << "Cannot use SSL: " << curl_easy_strerror(curlError);
@@ -304,9 +304,9 @@ void IMAPInvoker::process(IMAPContext* ctx) {
(curlError = curl_easy_setopt(_curl, CURLOPT_CAINFO, "/path/to/certificate.pem")) == CURLE_OK ||
LOG(ERROR) << "Cannot set CA info path: " << curl_easy_strerror(curlError);
#endif
-
+
}
-
+
(curlError = curl_easy_setopt(_curl, CURLOPT_READFUNCTION, IMAPInvoker::writeCurlData)) == CURLE_OK ||
LOG(ERROR) << "Cannot register read function: " << curl_easy_strerror(curlError);
(curlError = curl_easy_setopt(_curl, CURLOPT_READDATA, ctx)) == CURLE_OK ||
@@ -315,7 +315,7 @@ void IMAPInvoker::process(IMAPContext* ctx) {
LOG(ERROR) << "Cannot register read function: " << curl_easy_strerror(curlError);
(curlError = curl_easy_setopt(_curl, CURLOPT_WRITEDATA, ctx)) == CURLE_OK ||
LOG(ERROR) << "Cannot register userdata for write function: " << curl_easy_strerror(curlError);
-
+
if (ctx->verbose) {
(curlError = curl_easy_setopt(_curl, CURLOPT_VERBOSE, 1L)) == CURLE_OK ||
LOG(ERROR) << "Cannot set curl to verbose: " << curl_easy_strerror(curlError);
@@ -323,114 +323,114 @@ void IMAPInvoker::process(IMAPContext* ctx) {
std::stringstream cmdSS;
switch (ctx->command) {
- case IMAPContext::IMAP_SELECT: {
- IMAPContext::Select* cmd = (IMAPContext::Select*)ctx->arguments;
- cmdSS << "SELECT " << "\"" << cmd->mailbox << "\"";
- break;
- }
- case IMAPContext::IMAP_EXAMINE: {
- IMAPContext::Examine* cmd = (IMAPContext::Examine*)ctx->arguments;
- cmdSS << "EXAMINE " << "\"" << cmd->mailbox << "\"";
- break;
- }
- case IMAPContext::IMAP_CREATE: {
- IMAPContext::Create* cmd = (IMAPContext::Create*)ctx->arguments;
- cmdSS << "CREATE " << "\"" << cmd->mailbox << "\"";
- break;
- }
- case IMAPContext::IMAP_DELETE: {
- IMAPContext::Delete* cmd = (IMAPContext::Delete*)ctx->arguments;
- cmdSS << "DELETE " << "\"" << cmd->mailbox << "\"";
- break;
- }
- case IMAPContext::IMAP_RENAME: {
- IMAPContext::Rename* cmd = (IMAPContext::Rename*)ctx->arguments;
- cmdSS << "RENAME " << "\"" << cmd->mailbox << "\" \"" << cmd->newName << "\"";
- break;
- }
- case IMAPContext::IMAP_SUBSCRIBE: {
- IMAPContext::Subscribe* cmd = (IMAPContext::Subscribe*)ctx->arguments;
- cmdSS << "SUBSCRIBE " << "\"" << cmd->mailbox << "\"";
- break;
- }
- case IMAPContext::IMAP_UNSUBSCRIBE: {
- IMAPContext::Unsubscribe* cmd = (IMAPContext::Unsubscribe*)ctx->arguments;
- cmdSS << "UNSUBSCRIBE " << "\"" << cmd->mailbox << "\"";
- break;
- }
- case IMAPContext::IMAP_LIST: {
- IMAPContext::List* cmd = (IMAPContext::List*)ctx->arguments;
- cmdSS << "LIST " << "\"" << cmd->mailbox << "\" \"" << cmd->refName << "\"";
- break;
- }
- case IMAPContext::IMAP_LSUB: {
- IMAPContext::LSub* cmd = (IMAPContext::LSub*)ctx->arguments;
- cmdSS << "LSUB " << "\"" << cmd->mailbox << "\" \"" << cmd->refName << "\"";
- break;
- }
- case IMAPContext::IMAP_STATUS: {
- IMAPContext::Status* cmd = (IMAPContext::Status*)ctx->arguments;
- cmdSS << "STATUS " << "\"" << cmd->mailbox << "\" (" << cmd->dataItems << ")";
- break;
- }
- case IMAPContext::IMAP_APPEND: {
- IMAPContext::Append* cmd = (IMAPContext::Append*)ctx->arguments;
- cmdSS << "APPEND " << "\"" << cmd->mailbox << "\" (" << cmd->flags << ") {" << cmd->dateTime << "}";
- break;
- }
- case IMAPContext::IMAP_CHECK: {
- cmdSS << "CHECK";
- break;
- }
- case IMAPContext::IMAP_CLOSE: {
- cmdSS << "CLOSE";
- break;
- }
- case IMAPContext::IMAP_EXPUNGE: {
- cmdSS << "EXPUNGE";
- break;
- }
- case IMAPContext::IMAP_SEARCH: {
- IMAPContext::Search* cmd = (IMAPContext::Search*)ctx->arguments;
- cmdSS << "SEARCH ";
- if (cmd->charSet.size() > 0) {
- cmdSS << "CHARSET " << cmd->charSet << " ";
- }
- cmdSS << cmd->criteria;
- break;
- }
- case IMAPContext::IMAP_FETCH: {
- IMAPContext::Fetch* cmd = (IMAPContext::Fetch*)ctx->arguments;
- cmdSS << "FETCH " << cmd->sequence << " " << cmd->itemNames;
- break;
- }
- case IMAPContext::IMAP_STORE: {
- IMAPContext::Store* cmd = (IMAPContext::Store*)ctx->arguments;
- cmdSS << "STORE " << cmd->sequence << " " << cmd->itemNames << " " << cmd->values;
- break;
- }
- case IMAPContext::IMAP_COPY: {
- IMAPContext::Copy* cmd = (IMAPContext::Copy*)ctx->arguments;
- cmdSS << "COPY " << "\"" << cmd->mailbox << "\" " << cmd->sequence;
- break;
- }
- case IMAPContext::IMAP_UID: {
- IMAPContext::UId* cmd = (IMAPContext::UId*)ctx->arguments;
- cmdSS << "UID " << cmd->command << " " << cmd->arguments;
- break;
- }
- case IMAPContext::IMAP_XEXTENSION: {
- IMAPContext::XExtension* cmd = (IMAPContext::XExtension*)ctx->arguments;
- cmdSS << cmd->command << " " << cmd->arguments;
- break;
+ case IMAPContext::IMAP_SELECT: {
+ IMAPContext::Select* cmd = (IMAPContext::Select*)ctx->arguments;
+ cmdSS << "SELECT " << "\"" << cmd->mailbox << "\"";
+ break;
+ }
+ case IMAPContext::IMAP_EXAMINE: {
+ IMAPContext::Examine* cmd = (IMAPContext::Examine*)ctx->arguments;
+ cmdSS << "EXAMINE " << "\"" << cmd->mailbox << "\"";
+ break;
+ }
+ case IMAPContext::IMAP_CREATE: {
+ IMAPContext::Create* cmd = (IMAPContext::Create*)ctx->arguments;
+ cmdSS << "CREATE " << "\"" << cmd->mailbox << "\"";
+ break;
+ }
+ case IMAPContext::IMAP_DELETE: {
+ IMAPContext::Delete* cmd = (IMAPContext::Delete*)ctx->arguments;
+ cmdSS << "DELETE " << "\"" << cmd->mailbox << "\"";
+ break;
+ }
+ case IMAPContext::IMAP_RENAME: {
+ IMAPContext::Rename* cmd = (IMAPContext::Rename*)ctx->arguments;
+ cmdSS << "RENAME " << "\"" << cmd->mailbox << "\" \"" << cmd->newName << "\"";
+ break;
+ }
+ case IMAPContext::IMAP_SUBSCRIBE: {
+ IMAPContext::Subscribe* cmd = (IMAPContext::Subscribe*)ctx->arguments;
+ cmdSS << "SUBSCRIBE " << "\"" << cmd->mailbox << "\"";
+ break;
+ }
+ case IMAPContext::IMAP_UNSUBSCRIBE: {
+ IMAPContext::Unsubscribe* cmd = (IMAPContext::Unsubscribe*)ctx->arguments;
+ cmdSS << "UNSUBSCRIBE " << "\"" << cmd->mailbox << "\"";
+ break;
+ }
+ case IMAPContext::IMAP_LIST: {
+ IMAPContext::List* cmd = (IMAPContext::List*)ctx->arguments;
+ cmdSS << "LIST " << "\"" << cmd->mailbox << "\" \"" << cmd->refName << "\"";
+ break;
+ }
+ case IMAPContext::IMAP_LSUB: {
+ IMAPContext::LSub* cmd = (IMAPContext::LSub*)ctx->arguments;
+ cmdSS << "LSUB " << "\"" << cmd->mailbox << "\" \"" << cmd->refName << "\"";
+ break;
+ }
+ case IMAPContext::IMAP_STATUS: {
+ IMAPContext::Status* cmd = (IMAPContext::Status*)ctx->arguments;
+ cmdSS << "STATUS " << "\"" << cmd->mailbox << "\" (" << cmd->dataItems << ")";
+ break;
+ }
+ case IMAPContext::IMAP_APPEND: {
+ IMAPContext::Append* cmd = (IMAPContext::Append*)ctx->arguments;
+ cmdSS << "APPEND " << "\"" << cmd->mailbox << "\" (" << cmd->flags << ") {" << cmd->dateTime << "}";
+ break;
+ }
+ case IMAPContext::IMAP_CHECK: {
+ cmdSS << "CHECK";
+ break;
+ }
+ case IMAPContext::IMAP_CLOSE: {
+ cmdSS << "CLOSE";
+ break;
+ }
+ case IMAPContext::IMAP_EXPUNGE: {
+ cmdSS << "EXPUNGE";
+ break;
+ }
+ case IMAPContext::IMAP_SEARCH: {
+ IMAPContext::Search* cmd = (IMAPContext::Search*)ctx->arguments;
+ cmdSS << "SEARCH ";
+ if (cmd->charSet.size() > 0) {
+ cmdSS << "CHARSET " << cmd->charSet << " ";
}
- default:
- break;
+ cmdSS << cmd->criteria;
+ break;
+ }
+ case IMAPContext::IMAP_FETCH: {
+ IMAPContext::Fetch* cmd = (IMAPContext::Fetch*)ctx->arguments;
+ cmdSS << "FETCH " << cmd->sequence << " " << cmd->itemNames;
+ break;
+ }
+ case IMAPContext::IMAP_STORE: {
+ IMAPContext::Store* cmd = (IMAPContext::Store*)ctx->arguments;
+ cmdSS << "STORE " << cmd->sequence << " " << cmd->itemNames << " " << cmd->values;
+ break;
+ }
+ case IMAPContext::IMAP_COPY: {
+ IMAPContext::Copy* cmd = (IMAPContext::Copy*)ctx->arguments;
+ cmdSS << "COPY " << "\"" << cmd->mailbox << "\" " << cmd->sequence;
+ break;
+ }
+ case IMAPContext::IMAP_UID: {
+ IMAPContext::UId* cmd = (IMAPContext::UId*)ctx->arguments;
+ cmdSS << "UID " << cmd->command << " " << cmd->arguments;
+ break;
+ }
+ case IMAPContext::IMAP_XEXTENSION: {
+ IMAPContext::XExtension* cmd = (IMAPContext::XExtension*)ctx->arguments;
+ cmdSS << cmd->command << " " << cmd->arguments;
+ break;
+ }
+ default:
+ break;
}
curl_easy_setopt(_curl, CURLOPT_CUSTOMREQUEST, cmdSS.str().c_str());
CURLcode res = curl_easy_perform(_curl);
-
+
/* Check for errors */
if(res != CURLE_OK) {
LOG(ERROR) << "curl_easy_perform() failed: " << curl_easy_strerror(res);
@@ -441,30 +441,30 @@ void IMAPInvoker::process(IMAPContext* ctx) {
#if 0
switch (ctx->command) {
- case IMAPContext::LIST:
- e.data = parseListReponse(ctx->inContent.str());
- break;
- default:
- break;
+ case IMAPContext::LIST:
+ e.data = parseListReponse(ctx->inContent.str());
+ break;
+ default:
+ break;
}
#endif
-
+
e.name = ctx->sendReq.name + ".success";
e.data.compound["raw"] = Data(ctx->inContent.str(), Data::VERBATIM);
returnEvent(e);
}
-
+
/* Always cleanup */
curl_easy_cleanup(_curl);
-
+
}
}
#if 0
Data IMAPInvoker::parseListReponse(const std::string& response) {
Data data;
-
+
std::string line;
std::istringstream inSS(response);
@@ -472,14 +472,14 @@ Data IMAPInvoker::parseListReponse(const std::string& response) {
// individual lines
size_t lastSep = line.find_last_of("\" ");
if (lastSep != std::string::npos) {
-
+
}
}
-
+
return data;
}
#endif
-
+
void IMAPInvoker::cancel(const std::string sendId) {
}
@@ -487,7 +487,7 @@ void IMAPInvoker::invoke(const InvokeRequest& req) {
Event::getParam(req.params, "username", _username);
Event::getParam(req.params, "password", _password);
Event::getParam(req.params, "server", _server);
-
+
_isRunning = true;
_thread = new tthread::thread(IMAPInvoker::run, this);
}