diff options
author | Vincent Richard <[email protected]> | 2004-10-05 10:28:21 +0000 |
---|---|---|
committer | Vincent Richard <[email protected]> | 2004-10-05 10:28:21 +0000 |
commit | a3229a051381e8f6b6df0fd423186166d20c898f (patch) | |
tree | 29dab66e608651e50a9b6f4bf9ce28f2ee897c87 /src/messaging/serviceFactory.cpp | |
download | vmime-a3229a051381e8f6b6df0fd423186166d20c898f.tar.gz vmime-a3229a051381e8f6b6df0fd423186166d20c898f.zip |
Initial import.
Diffstat (limited to 'src/messaging/serviceFactory.cpp')
-rw-r--r-- | src/messaging/serviceFactory.cpp | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/src/messaging/serviceFactory.cpp b/src/messaging/serviceFactory.cpp new file mode 100644 index 00000000..09bced01 --- /dev/null +++ b/src/messaging/serviceFactory.cpp @@ -0,0 +1,102 @@ +// +// VMime library (http://vmime.sourceforge.net) +// Copyright (C) 2002-2004 Vincent Richard <[email protected]> +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// 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. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +// + +#include "serviceFactory.hpp" +#include "service.hpp" + +#include "../exception.hpp" +#include "../config.hpp" + +#include "builtinServices.inl" + + +namespace vmime { +namespace messaging { + + +serviceFactory::serviceFactory() +{ +} + + +serviceFactory::~serviceFactory() +{ + for (ProtoMap::iterator it = m_protoMap.begin() ; it != m_protoMap.end() ; ++it) + delete ((*it).second); +} + + +service* serviceFactory::create + (session& sess, const string& protocol, authenticator* auth) +{ + ProtoMap::const_iterator pos = m_protoMap.find(toLower(protocol)); + + if (pos != m_protoMap.end()) + { + return ((*pos).second)->create(sess, auth); + } + else + { + throw exceptions::no_service_available(); + return (NULL); + } +} + + +service* serviceFactory::create + (session& sess, const url& u, authenticator* auth) +{ + service* serv = create(sess, u.protocol(), auth); + + sess.properties()[serv->infos().propertyPrefix() + "server.address"] = u.host(); + + if (u.port() != url::UNSPECIFIED_PORT) + sess.properties()[serv->infos().propertyPrefix() + "server.port"] = u.port(); + + if (!u.path().empty()) + sess.properties()[serv->infos().propertyPrefix() + "server.path"] = u.path(); + + if (!u.username().empty()) + { + sess.properties()[serv->infos().propertyPrefix() + "auth.username"] = u.username(); + sess.properties()[serv->infos().propertyPrefix() + "auth.password"] = u.password(); + } + + return (serv); +} + + +const serviceFactory::registeredService& serviceFactory::operator[] + (const string& protocol) const +{ + ProtoMap::const_iterator pos = m_protoMap.find(toLower(protocol)); + + if (pos != m_protoMap.end()) + { + return *((*pos).second); + } + else + { + throw exceptions::no_service_available(); + } +} + + +} // messaging +} // vmime |