internal unsafe ConnectionInfo(NtConnectionInfo *info) { RemoteId = UTF8String.ReadUTF8String(info->remote_id.str, info->remote_id.len); RemoteIp = UTF8String.ReadUTF8String(info->remote_ip.str, info->remote_ip.len); RemotePort = (int)info->remote_port; LastUpdate = (long)info->last_update; ProtocolVersion = (int)info->protocol_version; }
public void NT_DisposeConnectionInfoArray(NtConnectionInfo *arr, UIntPtr count) { Native_NT_DisposeConnectionInfoArray(arr, count); }
private static extern void Native_NT_DisposeConnectionInfoArray(NtConnectionInfo *arr, UIntPtr count);
public void TestNtConnectionInfo() { string name = "Testing"; string ip = "localhost"; uint port = 1756; ulong lastUpdate = 26; uint protoRev = 0x0300; int nativeSize = 0; byte[] nameArr = CreateUTF8String(name); byte[] ipArr = CreateUTF8String(ip); IntPtr connectionInfoPtr = NT_GetConnectionInfoForTesting(nameArr, ipArr, port, lastUpdate, protoRev, ref nativeSize); Assert.That(Marshal.SizeOf(typeof(NtConnectionInfo)), Is.EqualTo(nativeSize)); Assert.That(IsBlittable(typeof(NtConnectionInfo))); using (DisposableNativeString nameToWrite = new DisposableNativeString(name)) using (DisposableNativeString ipToWrite = new DisposableNativeString(ip)) { NtConnectionInfo managedInfo = new NtConnectionInfo(new NtStringRead(nameToWrite.Buffer, nameToWrite.Length), new NtStringRead(ipToWrite.Buffer, ipToWrite.Length), port, lastUpdate, protoRev); Assert.That(managedInfo.RemoteId.ToString(), Is.EqualTo(name)); Assert.That(managedInfo.RemoteIp.ToString(), Is.EqualTo(ip)); Assert.That(managedInfo.RemotePort, Is.EqualTo(port)); Assert.That(managedInfo.LastUpdate, Is.EqualTo(lastUpdate)); Assert.That(managedInfo.ProtocolVersion, Is.EqualTo(protoRev)); List <byte> nativeArray = new List <byte>(); List <byte> managedArray = new List <byte>(); int bytesToSkip = (Marshal.SizeOf(typeof(IntPtr)) == 8) ? 32 : 16; unsafe { NtConnectionInfo *connInfo = (NtConnectionInfo *)connectionInfoPtr.ToPointer(); Assert.That(connInfo->RemoteId.ToString(), Is.EqualTo(name)); Assert.That(connInfo->RemoteIp.ToString(), Is.EqualTo(ip)); Assert.That(connInfo->RemotePort, Is.EqualTo(port)); Assert.That(connInfo->LastUpdate, Is.EqualTo(lastUpdate)); Assert.That(connInfo->ProtocolVersion, Is.EqualTo(protoRev)); byte *bp = (byte *)connInfo; for (int i = bytesToSkip; i < nativeSize; i++) { nativeArray.Add(bp[i]); } NtConnectionInfo *managedConn = &managedInfo; byte * mbp = (byte *)managedConn; for (int i = bytesToSkip; i < Marshal.SizeOf(typeof(NtConnectionInfo)); i++) { managedArray.Add(mbp[i]); } } // Assert that everything past our pointer values are equivelent Assert.That(nativeArray, Is.EquivalentTo(managedArray)); } NT_FreeConnectionInfoForTesting(connectionInfoPtr); }