QoS_Session_Factory.cpp

Go to the documentation of this file.
00001 // QoS_Session_Factory.cpp
00002 // $Id: QoS_Session_Factory.cpp 79134 2007-07-31 18:23:50Z johnnyw $
00003 
00004 #include "QoS_Session_Factory.h"
00005 #include "QoS_Session_Impl.h"
00006 #include "ace/Log_Msg.h"
00007 
00008 ACE_RCSID(ace, QoS_Session_Factory, "$Id: QoS_Session_Factory.cpp 79134 2007-07-31 18:23:50Z johnnyw $")
00009 
00010 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00011 
00012 ACE_ALLOC_HOOK_DEFINE(ACE_QoS_Session_Factory)
00013 
00014 #if defined(ACE_HAS_RAPI)
00015 const enum ACE_QoS_Session_Factory::ACE_QoS_Session_Type
00016   ACE_QoS_Session_Factory::ACE_DEFAULT_QOS_SESSION = ACE_QoS_Session_Factory::ACE_RAPI_SESSION;
00017 #elif defined(ACE_HAS_WINSOCK2_GQOS)
00018   const enum ACE_QoS_Session_Factory::ACE_QoS_Session_Type
00019   ACE_QoS_Session_Factory::ACE_DEFAULT_QOS_SESSION = ACE_QoS_Session_Factory::ACE_GQOS_SESSION;
00020 #else
00021 #  error "QoS type not supported.  Cannot build."
00022 #endif /* ACE_HAS_RAPI */
00023 
00024 ACE_QoS_Session_Factory::ACE_QoS_Session_Factory (void)
00025 {
00026   ACE_TRACE ("ACE_QoS_Session_Factory::ACE_QoS_Session_Factory");
00027 }
00028 
00029 ACE_QoS_Session_Factory::~ACE_QoS_Session_Factory (void)
00030 {
00031   ACE_TRACE ("ACE_QoS_Session_Factory::~ACE_QoS_Session_Factory");
00032 }
00033 
00034 // Create a QoS session of the given type (RAPI or GQoS).
00035 ACE_QoS_Session *
00036 ACE_QoS_Session_Factory::create_session (ACE_QoS_Session_Type qos_session_type)
00037 {
00038 
00039   ACE_QoS_Session * qos_session = 0;
00040 
00041 #if defined (ACE_HAS_RAPI)
00042   if (qos_session_type == ACE_RAPI_SESSION)
00043     ACE_NEW_RETURN (qos_session,
00044                     ACE_RAPI_Session,
00045                     0);
00046 #endif /* ACE_HAS_RAPI */
00047 
00048   if (qos_session_type == ACE_GQOS_SESSION)
00049     ACE_NEW_RETURN (qos_session,
00050                     ACE_GQoS_Session,
00051                     0);
00052 
00053   if (this->add_session (qos_session) == -1)
00054     {
00055       delete qos_session;
00056       ACE_ERROR_RETURN ((LM_ERROR,
00057                          ACE_TEXT ("Error in adding session\n")),
00058                         0);
00059     }
00060 
00061   return qos_session;
00062 }
00063 
00064 // Destroy the QoS Session.
00065 int
00066 ACE_QoS_Session_Factory::destroy_session (ACE_QoS_Session *qos_session)
00067 {
00068 
00069   if ((qos_session != 0) && (this->remove_session (qos_session) == -1))
00070     ACE_ERROR_RETURN ((LM_ERROR,
00071                        ACE_TEXT ("Error in destroying session\n")),
00072                       -1);
00073 
00074   return 0;
00075 }
00076 
00077 // Add a session to the set of sessions created by this factory. This is a
00078 // private method called by the create_session ().
00079 int
00080 ACE_QoS_Session_Factory::add_session (ACE_QoS_Session *qos_session)
00081 {
00082   if (this->qos_session_set_.insert (qos_session) != 0)
00083     ACE_ERROR_RETURN ((LM_ERROR,
00084                        ACE_TEXT ("Error in adding a new session")
00085                        ACE_TEXT ("to the session set\n")),
00086                       -1);
00087 
00088   return 0;
00089 }
00090 
00091 // Remove a session from the set of sessions created by this factory. This is
00092 // a private method called by the destroy_session ().
00093 int
00094 ACE_QoS_Session_Factory::remove_session (ACE_QoS_Session *qos_session)
00095 {
00096   if (this->qos_session_set_.remove (qos_session) == -1)
00097     ACE_ERROR_RETURN ((LM_ERROR,
00098                        ACE_TEXT ("Error in removing a session")
00099                        ACE_TEXT ("from the session set\n")),
00100                       -1);
00101 
00102   return 0;
00103 }
00104 
00105 ACE_END_VERSIONED_NAMESPACE_DECL

Generated on Sun Jan 27 13:03:37 2008 for ACE_QoS by doxygen 1.3.6