summaryrefslogtreecommitdiff
path: root/ACE/ace/QoS/QoS_Session.h
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/ace/QoS/QoS_Session.h')
-rw-r--r--ACE/ace/QoS/QoS_Session.h183
1 files changed, 183 insertions, 0 deletions
diff --git a/ACE/ace/QoS/QoS_Session.h b/ACE/ace/QoS/QoS_Session.h
new file mode 100644
index 00000000000..3e08bbc69ce
--- /dev/null
+++ b/ACE/ace/QoS/QoS_Session.h
@@ -0,0 +1,183 @@
+/* -*- C++ -*- */
+
+//=============================================================================
+/**
+ * @file QoS_Session.h
+ *
+ * $Id$
+ *
+ * @author Vishal Kachroo <vishal@cs.wustl.edu>
+ */
+//=============================================================================
+
+
+#ifndef ACE_QOS_SESSION_H
+#define ACE_QOS_SESSION_H
+#include /**/ "ace/pre.h"
+
+#include "ACE_QoS_Export.h"
+#include "ace/INET_Addr.h"
+#include "ace/OS_QoS.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+
+class ACE_SOCK;
+class ACE_QoS_Manager;
+
+typedef int ACE_Protocol_ID;
+// IPPROTO_UDP or IPPROTO_TCP.
+
+/**
+ * @class ACE_QoS_Session
+ *
+ * @brief A QoS Session object.
+ *
+ * This class defines the interface for a QoS Session. It abstracts the
+ * notion of QoS on different platforms and presents a simple, easy-to-use
+ * API. Current [RAPI,GQoS] and future implementations will conform to this
+ * interface.
+ */
+class ACE_QoS_Export ACE_QoS_Session
+{
+
+public:
+
+ enum RSVP_Event_Type
+ {
+ RSVP_PATH_EVENT,
+ RSVP_RESV_EVENT,
+ RSVP_RESV_CONFIRM,
+ RSVP_RESV_ERROR,
+ RSVP_PATH_ERROR
+ };
+
+ /// A flag to indicate if this endpoint is a sender or a receiver or
+ /// both.
+ enum ACE_End_Point_Type
+ {
+ ACE_QOS_SENDER,
+ ACE_QOS_RECEIVER,
+ ACE_QOS_BOTH
+ };
+
+
+ /// to shutup g++.
+ virtual ~ACE_QoS_Session (void) {};
+
+ /// Open a QoS session [dest IP, dest port, Protocol ID].
+ virtual int open (ACE_INET_Addr dest_addr,
+ ACE_Protocol_ID protocol_id) = 0;
+
+ /// Close the QoS Session.
+ virtual int close (void) = 0;
+
+ /// Returns the QoS in the current session.
+ virtual ACE_QoS qos (void) const = 0;
+
+ /// Set QoS for the current session. The qos manager 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) = 0;
+
+ /**
+ * 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) = 0;
+
+ /**
+ * This is called from handle_qos () method of the the QoS Event
+ * Handler. Invoking this method is an indication of a QoS event
+ * occurring, that may have resulted in a change of QoS for the
+ * underlying session. This method updates the QoS object associated
+ * with this session.
+ */
+ virtual int update_qos (void) = 0;
+
+ /// Get/Set methods for the flags_.
+ virtual ACE_End_Point_Type flags (void) const = 0;
+ virtual void flags (const ACE_End_Point_Type flags) = 0;
+
+ /// Get the session id.
+ virtual int session_id (void) const = 0;
+
+ /// Set the session id.
+ virtual void session_id (const int session_id) = 0;
+
+ /// Get the file descriptor on which RSVP events will occur.
+ virtual ACE_HANDLE rsvp_events_handle (void) = 0;
+
+ virtual void rsvp_event_type (RSVP_Event_Type event_type) = 0;
+ ///Set the RAPI event that last occured
+
+ virtual RSVP_Event_Type rsvp_event_type (void) = 0;
+ ///Get the RAPI event that last occured
+
+
+ /// Get the destination address for this session.
+ virtual ACE_INET_Addr dest_addr (void) const = 0;
+
+ /// Set the destination address for this session.
+ virtual void dest_addr (const ACE_INET_Addr &dest_addr) = 0;
+
+ /// Get the source port for this session.
+ virtual u_short source_port (void) const = 0;
+
+ /// Set the source port for this session.
+ virtual void source_port (const u_short &source_port) = 0;
+
+ //Set the source host
+ virtual ACE_INET_Addr* source_addr (void) const = 0;
+
+ /// Set the source port for this session.
+ virtual void source_addr (ACE_INET_Addr* source_addr) = 0;
+
+
+ /**
+ * Returns the version of the underlying RSVP implementation. Is
+ * meaningful only when the underlying implementation has
+ * versioning.
+ */
+ virtual int version (void) = 0;
+
+protected:
+
+ /// Source port if this is a Sender session. Used for rapi_sender ().
+ u_short source_port_;
+
+ /// session id for the session.
+ int session_id_;
+
+ /// Destination address for this session.
+ ACE_INET_Addr dest_addr_;
+
+ /// Source address for this session.
+ ACE_INET_Addr* src_addr_;
+
+ /// Is this a TCP or a UDP session.
+ ACE_Protocol_ID protocol_id_;
+
+ /// QoS for this session.
+ ACE_QoS qos_;
+
+ /// Specifies if this is a sending/receiving/both session.
+ ACE_End_Point_Type flags_;
+
+ RSVP_Event_Type rsvp_event_type_;
+ //Has the last rsvp event that occured
+
+};
+
+ACE_END_VERSIONED_NAMESPACE_DECL
+
+#include /**/ "ace/post.h"
+#endif /* ACE_QOS_SESSION_H */