aboutsummaryrefslogtreecommitdiff
path: root/Mono.Nat
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2017-01-15 16:29:00 -0500
committerLuke Pulverenti <luke.pulverenti@gmail.com>2017-01-15 16:29:00 -0500
commit6e42398f9ece91358fc52a822e07e6bc9a0e0640 (patch)
tree2e6d3dd6b0a9da25b4a96b84c48e8e08b640d139 /Mono.Nat
parent95ceddb7d9c817f2e9233bd5116e7cb8ee76fc49 (diff)
update video osd
Diffstat (limited to 'Mono.Nat')
-rw-r--r--Mono.Nat/Pmp/PmpNatDevice.cs70
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;
+ }
}
}