diff --git a/CHANGELOG.md b/CHANGELOG.md
index f0e66c9..70354d3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
+### Added
+
+- `FromNumber` and `ToNumber` properties to `CallMonitorEventArgs` to use when available
+
### Changed
- Removed support for .NET 6.0 (EOL: 2024-11-12)
diff --git a/src/FritzCallMonitor/EventArgs/CallMonitorEventArgs.cs b/src/FritzCallMonitor/EventArgs/CallMonitorEventArgs.cs
index 946db57..c1f685a 100644
--- a/src/FritzCallMonitor/EventArgs/CallMonitorEventArgs.cs
+++ b/src/FritzCallMonitor/EventArgs/CallMonitorEventArgs.cs
@@ -29,15 +29,47 @@ namespace AMWD.Net.Api.Fritz.CallMonitor
public int? LinePort { get; private set; }
///
- /// Gets the external number displayed in the FRITZ!Box.
+ /// Gets the external phone number displayed in the FRITZ!Box.
///
public string? ExternalNumber { get; private set; }
///
- /// Gets the internal number registered in the FRITZ!Box.
+ /// Gets the internal phone number (part) registered in the FRITZ!Box.
///
public string? InternalNumber { get; private set; }
+ ///
+ /// Gets the phone number from which the call was initiated.
+ ///
+ public string? FromNumber
+ {
+ get
+ {
+ return Event switch
+ {
+ EventType.Ring => ExternalNumber,
+ EventType.Call => InternalNumber,
+ _ => null
+ };
+ }
+ }
+
+ ///
+ /// Gets the phone number to which the call was directed.
+ ///
+ public string? ToNumber
+ {
+ get
+ {
+ return Event switch
+ {
+ EventType.Ring => InternalNumber,
+ EventType.Call => ExternalNumber,
+ _ => null
+ };
+ }
+ }
+
///
/// Gets the duration of the call (only on event).
///
diff --git a/src/FritzCallMonitor/Utils/ReconnectTcpClient.cs b/src/FritzCallMonitor/Utils/ReconnectTcpClient.cs
index beb6ef2..0a69de6 100644
--- a/src/FritzCallMonitor/Utils/ReconnectTcpClient.cs
+++ b/src/FritzCallMonitor/Utils/ReconnectTcpClient.cs
@@ -158,7 +158,7 @@ namespace AMWD.Net.Api.Fritz.CallMonitor.Utils
if (delay > 60 * 1000)
delay = 60 * 1000;
- Logger?.LogWarning(ex, $"Failed to connect to {_host}:{_port}. Retrying in {delay}ms...");
+ Logger?.LogWarning(ex, "Failed to connect to {Hostname}:{RemotePort}. Retrying in {DelayMS}ms...", _host, _port, delay);
try
{
await Task.Delay(delay, cancellationToken).ConfigureAwait(false);
diff --git a/test/FritzCallMonitor.Tests/CallMonitorEventArgsTest.cs b/test/FritzCallMonitor.Tests/CallMonitorEventArgsTest.cs
index fb65929..484b098 100644
--- a/test/FritzCallMonitor.Tests/CallMonitorEventArgsTest.cs
+++ b/test/FritzCallMonitor.Tests/CallMonitorEventArgsTest.cs
@@ -32,6 +32,8 @@ namespace FritzCallMonitor.Tests
Assert.IsNull(result.LinePort);
Assert.AreEqual("012345678901", result.ExternalNumber);
Assert.AreEqual("9876543", result.InternalNumber);
+ Assert.AreEqual(result.ExternalNumber, result.FromNumber);
+ Assert.AreEqual(result.InternalNumber, result.ToNumber);
Assert.IsNull(result.Duration);
}
@@ -48,6 +50,8 @@ namespace FritzCallMonitor.Tests
Assert.AreEqual(3, result.LinePort);
Assert.AreEqual("012345678901", result.ExternalNumber);
Assert.IsNull(result.InternalNumber);
+ Assert.IsNull(result.FromNumber);
+ Assert.IsNull(result.ToNumber);
Assert.IsNull(result.Duration);
}
@@ -64,6 +68,8 @@ namespace FritzCallMonitor.Tests
Assert.IsNull(result.LinePort);
Assert.IsNull(result.ExternalNumber);
Assert.IsNull(result.InternalNumber);
+ Assert.IsNull(result.FromNumber);
+ Assert.IsNull(result.ToNumber);
Assert.AreEqual(TimeSpan.FromSeconds(42), result.Duration);
}
@@ -80,6 +86,8 @@ namespace FritzCallMonitor.Tests
Assert.AreEqual(7, result.LinePort);
Assert.AreEqual("012345678901", result.ExternalNumber);
Assert.AreEqual("9876543", result.InternalNumber);
+ Assert.AreEqual(result.InternalNumber, result.FromNumber);
+ Assert.AreEqual(result.ExternalNumber, result.ToNumber);
Assert.IsNull(result.Duration);
}
@@ -114,6 +122,9 @@ namespace FritzCallMonitor.Tests
var result = CallMonitorEventArgs.Parse(line);
Assert.IsNotNull(result);
Assert.IsNull(result.LinePort);
+ Assert.AreEqual("012345678901", result.ExternalNumber);
+ Assert.IsNull(result.FromNumber);
+ Assert.IsNull(result.ToNumber);
}
[TestMethod]
@@ -123,6 +134,10 @@ namespace FritzCallMonitor.Tests
var result = CallMonitorEventArgs.Parse(line);
Assert.IsNotNull(result);
Assert.IsNull(result.LinePort);
+ Assert.AreEqual("012345678901", result.ExternalNumber);
+ Assert.AreEqual("9876543", result.InternalNumber);
+ Assert.AreEqual(result.InternalNumber, result.FromNumber);
+ Assert.AreEqual(result.ExternalNumber, result.ToNumber);
}
[TestMethod]
@@ -150,6 +165,8 @@ namespace FritzCallMonitor.Tests
Assert.IsNotNull(result);
Assert.AreEqual("012345678901", result.ExternalNumber);
Assert.AreEqual("9876543", result.InternalNumber);
+ Assert.AreEqual(result.ExternalNumber, result.FromNumber);
+ Assert.AreEqual(result.InternalNumber, result.ToNumber);
}
}
}