aboutsummaryrefslogtreecommitdiffstats
path: root/src/platform.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/platform.cpp')
-rw-r--r--src/platform.cpp40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/platform.cpp b/src/platform.cpp
index d1d23de0..ff6a9965 100644
--- a/src/platform.cpp
+++ b/src/platform.cpp
@@ -22,6 +22,10 @@
//
#include "vmime/platform.hpp"
+#include "vmime/config.hpp"
+
+#include "vmime/platforms/posix/posixHandler.hpp"
+#include "vmime/platforms/windows/windowsHandler.hpp"
namespace vmime
@@ -36,4 +40,40 @@ platform::handler::~handler()
}
+// static
+ref <platform::handler> platform::getDefaultHandler()
+{
+
+#if VMIME_PLATFORM_IS_WINDOWS
+ return vmime::create <platforms::windows::windowsHandler>();
+#elif VMIME_PLATFORM_IS_POSIX
+ return vmime::create <platforms::posix::posixHandler>();
+#else
+ return NULL;
+#endif
+
+}
+
+
+// static
+ref <platform::handler> platform::getHandler()
+{
+ // If a custom platform handler is installed, return it
+ if (sm_handler)
+ return sm_handler;
+
+ // Else, use the default handler for this platform
+ ref <handler> defaultHandler = getDefaultHandler();
+
+ if (defaultHandler)
+ {
+ sm_handler = defaultHandler;
+ return sm_handler;
+ }
+
+ // Oops... no platform handler!
+ throw exceptions::no_platform_handler();
+}
+
+
} // vmime