PageRenderTime 42ms CodeModel.GetById 16ms RepoModel.GetById 1ms app.codeStats 0ms

/src/inet/java/IpAddrPeer.java

https://bitbucket.org/bedlaczech/fan-1.0
Java | 179 lines | 128 code | 27 blank | 24 comment | 4 complexity | a9098bd3d964c708a949ab8cbef952b5 MD5 | raw file
Possible License(s): CC-BY-SA-3.0
  1. //
  2. // Copyright (c) 2007, Brian Frank and Andy Frank
  3. // Licensed under the Academic Free License version 3.0
  4. //
  5. // History:
  6. // 9 Feb 07 Brian Frank Creation
  7. //
  8. package fan.inet;
  9. import java.io.*;
  10. import java.net.*;
  11. import fan.sys.*;
  12. public class IpAddrPeer
  13. {
  14. //////////////////////////////////////////////////////////////////////////
  15. // Peer Factory
  16. //////////////////////////////////////////////////////////////////////////
  17. public static IpAddrPeer make(IpAddr fan)
  18. {
  19. return new IpAddrPeer();
  20. }
  21. //////////////////////////////////////////////////////////////////////////
  22. // Constructors
  23. //////////////////////////////////////////////////////////////////////////
  24. public static IpAddr makeNative(String str)
  25. {
  26. try
  27. {
  28. return make(str, InetAddress.getByName(str));
  29. }
  30. catch (UnknownHostException e)
  31. {
  32. throw UnknownHostErr.make(e.getMessage());
  33. }
  34. }
  35. public static List makeAll(String str)
  36. {
  37. try
  38. {
  39. InetAddress[] addr = InetAddress.getAllByName(str);
  40. List list = new List(IpAddr.$Type, addr.length);
  41. for (int i=0; i<addr.length; ++i)
  42. list.add(make(str, addr[i]));
  43. return list;
  44. }
  45. catch (UnknownHostException e)
  46. {
  47. throw UnknownHostErr.make(e.getMessage());
  48. }
  49. }
  50. public static IpAddr makeBytes(Buf bytes)
  51. {
  52. try
  53. {
  54. MemBuf mb = (MemBuf)bytes;
  55. InetAddress java = InetAddress.getByAddress(mb.bytes());
  56. return make(java.getHostAddress(), java);
  57. }
  58. catch (UnknownHostException e)
  59. {
  60. throw ArgErr.make(e.getMessage());
  61. }
  62. }
  63. public static IpAddr local()
  64. {
  65. if (local == null)
  66. {
  67. try
  68. {
  69. InetAddress java = InetAddress.getLocalHost();
  70. local = make(java.getHostName(), java);
  71. }
  72. catch (Exception e)
  73. {
  74. try
  75. {
  76. // fallback to explicit loopback
  77. InetAddress java = InetAddress.getByAddress(new byte[] {127, 0, 0, 1});
  78. local = make(java.getHostAddress(), java);
  79. }
  80. catch (Exception ignore)
  81. {
  82. // should never happen
  83. ignore.printStackTrace();
  84. }
  85. }
  86. }
  87. return local;
  88. }
  89. public static IpAddr make(InetAddress java)
  90. {
  91. return make(java.getHostAddress(), java);
  92. }
  93. public static IpAddr make(String str, InetAddress java)
  94. {
  95. IpAddr fan = IpAddr.internalMake();
  96. fan.peer.str = str;
  97. fan.peer.java = java;
  98. return fan;
  99. }
  100. //////////////////////////////////////////////////////////////////////////
  101. // Identity
  102. //////////////////////////////////////////////////////////////////////////
  103. public long hash(IpAddr fan)
  104. {
  105. return java.hashCode();
  106. }
  107. public boolean equals(IpAddr fan, Object obj)
  108. {
  109. if (obj instanceof IpAddr)
  110. return this.java.equals(((IpAddr)obj).peer.java);
  111. else
  112. return false;
  113. }
  114. public String toStr(IpAddr fan)
  115. {
  116. return str;
  117. }
  118. //////////////////////////////////////////////////////////////////////////
  119. // Methods
  120. //////////////////////////////////////////////////////////////////////////
  121. public boolean isIPv4(IpAddr fan)
  122. {
  123. return java instanceof Inet4Address;
  124. }
  125. public boolean isIPv6(IpAddr fan)
  126. {
  127. return java instanceof Inet6Address;
  128. }
  129. public Buf bytes(IpAddr fan)
  130. {
  131. return new MemBuf(java.getAddress());
  132. }
  133. public String numeric(IpAddr fan)
  134. {
  135. return java.getHostAddress();
  136. }
  137. public String hostname(IpAddr fan)
  138. {
  139. return java.getHostName();
  140. }
  141. public Object toNative(IpAddr fan)
  142. {
  143. return java;
  144. }
  145. //////////////////////////////////////////////////////////////////////////
  146. // Fields
  147. //////////////////////////////////////////////////////////////////////////
  148. static final Type type = Type.find("inet::IpAddr");
  149. private static IpAddr local;
  150. public String str;
  151. public InetAddress java;
  152. }