2 * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 using System.Collections.Generic;
21 using System.Threading.Tasks;
22 using System.Collections;
23 using System.Runtime.InteropServices;
25 namespace Tizen.Network.Connection
28 /// This interface provides properties to manage address information of the connection.
30 /// <since_tizen> 3 </since_tizen>
31 public interface IAddressInformation
36 /// <since_tizen> 3 </since_tizen>
37 /// <value>First DNS address of the connection.</value>
38 /// <exception cref="System.NotSupportedException">Thrown during set when feature is not supported.</exception>
39 /// <exception cref="System.ArgumentException">Thrown during set when value is invalid parameter.</exception>
40 /// <exception cref="System.InvalidOperationException">Thrown during set when profile instance is invalid or when method failed due to invalid operation.</exception>
41 System.Net.IPAddress Dns1 { get; set; }
46 /// <since_tizen> 3 </since_tizen>
47 /// <value>Second DNS address of the connection.</value>
48 /// <exception cref="System.NotSupportedException">Thrown during set when feature is not supported.</exception>
49 /// <exception cref="System.ArgumentException">Thrown during set when value is invalid parameter.</exception>
50 /// <exception cref="System.InvalidOperationException">Thrown during set when profile instance is invalid or when method failed due to invalid operation.</exception>
51 System.Net.IPAddress Dns2 { get; set; }
54 /// The gateway address.
56 /// <since_tizen> 3 </since_tizen>
57 /// <value>Gateway address of the connection.</value>
58 /// <exception cref="System.NotSupportedException">Thrown during set when feature is not supported.</exception>
59 /// <exception cref="System.ArgumentException">Thrown during set when value is invalid parameter.</exception>
60 /// <exception cref="System.InvalidOperationException">Thrown during set when profile instance is invalid or when method failed due to invalid operation.</exception>
61 System.Net.IPAddress Gateway { get; set; }
64 /// The subnet mask address.
66 /// <since_tizen> 3 </since_tizen>
67 /// <value>Subnet mask of the connection.</value>
68 /// <exception cref="System.NotSupportedException">Thrown during set when feature is not supported.</exception>
69 /// <exception cref="System.ArgumentException">Thrown during set when value is invalid parameter.</exception>
70 /// <exception cref="System.InvalidOperationException">Thrown during set when profile instance is invalid or when method failed due to invalid operation.</exception>
71 System.Net.IPAddress SubnetMask { get; set; }
76 /// <since_tizen> 3 </since_tizen>
77 /// <value>IP address of the connection.</value>
78 /// <exception cref="System.NotSupportedException">Thrown during set when feature is not supported.</exception>
79 /// <exception cref="System.ArgumentException">Thrown during set when value is invalid parameter.</exception>
80 /// <exception cref="System.InvalidOperationException">Thrown during set when profile instance is invalid or when method failed due to invalid operation.</exception>
81 System.Net.IPAddress IP { get; set; }
84 /// The type of IP config.
86 /// <since_tizen> 3 </since_tizen>
87 /// <value>IP config type of the connection.</value>
88 /// <exception cref="System.NotSupportedException">Thrown during set when feature is not supported.</exception>
89 /// <exception cref="System.ArgumentException">Thrown during set when value is invalid parameter.</exception>
90 /// <exception cref="System.InvalidOperationException">Thrown during set when profile instance is invalid or when method failed due to invalid operation.</exception>
91 IPConfigType IPConfigType { get; set; }
94 /// The prefix length.
96 /// <since_tizen> 3 </since_tizen>
97 /// <value>Prefix length of the connection.</value>
98 /// <exception cref="System.NotSupportedException">Thrown during set when feature is not supported.</exception>
99 /// <exception cref="System.ArgumentException">Thrown during set when value is invalid parameter.</exception>
100 /// <exception cref="System.InvalidOperationException">Thrown during set when profile instance is invalid or when method failed due to invalid operation.</exception>
101 int PrefixLength { get; set; }
104 /// The DNS config type.
106 /// <since_tizen> 3 </since_tizen>
107 /// <value>Config type of the DNS.</value>
108 /// <exception cref="System.NotSupportedException">Thrown during set when feature is not supported.</exception>
109 /// <exception cref="System.ArgumentException">Thrown during set when value is invalid parameter.</exception>
110 /// <exception cref="System.InvalidOperationException">Thrown during set when profile instance is invalid or when method failed due to invalid operation.</exception>
111 DnsConfigType DnsConfigType { get; set; }
114 /// The DHCP server address. It is only supported for IPV4 address family.
116 /// <value>Server address of the DHCP.</value>
117 System.Net.IPAddress DhcpServerAddress { get; }
120 internal class ConnectionAddressInformation : IAddressInformation
122 private IntPtr _profileHandle;
123 private AddressFamily _family;
125 internal ConnectionAddressInformation(IntPtr handle, AddressFamily family)
127 _profileHandle = handle;
131 public System.Net.IPAddress Dns1
136 int ret = Interop.ConnectionProfile.GetDnsAddress(_profileHandle, 1, (int)_family, out Value);
137 if ((ConnectionError)ret != ConnectionError.None)
139 Log.Error(Globals.LogTag, "It failed to get dns1 address, " + (ConnectionError)ret);
141 string result = Marshal.PtrToStringAnsi(Value);
142 Interop.Libc.Free(Value);
144 return System.Net.IPAddress.Parse("0.0.0.0");
145 return System.Net.IPAddress.Parse(result);
150 int ret = Interop.ConnectionProfile.SetDnsAddress(_profileHandle, 1, (int)_family, value.ToString());
151 if ((ConnectionError)ret != ConnectionError.None)
153 Log.Error(Globals.LogTag, "It failed to set dns1 address, " + (ConnectionError)ret);
154 ConnectionErrorFactory.CheckFeatureUnsupportedException(ret, "http://tizen.org/feature/network.telephony " + "http://tizen.org/feature/network.wifi " + "http://tizen.org/feature/network.tethering.bluetooth " + "http://tizen.org/feature/network.ethernet");
155 ConnectionErrorFactory.CheckHandleNullException(ret, (_profileHandle == IntPtr.Zero), "ProfileHandle may have been disposed or released");
156 ConnectionErrorFactory.ThrowConnectionException(ret);
160 public System.Net.IPAddress Dns2
165 int ret = Interop.ConnectionProfile.GetDnsAddress(_profileHandle, 2, (int)_family, out Value);
166 if ((ConnectionError)ret != ConnectionError.None)
168 Log.Error(Globals.LogTag, "It failed to get dns2 address, " + (ConnectionError)ret);
170 string result = Marshal.PtrToStringAnsi(Value);
171 Interop.Libc.Free(Value);
173 return System.Net.IPAddress.Parse("0.0.0.0");
174 return System.Net.IPAddress.Parse(result);
179 int ret = Interop.ConnectionProfile.SetDnsAddress(_profileHandle, 2, (int)_family, value.ToString());
180 if ((ConnectionError)ret != ConnectionError.None)
182 Log.Error(Globals.LogTag, "It failed to set dns2 address, " + (ConnectionError)ret);
183 ConnectionErrorFactory.CheckFeatureUnsupportedException(ret, "http://tizen.org/feature/network.telephony " + "http://tizen.org/feature/network.wifi " + "http://tizen.org/feature/network.tethering.bluetooth " + "http://tizen.org/feature/network.ethernet");
184 ConnectionErrorFactory.CheckHandleNullException(ret, (_profileHandle == IntPtr.Zero), "ProfileHandle may have been disposed or released");
185 ConnectionErrorFactory.ThrowConnectionException(ret);
190 public System.Net.IPAddress Gateway
195 int ret = Interop.ConnectionProfile.GetGatewayAddress(_profileHandle, (int)_family, out Value);
196 if ((ConnectionError)ret != ConnectionError.None)
198 Log.Error(Globals.LogTag, "It failed to get gateway, " + (ConnectionError)ret);
200 string result = Marshal.PtrToStringAnsi(Value);
201 Interop.Libc.Free(Value);
203 return System.Net.IPAddress.Parse("0.0.0.0");
204 return System.Net.IPAddress.Parse(result);
209 int ret = Interop.ConnectionProfile.SetGatewayAddress(_profileHandle, (int)_family, value.ToString());
210 if ((ConnectionError)ret != ConnectionError.None)
212 Log.Error(Globals.LogTag, "It failed to set gateway, " + (ConnectionError)ret);
213 ConnectionErrorFactory.CheckFeatureUnsupportedException(ret, "http://tizen.org/feature/network.telephony " + "http://tizen.org/feature/network.wifi " + "http://tizen.org/feature/network.tethering.bluetooth " + "http://tizen.org/feature/network.ethernet");
214 ConnectionErrorFactory.CheckHandleNullException(ret, (_profileHandle == IntPtr.Zero), "ProfileHandle may have been disposed or released");
215 ConnectionErrorFactory.ThrowConnectionException(ret);
221 public System.Net.IPAddress SubnetMask
226 int ret = Interop.ConnectionProfile.GetSubnetMask(_profileHandle, (int)_family, out Value);
227 if ((ConnectionError)ret != ConnectionError.None)
229 Log.Error(Globals.LogTag, "It failed to get subnet mask, " + (ConnectionError)ret);
231 string result = Marshal.PtrToStringAnsi(Value);
232 Interop.Libc.Free(Value);
234 return System.Net.IPAddress.Parse("0.0.0.0");
235 return System.Net.IPAddress.Parse(result);
240 int ret = Interop.ConnectionProfile.SetSubnetMask(_profileHandle, (int)_family, value.ToString());
241 if ((ConnectionError)ret != ConnectionError.None)
243 Log.Error(Globals.LogTag, "It failed to set subnet mask, " + (ConnectionError)ret);
244 ConnectionErrorFactory.CheckFeatureUnsupportedException(ret, "http://tizen.org/feature/network.telephony " + "http://tizen.org/feature/network.wifi " + "http://tizen.org/feature/network.tethering.bluetooth " + "http://tizen.org/feature/network.ethernet");
245 ConnectionErrorFactory.CheckHandleNullException(ret, (_profileHandle == IntPtr.Zero), "ProfileHandle may have been disposed or released");
246 ConnectionErrorFactory.ThrowConnectionException(ret);
252 public System.Net.IPAddress IP
257 int ret = Interop.ConnectionProfile.GetIPAddress(_profileHandle, (int)_family, out Value);
258 if ((ConnectionError)ret != ConnectionError.None)
260 Log.Error(Globals.LogTag, "It failed to get ip, " + (ConnectionError)ret);
262 string result = Marshal.PtrToStringAnsi(Value);
263 Interop.Libc.Free(Value);
265 return System.Net.IPAddress.Parse("0.0.0.0");
266 return System.Net.IPAddress.Parse(result);
271 int ret = Interop.ConnectionProfile.SetIPAddress(_profileHandle, (int)_family, value.ToString());
272 if ((ConnectionError)ret != ConnectionError.None)
274 Log.Error(Globals.LogTag, "It failed to set ip, " + (ConnectionError)ret);
275 ConnectionErrorFactory.CheckFeatureUnsupportedException(ret, "http://tizen.org/feature/network.telephony " + "http://tizen.org/feature/network.wifi " + "http://tizen.org/feature/network.tethering.bluetooth " + "http://tizen.org/feature/network.ethernet");
276 ConnectionErrorFactory.CheckHandleNullException(ret, (_profileHandle == IntPtr.Zero), "ProfileHandle may have been disposed or released");
277 ConnectionErrorFactory.ThrowConnectionException(ret);
282 public IPConfigType IPConfigType
287 int ret = Interop.ConnectionProfile.GetIPConfigType(_profileHandle, (int)_family, out Value);
288 if ((ConnectionError)ret != ConnectionError.None)
290 Log.Error(Globals.LogTag, "It failed to get ip config type, " + (ConnectionError)ret);
292 return (IPConfigType)Value;
297 int ret = Interop.ConnectionProfile.SetIPConfigType(_profileHandle, (int)_family, (int)value);
298 if ((ConnectionError)ret != ConnectionError.None)
300 Log.Error(Globals.LogTag, "It failed to set ip config type, " + (ConnectionError)ret);
301 ConnectionErrorFactory.CheckFeatureUnsupportedException(ret, "http://tizen.org/feature/network.telephony " + "http://tizen.org/feature/network.wifi " + "http://tizen.org/feature/network.tethering.bluetooth " + "http://tizen.org/feature/network.ethernet");
302 ConnectionErrorFactory.CheckHandleNullException(ret, (_profileHandle == IntPtr.Zero), "ProfileHandle may have been disposed or released");
303 ConnectionErrorFactory.ThrowConnectionException(ret);
308 public int PrefixLength
313 int ret = Interop.ConnectionProfile.GetPrefixLength(_profileHandle, (int)_family, out Value);
314 if ((ConnectionError)ret != ConnectionError.None)
316 Log.Error(Globals.LogTag, "It failed to get prefix length, " + (ConnectionError)ret);
323 int ret = Interop.ConnectionProfile.SetPrefixLength(_profileHandle, (int)_family, value);
324 if ((ConnectionError)ret != ConnectionError.None)
326 Log.Error(Globals.LogTag, "It failed to set prefix length, " + (ConnectionError)ret);
327 ConnectionErrorFactory.CheckFeatureUnsupportedException(ret, "http://tizen.org/feature/network.telephony " + "http://tizen.org/feature/network.wifi " + "http://tizen.org/feature/network.tethering.bluetooth " + "http://tizen.org/feature/network.ethernet");
328 ConnectionErrorFactory.CheckHandleNullException(ret, (_profileHandle == IntPtr.Zero), "ProfileHandle may have been disposed or released");
329 ConnectionErrorFactory.ThrowConnectionException(ret);
334 public DnsConfigType DnsConfigType
339 int ret = Interop.ConnectionProfile.GetDnsConfigType(_profileHandle, (int)_family, out Value);
340 if ((ConnectionError)ret != ConnectionError.None)
342 Log.Error(Globals.LogTag, "It failed to get DNS config type, " + (ConnectionError)ret);
344 return (DnsConfigType)Value;
349 int ret = Interop.ConnectionProfile.SetDnsConfigType(_profileHandle, (int)_family, (int)value);
350 if ((ConnectionError)ret != ConnectionError.None)
352 Log.Error(Globals.LogTag, "It failed to set DNS config type, " + (ConnectionError)ret);
353 ConnectionErrorFactory.CheckFeatureUnsupportedException(ret, "http://tizen.org/feature/network.telephony " + "http://tizen.org/feature/network.wifi " + "http://tizen.org/feature/network.tethering.bluetooth " + "http://tizen.org/feature/network.ethernet");
354 ConnectionErrorFactory.CheckHandleNullException(ret, (_profileHandle == IntPtr.Zero), "ProfileHandle may have been disposed or released");
355 ConnectionErrorFactory.ThrowConnectionException(ret);
360 public System.Net.IPAddress DhcpServerAddress
365 int ret = Interop.ConnectionProfile.GetDhcpServerAddress(_profileHandle, _family, out dhcpServer);
366 if ((ConnectionError)ret != ConnectionError.None)
368 Log.Error(Globals.LogTag, "It failed to get the DHCP server address, " + (ConnectionError)ret);
371 if (dhcpServer == null)
373 return System.Net.IPAddress.Parse("0.0.0.0");
378 return System.Net.IPAddress.Parse(dhcpServer);