public override ECheck Check() { if (!SystemHelper.IsAvailableTcpPort(LocalPort)) { return(ECheck.Error); } if (FilterFile != null) { if (!FilterFile.Exists) { WriteError("FilterFile dosen't exists"); return(ECheck.Error); } ScriptHelper script = ScriptHelper.CreateFromFile(FilterFile.FullName, ScriptHelper.DefaultCoreOptions); object obj = script.CreateNewInstance(); TcpForwarder.delDataFilter s = (TcpForwarder.delDataFilter)ReflectionHelper.GetDelegate <TcpForwarder.delDataFilter>(obj, "OnSend"); TcpForwarder.delDataFilter r = (TcpForwarder.delDataFilter)ReflectionHelper.GetDelegate <TcpForwarder.delDataFilter>(obj, "OnReceive"); ReflectionHelper.FreeObject(obj); WriteInfo("Filter Send", s == null ? "NULL" : "OK", s == null ? ConsoleColor.Red : ConsoleColor.Green); WriteInfo("Filter Receive", r == null ? "NULL" : "OK", r == null ? ConsoleColor.Red : ConsoleColor.Green); return(ECheck.Ok); } return(ECheck.Error); }
public override bool Run() { byte version = Convert.ToByte(Target["Version"]); object filterObject = null; TcpForwarder.delDataFilter s = null, r = null; if (FilterFile != null) { if (!FilterFile.Exists) { WriteError("FilterFile dosen't exists"); return(false); } ScriptHelper script = ScriptHelper.CreateFromFile(FilterFile.FullName, ScriptHelper.DefaultCoreOptions); filterObject = script.CreateNewInstance(); s = (TcpForwarder.delDataFilter)ReflectionHelper.GetDelegate <TcpForwarder.delDataFilter>(filterObject, "OnSend"); r = (TcpForwarder.delDataFilter)ReflectionHelper.GetDelegate <TcpForwarder.delDataFilter>(filterObject, "OnReceive"); WriteInfo("Filter Send", s == null ? "NULL" : "OK", s == null ? ConsoleColor.Red : ConsoleColor.Green); WriteInfo("Filter Receive", r == null ? "NULL" : "OK", r == null ? ConsoleColor.Red : ConsoleColor.Green); } TcpForwarder tcp = null; try { tcp = new TcpForwarder(ProxyEndPoint, version, ProxyUser, ProxyPassword, s, r); tcp.OnConnect += Tcp_OnConnect; tcp.OnEror += Tcp_OnEror; tcp.OnDisposed += (sender, e) => { ReflectionHelper.FreeObject(filterObject); }; tcp.Start(new IPEndPoint(IPAddress.Any, LocalPort), RemoteEndPoint); } catch { if (tcp != null) { tcp.Dispose(); } return(false); } return(CreateJob(tcp) != null); }