@@ -0,0 +1,56 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Runtime.Serialization.Json; | |||||
using System.Text; | |||||
using System.IO; | |||||
namespace shadowsocks_csharp | |||||
{ | |||||
[Serializable] | |||||
public class Config | |||||
{ | |||||
public string server; | |||||
public int server_port; | |||||
public int local_port; | |||||
public string password; | |||||
public static Config Load() | |||||
{ | |||||
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Config)); | |||||
try | |||||
{ | |||||
using (FileStream fs = File.OpenRead(@"config.json")) | |||||
{ | |||||
Config config = ser.ReadObject(fs) as Config; | |||||
return config; | |||||
} | |||||
} | |||||
catch (IOException e) | |||||
{ | |||||
return new Config | |||||
{ | |||||
server = "127.0.0.1", | |||||
server_port = 8388, | |||||
local_port = 1080, | |||||
password = "foobar!" | |||||
}; | |||||
} | |||||
} | |||||
public static void Save(Config config) | |||||
{ | |||||
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Config)); | |||||
try | |||||
{ | |||||
using (FileStream fs = File.Open(@"config.json",FileMode.Create)) | |||||
{ | |||||
ser.WriteObject(fs, config); | |||||
} | |||||
} | |||||
catch (IOException e) | |||||
{ | |||||
Console.Error.WriteLine(e); | |||||
} | |||||
} | |||||
} | |||||
} |
@@ -10,11 +10,12 @@ namespace shadowsocks_csharp | |||||
public byte[] encryptTable = new byte[256]; | public byte[] encryptTable = new byte[256]; | ||||
public byte[] decryptTable = new byte[256]; | public byte[] decryptTable = new byte[256]; | ||||
private Int64 compare(byte x, byte y, UInt64 a, int i) { | |||||
return (Int64)(a % (UInt64)(x + i)) - (Int64)(a % (UInt64)(y + i)); | |||||
private long compare(byte x, byte y, ulong a, int i) | |||||
{ | |||||
return (long)(a % (ulong)(x + i)) - (long)(a % (ulong)(y + i)); | |||||
} | } | ||||
private byte[] mergeSort(byte[] array, UInt64 a, int j) | |||||
private byte[] mergeSort(byte[] array, ulong a, int j) | |||||
{ | { | ||||
if (array.Length == 1) | if (array.Length == 1) | ||||
return array; | return array; | ||||
@@ -13,6 +13,7 @@ namespace shadowsocks_csharp | |||||
{ | { | ||||
private int port; | private int port; | ||||
private Encryptor encryptor; | private Encryptor encryptor; | ||||
Socket listener; | |||||
public Local(int port) | public Local(int port) | ||||
{ | { | ||||
this.port = port; | this.port = port; | ||||
@@ -23,7 +24,7 @@ namespace shadowsocks_csharp | |||||
{ | { | ||||
// Create a TCP/IP socket. | // Create a TCP/IP socket. | ||||
Socket listener = new Socket(AddressFamily.InterNetwork, | |||||
listener = new Socket(AddressFamily.InterNetwork, | |||||
SocketType.Stream, ProtocolType.Tcp); | SocketType.Stream, ProtocolType.Tcp); | ||||
IPEndPoint localEndPoint = new IPEndPoint(0, port); | IPEndPoint localEndPoint = new IPEndPoint(0, port); | ||||
@@ -40,6 +41,11 @@ namespace shadowsocks_csharp | |||||
} | } | ||||
public void Stop() | |||||
{ | |||||
listener.Close(); | |||||
} | |||||
public void AcceptCallback(IAsyncResult ar) | public void AcceptCallback(IAsyncResult ar) | ||||
{ | { | ||||
@@ -12,10 +12,12 @@ namespace shadowsocks_csharp | |||||
[STAThread] | [STAThread] | ||||
static void Main() | static void Main() | ||||
{ | { | ||||
new Local(1081).Start(); | |||||
Local local = new Local(1081); | |||||
local.Start(); | |||||
Application.EnableVisualStyles(); | Application.EnableVisualStyles(); | ||||
Application.SetCompatibleTextRenderingDefault(false); | Application.SetCompatibleTextRenderingDefault(false); | ||||
Application.Run(new Form1()); | Application.Run(new Form1()); | ||||
local.Stop(); | |||||
} | } | ||||
} | } | ||||
} | } |
@@ -10,7 +10,7 @@ | |||||
<AppDesignerFolder>Properties</AppDesignerFolder> | <AppDesignerFolder>Properties</AppDesignerFolder> | ||||
<RootNamespace>shadowsocks_csharp</RootNamespace> | <RootNamespace>shadowsocks_csharp</RootNamespace> | ||||
<AssemblyName>shadowsocks-csharp</AssemblyName> | <AssemblyName>shadowsocks-csharp</AssemblyName> | ||||
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion> | |||||
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion> | |||||
<FileAlignment>512</FileAlignment> | <FileAlignment>512</FileAlignment> | ||||
<StartupObject> | <StartupObject> | ||||
</StartupObject> | </StartupObject> | ||||
@@ -35,13 +35,23 @@ | |||||
</PropertyGroup> | </PropertyGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<Reference Include="System" /> | <Reference Include="System" /> | ||||
<Reference Include="System.Core"> | |||||
<RequiredTargetFramework>3.5</RequiredTargetFramework> | |||||
</Reference> | |||||
<Reference Include="System.Data" /> | <Reference Include="System.Data" /> | ||||
<Reference Include="System.Deployment" /> | <Reference Include="System.Deployment" /> | ||||
<Reference Include="System.Drawing" /> | <Reference Include="System.Drawing" /> | ||||
<Reference Include="System.Runtime.Serialization"> | |||||
<RequiredTargetFramework>3.0</RequiredTargetFramework> | |||||
</Reference> | |||||
<Reference Include="System.ServiceModel.Web"> | |||||
<RequiredTargetFramework>3.5</RequiredTargetFramework> | |||||
</Reference> | |||||
<Reference Include="System.Windows.Forms" /> | <Reference Include="System.Windows.Forms" /> | ||||
<Reference Include="System.Xml" /> | <Reference Include="System.Xml" /> | ||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<Compile Include="Config.cs" /> | |||||
<Compile Include="Encryptor.cs" /> | <Compile Include="Encryptor.cs" /> | ||||
<Compile Include="Form1.cs"> | <Compile Include="Form1.cs"> | ||||
<SubType>Form</SubType> | <SubType>Form</SubType> | ||||
@@ -54,6 +64,7 @@ | |||||
<Compile Include="Properties\AssemblyInfo.cs" /> | <Compile Include="Properties\AssemblyInfo.cs" /> | ||||
<EmbeddedResource Include="Form1.resx"> | <EmbeddedResource Include="Form1.resx"> | ||||
<DependentUpon>Form1.cs</DependentUpon> | <DependentUpon>Form1.cs</DependentUpon> | ||||
<SubType>Designer</SubType> | |||||
</EmbeddedResource> | </EmbeddedResource> | ||||
<EmbeddedResource Include="Properties\Resources.resx"> | <EmbeddedResource Include="Properties\Resources.resx"> | ||||
<Generator>ResXFileCodeGenerator</Generator> | <Generator>ResXFileCodeGenerator</Generator> | ||||