Merge pull request #2034 from alexrp/ctx-cleanup
[mono.git] / mcs / class / System / System.Net.NetworkInformation / MulticastIPAddressInformationCollection.cs
index 1fa3b9f7fc806e031cab7c838b741b969ae4a1a1..36bd9c42de1a4e5b0bf5346432a2998a05b99bb0 100644 (file)
@@ -4,6 +4,7 @@
 // Authors:
 //     Gonzalo Paniagua Javier (gonzalo@novell.com)
 //     Atsushi Enomoto (atsushi@ximian.com)
+//     Eric Butler (eric@extremeboredom.net)
 //
 // Copyright (c) 2006-2007 Novell, Inc. (http://www.novell.com)
 //
@@ -26,7 +27,6 @@
 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
-#if NET_2_0
 using System.Collections;
 using System.Collections.Generic;
 using System.Runtime.InteropServices;
@@ -93,14 +93,14 @@ namespace System.Net.NetworkInformation {
                }
        }
 
-       class Win32MulticastIPAddressInformationCollection : MulticastIPAddressInformationCollection
+       class MulticastIPAddressInformationImplCollection : MulticastIPAddressInformationCollection
        {
-               public static readonly Win32MulticastIPAddressInformationCollection Empty = new Win32MulticastIPAddressInformationCollection (true);
+               public static readonly MulticastIPAddressInformationImplCollection Empty = new MulticastIPAddressInformationImplCollection (true);
 
                bool is_readonly;
 
                // for static methods
-               Win32MulticastIPAddressInformationCollection (bool isReadOnly)
+               MulticastIPAddressInformationImplCollection (bool isReadOnly)
                {
                        is_readonly = isReadOnly;
                }
@@ -109,13 +109,14 @@ namespace System.Net.NetworkInformation {
                        get { return is_readonly; }
                }
 
-               public static Win32MulticastIPAddressInformationCollection FromMulticast (IntPtr ptr)
+#if !MOBILE
+               public static MulticastIPAddressInformationCollection Win32FromMulticast (IntPtr ptr)
                {
-                       Win32MulticastIPAddressInformationCollection c = new Win32MulticastIPAddressInformationCollection (false);
+                       MulticastIPAddressInformationImplCollection c = new MulticastIPAddressInformationImplCollection (false);
                        Win32_IP_ADAPTER_MULTICAST_ADDRESS a;
                        for (IntPtr p = ptr; p != IntPtr.Zero; p = a.Next) {
                                a = (Win32_IP_ADAPTER_MULTICAST_ADDRESS) Marshal.PtrToStructure (p, typeof (Win32_IP_ADAPTER_MULTICAST_ADDRESS));
-                               c.Add (new Win32MulticastIPAddressInformation (
+                               c.Add (new MulticastIPAddressInformationImpl (
                                       a.Address.GetIPAddress (),
                                       a.LengthFlags.IsDnsEligible,
                                       a.LengthFlags.IsTransient));
@@ -123,7 +124,19 @@ namespace System.Net.NetworkInformation {
                        c.is_readonly = true;
                        return c;
                }
-       }
-}
 #endif
 
+               public static MulticastIPAddressInformationImplCollection LinuxFromList (List<IPAddress> addresses)
+               {
+                       MulticastIPAddressInformationImplCollection c = new MulticastIPAddressInformationImplCollection (false);
+                       foreach (IPAddress address in addresses) {
+                               c.Add (new MulticastIPAddressInformationImpl (
+                                       address,
+                                       true,
+                                       false));
+                       }
+                       c.is_readonly = true;
+                       return c;
+               }
+       }
+}