/*************************************************************************** * Copyright (C) 2005 by Jeff Ferr * * root@sat * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "Stdafx.h" #include "jinetaddress4.h" #include "junknownhostexception.h" namespace jsocket { InetAddress4::InetAddress4(std::string name_, struct in_addr ip_): jcommon::Object() { jcommon::Object::SetClassName("jsocket::InetAddress4"); _host = name_; _ip = ip_; } InetAddress4::~InetAddress4() { } /** Static */ InetAddress * InetAddress4::GetByName(std::string host_) { struct hostent *h = gethostbyname(host_.c_str()); if (h == NULL) { throw UnknownHostException("Host not found exception"); } InetAddress *addr = new InetAddress4(host_, *(in_addr *)h->h_addr_list[0]); // free(h); return addr; } std::vector InetAddress4::GetAllByName(std::string host_name_) { std::vector vip; #ifdef _WIN32 return vip; #else struct hostent *aux = NULL; in_addr ip; if (inet_aton(host_name_.c_str(), &ip) == 0) { aux = gethostbyname(host_name_.c_str()); } else { aux = gethostbyaddr(&ip, sizeof(ip), PF_INET); } if (aux == NULL) { throw UnknownHostException("Host not found exception"); } else { struct hostent *aux2; for(int i=0; aux->h_addr_list[i] != NULL; ++i) { aux2 = gethostbyaddr(aux->h_addr_list[i], sizeof(aux->h_addr_list[i]),PF_INET); if ((void *)aux2 != NULL) { vip.push_back(new InetAddress4(aux2->h_name, *(in_addr *)aux2->h_addr_list[0])); } } return vip; } #endif return vip; } InetAddress * InetAddress4::GetLocalHost() { char localName[255+1]; gethostname(localName, 255); return GetByName(localName); } /** End */ std::string InetAddress4::GetHostName() { return _host; } std::string InetAddress4::GetHostAddress() { return inet_ntoa(_ip); } std::vector InetAddress4::GetAddress() { std::vector addr; int size = sizeof(in_addr)/sizeof(uint8_t); uint8_t *ip = (uint8_t *)&_ip; for (int i=0; i