Ejemplo n.º 1
0
 /// <summary>
 /// Initializes a new instance of the <see cref="SnmpApplication"/> class.
 /// </summary>
 /// <param name="owner">The owner.</param>
 /// <param name="logger">The logger.</param>
 /// <param name="store">The store.</param>
 /// <param name="provider">The provider.</param>
 /// <param name="factory">The factory.</param>
 public SnmpApplication(SnmpApplicationFactory owner, ILogger logger, ObjectStore store, IMembershipProvider provider, MessageHandlerFactory factory)
 {
     _owner = owner;
     _provider = provider;
     _logger = logger;
     _store = store;
     _factory = factory;
 }
Ejemplo n.º 2
0
        public static void AssemblyInitialize(TestContext context)
        {
            // set the http message handler factory to the mode we want for the entire assmebly test execution
            MessageHandlerFactory.Mode = MessageHandlerMode.Fake;

            // setup IOC so test classes can get the shared message handler
            ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);

            // responses are in a ziparchive that is also referenced by the DeploymentItem attributes
            var resources = new ZipResources(Path.Combine(context.DeploymentDirectory, "FakeResponses.zip"));

            SimpleIoc.Default.Register(() => MessageHandlerFactory.CreateMessageHandler(resources));
        }
 private async Task HandleNextMessageAsync(string messageEnvelopeAsString)
 {
     try
     {
         var payload = JsonConvert.DeserializeObject <MessageBrokerEnvelope <MessageBrokerExternalOrderResponseDTO> >(messageEnvelopeAsString);
         var handler = MessageHandlerFactory.GetHandler(MessageTypes.OrderItemsProcessedByProvider);
         await handler.ExecuteAsync(payload);
     }
     catch (Exception ex)
     {
         throw new Exception("Message processing failed.", ex);
     }
 }
Ejemplo n.º 4
0
 static void ReceiveData()
 {
     while (true)
     {
         byte[]          data           = new byte[256];
         int             bytes          = client.GetStream().Read(data, 0, data.Length);
         string          responseData   = System.Text.Encoding.ASCII.GetString(data, 0, bytes);
         GenericMessage  genericMessage = JsonSerializer.Deserialize <GenericMessage>(responseData);
         IMessage        message        = MessageFactory.GetMessage(genericMessage.MessageId, responseData);
         IMessageHandler messageHandler = MessageHandlerFactory.GetMessageHandler(genericMessage.MessageId);
         messageHandler.Execute(client, message);
     }
 }
Ejemplo n.º 5
0
        public void ShouldGetAllHandlers(
            [Frozen] Mock <IServiceProvider> services,
            MessageHandlerFactory sut)
        {
            var handlers = Fixture.CreateMany <IMessageHandler <TestMessage> >();

            services.Setup(x => x.GetService(typeof(IEnumerable <IMessageHandler <TestMessage> >)))
            .Returns(handlers);

            var result = sut.GetHandlersFor <TestMessage>();

            Assert.Equal(handlers, result);
        }
Ejemplo n.º 6
0
        public static async Task RunGatewayAsync(this ServiceBuilder builder)
        {
            var config = builder.ServiceProvider.GetRequiredService <IOptionsMonitor <GatewayConfiguration> >().CurrentValue;
            var logger = builder.ServiceProvider.GetRequiredService <ILoggerFactory>().CreateLogger("F1.Gateway");

            logger.LogInformation("RunGatewayAsync, PlacementDriverAddress:{0}, Host ListenPort:{1}, GatewayAddress:{2}",
                                  config.PlacementDriverAddress, config.ListenPort, config.GatewayAddress);
            builder.SetPDAddress(config.PlacementDriverAddress);
            var handlerFactory       = new MessageHandlerFactory(builder.ServiceProvider);
            var gatewayClientFactory = builder.ServiceProvider.GetRequiredService <GatewayClientFactory>();
            await builder.Listen(config.ListenPort, handlerFactory, new RpcMessageCodec()).ConfigureAwait(false);

            await builder.PrepareGatewayAndRunAsync(config, logger);
        }
Ejemplo n.º 7
0
        public static void Main(string[] args)
        {
            if (args.Length != 0)
            {
                return;
            }

            var users = new UserRegistry();

            users.Add(new OctetString("neither"), DefaultPrivacyProvider.DefaultPair);
            users.Add(new OctetString("authen"), new DefaultPrivacyProvider(new MD5AuthenticationProvider(new OctetString("authentication"))));
            users.Add(new OctetString("privacy"), new DESPrivacyProvider(new OctetString("privacyphrase"),
                                                                         new MD5AuthenticationProvider(new OctetString("authentication"))));

            var trapv1 = new TrapV1MessageHandler();

            trapv1.MessageReceived += WatcherTrapV1Received;
            var trapv1Mapping = new HandlerMapping("v1", "TRAPV1", trapv1);

            var trapv2 = new TrapV2MessageHandler();

            trapv2.MessageReceived += WatcherTrapV2Received;
            var trapv2Mapping = new HandlerMapping("v2,v3", "TRAPV2", trapv2);

            var inform = new InformRequestMessageHandler();

            inform.MessageReceived += WatcherInformRequestReceived;
            var informMapping = new HandlerMapping("v2,v3", "INFORM", inform);

            var store          = new ObjectStore();
            var v1             = new Version1MembershipProvider(new OctetString("public"), new OctetString("public"));
            var v2             = new Version2MembershipProvider(new OctetString("public"), new OctetString("public"));
            var v3             = new Version3MembershipProvider();
            var membership     = new ComposedMembershipProvider(new IMembershipProvider[] { v1, v2, v3 });
            var handlerFactory = new MessageHandlerFactory(new[] { trapv1Mapping, trapv2Mapping, informMapping });

            var pipelineFactory = new SnmpApplicationFactory(store, membership, handlerFactory);

            using (var engine = new SnmpEngine(pipelineFactory, new Listener {
                Users = users
            }, new EngineGroup()))
            {
                engine.Listener.AddBinding(new IPEndPoint(IPAddress.Any, 162));
                engine.Start();
                Console.WriteLine("#SNMP is available at http://sharpsnmplib.codeplex.com");
                Console.WriteLine("Press any key to stop . . . ");
                Console.Read();
                engine.Stop();
            }
        }
Ejemplo n.º 8
0
        public async Task RoundtripPostalCode()
        {
            MessageHandlerFactory.Mode = MessageHandlerMode.Capture;
            var handler = MessageHandlerFactory.CreateMessageHandler(new FileSystemResources(TestContext.TestRunDirectory));
            var service = new GeoCoder(handler, CredentialStore.RetrieveObject("bing.key.json").Key);

            var coord = await service.GetCoordinate(new Address()
            {
                postalCode = "55116", countryRegion = "US"
            });

            var address = await service.GetAddress(coord.Item1, coord.Item2);

            Assert.AreEqual("55116", address.postalCode);
        }
Ejemplo n.º 9
0
        static void MessageHandle()
        {
            while (true)
            {
                lock (Client.ReceivedMessages)
                {
                    foreach (var message in Client.ReceivedMessages)
                    {
                        MessageHandlerFactory.GetMessageHandler(message.MessageId).Execute(message);
                    }

                    Client.ReceivedMessages.Clear();
                }
            }
        }
        public static void AssemblyInitialize(TestContext context)
        {
            // set the http message handler factory to the mode we want for the entire assmebly test execution
            MessageHandlerFactory.Mode = MessageHandlerMode.Fake;

            // folders where mock responses are stored and where captured response should be saved
            var mockFolder    = context.DeploymentDirectory;                                     // the folder where the unit tests are running
            var captureFolder = Path.Combine(context.TestRunDirectory, @"..\..\MockResponses\"); // kinda hacky but this should be the solution folder

            // here we don't want to serialize or include our api key in response lookups so
            // pass a lambda that will indicate to the serialzier to filter that param out
            var store = new FileSystemResources(mockFolder);

            Handler = MessageHandlerFactory.CreateMessageHandler(store);
        }
Ejemplo n.º 11
0
        /// <summary>
        /// Gets the message handler candidates for the specified message, i.e., the message handlers which return a confidence
        /// higher than one for the current message.
        /// </summary>
        /// <param name="message">The message info.</param>
        /// <returns></returns>
        private static Dictionary <MessageHandler, MessageHandlingResponse> GetMessageHandlerCandidates(Message message)
        {
            Dictionary <MessageHandler, MessageHandlingResponse> messageHandlerCandidates = new Dictionary <MessageHandler, MessageHandlingResponse>();
            List <MessageHandler> allMessageHandlers = MessageHandlerFactory.InitializeMessageHandlers();

            foreach (MessageHandler messageHandlerCandidate in allMessageHandlers)
            {
                MessageHandlingResponse handlingResponse = messageHandlerCandidate.CanHandle(message);
                if (handlingResponse.Confidence > 0)
                {
                    messageHandlerCandidates[messageHandlerCandidate] = handlingResponse;
                }
            }
            return(messageHandlerCandidates);
        }
 public static IServiceCollection AddMessageHandlers(this IServiceCollection services)
 {
     services.RegisterHandler <MessageOne, MessageOneHandler>();
     services.RegisterHandler <MessageTwo, MessageTwoHandler>();
     // some string constants for message types would be better.
     services.AddSingleton <IMessageHandlerFactory>(serviceProvider =>
     {
         var factory = new MessageHandlerFactory();
         factory.RegisterHandler("MessageOne",
                                 serviceProvider.GetService <MessageHandlerWrapper <MessageOne> >);
         factory.RegisterHandler("MessageTwo",
                                 serviceProvider.GetService <MessageHandlerWrapper <MessageTwo> >);
         return(factory);
     });
     services.AddSingleton <IMessageHandler, MessageRouter>();
     return(services);
 }
Ejemplo n.º 13
0
        public void Rework(string strBSID, string strBOID, int iProcInstID,
                           string strStepName, string strApproverId,
                           UserAction eAction,
                           string strComment,
                           DateTime dtTime)
        {
            strBSID = strBSID + "_" + System.Reflection.MethodBase.GetCurrentMethod().Name;
            string errMsg   = string.Empty;
            int    reqState = 1;

            try
            {
                MessageContext ctx = new MessageContext()
                {
                    iProcInstID   = iProcInstID,
                    strBOID       = strBOID,
                    strBSID       = strBSID,
                    strComment    = strComment,
                    dtTime        = dtTime,
                    strStepName   = strStepName,
                    eAction       = (int)eAction,
                    ApproveStatus = (int)ApproveStatus.draft,
                    strApproverId = strApproverId
                };
                MessageHandlerBase handler = MessageHandlerFactory.GetMessageHandler(strBSID, ctx);
                handler.Execute();
            }
            catch (Exception ex)
            {
                errMsg   = ex.Message;
                reqState = 0;
            }
            finally
            {
                LogBLL.WriteLogInterface("strBSID:" + strBSID
                                         + "  strBOID:" + strBOID
                                         + "  iProcInstID:" + iProcInstID
                                         + "  strStepName:" + strStepName
                                         + "  strApproverId:" + strApproverId
                                         + "  eAction:" + eAction.ToString()
                                         + "  strComment:" + strComment
                                         + "  dtTime:" + dtTime.ToString(),
                                         "", " 流程审批(撤回,退回)",
                                         reqState, "BPM", "电商资金", errMsg, "WebService");
            }
        }
Ejemplo n.º 14
0
        private void receive()
        {
            string received;
            MessageHandlerFactory factory = new MessageHandlerFactory(connection, this, connection.IP.Address);

            try
            {
                while ((received = connection.readLine()) != null)
                {
                    MessageHandler handler = factory.GetMessageHandler(received);
                    handler.handleMessage(received);
                }
            }
            catch
            {
                disconnect();
            }
        }
Ejemplo n.º 15
0
        static void RegisterOnMessageHandlerAndReceiveMessages(string topicName)
        {
            // Configure the message handler options in terms of exception handling, number of concurrent messages to deliver, etc.
            var messageHandlerOptions = new MessageHandlerOptions(ExceptionReceivedHandler)
            {
                // Maximum number of concurrent calls to the callback ProcessMessagesAsync(), set to 1 for simplicity.
                // Set it according to how many messages the application wants to process in parallel.
                MaxConcurrentCalls = 1,

                // Indicates whether MessagePump should automatically complete the messages after returning from User Callback.
                // False below indicates the Complete will be handled by the User Callback as in `ProcessMessagesAsync` below.
                AutoComplete = false
            };
            var messageHandler = new MessageHandlerFactory().CreateFor(topicName);

            // Register the function that processes messages.
            subscriptionClient.RegisterMessageHandler(messageHandler.ProcessMessagesAsync, messageHandlerOptions);
        }
Ejemplo n.º 16
0
        void MessageHandle()
        {
            while (true)
            {
                lock (client.ReceivedMessages)
                {
                    foreach (var message in client.ReceivedMessages)
                    {
                        var messageHandler = MessageHandlerFactory.GetMessageHandler(message.MessageId);
                        if (messageHandler != null)
                        {
                            messageHandler.Execute(this, message);
                        }
                    }

                    client.ReceivedMessages.Clear();
                }
            }
        }
Ejemplo n.º 17
0
        /// <summary>
        /// Initializes a new instance of the <see cref="PartDataManagementSetup"/> class.
        /// </summary>
        public PartDataManagementSetup()
        {
            _Logger.EnteringMethodPart(nameof(PartDataManagementSetup));
            //Compose external parts
            IServiceLocator _serviceLocator = ServiceLocator.Current;

            //string _configurationFileName = _serviceLocator.GetInstance<string>(CompositionSettings.ConfigurationFileNameContract);
            m_ViewModel     = _serviceLocator.GetInstance <ProducerViewModel>();
            EncodingFactory = _serviceLocator.GetInstance <IEncodingFactory>();
            _Logger.Composed(nameof(EncodingFactory), EncodingFactory.GetType().FullName);
            MessageHandlerFactory = _serviceLocator.GetInstance <IMessageHandlerFactory>();
            _Logger.Composed(nameof(MessageHandlerFactory), MessageHandlerFactory.GetType().FullName);
            //compose internal parts
            ConfigurationFactory = new PartConfigurationFactory(ConfigurationFilePath);
            PartBindingFactory pbf = new PartBindingFactory();

            _DTOProvider   = pbf;
            BindingFactory = pbf;
        }
Ejemplo n.º 18
0
        public void CreateResult(string strBSID, string strBOID, bool bSuccess, int iProcInstID, string strMessage)
        {
            strBSID = strBSID + "_" + System.Reflection.MethodBase.GetCurrentMethod().Name;
            string errMsg   = string.Empty;
            int    reqState = 1;

            try
            {
                if (!bSuccess)
                {
                    reqState = 0;
                    errMsg   = "创建流程实例未成功!";
                    return;
                }
                MessageContext ctx = new MessageContext()
                {
                    bSuccess      = bSuccess,
                    iProcInstID   = iProcInstID,
                    strBOID       = strBOID,
                    strBSID       = strBSID,
                    strMessage    = strMessage,
                    dtTime        = DateTime.Now,
                    ApproveStatus = (int)ApproveStatus.in_approval
                };
                MessageHandlerBase handler = MessageHandlerFactory.GetMessageHandler(strBSID, ctx);
                handler.Execute();
            }
            catch (Exception ex)
            {
                errMsg   = ex.Message;
                reqState = 0;
            }
            finally
            {
                LogBLL.WriteLogInterface("strBSID:" + strBSID
                                         + "  strBOID:" + strBOID
                                         + "  bSuccess:" + bSuccess
                                         + "  iProcInstID:" + iProcInstID
                                         + "  strMessage:" + strMessage,
                                         "", "创建流程结束接口",
                                         reqState, "BPM", "电商资金", errMsg, "WebService");
            }
        }
Ejemplo n.º 19
0
        /// <summary>
        /// Initializes a new instance of the <see cref="LoggerManagementSetup"/> class.
        /// </summary>
        public LoggerManagementSetup()
        {
            _logger.EnteringMethodPart();
            // get external parts to compose
            IServiceLocator _serviceLocator = ServiceLocator.Current;
            string          _ConsumerConfigurationFileName = _serviceLocator.GetInstance <string>(ConsumerCompositionSettings.ConfigurationFileNameContract);

            _ViewModel = _serviceLocator.GetInstance <ConsumerViewModel>(ConsumerCompositionSettings.ViewModelContract);
            _logger.Composed(nameof(_ViewModel), _ViewModel.GetType().FullName);
            EncodingFactory = _serviceLocator.GetInstance <IEncodingFactory>();
            _logger.Composed(nameof(EncodingFactory), EncodingFactory.GetType().FullName);
            MessageHandlerFactory = _serviceLocator.GetInstance <IMessageHandlerFactory>();
            _logger.Composed(nameof(MessageHandlerFactory), MessageHandlerFactory.GetType().FullName);
            // setup local functionality
            ConfigurationFactory = new ConsumerConfigurationFactory(_ConsumerConfigurationFileName);
            _logger.Composed(nameof(ConfigurationFactory), ConfigurationFactory.GetType().FullName);
            BindingFactory = new PartIBindingFactory(_ViewModel);
            _logger.Composed(nameof(BindingFactory), BindingFactory.GetType().FullName);
        }
Ejemplo n.º 20
0
        public override void OnMessage(string message)
        {
            var webSocketMessage = JsonConvert.DeserializeObject <WebSocketMessage>(message);

            if (webSocketMessage != null)
            {
                if (!IsAuthenticated)
                {
                    var handler = new AuthenticationHandler(SiteId);
                    var result  = handler.ProcessMessage(webSocketMessage);
                    IsAuthenticated = handler.IsAuthenticated;
                    Send(JsonConvert.SerializeObject(result));
                }
                else
                {
                    var webSwitchMessageHandler = MessageHandlerFactory.GetMessageHandler(webSocketMessage.Type, SiteId);
                    var result = webSwitchMessageHandler.ProcessMessage(webSocketMessage);


                    if (result != null)
                    {
                        switch (result.BroadcastType)
                        {
                        case WebSocketBroadcastType.Pi:
                            WebSocketSession.SendToPi(JsonConvert.SerializeObject(result));
                            break;

                        case WebSocketBroadcastType.Web:
                            WebSocketSession.SendToWeb(JsonConvert.SerializeObject(result));
                            break;

                        case WebSocketBroadcastType.All:
                            WebSocketSession.Broadcast(JsonConvert.SerializeObject(result));
                            break;
                        }
                    }
                }
            }
        }
Ejemplo n.º 21
0
        public override void Run()
        {
            var mainArgs = new CefMainArgs(new string[] { });
            var app      = new OffscreenApp();

            CefRuntime.ExecuteProcess(mainArgs, app, IntPtr.Zero);

            // init CEF
            var settings = new CefSettings
            {
                SingleProcess            = false,
                MultiThreadedMessageLoop = true,
                LogSeverity = CefLogSeverity.Error,
                LogFile     = "CefGlue.log"
            };

            CefRuntime.Initialize(mainArgs, settings, app, IntPtr.Zero);

            Trace.WriteLine("Starting processing of messages");

            // Initiates the message pump and callback is invoked for each message that is received, calling close on the client will stop the pump.
            Client.OnMessage((receivedMessage) =>
            {
                try
                {
                    // Process the message
                    Trace.WriteLine("Processing Service Bus message: " + receivedMessage.SequenceNumber.ToString());
                    var handler = MessageHandlerFactory.GetMessageHandler(receivedMessage.ContentType);
                    handler.Handle(receivedMessage, CompletedClient);
                    receivedMessage.Complete();
                }
                catch (Exception ex)
                {
                    // Handle any message processing specific exceptions here
                }
            });

            CompletedEvent.WaitOne();
        }
Ejemplo n.º 22
0
        public MusicSheet LoadMidi(string path)
        {
            this.LoadFile(path);

            for (int i = 0; i < midiContext.Sequence.Count; i++)
            {
                Track track = midiContext.Sequence[i];

                foreach (var midiEvent in track.Iterator())
                {
                    var             handlerType = midiEvent.MidiMessage.MessageType.ToString();
                    IMessageHandler handler     = new MessageHandlerFactory().Get(handlerType);

                    if (handler != null)
                    {
                        handler.handle(midiContext, midiEvent);
                    }
                }
            }

            return(midiContext.MusicSheet);
        }
Ejemplo n.º 23
0
 public Client(Server parent, TcpClient client, MessageHandlerFactory mf)
 {
     this.parent                = parent;
     this.client                = client;
     this.client.Tag            = this;
     this.mf                    = mf;
     this.client.PacketReceive += this.client_PacketReceive;
     this.client.Disconnected  += delegate(object sender, EventArgs args)
     {
         if (this.Player != null)
         {
             this.Leave(this.Player.Channel);
         }
     };
     this.client.Disconnected += delegate(object sender, EventArgs args)
     {
         if (this.Disconnected != null)
         {
             this.Disconnected(sender, args);
         }
     };
 }
Ejemplo n.º 24
0
        static void Main(string[] args)
        {
            var q = new MessageQueue();

            #region in another process
            var msg = new SendEmailMessage()
            {
                EmailAddress = "*****@*****.**"
            };

            q.SendMessage(msg);

            #endregion

            var outMsg = q.GetNextMessage();

            var handlerFactory = new MessageHandlerFactory();

            var handler = handlerFactory.Create(msg);

            handler.ProcessMessage(msg);
        }
Ejemplo n.º 25
0
 static void ReceiveData()
 {
     while (client != null)
     {
         try
         {
             lock (client)
             {
                 byte[]          data           = new byte[1024];
                 int             bytes          = client.GetStream().Read(data, 0, data.Length);
                 string          responseData   = System.Text.Encoding.UTF8.GetString(data, 0, bytes);
                 GenericMessage  genericMessage = JsonSerializer.Deserialize <GenericMessage>(responseData);
                 IMessage        message        = MessageFactory.GetMessage(genericMessage.MessageId, responseData);
                 IMessageHandler messageHandler = MessageHandlerFactory.GetMessageHandler(genericMessage.MessageId);
                 messageHandler.Execute(client, message);
             }
         }
         catch (System.IO.IOException)
         { }
         catch (System.ObjectDisposedException)
         { }
     }
 }
Ejemplo n.º 26
0
        static void HandleClient(Server server, TcpClient client)
        {
            byte[] bytes = new byte[1024];
            string data;

            while (true)
            {
                NetworkStream stream = client.GetStream();

                int i;

                while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
                {
                    data = System.Text.Encoding.UTF8.GetString(bytes, 0, i);

                    GenericMessage genericMessage = JsonSerializer.Deserialize <GenericMessage>(data);

                    IMessage message = MessageFactory.GetMessage(genericMessage.MessageId, data);

                    IMessageHandler handler = MessageHandlerFactory.GetMessageHandler(genericMessage.MessageId);
                    handler.Execute(server, client, message);
                }
            }
        }
Ejemplo n.º 27
0
        private static SnmpEngine CreateSnmpEngine(RavenServer server, ObjectStore objectStore)
        {
            var v2MembershipProvider = new Version2MembershipProvider(new OctetString(server.Configuration.Monitoring.Snmp.Community), new OctetString(server.Configuration.Monitoring.Snmp.Community));
            var v3MembershipProvider = new Version3MembershipProvider();
            var membershipProvider   = new ComposedMembershipProvider(new IMembershipProvider[] { v2MembershipProvider, v3MembershipProvider });

            var handlers = new[]
            {
                new HandlerMapping("V2,V3", "GET", new GetMessageHandler()),
                new HandlerMapping("V2,V3", "GETNEXT", new GetNextMessageHandler()),
                new HandlerMapping("V2,V3", "GETBULK", new GetBulkMessageHandler())
            };

            var messageHandlerFactory = new MessageHandlerFactory(handlers);

            var factory = new SnmpApplicationFactory(new SnmpLogger(Logger), objectStore, membershipProvider, messageHandlerFactory);

            var listener = new Listener();

            listener.Users.Add(new OctetString("ravendb"), new DefaultPrivacyProvider(new SHA1AuthenticationProvider(new OctetString(server.Configuration.Monitoring.Snmp.Community))));

            var engineGroup = new EngineGroup();

            var engine = new SnmpEngine(factory, listener, engineGroup);

            engine.Listener.AddBinding(new IPEndPoint(IPAddress.Any, server.Configuration.Monitoring.Snmp.Port));
            engine.Listener.ExceptionRaised += (sender, e) =>
            {
                if (Logger.IsOperationsEnabled)
                {
                    Logger.Operations("SNMP error: " + e.Exception.Message, e.Exception);
                }
            };

            return(engine);
        }
Ejemplo n.º 28
0
 /// <summary>
 /// Initializes a new instance of the <see cref="SnmpApplication"/> class.
 /// </summary>
 /// <param name="owner">The owner.</param>
 /// <param name="logger">The logger.</param>
 /// <param name="store">The store.</param>
 /// <param name="provider">The provider.</param>
 /// <param name="factory">The factory.</param>
 public SnmpApplication(SnmpApplicationFactory owner, ILogger logger, ObjectStore store, IMembershipProvider provider, MessageHandlerFactory factory)
 {
     _owner    = owner;
     _provider = provider;
     _logger   = logger;
     _store    = store;
     _factory  = factory;
 }
Ejemplo n.º 29
0
        public static void Main(string[] args)
        {
            if (args.Length != 0)
            {
                return;
            }

            var users = new EngineUserRegistry();

            users.Add(new OctetString("neither"), DefaultPrivacyProvider.DefaultPair);
            users.Add(
                new OctetString("authen"),
                new DefaultPrivacyProvider(new MD5AuthenticationProvider(new OctetString("authentication"))));
            if (DESPrivacyProvider.IsSupported)
            {
                users.Add(
                    new OctetString("privacy"),
                    new DESPrivacyProvider(
                        new OctetString("privacyphrase"),
                        new MD5AuthenticationProvider(new OctetString("authentication"))));

                // for snmpsendtrap testing
                users.Add(new OctetString("trap"),
                          new DESPrivacyProvider(
                              new OctetString("privacyphrase"),
                              new MD5AuthenticationProvider(new OctetString("authentication")))
                {
                    EngineIds = new List <OctetString> {
                        new OctetString(ByteTool.Convert("80001F8880E9630000D61FF449"))
                    }
                });
            }
            else
            {
                Console.WriteLine("DES privacy is not supported by .NET Core natively. Switched to BouncyCastle implementation.");
                users.Add(
                    new OctetString("privacy"),
                    new Samples.BouncyCastle.BouncyCastleDESPrivacyProvider(
                        new OctetString("privacyphrase"),
                        new MD5AuthenticationProvider(new OctetString("authentication"))));

                // for snmpsendtrap testing
                users.Add(new OctetString("trap"),
                          new Samples.BouncyCastle.BouncyCastleDESPrivacyProvider(
                              new OctetString("privacyphrase"),
                              new MD5AuthenticationProvider(new OctetString("authentication")))
                {
                    EngineIds = new List <OctetString> {
                        new OctetString(ByteTool.Convert("80001F8880E9630000D61FF449"))
                    }
                });
            }

            if (AESPrivacyProviderBase.IsSupported)
            {
                users.Add(new OctetString("aes"), new AESPrivacyProvider(new OctetString("privacyphrase"), new MD5AuthenticationProvider(new OctetString("authentication"))));
                users.Add(new OctetString("aes192"), new AES192PrivacyProvider(new OctetString("privacyphrase"), new MD5AuthenticationProvider(new OctetString("authentication"))));
                users.Add(new OctetString("aes256"), new AES256PrivacyProvider(new OctetString("privacyphrase"), new MD5AuthenticationProvider(new OctetString("authentication"))));

                // for snmpsendtrap testing
                users.Add(new OctetString("trapAES"),
                          new AESPrivacyProvider(
                              new OctetString("privacyphrase"),
                              new MD5AuthenticationProvider(new OctetString("authentication")))
                {
                    EngineIds = new List <OctetString> {
                        new OctetString(ByteTool.Convert("80001F8880E9630000D61FF449"))
                    }
                });
            }
            else
            {
                Console.WriteLine("AES privacy is not supported by .NET Core natively. Switched to BouncyCastle implementation.");
                users.Add(new OctetString("aes"), new Samples.BouncyCastle.BouncyCastleAESPrivacyProvider(new OctetString("privacyphrase"), new MD5AuthenticationProvider(new OctetString("authentication"))));
                users.Add(new OctetString("aes192"), new Samples.BouncyCastle.BouncyCastleAES192PrivacyProvider(new OctetString("privacyphrase"), new MD5AuthenticationProvider(new OctetString("authentication"))));
                users.Add(new OctetString("aes256"), new Samples.BouncyCastle.BouncyCastleAES256PrivacyProvider(new OctetString("privacyphrase"), new MD5AuthenticationProvider(new OctetString("authentication"))));

                // for snmpsendtrap testing
                users.Add(new OctetString("trapAES"),
                          new Samples.BouncyCastle.BouncyCastleAESPrivacyProvider(
                              new OctetString("privacyphrase"),
                              new MD5AuthenticationProvider(new OctetString("authentication")))
                {
                    EngineIds = new List <OctetString> {
                        new OctetString(ByteTool.Convert("80001F8880E9630000D61FF449"))
                    }
                });
            }

            var trapv1 = new TrapV1MessageHandler();

            trapv1.MessageReceived += WatcherTrapV1Received;
            var trapv1Mapping = new HandlerMapping("v1", "TRAPV1", trapv1);

            var trapv2 = new TrapV2MessageHandler();

            trapv2.MessageReceived += WatcherTrapV2Received;
            var trapv2Mapping = new HandlerMapping("v2,v3", "TRAPV2", trapv2);

            var inform = new InformRequestMessageHandler();

            inform.MessageReceived += WatcherInformRequestReceived;
            var informMapping = new HandlerMapping("v2,v3", "INFORM", inform);

            var store          = new ObjectStore();
            var v1             = new Version1MembershipProvider(new OctetString("public"), new OctetString("public"));
            var v2             = new Version2MembershipProvider(new OctetString("public"), new OctetString("public"));
            var v3             = new Version3MembershipProvider();
            var membership     = new ComposedMembershipProvider(new IMembershipProvider[] { v1, v2, v3 });
            var handlerFactory = new MessageHandlerFactory(new[] { trapv1Mapping, trapv2Mapping, informMapping });

            var pipelineFactory = new SnmpApplicationFactory(store, membership, handlerFactory);

            using (var engine = new SnmpEngine(pipelineFactory, new Listener {
                Users = users
            }, new EngineGroup()))
            {
                engine.Listener.AddBinding(new IPEndPoint(IPAddress.Any, 162));
                engine.Listener.ExceptionRaised += (sender, e) => Console.WriteLine($"Exception catched: {e.Exception}");
                engine.Start();
                Console.WriteLine("#SNMP is available at https://sharpsnmp.com");
                Console.WriteLine("Press any key to stop . . . ");
                Console.Read();
                engine.Stop();
            }
        }
Ejemplo n.º 30
0
        private const int MaxTimeout = 5 * 60 * 1000; // 5 minutes


        private SnmpEngine CreateEngine(bool timeout = false)
        {
            // TODO: this is a hack. review it later.
            var store = new ObjectStore();

            store.Add(new SysDescr());
            store.Add(new SysObjectId());
            store.Add(new SysUpTime());
            store.Add(new SysContact());
            store.Add(new SysName());
            store.Add(new SysLocation());
            store.Add(new SysServices());
            store.Add(new SysORLastChange());
            store.Add(new SysORTable());
            store.Add(new IfNumber());
            store.Add(new IfTable());
            if (timeout)
            {
                store.Add(new TimeoutObject());
            }

            var users = new UserRegistry();

            users.Add(new OctetString("neither"), DefaultPrivacyProvider.DefaultPair);
            users.Add(new OctetString("authen"), new DefaultPrivacyProvider(new MD5AuthenticationProvider(new OctetString("authentication"))));
            if (DESPrivacyProvider.IsSupported)
            {
                users.Add(new OctetString("privacy"), new DESPrivacyProvider(new OctetString("privacyphrase"),
                                                                             new MD5AuthenticationProvider(new OctetString("authentication"))));
            }

            var getv1        = new GetV1MessageHandler();
            var getv1Mapping = new HandlerMapping("v1", "GET", getv1);

            var getv23        = new GetMessageHandler();
            var getv23Mapping = new HandlerMapping("v2,v3", "GET", getv23);

            var setv1        = new SetV1MessageHandler();
            var setv1Mapping = new HandlerMapping("v1", "SET", setv1);

            var setv23        = new SetMessageHandler();
            var setv23Mapping = new HandlerMapping("v2,v3", "SET", setv23);

            var getnextv1        = new GetNextV1MessageHandler();
            var getnextv1Mapping = new HandlerMapping("v1", "GETNEXT", getnextv1);

            var getnextv23        = new GetNextMessageHandler();
            var getnextv23Mapping = new HandlerMapping("v2,v3", "GETNEXT", getnextv23);

            var getbulk        = new GetBulkMessageHandler();
            var getbulkMapping = new HandlerMapping("v2,v3", "GETBULK", getbulk);

            var v1             = new Version1MembershipProvider(new OctetString("public"), new OctetString("public"));
            var v2             = new Version2MembershipProvider(new OctetString("public"), new OctetString("public"));
            var v3             = new Version3MembershipProvider();
            var membership     = new ComposedMembershipProvider(new IMembershipProvider[] { v1, v2, v3 });
            var handlerFactory = new MessageHandlerFactory(new[]
            {
                getv1Mapping,
                getv23Mapping,
                setv1Mapping,
                setv23Mapping,
                getnextv1Mapping,
                getnextv23Mapping,
                getbulkMapping
            });

            var pipelineFactory = new SnmpApplicationFactory(store, membership, handlerFactory);
            var listener        = new Listener {
                Users = users
            };

            listener.ExceptionRaised += (sender, e) => { Assert.True(false, "unexpected exception"); };
            return(new SnmpEngine(pipelineFactory, listener, new EngineGroup()));
        }
        public MainForm()
        {
            // TODO: this is a hack. review it later.
            var store = new ObjectStore();

            store.Add(new SysDescr());
            store.Add(new SysObjectId());
            store.Add(new SysUpTime());
            store.Add(new SysContact());
            store.Add(new SysName());
            store.Add(new SysLocation());
            store.Add(new SysServices());
            store.Add(new SysORLastChange());
            store.Add(new SysORTable());
            store.Add(new IfNumber());
            store.Add(new IfTable());

            var users = new EngineUserRegistry();

            users.Add(new OctetString("neither"), DefaultPrivacyProvider.DefaultPair);
            users.Add(new OctetString("authen"), new DefaultPrivacyProvider(new MD5AuthenticationProvider(new OctetString("authentication"))));
            if (DESPrivacyProvider.IsSupported)
            {
                users.Add(new OctetString("privacy"), new DESPrivacyProvider(new OctetString("privacyphrase"),
                                                                             new MD5AuthenticationProvider(new OctetString("authentication"))));
            }

            if (AESPrivacyProviderBase.IsSupported)
            {
                users.Add(new OctetString("aes"), new AESPrivacyProvider(new OctetString("privacyphrase"), new MD5AuthenticationProvider(new OctetString("authentication"))));
                users.Add(new OctetString("aes192"), new AES192PrivacyProvider(new OctetString("privacyphrase"), new MD5AuthenticationProvider(new OctetString("authentication"))));
                users.Add(new OctetString("aes256"), new AES256PrivacyProvider(new OctetString("privacyphrase"), new MD5AuthenticationProvider(new OctetString("authentication"))));
            }

            var getv1        = new GetV1MessageHandler();
            var getv1Mapping = new HandlerMapping("v1", "GET", getv1);

            var getv23        = new GetMessageHandler();
            var getv23Mapping = new HandlerMapping("v2,v3", "GET", getv23);

            var setv1        = new SetV1MessageHandler();
            var setv1Mapping = new HandlerMapping("v1", "SET", setv1);

            var setv23        = new SetMessageHandler();
            var setv23Mapping = new HandlerMapping("v2,v3", "SET", setv23);

            var getnextv1        = new GetNextV1MessageHandler();
            var getnextv1Mapping = new HandlerMapping("v1", "GETNEXT", getnextv1);

            var getnextv23        = new GetNextMessageHandler();
            var getnextv23Mapping = new HandlerMapping("v2,v3", "GETNEXT", getnextv23);

            var getbulk        = new GetBulkMessageHandler();
            var getbulkMapping = new HandlerMapping("v2,v3", "GETBULK", getbulk);

            var v1             = new Version1MembershipProvider(new OctetString("public"), new OctetString("public"));
            var v2             = new Version2MembershipProvider(new OctetString("public"), new OctetString("public"));
            var v3             = new Version3MembershipProvider();
            var membership     = new ComposedMembershipProvider(new IMembershipProvider[] { v1, v2, v3 });
            var handlerFactory = new MessageHandlerFactory(new[]
            {
                getv1Mapping,
                getv23Mapping,
                setv1Mapping,
                setv23Mapping,
                getnextv1Mapping,
                getnextv23Mapping,
                getbulkMapping
            });

            var pipelineFactory = new SnmpApplicationFactory(new RollingLogger(), store, membership, handlerFactory);

            _engine = new SnmpEngine(pipelineFactory, new Listener {
                Users = users
            }, new EngineGroup());
            _engine.ExceptionRaised += (sender, e) => MessageBox.Show(e.Exception.ToString());

            InitializeComponent();
            if (PlatformSupport.Platform == PlatformType.Windows)
            {
                // FIXME: work around a Mono WinForms issue.
                Icon = Properties.Resources.network_server;
            }

            toolStripButton1.Image = Properties.Resources.media_playback_start;
            tstxtPort.Text         = @"161";
            tscbIP.Items.Add(StrAllUnassigned);
            foreach (IPAddress address in Dns.GetHostEntry(string.Empty).AddressList.Where(address => !address.IsIPv6LinkLocal))
            {
                tscbIP.Items.Add(address);
            }

            tscbIP.SelectedIndex = 0;
        }
 public void Should_create_a_handler()
 {
     var factory = new MessageHandlerFactory();
     var result = factory.Create(typeof(foo));
     result.ShouldNotBeNull();
 }