1
0

4 Commits

Author SHA1 Message Date
b15cf87b3c Added FromNumber and ToNumber
All checks were successful
Branch Build / build-test-deploy (push) Successful in 47s
2026-02-17 18:08:42 +01:00
e8349924c0 Updated to .NET 8.0 2026-02-17 18:05:46 +01:00
e0f57601c8 fix release build
All checks were successful
Branch Build / build-test-deploy (push) Successful in 1m27s
Release Build / build-test-deploy (push) Successful in 1m27s
2026-01-12 21:41:26 +01:00
9ded50bf4c Bump to v0.1.3
Some checks failed
Branch Build / build-test-deploy (push) Failing after 48s
Release Build / build-test-deploy (push) Failing after 1m22s
2026-01-12 21:35:42 +01:00
9 changed files with 73 additions and 15 deletions

View File

@@ -39,6 +39,7 @@ jobs:
run: | run: |
set -ex set -ex
dotnet tool install dotnet-reportgenerator-globaltool --tool-path /dotnet-tools dotnet tool install dotnet-reportgenerator-globaltool --tool-path /dotnet-tools
dotnet tool install docfx --tool-path /dotnet-tools
- name: Build solution - name: Build solution
run: | run: |

View File

@@ -7,6 +7,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased] ## [Unreleased]
### Added
- `FromNumber` and `ToNumber` properties to `CallMonitorEventArgs` to use when available
### Changed
- Removed support for .NET 6.0 (EOL: 2024-11-12)
## [v0.1.3] - 2026-01-12
### Changed ### Changed
- Migrated main repository from Gitlab to Gitea (CI/CD) - Migrated main repository from Gitlab to Gitea (CI/CD)
@@ -37,7 +48,7 @@ _Inital release_
### Added ### Added
- `CallMonitorClient` as client to connect to the call monitor endpoint - `CallMonitorClient` as client to connect to the call monitor endpoint
- `CallMonitorEventArgs` are the custom arugments, when `OnEvent` is raised. - `CallMonitorEventArgs` are the custom arugments, when `OnEvent` is raised
- Notifying about - Notifying about
- `Ring`: An incoming call - `Ring`: An incoming call
- `Call`: An outgoing call - `Call`: An outgoing call
@@ -47,8 +58,9 @@ _Inital release_
[Unreleased]: https://github.com/AM-WD/FritzCallMonitor/compare/v0.1.2...HEAD [Unreleased]: https://github.com/AM-WD/FritzCallMonitor/compare/v0.1.3...HEAD
[v0.1.3]: https://github.com/AM-WD/FritzCallMonitor/compare/v0.1.2...v0.1.3
[v0.1.2]: https://github.com/AM-WD/FritzCallMonitor/compare/v0.1.1...v0.1.2 [v0.1.2]: https://github.com/AM-WD/FritzCallMonitor/compare/v0.1.1...v0.1.2
[v0.1.1]: https://github.com/AM-WD/FritzCallMonitor/compare/v0.1.0...v0.1.1 [v0.1.1]: https://github.com/AM-WD/FritzCallMonitor/compare/v0.1.0...v0.1.1
[v0.1.0]: https://github.com/AM-WD/FritzCallMonitor/commits/v0.1.0 [v0.1.0]: https://github.com/AM-WD/FritzCallMonitor/commits/v0.1.0

View File

@@ -3,6 +3,7 @@
<LangVersion>14.0</LangVersion> <LangVersion>14.0</LangVersion>
<PublicKey>0024000004800000940000000602000000240000525341310004000001000100d9b40f5db1670c563c2e8be5dfd24ed66ad811b3ebba8a0ca0df9cbad3a115ca361b3de4b4d4ed990bf9874d2651e62565f56adb33af33819687021e263b02d6bf5b3cdacde4f09650cafe97467de4b9e4e9cc1d6c2d500a08759697bbe80940916c05533d172ca7e55e10434f9cc46fd189f26cefc100781a20e57f1bad65d5</PublicKey> <PublicKey>0024000004800000940000000602000000240000525341310004000001000100d9b40f5db1670c563c2e8be5dfd24ed66ad811b3ebba8a0ca0df9cbad3a115ca361b3de4b4d4ed990bf9874d2651e62565f56adb33af33819687021e263b02d6bf5b3cdacde4f09650cafe97467de4b9e4e9cc1d6c2d500a08759697bbe80940916c05533d172ca7e55e10434f9cc46fd189f26cefc100781a20e57f1bad65d5</PublicKey>
<MoqPublicKey>0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7</MoqPublicKey>
<SignAssembly>true</SignAssembly> <SignAssembly>true</SignAssembly>
<AssemblyOriginatorKeyFile>$(SolutionDir)/FritzCallMonitor.snk</AssemblyOriginatorKeyFile> <AssemblyOriginatorKeyFile>$(SolutionDir)/FritzCallMonitor.snk</AssemblyOriginatorKeyFile>

View File

@@ -41,7 +41,7 @@
<ItemGroup> <ItemGroup>
<InternalsVisibleTo Include="FritzCallMonitor.Tests" PublicKey="$(PublicKey)"/> <InternalsVisibleTo Include="FritzCallMonitor.Tests" PublicKey="$(PublicKey)"/>
<InternalsVisibleTo Include="DynamicProxyGenAssembly2" PublicKey="0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7"/> <InternalsVisibleTo Include="DynamicProxyGenAssembly2" PublicKey="$(MoqPublicKey)"/>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@@ -29,15 +29,47 @@ namespace AMWD.Net.Api.Fritz.CallMonitor
public int? LinePort { get; private set; } public int? LinePort { get; private set; }
/// <summary> /// <summary>
/// Gets the external number displayed in the FRITZ!Box. /// Gets the external phone number displayed in the FRITZ!Box.
/// </summary> /// </summary>
public string? ExternalNumber { get; private set; } public string? ExternalNumber { get; private set; }
/// <summary> /// <summary>
/// Gets the internal number registered in the FRITZ!Box. /// Gets the internal phone number (part) registered in the FRITZ!Box.
/// </summary> /// </summary>
public string? InternalNumber { get; private set; } public string? InternalNumber { get; private set; }
/// <summary>
/// Gets the phone number from which the call was initiated.
/// </summary>
public string? FromNumber
{
get
{
return Event switch
{
EventType.Ring => ExternalNumber,
EventType.Call => InternalNumber,
_ => null
};
}
}
/// <summary>
/// Gets the phone number to which the call was directed.
/// </summary>
public string? ToNumber
{
get
{
return Event switch
{
EventType.Ring => InternalNumber,
EventType.Call => ExternalNumber,
_ => null
};
}
}
/// <summary> /// <summary>
/// Gets the duration of the call (only on <see cref="EventType.Disconnect"/> event). /// Gets the duration of the call (only on <see cref="EventType.Disconnect"/> event).
/// </summary> /// </summary>

View File

@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFrameworks>netstandard2.0;net6.0</TargetFrameworks> <TargetFrameworks>netstandard2.0;net8.0</TargetFrameworks>
<NrtTagMatch>v[0-9]*</NrtTagMatch> <NrtTagMatch>v[0-9]*</NrtTagMatch>
<PackageId>AMWD.Net.Api.Fritz.CallMonitor</PackageId> <PackageId>AMWD.Net.Api.Fritz.CallMonitor</PackageId>
@@ -22,11 +22,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<InternalsVisibleTo Include="FritzCallMonitor.Tests" PublicKey="$(PublicKey)" /> <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="8.0.3" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="6.0.4" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@@ -158,7 +158,7 @@ namespace AMWD.Net.Api.Fritz.CallMonitor.Utils
if (delay > 60 * 1000) if (delay > 60 * 1000)
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 try
{ {
await Task.Delay(delay, cancellationToken).ConfigureAwait(false); await Task.Delay(delay, cancellationToken).ConfigureAwait(false);

View File

@@ -11,14 +11,13 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="coverlet.msbuild" Version="6.0.4"> <PackageReference Include="coverlet.msbuild" Version="8.0.0">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.0.1" /> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.0.1" />
<PackageReference Include="Moq" Version="4.20.72" /> <PackageReference Include="Moq" Version="4.20.72" />
<PackageReference Include="MSTest.TestAdapter" Version="4.0.2" /> <PackageReference Include="MSTest" Version="4.1.0" />
<PackageReference Include="MSTest.TestFramework" Version="4.0.2" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@@ -32,6 +32,8 @@ namespace FritzCallMonitor.Tests
Assert.IsNull(result.LinePort); Assert.IsNull(result.LinePort);
Assert.AreEqual("012345678901", result.ExternalNumber); Assert.AreEqual("012345678901", result.ExternalNumber);
Assert.AreEqual("9876543", result.InternalNumber); Assert.AreEqual("9876543", result.InternalNumber);
Assert.AreEqual(result.ExternalNumber, result.FromNumber);
Assert.AreEqual(result.InternalNumber, result.ToNumber);
Assert.IsNull(result.Duration); Assert.IsNull(result.Duration);
} }
@@ -48,6 +50,8 @@ namespace FritzCallMonitor.Tests
Assert.AreEqual(3, result.LinePort); Assert.AreEqual(3, result.LinePort);
Assert.AreEqual("012345678901", result.ExternalNumber); Assert.AreEqual("012345678901", result.ExternalNumber);
Assert.IsNull(result.InternalNumber); Assert.IsNull(result.InternalNumber);
Assert.IsNull(result.FromNumber);
Assert.IsNull(result.ToNumber);
Assert.IsNull(result.Duration); Assert.IsNull(result.Duration);
} }
@@ -64,6 +68,8 @@ namespace FritzCallMonitor.Tests
Assert.IsNull(result.LinePort); Assert.IsNull(result.LinePort);
Assert.IsNull(result.ExternalNumber); Assert.IsNull(result.ExternalNumber);
Assert.IsNull(result.InternalNumber); Assert.IsNull(result.InternalNumber);
Assert.IsNull(result.FromNumber);
Assert.IsNull(result.ToNumber);
Assert.AreEqual(TimeSpan.FromSeconds(42), result.Duration); Assert.AreEqual(TimeSpan.FromSeconds(42), result.Duration);
} }
@@ -80,6 +86,8 @@ namespace FritzCallMonitor.Tests
Assert.AreEqual(7, result.LinePort); Assert.AreEqual(7, result.LinePort);
Assert.AreEqual("012345678901", result.ExternalNumber); Assert.AreEqual("012345678901", result.ExternalNumber);
Assert.AreEqual("9876543", result.InternalNumber); Assert.AreEqual("9876543", result.InternalNumber);
Assert.AreEqual(result.InternalNumber, result.FromNumber);
Assert.AreEqual(result.ExternalNumber, result.ToNumber);
Assert.IsNull(result.Duration); Assert.IsNull(result.Duration);
} }
@@ -114,6 +122,9 @@ namespace FritzCallMonitor.Tests
var result = CallMonitorEventArgs.Parse(line); var result = CallMonitorEventArgs.Parse(line);
Assert.IsNotNull(result); Assert.IsNotNull(result);
Assert.IsNull(result.LinePort); Assert.IsNull(result.LinePort);
Assert.AreEqual("012345678901", result.ExternalNumber);
Assert.IsNull(result.FromNumber);
Assert.IsNull(result.ToNumber);
} }
[TestMethod] [TestMethod]
@@ -123,6 +134,10 @@ namespace FritzCallMonitor.Tests
var result = CallMonitorEventArgs.Parse(line); var result = CallMonitorEventArgs.Parse(line);
Assert.IsNotNull(result); Assert.IsNotNull(result);
Assert.IsNull(result.LinePort); 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] [TestMethod]
@@ -150,6 +165,8 @@ namespace FritzCallMonitor.Tests
Assert.IsNotNull(result); Assert.IsNotNull(result);
Assert.AreEqual("012345678901", result.ExternalNumber); Assert.AreEqual("012345678901", result.ExternalNumber);
Assert.AreEqual("9876543", result.InternalNumber); Assert.AreEqual("9876543", result.InternalNumber);
Assert.AreEqual(result.ExternalNumber, result.FromNumber);
Assert.AreEqual(result.InternalNumber, result.ToNumber);
} }
} }
} }