public void Handle(IPAddress localAddress, byte[] response, IPEndPoint endpoint)
{
if (!IsSearchAddress(endpoint.Address))
{
return;
}
if (response.Length != 12)
{
return;
}
if (response[0] != PmpConstants.Version)
{
return;
}
if (response[1] != PmpConstants.ServerNoop)
{
return;
}
int errorcode = IPAddress.NetworkToHostOrder(BitConverter.ToInt16(response, 2));
if (errorcode != 0)
{
NatUtility.Log("Non zero error: {0}", errorcode);
}
IPAddress publicIp = new IPAddress(new byte[] { response[8], response[9], response[10], response[11] });
nextSearch = DateTime.Now.AddMinutes(5);
timeout = 250;
OnDeviceFound(new DeviceEventArgs(new PmpNatDevice(endpoint.Address, publicIp)));
}