191 lines
6.2 KiB
C++
191 lines
6.2 KiB
C++
#include "cdevAddr.h"
|
|
|
|
// *****************************************************************************
|
|
// * cdevInetAddr::set :
|
|
// * Allows the caller to set the address using a port number and
|
|
// * internet address.
|
|
// *****************************************************************************
|
|
int cdevInetAddr::set (unsigned short portnum, long ip_addr)
|
|
{
|
|
setType(AF_INET);
|
|
setSize(sizeof(inet_addr));
|
|
inet_addr.sin_family = AF_INET;
|
|
inet_addr.sin_port = htons(portnum);
|
|
|
|
if(ip_addr == INADDR_ANY) inet_addr.sin_addr.s_addr=INADDR_ANY;
|
|
else memcpy((void *)&inet_addr.sin_addr,
|
|
(void *)&ip_addr,
|
|
sizeof(inet_addr.sin_addr));
|
|
return 0;
|
|
}
|
|
|
|
|
|
// *****************************************************************************
|
|
// * cdevInetAddr::set :
|
|
// * Allows the caller to set the address using a port number and host name.
|
|
// *****************************************************************************
|
|
int cdevInetAddr::set (unsigned short portnum, const char hostname[])
|
|
{
|
|
hostent * server_info;
|
|
long addr;
|
|
int retval;
|
|
|
|
setType(AF_INET);
|
|
setSize(sizeof(inet_addr));
|
|
memset((void *)&inet_addr, 0, sizeof(inet_addr));
|
|
|
|
if(hostname==NULL || *hostname==0)
|
|
{
|
|
errno = EINVAL;
|
|
retval = -1;
|
|
}
|
|
else if((addr=::inet_addr(hostname))!=-1 ||
|
|
::strcmp(hostname, "255.255.255.255")==0)
|
|
{
|
|
retval = set(portnum, addr);
|
|
}
|
|
else if((server_info=::gethostbyname(hostname)) != 0)
|
|
{
|
|
::memcpy((void *)&addr, (void *)server_info->h_addr, server_info->h_length);
|
|
retval = set(portnum, addr);
|
|
}
|
|
else retval = -1;
|
|
|
|
return retval;
|
|
}
|
|
|
|
|
|
// *****************************************************************************
|
|
// * cdevInetAddr::set :
|
|
// * Allows the caller to set the address using a sockaddr_in structure
|
|
// * and its length.
|
|
// *****************************************************************************
|
|
int cdevInetAddr::set (const sockaddr_in *addr, int len)
|
|
{
|
|
setType(AF_INET);
|
|
setSize(len);
|
|
memcpy((void *)&inet_addr, (void *)addr, len);
|
|
return 0;
|
|
}
|
|
|
|
|
|
// *****************************************************************************
|
|
// * cdevInetAddr::cdevInetAddr :
|
|
// * This constructor creates an empty address object.
|
|
// *****************************************************************************
|
|
cdevInetAddr::cdevInetAddr ( void )
|
|
: cdevAddr(AF_INET, sizeof(sockaddr_in))
|
|
{
|
|
::memset((void *)&inet_addr, 0, sizeof(inet_addr));
|
|
}
|
|
|
|
|
|
// *****************************************************************************
|
|
// * cdevInetAddr::cdevInetAddr :
|
|
// * This constructor copies the contents of one cdevInetAddr object to
|
|
// * the new cdevInetAddr object.
|
|
// *****************************************************************************
|
|
cdevInetAddr::cdevInetAddr ( const cdevInetAddr & addr )
|
|
: cdevAddr(AF_INET, sizeof(inet_addr))
|
|
{
|
|
memcpy((void *)&inet_addr, (void *)&addr.inet_addr, sizeof(inet_addr));
|
|
}
|
|
|
|
|
|
// *****************************************************************************
|
|
// * cdevInetAddr::cdevInetAddr :
|
|
// * This constructor creates a new cdevInetAddr object that contains the
|
|
// * address provided in the sockaddr_in object.
|
|
// *****************************************************************************
|
|
cdevInetAddr::cdevInetAddr (const sockaddr_in *addr, int len)
|
|
{
|
|
set(addr, len);
|
|
}
|
|
|
|
|
|
// *****************************************************************************
|
|
// * cdevInetAddr::cdevInetAddr :
|
|
// * This constructor initializes the new cdevInetAddr object using the
|
|
// * specified port number and host name.
|
|
// *****************************************************************************
|
|
cdevInetAddr::cdevInetAddr (unsigned short portnum, char hostname[])
|
|
{
|
|
set(portnum, hostname);
|
|
}
|
|
|
|
|
|
// *****************************************************************************
|
|
// * cdevInetAddr::cdevInetAddr :
|
|
// * This constructor initializes the new cdevInetAddr object with the
|
|
// * specified port number and ip address.
|
|
// *****************************************************************************
|
|
cdevInetAddr::cdevInetAddr (unsigned short portnum, long ip_addr)
|
|
{
|
|
set(portnum, ip_addr);
|
|
}
|
|
|
|
|
|
// *****************************************************************************
|
|
// * cdevInetAddr::getHostName :
|
|
// * This method allows the caller to return the name of the host that
|
|
// * the cdevInetAddr structure identifies.
|
|
// *****************************************************************************
|
|
const char * cdevInetAddr::getHostName ( void ) const
|
|
{
|
|
char * retval;
|
|
hostent * hp;
|
|
int len = sizeof(inet_addr.sin_addr.s_addr);
|
|
|
|
if((hp = ::gethostbyaddr((char *)&inet_addr.sin_addr, len, addr_type))==0)
|
|
{
|
|
retval = NULL;
|
|
}
|
|
else retval = hp->h_name;
|
|
|
|
return retval;
|
|
}
|
|
|
|
|
|
// *****************************************************************************
|
|
// * cdevInetAddr::getHostAddr :
|
|
// * This method allows the caller to retrieve the internet address (in
|
|
// * string format) of the host that the cdevInetAddr object identifies.
|
|
// *****************************************************************************
|
|
const char * cdevInetAddr::getHostAddr ( void ) const
|
|
{
|
|
return ::inet_ntoa(inet_addr.sin_addr);
|
|
}
|
|
|
|
|
|
// *****************************************************************************
|
|
// * cdevInetAddr::getInetAddr :
|
|
// * This method allows the caller to obtain the internet address of the
|
|
// * host that the cdevInetAddr object identifies.
|
|
// *****************************************************************************
|
|
unsigned long cdevInetAddr::getInetAddr ( void ) const
|
|
{
|
|
return ntohl((unsigned long)inet_addr.sin_addr.s_addr);
|
|
}
|
|
|
|
|
|
// *****************************************************************************
|
|
// * cdevInetAddr::getPortNum :
|
|
// * This method allows the caller to retrieve the port number that is
|
|
// * associated with this cdevInetAddr.
|
|
// *****************************************************************************
|
|
unsigned short cdevInetAddr::getPortNum ( void ) const
|
|
{
|
|
return ntohs (inet_addr.sin_port);
|
|
}
|
|
|
|
|
|
// *****************************************************************************
|
|
// * cdevInetAddr::getAddress :
|
|
// * Returns the address of the sockaddr_in structure.
|
|
// *****************************************************************************
|
|
void * cdevInetAddr::getAddress ( void ) const
|
|
{
|
|
return (void *)&inet_addr;
|
|
}
|
|
|