summaryrefslogtreecommitdiffstats
path: root/src/uscxml/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'src/uscxml/plugins')
-rw-r--r--src/uscxml/plugins/DataModel.h209
-rw-r--r--src/uscxml/plugins/EventHandler.h125
-rw-r--r--src/uscxml/plugins/ExecutableContent.h105
-rw-r--r--src/uscxml/plugins/IOProcessor.h71
-rw-r--r--src/uscxml/plugins/Invoker.h76
-rw-r--r--src/uscxml/plugins/datamodel/null/NULLDataModel.cpp12
-rw-r--r--src/uscxml/plugins/datamodel/promela/PromelaParser.cpp2
-rw-r--r--src/uscxml/plugins/element/file/FileElement.cpp1
-rw-r--r--src/uscxml/plugins/element/respond/RespondElement.cpp1
-rw-r--r--src/uscxml/plugins/invoker/calendar/CalendarInvoker.cpp2
-rw-r--r--src/uscxml/plugins/invoker/expect/ExpectInvoker.cpp2
-rw-r--r--src/uscxml/plugins/invoker/ffmpeg/FFMPEGInvoker.cpp2
-rw-r--r--src/uscxml/plugins/invoker/heartbeat/HeartbeatInvoker.cpp1
-rw-r--r--src/uscxml/plugins/invoker/heartbeat/HeartbeatInvoker.h1
-rw-r--r--src/uscxml/plugins/invoker/im/IMInvoker.cpp2
-rw-r--r--src/uscxml/plugins/invoker/smtp/SMTPInvoker.cpp1
-rw-r--r--src/uscxml/plugins/invoker/xhtml/XHTMLInvoker.h1
-rw-r--r--src/uscxml/plugins/ioprocessor/comet/CometIOProcessor.cpp1
18 files changed, 609 insertions, 6 deletions
diff --git a/src/uscxml/plugins/DataModel.h b/src/uscxml/plugins/DataModel.h
new file mode 100644
index 0000000..57d4b14
--- /dev/null
+++ b/src/uscxml/plugins/DataModel.h
@@ -0,0 +1,209 @@
+/**
+ * @file
+ * @author 2012-2014 Stefan Radomski (stefan.radomski@cs.tu-darmstadt.de)
+ * @copyright Simplified BSD
+ *
+ * @cond
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the FreeBSD license as published by the FreeBSD
+ * project.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * You should have received a copy of the FreeBSD license along with this
+ * program. If not, see <http://www.opensource.org/licenses/bsd-license>.
+ * @endcond
+ */
+
+#ifndef DATAMODEL_H_F1F776F9
+#define DATAMODEL_H_F1F776F9
+
+#include "uscxml/Common.h"
+#include "uscxml/plugins/EventHandler.h"
+
+#include <list>
+#include <boost/shared_ptr.hpp>
+#include <string>
+#include <sstream>
+
+#include "DOM/Document.hpp"
+
+namespace uscxml {
+
+class InterpreterImpl;
+
+class USCXML_API DataModelImpl {
+public:
+ virtual ~DataModelImpl() {}
+ virtual boost::shared_ptr<DataModelImpl> create(InterpreterImpl* interpreter) = 0;
+ virtual std::list<std::string> getNames() = 0;
+
+ virtual bool validate(const std::string& location, const std::string& schema) = 0;
+ virtual void setEvent(const Event& event) = 0;
+ virtual Data getStringAsData(const std::string& content) = 0;
+
+ size_t replaceExpressions(std::string& content);
+
+ // foreach
+ virtual uint32_t getLength(const std::string& expr) = 0;
+ virtual void setForeach(const std::string& item,
+ const std::string& array,
+ const std::string& index,
+ uint32_t iteration) = 0;
+ virtual void pushContext() = 0;
+ virtual void popContext() = 0;
+
+ virtual void eval(const Arabica::DOM::Element<std::string>& scriptElem,
+ const std::string& expr) = 0;
+
+ virtual std::string evalAsString(const std::string& expr) = 0;
+
+ virtual bool evalAsBool(const Arabica::DOM::Node<std::string>& scriptNode,
+ const std::string& expr) = 0;
+ virtual bool evalAsBool(const std::string& expr) {
+ return evalAsBool(Arabica::DOM::Node<std::string>(), expr);
+ }
+
+ virtual bool isDeclared(const std::string& expr) = 0;
+
+ virtual void assign(const Arabica::DOM::Element<std::string>& assignElem,
+ const Arabica::DOM::Node<std::string>& node,
+ const std::string& content) = 0;
+ virtual void assign(const std::string& location, const Data& data) = 0;
+
+ virtual void init(const Arabica::DOM::Element<std::string>& dataElem,
+ const Arabica::DOM::Node<std::string>& node,
+ const std::string& content) = 0;
+ virtual void init(const std::string& location, const Data& data) = 0;
+
+ virtual void setInterpreter(InterpreterImpl* interpreter) {
+ _interpreter = interpreter;
+ }
+
+ virtual std::string andExpressions(std::list<std::string>) {
+ return "";
+ }
+
+ static void throwErrorExecution(const std::string& cause);
+ static void throwErrorPlatform(const std::string& cause);
+
+ // we need it public for various static functions
+protected:
+ InterpreterImpl* _interpreter;
+};
+
+class USCXML_API DataModel {
+public:
+ DataModel() : _impl() {}
+ DataModel(const boost::shared_ptr<DataModelImpl> impl) : _impl(impl) { }
+ DataModel(const DataModel& other) : _impl(other._impl) { }
+ virtual ~DataModel() {};
+
+ operator bool() const {
+ return _impl;
+ }
+ bool operator< (const DataModel& other) const {
+ return _impl < other._impl;
+ }
+ bool operator==(const DataModel& other) const {
+ return _impl == other._impl;
+ }
+ bool operator!=(const DataModel& other) const {
+ return _impl != other._impl;
+ }
+ DataModel& operator= (const DataModel& other) {
+ _impl = other._impl;
+ return *this;
+ }
+
+ virtual std::list<std::string> getNames() {
+ return _impl->getNames();
+ }
+
+ virtual bool validate(const std::string& location, const std::string& schema) {
+ return _impl->validate(location, schema);
+ }
+ virtual void setEvent(const Event& event) {
+ return _impl->setEvent(event);
+ }
+ virtual Data getStringAsData(const std::string& content) {
+ return _impl->getStringAsData(content);
+ }
+
+ virtual void pushContext() {
+ return _impl->pushContext();
+ }
+ virtual void popContext() {
+ return _impl->popContext();
+ }
+
+ virtual void eval(const Arabica::DOM::Element<std::string>& scriptElem,
+ const std::string& expr) {
+ return _impl->eval(scriptElem, expr);
+ }
+ virtual std::string evalAsString(const std::string& expr) {
+ return _impl->evalAsString(expr);
+ }
+ virtual bool evalAsBool(const std::string& expr) {
+ return _impl->evalAsBool(expr);
+ }
+ virtual bool evalAsBool(const Arabica::DOM::Node<std::string>& scriptNode,
+ const std::string& expr) {
+ return _impl->evalAsBool(scriptNode, expr);
+ }
+
+ virtual uint32_t getLength(const std::string& expr) {
+ return _impl->getLength(expr);
+ }
+ virtual void setForeach(const std::string& item,
+ const std::string& array,
+ const std::string& index,
+ uint32_t iteration) {
+ return _impl->setForeach(item, array, index, iteration);
+ }
+
+ virtual void assign(const Arabica::DOM::Element<std::string>& assignElem,
+ const Arabica::DOM::Node<std::string>& node,
+ const std::string& content) {
+ return _impl->assign(assignElem, node, content);
+ }
+ virtual void assign(const std::string& location, const Data& data) {
+ return _impl->assign(location, data);
+ }
+
+ virtual void init(const Arabica::DOM::Element<std::string>& dataElem,
+ const Arabica::DOM::Node<std::string>& node,
+ const std::string& content) {
+ return _impl->init(dataElem, node, content);
+ }
+ virtual void init(const std::string& location, const Data& data) {
+ return _impl->init(location, data);
+ }
+
+ virtual bool isDeclared(const std::string& expr) {
+ return _impl->isDeclared(expr);
+ }
+
+ size_t replaceExpressions(std::string& content) {
+ return _impl->replaceExpressions(content);
+ }
+
+ std::string andExpressions(std::list<std::string> expressions) {
+ return _impl->andExpressions(expressions);
+ }
+
+ virtual void setInterpreter(InterpreterImpl* interpreter) {
+ _impl->setInterpreter(interpreter);
+ }
+
+protected:
+ boost::shared_ptr<DataModelImpl> _impl;
+};
+
+
+}
+
+
+#endif /* end of include guard: DATAMODEL_H_F1F776F9 */
diff --git a/src/uscxml/plugins/EventHandler.h b/src/uscxml/plugins/EventHandler.h
new file mode 100644
index 0000000..d30feb9
--- /dev/null
+++ b/src/uscxml/plugins/EventHandler.h
@@ -0,0 +1,125 @@
+/**
+ * @file
+ * @author 2012-2014 Stefan Radomski (stefan.radomski@cs.tu-darmstadt.de)
+ * @copyright Simplified BSD
+ *
+ * @cond
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the FreeBSD license as published by the FreeBSD
+ * project.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * You should have received a copy of the FreeBSD license along with this
+ * program. If not, see <http://www.opensource.org/licenses/bsd-license>.
+ * @endcond
+ */
+
+#ifndef EVENTHANDLER_H_2801243E
+#define EVENTHANDLER_H_2801243E
+
+#include "uscxml/Common.h"
+
+#include <list>
+#include <boost/shared_ptr.hpp>
+#include <string>
+#include <sstream>
+
+#include "DOM/Document.hpp"
+#include "uscxml/messages/SendRequest.h"
+
+namespace uscxml {
+
+class InterpreterImpl;
+
+class USCXML_API EventHandlerImpl {
+public:
+ virtual ~EventHandlerImpl() {}
+
+ virtual std::list<std::string> getNames() = 0;
+
+ virtual void setInterpreter(InterpreterImpl* interpreter) {
+ _interpreter = interpreter;
+ }
+ void setInvokeId(const std::string& invokeId) {
+ _invokeId = invokeId;
+ }
+ void setType(const std::string& type) {
+ _type = type;
+ }
+
+ void setElement(const Arabica::DOM::Element<std::string>& element) {
+ _element = element;
+ }
+
+ Arabica::DOM::Element<std::string> getElement() {
+ return _element;
+ }
+
+ virtual Data getDataModelVariables() = 0;
+ virtual void send(const SendRequest& req) = 0;
+
+ virtual void runOnMainThread() {};
+ void returnEvent(Event& event);
+ void returnErrorExecution(const std::string&);
+ void returnErrorPlatform(const std::string&);
+
+protected:
+ InterpreterImpl* _interpreter;
+ Arabica::DOM::Element<std::string> _element;
+ std::string _invokeId;
+ std::string _type;
+
+};
+
+class USCXML_API EventHandler {
+public:
+ EventHandler() : _impl() {}
+ EventHandler(boost::shared_ptr<EventHandlerImpl> const impl) : _impl(impl) { }
+ EventHandler(const EventHandler& other) : _impl(other._impl) { }
+ virtual ~EventHandler() {};
+
+ virtual std::list<std::string> getNames() {
+ return _impl->getNames();
+ }
+
+ virtual Data getDataModelVariables() const {
+ return _impl->getDataModelVariables();
+ };
+ virtual void send(const SendRequest& req) {
+ return _impl->send(req);
+ };
+ virtual void runOnMainThread() {
+ return _impl->runOnMainThread();
+ }
+
+ void setInterpreter(InterpreterImpl* interpreter) {
+ _impl->setInterpreter(interpreter);
+ }
+ void setInvokeId(const std::string& invokeId) {
+ _impl->setInvokeId(invokeId);
+ }
+ void setType(const std::string& type) {
+ _impl->setType(type);
+ }
+
+ void setElement(const Arabica::DOM::Element<std::string>& element) {
+ _impl->setElement(element);
+ }
+
+ Arabica::DOM::Element<std::string> getElement() {
+ return _impl->getElement();
+ }
+
+protected:
+ boost::shared_ptr<EventHandlerImpl> _impl;
+ friend class InterpreterImpl;
+};
+
+
+}
+
+
+#endif /* end of include guard: EVENTHANDLER_H_2801243E */
diff --git a/src/uscxml/plugins/ExecutableContent.h b/src/uscxml/plugins/ExecutableContent.h
new file mode 100644
index 0000000..6f4335b
--- /dev/null
+++ b/src/uscxml/plugins/ExecutableContent.h
@@ -0,0 +1,105 @@
+/**
+ * @file
+ * @author 2012-2014 Stefan Radomski (stefan.radomski@cs.tu-darmstadt.de)
+ * @copyright Simplified BSD
+ *
+ * @cond
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the FreeBSD license as published by the FreeBSD
+ * project.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * You should have received a copy of the FreeBSD license along with this
+ * program. If not, see <http://www.opensource.org/licenses/bsd-license>.
+ * @endcond
+ */
+
+#ifndef EXECUTABLECONTENT_H_1E028A2D
+#define EXECUTABLECONTENT_H_1E028A2D
+
+#include "uscxml/Common.h"
+#include <boost/shared_ptr.hpp>
+#include <string>
+#include <sstream>
+#include "DOM/Document.hpp"
+
+namespace uscxml {
+
+class InterpreterImpl;
+
+class USCXML_API ExecutableContentImpl {
+public:
+ ExecutableContentImpl() {};
+ virtual ~ExecutableContentImpl() {};
+ virtual boost::shared_ptr<ExecutableContentImpl> create(InterpreterImpl* interpreter) = 0;
+
+ virtual void setInterpreter(InterpreterImpl* interpreter) {
+ _interpreter = interpreter;
+ }
+
+ virtual std::string getLocalName() = 0; ///< The name of the element.
+ virtual std::string getNamespace() {
+ return "http://www.w3.org/2005/07/scxml"; ///< The namespace of the element.
+ }
+ virtual void enterElement(const Arabica::DOM::Node<std::string>& node) = 0; ///< Invoked when entering the element as part of evaluating executable content.
+ virtual void exitElement(const Arabica::DOM::Node<std::string>& node) = 0; ///< Invoked when exiting the element as part of evaluating executable content.
+ virtual bool processChildren() = 0; ///< Whether or not the interpreter should process this elements children.
+
+protected:
+ InterpreterImpl* _interpreter;
+};
+
+class USCXML_API ExecutableContent {
+public:
+ ExecutableContent() : _impl() {}
+ ExecutableContent(boost::shared_ptr<ExecutableContentImpl> const impl) : _impl(impl) { }
+ ExecutableContent(const ExecutableContent& other) : _impl(other._impl) { }
+ virtual ~ExecutableContent() {};
+
+ operator bool() const {
+ return _impl;
+ }
+ bool operator< (const ExecutableContent& other) const {
+ return _impl < other._impl;
+ }
+ bool operator==(const ExecutableContent& other) const {
+ return _impl == other._impl;
+ }
+ bool operator!=(const ExecutableContent& other) const {
+ return _impl != other._impl;
+ }
+ ExecutableContent& operator= (const ExecutableContent& other) {
+ _impl = other._impl;
+ return *this;
+ }
+
+ void setInterpreter(InterpreterImpl* interpreter) {
+ _impl->setInterpreter(interpreter);
+ }
+
+ std::string getLocalName() {
+ return _impl->getLocalName();
+ }
+ std::string getNamespace() {
+ return _impl->getNamespace();
+ }
+ void enterElement(const Arabica::DOM::Node<std::string>& node) {
+ return _impl->enterElement(node);
+ }
+ void exitElement(const Arabica::DOM::Node<std::string>& node) {
+ return _impl->exitElement(node);
+ }
+ bool processChildren() {
+ return _impl->processChildren();
+ }
+protected:
+ boost::shared_ptr<ExecutableContentImpl> _impl;
+
+};
+
+}
+
+#endif /* end of include guard: EXECUTABLECONTENT_H_1E028A2D */
diff --git a/src/uscxml/plugins/IOProcessor.h b/src/uscxml/plugins/IOProcessor.h
new file mode 100644
index 0000000..79f759b
--- /dev/null
+++ b/src/uscxml/plugins/IOProcessor.h
@@ -0,0 +1,71 @@
+/**
+ * @file
+ * @author 2012-2014 Stefan Radomski (stefan.radomski@cs.tu-darmstadt.de)
+ * @copyright Simplified BSD
+ *
+ * @cond
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the FreeBSD license as published by the FreeBSD
+ * project.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * You should have received a copy of the FreeBSD license along with this
+ * program. If not, see <http://www.opensource.org/licenses/bsd-license>.
+ * @endcond
+ */
+
+#ifndef IOPROCESSOR_H_CF4F4135
+#define IOPROCESSOR_H_CF4F4135
+
+#include "uscxml/Common.h"
+#include "uscxml/plugins/EventHandler.h"
+
+namespace uscxml {
+
+class InterpreterImpl;
+
+class USCXML_API IOProcessorImpl : public EventHandlerImpl {
+public:
+ IOProcessorImpl() {};
+ virtual ~IOProcessorImpl() {};
+ virtual boost::shared_ptr<IOProcessorImpl> create(InterpreterImpl* interpreter) = 0;
+};
+
+class USCXML_API IOProcessor : public EventHandler {
+public:
+ IOProcessor() : _impl() {}
+ IOProcessor(boost::shared_ptr<IOProcessorImpl> const impl) : EventHandler(impl), _impl(impl) { }
+ IOProcessor(const IOProcessor& other) : EventHandler(other._impl), _impl(other._impl) { }
+ virtual ~IOProcessor() {};
+
+ operator bool() const {
+ return _impl;
+ }
+ bool operator< (const IOProcessor& other) const {
+ return _impl < other._impl;
+ }
+ bool operator==(const IOProcessor& other) const {
+ return _impl == other._impl;
+ }
+ bool operator!=(const IOProcessor& other) const {
+ return _impl != other._impl;
+ }
+ IOProcessor& operator= (const IOProcessor& other) {
+ _impl = other._impl;
+ EventHandler::_impl = _impl;
+ return *this;
+ }
+
+protected:
+ boost::shared_ptr<IOProcessorImpl> _impl;
+ friend class InterpreterImpl;
+};
+
+
+}
+
+
+#endif /* end of include guard: IOPROCESSOR_H_CF4F4135 */
diff --git a/src/uscxml/plugins/Invoker.h b/src/uscxml/plugins/Invoker.h
new file mode 100644
index 0000000..c967331
--- /dev/null
+++ b/src/uscxml/plugins/Invoker.h
@@ -0,0 +1,76 @@
+/**
+ * @file
+ * @author 2012-2014 Stefan Radomski (stefan.radomski@cs.tu-darmstadt.de)
+ * @copyright Simplified BSD
+ *
+ * @cond
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the FreeBSD license as published by the FreeBSD
+ * project.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * You should have received a copy of the FreeBSD license along with this
+ * program. If not, see <http://www.opensource.org/licenses/bsd-license>.
+ * @endcond
+ */
+
+#ifndef INVOKER_H_CAC11892
+#define INVOKER_H_CAC11892
+
+
+#include "uscxml/Common.h"
+#include "uscxml/plugins/EventHandler.h"
+#include "uscxml/messages/InvokeRequest.h"
+
+namespace uscxml {
+
+class InterpreterImpl;
+
+class USCXML_API InvokerImpl : public EventHandlerImpl {
+public:
+ virtual ~InvokerImpl() {}
+ virtual void invoke(const InvokeRequest& req) = 0;
+ virtual boost::shared_ptr<InvokerImpl> create(InterpreterImpl* interpreter) = 0;
+};
+
+class USCXML_API Invoker : public EventHandler {
+public:
+ Invoker() : _impl() {}
+ Invoker(boost::shared_ptr<InvokerImpl> const impl) : EventHandler(impl), _impl(impl) { }
+ Invoker(const Invoker& other) : EventHandler(other._impl), _impl(other._impl) { }
+ virtual ~Invoker() {};
+
+ operator bool() const {
+ return _impl;
+ }
+ bool operator< (const Invoker& other) const {
+ return _impl < other._impl;
+ }
+ bool operator==(const Invoker& other) const {
+ return _impl == other._impl;
+ }
+ bool operator!=(const Invoker& other) const {
+ return _impl != other._impl;
+ }
+ Invoker& operator= (const Invoker& other) {
+ _impl = other._impl;
+ EventHandler::_impl = _impl;
+ return *this;
+ }
+
+ virtual void invoke(InvokeRequest& req) {
+ _impl->invoke(req);
+ }
+
+protected:
+ boost::shared_ptr<InvokerImpl> _impl;
+};
+
+
+}
+
+
+#endif /* end of include guard: INVOKER_H_CAC11892 */
diff --git a/src/uscxml/plugins/datamodel/null/NULLDataModel.cpp b/src/uscxml/plugins/datamodel/null/NULLDataModel.cpp
index 9594d5e..98d2dda 100644
--- a/src/uscxml/plugins/datamodel/null/NULLDataModel.cpp
+++ b/src/uscxml/plugins/datamodel/null/NULLDataModel.cpp
@@ -112,23 +112,23 @@ bool NULLDataModel::evalAsBool(const Arabica::DOM::Node<std::string>& node, cons
// split at comma
std::stringstream ss(trimmedExpr.substr(start, end - start));
- std::vector<std::string> stateExprs;
+ std::list<std::string> stateExprs;
std::string item;
while(std::getline(ss, item, ',')) {
stateExprs.push_back(item);
}
- for (unsigned int i = 0; i < stateExprs.size(); i++) {
+ for (std::list<std::string>::const_iterator stateIter = stateExprs.begin(); stateIter != stateExprs.end(); stateIter++) {
// remove ticks
- size_t start = stateExprs[i].find_first_of("'");
- size_t end = stateExprs[i].find_last_of("'");
+ size_t start = stateIter->find_first_of("'");
+ size_t end = stateIter->find_last_of("'");
std::string stateName;
if (start != std::string::npos && end != std::string::npos && start < end) {
start++;
- stateName = stateExprs[i].substr(start, end - start);
+ stateName = stateIter->substr(start, end - start);
} else {
- stateName = stateExprs[i];
+ stateName = *stateIter;
}
if (_interpreter->isInState(stateName)) {
diff --git a/src/uscxml/plugins/datamodel/promela/PromelaParser.cpp b/src/uscxml/plugins/datamodel/promela/PromelaParser.cpp
index a1edcae..cd3bbaf 100644
--- a/src/uscxml/plugins/datamodel/promela/PromelaParser.cpp
+++ b/src/uscxml/plugins/datamodel/promela/PromelaParser.cpp
@@ -20,6 +20,8 @@
#include "PromelaParser.h"
#include "parser/promela.tab.hpp"
+#include <iostream>
+
struct yy_buffer_state;
typedef yy_buffer_state *YY_BUFFER_STATE;
extern YY_BUFFER_STATE promela__scan_buffer(char *, size_t, void*);
diff --git a/src/uscxml/plugins/element/file/FileElement.cpp b/src/uscxml/plugins/element/file/FileElement.cpp
index 899c2d6..606cddc 100644
--- a/src/uscxml/plugins/element/file/FileElement.cpp
+++ b/src/uscxml/plugins/element/file/FileElement.cpp
@@ -22,6 +22,7 @@
#include <stdio.h>
#include <vector>
#include <boost/algorithm/string.hpp>
+#include "uscxml/messages/Blob.h"
#include "uscxml/DOMUtils.h"
diff --git a/src/uscxml/plugins/element/respond/RespondElement.cpp b/src/uscxml/plugins/element/respond/RespondElement.cpp
index 3eb55ed..06d89a7 100644
--- a/src/uscxml/plugins/element/respond/RespondElement.cpp
+++ b/src/uscxml/plugins/element/respond/RespondElement.cpp
@@ -19,6 +19,7 @@
#include "RespondElement.h"
#include "uscxml/plugins/invoker/http/HTTPServletInvoker.h"
+#include "uscxml/server/InterpreterServlet.h"
#include "uscxml/DOMUtils.h"
#include <glog/logging.h>
diff --git a/src/uscxml/plugins/invoker/calendar/CalendarInvoker.cpp b/src/uscxml/plugins/invoker/calendar/CalendarInvoker.cpp
index c6194c5..849845e 100644
--- a/src/uscxml/plugins/invoker/calendar/CalendarInvoker.cpp
+++ b/src/uscxml/plugins/invoker/calendar/CalendarInvoker.cpp
@@ -20,6 +20,8 @@
#include <boost/algorithm/string.hpp>
#include "CalendarInvoker.h"
+#include "uscxml/concurrency/eventqueue/DelayedEventQueue.h"
+
#include <glog/logging.h>
#ifdef BUILD_AS_PLUGINS
diff --git a/src/uscxml/plugins/invoker/expect/ExpectInvoker.cpp b/src/uscxml/plugins/invoker/expect/ExpectInvoker.cpp
index 7d66b10..22c7942 100644
--- a/src/uscxml/plugins/invoker/expect/ExpectInvoker.cpp
+++ b/src/uscxml/plugins/invoker/expect/ExpectInvoker.cpp
@@ -20,6 +20,8 @@
#include "ExpectInvoker.h"
#include <glog/logging.h>
+#include "uscxml/concurrency/eventqueue/DelayedEventQueue.h"
+
#ifdef BUILD_AS_PLUGINS
#include <Pluma/Connector.hpp>
#endif
diff --git a/src/uscxml/plugins/invoker/ffmpeg/FFMPEGInvoker.cpp b/src/uscxml/plugins/invoker/ffmpeg/FFMPEGInvoker.cpp
index b6203d4..4a0ec00 100644
--- a/src/uscxml/plugins/invoker/ffmpeg/FFMPEGInvoker.cpp
+++ b/src/uscxml/plugins/invoker/ffmpeg/FFMPEGInvoker.cpp
@@ -20,6 +20,8 @@
#include <boost/algorithm/string.hpp>
#include "FFMPEGInvoker.h"
+#include "uscxml/messages/Blob.h"
+
#include <glog/logging.h>
#include <libavutil/imgutils.h>
diff --git a/src/uscxml/plugins/invoker/heartbeat/HeartbeatInvoker.cpp b/src/uscxml/plugins/invoker/heartbeat/HeartbeatInvoker.cpp
index cee98bd..f8b4904 100644
--- a/src/uscxml/plugins/invoker/heartbeat/HeartbeatInvoker.cpp
+++ b/src/uscxml/plugins/invoker/heartbeat/HeartbeatInvoker.cpp
@@ -20,6 +20,7 @@
#include <boost/algorithm/string.hpp>
#include "HeartbeatInvoker.h"
+#include "uscxml/DOMUtils.h"
#include <glog/logging.h>
#ifdef BUILD_AS_PLUGINS
diff --git a/src/uscxml/plugins/invoker/heartbeat/HeartbeatInvoker.h b/src/uscxml/plugins/invoker/heartbeat/HeartbeatInvoker.h
index a024181..ba4e9ef 100644
--- a/src/uscxml/plugins/invoker/heartbeat/HeartbeatInvoker.h
+++ b/src/uscxml/plugins/invoker/heartbeat/HeartbeatInvoker.h
@@ -21,6 +21,7 @@
#define HEARTBEATINVOKER_H_W09J90F0
#include <uscxml/Interpreter.h>
+#include "uscxml/concurrency/eventqueue/DelayedEventQueue.h"
#ifdef BUILD_AS_PLUGINS
#include "uscxml/plugins/Plugins.h"
diff --git a/src/uscxml/plugins/invoker/im/IMInvoker.cpp b/src/uscxml/plugins/invoker/im/IMInvoker.cpp
index d086a20..08d6a03 100644
--- a/src/uscxml/plugins/invoker/im/IMInvoker.cpp
+++ b/src/uscxml/plugins/invoker/im/IMInvoker.cpp
@@ -23,6 +23,8 @@
#include "uscxml/DOMUtils.h"
#include <boost/algorithm/string.hpp>
+#include "uscxml/concurrency/eventqueue/DelayedEventQueue.h"
+
#ifdef BUILD_AS_PLUGINS
#include <Pluma/Connector.hpp>
#endif
diff --git a/src/uscxml/plugins/invoker/smtp/SMTPInvoker.cpp b/src/uscxml/plugins/invoker/smtp/SMTPInvoker.cpp
index 1248733..2a974ab 100644
--- a/src/uscxml/plugins/invoker/smtp/SMTPInvoker.cpp
+++ b/src/uscxml/plugins/invoker/smtp/SMTPInvoker.cpp
@@ -26,6 +26,7 @@
#include <boost/algorithm/string.hpp>
#include "uscxml/UUID.h"
+#include "uscxml/messages/Blob.h"
namespace uscxml {
diff --git a/src/uscxml/plugins/invoker/xhtml/XHTMLInvoker.h b/src/uscxml/plugins/invoker/xhtml/XHTMLInvoker.h
index b1a9c5a..773df31 100644
--- a/src/uscxml/plugins/invoker/xhtml/XHTMLInvoker.h
+++ b/src/uscxml/plugins/invoker/xhtml/XHTMLInvoker.h
@@ -21,6 +21,7 @@
#define XHTMLINVOKER_H_W09J90F0
#include <uscxml/Interpreter.h>
+#include "uscxml/server/HTTPServer.h"
#ifdef BUILD_AS_PLUGINS
#include "uscxml/plugins/Plugins.h"
diff --git a/src/uscxml/plugins/ioprocessor/comet/CometIOProcessor.cpp b/src/uscxml/plugins/ioprocessor/comet/CometIOProcessor.cpp
index 007bd6f..9ec5c00 100644
--- a/src/uscxml/plugins/ioprocessor/comet/CometIOProcessor.cpp
+++ b/src/uscxml/plugins/ioprocessor/comet/CometIOProcessor.cpp
@@ -22,6 +22,7 @@
#include "uscxml/Message.h"
#include <iostream>
+#include <DOM/io/Stream.hpp>
#include <string.h>
#ifdef BUILD_AS_PLUGINS