System.Drawing: added email to icon and test file headers
[mono.git] / mcs / class / System / System.Net.NetworkInformation / UnicastIPAddressInformationCollection.cs
1 //
2 // System.Net.NetworkInformation.UnicastIPAddressInformationCollection
3 //
4 // Authors:
5 //      Gonzalo Paniagua Javier (gonzalo@novell.com)
6 //      Atsushi Enomoto (atsushi@ximian.com)
7 //
8 // Copyright (c) 2006-2007 Novell, Inc. (http://www.novell.com)
9 //
10 // Permission is hereby granted, free of charge, to any person obtaining
11 // a copy of this software and associated documentation files (the
12 // "Software"), to deal in the Software without restriction, including
13 // without limitation the rights to use, copy, modify, merge, publish,
14 // distribute, sublicense, and/or sell copies of the Software, and to
15 // permit persons to whom the Software is furnished to do so, subject to
16 // the following conditions:
17 // 
18 // The above copyright notice and this permission notice shall be
19 // included in all copies or substantial portions of the Software.
20 // 
21 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
24 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
25 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
26 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
27 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28 //
29 #if NET_2_0
30 using System;
31 using System.Collections;
32 using System.Collections.Generic;
33 using System.Runtime.InteropServices;
34
35 namespace System.Net.NetworkInformation {
36         public class UnicastIPAddressInformationCollection : ICollection<UnicastIPAddressInformation>,
37                                                 IEnumerable<UnicastIPAddressInformation> {
38
39                 List<UnicastIPAddressInformation> list = new List<UnicastIPAddressInformation> ();
40
41                 protected internal UnicastIPAddressInformationCollection ()
42                 {
43                 }
44
45                 public virtual void Add (UnicastIPAddressInformation address)
46                 {
47                         if (IsReadOnly)
48                                 throw new NotSupportedException ("The collection is read-only.");
49                         list.Add (address);
50                 }
51
52                 public virtual void Clear ()
53                 {
54                         if (IsReadOnly)
55                                 throw new NotSupportedException ("The collection is read-only.");
56                         list.Clear ();
57                 }
58
59                 public virtual bool Contains (UnicastIPAddressInformation address)
60                 {
61                         return list.Contains (address);
62                 }
63
64                 public virtual void CopyTo (UnicastIPAddressInformation [] array, int offset)
65                 {
66                         list.CopyTo (array, offset);
67                 }
68
69                 public virtual IEnumerator<UnicastIPAddressInformation> GetEnumerator ()
70                 {
71                         return ((IEnumerable<UnicastIPAddressInformation>)list).GetEnumerator ();
72                 }
73
74                 public virtual bool Remove (UnicastIPAddressInformation address)
75                 {
76                         if (IsReadOnly)
77                                 throw new NotSupportedException ("The collection is read-only.");
78                         return list.Remove (address);
79                 }
80
81                 IEnumerator IEnumerable.GetEnumerator ()
82                 {
83                         return list.GetEnumerator ();
84                 }
85
86                 public virtual int Count {
87                         get { return list.Count; }
88                 }
89
90                 public virtual bool IsReadOnly {
91                         get { return true; }
92                 }
93
94                 public virtual UnicastIPAddressInformation this [int index] {
95                         get { return list [index]; }
96                 }
97         }
98
99         class UnicastIPAddressInformationImplCollection : UnicastIPAddressInformationCollection
100         {
101                 public static readonly UnicastIPAddressInformationImplCollection Empty = new UnicastIPAddressInformationImplCollection (true);
102
103                 bool is_readonly;
104
105                 // for static methods
106                 UnicastIPAddressInformationImplCollection (bool isReadOnly)
107                 {
108                         is_readonly = isReadOnly;
109                 }
110
111                 public override bool IsReadOnly {
112                         get { return is_readonly; }
113                 }
114
115                 public static UnicastIPAddressInformationCollection Win32FromUnicast (int ifIndex, IntPtr ptr)
116                 {
117                         UnicastIPAddressInformationImplCollection c = new UnicastIPAddressInformationImplCollection (false);
118                         Win32_IP_ADAPTER_UNICAST_ADDRESS a;
119                         for (IntPtr p = ptr; p != IntPtr.Zero; p = a.Next) {
120                                 a = (Win32_IP_ADAPTER_UNICAST_ADDRESS) Marshal.PtrToStructure (p, typeof (Win32_IP_ADAPTER_UNICAST_ADDRESS));
121                                 c.Add (new Win32UnicastIPAddressInformation (ifIndex, a));
122                         }
123                         c.is_readonly = true;
124                         return c;
125                 }
126
127                 public static UnicastIPAddressInformationCollection LinuxFromList (List<IPAddress> addresses)
128                 {
129                         UnicastIPAddressInformationImplCollection c = new UnicastIPAddressInformationImplCollection (false);
130                         foreach (IPAddress address in addresses) {
131                                 c.Add (new LinuxUnicastIPAddressInformation (address));
132                         }
133                         c.is_readonly = true;
134                         return c;
135                 }
136         }
137 }
138 #endif
139