wasSharpNET – Blame information for rev 27

Subversion Repositories:
Rev:
Rev Author Line No. Line
5 office 1 ///////////////////////////////////////////////////////////////////////////
2 // Copyright (C) Wizardry and Steamworks 2016 - License: GNU GPLv3 //
3 // Please see: http://www.gnu.org/licenses/gpl.html for legal details, //
4 // rights of fair usage, the disclaimer and warranty conditions. //
5 ///////////////////////////////////////////////////////////////////////////
6  
7 using System;
8 using System.Net;
9  
10 namespace wasSharpNET.Network
11 {
12 /// <summary>
13 /// IPAddress extensions.
14 /// </summary>
15 /// <remarks>https://blogs.msdn.microsoft.com/knom/2008/12/31/ip-address-calculations-with-c-subnetmasks-networks/</remarks>
16 public static class IPAddressExtensions
17 {
18 public static IPAddress GetBroadcastAddress(this IPAddress address, IPAddress subnetMask)
19 {
20 var ipAdressBytes = address.GetAddressBytes();
21 var subnetMaskBytes = subnetMask.GetAddressBytes();
22  
23 if (ipAdressBytes.Length != subnetMaskBytes.Length)
24 throw new ArgumentException("Lengths of IP address and subnet mask do not match.");
25  
26 var broadcastAddress = new byte[ipAdressBytes.Length];
27 for (var i = 0; i < broadcastAddress.Length; i++)
27 office 28 broadcastAddress[i] = (byte) (ipAdressBytes[i] | (subnetMaskBytes[i] ^ 255));
5 office 29 return new IPAddress(broadcastAddress);
30 }
31  
32 public static IPAddress GetNetworkAddress(this IPAddress address, IPAddress subnetMask)
33 {
34 var ipAdressBytes = address.GetAddressBytes();
35 var subnetMaskBytes = subnetMask.GetAddressBytes();
36  
37 if (ipAdressBytes.Length != subnetMaskBytes.Length)
38 throw new ArgumentException("Lengths of IP address and subnet mask do not match.");
39  
40 var broadcastAddress = new byte[ipAdressBytes.Length];
41 for (var i = 0; i < broadcastAddress.Length; i++)
27 office 42 broadcastAddress[i] = (byte) (ipAdressBytes[i] & subnetMaskBytes[i]);
5 office 43 return new IPAddress(broadcastAddress);
44 }
45  
46 public static bool IsInSameSubnet(this IPAddress address2, IPAddress address, IPAddress subnetMask)
47 {
48 var network1 = address.GetNetworkAddress(subnetMask);
49 var network2 = address2.GetNetworkAddress(subnetMask);
50  
51 return network1.Equals(network2);
52 }
53 }
27 office 54 }