|
|
@@ -3,6 +3,7 @@ using System; |
|
|
|
using System.Collections.Generic;
|
|
|
|
using System.Diagnostics;
|
|
|
|
using System.IO;
|
|
|
|
using System.IO.Compression;
|
|
|
|
using System.Text;
|
|
|
|
|
|
|
|
namespace shadowsocks_csharp
|
|
|
@@ -28,6 +29,32 @@ namespace shadowsocks_csharp |
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void UncompressFile(string fileName, byte[] content)
|
|
|
|
{
|
|
|
|
FileStream destinationFile = File.Create(fileName);
|
|
|
|
|
|
|
|
// Because the uncompressed size of the file is unknown,
|
|
|
|
// we are using an arbitrary buffer size.
|
|
|
|
byte[] buffer = new byte[4096];
|
|
|
|
int n;
|
|
|
|
|
|
|
|
using (GZipStream input = new GZipStream(new MemoryStream(content),
|
|
|
|
CompressionMode.Decompress, false))
|
|
|
|
{
|
|
|
|
while (true)
|
|
|
|
{
|
|
|
|
n = input.Read(buffer, 0, buffer.Length);
|
|
|
|
if (n == 0)
|
|
|
|
{
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
destinationFile.Write(buffer, 0, n);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
destinationFile.Close();
|
|
|
|
}
|
|
|
|
|
|
|
|
public void Start(Config config)
|
|
|
|
{
|
|
|
|
if (process == null)
|
|
|
@@ -42,7 +69,7 @@ namespace shadowsocks_csharp |
|
|
|
string polipoConfig = Resources.polipo_config;
|
|
|
|
polipoConfig = polipoConfig.Replace("__SOCKS_PORT__", config.local_port.ToString());
|
|
|
|
ByteArrayToFile(temppath + "/polipo.conf", System.Text.Encoding.UTF8.GetBytes(polipoConfig));
|
|
|
|
ByteArrayToFile(temppath + "/ss_polipo.exe", Resources.polipo);
|
|
|
|
UncompressFile(temppath + "/ss_polipo.exe", Resources.polipo_exe);
|
|
|
|
|
|
|
|
process = new Process();
|
|
|
|
// Configure the process using the StartInfo properties.
|
|
|
|