Exemple #1
0
        private void Initialize(YateClient client)
        {
            var status = client.SendMessage(new EngineStatusSip());

            if (status.Name != "sip")
            {
                return;
            }
            foreach (var detail in status.Details)
            {
                if (!detail.TryGetValue("id", out var id))
                {
                    continue;
                }
                var hash = new HashEntry[3];
                if (detail.TryGetValue("Status", out var value))
                {
                    hash[0] = new HashEntry("status", value);
                }
                if (detail.TryGetValue("Address", out var address))
                {
                    hash[1] = new HashEntry("address", address);
                }
                if (detail.TryGetValue("Peer", out var peer))
                {
                    hash[2] = new HashEntry("peerid", peer);
                }
                UpdateRedis(id, hash, TimeSpan.FromHours(1));
            }
        }
Exemple #2
0
        private void UpdateFromStatus(YateClient client)
        {
            var status = client.SendMessage(new EngineStatusSip());

            if (status.Name != "sip")
            {
                return;
            }
            foreach (var detail in status.Details)
            {
                var data = new Dictionary <string, string>
                {
                    { "status", GetValueOrDefault(detail, "Status") },
                    { "address", GetValueOrDefault(detail, "Address") },
                    { "peerid", GetValueOrDefault(detail, "Peer") }
                };
                UpdateChan(GetValueOrDefault(detail, "id"), data);
            }
            UpdateDisplay();
        }
Exemple #3
0
        private Program(IConfigurationRoot configuration)
        {
            var redis = configuration.GetConnectionString("redis");

            _redis = ConnectionMultiplexer.Connect(redis, null);
            Clear();

            var yateConfig = configuration.GetSection("Yate");

            _yate = new YateClient(yateConfig["host"], yateConfig.GetValue <ushort>("port"));
            _yate.Connect();
            Initialize(_yate);
            _yate.Watch("chan.startup", ChanUpdate);
            _yate.Watch("chan.hangup", ChanHangup);
            _yate.Watch("call.ringing", ChanUpdate);
            _yate.Watch("call.answered", ChanUpdate);
            _yate.Watch("chan.disconnected", ChanDisconnected);
            _yate.Watch("call.update", ChanUpdate);
            _yate.Watch("user.auth", UserAuth);
            _yate.Watch("user.register", UserRegister);
            _yate.Watch("user.unregister", UserUnregister);
        }
Exemple #4
0
 private void Execute()
 {
     VTConsole.Enable();
     VTConsole.SetWindowTitle("Yate Status Monitor");
     UpdateDisplay();
     using (var resetEvent = new ManualResetEventSlim())
         using (var client = new YateClient(Host, Port))
         {
             Console.CancelKeyPress += (s, e) =>
             {
                 e.Cancel = true;
                 resetEvent.Set();
             };
             client.Connect(RoleType.Global);
             client.Log($"start for {Environment.UserName}");
             client.Watch("chan.startup", ChanUpdate);
             client.Watch("chan.hangup", ChanHangup);
             client.Watch("call.ringing", ChanUpdate);
             client.Watch("call.answered", ChanUpdate);
             client.Watch("chan.disconnected", ChanDisconnected);
             client.Watch("call.update", ChanUpdate);
             client.Watch("user.auth", UserAuth);
             client.Watch("user.register", UserRegister);
             client.Watch("user.unregister", UserUnregister);
             try
             {
                 UpdateFromStatus(client);
             }
             catch (Exception ex)
             {
                 FlashMessage("error", $"engine.status failed: {ex.Message}");
             }
             resetEvent.Wait();
             Cleanup();
         }
 }
Exemple #5
0
 public YateClientTest()
 {
     _client     = new YateClient("localhost", 5039);
     _testClient = new YateClient("localhost", 55039);
     _server     = new TestServer(55039);
 }