diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2017-01-15 16:29:00 -0500 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2017-01-15 16:29:00 -0500 |
| commit | 6e42398f9ece91358fc52a822e07e6bc9a0e0640 (patch) | |
| tree | 2e6d3dd6b0a9da25b4a96b84c48e8e08b640d139 /Mono.Nat | |
| parent | 95ceddb7d9c817f2e9233bd5116e7cb8ee76fc49 (diff) | |
update video osd
Diffstat (limited to 'Mono.Nat')
| -rw-r--r-- | Mono.Nat/Pmp/PmpNatDevice.cs | 70 |
1 files changed, 39 insertions, 31 deletions
diff --git a/Mono.Nat/Pmp/PmpNatDevice.cs b/Mono.Nat/Pmp/PmpNatDevice.cs index 93007cb8a..10ebbdc2c 100644 --- a/Mono.Nat/Pmp/PmpNatDevice.cs +++ b/Mono.Nat/Pmp/PmpNatDevice.cs @@ -136,34 +136,36 @@ namespace Mono.Nat.Pmp { while (!cancellationToken.IsCancellationRequested) { - var result = await udpClient.ReceiveAsync().ConfigureAwait(false); - var endPoint = result.RemoteEndPoint; - byte[] data = data = result.Buffer; + try + { + var result = await udpClient.ReceiveAsync().ConfigureAwait(false); + var endPoint = result.RemoteEndPoint; + byte[] data = data = result.Buffer; - if (data.Length < 16) - continue; + if (data.Length < 16) + continue; - if (data[0] != PmpConstants.Version) - continue; + if (data[0] != PmpConstants.Version) + continue; - var opCode = (byte)(data[1] & 127); + var opCode = (byte)(data[1] & 127); - var protocol = Protocol.Tcp; - if (opCode == PmpConstants.OperationCodeUdp) - protocol = Protocol.Udp; + var protocol = Protocol.Tcp; + if (opCode == PmpConstants.OperationCodeUdp) + protocol = Protocol.Udp; - short resultCode = IPAddress.NetworkToHostOrder(BitConverter.ToInt16(data, 2)); - int epoch = IPAddress.NetworkToHostOrder(BitConverter.ToInt32(data, 4)); + short resultCode = IPAddress.NetworkToHostOrder(BitConverter.ToInt16(data, 2)); + int epoch = IPAddress.NetworkToHostOrder(BitConverter.ToInt32(data, 4)); - short privatePort = IPAddress.NetworkToHostOrder(BitConverter.ToInt16(data, 8)); - short publicPort = IPAddress.NetworkToHostOrder(BitConverter.ToInt16(data, 10)); + short privatePort = IPAddress.NetworkToHostOrder(BitConverter.ToInt16(data, 8)); + short publicPort = IPAddress.NetworkToHostOrder(BitConverter.ToInt16(data, 10)); - var lifetime = (uint)IPAddress.NetworkToHostOrder(BitConverter.ToInt32(data, 12)); + var lifetime = (uint)IPAddress.NetworkToHostOrder(BitConverter.ToInt32(data, 12)); - if (privatePort < 0 || publicPort < 0 || resultCode != PmpConstants.ResultCodeSuccess) - { - var errors = new[] - { + if (privatePort < 0 || publicPort < 0 || resultCode != PmpConstants.ResultCodeSuccess) + { + var errors = new[] + { "Success", "Unsupported Version", "Not Authorized/Refused (e.g. box supports mapping, but user has turned feature off)" @@ -173,19 +175,25 @@ namespace Mono.Nat.Pmp "Unsupported opcode" }; - var errorMsg = errors[resultCode]; - NatUtility.Log("Error in CreatePortMapListen: " + errorMsg); - return; - } + var errorMsg = errors[resultCode]; + NatUtility.Log("Error in CreatePortMapListen: " + errorMsg); + return; + } - if (lifetime == 0) return; //mapping was deleted + if (lifetime == 0) return; //mapping was deleted - //mapping was created - //TODO: verify that the private port+protocol are a match - mapping.PublicPort = publicPort; - mapping.Protocol = protocol; - mapping.Expiration = DateTime.Now.AddSeconds(lifetime); - return; + //mapping was created + //TODO: verify that the private port+protocol are a match + mapping.PublicPort = publicPort; + mapping.Protocol = protocol; + mapping.Expiration = DateTime.Now.AddSeconds(lifetime); + return; + } + catch (Exception ex) + { + NatUtility.Logger.ErrorException("Error in CreatePortMapListen", ex); + return; + } } } |
