// test_ipaddress.cpp #include #include int U_EXPORT main (int argc, char* argv[]) { U_ULIB_INIT(argv); U_TRACE(5,"main(%d)",argc) u_init_ulib_hostname(); bool result; UIPAddress x; uint32_t addr; char address[16]; UString tmp, name = UString(argv[1]), domain, name_domain, name_ret; if (argv[2] && argv[2][0]) { domain = argv[2]; name_domain = name + '.' + domain; } U_MESSAGE("addr = %#08x %B mask = %#08x %B network = %#08x %B", 0x100007f, 0x100007f, 0xffffffff, 0xffffffff, 0x100007f, 0x100007f); result = x.setHostName(U_STRING_FROM_CONSTANT("pippo1")); U_ASSERT( result == false ) tmp = U_STRING_FROM_CONSTANT("127.0.0.1"); x.getBinaryForm(tmp, addr, true); U_INTERNAL_DUMP("addr = %#08x %B", addr, addr) #if __BYTE_ORDER == __LITTLE_ENDIAN U_INTERNAL_ASSERT( addr == 0x7f000001 ) #else U_INTERNAL_ASSERT( addr == 0x0100007f ) #endif x.getBinaryForm(tmp, addr, false); U_INTERNAL_DUMP("addr = %#08x %B", addr, addr) #if __BYTE_ORDER == __LITTLE_ENDIAN U_INTERNAL_ASSERT( addr == 0x0100007f ) #else U_INTERNAL_ASSERT( addr == 0x7f000001 ) #endif tmp = U_STRING_FROM_CONSTANT("255.255.255.255"); x.getBinaryForm(tmp, addr, true); U_INTERNAL_DUMP("addr = %#08x %B", addr, addr) U_INTERNAL_ASSERT( addr == 0xffffffff ) x.getBinaryForm(tmp, addr, false); U_INTERNAL_DUMP("addr = %#08x %B", addr, addr) U_INTERNAL_ASSERT( addr == 0xffffffff ) tmp = U_STRING_FROM_CONSTANT("255.0.0.255"); x.getBinaryForm(tmp, addr, true); U_INTERNAL_DUMP("addr = %#08x %B", addr, addr) U_INTERNAL_ASSERT( addr == 0xff0000ff ) x.getBinaryForm(tmp, addr, false); U_INTERNAL_DUMP("addr = %#08x %B", addr, addr) U_INTERNAL_ASSERT( addr == 0xff0000ff ) // Test code for matching IP masks UIPAllow a; // 127.0.0.5 U_ASSERT( a.parseMask(U_STRING_FROM_CONSTANT("127.0.0.5")) == true ) x.setHostName(U_STRING_FROM_CONSTANT("127.0.0.5")); U_ASSERT( a.isAllowed(x.getInAddr()) == true ) x.setHostName(U_STRING_FROM_CONSTANT("127.0.0.0")); U_ASSERT( a.isAllowed(x.getInAddr()) == false ) x.setHostName(U_STRING_FROM_CONSTANT("127.0.0.2")); U_ASSERT( a.isAllowed(x.getInAddr()) == false ) U_ASSERT( a.parseMask(U_STRING_FROM_CONSTANT("127.0.0.1/8")) == true ) // 127.0.0.1/8 U_ASSERT( a.isAllowed(x.getInAddr()) == true ) U_ASSERT( a.parseMask(U_STRING_FROM_CONSTANT("10.113.0.0/16")) == true ) // 10.113.0.0/16 x.setHostName(U_STRING_FROM_CONSTANT("10.113.45.67")); U_ASSERT( a.isAllowed(x.getInAddr()) == true ) x.setHostName(U_STRING_FROM_CONSTANT("10.11.45.67")); U_ASSERT( a.isAllowed(x.getInAddr()) == false ) x.setHostName(U_STRING_FROM_CONSTANT("127.0.0.1")); U_ASSERT( a.isAllowed(x.getInAddr()) == false ) U_ASSERT( a.parseMask(U_STRING_FROM_CONSTANT("1.2.3.4/0")) == true ) // 1.2.3.4/0 x.setHostName(U_STRING_FROM_CONSTANT("4.3.2.1")); U_ASSERT( a.isAllowed(x.getInAddr()) == true ) U_ASSERT( a.parseMask(U_STRING_FROM_CONSTANT("1.2.3.4/40")) == false ) U_ASSERT( a.parseMask(U_STRING_FROM_CONSTANT("1.2.3.4.5.6.7/8")) == false ) U_ASSERT( a.parseMask(U_STRING_FROM_CONSTANT("1.2.3.4/8")) == true ) // 1.2.3.4/8 x.setHostName(U_STRING_FROM_CONSTANT("4.3.2.1")); U_ASSERT( a.isAllowed(x.getInAddr()) == false ) result = a.parseMask(U_STRING_FROM_CONSTANT("192.168.1.64/28")); U_INTERNAL_ASSERT( result ) // 192.168.1.64/28 x.setHostName(U_STRING_FROM_CONSTANT("192.168.1.70")); U_ASSERT( a.isAllowed(x.getInAddr()) == true ) x.setHostName(U_STRING_FROM_CONSTANT("194.168.1.7")); result = a.isAllowed(x.getInAddr()); U_INTERNAL_ASSERT( result == false ) UVector vipallow; uint32_t n = UIPAllow::parseMask(U_STRING_FROM_CONSTANT("172.0.0.0/8, 151.11.47.120"), vipallow); U_INTERNAL_ASSERT_EQUALS(n, 2) // 172.0.0.0/8 x.setHostName(U_STRING_FROM_CONSTANT("172.31.17.195")); result = UIPAllow::isAllowed(x.getInAddr(), vipallow); U_INTERNAL_ASSERT( result ) x.setHostName(U_STRING_FROM_CONSTANT("172.16.17.195")); result = UIPAllow::isAllowed(x.getInAddr(), vipallow); U_INTERNAL_ASSERT( result ) x.setHostName(U_STRING_FROM_CONSTANT("172.16.100.47")); result = UIPAllow::isAllowed(x.getInAddr(), vipallow); U_INTERNAL_ASSERT( result ) vipallow.clear(); // 172.16.59.0/24 192.168.253.0/24 n = UIPAllow::parseMask(U_STRING_FROM_CONSTANT("172.16.59.0/24 192.168.253.0/24"), vipallow); U_INTERNAL_ASSERT_EQUALS(n, 2) n = UIPAllow::find(U_STRING_FROM_CONSTANT("192.168.253.253"), vipallow); U_INTERNAL_ASSERT( n != U_NOT_FOUND ) bool esito = x.setHostName(name); U_INTERNAL_ASSERT(esito) if (esito) { esito = x.setHostName(name); U_INTERNAL_ASSERT(esito) U_MEMCPY(address, x.get_in_addr(), x.getInAddrLength()); x.setAddress(address); name_ret = x.getHostName(); U_INTERNAL_DUMP("name_ret = %V name = %V name_domain = %V", name_ret.rep, name.rep, name_domain.rep) // U_ASSERT( name_ret.equalnocase(name) || name_ret.equalnocase(name_domain) ) cout << name; } }