Nat デバイスのポートをマップするライブラリを開発しています。これらの Nat デバイスは、さまざまなプロトコル (およびそのバージョン) を使用して、ポートのマッピング、外部 IP アドレスの取得、使用可能なポートの検索、一覧表示、解放などを行います。
したがって、それぞれに1つのクラスがあります。
- UpnpWanIPConnection1
- UpnpWanIPConnection2
- UpnpWanPPPConnection1
- UpnpWanPPPConnection2
- Pmp
- PCP
これらのそれぞれは、AddPorMapping、GetExternalIP、RemovePortMapping などのいくつかの一般的な操作を共有し、次にインターフェイス INat を実装します。
ライブラリは次のように使用できます。
var natDevice = NatDiscovery.Discover(); // it returns an INat instance
natDevice.AddPortMapping(100, 100, "tcp");
問題は、それらのいくつかに余分な操作が含まれていることです。残りはそうではありませんが、GetAllMappings。次に、これらの非共有操作をインターフェイスの一部として含めると、操作を実装していないデバイス (サポートするプロトコルの一部ではないため) は NotSupportedException をスローする必要があり、これは誰にとっても非常に悪いことです。ライブラリを使用します。見てみましょう:
var natDevice = NatDiscovery.Discover();
try{
list = natDevice.GetPortList();
}
catch(NotSupportedException)
{
// sorry, your device donnot support listing
}
CanGetPortList、CanDoThis、CanDoThat などのプロパティについて考えていましたが、好きではありません。
現在のアプローチ (NotSpportedException をスローする) はこれを行うための最良の方法ですか?