private Boolean ProcessCommand(PipeMessage msg) { var exit = false; var msgType = msg.GetType(); if (msgType.Equals(Constants.Token, StringComparison.OrdinalIgnoreCase)) { _metadataToken = Int32.Parse(msg.GetData()); } else if (msgType.Equals(Constants.Assembly, StringComparison.OrdinalIgnoreCase)) { _assemblyBuffer = Convert.FromBase64String(msg.GetData()); } else if (msgType.Equals(Constants.Dependency, StringComparison.OrdinalIgnoreCase)) { try { var assemblyBuffer = Convert.FromBase64String(msg.GetData()); var assembly = Assembly.Load(assemblyBuffer); if (!_dependencies.ContainsKey(assembly.FullName)) { _dependencies.Add(assembly.FullName, assembly); } } catch { _lastError = InjectionResult.InvalidAssemblyDependencyBuffer; } } else if (msgType.Equals(Constants.File, StringComparison.OrdinalIgnoreCase)) { try { var data = msg.GetData(); var indexOfPipe = data.IndexOf("|"); var filenameLength = Int32.Parse(data.Substring(0, indexOfPipe)); var filename = data.Substring(indexOfPipe + 1, filenameLength); var fileContent = Convert.FromBase64String(data.Substring(indexOfPipe + 1 + filenameLength)); File.WriteAllBytes(filename, fileContent); } catch { _lastError = InjectionResult.InvalidFileBuffer; } } else if (msgType.Equals(Constants.Run, StringComparison.OrdinalIgnoreCase)) { if (_assemblyBuffer == null) { _lastError = InjectionResult.InvalidAssemblyBuffer; } else { ActivateDll(); } exit = true; } return(exit); }
private PipeMessage SendData(PipeMessage msg) { _writer.WriteLine(msg.Serialize()); _writer.Flush(); var ack = _reader.ReadLine(); return(PipeMessage.Create(ack)); }
public void SendAck(InjectionResult code) { var type = code == InjectionResult.Success ? Constants.Ok : Constants.Error; var ackMsg = new PipeMessage(type, ((Int32)code).ToString()); _writer.WriteLine(ackMsg.Serialize()); _writer.Flush(); }
public void SendAck(InjectionResult code, String message) { var value = String.Format("{0}|{1}", code, message); var type = code == InjectionResult.Success ? Constants.Ok : Constants.Error; var ackMsg = new PipeMessage(type, value); _writer.WriteLine(ackMsg.Serialize()); _writer.Flush(); }
public Boolean SendMessage(PipeMessage msg) { var response = SendData(msg); if (!response.IsSuccess()) { _lastError = (InjectionResult)Int32.Parse(response.GetData()); } return(response.IsSuccess()); }
public Boolean SendMessage(PipeMessage msg) { var response = SendData(msg); if (!response.IsSuccess()) { var items = response.GetData().Split('|'); _lastError = (InjectionResult)Enum.Parse(typeof(InjectionResult), items[0]); _lastErrorMessage = items[1]; } return(response.IsSuccess()); }
public PipeMessage GetMessage() { return(PipeMessage.Create(ReadData())); }
private Boolean ProcessCommand(PipeMessage msg) { var exit = false; var msgType = msg.GetType(); if (msgType.Equals(Constants.Token, StringComparison.OrdinalIgnoreCase)) { _metadataToken = Int32.Parse(msg.GetData()); } else if (msgType.Equals(Constants.Assembly, StringComparison.OrdinalIgnoreCase)) { _assemblyBuffer = Convert.FromBase64String(msg.GetData()); } else if (msgType.Equals(Constants.Dependency, StringComparison.OrdinalIgnoreCase)) { try { var assemblyBuffer = Convert.FromBase64String(msg.GetData()); var assembly = Assembly.Load(assemblyBuffer); if (!_dependencies.ContainsKey(assembly.FullName)) { _dependencies.Add(assembly.FullName, assembly); } } catch (Exception e) { _lastError = InjectionResult.InvalidAssemblyDependencyBuffer; _lastErrorMessage = e.ToString(); } } else if (msgType.Equals(Constants.File, StringComparison.OrdinalIgnoreCase)) { try { var data = msg.GetData(); var indexOfPipe = data.IndexOf("|"); var filenameLength = Int32.Parse(data.Substring(0, indexOfPipe)); var filename = data.Substring(indexOfPipe + 1, filenameLength); var fileContent = Convert.FromBase64String(data.Substring(indexOfPipe + 1 + filenameLength)); File.WriteAllBytes(filename, fileContent); } catch (Exception e) { _lastError = InjectionResult.InvalidFileBuffer; _lastErrorMessage = e.ToString(); } } else if (msgType.Equals(Constants.Context, StringComparison.OrdinalIgnoreCase)) { try { var dataString = msg.GetData(); var data = Convert.FromBase64String(dataString); var formatter = new BinaryFormatter(); using (var memStream = new MemoryStream(data)) { _context = formatter.Deserialize(memStream); } } catch (SerializationException e) { _lastError = InjectionResult.ErrorInContextDeSerialization; _lastErrorMessage = e.ToString(); } catch (Exception e) { _lastError = InjectionResult.UnknownError; _lastErrorMessage = e.ToString(); } } else if (msgType.Equals(Constants.Run, StringComparison.OrdinalIgnoreCase)) { if (_assemblyBuffer == null) { _lastError = InjectionResult.InvalidAssemblyBuffer; _lastErrorMessage = "Assembly bytes to inject not received"; } else { ActivateDll(_context); } exit = true; } return(exit); }