summaryrefslogtreecommitdiff
path: root/ace/ATM_Addr.h
blob: 076fbff550ad28ad7aba155c812d04aae7ea043d (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
/* -*- 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 int ATMSAPAddress;
#endif /* ACE_HAS_FORE_ATM_XTI */

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 SELECTOR;

  // = Initialization methods.
  ACE_ATM_Addr (void);
  // Default constructor.

  ACE_ATM_Addr (const ACE_ATM_Addr &);
  // Copy constructor.

  ACE_ATM_Addr (const ATMSAPAddress *);
  // 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[]);
  // 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 (void);
  // 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 &);
  // Initializes from another <ACE_ATM_Addr>.

  int set (const ATMSAPAddress *);
  // 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[]);
  // 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.

  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.

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

protected:
  static int get_local_address (ACE_HANDLE handle,
                                u_char addr[]);
  // Get the local ATM address.

private:
  ATMSAPAddress atm_addr_;
  // Underlying representation - this may be very
  // vendor-implementation specific. Other vendors (besides FORE) may
  // name and define this structure differently. We can work around
  // that problem when we run into other vendors supporting XTI on top
  // of ATM. Is this class specific to XTI?  Not sure.
};

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

#endif /* ACE_ATM_ADDR_H */