1 // CoreUtil
2 //
3 // Copyright (C) 2012-2014 Daiyuu Nobori. All Rights Reserved.
4 // Copyright (C) 2012-2014 SoftEther VPN Project at University of Tsukuba. All Rights Reserved.
5 //
6 // License: The Apache License, Version 2.0
7 // https://www.apache.org/licenses/LICENSE-2.0
8 //
9 // DISCLAIMER
10 // ==========
11 //
12 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
13 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
15 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
16 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
17 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
18 // SOFTWARE.
19 //
20 // THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN, UNDER
21 // JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY, MERGE, PUBLISH,
22 // DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS SOFTWARE, THAT ANY
23 // JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS SOFTWARE OR ITS CONTENTS,
24 // AGAINST US (SOFTETHER PROJECT, SOFTETHER CORPORATION, DAIYUU NOBORI OR OTHER
25 // SUPPLIERS), OR ANY JURIDICAL DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND
26 // OF USING, COPYING, MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING,
27 // AND/OR SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND
28 // CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO EXCLUSIVE
29 // JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO, JAPAN. YOU MUST WAIVE
30 // ALL DEFENSES OF LACK OF PERSONAL JURISDICTION AND FORUM NON CONVENIENS.
31 // PROCESS MAY BE SERVED ON EITHER PARTY IN THE MANNER AUTHORIZED BY APPLICABLE
32 // LAW OR COURT RULE.
33 //
34 // USE ONLY IN JAPAN. DO NOT USE THIS SOFTWARE IN ANOTHER COUNTRY UNLESS YOU HAVE
35 // A CONFIRMATION THAT THIS SOFTWARE DOES NOT VIOLATE ANY CRIMINAL LAWS OR CIVIL
36 // RIGHTS IN THAT PARTICULAR COUNTRY. USING THIS SOFTWARE IN OTHER COUNTRIES IS
37 // COMPLETELY AT YOUR OWN RISK. THE SOFTETHER VPN PROJECT HAS DEVELOPED AND
38 // DISTRIBUTED THIS SOFTWARE TO COMPLY ONLY WITH THE JAPANESE LAWS AND EXISTING
39 // CIVIL RIGHTS INCLUDING PATENTS WHICH ARE SUBJECTS APPLY IN JAPAN. OTHER
40 // COUNTRIES' LAWS OR CIVIL RIGHTS ARE NONE OF OUR CONCERNS NOR RESPONSIBILITIES.
41 // WE HAVE NEVER INVESTIGATED ANY CRIMINAL REGULATIONS, CIVIL LAWS OR
42 // INTELLECTUAL PROPERTY RIGHTS INCLUDING PATENTS IN ANY OF OTHER 200+ COUNTRIES
43 // AND TERRITORIES. BY NATURE, THERE ARE 200+ REGIONS IN THE WORLD, WITH
44 // DIFFERENT LAWS. IT IS IMPOSSIBLE TO VERIFY EVERY COUNTRIES' LAWS, REGULATIONS
45 // AND CIVIL RIGHTS TO MAKE THE SOFTWARE COMPLY WITH ALL COUNTRIES' LAWS BY THE
46 // PROJECT. EVEN IF YOU WILL BE SUED BY A PRIVATE ENTITY OR BE DAMAGED BY A
47 // PUBLIC SERVANT IN YOUR COUNTRY, THE DEVELOPERS OF THIS SOFTWARE WILL NEVER BE
48 // LIABLE TO RECOVER OR COMPENSATE SUCH DAMAGES, CRIMINAL OR CIVIL
49 // RESPONSIBILITIES. NOTE THAT THIS LINE IS NOT LICENSE RESTRICTION BUT JUST A
50 // STATEMENT FOR WARNING AND DISCLAIMER.
51 //
52 // READ AND UNDERSTAND THE 'WARNING.TXT' FILE BEFORE USING THIS SOFTWARE.
53 // SOME SOFTWARE PROGRAMS FROM THIRD PARTIES ARE INCLUDED ON THIS SOFTWARE WITH
54 // LICENSE CONDITIONS WHICH ARE DESCRIBED ON THE 'THIRD_PARTY.TXT' FILE.
55 //
56 //
57 // SOURCE CODE CONTRIBUTION
58 // ------------------------
59 //
60 // Your contribution to SoftEther VPN Project is much appreciated.
61 // Please send patches to us through GitHub.
62 // Read the SoftEther VPN Patch Acceptance Policy in advance:
63 // http://www.softether.org/5-download/src/9.patch
64 //
65 //
66 // DEAR SECURITY EXPERTS
67 // ---------------------
68 //
69 // If you find a bug or a security vulnerability please kindly inform us
70 // about the problem immediately so that we can fix the security problem
71 // to protect a lot of users around the world as soon as possible.
72 //
73 // Our e-mail address for security reports is:
74 // softether-vpn-security [at] softether.org
75 //
76 // Please note that the above e-mail address is not a technical support
77 // inquiry address. If you need technical assistance, please visit
78 // http://www.softether.org/ and ask your question on the users forum.
79 //
80 // Thank you for your cooperation.
81 //
82 //
83 // NO MEMORY OR RESOURCE LEAKS
84 // ---------------------------
85 //
86 // The memory-leaks and resource-leaks verification under the stress
87 // test has been passed before release this source code.
88 
89 
90 using System;
91 using System.Threading;
92 using System.Data;
93 using System.Data.Sql;
94 using System.Data.SqlClient;
95 using System.Data.SqlTypes;
96 using System.Text;
97 using System.Configuration;
98 using System.Collections;
99 using System.Collections.Generic;
100 using System.Security.Cryptography;
101 using System.Web;
102 using System.Web.Security;
103 using System.Web.UI;
104 using System.Web.UI.WebControls;
105 using System.Web.UI.WebControls.WebParts;
106 using System.Web.UI.HtmlControls;
107 using System.IO;
108 using System.Drawing;
109 using System.Drawing.Imaging;
110 using System.Drawing.Drawing2D;
111 using System.Diagnostics;
112 using System.Web.Mail;
113 using System.Net;
114 using System.Net.Sockets;
115 using System.Net.NetworkInformation;
116 using System.Runtime.InteropServices;
117 
118 namespace CoreUtil
119 {
120 	public static class Bmp
121 	{
Load(string filename)122 		public static Bitmap Load(string filename)
123 		{
124 			return Load(IO.ReadFile(filename));
125 		}
Load(byte[] data)126 		public static Bitmap Load(byte[] data)
127 		{
128 			MemoryStream ms = new MemoryStream();
129 			ms.Write(data, 0, data.Length);
130 			ms.Seek(0, SeekOrigin.Begin);
131 
132 			return new Bitmap(ms);
133 		}
134 
SaveAsBitmap(Bitmap bmp, string filename)135 		public static void SaveAsBitmap(Bitmap bmp, string filename)
136 		{
137 			IO.SaveFile(filename, SaveAsBitmap(bmp));
138 		}
SaveAsBitmap(Bitmap bmp)139 		public static byte[] SaveAsBitmap(Bitmap bmp)
140 		{
141 			MemoryStream ms = new MemoryStream();
142 
143 			bmp.Save(ms, ImageFormat.Bmp);
144 
145 			return ms.ToArray();
146 		}
147 
SaveAsJpeg(Bitmap bmp, string filename)148 		public static void SaveAsJpeg(Bitmap bmp, string filename)
149 		{
150 			IO.SaveFile(filename, SaveAsJpeg(bmp));
151 		}
SaveAsJpeg(Bitmap bmp)152 		public static byte[] SaveAsJpeg(Bitmap bmp)
153 		{
154 			return SaveAsJpeg(bmp, 100);
155 		}
SaveAsJpeg(Bitmap bmp, string filename, int quality)156 		public static void SaveAsJpeg(Bitmap bmp, string filename, int quality)
157 		{
158 			IO.SaveFile(filename, SaveAsJpeg(bmp, quality));
159 		}
SaveAsJpeg(Bitmap bmp, int quality)160 		public static byte[] SaveAsJpeg(Bitmap bmp, int quality)
161 		{
162 			EncoderParameters eps = new EncoderParameters(1);
163 			EncoderParameter ep = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);
164 			eps.Param[0] = ep;
165 
166 			ImageCodecInfo info = getEncoderInfo("image/jpeg");
167 
168 			MemoryStream ms = new MemoryStream();
169 			bmp.Save(ms, info, eps);
170 
171 			return ms.ToArray();
172 		}
173 
getEncoderInfo(string type)174 		static ImageCodecInfo getEncoderInfo(string type)
175 		{
176 			ImageCodecInfo[] encs = ImageCodecInfo.GetImageEncoders();
177 
178 			foreach (ImageCodecInfo enc in encs)
179 			{
180 				if (Str.StrCmpi(enc.MimeType, type))
181 				{
182 					return enc;
183 				}
184 			}
185 
186 			return null;
187 		}
188 
ResizeBitmap(Bitmap bmp, int width, int height)189 		public static Bitmap ResizeBitmap(Bitmap bmp, int width, int height)
190 		{
191 			Bitmap dst = new Bitmap(width, height, PixelFormat.Format24bppRgb);
192 			Graphics g = Graphics.FromImage(dst);
193 			g.SmoothingMode = SmoothingMode.HighQuality;
194 			g.InterpolationMode = InterpolationMode.HighQualityBicubic;
195 
196 			Rectangle r = new Rectangle(0, 0, width, height);
197 
198 			g.DrawImage(bmp, r);
199 
200 			return dst;
201 		}
202 	}
203 }
204