diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..78b36ca
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1 @@
+root = true
diff --git a/.github/workflows/Master.yml b/.github/workflows/Master.yml
new file mode 100644
index 0000000..cf71924
--- /dev/null
+++ b/.github/workflows/Master.yml
@@ -0,0 +1,35 @@
+name: Master
+
+on:
+ push:
+ branches:
+ - master
+ pull_request:
+
+jobs:
+ build-test:
+ name: Build and Test
+ runs-on: ${{ matrix.os }}-latest
+
+ strategy:
+ matrix:
+ os: [windows, ubuntu, macos]
+
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v2
+
+ - name: Setup .NET
+ uses: actions/setup-dotnet@v1
+ with:
+ dotnet-version: '8.0.x'
+
+ - name: Deps
+ run: dotnet restore Open.Nat.UnitTests/Open.Nat.Tests.csproj
+
+ - name: Build
+ run: dotnet build Open.Nat.UnitTests/Open.Nat.Tests.csproj --configuration Release --no-restore
+
+ - name: Test
+ # skip IPv6 tests: https://github.com/actions/runner-images/issues/668
+ run: dotnet test Open.Nat.UnitTests/Open.Nat.Tests.csproj --no-restore --verbosity normal --filter TestCategory!=IPv6
diff --git a/.github/workflows/Release.yml b/.github/workflows/Release.yml
new file mode 100644
index 0000000..0057664
--- /dev/null
+++ b/.github/workflows/Release.yml
@@ -0,0 +1,38 @@
+name: Master
+
+on:
+ push:
+ tags:
+ - '*'
+
+jobs:
+ release:
+ name: Release
+ runs-on: ${{ matrix.os }}-latest
+
+ strategy:
+ matrix:
+ os: [windows]
+
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v2
+
+ - name: Setup .NET
+ uses: actions/setup-dotnet@v1
+ with:
+ dotnet-version: '8.0.x'
+
+ - name: Deps
+ run: dotnet restore Open.Nat.UnitTests/Open.Nat.Tests.csproj
+
+ - name: Test
+ # skip IPv6 tests: https://github.com/actions/runner-images/issues/668
+ run: dotnet test Open.Nat.UnitTests/Open.Nat.Tests.csproj --no-restore --verbosity normal --filter TestCategory!=IPv6
+
+ - name: Pack
+ # skip signing until key added to GitHub secrets
+ run: dotnet pack /p:SignAssembly=false /p:Version=${{ github.ref_name }} Open.Nat/Open.Nat.csproj --no-restore
+
+ - name: Publish
+ run: dotnet nuget push **.nupkg --source https://api.nuget.org/v3/index.json --api-key ${{ secrets.NUGET_API_KEY }}
diff --git a/.nuget/NuGet.Config b/.nuget/NuGet.Config
deleted file mode 100644
index 67f8ea0..0000000
--- a/.nuget/NuGet.Config
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.nuget/NuGet.exe b/.nuget/NuGet.exe
deleted file mode 100644
index c41a0d0..0000000
Binary files a/.nuget/NuGet.exe and /dev/null differ
diff --git a/.nuget/NuGet.targets b/.nuget/NuGet.targets
deleted file mode 100644
index 3f8c37b..0000000
--- a/.nuget/NuGet.targets
+++ /dev/null
@@ -1,144 +0,0 @@
-
-
-
- $(MSBuildProjectDirectory)\..\
-
-
- false
-
-
- false
-
-
- true
-
-
- false
-
-
-
-
-
-
-
-
-
-
- $([System.IO.Path]::Combine($(SolutionDir), ".nuget"))
-
-
-
-
- $(SolutionDir).nuget
-
-
-
- $(MSBuildProjectDirectory)\packages.$(MSBuildProjectName.Replace(' ', '_')).config
- $(MSBuildProjectDirectory)\packages.$(MSBuildProjectName).config
-
-
-
- $(MSBuildProjectDirectory)\packages.config
- $(PackagesProjectConfig)
-
-
-
-
- $(NuGetToolsPath)\NuGet.exe
- @(PackageSource)
-
- "$(NuGetExePath)"
- mono --runtime=v4.0.30319 "$(NuGetExePath)"
-
- $(TargetDir.Trim('\\'))
-
- -RequireConsent
- -NonInteractive
-
- "$(SolutionDir) "
- "$(SolutionDir)"
-
-
- $(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" $(NonInteractiveSwitch) $(RequireConsentSwitch) -solutionDir $(PaddedSolutionDir)
- $(NuGetCommand) pack "$(ProjectPath)" -Properties "Configuration=$(Configuration);Platform=$(Platform)" $(NonInteractiveSwitch) -OutputDirectory "$(PackageOutputDir)" -symbols
-
-
-
- RestorePackages;
- $(BuildDependsOn);
-
-
-
-
- $(BuildDependsOn);
- BuildPackage;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Open.Nat.UnitTests/InternetProtocolV6Tests.cs b/Open.Nat.UnitTests/InternetProtocolV6Tests.cs
index 07184f9..d2595c8 100644
--- a/Open.Nat.UnitTests/InternetProtocolV6Tests.cs
+++ b/Open.Nat.UnitTests/InternetProtocolV6Tests.cs
@@ -7,6 +7,7 @@
namespace Open.Nat.Tests
{
[TestClass]
+ [TestCategory("IPv6")]
public class InternetProtocolV6Tests
{
private UpnpMockServer _server;
diff --git a/Open.Nat.UnitTests/Open.Nat.Tests.csproj b/Open.Nat.UnitTests/Open.Nat.Tests.csproj
new file mode 100644
index 0000000..353c49e
--- /dev/null
+++ b/Open.Nat.UnitTests/Open.Nat.Tests.csproj
@@ -0,0 +1,32 @@
+
+
+
+ net8.0
+ enable
+
+ false
+ true
+ true
+ Open.Nat.snk
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Open.Nat.UnitTests/Open.Nat.UnitTests.csproj b/Open.Nat.UnitTests/Open.Nat.UnitTests.Legacy.csproj
similarity index 98%
rename from Open.Nat.UnitTests/Open.Nat.UnitTests.csproj
rename to Open.Nat.UnitTests/Open.Nat.UnitTests.Legacy.csproj
index b07a383..012cfd0 100644
--- a/Open.Nat.UnitTests/Open.Nat.UnitTests.csproj
+++ b/Open.Nat.UnitTests/Open.Nat.UnitTests.Legacy.csproj
@@ -1,94 +1,94 @@
-
-
-
-
- true
-
-
- Open.Nat.snk
-
-
- bin\Debug\net35\
- TRACE;DEBUG;NET35
- {7A65D2F2-BFB5-4BE1-A54D-484A394DE745}
- Library
- Properties
- Open.Nat.UnitTests
- Open.Nat.UnitTests
- v3.5
- 512
-
-
- bin\Debug\net45\
- TRACE;DEBUG;NET45
- {7A65D2F2-BFB5-4BE1-A54D-484A394DE745}
- Library
- Properties
- Open.Nat.UnitTests
- Open.Nat.UnitTests
- v4.5
- 512
-
-
- bin\Release\net35\
- NET35
- {7A65D2F2-BFB5-4BE1-A54D-484A394DE745}
- Library
- Properties
- Open.Nat.UnitTests
- Open.Nat.UnitTests
- v3.5
- 512
-
-
- bin\Release\net45\
- NET45
- {7A65D2F2-BFB5-4BE1-A54D-484A394DE745}
- Library
- Properties
- Open.Nat.UnitTests
- Open.Nat.UnitTests
- v4.5
- 512
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ..\packages\TaskParallelLibrary.1.0.2856.0\lib\Net35\System.Threading.dll
- True
-
-
-
-
-
-
-
-
-
-
-
-
-
- {F5D74163-145F-47BF-83DC-D0E07249C6CA}
- Open.Nat
-
-
-
+
+
+
+
+ true
+
+
+ Open.Nat.snk
+
+
+ bin\Debug\net35\
+ TRACE;DEBUG;NET35
+ {7A65D2F2-BFB5-4BE1-A54D-484A394DE745}
+ Library
+ Properties
+ Open.Nat.UnitTests
+ Open.Nat.UnitTests
+ v3.5
+ 512
+
+
+ bin\Debug\net45\
+ TRACE;DEBUG;NET45
+ {7A65D2F2-BFB5-4BE1-A54D-484A394DE745}
+ Library
+ Properties
+ Open.Nat.UnitTests
+ Open.Nat.UnitTests
+ v4.5
+ 512
+
+
+ bin\Release\net35\
+ NET35
+ {7A65D2F2-BFB5-4BE1-A54D-484A394DE745}
+ Library
+ Properties
+ Open.Nat.UnitTests
+ Open.Nat.UnitTests
+ v3.5
+ 512
+
+
+ bin\Release\net45\
+ NET45
+ {7A65D2F2-BFB5-4BE1-A54D-484A394DE745}
+ Library
+ Properties
+ Open.Nat.UnitTests
+ Open.Nat.UnitTests
+ v4.5
+ 512
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ..\packages\TaskParallelLibrary.1.0.2856.0\lib\Net35\System.Threading.dll
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {F5D74163-145F-47BF-83DC-D0E07249C6CA}
+ Open.Nat
+
+
+
+ -->
\ No newline at end of file
diff --git a/Open.Nat.sln b/Open.Nat.sln
index 852b3bc..b8d48cc 100644
--- a/Open.Nat.sln
+++ b/Open.Nat.sln
@@ -1,21 +1,15 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 15
-VisualStudioVersion = 15.0.28010.2046
+# Visual Studio Version 17
+VisualStudioVersion = 17.10.34916.146
MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Open.Nat", "Open.Nat\Open.Nat.csproj", "{F5D74163-145F-47BF-83DC-D0E07249C6CA}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Open.Nat", "Open.Nat\Open.Nat.csproj", "{F5D74163-145F-47BF-83DC-D0E07249C6CA}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Open.Nat.ConsoleTest", "Open.Nat.ConsoleTest\Open.Nat.ConsoleTest.csproj", "{E92CFA66-F518-4E66-B0BA-76A7808C939A}"
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{87CD0D6D-64C8-4C38-9A75-2036C09BB763}"
- ProjectSection(SolutionItems) = preProject
- .nuget\NuGet.Config = .nuget\NuGet.Config
- .nuget\NuGet.exe = .nuget\NuGet.exe
- .nuget\NuGet.targets = .nuget\NuGet.targets
- EndProjectSection
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Documents", "Documents", "{94F0AE28-727F-497A-AC20-EB5B0C5EBA9A}"
ProjectSection(SolutionItems) = preProject
+ .editorconfig = .editorconfig
.gitignore = .gitignore
AUTHORS = AUTHORS
CHANGELOG.md = CHANGELOG.md
@@ -24,40 +18,74 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Documents", "Documents", "{
README.md = README.md
EndProjectSection
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Open.Nat.UnitTests", "Open.Nat.UnitTests\Open.Nat.UnitTests.csproj", "{7A65D2F2-BFB5-4BE1-A54D-484A394DE745}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Open.Nat.UnitTests.Legacy", "Open.Nat.UnitTests\Open.Nat.UnitTests.Legacy.csproj", "{7A65D2F2-BFB5-4BE1-A54D-484A394DE745}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CI", "CI", "{5FE9E645-92FE-4E0F-AC6D-F57F964642FE}"
+ ProjectSection(SolutionItems) = preProject
+ .github\workflows\Master.yml = .github\workflows\Master.yml
+ .github\workflows\Release.yml = .github\workflows\Release.yml
+ EndProjectSection
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Open.Nat.Tests", "Open.Nat.UnitTests\Open.Nat.Tests.csproj", "{4383D7A1-4B5C-4892-9285-24D7E715CEE8}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug 3.5|Any CPU = Debug 3.5|Any CPU
Debug 4.5|Any CPU = Debug 4.5|Any CPU
+ Debug|Any CPU = Debug|Any CPU
Release 3.5|Any CPU = Release 3.5|Any CPU
Release 4.5|Any CPU = Release 4.5|Any CPU
+ Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{F5D74163-145F-47BF-83DC-D0E07249C6CA}.Debug 3.5|Any CPU.ActiveCfg = Debug|Any CPU
{F5D74163-145F-47BF-83DC-D0E07249C6CA}.Debug 3.5|Any CPU.Build.0 = Debug|Any CPU
{F5D74163-145F-47BF-83DC-D0E07249C6CA}.Debug 4.5|Any CPU.ActiveCfg = Debug|Any CPU
{F5D74163-145F-47BF-83DC-D0E07249C6CA}.Debug 4.5|Any CPU.Build.0 = Debug|Any CPU
+ {F5D74163-145F-47BF-83DC-D0E07249C6CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F5D74163-145F-47BF-83DC-D0E07249C6CA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F5D74163-145F-47BF-83DC-D0E07249C6CA}.Release 3.5|Any CPU.ActiveCfg = Release|Any CPU
{F5D74163-145F-47BF-83DC-D0E07249C6CA}.Release 3.5|Any CPU.Build.0 = Release|Any CPU
{F5D74163-145F-47BF-83DC-D0E07249C6CA}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU
{F5D74163-145F-47BF-83DC-D0E07249C6CA}.Release 4.5|Any CPU.Build.0 = Release|Any CPU
+ {F5D74163-145F-47BF-83DC-D0E07249C6CA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F5D74163-145F-47BF-83DC-D0E07249C6CA}.Release|Any CPU.Build.0 = Release|Any CPU
{E92CFA66-F518-4E66-B0BA-76A7808C939A}.Debug 3.5|Any CPU.ActiveCfg = Debug 3.5|Any CPU
{E92CFA66-F518-4E66-B0BA-76A7808C939A}.Debug 3.5|Any CPU.Build.0 = Debug 3.5|Any CPU
{E92CFA66-F518-4E66-B0BA-76A7808C939A}.Debug 4.5|Any CPU.ActiveCfg = Debug 4.5|Any CPU
{E92CFA66-F518-4E66-B0BA-76A7808C939A}.Debug 4.5|Any CPU.Build.0 = Debug 4.5|Any CPU
+ {E92CFA66-F518-4E66-B0BA-76A7808C939A}.Debug|Any CPU.ActiveCfg = Debug 4.5|Any CPU
+ {E92CFA66-F518-4E66-B0BA-76A7808C939A}.Debug|Any CPU.Build.0 = Debug 4.5|Any CPU
{E92CFA66-F518-4E66-B0BA-76A7808C939A}.Release 3.5|Any CPU.ActiveCfg = Release 3.5|Any CPU
{E92CFA66-F518-4E66-B0BA-76A7808C939A}.Release 3.5|Any CPU.Build.0 = Release 3.5|Any CPU
{E92CFA66-F518-4E66-B0BA-76A7808C939A}.Release 4.5|Any CPU.ActiveCfg = Release 4.5|Any CPU
{E92CFA66-F518-4E66-B0BA-76A7808C939A}.Release 4.5|Any CPU.Build.0 = Release 4.5|Any CPU
+ {E92CFA66-F518-4E66-B0BA-76A7808C939A}.Release|Any CPU.ActiveCfg = Release 4.5|Any CPU
+ {E92CFA66-F518-4E66-B0BA-76A7808C939A}.Release|Any CPU.Build.0 = Release 4.5|Any CPU
{7A65D2F2-BFB5-4BE1-A54D-484A394DE745}.Debug 3.5|Any CPU.ActiveCfg = Debug 3.5|Any CPU
{7A65D2F2-BFB5-4BE1-A54D-484A394DE745}.Debug 3.5|Any CPU.Build.0 = Debug 3.5|Any CPU
{7A65D2F2-BFB5-4BE1-A54D-484A394DE745}.Debug 4.5|Any CPU.ActiveCfg = Debug 4.5|Any CPU
{7A65D2F2-BFB5-4BE1-A54D-484A394DE745}.Debug 4.5|Any CPU.Build.0 = Debug 4.5|Any CPU
+ {7A65D2F2-BFB5-4BE1-A54D-484A394DE745}.Debug|Any CPU.ActiveCfg = Debug 4.5|Any CPU
+ {7A65D2F2-BFB5-4BE1-A54D-484A394DE745}.Debug|Any CPU.Build.0 = Debug 4.5|Any CPU
{7A65D2F2-BFB5-4BE1-A54D-484A394DE745}.Release 3.5|Any CPU.ActiveCfg = Release 3.5|Any CPU
{7A65D2F2-BFB5-4BE1-A54D-484A394DE745}.Release 3.5|Any CPU.Build.0 = Release 3.5|Any CPU
{7A65D2F2-BFB5-4BE1-A54D-484A394DE745}.Release 4.5|Any CPU.ActiveCfg = Release 4.5|Any CPU
{7A65D2F2-BFB5-4BE1-A54D-484A394DE745}.Release 4.5|Any CPU.Build.0 = Release 4.5|Any CPU
+ {7A65D2F2-BFB5-4BE1-A54D-484A394DE745}.Release|Any CPU.ActiveCfg = Release 4.5|Any CPU
+ {7A65D2F2-BFB5-4BE1-A54D-484A394DE745}.Release|Any CPU.Build.0 = Release 4.5|Any CPU
+ {4383D7A1-4B5C-4892-9285-24D7E715CEE8}.Debug 3.5|Any CPU.ActiveCfg = Debug|Any CPU
+ {4383D7A1-4B5C-4892-9285-24D7E715CEE8}.Debug 3.5|Any CPU.Build.0 = Debug|Any CPU
+ {4383D7A1-4B5C-4892-9285-24D7E715CEE8}.Debug 4.5|Any CPU.ActiveCfg = Debug|Any CPU
+ {4383D7A1-4B5C-4892-9285-24D7E715CEE8}.Debug 4.5|Any CPU.Build.0 = Debug|Any CPU
+ {4383D7A1-4B5C-4892-9285-24D7E715CEE8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4383D7A1-4B5C-4892-9285-24D7E715CEE8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4383D7A1-4B5C-4892-9285-24D7E715CEE8}.Release 3.5|Any CPU.ActiveCfg = Release|Any CPU
+ {4383D7A1-4B5C-4892-9285-24D7E715CEE8}.Release 3.5|Any CPU.Build.0 = Release|Any CPU
+ {4383D7A1-4B5C-4892-9285-24D7E715CEE8}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU
+ {4383D7A1-4B5C-4892-9285-24D7E715CEE8}.Release 4.5|Any CPU.Build.0 = Release|Any CPU
+ {4383D7A1-4B5C-4892-9285-24D7E715CEE8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4383D7A1-4B5C-4892-9285-24D7E715CEE8}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/Open.Nat/Open.Nat.csproj b/Open.Nat/Open.Nat.csproj
index 136f657..0ef9ee8 100644
--- a/Open.Nat/Open.Nat.csproj
+++ b/Open.Nat/Open.Nat.csproj
@@ -1,42 +1,51 @@
- netstandard2.0;net35;net45;net472
- AnyCPU;x64;x86
+ netstandard2.0;net35
+ 12.0
+ Library
+
+
+
Open.Nat
Alan McGovern, Ben Motmans, Lucas Ontivero
Open.Nat
- Networking
+ MIT
+ Networking;NAT TRAVERSAL;UPNP;PMP;PORT FORWARD;PORT FORWARDING;PORT MAPPING
- .NET Library for automatic network address translation
+ README.md
+ .NET Library for port forwarding/port mapping
en
Copyright Alan McGovern, Ben Motmans, Lucas Ontivero © 2006-2014
- 2.1.0.0
- 1.0.1.0
- Library
-
- Open.Nat.UnitTests,PublicKey=00240000048000009400000006020000002400005253413100040000010001004de491ec95076f7054ac0562395232c4c351bce7037c7e266a5cc5dc6c60738fe649e06513ca1d58edec8e6a60e969887403a09ae158a007a592f650fe98912e7029e112e61494a47eff16138b62390241e1d8d45076ac3af77b47fa67d40ba1928a37ebe073415785a23ae87b6119f63f78f04cb3b8ea280dfbf3d6df437fbf
+ 0
+ true
+ true
+ embedded
true
Open.Nat.snk
https://github.com/lontivero/Open.NAT
- Github
+ git
+
+
+
-
-
-
-
+
+
+
+
+
\ No newline at end of file