00001
00002
00003
00004
00005 #include "ace/MEM_Addr.h"
00006
00007 #if (ACE_HAS_POSITION_INDEPENDENT_POINTERS == 1)
00008
00009 #if !defined (__ACE_INLINE__)
00010 #include "ace/MEM_Addr.inl"
00011 #endif
00012
00013 #include "ace/Log_Msg.h"
00014 #include "ace/OS_NS_stdlib.h"
00015 #include "ace/OS_NS_unistd.h"
00016 #include "ace/os_include/os_netdb.h"
00017
00018 ACE_RCSID (ace,
00019 MEM_Addr,
00020 "$Id: MEM_Addr.cpp 79134 2007-07-31 18:23:50Z johnnyw $")
00021
00022 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00023
00024 ACE_ALLOC_HOOK_DEFINE(ACE_MEM_Addr)
00025
00026
00027
00028 ACE_MEM_Addr::ACE_MEM_Addr (void)
00029 : ACE_Addr (AF_INET, sizeof (ACE_MEM_Addr))
00030 {
00031
00032 this->initialize_local (0);
00033 }
00034
00035 ACE_MEM_Addr::ACE_MEM_Addr (const ACE_MEM_Addr &sa)
00036 : ACE_Addr (AF_INET, sizeof (ACE_MEM_Addr))
00037 {
00038 ACE_TRACE ("ACE_MEM_Addr::ACE_MEM_Addr");
00039 this->external_.set (sa.external_);
00040 this->internal_.set (sa.internal_);
00041 }
00042
00043 ACE_MEM_Addr::ACE_MEM_Addr (const ACE_TCHAR port_number[])
00044 : ACE_Addr (AF_INET, sizeof (ACE_MEM_Addr))
00045 {
00046 ACE_TRACE ("ACE_MEM_Addr::ACE_MEM_Addr");
00047 u_short pn = static_cast<u_short> (ACE_OS::strtoul (port_number,
00048 0,
00049 10));
00050 this->initialize_local (pn);
00051 }
00052
00053 ACE_MEM_Addr::ACE_MEM_Addr (u_short port_number)
00054 : ACE_Addr (AF_INET, sizeof (ACE_MEM_Addr))
00055 {
00056 ACE_TRACE ("ACE_MEM_Addr::ACE_MEM_Addr");
00057 this->initialize_local (port_number);
00058 }
00059
00060 ACE_MEM_Addr::~ACE_MEM_Addr (void)
00061 {
00062 }
00063
00064 int
00065 ACE_MEM_Addr::initialize_local (u_short port_number)
00066 {
00067 ACE_TCHAR name[MAXHOSTNAMELEN + 1];
00068 if (ACE_OS::hostname (name, MAXHOSTNAMELEN+1) == -1)
00069 return -1;
00070
00071 this->external_.set (port_number, name);
00072 this->internal_.set (port_number, ACE_TEXT ("localhost"));
00073 return 0;
00074 }
00075
00076 int
00077 ACE_MEM_Addr::same_host (const ACE_INET_Addr &sap)
00078 {
00079 ACE_TRACE ("ACE_MEM_Addr::same_host");
00080
00081
00082
00083 ACE_INET_Addr me (this->external_);
00084 ACE_INET_Addr you (sap);
00085 me.set_port_number (0);
00086 you.set_port_number (0);
00087 return me == you;
00088 }
00089
00090 int
00091 ACE_MEM_Addr::addr_to_string (ACE_TCHAR s[],
00092 size_t size,
00093 int ipaddr_format) const
00094 {
00095 ACE_TRACE ("ACE_MEM_Addr::addr_to_string");
00096
00097 return this->external_.addr_to_string (s, size, ipaddr_format);
00098 }
00099
00100
00101
00102 int
00103 ACE_MEM_Addr::string_to_addr (const ACE_TCHAR s[])
00104 {
00105 ACE_TRACE ("ACE_MEM_Addr::string_to_addr");
00106
00107 u_short pn = static_cast<u_short> (ACE_OS::strtoul (s,
00108 0,
00109 10));
00110 return this->set (pn);
00111 }
00112
00113
00114
00115 void *
00116 ACE_MEM_Addr::get_addr (void) const
00117 {
00118 ACE_TRACE ("ACE_MEM_Addr::get_addr");
00119 return this->external_.get_addr ();
00120 }
00121
00122
00123 void
00124 ACE_MEM_Addr::set_addr (void *addr, int len)
00125 {
00126 ACE_TRACE ("ACE_MEM_Addr::set_addr");
00127
00128 this->external_.set_addr (addr, len);
00129 this->internal_.set_port_number (this->external_.get_port_number ());
00130 }
00131
00132 int
00133 ACE_MEM_Addr::get_host_name (ACE_TCHAR hostname[],
00134 size_t len) const
00135 {
00136 ACE_TRACE ("ACE_MEM_Addr::get_host_name");
00137 return this->external_.get_host_name (hostname, len);
00138 }
00139
00140
00141
00142 const char *
00143 ACE_MEM_Addr::get_host_name (void) const
00144 {
00145 ACE_TRACE ("ACE_MEM_Addr::get_host_name");
00146 return this->external_.get_host_name ();
00147 }
00148
00149 u_long
00150 ACE_MEM_Addr::hash (void) const
00151 {
00152 return this->external_.hash ();
00153 }
00154
00155 void
00156 ACE_MEM_Addr::dump (void) const
00157 {
00158 #if defined (ACE_HAS_DUMP)
00159 ACE_TRACE ("ACE_MEM_Addr::dump");
00160
00161 ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this));
00162 this->external_.dump ();
00163 this->internal_.dump ();
00164 ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP));
00165 #endif
00166 }
00167
00168 ACE_END_VERSIONED_NAMESPACE_DECL
00169
00170 #endif