summaryrefslogtreecommitdiff
path: root/ace/QoS/QoS_Session.h
blob: b1919d9e71e1592e56f58b0128e6d962db2c76c4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
/* -*- 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 */

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

};

#include "ace/post.h"
#endif /* ACE_QOS_SESSION_H */