llhost.h
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:4k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llhost.h
  3.  * @brief a LLHost uniquely defines a host (Simulator, Proxy or other)
  4.  * across the network
  5.  *
  6.  * $LicenseInfo:firstyear=2000&license=viewergpl$
  7.  * 
  8.  * Copyright (c) 2000-2010, Linden Research, Inc.
  9.  * 
  10.  * Second Life Viewer Source Code
  11.  * The source code in this file ("Source Code") is provided by Linden Lab
  12.  * to you under the terms of the GNU General Public License, version 2.0
  13.  * ("GPL"), unless you have obtained a separate licensing agreement
  14.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  15.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  16.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  17.  * 
  18.  * There are special exceptions to the terms and conditions of the GPL as
  19.  * it is applied to this Source Code. View the full text of the exception
  20.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  21.  * online at
  22.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  23.  * 
  24.  * By copying, modifying or distributing this software, you acknowledge
  25.  * that you have read and understood your obligations described above,
  26.  * and agree to abide by those obligations.
  27.  * 
  28.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  29.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  30.  * COMPLETENESS OR PERFORMANCE.
  31.  * $/LicenseInfo$
  32.  */
  33. #ifndef LL_LLHOST_H
  34. #define LL_LLHOST_H
  35. #include <iostream>
  36. #include <string>
  37. #include "net.h"
  38. const U32 INVALID_PORT = 0;
  39. const U32 INVALID_HOST_IP_ADDRESS = 0x0;
  40. class LLHost {
  41. protected:
  42. U32 mPort;
  43. U32         mIP;
  44. public:
  45. static LLHost invalid;
  46. // CREATORS
  47. LLHost()
  48. : mPort(INVALID_PORT),
  49. mIP(INVALID_HOST_IP_ADDRESS)
  50. { } // STL's hash_map expect this T()
  51. LLHost( U32 ipv4_addr, U32 port )
  52. : mPort( port ) 
  53. {
  54. mIP = ipv4_addr;
  55. }
  56. LLHost( const std::string& ipv4_addr, U32 port )
  57. : mPort( port )
  58. mIP = ip_string_to_u32(ipv4_addr.c_str());
  59. }
  60. explicit LLHost(const U64 ip_port)
  61. {
  62. U32 ip = (U32)(ip_port >> 32);
  63. U32 port = (U32)(ip_port & (U64)0xFFFFFFFF);
  64. mIP = ip;
  65. mPort = port;
  66. }
  67. explicit LLHost(const std::string& ip_and_port);
  68. ~LLHost()
  69. { }
  70. // MANIPULATORS
  71. void set( U32 ip, U32 port ) { mIP = ip; mPort = port; }
  72. void set( const std::string& ipstr, U32 port ) { mIP = ip_string_to_u32(ipstr.c_str()); mPort = port; }
  73. void setAddress( const std::string& ipstr ) { mIP = ip_string_to_u32(ipstr.c_str()); }
  74. void setAddress( U32 ip ) { mIP = ip; }
  75. void setPort( U32 port ) { mPort = port; }
  76. BOOL    setHostByName(const std::string& hname);
  77. LLHost& operator=(const LLHost &rhs);
  78. void    invalidate()                        { mIP = INVALID_HOST_IP_ADDRESS; mPort = INVALID_PORT;};
  79. // READERS
  80. U32 getAddress() const { return mIP; }
  81. U32 getPort() const { return mPort; }
  82. BOOL isOk() const { return (mIP != INVALID_HOST_IP_ADDRESS) && (mPort != INVALID_PORT); }
  83. size_t hash() const { return (mIP << 16) | (mPort & 0xffff); }
  84. std::string getString() const;
  85. std::string getIPString() const;
  86. std::string getHostName() const;
  87. std::string getIPandPort() const;
  88. friend std::ostream& operator<< (std::ostream& os, const LLHost &hh);
  89. // This operator is not well defined. does it expect a
  90. // "192.168.1.1:80" notation or "int int" format? Phoenix 2007-05-18
  91. //friend std::istream& operator>> (std::istream& is, LLHost &hh);
  92. friend bool operator==( const LLHost &lhs, const LLHost &rhs );
  93. friend bool operator!=( const LLHost &lhs, const LLHost &rhs );
  94. friend bool operator<(const LLHost &lhs, const LLHost &rhs);
  95. };
  96. // Function Object required for STL templates using LLHost as key 
  97. class LLHostHash
  98. {
  99. public:
  100. size_t operator() (const LLHost &hh) const { return hh.hash(); }
  101. };
  102. inline bool operator==( const LLHost &lhs, const LLHost &rhs )
  103. {
  104. return (lhs.mIP == rhs.mIP) && (lhs.mPort == rhs.mPort);
  105. }
  106. inline bool operator!=( const LLHost &lhs, const LLHost &rhs )
  107. {
  108. return (lhs.mIP != rhs.mIP) || (lhs.mPort != rhs.mPort);
  109. }
  110. inline bool operator<(const LLHost &lhs, const LLHost &rhs)
  111. {
  112. if (lhs.mIP < rhs.mIP)
  113. {
  114. return true;
  115. }
  116. if (lhs.mIP > rhs.mIP)
  117. {
  118. return false;
  119. }
  120. if (lhs.mPort < rhs.mPort)
  121. {
  122. return true;
  123. }
  124. else
  125. {
  126. return false;
  127. }
  128. }
  129. #endif // LL_LLHOST_H