Diff for /libaitio/src/Attic/tools.c between versions 1.6 and 1.7

version 1.6, 2011/10/31 13:53:51 version 1.7, 2011/12/13 02:23:08
Line 347  io_ether_aton(const char *a, struct io_ether_addr *e) Line 347  io_ether_aton(const char *a, struct io_ether_addr *e)
   
         return e;          return e;
 }  }
   
   /*
    * io_n2port() Extract port from network structure
    * @addr = Address
    * return: 0 not supported family type or port number
    */
   inline u_short
   io_n2port(io_sockaddr_t * __restrict addr)
   {
           u_short port = 0;
   
           if (!addr)
                   return port;
   
           switch (addr->sa.sa_family) {
                   case AF_INET:
                           return ntohs(addr->sin.sin_port);
                   case AF_INET6:
                           return ntohs(addr->sin6.sin6_port);
                   default:
                           io_SetErr(ESOCKTNOSUPPORT, "Unsuported address family %d", 
                                           addr->sa.sa_family);
                           break;
           }
   
           return port;
   }
   
   /*
    * io_n2addr() Extract address from network structure
    * @addr = Address
    * @val = Value for store string address
    * return: NULL error or !=NULL string address from val
    */
   const char *
   io_n2addr(io_sockaddr_t * __restrict addr, ait_val_t * __restrict val)
   {
           char str[INET6_ADDRSTRLEN] = { 0 };
           const char *ret = NULL;
   
           if (!addr || !val)
                   return ret;
   
           switch (addr->sa.sa_family) {
                   case AF_INET:
                           if (!inet_ntop(AF_INET, &addr->sin.sin_addr, str, INET_ADDRSTRLEN)) {
                                   LOGERR;
                                   return ret;
                           } else
                                   ret = str;
                           break;
                   case AF_INET6:
                           if (!inet_ntop(AF_INET6, &addr->sin6.sin6_addr, str, INET6_ADDRSTRLEN)) {
                                   LOGERR;
                                   return ret;
                           } else
                                   ret = str;
                           break;
                   default:
                           io_SetErr(EPROTONOSUPPORT, "Unsuported address family %d", 
                                           addr->sa.sa_family);
                           return ret;
           }
   
           AIT_FREE_VAL(val);
           AIT_SET_STR(val, ret);
           return ret;
   }
   
   /*
    * io_gethostbyname() Get host and port and make network structure
    * @psHost = Hostname
    * @port = Port
    * @addr = Network address structure
    * return: NULL error or !=NULL network structure
    */
   io_sockaddr_t *
   io_gethostbyname(const char *psHost, u_short port, io_sockaddr_t * __restrict addr)
   {
           struct hostent *host;
   
           if (!psHost || !addr)
                   return NULL;
   
           /* resolver */
           if (!addr->sa.sa_family)
                   host = gethostbyname(psHost);
           else
                   host = gethostbyname2(psHost, addr->sa.sa_family);
           if (!host) {
                   io_SetErr(EINVAL, "Resolver #%d - %s", h_errno, hstrerror(h_errno));
                   return NULL;
           }
   
           memset(addr, 0, sizeof(io_sockaddr_t));
           switch (host->h_addrtype) {
                   case AF_INET:
                           addr->sin.sin_len = sizeof(struct sockaddr_in);
                           addr->sin.sin_family = AF_INET;
                           addr->sin.sin_port = htons(port);
                           memcpy(&addr->sin.sin_addr, host->h_addr, sizeof addr->sin.sin_addr);
                           return addr;
                   case AF_INET6:
                           addr->sin6.sin6_len = sizeof(struct sockaddr_in6);
                           addr->sin6.sin6_family = AF_INET6;
                           addr->sin6.sin6_port = htons(port);
                           memcpy(&addr->sin6.sin6_addr, host->h_addr, sizeof addr->sin6.sin6_addr);
                           return addr;
                   default:
                           io_SetErr(EPROTONOSUPPORT, "Unsuported address family %d", 
                                           host->h_addrtype);
                           break;
           }
   
           return NULL;
   }

Removed from v.1.6  
changed lines
  Added in v.1.7


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>