From 681297e10b666e13cc463f6fbb16236f36c3266c Mon Sep 17 00:00:00 2001 From: Vincent Richard Date: Tue, 12 Jul 2005 22:28:02 +0000 Subject: Reference counting and smart pointers. --- src/messaging/session.cpp | 50 +++++++++++++++++++++++------------------------ 1 file changed, 24 insertions(+), 26 deletions(-) (limited to 'src/messaging/session.cpp') diff --git a/src/messaging/session.cpp b/src/messaging/session.cpp index 35c188a2..12aca36d 100644 --- a/src/messaging/session.cpp +++ b/src/messaging/session.cpp @@ -33,6 +33,12 @@ session::session() } +session::session(const session& sess) + : object(), m_props(sess.m_props) +{ +} + + session::session(const propertySet& props) : m_props(props) { @@ -44,71 +50,63 @@ session::~session() } -transport* session::getTransport(authenticator* auth) +ref session::getTransport(ref auth) { return (getTransport(m_props["transport.protocol"], auth)); } -transport* session::getTransport(const string& protocol, authenticator* auth) +ref session::getTransport(const string& protocol, ref auth) { - service* sv = serviceFactory::getInstance()->create(this, protocol, auth); + ref sess = thisRef().dynamicCast (); + ref sv = serviceFactory::getInstance()->create(sess, protocol, auth); if (sv->getType() != service::TYPE_TRANSPORT) - { - delete (sv); throw exceptions::no_service_available(); - } - return static_cast(sv); + return sv.staticCast (); } -transport* session::getTransport(const utility::url& url, authenticator* auth) +ref session::getTransport(const utility::url& url, ref auth) { - service* sv = serviceFactory::getInstance()->create(this, url, auth); + ref sess = thisRef().dynamicCast (); + ref sv = serviceFactory::getInstance()->create(sess, url, auth); if (sv->getType() != service::TYPE_TRANSPORT) - { - delete (sv); throw exceptions::no_service_available(); - } - return static_cast(sv); + return sv.staticCast (); } -store* session::getStore(authenticator* auth) +ref session::getStore(ref auth) { return (getStore(m_props["store.protocol"], auth)); } -store* session::getStore(const string& protocol, authenticator* auth) +ref session::getStore(const string& protocol, ref auth) { - service* sv = serviceFactory::getInstance()->create(this, protocol, auth); + ref sess = thisRef().dynamicCast (); + ref sv = serviceFactory::getInstance()->create(sess, protocol, auth); if (sv->getType() != service::TYPE_STORE) - { - delete (sv); throw exceptions::no_service_available(); - } - return static_cast(sv); + return sv.staticCast (); } -store* session::getStore(const utility::url& url, authenticator* auth) +ref session::getStore(const utility::url& url, ref auth) { - service* sv = serviceFactory::getInstance()->create(this, url, auth); + ref sess = thisRef().dynamicCast (); + ref sv = serviceFactory::getInstance()->create(sess, url, auth); if (sv->getType() != service::TYPE_STORE) - { - delete (sv); throw exceptions::no_service_available(); - } - return static_cast(sv); + return sv.staticCast (); } -- cgit v1.2.3