aboutsummaryrefslogtreecommitdiffstats
path: root/src/messaging/imap
diff options
context:
space:
mode:
Diffstat (limited to 'src/messaging/imap')
-rw-r--r--src/messaging/imap/IMAPConnection.cpp72
-rw-r--r--src/messaging/imap/IMAPStore.cpp49
2 files changed, 96 insertions, 25 deletions
diff --git a/src/messaging/imap/IMAPConnection.cpp b/src/messaging/imap/IMAPConnection.cpp
index 0f5934c8..37a132de 100644
--- a/src/messaging/imap/IMAPConnection.cpp
+++ b/src/messaging/imap/IMAPConnection.cpp
@@ -28,6 +28,15 @@
#include <sstream>
+// Helpers for service properties
+#define GET_PROPERTY(type, prop) \
+ (m_store->getInfos().getPropertyValue <type>(getSession(), \
+ dynamic_cast <const IMAPStore::_infos&>(m_store->getInfos()).getProperties().prop))
+#define HAS_PROPERTY(prop) \
+ (m_store->getInfos().hasProperty(getSession(), \
+ dynamic_cast <const IMAPStore::_infos&>(m_store->getInfos()).getProperties().prop))
+
+
namespace vmime {
namespace messaging {
namespace imap {
@@ -60,28 +69,26 @@ void IMAPConnection::connect()
m_state = STATE_NONE;
m_hierarchySeparator = '\0';
- const string address = m_store->getSession()->getProperties()[m_store->getInfos().getPropertyPrefix() + "server.address"];
- const port_t port = m_store->getSession()->getProperties().getProperty(m_store->getInfos().getPropertyPrefix() + "server.port", m_store->getInfos().getDefaultPort());
+ const string address = GET_PROPERTY(string, PROPERTY_SERVER_ADDRESS);
+ const port_t port = GET_PROPERTY(port_t, PROPERTY_SERVER_PORT);
// Create the time-out handler
- if (m_store->getSession()->getProperties().hasProperty
- (m_store->getInfos().getPropertyPrefix() + "timeout.factory"))
+ if (HAS_PROPERTY(PROPERTY_TIMEOUT_FACTORY))
{
timeoutHandlerFactory* tof = platformDependant::getHandler()->
- getTimeoutHandlerFactory(m_store->getSession()->getProperties()
- [m_store->getInfos().getPropertyPrefix() + "timeout.factory"]);
+ getTimeoutHandlerFactory(GET_PROPERTY(string, PROPERTY_TIMEOUT_FACTORY));
m_timeoutHandler = tof->create();
}
// Create and connect the socket
- socketFactory* sf = platformDependant::getHandler()->getSocketFactory
- (m_store->getSession()->getProperties().getProperty
- (m_store->getInfos().getPropertyPrefix() + "server.socket-factory", string("default")));
+ socketFactory* sf = platformDependant::getHandler()->
+ getSocketFactory(GET_PROPERTY(string, PROPERTY_SERVER_SOCKETFACTORY));
m_socket = sf->create();
m_socket->connect(address, port);
+
delete (m_tag);
m_tag = new IMAPTag();
@@ -260,6 +267,53 @@ IMAPParser::response* IMAPConnection::readResponse(IMAPParser::literalHandler* l
}
+const IMAPConnection::ProtocolStates IMAPConnection::state() const
+{
+ return (m_state);
+}
+
+
+void IMAPConnection::setState(const ProtocolStates state)
+{
+ m_state = state;
+}
+
+const char IMAPConnection::hierarchySeparator() const
+{
+ return (m_hierarchySeparator);
+}
+
+
+const IMAPTag* IMAPConnection::getTag() const
+{
+ return (m_tag);
+}
+
+
+const IMAPParser* IMAPConnection::getParser() const
+{
+ return (m_parser);
+}
+
+
+const IMAPStore* IMAPConnection::getStore() const
+{
+ return (m_store);
+}
+
+
+IMAPStore* IMAPConnection::getStore()
+{
+ return (m_store);
+}
+
+
+session* IMAPConnection::getSession()
+{
+ return (m_store->getSession());
+}
+
+
} // imap
} // messaging
} // vmime
diff --git a/src/messaging/imap/IMAPStore.cpp b/src/messaging/imap/IMAPStore.cpp
index 81eab9a7..07b22351 100644
--- a/src/messaging/imap/IMAPStore.cpp
+++ b/src/messaging/imap/IMAPStore.cpp
@@ -230,15 +230,14 @@ const int IMAPStore::getCapabilities() const
CAPABILITY_RENAME_FOLDER |
CAPABILITY_ADD_MESSAGE |
CAPABILITY_COPY_MESSAGE |
- CAPABILITY_DELETE_MESSAGE |
+ CAPABILITY_DELETE_MESSAGE |
CAPABILITY_PARTIAL_FETCH |
CAPABILITY_MESSAGE_FLAGS |
- CAPABILITY_EXTRACT_PART);
+ CAPABILITY_EXTRACT_PART);
}
-
// Service infos
IMAPStore::_infos IMAPStore::sm_infos;
@@ -256,39 +255,57 @@ const serviceInfos& IMAPStore::getInfos() const
}
-const port_t IMAPStore::_infos::getDefaultPort() const
+const string IMAPStore::_infos::getPropertyPrefix() const
{
- return (143);
+ return "store.imap.";
}
-const string IMAPStore::_infos::getPropertyPrefix() const
+const IMAPStore::_infos::props& IMAPStore::_infos::getProperties() const
{
- return "store.imap.";
+ static props p =
+ {
+ // IMAP-specific options
+ // (none)
+
+ // Common properties
+ property(serviceInfos::property::AUTH_USERNAME, serviceInfos::property::FLAG_REQUIRED),
+ property(serviceInfos::property::AUTH_PASSWORD, serviceInfos::property::FLAG_REQUIRED),
+
+ property(serviceInfos::property::SERVER_ADDRESS, serviceInfos::property::FLAG_REQUIRED),
+ property(serviceInfos::property::SERVER_PORT, "143"),
+ property(serviceInfos::property::SERVER_SOCKETFACTORY),
+
+ property(serviceInfos::property::TIMEOUT_FACTORY)
+ };
+
+ return p;
}
-const std::vector <string> IMAPStore::_infos::getAvailableProperties() const
+const std::vector <serviceInfos::property> IMAPStore::_infos::getAvailableProperties() const
{
- std::vector <string> list;
+ std::vector <property> list;
+ const props& p = getProperties();
// IMAP-specific options
- //list.push_back("auth.mechanism");
+ // (none)
// Common properties
- list.push_back("auth.username");
- list.push_back("auth.password");
+ list.push_back(p.PROPERTY_AUTH_USERNAME);
+ list.push_back(p.PROPERTY_AUTH_PASSWORD);
- list.push_back("server.address");
- list.push_back("server.port");
- list.push_back("server.socket-factory");
+ list.push_back(p.PROPERTY_SERVER_ADDRESS);
+ list.push_back(p.PROPERTY_SERVER_PORT);
+ list.push_back(p.PROPERTY_SERVER_SOCKETFACTORY);
- list.push_back("timeout.factory");
+ list.push_back(p.PROPERTY_TIMEOUT_FACTORY);
return (list);
}
+
} // imap
} // messaging
} // vmime