OS_NS_arpa_inet.inl

Go to the documentation of this file.
00001 // -*- C++ -*-
00002 // $Id: OS_NS_arpa_inet.inl 80826 2008-03-04 14:51:23Z wotte $
00003 
00004 #include "ace/OS_NS_string.h"
00005 #include "ace/OS_NS_errno.h"
00006 #include "ace/OS_NS_stdio.h"
00007 
00008 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00009 
00010 ACE_INLINE unsigned long
00011 ACE_OS::inet_addr (const char *name)
00012 {
00013   ACE_OS_TRACE ("ACE_OS::inet_addr");
00014 #if defined (ACE_LACKS_INET_ADDR)
00015   ACE_UNUSED_ARG (name);
00016   ACE_NOTSUP_RETURN (0);
00017 #elif defined (ACE_HAS_NONCONST_GETBY)
00018   return ::inet_addr (const_cast <char*> (name));
00019 #else
00020   return ::inet_addr (name);
00021 #endif /* ACE_HAS_NONCONST_GETBY */
00022 }
00023 
00024 ACE_INLINE char *
00025 ACE_OS::inet_ntoa (const struct in_addr addr)
00026 {
00027   ACE_OS_TRACE ("ACE_OS::inet_ntoa");
00028 #if defined (ACE_LACKS_INET_NTOA)
00029   ACE_UNUSED_ARG (addr);
00030   ACE_NOTSUP_RETURN (0);
00031 #else
00032   ACE_OSCALL_RETURN (::inet_ntoa (addr),
00033                      char *,
00034                      0);
00035 #endif
00036 }
00037 
00038 ACE_INLINE const char *
00039 ACE_OS::inet_ntop (int family, const void *addrptr, char *strptr, size_t len)
00040 {
00041   ACE_OS_TRACE ("ACE_OS::inet_ntop");
00042 
00043 #if defined (ACE_HAS_IPV6) && !defined (ACE_WIN32)
00044   ACE_OSCALL_RETURN (::inet_ntop (family, addrptr, strptr, len), const char *, 0);
00045 #else
00046   const u_char *p = reinterpret_cast<const u_char *> (addrptr);
00047 
00048   if (family == AF_INET)
00049     {
00050       char temp[INET_ADDRSTRLEN];
00051 
00052       // Stevens uses snprintf() in his implementation but snprintf()
00053       // doesn't appear to be very portable.  For now, hope that using
00054       // sprintf() will not cause any string/memory overrun problems.
00055       ACE_OS::sprintf (temp,
00056                        "%d.%d.%d.%d",
00057                        p[0], p[1], p[2], p[3]);
00058 
00059       if (ACE_OS::strlen (temp) >= len)
00060         {
00061           errno = ENOSPC;
00062           return 0; // Failure
00063         }
00064 
00065       ACE_OS::strcpy (strptr, temp);
00066       return strptr;
00067     }
00068 
00069   ACE_NOTSUP_RETURN(0);
00070 #endif /* ACE_HAS_IPV6 */
00071 }
00072 
00073 ACE_INLINE int
00074 ACE_OS::inet_pton (int family, const char *strptr, void *addrptr)
00075 {
00076   ACE_OS_TRACE ("ACE_OS::inet_pton");
00077 
00078 #if defined (ACE_HAS_IPV6) && !defined (ACE_WIN32)
00079   ACE_OSCALL_RETURN (::inet_pton (family, strptr, addrptr), int, -1);
00080 #else
00081   if (family == AF_INET)
00082     {
00083       struct in_addr in_val;
00084 
00085       if (ACE_OS::inet_aton (strptr, &in_val))
00086         {
00087           ACE_OS::memcpy (addrptr, &in_val, sizeof (struct in_addr));
00088           return 1; // Success
00089         }
00090 
00091       return 0; // Input is not a valid presentation format
00092     }
00093 
00094   ACE_NOTSUP_RETURN(-1);
00095 #endif  /* ACE_HAS_IPV6 */
00096 }
00097 
00098 ACE_END_VERSIONED_NAMESPACE_DECL

Generated on Tue Feb 2 17:18:41 2010 for ACE by  doxygen 1.4.7