|
inlib
1.2.0
|
Classes | |
| class | base_socket |
| class | ftp |
| class | http |
| class | inet_socket |
| class | |
Functions | |
| bool | ip_addresses (std::ostream &a_out, std::vector< std::string > &a_if_names, std::vector< std::string > &a_ip_names, std::vector< unsigned long > &a_ip_addrs) |
| bool | if_address (std::ostream &a_out, const std::string &a_if, std::string &a_sa) |
| bool | dump_ip_addresses (std::ostream &a_out) |
| std::string | serror () |
| bool | host_name (std::ostream &a_out, std::string &a_host) |
| bool | set_reuse_addr (std::ostream &a_out, int a_socket) |
| bool | set_input_timer (std::ostream &a_out, int a_socket, unsigned int a_micro_secs) |
| bool | is_there_input (const std::vector< int > &a_socks, bool &a_is) |
| bool | wait_input (const std::vector< int > &a_socks) |
| std::string | herror () |
| bool | inet_addr (std::ostream &a_out, const std::string &a_host, in_addr_t &a_addr) |
| bool | inet_host (std::ostream &a_out, std::string &a_host) |
| bool inlib::net::dump_ip_addresses | ( | std::ostream & | a_out | ) | [inline] |
Definition at line 161 of file addresses.
{
std::vector<std::string> if_names;
std::vector<std::string> ip_names;
std::vector<unsigned long> ip_addrs;
if(!inlib::net::ip_addresses(a_out,if_names,ip_names,ip_addrs)) {
return false;
}
// get interface address. for exa for a_if = "en0".
std::vector<std::string>::iterator it1 = if_names.begin();
std::vector<std::string>::iterator it2 = ip_names.begin();
std::vector<unsigned long>::iterator it3 = ip_addrs.begin();
for(;it1!=if_names.end();++it1,++it2,++it3) {
a_out << "--------------------" << std::endl;
a_out << "if name " << *it1 << std::endl;
a_out << "ip name " << *it2 << std::endl;
a_out << "ip addr " << (unsigned int)*it3 << std::endl;
}
return true;
}
| std::string inlib::net::herror | ( | ) | [inline] |
Definition at line 33 of file inet_socket.
{
std::ostringstream strm;
#ifdef WIN32
strm << (int)WSAGetLastError();
return std::string(" error : ")+strm.str()+".";
#else
strm << (int)h_errno;
return std::string(" error : ")+strm.str()
+ " : " +std::string(hstrerror(h_errno))+".";
#endif
}
| bool inlib::net::host_name | ( | std::ostream & | a_out, |
| std::string & | a_host | ||
| ) | [inline] |
Definition at line 47 of file base_socket.
{
char s[512];
if(::gethostname(s,sizeof(s))<0) {
a_out << "inlib::net::host_name :"
<< " gethostname() :" << serror()
<< std::endl;
a_host.clear();
return false;
}
a_host = s;
return true;
}
| bool inlib::net::if_address | ( | std::ostream & | a_out, |
| const std::string & | a_if, | ||
| std::string & | a_sa | ||
| ) | [inline] |
Definition at line 130 of file addresses.
{
std::vector<std::string> if_names;
std::vector<std::string> ip_names;
std::vector<unsigned long> ip_addrs;
if(!inlib::net::ip_addresses(a_out,if_names,ip_names,ip_addrs)) {
a_sa.clear();
return false;
}
// get interface address. for exa for a_if = "en0".
std::vector<std::string>::iterator it1 = if_names.begin();
std::vector<std::string>::iterator it2 = ip_names.begin();
std::vector<unsigned long>::iterator it3 = ip_addrs.begin();
for(;it1!=if_names.end();++it1,++it2,++it3) {
if((*it1)==a_if) {
a_sa = *it2;
return true;
}
}
a_out << "inlib::net::if_address :"
<< " interface \"" << a_if << "\""
<< " not found."
<< std::endl;
a_sa.clear();
return false; //not found.
}
| bool inlib::net::inet_addr | ( | std::ostream & | a_out, |
| const std::string & | a_host, | ||
| in_addr_t & | a_addr | ||
| ) | [inline] |
Definition at line 45 of file inet_socket.
{
a_addr = ::inet_addr(a_host.c_str());
if(a_addr!=INADDR_NONE) {
//a_out << "inlib::net::inet_addr :"
// << " for " << sout(a_host)
// << " numeric."
// << std::endl;
return true;
}
//perhaps not numeric form.
hostent* host_p = ::gethostbyname(a_host.c_str());
if(!host_p) {
a_out << "inlib::net::inet_addr :"
<< " for " << sout(a_host)
<< " gethostbyname() : " << herror()
<< std::endl;
a_addr = 0;
return false;
}
if(host_p->h_length!=sizeof(in_addr_t)) {
a_out << "inlib::inet_socket:::connect :"
<< " for " << sout(a_host)
<< " gethostbyname() : bad length."
<< std::endl;
a_addr = 0;
return false;
}
::memcpy((char*)&a_addr,(char*)(host_p->h_addr),host_p->h_length);
return true;
}
| bool inlib::net::inet_host | ( | std::ostream & | a_out, |
| std::string & | a_host | ||
| ) | [inline] |
Definition at line 76 of file inet_socket.
{
#if TARGET_OS_EMBEDDED
if(!inlib::net::if_address(a_out,"en0",a_host)) return false;
#elif ANDROID_NDK
inlib::net::dump_ip_addresses(a_out);
if(!inlib::net::if_address(a_out,"eth0",a_host)) return false;
#else
if(!host_name(a_out,a_host)) return false;
#endif
return true;
}
| bool inlib::net::ip_addresses | ( | std::ostream & | a_out, |
| std::vector< std::string > & | a_if_names, | ||
| std::vector< std::string > & | a_ip_names, | ||
| std::vector< unsigned long > & | a_ip_addrs | ||
| ) | [inline] |
Definition at line 28 of file addresses.
{
a_if_names.clear();
a_ip_names.clear();
a_ip_addrs.clear();
#ifdef WIN32
a_out << "inlib::net::ip_addresses :"
<< " not yet ported on this platform."
<< std::endl;
return false;
#else
int sockfd = ::socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd < 0) {
a_out << "inlib::net::ip_addresses :"
<< " socket() : error : " << (int)errno
<< " : " << std::string(strerror(errno)) << "."
<< std::endl;
return false;
}
const int BUFFERSIZE = 4000;
char buffer[BUFFERSIZE];
struct ifconf ifc;
ifc.ifc_len = BUFFERSIZE;
ifc.ifc_buf = buffer;
if (::ioctl(sockfd, SIOCGIFCONF, &ifc) < 0) {
a_out << "inlib::net::ip_addresses :"
<< " ioctl() : error : " << (int)errno
<< " : " << std::string(strerror(errno)) << "."
<< std::endl;
return false;
}
char lastname[IFNAMSIZ];
lastname[0] = 0;
char* ptr;
for (ptr = buffer; ptr < buffer + ifc.ifc_len; ) {
struct ifreq* ifr = (struct ifreq*)ptr;
#if defined(__APPLE__)
int len = sizeof(struct sockaddr) > ifr->ifr_addr.sa_len?
sizeof(struct sockaddr) : ifr->ifr_addr.sa_len;
#else
int len = sizeof(struct sockaddr);
#endif
ptr += sizeof(ifr->ifr_name) + len; // for next one in buffer
if (ifr->ifr_addr.sa_family != AF_INET) {
continue; // ignore if not desired address family
}
char* cptr;
if ((cptr = (char *)::strchr(ifr->ifr_name, ':')) != NULL) {
*cptr = 0; // replace colon will null
}
if (::strncmp(lastname, ifr->ifr_name, IFNAMSIZ) == 0) {
continue; /* already processed this interface */
}
::memcpy(lastname, ifr->ifr_name, IFNAMSIZ);
struct ifreq ifrcopy = *ifr;
::ioctl(sockfd, SIOCGIFFLAGS, &ifrcopy);
int flags = ifrcopy.ifr_flags;
if ((flags & IFF_UP) == 0) {
continue; // ignore if interface not up
}
a_if_names.push_back(ifr->ifr_name);
struct sockaddr_in* sin = (struct sockaddr_in*)&ifr->ifr_addr;
a_ip_names.push_back(inet_ntoa(sin->sin_addr));
a_ip_addrs.push_back(sin->sin_addr.s_addr);
}
::close(sockfd);
/*
{std::vector<std::string>::iterator it1 = a_if_names.begin();
std::vector<std::string>::iterator it2 = a_ip_names.begin();
std::vector<unsigned long>::iterator it3 = a_ip_addrs.begin();
for(;it1!=a_if_names.end();++it1,++it2,++it3) {
a_out << "--------------------" << std::endl;
a_out << "if name " << *it1 << std::endl;
a_out << "ip name " << *it2 << std::endl;
a_out << "ip addr " << (unsigned int)*it3 << std::endl;
}}
*/
return true;
#endif
}
| bool inlib::net::is_there_input | ( | const std::vector< int > & | a_socks, |
| bool & | a_is | ||
| ) | [inline] |
Definition at line 86 of file base_socket.
{
a_is = false;
if(a_socks.empty()) return false;
struct timeval timeout;
timeout.tv_sec = 0;
timeout.tv_usec = 10; //microsec
fd_set mask;
FD_ZERO(&mask);
int nfds = 0;
{std::vector<int>::const_iterator it;
for(it=a_socks.begin();it!=a_socks.end();++it) {
FD_SET(*it,&mask);
nfds = mx(nfds,*it);
}}
nfds++;
if(::select(nfds,&mask,0,0,&timeout)==(-1)) {
a_is = false;
return false;
}
{std::vector<int>::const_iterator it;
for(it=a_socks.begin();it!=a_socks.end();++it) {
if(FD_ISSET(*it,&mask)) {
a_is = true;
break;
}
}}
return true;
}
| std::string inlib::net::serror | ( | ) | [inline] |
Definition at line 35 of file base_socket.
{
std::ostringstream strm;
#ifdef WIN32
strm << (int)WSAGetLastError();
return std::string(" error : ")+strm.str()+".";
#else
strm << (int)errno;
return std::string(" error : ")+strm.str()
+ " : " +std::string(strerror(errno))+".";
#endif
}
| bool inlib::net::set_input_timer | ( | std::ostream & | a_out, |
| int | a_socket, | ||
| unsigned int | a_micro_secs | ||
| ) | [inline] |
Definition at line 72 of file base_socket.
{
struct timeval val;
val.tv_sec = 0;
val.tv_usec = a_micro_secs;
if(::setsockopt(a_socket,SOL_SOCKET,
SO_RCVTIMEO,(char*)&val,sizeof(val))<0) {
a_out << "inlib::base_socket::set_input_timer :"
<< " setsockopt():" << serror()
<< std::endl;
return false;
}
return true;
}
| bool inlib::net::set_reuse_addr | ( | std::ostream & | a_out, |
| int | a_socket | ||
| ) | [inline] |
Definition at line 60 of file base_socket.
{
int val = 1;
if(::setsockopt(a_socket,SOL_SOCKET,
SO_REUSEADDR,(char*)&val,sizeof(val))<0) {
a_out << "inlib::net::set_reuse_addr :"
<< " setsockopt() :" << serror()
<< std::endl;
return false;
}
return true;
}
| bool inlib::net::wait_input | ( | const std::vector< int > & | a_socks | ) | [inline] |
Definition at line 120 of file base_socket.
{
if(a_socks.empty()) return false;
fd_set mask;
FD_ZERO(&mask);
int nfds = 0;
{std::vector<int>::const_iterator it;
for(it=a_socks.begin();it!=a_socks.end();++it) {
FD_SET(*it,&mask);
nfds = mx(nfds,*it);
}}
nfds++;
if(::select(nfds,&mask,0,0,0)==(-1)) return false;
return true;
}
1.7.5.1