summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/HTIOP/HTIOP_Endpoint.h
blob: 435328da5c53aa8c552d7d16b1f421a3fc91f257 (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
// This may look like C, but it's really -*- C++ -*-


//=============================================================================
/**
 *  @file     HTIOP_Endpoint.h
 *
 *  $Id$
 *
 *   HTIOP implementation of PP Framework Endpoint interface.
 *
 *
 *  @author  Marina Spivak <marina@cs.wustl.edu>
 */
//=============================================================================


#ifndef HTIOP_ENDPOINT_H
#define HTIOP_ENDPOINT_H
#include /**/ "ace/pre.h"

#include "HTIOP_Export.h"

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

#include "ace/HTBP/HTBP_Addr.h"

#include "tao/Endpoint.h"
#include "tao/ORB.h"

namespace TAO
{
  namespace HTIOP
  {

    class Connection_Handler;

    /**
     * @class Endpoint
     *
     * @brief Endpoint
     *
     * HTIOP-specific implementation of PP Framework Endpoint interface.
     */
    class HTIOP_Export Endpoint : public TAO_Endpoint
    {
    public:

      friend class Profile;
      friend class TAO_SSLIOP_Profile;

      // = Initialization and termination methods.

      /// Default constructor.
      Endpoint (void);

      /// Constructor.  This is the most efficient constructor since it
      /// does not require any address resolution processing.
      Endpoint (const char *host,
                CORBA::UShort port,
                const char *htid,
                const ACE::HTBP::Addr &addr);

      /// Constructor.
      Endpoint (const ACE::HTBP::Addr &addr,
                int use_dotted_decimal_addresses);

      /// Constructor.  This constructor is used when decoding endpoints.
      Endpoint (const char *host,
                CORBA::UShort port,
                const char *htid);

      /// Destructor.
      ~Endpoint (void);

      // = Implementation of abstract TAO_Endpoint methods.  See
      // Endpoint.h for their documentation.

      virtual TAO_Endpoint *next (void);
      virtual int addr_to_string (char *buffer, size_t length);
      virtual void reset_hint (void);

      /// Makes a copy of <this>
      virtual TAO_Endpoint *duplicate (void);

      /// Return true if this endpoint is equivalent to <other_endpoint>.  Two
      /// endpoints are equivalent iff their port and host are the same.
      CORBA::Boolean is_equivalent (const TAO_Endpoint *other_endpoint);

      /// Return a hash value for this object.
      CORBA::ULong hash (void);

      // Allocates memory and returns a copy of <this>

      // = HTIOP_Endpoint-specific methods.

      /// Return a reference to the <object_addr>.
      const ACE::HTBP::Addr &object_addr (void) const;

      /// Return a pointer to the host string.  This object maintains
      /// ownership of this string.
      const char *host (void) const;

      /// Copy the string <h> into <host_> and return the resulting pointer.
      /// This object maintains ownership of this string.
      const char *host (const char *h);

      /// Return the port number.
      CORBA::UShort port (void) const;

      /// Set the port number.
      CORBA::UShort port (CORBA::UShort p);

      /// Return a pointer to the host string.  This object maintains
      /// ownership of this string.
      const char *htid (void) const;

      /// Copy the string <h> into <host_> and return the resulting pointer.
      /// This object maintains ownership of this string.
      const char *htid (const char *h);

      //Connection_Handler *&hint (void);
      // Access to our <hint_>.

    private:

      /// Helper method for setting INET_Addr.
      int set (const ACE::HTBP::Addr &addr,
               int use_dotted_decimal_addresses);

      /// String representing the host name.
      CORBA::String_var host_;

      /// TCP port number.
      CORBA::UShort port_;

      CORBA::String_var htid_;

      /// Cached instance of <ACE::HTBP::Addr> for use in making
      /// invocations, etc.
      ACE::HTBP::Addr object_addr_;

      /// Flag to indicate if the address has been resolved and set.
      int object_addr_set_;

      /// HTIOP Endpoints can be stringed into a list.  Return the next
      /// endpoint in the list, if any.
      Endpoint *next_;
    };
  }
}

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

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