PIEthernet:resolve()
git-svn-id: svn://db.shs.com.ru/pip@171 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5
This commit is contained in:
@@ -31,12 +31,12 @@ message(STATUS "Building PIP version ${VERSION}${VERSION_SUFFIX}")
|
||||
file(WRITE "src/pip_version_str.h" "// This file was generated by PIP CMake, don`t edit it!\n#define __PIP_VERSION_STR__ \"${VERSION}${VERSION_SUFFIX}\"\n")
|
||||
|
||||
#options
|
||||
option(ICU "Unicode support" ON)
|
||||
option(USB "USB support" OFF)
|
||||
option(STL "Building with STL containers" OFF)
|
||||
option(CRYPT "Crypt support" OFF)
|
||||
option(LIB "System install" ON)
|
||||
option(DEBUG "Build with -g3" OFF)
|
||||
option(ICU "Unicode support" 1)
|
||||
option(USB "USB support" 0)
|
||||
option(STL "Building with STL containers" 0)
|
||||
option(CRYPT "Crypt support" 0)
|
||||
option(LIB "System install" 1)
|
||||
option(DEBUG "Build with -g3" 0)
|
||||
set(CMAKE_BUILD_TYPE "Release")
|
||||
set(LIBS)
|
||||
if (DEBUG)
|
||||
|
||||
4
main.cpp
4
main.cpp
@@ -1,6 +1,7 @@
|
||||
#include "pikbdlistener.h"
|
||||
#include "piconnection.h"
|
||||
#include "piconfig.h"
|
||||
#include "piethernet.h"
|
||||
|
||||
int main (int argc, char * argv[]) {
|
||||
/*PIKbdListener k;
|
||||
@@ -11,7 +12,6 @@ int main (int argc, char * argv[]) {
|
||||
k.start();
|
||||
WAIT_FOR_EXIT
|
||||
return 0;*/
|
||||
PIConfig c("mems.conf");
|
||||
piCout << c.allTree();
|
||||
piCout << PIEthernet::resolve(argv[1]);
|
||||
}
|
||||
|
||||
|
||||
@@ -30,24 +30,26 @@
|
||||
# endif
|
||||
# define ip_mreqn ip_mreq
|
||||
# define imr_address imr_interface
|
||||
#endif
|
||||
#ifdef WINDOWS
|
||||
# include <io.h>
|
||||
# include <winsock2.h>
|
||||
# include <iphlpapi.h>
|
||||
# include <psapi.h>
|
||||
# include <ws2tcpip.h>
|
||||
# define ip_mreqn ip_mreq
|
||||
# define imr_address imr_interface
|
||||
#else
|
||||
# include <fcntl.h>
|
||||
# include <sys/ioctl.h>
|
||||
# include <netinet/in.h>
|
||||
# include <arpa/inet.h>
|
||||
# include <sys/socket.h>
|
||||
# include <net/if.h>
|
||||
# ifndef ANDROID
|
||||
# include <ifaddrs.h>
|
||||
# ifdef WINDOWS
|
||||
# include <io.h>
|
||||
# include <winsock2.h>
|
||||
# include <iphlpapi.h>
|
||||
# include <psapi.h>
|
||||
# include <ws2tcpip.h>
|
||||
# define ip_mreqn ip_mreq
|
||||
# define imr_address imr_interface
|
||||
# else
|
||||
# include <fcntl.h>
|
||||
# include <sys/ioctl.h>
|
||||
# include <netinet/in.h>
|
||||
# include <arpa/inet.h>
|
||||
# include <sys/socket.h>
|
||||
# include <net/if.h>
|
||||
# include <netdb.h>
|
||||
# ifndef ANDROID
|
||||
# include <ifaddrs.h>
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
#include <errno.h>
|
||||
@@ -1008,7 +1010,32 @@ PIStringList PIEthernet::allAddresses() {
|
||||
piForeachC (PIEthernet::Interface & i, il)
|
||||
al << i.address;
|
||||
return al.removeStrings("0.0.0.0");
|
||||
//#endif
|
||||
}
|
||||
|
||||
|
||||
PIString PIEthernet::resolve(const PIString & host) {
|
||||
PIString ip(host), port;
|
||||
int i = host.find(':');
|
||||
if (i >= 0) {
|
||||
ip = host.left(i);
|
||||
port = host.right(host.length() - i - 1);
|
||||
}
|
||||
PIString ret = PIStringAscii("0.0.0.0");
|
||||
if (!port.isEmpty()) ret += PIStringAscii(":") + port;
|
||||
//#ifdef WINDOWS
|
||||
hostent * he = gethostbyname(ip.dataAscii());
|
||||
if (!he)
|
||||
return ret;
|
||||
struct in_addr addr;
|
||||
if (he->h_addr_list[0]) {
|
||||
addr.s_addr = *((uint*)(he->h_addr_list[0]));
|
||||
ret = inet_ntoa(addr);
|
||||
if (!port.isEmpty()) ret += PIStringAscii(":") + port;
|
||||
}
|
||||
//#else
|
||||
//#endif
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -329,6 +329,9 @@ public:
|
||||
//! Returns all system network IP addresses
|
||||
static PIStringList allAddresses();
|
||||
|
||||
//! Resolve hostname "host" and return it IPv4 address or "0.0.0.0" on error
|
||||
static PIString resolve(const PIString & host);
|
||||
|
||||
static void parseAddress(const PIString & ipp, PIString * ip, int * port);
|
||||
static PIString macFromBytes(const PIByteArray & mac);
|
||||
static PIByteArray macToBytes(const PIString & mac);
|
||||
|
||||
Reference in New Issue
Block a user