summaryrefslogtreecommitdiffstats
path: root/lib/libUPnP/Neptune/Source/Tests/Network1/NetworkTest1.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libUPnP/Neptune/Source/Tests/Network1/NetworkTest1.cpp')
-rw-r--r--lib/libUPnP/Neptune/Source/Tests/Network1/NetworkTest1.cpp159
1 files changed, 159 insertions, 0 deletions
diff --git a/lib/libUPnP/Neptune/Source/Tests/Network1/NetworkTest1.cpp b/lib/libUPnP/Neptune/Source/Tests/Network1/NetworkTest1.cpp
new file mode 100644
index 0000000..02477cb
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Tests/Network1/NetworkTest1.cpp
@@ -0,0 +1,159 @@
+/*****************************************************************
+|
+| Network Test Program 1
+|
+| (c) 2001-2012 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "Neptune.h"
+
+#if defined(WIN32) && defined(_DEBUG)
+#include <crtdbg.h>
+#endif
+
+/*----------------------------------------------------------------------
+| macros
++---------------------------------------------------------------------*/
+#define CHECK(x) do { if (!(x)) NPT_Console::OutputF("FAILED line %d\n", __LINE__); } while(0)
+
+/*----------------------------------------------------------------------
+| functions
++---------------------------------------------------------------------*/
+static volatile bool NeedToStop = false;
+
+/*----------------------------------------------------------------------
+| macros
++---------------------------------------------------------------------*/
+class Resolver : public NPT_Thread
+{
+public:
+ Resolver(const char* name, NPT_IpAddress addr) : m_Result(NPT_SUCCESS), m_Name(name), m_Addr(addr) {}
+
+ virtual void Run() {
+ while (!NeedToStop) {
+ NPT_IpAddress addr;
+ m_Result = addr.ResolveName(m_Name);
+ if (NPT_FAILED(m_Result)) {
+ NPT_Console::OutputF("ERROR: ResolveName failed (%d)\n", m_Result);
+ return;
+ }
+ if (!(addr == m_Addr)) {
+ m_Result = NPT_FAILURE;
+ NPT_Console::OutputF("ERROR: wrong IP address (%s instead of %s for %s)\n", addr.ToString().GetChars(), m_Addr.ToString().GetChars(), m_Name.GetChars());
+ return;
+ }
+ }
+ }
+
+private:
+ NPT_Result m_Result;
+ NPT_String m_Name;
+ NPT_IpAddress m_Addr;
+};
+
+/*----------------------------------------------------------------------
+| TestAddresses
++---------------------------------------------------------------------*/
+static void
+TestAddresses()
+{
+ NPT_IpAddress a1 = NPT_IpAddress::Loopback;
+ CHECK(a1.IsLooppack());
+ CHECK(!a1.IsUnspecified());
+ NPT_IpAddress a2 = NPT_IpAddress::Any;
+ CHECK(a2.IsUnspecified());
+#if defined(NPT_CONFIG_ENABLE_IPV6)
+ NPT_IpAddress a3;
+ a3.ResolveName("::1");
+ CHECK(a3.IsLooppack());
+ NPT_IpAddress a4;
+ a4.ResolveName("127.0.0.1");
+ CHECK(a4.IsLooppack());
+
+ NPT_IpAddress a6;
+ a6.ResolveName("::abcd:1234");
+ CHECK(a6.IsV4Compatible());
+
+ NPT_IpAddress a7;
+ a7.ResolveName("::ffff:abcd:1234");
+ CHECK(a7.IsV4Mapped());
+
+ NPT_IpAddress a5;
+ a5.ResolveName("fe80::bae8:56ff:fe45:fc74");
+ CHECK(a5.IsLinkLocal());
+
+ NPT_IpAddress a8;
+ a8.ResolveName("fec3::bae8:56ff:fe45:fc74");
+ CHECK(a8.IsSiteLocal());
+
+ NPT_IpAddress a9;
+ a9.ResolveName("fd00::bae8:56ff:fe45:fc74");
+ CHECK(a9.IsUniqueLocal());
+
+ NPT_IpAddress a10;
+ a10.ResolveName("ff05::2");
+ CHECK(a10.IsMulticast());
+
+#endif
+ NPT_IpAddress b1(192, 168, 1, 1);
+ CHECK(b1.IsUniqueLocal());
+ NPT_IpAddress b2(172, 16, 1, 1);
+ CHECK(b2.IsUniqueLocal());
+ NPT_IpAddress b3(10, 1, 1, 1);
+ CHECK(b3.IsUniqueLocal());
+ NPT_IpAddress b4(169, 254, 1, 1);
+ CHECK(b4.IsLinkLocal());
+ NPT_IpAddress b5(239, 255, 255, 251);
+ CHECK(b5.IsMulticast());
+}
+
+/*----------------------------------------------------------------------
+| main
++---------------------------------------------------------------------*/
+int
+main(int /*argc*/, char** /*argv*/)
+{
+ // setup debugging
+#if defined(WIN32) && defined(_DEBUG)
+ int flags = _crtDbgFlag |
+ _CRTDBG_ALLOC_MEM_DF |
+ _CRTDBG_DELAY_FREE_MEM_DF |
+ _CRTDBG_CHECK_ALWAYS_DF;
+
+ _CrtSetDbgFlag(flags);
+ //AllocConsole();
+ //freopen("CONOUT$", "w", stdout);
+#endif
+
+ TestAddresses();
+
+ NPT_IpAddress addr;
+ NPT_Result result;
+
+ result = addr.ResolveName("www.perdu.com");
+ CHECK(NPT_SUCCEEDED(result));
+ Resolver resolver1("www.perdu.com", addr);
+
+ result = addr.ResolveName("zebulon.bok.net");
+ CHECK(NPT_SUCCEEDED(result));
+ Resolver resolver2("zebulon.bok.net", addr);
+
+ resolver1.Start();
+ resolver2.Start();
+
+ NPT_System::Sleep(10.0);
+ NeedToStop = true;
+ resolver1.Wait();
+ resolver2.Wait();
+
+#if defined(WIN32) && defined(_DEBUG)
+ _CrtDumpMemoryLeaks();
+#endif
+
+ return 0;
+}