private void HandlingMaster(object state) { TcpClient master = state as TcpClient; Stream stream = master.GetStream(); try { using (MemoryStream mStream = new MemoryStream()) { byte[] buffer = new byte[10240]; int realRead = 0; while (true) { realRead = stream.Read(buffer); mStream.Write(buffer, 0, realRead); if (Encoding.UTF8.GetString(buffer, 0, realRead).EndsWith("\n")) { break; } } RijndaelManaged rm = new RijndaelManaged { Key = Encoding.UTF8.GetBytes(Secure.PadRight(24, '#')), Mode = CipherMode.ECB, Padding = PaddingMode.PKCS7 }; byte[] plainTextBuffer = rm.CreateDecryptor().TransformFinalBlock(mStream.ToArray(), 0, (int)mStream.Length - 1); string line = Encoding.UTF8.GetString(plainTextBuffer); SLLineDescription t = SLLineLoader.WhatLine(line); if (t.LineType == SLLineType.Line) { SLLine slLine = SLLineLoader.LineToSLLine(line, "__slaver_main__"); object obj = slLine.Execute(); if (obj != null) { stream.Write(Encoding.UTF8.GetBytes(obj.ToString())); stream.Write(Encoding.UTF8.GetBytes("\n")); } else { stream.Write(Encoding.UTF8.GetBytes("\n")); } stream.Flush(); } else { //TO DO: //audit Console.WriteLine("Not support this command in remote."); } } } catch (Exception e) { //TODO: Log //do nothing now. } finally { stream.Flush(); stream.Close(); } }
public void If(string left, string op, string right, string innerLine) { bool isOk = false; op = op.ToLowerInvariant(); switch (op) { case "eq": isOk = left == right; break; case "lt": if (left == right) { isOk = false; } else { List <string> ordered = new List <string> { left, right }; ordered.Sort(); isOk = ordered.IndexOf(left) == 0; } break; case "le": if (left == right) { isOk = true; } else { List <string> ordered = new List <string> { left, right }; ordered.Sort(); isOk = ordered.IndexOf(left) == 0; } break; case "gt": if (left == right) { isOk = false; } else { List <string> ordered = new List <string> { left, right }; ordered.Sort(); isOk = ordered.IndexOf(left) == 1; } break; case "ge": if (left == right) { isOk = true; } else { List <string> ordered = new List <string> { left, right }; ordered.Sort(); isOk = ordered.IndexOf(left) == 1; } break; default: throw new NotSupportedException("if action only supports eq\\lt\\gt operator."); } if (isOk) { SLLine slLine = SLLineLoader.LineToSLLine(innerLine, Constants.If_Temp_Scripts); slLine.Execute(); } }