12#include <sys/socket.h>
13#include <sys/utsname.h>
24#define BUFFER_SIZE 256
32struct sockaddr_in
OksSystem::Host::resolve(const std::string &name) throw() {
33 struct addrinfo *info_ptr;
34 const char *str = name.c_str();
35 const int status = getaddrinfo(str,0,0,&info_ptr);
36 struct sockaddr_in address;
37 bzero(&address,
sizeof(address));
38 address.sin_family = AF_INET;
39 address.sin_addr.s_addr=0;
41 struct sockaddr_in *ptr = (sockaddr_in *) info_ptr->ai_addr;
43 freeaddrinfo(info_ptr);
54 char buffer[NI_MAXHOST];
55 const struct sockaddr *ptr = (
const struct sockaddr *) &address;
56 const int status= getnameinfo(ptr,
sizeof(address),buffer,
sizeof(buffer),0,0,0);
57 if (status!=0)
return to_string(address);
58 return std::string(buffer);
70 const struct sockaddr_in address = resolve(name);
71 if (address.sin_addr.s_addr!=0)
return resolve(address);
72 return std::string(name) ;
82 const char* s = inet_ntoa(ip_addr.sin_addr);
83 return std::string(s);
112 m_name = resolve(ip_addr);
113 m_full_name = m_name;
127OksSystem::Host::operator
struct sockaddr_in() const throw() {
138 return full_name()==other.full_name();
162 if (m_full_name.empty()) {
163 m_full_name = expand(m_name);
173 const struct sockaddr_in address = ip();
174 return to_string(address);
184 return ! a.equals(b);
203 return instance()->name();
212 return instance()->full_name();
234 struct utsname u_name_data;
235 const int status = ::uname(&u_name_data);
237 m_name = u_name_data.nodename;
238 m_os_name = u_name_data.sysname;
239 m_release = u_name_data.release;
240 m_version = u_name_data.version;
241 m_machine = u_name_data.machine;
243 char buffer[NI_MAXHOST];
244 const int host_status = gethostname(buffer,
sizeof(buffer));
245 if (host_status==0) {
287 if (m_description.empty()) {
288 std::ostringstream stream;
289 stream << m_os_name <<
" " << m_release <<
"/" << m_machine;
290 m_description = stream.str();
292 return m_description;
std::ostream & operator<<(std::ostream &stream, const OksSystem::File &file)
virtual ~Host()
destructor
std::string ip_string() const
get ip in string mode
static struct sockaddr_in resolve(const std::string &name)
name to ip conversion
const std::string & name() const
get name
static std::string expand(const std::string &name)
expands to full name
struct sockaddr_in ip() const
get ip address
static std::string to_string(struct sockaddr_in ip_addr)
ip to string conversion
bool equals(const Host &other) const
equality method
const std::string & full_name() const
get fully qualified name
std::string m_name
name of the host
Host()
constructor for current host
std::string m_full_name
cached fully qualified host name
Network host - localhost.
const std::string & description() const
machine type */
static LocalHost * s_instance
singleton for local host
const std::string & os_release() const
release of the operating system
static const std::string & full_local_name()
fully qualified local host name
const std::string & os_name() const
name of the operating system
static const LocalHost * instance()
pointer to the singleton local host
const std::string & os_version() const
version of the operating system
static const std::string & local_name()
localhostname
const std::string & machine() const
version of the operating system
bool operator!=(const Host &a, const Host &b)
inequality operator
const char * getfullhost()
get fully qualified host name
bool operator==(const Host &a, const Host &b)
equality operator