5 changed files with 309 additions and 24 deletions
@ -0,0 +1,255 @@
|
||||
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); |
||||
@ -0,0 +1,30 @@
|
||||
/* libzt.i */ |
||||
|
||||
%begin |
||||
%{ |
||||
#define SWIG_PYTHON_CAST_MODE |
||||
%} |
||||
|
||||
%include <stdint.i> |
||||
|
||||
#define PYTHON_BUILD 1 |
||||
|
||||
%module libzt |
||||
%{ |
||||
#include "../include/ZeroTier.h" |
||||
#include "../include/ZeroTierConstants.h" |
||||
%} |
||||
|
||||
%define %cs_callback(TYPE, CSTYPE) |
||||
%typemap(ctype) TYPE, TYPE& "void *" |
||||
%typemap(in) TYPE %{ $1 = ($1_type)$input; %} |
||||
%typemap(in) TYPE& %{ $1 = ($1_type)&$input; %} |
||||
%typemap(imtype, out="IntPtr") TYPE, TYPE& "CSTYPE" |
||||
%typemap(cstype, out="IntPtr") TYPE, TYPE& "CSTYPE" |
||||
%typemap(csin) TYPE, TYPE& "$csinput" |
||||
%enddef |
||||
|
||||
%cs_callback(userCallbackFunc, CSharpCallback) |
||||
|
||||
%include "../include/ZeroTier.h" |
||||
%include "../include/ZeroTierConstants.h" |
||||
Loading…
Reference in new issue