X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FSystem%2FSystem.Net%2FDns.cs;h=15a17be550041196a7c988ed5845394c24d3ca08;hb=2d23bfcbce7a3f7e54dcd5911adb88b244baca35;hp=c4b1eac36130982e263a644aac7287885ea5364e;hpb=b585d00928892398dfbfc315ed78b8032fa14708;p=mono.git diff --git a/mcs/class/System/System.Net/Dns.cs b/mcs/class/System/System.Net/Dns.cs index c4b1eac3613..15a17be5500 100644 --- a/mcs/class/System/System.Net/Dns.cs +++ b/mcs/class/System/System.Net/Dns.cs @@ -48,9 +48,19 @@ namespace System.Net { System.Net.Sockets.Socket.CheckProtocolSupport(); } +#if !MOONLIGHT // global remove of async methods + private delegate IPHostEntry GetHostByNameCallback (string hostName); private delegate IPHostEntry ResolveCallback (string hostName); +#if NET_2_0 + private delegate IPHostEntry GetHostEntryNameCallback (string hostName); + private delegate IPHostEntry GetHostEntryIPCallback (IPAddress hostAddress); + private delegate IPAddress [] GetHostAddressesCallback (string hostName); +#endif +#if NET_2_0 + [Obsolete ("Use BeginGetHostEntry instead")] +#endif public static IAsyncResult BeginGetHostByName (string hostName, AsyncCallback requestCallback, object stateObject) { @@ -61,6 +71,9 @@ namespace System.Net { return c.BeginInvoke (hostName, requestCallback, stateObject); } +#if NET_2_0 + [Obsolete ("Use BeginGetHostEntry instead")] +#endif public static IAsyncResult BeginResolve (string hostName, AsyncCallback requestCallback, object stateObject) { @@ -71,6 +84,51 @@ namespace System.Net { return c.BeginInvoke (hostName, requestCallback, stateObject); } +#if NET_2_0 + public static IAsyncResult BeginGetHostAddresses (string hostNameOrAddress, + AsyncCallback requestCallback, object stateObject) + { + if (hostNameOrAddress == null) + throw new ArgumentNullException ("hostName"); + if (hostNameOrAddress == "0.0.0.0" || hostNameOrAddress == "::0") + throw new ArgumentException ("Addresses 0.0.0.0 (IPv4) " + + "and ::0 (IPv6) are unspecified addresses. You " + + "cannot use them as target address.", + "hostNameOrAddress"); + + GetHostAddressesCallback c = new GetHostAddressesCallback (GetHostAddresses); + return c.BeginInvoke (hostNameOrAddress, requestCallback, stateObject); + } + + public static IAsyncResult BeginGetHostEntry (string hostNameOrAddress, + AsyncCallback requestCallback, object stateObject) + { + if (hostNameOrAddress == null) + throw new ArgumentNullException ("hostName"); + if (hostNameOrAddress == "0.0.0.0" || hostNameOrAddress == "::0") + throw new ArgumentException ("Addresses 0.0.0.0 (IPv4) " + + "and ::0 (IPv6) are unspecified addresses. You " + + "cannot use them as target address.", + "hostNameOrAddress"); + + GetHostEntryNameCallback c = new GetHostEntryNameCallback (GetHostEntry); + return c.BeginInvoke (hostNameOrAddress, requestCallback, stateObject); + } + + public static IAsyncResult BeginGetHostEntry (IPAddress address, + AsyncCallback requestCallback, object stateObject) + { + if (address == null) + throw new ArgumentNullException ("address"); + + GetHostEntryIPCallback c = new GetHostEntryIPCallback (GetHostEntry); + return c.BeginInvoke (address, requestCallback, stateObject); + } +#endif + +#if NET_2_0 + [Obsolete ("Use EndGetHostEntry instead")] +#endif public static IPHostEntry EndGetHostByName (IAsyncResult asyncResult) { if (asyncResult == null) @@ -81,6 +139,9 @@ namespace System.Net { return cb.EndInvoke(asyncResult); } +#if NET_2_0 + [Obsolete ("Use EndGetHostEntry instead")] +#endif public static IPHostEntry EndResolve (IAsyncResult asyncResult) { if (asyncResult == null) @@ -90,6 +151,35 @@ namespace System.Net { return cb.EndInvoke(asyncResult); } +#if NET_2_0 + + public static IPAddress [] EndGetHostAddresses (IAsyncResult asyncResult) + { + if (asyncResult == null) + throw new ArgumentNullException ("asyncResult"); + + AsyncResult async = (AsyncResult) asyncResult; + GetHostAddressesCallback cb = (GetHostAddressesCallback) async.AsyncDelegate; + return cb.EndInvoke(asyncResult); + } + + public static IPHostEntry EndGetHostEntry (IAsyncResult asyncResult) + { + if (asyncResult == null) + throw new ArgumentNullException ("asyncResult"); + AsyncResult async = (AsyncResult) asyncResult; +#if NET_2_0 + if (async.AsyncDelegate is GetHostEntryIPCallback) + return ((GetHostEntryIPCallback) async.AsyncDelegate).EndInvoke (asyncResult); +#endif + GetHostEntryNameCallback cb = (GetHostEntryNameCallback) async.AsyncDelegate; + return cb.EndInvoke(asyncResult); + } +#endif + +#endif // !MOONLIGHT: global remove of async methods + +#if !TARGET_JVM [MethodImplAttribute(MethodImplOptions.InternalCall)] private extern static bool GetHostByName_internal(string host, out string h_name, out string[] h_aliases, out string[] h_addr_list); @@ -98,7 +188,8 @@ namespace System.Net { [MethodImplAttribute(MethodImplOptions.InternalCall)] private extern static bool GetHostName_internal(out string h_name); - +#endif + private static IPHostEntry hostent_to_IPHostEntry(string h_name, string[] h_aliases, string[] h_addrlist) { IPHostEntry he = new IPHostEntry(); @@ -107,11 +198,19 @@ namespace System.Net { he.HostName = h_name; he.Aliases = h_aliases; for(int i=0; i 0) + h_name = iaArr[0].getHostName(); + if (iaArr != null && iaArr.Length > 0) + { + h_addrlist = new String[iaArr.Length]; + for (int i = 0; i < h_addrlist.Length; i++) + h_addrlist[i] = iaArr[i].getHostAddress(); + } + } catch (java.net.UnknownHostException jUHE) { + throw new SocketException((int)SocketError.HostNotFound, jUHE.Message); + } +#else bool ret = GetHostByAddr_internal(address, out h_name, out h_aliases, out h_addrlist); if (!ret) throw new SocketException(11001); - +#endif return (hostent_to_IPHostEntry (h_name, h_aliases, h_addrlist)); + } #if NET_2_0 - [MonoTODO] - public static IPHostEntry GetHostEntry (string hostNameOrAddress) + public +#else + internal +#endif + static IPHostEntry GetHostEntry (string hostNameOrAddress) { if (hostNameOrAddress == null) throw new ArgumentNullException ("hostNameOrAddress"); + if (hostNameOrAddress == "0.0.0.0" || hostNameOrAddress == "::0") + throw new ArgumentException ("Addresses 0.0.0.0 (IPv4) " + + "and ::0 (IPv6) are unspecified addresses. You " + + "cannot use them as target address.", + "hostNameOrAddress"); - return Resolve (hostNameOrAddress); + IPAddress addr; + if (hostNameOrAddress.Length > 0 && IPAddress.TryParse (hostNameOrAddress, out addr)) + return GetHostEntry (addr); + + return GetHostByName (hostNameOrAddress); } + +#if NET_2_0 + public +#else + internal #endif - public static IPHostEntry GetHostByName(string hostName) + static IPHostEntry GetHostEntry (IPAddress address) { - if (hostName == null) - throw new ArgumentNullException(); + if (address == null) + throw new ArgumentNullException ("address"); + return GetHostByAddressFromString (address.ToString (), false); + } + +#if NET_2_0 + public +#else + internal +#endif + static IPAddress [] GetHostAddresses (string hostNameOrAddress) + { + if (hostNameOrAddress == null) + throw new ArgumentNullException ("hostNameOrAddress"); + + if (hostNameOrAddress == "0.0.0.0" || hostNameOrAddress == "::0") + throw new ArgumentException ("Addresses 0.0.0.0 (IPv4) " + + "and ::0 (IPv6) are unspecified addresses. You " + + "cannot use them as target address.", + "hostNameOrAddress"); + + IPAddress addr; + if (hostNameOrAddress.Length > 0 && IPAddress.TryParse (hostNameOrAddress, out addr)) + return new IPAddress[1] { addr }; + + return GetHostEntry (hostNameOrAddress).AddressList; + } + +#if NET_2_0 + [Obsolete ("Use GetHostEntry instead")] +#endif + public static IPHostEntry GetHostByName (string hostName) + { + if (hostName == null) + throw new ArgumentNullException ("hostName"); +#if TARGET_JVM + if (hostName.Length == 0) + hostName = "localhost"; + try { + java.net.InetAddress[] iaArr = java.net.InetAddress.getAllByName(hostName); + IPHostEntry host = new IPHostEntry(); + if (iaArr != null && iaArr.Length > 0) + { + host.HostName = iaArr[0].getHostName(); + IPAddress[] ipArr = new IPAddress[iaArr.Length]; + for (int i = 0; i < iaArr.Length; i++) + ipArr[i] = IPAddress.Parse(iaArr[i].getHostAddress()); + + host.AddressList = ipArr; + } + return host; + } catch (java.net.UnknownHostException jUHE) { + throw new SocketException((int)SocketError.HostNotFound, jUHE.Message); + } +#else string h_name; string[] h_aliases, h_addrlist; - bool ret = GetHostByName_internal(hostName, out h_name, - out h_aliases, - out h_addrlist); + bool ret = GetHostByName_internal(hostName, out h_name, out h_aliases, out h_addrlist); if (ret == false) throw new SocketException(11001); - return(hostent_to_IPHostEntry(h_name, h_aliases, - h_addrlist)); + return(hostent_to_IPHostEntry(h_name, h_aliases, h_addrlist)); +#endif } - public static string GetHostName() + public static string GetHostName () { +#if TARGET_JVM + return java.net.InetAddress.getLocalHost ().getHostName (); +#else string hostName; bool ret = GetHostName_internal(out hostName); @@ -198,8 +393,12 @@ namespace System.Net { throw new SocketException(11001); return hostName; +#endif } +#if NET_2_0 + [Obsolete ("Use GetHostEntry instead")] +#endif public static IPHostEntry Resolve(string hostName) { if (hostName == null)