Разговор с АТС KX-NCP1000

Я могу установить TCP-соединение с УАТС. Он запрашивает, и я могу войти и получить несколько записей о вызовах. Но через очень короткое время АТС теряет связь без причины, которую я могу понять. Это определенно получает ACK, я проверил с Wireshark.

В этом связанном вопросе CharlesO говорит

Вы просто пишете прослушиватель TCP, чтобы принять соединение с УАТС и проанализировать входящие подробные записи вызовов (CDR).

Успешно справились с Avaya, Panasonic и другими продуктами PABX

Значит ли это, что проблема в том, что дизайн "не звоните нам, мы вам позвоним"?

1 ответ

Решение

Обнаружение трафика между PABX и коммерческим регистратором вызовов показывает, что PABX часто прерывает соединение без веской причины, и любое приложение, желающее регистрировать данные вызовов, должно отслеживать состояние соединения.

Поскольку TcpClient не будет обнаруживать изменение состояния до тех пор, пока не произойдет сбой записи, и это строго сокет прослушивания, требуется более прямой подход к состоянию соединения:

  public static class Extensions
  {
    /// <summary>
    /// Obtain the current state of the socket underpinning a TcpClient.
    /// Unlike TcpClient.Connected this is reliable and does not require 
    /// capture of an exception resulting from a failed socket write.
    /// </summary>
    /// <param name="tcpClient">TcpClient instance</param>
    /// <returns>Current state of the TcpClient.Client socket</returns>
    public static TcpState GetState(this TcpClient tcpClient)
    {
      var foo = IPGlobalProperties.GetIPGlobalProperties().GetActiveTcpConnections()
        .SingleOrDefault(x => x.LocalEndPoint.Equals(tcpClient.Client.LocalEndPoint));
      return foo != null ? foo.State : TcpState.Unknown;
    }
  }

Также необходимо обрабатывать избыточные журналы вызовов, поскольку они часто повторяются при восстановлении соединения.

Другие вопросы по тегам