⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cxx

📁 pwlib源码库
💻 CXX
字号:
/* * main.cxx * * PWLib application source file for dtmftest * * Main program entry point. * * Copyright (C) 2004 Post Increment * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Portable Windows Library. * * The Initial Developer of the Original Code is Post Increment * * Contributor(s): ______________________________________. * * $Log: main.cxx,v $ * Revision 1.8  2005/02/13 23:04:18  csoutheren * Put isrfc1918 option handling before first test (doh!) * * Revision 1.7  2005/02/13 22:33:09  csoutheren * Added ability to test an IP address for RFC1918 * * Revision 1.6  2005/02/07 12:12:34  csoutheren * Expanded interface list routines to include IPV6 addresses * Added IPV6 to GetLocalAddress * * Revision 1.5  2005/02/03 12:38:00  csoutheren * Added tests for URL parsing * * Revision 1.4  2005/01/15 19:27:07  csoutheren * Added test for GetInterfaceTable * Thanks to Jan Willamowius * * Revision 1.3  2004/12/14 14:24:20  csoutheren * Added PIPSocket::Address::operator*= to compare IPV4 addresses * to IPV4-compatible IPV6 addresses. More documentation needed * once this is tested as working * * Revision 1.2  2004/12/14 07:49:49  csoutheren * added some tests * * Revision 1.1  2004/12/14 06:50:59  csoutheren * Initial version * * */#include "precompile.h"#include "main.h"#include "version.h"#include <ptlib/sockets.h>#include <ptclib/url.h>PCREATE_PROCESS(IPV6Test);IPV6Test::IPV6Test()  : PProcess("Post Increment", "dtmftest", MAJOR_VERSION, MINOR_VERSION, BUILD_TYPE, BUILD_NUMBER){}void IPV6Test::Main(){  PArgList & args = GetArguments();  args.Parse(             "-isrfc1918."#if PTRACING             "o-output:"             "-no-output."             "t-trace."              "-no-trace."#endif	         "v-version."	     );#if PTRACING  PTrace::Initialise(args.GetOptionCount('t'),                     args.HasOption('o') ? (const char *)args.GetOptionString('o') : NULL,         PTrace::Blocks | PTrace::Timestamp | PTrace::Thread | PTrace::FileAndLine);#endif  if (args.HasOption('v')) {    cout << "Product Name: " << GetName() << endl	 << "Manufacturer: " << GetManufacturer() << endl	 << "Version     : " << GetVersion(TRUE) << endl	 << "System      : " << GetOSName() << '-'	 << GetOSHardware() << ' '	 << GetOSVersion() << endl;    return;  }#if ! P_HAS_IPV6  cout << "error: IPV6 not included in PWLib" << endl;#else  if (args.HasOption("isrfc1918")) {    if (args.GetCount() == 0)       PError << "error: must supply IP address as argument" << endl;    else {      PIPSocket::Address addr(args[0]);      cout << addr << " is " << (addr.IsRFC1918() ? "" : "not ") << "an RFC1918 address" << endl;    }    return;  }  {    // test #1 - check PIPSocket::IsIpAddressFamilyV6Supported    cout << "test #1: PIPSocket::IsIpAddressFamilyV6Supported ";    if (PIPSocket::IsIpAddressFamilyV6Supported())        cout << "OK";    else        cout << "failed";    cout << endl;  }  // this is an IPV6 compatibility address  const BYTE ipv6Data[] = { 0x00, 0x00, 0x00, 0x00,                            0x00, 0x00, 0x00, 0x00,                            0x00, 0x00, 0xff, 0xff,                            220,  244,  81,   10 };  const PIPSocket::Address ipv6Addr1(sizeof(ipv6Data), ipv6Data);  {    // test #2 - check V6 constructor    cout << "test #2: PIPSocket::Address(int, const BYTE *) ";    if (ipv6Addr1.GetVersion() == 6)         cout << "OK";    else        cout << "failed";    cout << endl;  }  PIPSocket::Address ipv6Addr2("::ffff:220.244.81.10");  {    // test #3 - check V6 constructor    cout << "test #3: PIPSocket::Address(const PString & str) ";    if (ipv6Addr1.GetVersion() == 6)         cout << "OK";    else        cout << "failed - " << ipv6Addr1 << " <-> " << ipv6Addr2;    cout << endl;  }    {    // test #4 - check comparison for equality    cout << "test #4: PIPSocket::operator == ";    if (ipv6Addr1 == ipv6Addr2)        cout << "OK";    else        cout << "failed - " << ipv6Addr1 << " <-> " << ipv6Addr2;    cout << endl;  }    PIPSocket::Address ipv6Addr3("::ffff:220.244.81.09");  {    // test #5 - check comparison for non-equality    cout << "test #5: PIPSocket::operator != ";    if (ipv6Addr1 != ipv6Addr3)        cout << "OK";    else        cout << "failed";    cout << endl;  }  PIPSocket::Address ipv4Addr("220.244.81.10");  {    // test #6 - check IPV6 comparison to IPV4    cout << "test #6: PIPSocket::operator == with IPV4 (should fail) ";    if (ipv6Addr1 == ipv4Addr)        cout << "OK";    else        cout << "failed";    cout << endl;  }  {    // test #6a - check IPV6 comparison to IPV4    cout << "test #6a: PIPSocket::operator == with IPV4 (should fail) ";    if (ipv6Addr3 == ipv4Addr)        cout << "OK";    else        cout << "failed";    cout << endl;  }  {    // test #7 - check IPV6 comparison to IPV4    cout << "test #7: PIPSocket::operator *= with IPV4 ";    if (ipv6Addr1 *= ipv4Addr)        cout << "OK";    else        cout << "failed";    cout << endl;  }  {    // test #7a - check IPV6 comparison to IPV4    cout << "test #7a: PIPSocket::operator *= with IPV4 (should fail) ";    if (ipv6Addr3 *= ipv4Addr)        cout << "OK";    else        cout << "failed";    cout << endl;  }  {    // test #8 - check if interface table contains IPV6 addresses    cout << "test #8: check if interface table contains IPV6 addresses";  	PIPSocket::InterfaceTable if_table;	PIPSocket::GetInterfaceTable( if_table );    // Display the interface table    cout << endl;    cout << "The interface table has " << if_table.GetSize()         <<" entries" << endl;    for (PINDEX i=0; i < if_table.GetSize(); i++) {      PIPSocket::InterfaceEntry if_entry = if_table[i];      cout << i << " " << if_entry << endl;    }	cout << "manual check";    cout << endl;  }  {    // test #9 - see if URLs decode correctly    cout << "test #9: check if parsing IPV6 URLs works" << endl;    PURL url("h323:@[::ffff:220.244.81.10]:1234");    PString addrStr = url.GetHostName();    PIPSocket::Address addr;    PIPSocket::GetHostAddress(addrStr, addr);    WORD port = url.GetPort();    cout << "  host string = " << addrStr << " (should be [::ffff:220.244.81.10])\n"         << "  address     = " << addr    << " (should be ::ffff:220.244.81.10)\n"         << "  port        = " << port    << " (should be 1234)\n";  }#endif}// End of File ///////////////////////////////////////////////////////////////

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -