diff options
Diffstat (limited to 'ACE/ace/QoS/QoS_Session_Impl.h')
-rw-r--r-- | ACE/ace/QoS/QoS_Session_Impl.h | 265 |
1 files changed, 265 insertions, 0 deletions
diff --git a/ACE/ace/QoS/QoS_Session_Impl.h b/ACE/ace/QoS/QoS_Session_Impl.h new file mode 100644 index 00000000000..193c537a74c --- /dev/null +++ b/ACE/ace/QoS/QoS_Session_Impl.h @@ -0,0 +1,265 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file QoS_Session_Impl.h + * + * $Id$ + * + * @author Vishal Kachroo <vishal@cs.wustl.edu> + */ +//============================================================================= + + +#ifndef ACE_QOS_SESSION_IMPL_H +#define ACE_QOS_SESSION_IMPL_H +#include /**/ "ace/pre.h" + +#include "ace/QoS/QoS_Session.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + + +#if defined (ACE_HAS_RAPI) +#include "rapi_lib.h" + +#define DEFAULT_SOURCE_SENDER_PORT 10001 + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_RAPI_Session + * + * @brief A RAPI QoS session object. + * + * This class is a RAPI (RSVP API, an implementation of RSVP on UNIX) + * implementation of the ACE_QoS_Session interface. + */ +class ACE_QoS_Export ACE_RAPI_Session : public ACE_QoS_Session +{ + +public: + + /// Default destructor. + ~ACE_RAPI_Session (void); + + /// Error handling for RSVP callback + static int rsvp_error; + + /// Open a RAPI QoS session [dest IP, dest port, Protocol ID]. + virtual int open (ACE_INET_Addr dest_addr, + ACE_Protocol_ID protocol_id); + + /// Close the RAPI QoS Session. + virtual int close (void); + + /// Returns the QoS for this RAPI session. + virtual ACE_QoS qos (void) const; + + /// Set QoS for this RAPI session. The socket parameter is used to confirm if + /// this QoS session was subscribed to by the socket. + virtual int qos (ACE_SOCK *socket, + ACE_QoS_Manager *qos_manager, + const ACE_QoS &ace_qos); + + /** + * Sets the QoS for this session object to ace_qos. Does not interfere with the + * QoS in the underlying socket. This call is useful to update the QoS object + * when the underlying socket QoS is being set through a mechanism other than + * the previous qos () method e.g. inside the dgram_mcast.subscribe () where the + * QoS for the socket is set through ACE_OS::join_leaf (). + */ + virtual void qos (const ACE_QoS &ace_qos); + + /** + * Calls rapi_dispatch () that further triggers the call back function. + * It is a mechanism of updating the QoS for this session asynchronously, as + * RSVP events occur. + */ + virtual int update_qos (void); + + /// Get methods for the flags_. + virtual ACE_End_Point_Type flags (void) const; + + /// Set methods for the flags_. + virtual void flags (const ACE_End_Point_Type flags); + + /// Get the RAPI session id. + virtual int session_id (void) const; + + /// Set the RAPI session id. + virtual void session_id (const int session_id); + + /// Get the RAPI file descriptor for RSVP events. + virtual ACE_HANDLE rsvp_events_handle (void); + + ///Set the RAPI event that last occured + virtual void rsvp_event_type (RSVP_Event_Type event_type); + + ///Get the RAPI event that last occured + virtual RSVP_Event_Type rsvp_event_type (void); + + /// Get the destination address for this RAPI session. + virtual ACE_INET_Addr dest_addr (void) const; + + /// Set the destination address for this RAPI session. + virtual void dest_addr (const ACE_INET_Addr &dest_addr); + + /// Get the source port for this session. + virtual u_short source_port (void) const; + + /// Set the source port for this session. + virtual void source_port (const u_short &source_port); + + //Set the source host + virtual ACE_INET_Addr* source_addr (void) const; + + /// Set the source port for this session. + virtual void source_addr (ACE_INET_Addr* source_addr); + + /// RAPI version. Returned value = 100 * major-version + minor-version. + virtual int version (); + + /// The factory is a friend so it can create this object through + /// the only private constructor. + friend class ACE_QoS_Session_Factory; + +private: + + /// Default constuctor. Constructor is defined private so that only + /// the friend factory can instantiate this class. + ACE_RAPI_Session (void); + + /// Construct a simplified RAPI Sender TSpec object + /// from an ACE_Flow_Spec object. Used internally by this class. + rapi_tspec_t *init_tspec_simplified (const ACE_Flow_Spec &flow_spec); + + /// Construct a simplified RAPI Receiver FlowSpec object + /// from an ACE_Flow_Spec object. Used internally by the class. + rapi_flowspec_t *init_flowspec_simplified(const ACE_Flow_Spec &flow_spec); + + /// Set sending QoS for this RAPI session. + int sending_qos (const ACE_QoS &ace_qos); + + /// Set receiving QoS for this RAPI session. + int receiving_qos (const ACE_QoS &ace_qos); + +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_HAS_RAPI */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class ACE_GQoS_Session + * + * @brief A GQoS session object. + * + * This class is a GQoS (Generic QoS, an implementation of RSVP on + * Win2K) implementation of the ACE_QoS_Session interface. + */ +class ACE_QoS_Export ACE_GQoS_Session : public ACE_QoS_Session +{ + +public: + + /// Default destructor. + ~ACE_GQoS_Session (void); + + /// This is a session ID generator. It does a lot more than expected + /// from an int!. + static int GQoS_session_id; + + /// Open a GQoS session [dest IP, dest port, Protocol ID]. + virtual int open (ACE_INET_Addr dest_addr, + ACE_Protocol_ID protocol_id); + + /// Close the GQoS Session. + virtual int close (void); + + /// Returns the QoS for this GQoS session. + virtual ACE_QoS qos (void) const; + + /// Set QoS for this GQoS session. The socket parameter is used to confirm if + /// this QoS session was subscribed to by the socket. + virtual int qos (ACE_SOCK *socket, + ACE_QoS_Manager *qos_manager, + const ACE_QoS &ace_qos); + + /** + * Sets the QoS for this session object to ace_qos. Does not interfere with the + * QoS in the underlying socket. This call is useful to update the QoS object + * when the underlying socket QoS is being set through a mechanism other than + * the previous qos () method e.g. inside the dgram_mcast.subscribe () where the + * QoS for the socket is set through ACE_OS::join_leaf (). + */ + virtual void qos (const ACE_QoS &ace_qos); + + /// Calls the ioctl (ACE_SIO_GET_QOS). It is a mechanism of updating the + /// QoS for this session asynchronously, as RSVP events occur. + virtual int update_qos (void); + + /// Get/Set methods for the flags_. + virtual ACE_End_Point_Type flags (void) const; + virtual void flags (const ACE_End_Point_Type flags); + + /// Get the destination address for this GQoS session. + virtual ACE_INET_Addr dest_addr (void) const; + + /// Set the destination address for this GQoS session. + virtual void dest_addr (const ACE_INET_Addr &dest_addr); + + /// Get the source port for this session. + virtual u_short source_port (void) const; + + /// Set the source port for this session. + virtual void source_port (const u_short &source_port); + + //Set the source host + virtual ACE_INET_Addr* source_addr (void) const; + + /// Set the source port for this session. + virtual void source_addr (ACE_INET_Addr* source_addr); + + /// Get the GQoS session id. + virtual int session_id (void) const; + + /// Set the GQoS session id. + virtual void session_id (const int session_id); + + /// Get the file descriptor of the underlying socket. + virtual ACE_HANDLE rsvp_events_handle (void); + + virtual void rsvp_event_type (RSVP_Event_Type event_type); + ///Set the RAPI event that last occured + + virtual RSVP_Event_Type rsvp_event_type (void); + ///Get the RAPI event that last occured + + /// GQoS version. + virtual int version (); + + /// The factory is a friend so it can create this object through + /// the only private constructor. + friend class ACE_QoS_Session_Factory; + +private: + + /// Default constructor. Constructor is defined private so that only + /// the friend factory can instantiate this class. + ACE_GQoS_Session (void); + +}; + +ACE_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "QoS_Session_Impl.i" +#endif /* __ACE_INLINE__ */ + +#include /**/ "ace/post.h" +#endif /* ACE_QOS_SESSION_IMPL_H */ |