1: using System;
2: using System.Collections.Generic;
3: using System.Text.RegularExpressions;
4:
5: namespace Ia.Ngn.Cl.Model.Business
6: {
7: ////////////////////////////////////////////////////////////////////////////
8:
9: /// <summary publish="true">
10: /// IP support class of Optical Fiber Network (OFN) business model.
11: /// </summary>
12: ///
13: /// <remarks>
14: /// Copyright © 2018-2019 Jasem Y. Al-Shamlan (info@ia.com.kw), Integrated Applications - Kuwait. All Rights Reserved.
15: ///
16: /// This library is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by
17: /// the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
18: ///
19: /// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
20: /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
21: ///
22: /// You should have received a copy of the GNU General Public License along with this library. If not, see http://www.gnu.org/licenses.
23: ///
24: /// Copyright notice: This notice may not be removed or altered from any source distribution.
25: /// </remarks>
26: public static class Ip
27: {
28: ////////////////////////////////////////////////////////////////////////////
29:
30: /// <summary>
31: ///
32: /// </summary>
33: public static int IpToDec(string s)
34: {
35: return HexToDec(IpToHex(s));
36: }
37:
38: ////////////////////////////////////////////////////////////////////////////
39:
40: /// <summary>
41: ///
42: /// </summary>
43: public static string IpToHex(string ip)
44: {
45: string h;
46: Regex regex;
47: Match m;
48:
49: regex = new Regex(@"(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})");
50:
51: m = regex.Match(ip);
52:
53: if (m.Success)
54: {
55: h = DecToHex(int.Parse(m.Groups[1].Captures[0].Value)) + DecToHex(int.Parse(m.Groups[2].Captures[0].Value)) + DecToHex(int.Parse(m.Groups[3].Captures[0].Value)) + DecToHex(int.Parse(m.Groups[4].Captures[0].Value));
56: }
57: else h = string.Empty;
58:
59: return h;
60: }
61:
62: ////////////////////////////////////////////////////////////////////////////
63:
64: /// <summary>
65: ///
66: /// </summary>
67: public static string DecToHex(int dec)
68: {
69: uint uiDecimal = 0;
70: string hex;
71:
72: try
73: {
74: // convert text string to unsigned integer
75: uiDecimal = checked((uint)System.Convert.ToUInt32(dec));
76:
77: hex = String.Format("{0:x2}", uiDecimal);
78: }
79: catch (System.OverflowException)
80: {
81: // Show overflow message and return
82: hex = string.Empty;
83: }
84:
85: return hex;
86: }
87:
88: ////////////////////////////////////////////////////////////////////////////
89:
90: /// <summary>
91: ///
92: /// </summary>
93: public static int HexToDec(string hex)
94: {
95: // To hold our converted unsigned integer32 value
96: uint dec;
97:
98: try
99: {
100: // Convert hex string to unsigned integer
101: dec = System.Convert.ToUInt32(hex, 16);
102: }
103: catch (System.OverflowException)
104: {
105: // Show overflow message and return
106: return 0;
107: }
108:
109: return (int)dec;
110: }
111:
112: ////////////////////////////////////////////////////////////////////////////
113:
114: /// <summary>
115: ///
116: /// </summary>
117: public static string DecToIp(int i)
118: {
119: return HexToIp(DecToHex(i));
120: }
121:
122: ////////////////////////////////////////////////////////////////////////////
123:
124: /// <summary>
125: ///
126: /// </summary>
127: public static string HexToIp(string h)
128: {
129: string s, s1, s2, s3, s4;
130:
131: h = h.PadLeft(8, '0');
132:
133: s1 = h.Substring(0, 2);
134: s2 = h.Substring(2, 2);
135: s3 = h.Substring(4, 2);
136: s4 = h.Substring(6, 2);
137:
138: s = HexToDec(s1) + "." + HexToDec(s2) + "." + HexToDec(s3) + "." + HexToDec(s4);
139:
140: return s;
141: }
142:
143: ////////////////////////////////////////////////////////////////////////////
144: ////////////////////////////////////////////////////////////////////////////
145: }
146:
147: ////////////////////////////////////////////////////////////////////////////
148: ////////////////////////////////////////////////////////////////////////////
149: }