コード例 #1
0
ファイル: Program.cs プロジェクト: berrnd/FritzBoxCallMonitor
        private static void tcpClient_DataReceived(EventDrivenTcpClient sender, object data)
        {
            Log(String.Format("Message received: {0}", data));

            //Outgoing call:             Date;CALL;ConnectionID;LocalExtension;LocalNumber;RemoteNumber;
            //Incoming call:             Date;RING;ConnectionID;RemoteNumber;LocalNumber;
            //On connection established: Date;CONNECT;ConnectionID;LocalExtension;RemoteNumber;
            //On connection end:         Date;DISCONNECT;ConnectionID;DurtionInSeconds;

            string[] messageParts = data.ToString().Split(';');
            DateTime timestamp    = DateTime.Parse(messageParts[0]);
            string   eventType    = messageParts[1];
            string   connectionId = messageParts[2];

            switch (eventType)
            {
            case "CALL":
                if (!string.IsNullOrEmpty(Arguments.OnOutgoingCall))
                {
                    string localExtension = messageParts[3];
                    string localNumber    = messageParts[4];
                    string remoteNumber   = messageParts[5];

                    Process.Start(Arguments.OnOutgoingCall, String.Format("\"{0}\" \"{1}\" \"{2}\" \"{3}\" \"{4}\" \"{5}\"", timestamp, "CALL", connectionId, localExtension, localNumber, remoteNumber));
                }
                break;

            case "RING":
                if (!string.IsNullOrEmpty(Arguments.OnIncomingCall))
                {
                    string remoteNumber = messageParts[3];
                    string localNumber  = messageParts[4];

                    Process.Start(Arguments.OnIncomingCall, String.Format("\"{0}\" \"{1}\" \"{2}\" \"{3}\" \"{4}\"", timestamp, "RING", connectionId, remoteNumber, localNumber));
                }
                break;

            case "CONNECT":
                if (!string.IsNullOrEmpty(Arguments.OnConnected))
                {
                    string localExtension = messageParts[3];
                    string remoteNumber   = messageParts[4];

                    Process.Start(Arguments.OnConnected, String.Format("\"{0}\" \"{1}\" \"{2}\" \"{3}\" \"{4}\"", timestamp, "CONNECT", connectionId, localExtension, remoteNumber));
                }
                break;

            case "DISCONNECT":
                if (!string.IsNullOrEmpty(Arguments.OnConnectionEnd))
                {
                    int durtionInSeconds = int.Parse(messageParts[3]);

                    Process.Start(Arguments.OnConnectionEnd, String.Format("\"{0}\" \"{1}\" \"{2}\" \"{3}\"", timestamp, "DISCONNECT", connectionId, durtionInSeconds));
                }
                break;
            }
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: berrnd/FritzBoxCallMonitor
        private static void Main()
        {
            Arguments = Arguments.ParseCommandline();

            if (Arguments.Minimize)
            {
                ConsoleWindowUnmanaged.Minimize();
            }

            Console.Title = String.Format("FritzBoxCallMonitor on {0}", Arguments.FritzBox);

            IPAddress fritzBoxIp = null;

            IPAddress.TryParse(Arguments.FritzBox, out fritzBoxIp);
            if (fritzBoxIp == null)
            {
                fritzBoxIp = Dns.GetHostEntry(Arguments.FritzBox).AddressList.First();
            }

            Log(String.Format("Program OnOutgoingCall = {0}", Arguments.OnOutgoingCall));
            Log(String.Format("Program OnIncomingCall = {0}", Arguments.OnIncomingCall));
            Log(String.Format("Program OnConnected = {0}", Arguments.OnConnected));
            Log(String.Format("Program OnConnectionEnd = {0}", Arguments.OnConnectionEnd));

            EventDrivenTcpClient tcpClient = new EventDrivenTcpClient(fritzBoxIp, 1012, true);

            tcpClient.DataReceived            += tcpClient_DataReceived;
            tcpClient.ConnectionStatusChanged += tcpClient_ConnectionStatusChanged;
            tcpClient.ReconnectInterval        = 30000;
            tcpClient.Connect();

            while (true)
            {
                Console.ReadKey(true);
            }
        }
コード例 #3
0
ファイル: Program.cs プロジェクト: berrnd/FritzBoxCallMonitor
 private static void tcpClient_ConnectionStatusChanged(EventDrivenTcpClient sender, EventDrivenTcpClient.ConnectionStatus status)
 {
     Log(String.Format("Connection status changed: {0}", status));
 }