using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Diagnostics; using SimpleJson; using Shadowsocks.Controller; using System.Text.RegularExpressions; namespace Shadowsocks.Model { [Serializable] public class Server { public string server; public int server_port; public int local_port; public string password; public string method; public string remarks; public string FriendlyName() { if (string.IsNullOrEmpty(server)) { return I18N.GetString("New server"); } if (string.IsNullOrEmpty(remarks)) { return server + ":" + server_port; } else { return remarks + " (" + server + ":" + server_port + ")"; } } public Server() { this.server = ""; this.server_port = 8388; this.local_port = 1080; this.method = "aes-256-cfb"; this.password = ""; this.remarks = ""; } public Server(string ssURL) : this() { string[] r1 = Regex.Split(ssURL, "ss://", RegexOptions.IgnoreCase); string base64 = r1[1].ToString(); byte[] bytes = null; for (var i = 0; i < 3; i++) { try { bytes = System.Convert.FromBase64String(base64); } catch (FormatException) { base64 += "="; } } if (bytes == null) { throw new FormatException(); } string[] parts = Encoding.UTF8.GetString(bytes).Split(new char[2] { ':', '@' }); this.method = parts[0].ToString(); this.password = parts[1].ToString(); this.server = parts[2].ToString(); this.server_port = int.Parse(parts[3].ToString()); } } }