This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
zhangyang-libzt/ports/csharp/csharp_callback.cs

256 lines
4.9 KiB
C#
Raw Normal View History

using System.Runtime.InteropServices;
public struct CallbackMessage
{
public int eventCode;
/* Pointers to structures that contain details about the
subject of the callback */
public System.IntPtr node;
public System.IntPtr network;
public System.IntPtr netif;
public System.IntPtr route;
public System.IntPtr path;
public System.IntPtr peer;
public System.IntPtr addr;
}
[StructLayout(LayoutKind.Sequential)]
public struct SockAddrStorage
{
public byte Length;
public byte Family;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
public byte[] Data1;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
public uint[] Data2;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
public uint[] Data3;
}
[StructLayout(LayoutKind.Sequential)]
public struct SockAddr
{
public ushort Family;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 14)]
public byte[] Data;
}
[StructLayout(LayoutKind.Sequential)]
public struct SockAddrIn
{
public byte Length;
public byte Family;
public ushort Port;
public uint Addr;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
public byte[] Zero;
}
public struct NodeDetails
{
/**
* The node ID
*/
public ulong address;
/**
* The current clock value accord to the node
*/
public ulong clock;
/**
* Whether or not this node is online
*/
public bool online;
/**
* Whether port mapping is enabled
*/
public bool portMappingEnabled;
/**
* Whether multipath support is enabled. If true, this node will
* be capable of utilizing multiple physical links simultaneosly
* to create higher quality or more robust aggregate links.
*
* See: https://www.zerotier.com/manual.shtml#2_1_5
*/
public bool multipathEnabled;
/**
* The port used by the service to send and receive
* all encapsulated traffic
*/
public ushort primaryPort;
/**
* Planet ID
*/
public ulong planetWorldId;
public ulong planetWorldTimestamp;
public byte versionMajor;
public byte versionMinor;
public byte versionRev;
};
struct AddrDetails
{
public ulong nwid;
public SockAddrStorage addr;
};
struct NetifDetails
{
/**
* The virtual network that this interface was commissioned for.
*/
public ulong nwid;
/**
* The hardware address assigned to this interface
*/
public ulong mac;
/**
* The MTU for this interface
*/
public int mtu;
};
struct RouteDetails
{
/**
* Target network / netmask bits (in port field) or NULL or 0.0.0.0/0 for default
*/
public System.IntPtr target;
/**
* Gateway IP address (port ignored) or NULL (family == 0) for LAN-local (no gateway)
*/
public System.IntPtr via;
/**
* Route flags
*/
public ushort flags;
/**
* Route metric (not currently used)
*/
public ushort metric;
};
struct NetworkDetails
{
/**
* Network ID
*/
public ulong nwid;
/**
* Maximum Transmission Unit size for this network
*/
public int mtu;
/**
* Number of addresses (actually) assigned to the node on this network
*/
public short num_addresses;
/**
* Array of IPv4 and IPv6 addresses assigned to the node on this network
*/
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 16)]
public System.IntPtr[] addr;
/**
* Number of routes
*/
public uint num_routes;
/**
* Array of IPv4 and IPv6 addresses assigned to the node on this network
*/
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 32)]
public System.IntPtr[] routes;
};
struct PathDetails
{
/**
* Address of endpoint
*/
public System.IntPtr address;
/**
* Time of last send in milliseconds or 0 for never
*/
public ulong lastSend;
/**
* Time of last receive in milliseconds or 0 for never
*/
public ulong lastReceive;
/**
* Is this a trusted path? If so this will be its nonzero ID.
*/
public ulong trustedPathId;
/**
* Is path expired?
*/
int expired;
/**
* Is path preferred?
*/
int preferred;
};
struct PeerDetails
{
/**
* ZeroTier address (40 bits)
*/
public ulong address;
/**
* Remote major version or -1 if not known
*/
int versionMajor;
/**
* Remote minor version or -1 if not known
*/
int versionMinor;
/**
* Remote revision or -1 if not known
*/
int versionRev;
/**
* Last measured latency in milliseconds or -1 if unknown
*/
int latency;
/**
* What trust hierarchy role does this device have?
*/
public int role;
/**
* Number of paths (size of paths[])
*/
public uint pathCount;
/**
* Known network paths to peer
*/
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 16)]
public System.IntPtr[] paths;
};
[UnmanagedFunctionPointerAttribute(CallingConvention.Cdecl)]
public delegate void CSharpCallback(System.IntPtr msg);