diff options
Diffstat (limited to 'src/messaging/imap')
-rw-r--r-- | src/messaging/imap/IMAPConnection.cpp | 72 | ||||
-rw-r--r-- | src/messaging/imap/IMAPStore.cpp | 49 |
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 |