public static async Task <DeviceInformation> Parse(IPEndPoint endpoint, byte[] packet) { var version = packet[0]; var cmd = packet[1]; var length = packet[2]; if (length + 4 > packet.Length) { return(null); } if (version == 1 && cmd == 0 && length == 0) { return(null); // drop ubnt-dp request } if (version == 1 && cmd == 0) { return(await Task.FromResult(DeviceInformationV1.Parse(packet))); } else if (version == 2) { return(await DeviceInformationV2.Parse(endpoint, cmd, packet)); } else { return(null); } }