summaryrefslogtreecommitdiff
path: root/ace/ATM_Addr.h
blob: 360ef6eaa0765474211088fc2aabf6008d30b3e5 (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
/* -*- C++ -*- */
// $Id$

// ============================================================================
//
// = LIBRARY
//    ace
//
// = FILENAME
//    ATM_Addr.h
//
// = AUTHOR
//    Joe Hoffert <joeh@cs.wustl.edu>
//
// ============================================================================

#ifndef ACE_ATM_ADDR_H
#define ACE_ATM_ADDR_H

#include "ace/ACE.h"

#if !defined (ACE_LACKS_PRAGMA_ONCE)
# pragma once
#endif /* ACE_LACKS_PRAGMA_ONCE */

#include "ace/Addr.h"

#if defined (ACE_HAS_FORE_ATM_XTI)
typedef ATMSAPAddress ATM_Addr;
#elif defined (ACE_HAS_FORE_ATM_WS2)
#include <winsock2.h>
#include <ws2atm.h>
typedef struct sockaddr_atm ATM_Addr;
#else
typedef int ATM_Addr;
#endif /* ACE_HAS_FORE_ATM_XTI/ACE_HAS_FORE_ATM_WS2 */

class ACE_Export ACE_ATM_Addr : public ACE_Addr
{
  // = TITLE
  //    Defines the ATM domain address family address format.
public:
  // Constants used for ATM options
  static const long LINE_RATE;
  static const int OPT_FLAGS_CPID;
  static const int OPT_FLAGS_PMP;
  static const int DEFAULT_SELECTOR;

  // = Initialization methods.
  ACE_ATM_Addr (unsigned char selector = DEFAULT_SELECTOR);
  // Default constructor.

  ACE_ATM_Addr (const ACE_ATM_Addr &,
                unsigned char selector = DEFAULT_SELECTOR);
  // Copy constructor.

  ACE_ATM_Addr (const ATM_Addr *,
                unsigned char selector = DEFAULT_SELECTOR);
  // Creates an <ACE_ATM_Addr> from an ATMSAPAddress structure. This
  // is vendor specific (FORE systems). May need to change when other
  // vendors are supported.

  ACE_ATM_Addr (const ASYS_TCHAR sap[],
                unsigned char selector = DEFAULT_SELECTOR);
  // Initializes an <ACE_ATM_Addr> from the <sap> which can be
  // "atm-address" (e.g.,
  // "47.0005.80.ffe100.0000.f20f.2200.0020480694f9.00") or "hostname"
  // (e.g., "frisbee.cs.wustl.edu").

  ~ACE_ATM_Addr (void);
  // Default dtor.

  // = Initialization methods (useful after object construction).
  void init (unsigned char selector = DEFAULT_SELECTOR);
  // Default initialization for non-address values (e.g.,
  // t_atm_sap_addr.SVE_tag_addr, t_atm_sap_addr.SVE_tag_selector)

  int set (const ACE_ATM_Addr &,
           unsigned char selector = DEFAULT_SELECTOR);
  // Initializes from another <ACE_ATM_Addr>.

  int set (const ATM_Addr *,
           unsigned char selector = DEFAULT_SELECTOR);
  // Initializes an <ACE_ATM_Addr> from an ATMSAPAddress
  // structure. This is vendor specific (FORE systems). May need to
  // change when other vendors are supported.

  int set (const ASYS_TCHAR sap[],
           unsigned char selector = DEFAULT_SELECTOR);
  // Initializes an <ACE_ATM_Addr> from the <sap> which can be
  // "atm-address" (e.g.,
  // "47.0005.80.ffe100.0000.f20f.2200.0020480694f9.00") or "hostname"
  // (e.g., "frisbee.cs.wustl.edu").

  virtual int string_to_addr (const ASYS_TCHAR sap[]);
  // Initializes an <ACE_ATM_Addr> from the <sap> which can be
  // "atm-address" (e.g.,
  // "47.0005.80.ffe100.0000.f20f.2200.0020480694f9.00") or "hostname"
  // (e.g., "frisbee.cs.wustl.edu").

  virtual int addr_to_string (ASYS_TCHAR addr[], 
                              size_t addrlen) const;
  // Return the character representation of the ATM address (e.g.,
  // "47.0005.80.ffe100.0000.f20f.2200.0020480694f9.00") storing it in
  // the <addr> (which is assumed to be <addrlen> bytes long). This
  // version is reentrant.  Returns -1 if the <addrlen> of the <addr>
  // is too small, else 0.

  const ASYS_TCHAR *addr_to_string (void) const;
  // Return the character representation of the ATM address (e.g.,
  // "47.0005.80.ffe100.0000.f20f.2200.0020480694f9.00"). Returns -1
  // if the <size> of the <buffer> is too small, else 0.(This version
  // is non-reentrant since it returns a pointer to a static data
  // area.)

  virtual void *get_addr (void) const;
  // Return a pointer to the underlying network address.

  virtual void set_addr (void *, int);
  // Set a pointer to the address.

  unsigned char get_selector (void) const;
  // Return the selector for network address.

  void set_selector (unsigned char);
  // Set the selector for the network address.

  int operator == (const ACE_ATM_Addr &SAP) const;
  // Compare two addresses for equality.  The addresses are considered
  // equal if they contain the same ATM address.  Q: Is there any
  // other check for equality needed for ATM?

  int operator != (const ACE_ATM_Addr &SAP) const;
  // Compare two addresses for inequality.

  void dump (void) const;
  // Dump the state of an object.

  ACE_ALLOC_HOOK_DECLARE;
  // Declare the dynamic allocation hooks.

//   char *construct_options (ACE_HANDLE fd,
//                            int qos_kb,
//                            int flags,
//                            long *optsize);
//   // Construct options for ATM connections

protected:

private:
  ATM_Addr atm_addr_;
};

#if defined (__ACE_INLINE__)
#include "ace/ATM_Addr.i"
#endif /* __ACE_INLINE__ */

#endif /* ACE_ATM_ADDR_H */