126 lines
5.0 KiB
C#
126 lines
5.0 KiB
C#
using System;
|
|
using System.Runtime.InteropServices;
|
|
using System.Net.Sockets;
|
|
|
|
namespace TCMPortMapper
|
|
{
|
|
class Win32
|
|
{
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public struct FileDescriptorSet
|
|
{
|
|
//
|
|
// how many are set?
|
|
//
|
|
public int Count;
|
|
//
|
|
// an array of Socket handles
|
|
//
|
|
[MarshalAs(UnmanagedType.ByValArray, SizeConst=MaxCount)]
|
|
public IntPtr[] Array;
|
|
|
|
public static readonly int Size = Marshal.SizeOf(typeof(FileDescriptorSet));
|
|
public static readonly FileDescriptorSet Empty = new FileDescriptorSet(0);
|
|
public const int MaxCount = 64;
|
|
|
|
public FileDescriptorSet(int count)
|
|
{
|
|
Count = count;
|
|
Array = count == 0 ? null : new IntPtr[MaxCount];
|
|
}
|
|
}
|
|
|
|
//
|
|
// Structure used in select() call, taken from the BSD file sys/time.h.
|
|
//
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public struct TimeValue
|
|
{
|
|
public int Seconds; // seconds
|
|
public int Microseconds; // and microseconds
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public struct WSAData
|
|
{
|
|
public short wVersion;
|
|
public short wHighVersion;
|
|
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=257)]
|
|
public string szDescription;
|
|
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=129)]
|
|
public string szSystemStatus;
|
|
public short iMaxSockets;
|
|
public short iMaxUdpDg;
|
|
public int lpVendorInfo;
|
|
}
|
|
|
|
[DllImport("wsock32.dll", CharSet=CharSet.Ansi, BestFitMapping=false, ThrowOnUnmappableChar=true, SetLastError=true)]
|
|
public static extern SocketError WSAStartup([In] short wVersionRequested, [Out] out WSAData lpWSAData);
|
|
|
|
[DllImport("wsock32.dll", CharSet=CharSet.Ansi, SetLastError=true)]
|
|
public static extern int WSACleanup();
|
|
|
|
[DllImport("wsock32.dll", CharSet=CharSet.Ansi, SetLastError=true)]
|
|
public static extern int select([In] int ignoredParameter,
|
|
[In, Out] ref FileDescriptorSet readfds,
|
|
[In, Out] ref FileDescriptorSet writefds,
|
|
[In, Out] ref FileDescriptorSet exceptfds,
|
|
[In] ref TimeValue timeout);
|
|
|
|
[DllImport("wsock32.dll", CharSet=CharSet.Ansi, SetLastError=true)]
|
|
public static extern int select([In] int ignoredParameter,
|
|
[In, Out] ref FileDescriptorSet readfds,
|
|
[In, Out] ref FileDescriptorSet writefds,
|
|
[In, Out] ref FileDescriptorSet exceptfds,
|
|
[In] IntPtr nullTimeout);
|
|
|
|
[DllImport("wsock32.dll", CharSet=CharSet.Ansi, SetLastError=true)]
|
|
public static extern int select([In] int ignoredParameter,
|
|
[In, Out] ref FileDescriptorSet readfds,
|
|
[In] IntPtr ignoredA,
|
|
[In] IntPtr ignoredB,
|
|
[In] ref TimeValue timeout);
|
|
|
|
[DllImport("wsock32.dll", CharSet=CharSet.Ansi, SetLastError=true)]
|
|
public static extern int select([In] int ignoredParameter,
|
|
[In, Out] ref FileDescriptorSet readfds,
|
|
[In] IntPtr ignoredA,
|
|
[In] IntPtr ignoredB,
|
|
[In] IntPtr nullTimeout);
|
|
|
|
[DllImport("wsock32.dll", CharSet=CharSet.Ansi, SetLastError=true)]
|
|
public static extern int select([In] int ignoredParameter,
|
|
[In] IntPtr ignoredA,
|
|
[In, Out] ref FileDescriptorSet writefds,
|
|
[In] IntPtr ignoredB,
|
|
[In] ref TimeValue timeout);
|
|
|
|
[DllImport("wsock32.dll", CharSet=CharSet.Ansi, SetLastError=true)]
|
|
public static extern int select([In] int ignoredParameter,
|
|
[In] IntPtr ignoredA,
|
|
[In, Out] ref FileDescriptorSet writefds,
|
|
[In] IntPtr ignoredB,
|
|
[In] IntPtr nullTimeout);
|
|
|
|
[DllImport("wsock32.dll", CharSet=CharSet.Ansi, SetLastError=true)]
|
|
public static extern int select([In] int ignoredParameter,
|
|
[In] IntPtr ignoredA,
|
|
[In] IntPtr ignoredB,
|
|
[In, Out] ref FileDescriptorSet exceptfds,
|
|
[In] ref TimeValue timeout);
|
|
|
|
[DllImport("wsock32.dll", CharSet=CharSet.Ansi, SetLastError=true)]
|
|
public static extern int select([In] int ignoredParameter,
|
|
[In] IntPtr ignoredA,
|
|
[In] IntPtr ignoredB,
|
|
[In, Out] ref FileDescriptorSet exceptfds,
|
|
[In] IntPtr nullTimeout);
|
|
|
|
[DllImport("iphlpapi.dll")]
|
|
public static extern Int32 SendARP([In] UInt32 destIpAddress,
|
|
[In] UInt32 srcIpAddress,
|
|
[In, Out] byte[] macAddress,
|
|
[In, Out] ref Int32 macAddressLength);
|
|
}
|
|
}
|