summaryrefslogtreecommitdiff
path: root/ACE/ace/QoS/QoS_Session_Impl.h
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/ace/QoS/QoS_Session_Impl.h')
-rw-r--r--ACE/ace/QoS/QoS_Session_Impl.h265
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..a9ea0287540
--- /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.inl"
+#endif /* __ACE_INLINE__ */
+
+#include /**/ "ace/post.h"
+#endif /* ACE_QOS_SESSION_IMPL_H */