public void Context_BeginRequest(object sender, EventArgs e)
        {
            if (Interlocked.Exchange(ref _isInitialRequest, 0) != 1)
            {
                return;
            }

            if (!CurrentPortMatchesDeleporterSetting((HttpApplication)sender) || RemotingChannelExists())
            {
                return;
            }

            if (WasCompiledInDebugMode(sender))
            {
                // Start listening for connections
                RemotingConfiguration.RegisterWellKnownServiceType(typeof(DeleporterService),
                                                                   DeleporterConfiguration.ServiceName,
                                                                   WellKnownObjectMode.Singleton);
                this._remotingChannel = DeleporterConfiguration.CreateChannel();
                LoggerServer.Log("Registering remoting channel on port {0}", DeleporterConfiguration.RemotingPort);
                ChannelServices.RegisterChannel(this._remotingChannel, false);
            }
            else
            {
                var thisAssembly = Assembly.GetExecutingAssembly().GetName();

                throw new InvalidOperationException(
                          string.Format("You should not enable Deleporter on production web servers. As a security precaution, Deleporter won't run if your ASP.NET application was compiled in Release mode. You need to remove DeleporterServerModule from your Web.config file. If you need to bypass this, the only way is to edit the Deleporter source code and remove this check. Assembly name {0} Version {1}", thisAssembly.Name, thisAssembly.Version));
            }
        }
        public void TestLogServer()
        {
            // Arrange
            var endpoint     = "tcp://127.0.0.1:55010";
            var nsEndpoint   = "tcp://127.0.0.1:55020";
            var logList      = new List <string>();
            var mockLog      = new Mock <ILogger>();
            var loggerServer = new LoggerServer("Test Logger Server", endpoint, nsEndpoint, mockLog.Object);

            mockLog.Setup(l => l.WriteLine(It.IsAny <string>())).Callback((string msg) => {
                logList.Add(msg);
                loggerServer.Stop();
            });

            var task = Task.Run(() => loggerServer.StartAsync(endpoint));

            Thread.Sleep(300);

            var pushContext = new ZContext();
            var pushSocket  = new ZSocket(pushContext, ZSocketType.PUSH);

            pushSocket.Connect(endpoint);

            // Act
            pushSocket.Send(new ZFrame("This is a message."));

            task.Wait();
            // Assert
            Assert.AreEqual(1, logList.Count);
            Assert.AreEqual(1, logList.Count);
        }
        private static bool CurrentPortMatchesDeleporterSetting(HttpApplication httpApplication)
        {
            // Only spin up the remoting channel if we are running on the same port as the settings
            var iisPort = int.Parse(httpApplication.Request.ServerVariables["SERVER_PORT"]);

            LoggerServer.Log("{0} - web.config WebHostPort: {1} running port: {2}",
                             DeleporterConfiguration.WebHostPort == iisPort ? "Match" : "MisMatch", DeleporterConfiguration.WebHostPort, iisPort);
            return(DeleporterConfiguration.WebHostPort == iisPort);
        }
        public void Dispose()
        {
            if (this._remotingChannel != null)
            {
                LoggerServer.Log("Disposing of Remoting Channel");
                ChannelServices.UnregisterChannel(this._remotingChannel);
            }

            LoggerServer.Dispose();
        }
Example #5
0
        public void TestLogServerFromClient()
        {
            // Arrange
            var endpoint           = "tcp://127.0.0.1:55011";
            var nsEndpoint         = "tcp://127.0.0.1:55021";
            var msgPushSocket      = "This is a message from a PUSH zsocket.";
            var msgLogger          = "This is a test message from the LoggerClient.";
            var clientName         = "Test Client";
            var systemRegistration = new SystemRegistration(clientName, endpoint)
            {
                Id = 1
            };
            var logList      = new List <string>();
            var mockLog      = new Mock <ILogger>();
            var loggerServer = new LoggerServer("Test Logger Server", endpoint, nsEndpoint, mockLog.Object);

            mockLog.Setup(l => l.WriteLine(It.IsAny <string>())).Callback((string msg) => {
                logList.Add(msg);
                if (logList.Count > 1)
                {
                    loggerServer.Stop();
                }
            });

            var task = Task.Run(() => loggerServer.StartAsync(endpoint));

            Thread.Sleep(300);

            var pushContext = new ZContext();
            var pushSocket  = new ZSocket(pushContext, ZSocketType.PUSH);

            pushSocket.Connect(endpoint);

            var loggerClient = new LoggerClient(endpoint, clientName, nsEndpoint);
            var vts          = new VectorTimeStamp();

            vts.Update(systemRegistration.Id, DateTime.Now);

            // Act
            loggerClient.WriteLine(msgLogger, vts);
            Thread.Sleep(25);
            pushSocket.Send(new ZFrame(msgPushSocket));
            task.Wait();

            // Assert
            Assert.AreEqual(2, logList.Count);
            Assert.AreEqual($"{clientName}:{vts}: {msgLogger}", logList[0]);
            Assert.AreEqual(msgPushSocket, logList[1]);
        }
        private static bool WasCompiledInDebugMode(object value)
        {
            // In case the app class is auto-generated from a Global.asax file, check its base classes too, going down until we hit ASP.NET itself
            var assembliesToCheck =
                GetInheritanceChain(value.GetType()).Select(x => x.Assembly).TakeWhile(
                    x => x != typeof(HttpApplication).Assembly).Distinct().ToList();

            var wasCompiledInDebugMode = assembliesToCheck.Any(AssemblyWasCompiledInDebugMode);

            if (!wasCompiledInDebugMode)
            {
                LoggerServer.Log("No assemblies found to be in Debug Mode - List of Assemblies:");
                assembliesToCheck.ForEach(x => LoggerServer.Log(x.Location));
            }

            return(wasCompiledInDebugMode);
        }
Example #7
0
        /// <summary>
        /// Initialises this instance.
        /// </summary>
        private void EnsureInitialised()
        {
            if (!_inited)
            {
                // get flight program
                flightProgramScript = PartScript.GetModifier <FlightProgramScript>();
                if (flightProgramScript == null)
                {
                    Debug.LogError("Logger script has no flight program: deactivating");
                    enabled = false;
                    return;
                }

                server = new LoggerServer(Data.Hostname, Data.Port);

                _inited = true;
            }
        }