Exemplo n.º 1
0
 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;
 }
Exemplo n.º 2
0
 public void NT_DisposeConnectionInfoArray(NtConnectionInfo *arr, UIntPtr count)
 {
     Native_NT_DisposeConnectionInfoArray(arr, count);
 }
Exemplo n.º 3
0
 private static extern void Native_NT_DisposeConnectionInfoArray(NtConnectionInfo *arr, UIntPtr count);
Exemplo n.º 4
0
        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);
        }