示例#1
0
        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);
        }
示例#2
0
        private PipeMessage SendData(PipeMessage msg)
        {
            _writer.WriteLine(msg.Serialize());
            _writer.Flush();
            var ack = _reader.ReadLine();

            return(PipeMessage.Create(ack));
        }
示例#3
0
        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();
        }
示例#5
0
        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());
        }
示例#7
0
 public PipeMessage GetMessage()
 {
     return(PipeMessage.Create(ReadData()));
 }
示例#8
0
        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);
        }