Add IPv6 to C# ZeroTier.Sockets, Add C# selftest, Misc C API improvements
This commit is contained in:
10
build.ps1
10
build.ps1
@@ -230,4 +230,14 @@ function Clean
|
|||||||
{
|
{
|
||||||
rm cache -Recurse -Force -Confirm:$false -ErrorAction:'silentlycontinue'
|
rm cache -Recurse -Force -Confirm:$false -ErrorAction:'silentlycontinue'
|
||||||
rm dist -Recurse -Force -Confirm:$false -ErrorAction:'silentlycontinue'
|
rm dist -Recurse -Force -Confirm:$false -ErrorAction:'silentlycontinue'
|
||||||
|
#rm pkg\nuget\bindings\ZeroTier.Sockets\*.cs -Force -Confirm:$false -ErrorAction:'silentlycontinue'
|
||||||
|
#rm pkg\nuget\bindings\ZeroTier.Sockets\bin -Recurse -Force -Confirm:$false -ErrorAction:'silentlycontinue'
|
||||||
|
#rm pkg\nuget\bindings\ZeroTier.Sockets\obj -Recurse -Force -Confirm:$false -ErrorAction:'silentlycontinue'
|
||||||
|
#rm pkg\nuget\ZeroTier.Sockets\contentFiles -Recurse -Force -Confirm:$false -ErrorAction:'silentlycontinue'
|
||||||
|
rm pkg\nuget\ZeroTier.Sockets\lib -Recurse -Force -Confirm:$false -ErrorAction:'silentlycontinue'
|
||||||
|
rm pkg\nuget\ZeroTier.Sockets\bin -Recurse -Force -Confirm:$false -ErrorAction:'silentlycontinue'
|
||||||
|
rm 'pkg\nuget\*' -Recurse -Include *.pdb
|
||||||
|
rm 'pkg\nuget\*' -Recurse -Include *.cs
|
||||||
|
rm 'pkg\nuget\*' -Recurse -Include *.dll
|
||||||
|
rm 'pkg\nuget\*' -Recurse -Include LICENSE.*
|
||||||
}
|
}
|
||||||
|
|||||||
34
build.sh
34
build.sh
@@ -310,6 +310,7 @@ host()
|
|||||||
if [[ $1 = *"docs"* ]]; then
|
if [[ $1 = *"docs"* ]]; then
|
||||||
# Generate documentation
|
# Generate documentation
|
||||||
cd docs/c && doxygen
|
cd docs/c && doxygen
|
||||||
|
cp -f *.png html/
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
# -DZTS_ENABLE_CENTRAL_API=0
|
# -DZTS_ENABLE_CENTRAL_API=0
|
||||||
@@ -547,15 +548,42 @@ test-c()
|
|||||||
rm -rf $TARGET_BUILD_DIR
|
rm -rf $TARGET_BUILD_DIR
|
||||||
# Build selftest
|
# Build selftest
|
||||||
test $1
|
test $1
|
||||||
# Ports can be anything we want since they aren't system ports
|
|
||||||
port4=8080
|
|
||||||
port6=8081
|
|
||||||
# Start Alice as server
|
# Start Alice as server
|
||||||
"$BIN_OUTPUT_DIR/selftest-c-api" $alice_path $testnet $port4 $port6 &
|
"$BIN_OUTPUT_DIR/selftest-c-api" $alice_path $testnet $port4 $port6 &
|
||||||
# Start Bob as client
|
# Start Bob as client
|
||||||
"$BIN_OUTPUT_DIR/selftest-c-api" $bob_path $testnet $port4 $alice_ip4 $port6 $alice_ip6 &
|
"$BIN_OUTPUT_DIR/selftest-c-api" $bob_path $testnet $port4 $alice_ip4 $port6 $alice_ip6 &
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Test C# API
|
||||||
|
test-cs()
|
||||||
|
{
|
||||||
|
if [[ -z "${alice_path}" ]]; then
|
||||||
|
echo "Please set necessary environment variables for test"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
ARTIFACT="pinvoke"
|
||||||
|
# Default to debug so asserts aren't optimized out
|
||||||
|
BUILD_TYPE=${1:-debug}
|
||||||
|
TARGET_BUILD_DIR=$DEFAULT_HOST_BIN_OUTPUT_DIR-$ARTIFACT-$BUILD_TYPE
|
||||||
|
LIB_OUTPUT_DIR=$TARGET_BUILD_DIR/lib
|
||||||
|
BIN_OUTPUT_DIR=$TARGET_BUILD_DIR/bin
|
||||||
|
rm -rf $TARGET_BUILD_DIR
|
||||||
|
# Build C shared library exporting C# symbols
|
||||||
|
host-pinvoke $1
|
||||||
|
# TODO: This should eventually be converted to a proper dotnet project
|
||||||
|
# Build C# managed API library
|
||||||
|
csc -target:library -out:$LIB_OUTPUT_DIR/ZeroTier.Sockets.dll src/bindings/csharp/*.cs
|
||||||
|
# Build selftest
|
||||||
|
mkdir -p $BIN_OUTPUT_DIR
|
||||||
|
csc -out:$BIN_OUTPUT_DIR/selftest.exe -reference:$LIB_OUTPUT_DIR/ZeroTier.Sockets.dll test/selftest.cs
|
||||||
|
# Copy shared libraries into bin directory so they can be discovered by dlopen
|
||||||
|
cp $LIB_OUTPUT_DIR/* $BIN_OUTPUT_DIR
|
||||||
|
# Start Alice as server
|
||||||
|
mono --debug "$BIN_OUTPUT_DIR/selftest.exe" $alice_path $testnet $port4 $port6 &
|
||||||
|
# Start Bob as client
|
||||||
|
mono --debug "$BIN_OUTPUT_DIR/selftest.exe" $bob_path $testnet $port4 $alice_ip4 $port6 $alice_ip6 &
|
||||||
|
}
|
||||||
|
|
||||||
# Recursive deep clean
|
# Recursive deep clean
|
||||||
clean()
|
clean()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -139,7 +139,8 @@ public class ExampleApp {
|
|||||||
}
|
}
|
||||||
catch (ZeroTier.Sockets.SocketException e)
|
catch (ZeroTier.Sockets.SocketException e)
|
||||||
{
|
{
|
||||||
Console.WriteLine("ServiveErrorCode={0} SocketErrorCode={1}", e.ServiceErrorCode, e.SocketErrorCode);
|
Console.WriteLine("ServiceErrorCode={0} SocketErrorCode={1}",
|
||||||
|
e.ServiceErrorCode, e.SocketErrorCode);
|
||||||
}
|
}
|
||||||
if (bytesRec > 0) {
|
if (bytesRec > 0) {
|
||||||
Console.WriteLine("Bytes received: {0}", bytesRec);
|
Console.WriteLine("Bytes received: {0}", bytesRec);
|
||||||
@@ -163,7 +164,8 @@ public class ExampleApp {
|
|||||||
|
|
||||||
} catch (ZeroTier.Sockets.SocketException e) {
|
} catch (ZeroTier.Sockets.SocketException e) {
|
||||||
Console.WriteLine(e);
|
Console.WriteLine(e);
|
||||||
Console.WriteLine("ServiveErrorCode={0} SocketErrorCode={1}", e.ServiceErrorCode, e.SocketErrorCode);
|
Console.WriteLine("ServiceErrorCode={0} SocketErrorCode={1}",
|
||||||
|
e.ServiceErrorCode, e.SocketErrorCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
Console.WriteLine("\nPress ENTER to continue...");
|
Console.WriteLine("\nPress ENTER to continue...");
|
||||||
@@ -212,7 +214,7 @@ public class ExampleApp {
|
|||||||
Console.WriteLine("ArgumentNullException : {0}",ane.ToString());
|
Console.WriteLine("ArgumentNullException : {0}",ane.ToString());
|
||||||
} catch (ZeroTier.Sockets.SocketException e) {
|
} catch (ZeroTier.Sockets.SocketException e) {
|
||||||
Console.WriteLine(e);
|
Console.WriteLine(e);
|
||||||
Console.WriteLine("ServiveErrorCode={0} SocketErrorCode={1}", e.ServiceErrorCode, e.SocketErrorCode);
|
Console.WriteLine("ServiceErrorCode={0} SocketErrorCode={1}", e.ServiceErrorCode, e.SocketErrorCode);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Console.WriteLine( e.ToString());
|
Console.WriteLine( e.ToString());
|
||||||
|
|||||||
@@ -1519,14 +1519,29 @@ ZTS_API int ZTCALL zts_connect(
|
|||||||
/**
|
/**
|
||||||
* @brief Connect a socket to a remote host
|
* @brief Connect a socket to a remote host
|
||||||
*
|
*
|
||||||
|
* This convenience function exists because ZeroTier uses transport-triggered
|
||||||
|
* links. This means that links between peers do not exist until peers try to
|
||||||
|
* talk to each other. This can be a problem during connection procedures since
|
||||||
|
* some of the initial packets are lost. To alleviate the need to try
|
||||||
|
* `zts_connect` many times, this function will keep re-trying for you, even if
|
||||||
|
* no known routes exist. However, if the socket is set to `non-blocking` mode
|
||||||
|
* it will behave identically to `zts_connect` and return immediately upon
|
||||||
|
* failure.
|
||||||
|
*
|
||||||
* @param fd Socket file descriptor
|
* @param fd Socket file descriptor
|
||||||
* @param family Address family: `ZTS_AF_INET` or `ZTS_AF_INET6`
|
* @param family Address family: `ZTS_AF_INET` or `ZTS_AF_INET6`
|
||||||
* @param ipstr Human-readable IP string
|
* @param ipstr Human-readable IP string
|
||||||
* @param port Port
|
* @param port Port
|
||||||
* @return `ZTS_ERR_OK` if successful, `ZTS_ERR_SERVICE` if the node
|
* @param timeout_ms (Approximate) amount of time in milliseconds before
|
||||||
* experiences a problem, `ZTS_ERR_ARG` if invalid arg. Sets `zts_errno`
|
* connection attempt is aborted. Will block for `30 seconds` if timeout is
|
||||||
|
* set to `0`.
|
||||||
|
*
|
||||||
|
* @return `ZTS_ERR_OK` if successful, `ZTS_ERR_SOCKET` if the function times
|
||||||
|
* out with no connection made, `ZTS_ERR_SERVICE` if the node experiences a
|
||||||
|
* problem, `ZTS_ERR_ARG` if invalid arg. Sets `zts_errno`
|
||||||
*/
|
*/
|
||||||
ZTS_API int ZTCALL zts_connect_easy(int fd, int family, char *ipstr, int port);
|
ZTS_API int ZTCALL zts_connect_easy(
|
||||||
|
int fd, int family, char *ipstr, int port, int timeout_ms);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Bind a socket to a local address
|
* @brief Bind a socket to a local address
|
||||||
@@ -1574,6 +1589,19 @@ ZTS_API int ZTCALL zts_listen(int fd, int backlog);
|
|||||||
ZTS_API int ZTCALL zts_accept(
|
ZTS_API int ZTCALL zts_accept(
|
||||||
int fd, struct zts_sockaddr *addr, zts_socklen_t *addrlen);
|
int fd, struct zts_sockaddr *addr, zts_socklen_t *addrlen);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Accept an incoming connection
|
||||||
|
*
|
||||||
|
* @param fd Socket file descriptor
|
||||||
|
* @param remoteIpStr Buffer that will receive remote host IP string
|
||||||
|
* @param len Size of buffer that will receive remote host IP string
|
||||||
|
* Must be set to `ZTS_INET6_ADDRSTRLEN`
|
||||||
|
* @param port Port number of the newly connected remote host (value-result)
|
||||||
|
* @return New file descriptor if successful, `ZTS_ERR_SERVICE` if the node
|
||||||
|
* experiences a problem, `ZTS_ERR_ARG` if invalid arg. Sets `zts_errno`
|
||||||
|
*/
|
||||||
|
ZTS_API int ZTCALL zts_accept_easy(int fd, char *remoteIpStr, int len, int *port);
|
||||||
|
|
||||||
// Socket level option number
|
// Socket level option number
|
||||||
#define ZTS_SOL_SOCKET 0x0fff
|
#define ZTS_SOL_SOCKET 0x0fff
|
||||||
// Socket options
|
// Socket options
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
[ZeroTier](https://www.zerotier.com) SDK
|
[ZeroTier](https://www.zerotier.com)
|
||||||
=====
|
=====
|
||||||
|
|
||||||
Connect physical devices, virtual devices, and application instances as if everything is on a single LAN.
|
Securely connect application instances, physical devices, and virtual devices as if everything is on a single LAN. ZeroTier brings your network into user-space. No root, and no host configuration requirements.
|
||||||
|
|
||||||
ZeroTier brings your network into user-space. We've paired our network hypervisor core with a TCP/UDP/IP stack [(lwIP)](https://en.wikipedia.org/wiki/LwIP) to provide your application with an exclusive and private virtual network interface. All traffic on this interface is end-to-end encrypted between each peer and we provide an easy-to-use socket interface similar to [Berkeley Sockets](https://en.wikipedia.org/wiki/Berkeley_sockets). Since we aren't using the kernel's IP stack that means no drivers, no root, and no host configuration requirements.
|
We've paired our network hyper-visor core with a TCP/UDP/IP stack [(lwIP)](https://en.wikipedia.org/wiki/LwIP) to provide your application with an exclusive and private virtual network interface. All traffic on this interface is end-to-end encrypted between each peer and we provide an easy-to-use socket interface similar to [Berkeley Sockets](https://en.wikipedia.org/wiki/Berkeley_sockets).
|
||||||
|
|
||||||
- Website: https://www.zerotier.com/
|
- Website: https://www.zerotier.com/
|
||||||
- ZeroTier Manual: https://www.zerotier.com/manual/
|
- ZeroTier Manual: https://www.zerotier.com/manual/
|
||||||
@@ -11,19 +11,20 @@ ZeroTier brings your network into user-space. We've paired our network hyperviso
|
|||||||
- SDK Repo: https://github.com/zerotier/libzt
|
- SDK Repo: https://github.com/zerotier/libzt
|
||||||
- Forum: https://discuss.zerotier.com
|
- Forum: https://discuss.zerotier.com
|
||||||
|
|
||||||
## 1.3.3-alpha.2 Release Notes
|
## 1.3.4 Release Notes
|
||||||
|
|
||||||
### New namespace structure:
|
### Added:
|
||||||
- `ZeroTier.Core` (API to control a ZeroTier Node)
|
- IPv6 Support
|
||||||
- `class ZeroTier.Core.Node`
|
- `Socket.ReceiveTimeout`
|
||||||
- `class ZeroTier.Core.Event`
|
- `Socket.SendTimeout`
|
||||||
- `ZeroTier.Sockets`
|
- `Socket.ConnectTimeout`
|
||||||
- `class ZeroTier.Sockets.Socket`
|
- `Socket.SendBufferSize`
|
||||||
- `class ZeroTier.Sockets.SocketException`
|
- `Socket.ReceiveBufferSize`
|
||||||
- `ZeroTier.Central` (upcoming)
|
- `Socket.Ttl`
|
||||||
|
- `Socket.LingerState`
|
||||||
|
- `Socket.KeepAlive`
|
||||||
|
- `Socket.NoDelay`
|
||||||
|
- `Socket.Blocking`
|
||||||
|
|
||||||
### Added to Socket API
|
### Bugfixes:
|
||||||
- `Socket.ReceiveTimeout`, `Socket.SendTimeout`, etc.
|
- Minor C API fixes
|
||||||
|
|
||||||
### Bugs
|
|
||||||
- Fixed memory leak caused by unmanaged resources not being released.
|
|
||||||
|
|||||||
@@ -66,22 +66,44 @@ int zts_connect(int fd, const struct zts_sockaddr *addr, zts_socklen_t addrlen)
|
|||||||
return lwip_connect(fd, (sockaddr*)addr, addrlen);
|
return lwip_connect(fd, (sockaddr*)addr, addrlen);
|
||||||
}
|
}
|
||||||
|
|
||||||
int zts_connect_easy(int fd, int family, char *ipstr, int port) {
|
int zts_connect_easy(int fd, int family, char *ipstr, int port, int timeout_ms) {
|
||||||
|
if (timeout_ms < 0) {
|
||||||
|
return ZTS_ERR_ARG;
|
||||||
|
}
|
||||||
|
if (timeout_ms == 0) {
|
||||||
|
timeout_ms = 30000; // Default
|
||||||
|
}
|
||||||
|
int div = 4; // Must be > 0, Four connection attempts per second
|
||||||
|
int n_tries = (timeout_ms / 1000) * div;
|
||||||
|
int connect_delay = 1000 / div;
|
||||||
|
int err = ZTS_ERR_SOCKET;
|
||||||
|
|
||||||
|
zts_socklen_t addrlen = 0;
|
||||||
|
struct zts_sockaddr_storage ss;
|
||||||
|
struct zts_sockaddr *sa = NULL;
|
||||||
|
|
||||||
if (family == ZTS_AF_INET) {
|
if (family == ZTS_AF_INET) {
|
||||||
struct zts_sockaddr_in in4;
|
addrlen = sizeof(ss);
|
||||||
zts_socklen_t addrlen = sizeof(in4);
|
|
||||||
ipstr2sockaddr(
|
ipstr2sockaddr(
|
||||||
family, ipstr, port, (struct zts_sockaddr *)&in4, &addrlen);
|
family, ipstr, port, (struct zts_sockaddr *)&ss, &addrlen);
|
||||||
struct zts_sockaddr *sa = (struct zts_sockaddr *)&in4;
|
sa = (struct zts_sockaddr *)&ss;
|
||||||
return zts_connect(fd, sa, addrlen);
|
|
||||||
}
|
}
|
||||||
if (family == ZTS_AF_INET6) {
|
if (family == ZTS_AF_INET6) {
|
||||||
struct zts_sockaddr_in6 in6;
|
addrlen = sizeof(ss);
|
||||||
zts_socklen_t addrlen = sizeof(in6);
|
|
||||||
ipstr2sockaddr(
|
ipstr2sockaddr(
|
||||||
family, ipstr, port, (struct zts_sockaddr *)&in6, &addrlen);
|
family, ipstr, port, (struct zts_sockaddr *)&ss, &addrlen);
|
||||||
struct zts_sockaddr *sa = (struct zts_sockaddr *)&in6;
|
sa = (struct zts_sockaddr *)&ss;
|
||||||
return zts_connect(fd, sa, addrlen);
|
}
|
||||||
|
if (addrlen > 0 && sa != NULL) {
|
||||||
|
if (zts_get_blocking(fd)) {
|
||||||
|
do {
|
||||||
|
err = zts_connect(fd, sa, addrlen);
|
||||||
|
zts_delay_ms(connect_delay);
|
||||||
|
n_tries--;
|
||||||
|
}
|
||||||
|
while ((err < 0) && (zts_errno != 0) && (n_tries > 0));
|
||||||
|
}
|
||||||
|
return err;
|
||||||
}
|
}
|
||||||
return ZTS_ERR_ARG;
|
return ZTS_ERR_ARG;
|
||||||
}
|
}
|
||||||
@@ -137,6 +159,34 @@ int zts_accept(int fd, struct zts_sockaddr *addr, zts_socklen_t *addrlen)
|
|||||||
return lwip_accept(fd, (sockaddr*)addr, (socklen_t*)addrlen);
|
return lwip_accept(fd, (sockaddr*)addr, (socklen_t*)addrlen);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int zts_accept_easy(int fd, char *remoteIpStr, int len, int *port)
|
||||||
|
{
|
||||||
|
if (len != ZTS_INET6_ADDRSTRLEN) {
|
||||||
|
return ZTS_ERR_ARG;
|
||||||
|
}
|
||||||
|
char ipstr[ZTS_INET6_ADDRSTRLEN];
|
||||||
|
memset(ipstr, 0, ZTS_INET6_ADDRSTRLEN);
|
||||||
|
|
||||||
|
zts_sockaddr_storage ss;
|
||||||
|
zts_socklen_t addrlen = sizeof(ss);
|
||||||
|
|
||||||
|
int acc_fd = zts_accept(fd, (zts_sockaddr*)&ss, (zts_socklen_t*)&addrlen);
|
||||||
|
struct zts_sockaddr *sa = (struct zts_sockaddr *)&ss;
|
||||||
|
if (sa->sa_family == ZTS_AF_INET) {
|
||||||
|
struct zts_sockaddr_in *in4 = (struct zts_sockaddr_in*)sa;
|
||||||
|
zts_inet_ntop(ZTS_AF_INET, &(in4->sin_addr),
|
||||||
|
remoteIpStr, ZTS_INET_ADDRSTRLEN);
|
||||||
|
*port = ntohs(in4->sin_port);
|
||||||
|
}
|
||||||
|
if (sa->sa_family == ZTS_AF_INET6) {
|
||||||
|
struct zts_sockaddr_in6 *in6 = (struct zts_sockaddr_in6*)sa;
|
||||||
|
zts_inet_ntop(ZTS_AF_INET6, &(in6->sin6_addr),
|
||||||
|
remoteIpStr, ZTS_INET6_ADDRSTRLEN);
|
||||||
|
*port = ntohs(in6->sin6_port);
|
||||||
|
}
|
||||||
|
return acc_fd;
|
||||||
|
}
|
||||||
|
|
||||||
int zts_setsockopt(
|
int zts_setsockopt(
|
||||||
int fd, int level, int optname, const void *optval,zts_socklen_t optlen)
|
int fd, int level, int optname, const void *optval,zts_socklen_t optlen)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -35,6 +35,8 @@ namespace ZeroTier.Core
|
|||||||
static ulong _nodeId = 0x0;
|
static ulong _nodeId = 0x0;
|
||||||
static bool _isOnline = false;
|
static bool _isOnline = false;
|
||||||
static bool _joinedAtLeastOneNetwork = false;
|
static bool _joinedAtLeastOneNetwork = false;
|
||||||
|
static bool _has_ipv4_routes = false;
|
||||||
|
static bool _has_ipv6_routes = false;
|
||||||
static bool _hasBeenFreed = false;
|
static bool _hasBeenFreed = false;
|
||||||
string _configFilePath;
|
string _configFilePath;
|
||||||
ushort _servicePort;
|
ushort _servicePort;
|
||||||
@@ -94,12 +96,22 @@ namespace ZeroTier.Core
|
|||||||
newEvent = new ZeroTier.Core.Event(msg.eventCode,"EVENT_NETWORK_ACCESS_DENIED");
|
newEvent = new ZeroTier.Core.Event(msg.eventCode,"EVENT_NETWORK_ACCESS_DENIED");
|
||||||
}
|
}
|
||||||
if (msg.eventCode == Constants.EVENT_NETWORK_READY_IP4) {
|
if (msg.eventCode == Constants.EVENT_NETWORK_READY_IP4) {
|
||||||
_joinedAtLeastOneNetwork = true;
|
zts_network_details unmanagedDetails =
|
||||||
|
(zts_network_details)Marshal.PtrToStructure(msg.network, typeof(zts_network_details));
|
||||||
newEvent = new ZeroTier.Core.Event(msg.eventCode,"EVENT_NETWORK_READY_IP4");
|
newEvent = new ZeroTier.Core.Event(msg.eventCode,"EVENT_NETWORK_READY_IP4");
|
||||||
|
newEvent.networkDetails = new NetworkDetails();
|
||||||
|
newEvent.networkDetails.networkId = unmanagedDetails.nwid;
|
||||||
|
_joinedAtLeastOneNetwork = true;
|
||||||
|
_has_ipv4_routes = true;
|
||||||
}
|
}
|
||||||
if (msg.eventCode == Constants.EVENT_NETWORK_READY_IP6) {
|
if (msg.eventCode == Constants.EVENT_NETWORK_READY_IP6) {
|
||||||
_joinedAtLeastOneNetwork = true;
|
zts_network_details unmanagedDetails =
|
||||||
|
(zts_network_details)Marshal.PtrToStructure(msg.network, typeof(zts_network_details));
|
||||||
newEvent = new ZeroTier.Core.Event(msg.eventCode,"EVENT_NETWORK_READY_IP6");
|
newEvent = new ZeroTier.Core.Event(msg.eventCode,"EVENT_NETWORK_READY_IP6");
|
||||||
|
newEvent.networkDetails = new NetworkDetails();
|
||||||
|
newEvent.networkDetails.networkId = unmanagedDetails.nwid;
|
||||||
|
_joinedAtLeastOneNetwork = true;
|
||||||
|
_has_ipv6_routes = true;
|
||||||
}
|
}
|
||||||
if (msg.eventCode == Constants.EVENT_NETWORK_DOWN) {
|
if (msg.eventCode == Constants.EVENT_NETWORK_DOWN) {
|
||||||
newEvent = new ZeroTier.Core.Event(msg.eventCode,"EVENT_NETWORK_DOWN");
|
newEvent = new ZeroTier.Core.Event(msg.eventCode,"EVENT_NETWORK_DOWN");
|
||||||
@@ -300,6 +312,17 @@ namespace ZeroTier.Core
|
|||||||
return _joinedAtLeastOneNetwork;
|
return _joinedAtLeastOneNetwork;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public bool HasIPv4Routes
|
||||||
|
{
|
||||||
|
get { return _has_ipv4_routes; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool HasIPv6Routes
|
||||||
|
{
|
||||||
|
get { return _has_ipv6_routes; }
|
||||||
|
}
|
||||||
|
|
||||||
public ulong NodeId
|
public ulong NodeId
|
||||||
{
|
{
|
||||||
get {
|
get {
|
||||||
|
|||||||
@@ -48,6 +48,8 @@ namespace ZeroTier.Sockets
|
|||||||
bool _isBound;
|
bool _isBound;
|
||||||
bool _isConnected;
|
bool _isConnected;
|
||||||
|
|
||||||
|
int _connectTimeout = 30000;
|
||||||
|
|
||||||
AddressFamily _socketFamily;
|
AddressFamily _socketFamily;
|
||||||
SocketType _socketType;
|
SocketType _socketType;
|
||||||
ProtocolType _socketProtocol;
|
ProtocolType _socketProtocol;
|
||||||
@@ -140,50 +142,26 @@ namespace ZeroTier.Sockets
|
|||||||
throw new ArgumentNullException("remoteEndPoint");
|
throw new ArgumentNullException("remoteEndPoint");
|
||||||
}
|
}
|
||||||
int err = Constants.ERR_OK;
|
int err = Constants.ERR_OK;
|
||||||
int addrlen = 0;
|
if (remoteEndPoint.AddressFamily == AddressFamily.InterNetwork) {
|
||||||
IntPtr remoteAddrPtr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(zts_sockaddr)));
|
err = zts_connect_easy(
|
||||||
if (remoteEndPoint.AddressFamily == AddressFamily.InterNetwork)
|
_fd,
|
||||||
{
|
Constants.AF_INET,
|
||||||
zts_sockaddr_in sa = new zts_sockaddr_in();
|
remoteEndPoint.Address.ToString(),
|
||||||
addrlen = Marshal.SizeOf(typeof(zts_sockaddr_in));
|
(ushort)remoteEndPoint.Port,
|
||||||
switch (remoteEndPoint.AddressFamily)
|
_connectTimeout);
|
||||||
{
|
|
||||||
case AddressFamily.InterNetwork:
|
|
||||||
sa.sin_family = (byte)Constants.AF_INET;
|
|
||||||
break;
|
|
||||||
case AddressFamily.InterNetworkV6:
|
|
||||||
sa.sin_family = (byte)Constants.AF_INET6;
|
|
||||||
break;
|
|
||||||
case AddressFamily.Unknown:
|
|
||||||
sa.sin_family = (byte)Constants.AF_UNSPEC;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
sa.sin_port = (short)IPAddress.HostToNetworkOrder((ushort)remoteEndPoint.Port);
|
if (remoteEndPoint.AddressFamily == AddressFamily.InterNetworkV6) {
|
||||||
sa.sin_addr = remoteEndPoint.Address.GetAddressBytes();
|
Console.WriteLine("going to connect to: " + remoteEndPoint.ToString());
|
||||||
sa.sin_len = (byte)addrlen; // lwIP-specific
|
err = zts_connect_easy(
|
||||||
|
_fd,
|
||||||
Marshal.StructureToPtr(sa, remoteAddrPtr, false);
|
Constants.AF_INET6,
|
||||||
//zts_sockaddr sAddr = (zts_sockaddr)Marshal.PtrToStructure(remoteAddrPtr, typeof(zts_sockaddr));
|
remoteEndPoint.Address.ToString(),
|
||||||
err = zts_connect(_fd, remoteAddrPtr, (byte)addrlen);
|
(ushort)remoteEndPoint.Port,
|
||||||
|
_connectTimeout);
|
||||||
}
|
|
||||||
if (remoteEndPoint.AddressFamily == AddressFamily.InterNetworkV6)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
socketAddress.iSockaddrLength = Marshal.SizeOf(typeof(sockaddr_in6));
|
|
||||||
socketAddress.lpSockAddr = CriticalAllocHandle.FromSize(socketAddress.iSockaddrLength);
|
|
||||||
sockaddr_in6 sa = new sockaddr_in6();
|
|
||||||
sa.sin6_family = (short)AddressFamily.InterNetworkV6;
|
|
||||||
sa.sin6_port = (ushort)endpoint.Port;
|
|
||||||
sa.sin6_addr = endpoint.Address.GetAddressBytes();
|
|
||||||
sa.sin6_scope_id = (uint)endpoint.Address.ScopeId;
|
|
||||||
Marshal.StructureToPtr(sa, (IntPtr)socketAddress.lpSockAddr, false);
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
throw new ZeroTier.Sockets.SocketException(err, ZeroTier.Core.Node.ErrNo);
|
throw new ZeroTier.Sockets.SocketException(err, ZeroTier.Core.Node.ErrNo);
|
||||||
}
|
}
|
||||||
Marshal.FreeHGlobal(remoteAddrPtr);
|
|
||||||
_remoteEndPoint = remoteEndPoint;
|
_remoteEndPoint = remoteEndPoint;
|
||||||
_isConnected = true;
|
_isConnected = true;
|
||||||
}
|
}
|
||||||
@@ -201,48 +179,24 @@ namespace ZeroTier.Sockets
|
|||||||
throw new ArgumentNullException("localEndPoint");
|
throw new ArgumentNullException("localEndPoint");
|
||||||
}
|
}
|
||||||
int err = Constants.ERR_OK;
|
int err = Constants.ERR_OK;
|
||||||
int addrlen = 0;
|
if (localEndPoint.AddressFamily == AddressFamily.InterNetwork) {
|
||||||
IntPtr localAddrPtr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(zts_sockaddr)));
|
err = zts_bind_easy(
|
||||||
if (localEndPoint.AddressFamily == AddressFamily.InterNetwork)
|
_fd,
|
||||||
{
|
Constants.AF_INET,
|
||||||
zts_sockaddr_in sa = new zts_sockaddr_in();
|
"0.0.0.0",
|
||||||
addrlen = Marshal.SizeOf(typeof(zts_sockaddr_in));
|
(ushort)localEndPoint.Port);
|
||||||
switch (localEndPoint.AddressFamily)
|
|
||||||
{
|
|
||||||
case AddressFamily.InterNetwork:
|
|
||||||
sa.sin_family = (byte)Constants.AF_INET;
|
|
||||||
break;
|
|
||||||
case AddressFamily.InterNetworkV6:
|
|
||||||
sa.sin_family = (byte)Constants.AF_INET6;
|
|
||||||
break;
|
|
||||||
case AddressFamily.Unknown:
|
|
||||||
sa.sin_family = (byte)Constants.AF_UNSPEC;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
sa.sin_port = (short)IPAddress.HostToNetworkOrder((ushort)localEndPoint.Port);
|
if (localEndPoint.AddressFamily == AddressFamily.InterNetworkV6) {
|
||||||
sa.sin_addr = localEndPoint.Address.GetAddressBytes();
|
// Todo: detect IPAddress.IPv6Any
|
||||||
sa.sin_len = (byte)addrlen; // lwIP-specific
|
err = zts_bind_easy(
|
||||||
|
_fd,
|
||||||
Marshal.StructureToPtr(sa, localAddrPtr, false);
|
Constants.AF_INET6,
|
||||||
err = zts_bind(_fd, localAddrPtr, (byte)addrlen);
|
"::",
|
||||||
}
|
(ushort)localEndPoint.Port);
|
||||||
if (localEndPoint.AddressFamily == AddressFamily.InterNetworkV6)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
socketAddress.iSockaddrLength = Marshal.SizeOf(typeof(sockaddr_in6));
|
|
||||||
socketAddress.lpSockAddr = CriticalAllocHandle.FromSize(socketAddress.iSockaddrLength);
|
|
||||||
sockaddr_in6 sa = new sockaddr_in6();
|
|
||||||
sa.sin6_family = (short)AddressFamily.InterNetworkV6;
|
|
||||||
sa.sin6_port = (ushort)endpoint.Port;
|
|
||||||
sa.sin6_addr = endpoint.Address.GetAddressBytes();
|
|
||||||
sa.sin6_scope_id = (uint)endpoint.Address.ScopeId;
|
|
||||||
Marshal.StructureToPtr(sa, (IntPtr)socketAddress.lpSockAddr, false);
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
throw new ZeroTier.Sockets.SocketException((int)err);
|
throw new ZeroTier.Sockets.SocketException((int)err);
|
||||||
}
|
}
|
||||||
Marshal.FreeHGlobal(localAddrPtr);
|
|
||||||
_localEndPoint = localEndPoint;
|
_localEndPoint = localEndPoint;
|
||||||
_isBound = true;
|
_isBound = true;
|
||||||
}
|
}
|
||||||
@@ -274,29 +228,22 @@ namespace ZeroTier.Sockets
|
|||||||
throw new ZeroTier.Sockets.SocketException((int)Constants.ERR_SOCKET);
|
throw new ZeroTier.Sockets.SocketException((int)Constants.ERR_SOCKET);
|
||||||
}
|
}
|
||||||
if (_isListening == false) {
|
if (_isListening == false) {
|
||||||
throw new InvalidOperationException("Socket is not in a listening state. Call Listen() first");
|
throw new InvalidOperationException(
|
||||||
|
"Socket is not in a listening state. Call Listen() first");
|
||||||
}
|
}
|
||||||
// TODO: Rewrite -- Check for memory leaks
|
IntPtr lpBuffer = Marshal.AllocHGlobal(ZeroTier.Constants.INET6_ADDRSTRLEN);
|
||||||
// Inform zts_accept of the size of the available address buffer
|
int port = 0;
|
||||||
int addrlen = Marshal.SizeOf(typeof(zts_sockaddr_in));
|
int accepted_fd = zts_accept_easy(
|
||||||
IntPtr addrlenPtr = GCHandle.Alloc(addrlen, GCHandleType.Pinned).AddrOfPinnedObject();
|
_fd, lpBuffer, ZeroTier.Constants.INET6_ADDRSTRLEN, ref port);
|
||||||
// Allocate space for address buffer and provide pointer to zts_accept
|
// Convert buffer to managed string
|
||||||
zts_sockaddr_in in4 = new zts_sockaddr_in();
|
string str = Marshal.PtrToStringAnsi(lpBuffer);
|
||||||
IntPtr remoteAddrPtr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(zts_sockaddr_in)));
|
Marshal.FreeHGlobal(lpBuffer);
|
||||||
Marshal.StructureToPtr(in4, remoteAddrPtr, false);
|
lpBuffer = IntPtr.Zero;
|
||||||
|
IPEndPoint clientEndPoint = new IPEndPoint(IPAddress.Parse(str), port);
|
||||||
int err = zts_accept(_fd, remoteAddrPtr, addrlenPtr);
|
Console.WriteLine("clientEndPoint = " + clientEndPoint.ToString());
|
||||||
if (err < 0) {
|
|
||||||
throw new ZeroTier.Sockets.SocketException(err, ZeroTier.Core.Node.ErrNo);
|
|
||||||
}
|
|
||||||
in4 = (zts_sockaddr_in)Marshal.PtrToStructure(remoteAddrPtr, typeof(zts_sockaddr_in));
|
|
||||||
// Convert sockaddr contents to IPEndPoint
|
|
||||||
IPAddress ipAddress = new IPAddress(in4.sin_addr);
|
|
||||||
IPEndPoint clientEndPoint = new IPEndPoint(ipAddress, IPAddress.NetworkToHostOrder(((ushort)in4.sin_port)));
|
|
||||||
// Create new socket by providing file descriptor returned from zts_accept call.
|
// Create new socket by providing file descriptor returned from zts_accept call.
|
||||||
Socket clientSocket = new Socket(
|
Socket clientSocket = new Socket(
|
||||||
err, _socketFamily, _socketType, _socketProtocol, _localEndPoint, clientEndPoint);
|
accepted_fd, _socketFamily, _socketType, _socketProtocol, _localEndPoint, clientEndPoint);
|
||||||
Marshal.FreeHGlobal(remoteAddrPtr);
|
|
||||||
return clientSocket;
|
return clientSocket;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -332,28 +279,8 @@ namespace ZeroTier.Sockets
|
|||||||
|
|
||||||
public bool Blocking
|
public bool Blocking
|
||||||
{
|
{
|
||||||
get {
|
get { return Convert.ToBoolean(zts_get_blocking(_fd)); }
|
||||||
return _isBlocking;
|
set { zts_set_blocking(_fd, Convert.ToInt32(value)); }
|
||||||
}
|
|
||||||
set {
|
|
||||||
if (_isClosed) {
|
|
||||||
throw new ObjectDisposedException("Socket has been closed");
|
|
||||||
}
|
|
||||||
int opts = 0;
|
|
||||||
if ((opts = zts_fcntl(_fd, (int)(ZeroTier.Constants.F_GETFL), 0)) < 0) {
|
|
||||||
throw new ZeroTier.Sockets.SocketException(opts, ZeroTier.Core.Node.ErrNo);
|
|
||||||
}
|
|
||||||
if (value) { // Blocking
|
|
||||||
opts = opts & (~(ZeroTier.Constants.O_NONBLOCK));
|
|
||||||
}
|
|
||||||
if (!value) { // Non-Blocking
|
|
||||||
opts = opts | (int)(ZeroTier.Constants.O_NONBLOCK);
|
|
||||||
}
|
|
||||||
if ((opts = zts_fcntl(_fd, ZeroTier.Constants.F_SETFL, (int)opts)) < 0) {
|
|
||||||
throw new ZeroTier.Sockets.SocketException(opts, ZeroTier.Core.Node.ErrNo);
|
|
||||||
}
|
|
||||||
_isBlocking = value;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Poll(int microSeconds, System.Net.Sockets.SelectMode mode)
|
public bool Poll(int microSeconds, System.Net.Sockets.SelectMode mode)
|
||||||
@@ -384,13 +311,16 @@ namespace ZeroTier.Sockets
|
|||||||
poll_set = (zts_pollfd)Marshal.PtrToStructure(poll_fd_ptr, typeof(zts_pollfd));
|
poll_set = (zts_pollfd)Marshal.PtrToStructure(poll_fd_ptr, typeof(zts_pollfd));
|
||||||
if (result != 0) {
|
if (result != 0) {
|
||||||
if (mode == SelectMode.SelectRead) {
|
if (mode == SelectMode.SelectRead) {
|
||||||
result = Convert.ToInt32(((byte)poll_set.revents & (byte)ZeroTier.Constants.POLLIN) != 0);
|
result = Convert.ToInt32(((byte)poll_set.revents
|
||||||
|
& (byte)ZeroTier.Constants.POLLIN) != 0);
|
||||||
}
|
}
|
||||||
if (mode == SelectMode.SelectWrite) {
|
if (mode == SelectMode.SelectWrite) {
|
||||||
result = Convert.ToInt32(((byte)poll_set.revents & (byte)ZeroTier.Constants.POLLOUT) != 0);
|
result = Convert.ToInt32(((byte)poll_set.revents
|
||||||
|
& (byte)ZeroTier.Constants.POLLOUT) != 0);
|
||||||
}
|
}
|
||||||
if (mode == SelectMode.SelectError) {
|
if (mode == SelectMode.SelectError) {
|
||||||
result = Convert.ToInt32(((poll_set.revents & (byte)ZeroTier.Constants.POLLERR) != 0) ||
|
result = Convert.ToInt32(((poll_set.revents
|
||||||
|
& (byte)ZeroTier.Constants.POLLERR) != 0) ||
|
||||||
((poll_set.revents & (byte)ZeroTier.Constants.POLLNVAL) != 0));
|
((poll_set.revents & (byte)ZeroTier.Constants.POLLNVAL) != 0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -430,66 +360,67 @@ namespace ZeroTier.Sockets
|
|||||||
return zts_recv(_fd, bufferPtr, (uint)Buffer.ByteLength(buffer), (int)flags);
|
return zts_recv(_fd, bufferPtr, (uint)Buffer.ByteLength(buffer), (int)flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void _set_timeout(int timeout_ms, int optname)
|
|
||||||
{
|
|
||||||
zts_timeval tv = new zts_timeval();
|
|
||||||
// Convert milliseconds to timeval struct
|
|
||||||
tv.tv_sec = timeout_ms / 1000;
|
|
||||||
tv.tv_usec = (timeout_ms % 1000) * 1000;
|
|
||||||
IntPtr tv_ptr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(zts_timeval)));
|
|
||||||
Marshal.StructureToPtr(tv, tv_ptr, false);
|
|
||||||
ushort option_size = (ushort)Marshal.SizeOf(typeof(zts_sockaddr_in));
|
|
||||||
int err = 0;
|
|
||||||
if ((err = zts_setsockopt(_fd, ZeroTier.Constants.SOL_SOCKET,
|
|
||||||
ZeroTier.Constants.SO_RCVTIMEO, tv_ptr, option_size)) < 0) {
|
|
||||||
throw new ZeroTier.Sockets.SocketException(err, ZeroTier.Core.Node.ErrNo);
|
|
||||||
}
|
|
||||||
Marshal.FreeHGlobal(tv_ptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
private int _get_timeout(int optname)
|
|
||||||
{
|
|
||||||
zts_timeval tv = new zts_timeval();
|
|
||||||
IntPtr tv_ptr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(zts_timeval)));
|
|
||||||
Marshal.StructureToPtr(tv, tv_ptr, false);
|
|
||||||
ushort optlen = (ushort)Marshal.SizeOf(typeof(zts_timeval));
|
|
||||||
GCHandle optlen_gc_handle = GCHandle.Alloc(optlen, GCHandleType.Pinned);
|
|
||||||
IntPtr optlen_ptr = optlen_gc_handle.AddrOfPinnedObject();
|
|
||||||
int err = 0;
|
|
||||||
if ((err = zts_getsockopt(_fd, ZeroTier.Constants.SOL_SOCKET,
|
|
||||||
ZeroTier.Constants.SO_RCVTIMEO, tv_ptr, optlen_ptr)) < 0) {
|
|
||||||
throw new ZeroTier.Sockets.SocketException(err, ZeroTier.Core.Node.ErrNo);
|
|
||||||
}
|
|
||||||
tv = (zts_timeval)Marshal.PtrToStructure(tv_ptr, typeof(zts_timeval));
|
|
||||||
optlen_gc_handle.Free();
|
|
||||||
Marshal.FreeHGlobal(tv_ptr);
|
|
||||||
// Convert timeval struct to milliseconds
|
|
||||||
return (int)((tv.tv_sec * 1000) + (tv.tv_usec / 1000));
|
|
||||||
}
|
|
||||||
|
|
||||||
public int ReceiveTimeout
|
public int ReceiveTimeout
|
||||||
{
|
{
|
||||||
get { return _get_timeout(ZeroTier.Constants.SO_RCVTIMEO); }
|
get { return zts_get_recv_timeout(_fd); }
|
||||||
set { _set_timeout(value, ZeroTier.Constants.SO_RCVTIMEO); }
|
// TODO: microseconds
|
||||||
|
set { zts_set_recv_timeout(_fd, value, 0); }
|
||||||
}
|
}
|
||||||
|
|
||||||
public int SendTimeout
|
public int SendTimeout
|
||||||
{
|
{
|
||||||
get { return _get_timeout(ZeroTier.Constants.SO_SNDTIMEO); }
|
get { return zts_get_send_timeout(_fd); }
|
||||||
set { _set_timeout(value, ZeroTier.Constants.SO_SNDTIMEO); }
|
// TODO: microseconds
|
||||||
|
set { zts_set_send_timeout(_fd, value, 0); }
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TODO
|
public int ConnectTimeout
|
||||||
public int ReceiveBufferSize { get; set; }
|
{
|
||||||
|
get { return _connectTimeout; }
|
||||||
|
set { _connectTimeout = value;}
|
||||||
|
}
|
||||||
|
|
||||||
public int SendBufferSize { get; set; }
|
public int ReceiveBufferSize
|
||||||
|
{
|
||||||
|
get { return zts_get_recv_buf_size(_fd); }
|
||||||
|
set { zts_set_recv_buf_size(_fd, value); }
|
||||||
|
}
|
||||||
|
|
||||||
public short Ttl { get; set; }
|
public int SendBufferSize
|
||||||
|
{
|
||||||
|
get { return zts_get_send_buf_size(_fd); }
|
||||||
|
set { zts_set_send_buf_size(_fd, value); }
|
||||||
|
}
|
||||||
|
|
||||||
public LingerOption LingerState { get; set; }
|
public short Ttl
|
||||||
|
{
|
||||||
|
get { return Convert.ToInt16(zts_get_ttl(_fd)); }
|
||||||
|
set { zts_set_ttl(_fd, value); }
|
||||||
|
}
|
||||||
|
|
||||||
public bool NoDelay { get; set; }
|
public LingerOption LingerState
|
||||||
*/
|
{
|
||||||
|
get {
|
||||||
|
LingerOption lo = new LingerOption(
|
||||||
|
Convert.ToBoolean(zts_get_linger_enabled(_fd)), zts_get_linger_value(_fd));
|
||||||
|
return lo;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
zts_set_linger(_fd, Convert.ToInt32(value.Enabled), value.LingerTime);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool NoDelay
|
||||||
|
{
|
||||||
|
get { return Convert.ToBoolean(zts_get_no_delay(_fd)); }
|
||||||
|
set { zts_set_no_delay(_fd, Convert.ToInt32(value)); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool KeepAlive
|
||||||
|
{
|
||||||
|
get { return Convert.ToBoolean(zts_get_keepalive(_fd)); }
|
||||||
|
set { zts_set_keepalive(_fd, Convert.ToInt32(value)); }
|
||||||
|
}
|
||||||
|
|
||||||
public bool Connected { get { return _isConnected; } }
|
public bool Connected { get { return _isConnected; } }
|
||||||
|
|
||||||
@@ -526,15 +457,24 @@ namespace ZeroTier.Sockets
|
|||||||
[DllImport("libzt", EntryPoint="CSharp_zts_connect")]
|
[DllImport("libzt", EntryPoint="CSharp_zts_connect")]
|
||||||
static extern int zts_connect(int arg1, IntPtr arg2, ushort arg3);
|
static extern int zts_connect(int arg1, IntPtr arg2, ushort arg3);
|
||||||
|
|
||||||
|
[DllImport("libzt", CharSet=CharSet.Ansi, EntryPoint="CSharp_zts_connect_easy")]
|
||||||
|
static extern int zts_connect_easy(int arg1, int arg2, string arg3, ushort arg4, int arg5);
|
||||||
|
|
||||||
[DllImport("libzt", EntryPoint="CSharp_zts_bind")]
|
[DllImport("libzt", EntryPoint="CSharp_zts_bind")]
|
||||||
static extern int zts_bind(int arg1, IntPtr arg2, ushort arg3);
|
static extern int zts_bind(int arg1, IntPtr arg2, ushort arg3);
|
||||||
|
|
||||||
|
[DllImport("libzt", CharSet=CharSet.Ansi, EntryPoint="CSharp_zts_bind_easy")]
|
||||||
|
static extern int zts_bind_easy(int arg1, int arg2, string arg3, ushort arg4);
|
||||||
|
|
||||||
[DllImport("libzt", EntryPoint="CSharp_zts_listen")]
|
[DllImport("libzt", EntryPoint="CSharp_zts_listen")]
|
||||||
static extern int zts_listen(int arg1, int arg2);
|
static extern int zts_listen(int arg1, int arg2);
|
||||||
|
|
||||||
[DllImport("libzt", EntryPoint="CSharp_zts_accept")]
|
[DllImport("libzt", EntryPoint="CSharp_zts_accept")]
|
||||||
static extern int zts_accept(int arg1, IntPtr arg2, IntPtr arg3);
|
static extern int zts_accept(int arg1, IntPtr arg2, IntPtr arg3);
|
||||||
|
|
||||||
|
[DllImport("libzt", CharSet=CharSet.Ansi, EntryPoint="CSharp_zts_accept_easy")]
|
||||||
|
static extern int zts_accept_easy(int arg1, IntPtr remoteAddrStr, int arg2, ref int arg3);
|
||||||
|
|
||||||
[DllImport("libzt", EntryPoint="CSharp_zts_setsockopt")]
|
[DllImport("libzt", EntryPoint="CSharp_zts_setsockopt")]
|
||||||
static extern int zts_setsockopt(int arg1, int arg2, int arg3, IntPtr arg4, ushort arg5);
|
static extern int zts_setsockopt(int arg1, int arg2, int arg3, IntPtr arg4, ushort arg5);
|
||||||
|
|
||||||
@@ -592,6 +532,69 @@ namespace ZeroTier.Sockets
|
|||||||
[DllImport("libzt", EntryPoint="CSharp_zts_shutdown")]
|
[DllImport("libzt", EntryPoint="CSharp_zts_shutdown")]
|
||||||
static extern int zts_shutdown(int arg1, int arg2);
|
static extern int zts_shutdown(int arg1, int arg2);
|
||||||
|
|
||||||
|
[DllImport("libzt", EntryPoint="CSharp_zts_set_no_delay")]
|
||||||
|
static extern int zts_set_no_delay(int fd, int enabled);
|
||||||
|
|
||||||
|
[DllImport("libzt", EntryPoint="CSharp_zts_get_no_delay")]
|
||||||
|
static extern int zts_get_no_delay(int fd);
|
||||||
|
|
||||||
|
[DllImport("libzt", EntryPoint="CSharp_zts_set_linger")]
|
||||||
|
static extern int zts_set_linger(int fd, int enabled, int value);
|
||||||
|
|
||||||
|
[DllImport("libzt", EntryPoint="CSharp_zts_get_linger_enabled")]
|
||||||
|
static extern int zts_get_linger_enabled(int fd);
|
||||||
|
|
||||||
|
[DllImport("libzt", EntryPoint="CSharp_zts_get_linger_value")]
|
||||||
|
static extern int zts_get_linger_value(int fd);
|
||||||
|
|
||||||
|
[DllImport("libzt", EntryPoint="CSharp_zts_set_reuse_addr")]
|
||||||
|
static extern int zts_set_reuse_addr(int fd, int enabled);
|
||||||
|
|
||||||
|
[DllImport("libzt", EntryPoint="CSharp_zts_get_reuse_addr")]
|
||||||
|
static extern int zts_get_reuse_addr(int fd);
|
||||||
|
|
||||||
|
[DllImport("libzt", EntryPoint="CSharp_zts_set_recv_timeout")]
|
||||||
|
static extern int zts_set_recv_timeout(int fd, int seconds, int microseconds);
|
||||||
|
|
||||||
|
[DllImport("libzt", EntryPoint="CSharp_zts_get_recv_timeout")]
|
||||||
|
static extern int zts_get_recv_timeout(int fd);
|
||||||
|
|
||||||
|
[DllImport("libzt", EntryPoint="CSharp_zts_set_send_timeout")]
|
||||||
|
static extern int zts_set_send_timeout(int fd, int seconds, int microseconds);
|
||||||
|
|
||||||
|
[DllImport("libzt", EntryPoint="CSharp_zts_get_send_timeout")]
|
||||||
|
static extern int zts_get_send_timeout(int fd);
|
||||||
|
|
||||||
|
[DllImport("libzt", EntryPoint="CSharp_zts_set_send_buf_size")]
|
||||||
|
static extern int zts_set_send_buf_size(int fd, int size);
|
||||||
|
|
||||||
|
[DllImport("libzt", EntryPoint="CSharp_zts_get_send_buf_size")]
|
||||||
|
static extern int zts_get_send_buf_size(int fd);
|
||||||
|
|
||||||
|
[DllImport("libzt", EntryPoint="CSharp_zts_set_recv_buf_size")]
|
||||||
|
static extern int zts_set_recv_buf_size(int fd, int size);
|
||||||
|
|
||||||
|
[DllImport("libzt", EntryPoint="CSharp_zts_get_recv_buf_size")]
|
||||||
|
static extern int zts_get_recv_buf_size(int fd);
|
||||||
|
|
||||||
|
[DllImport("libzt", EntryPoint="CSharp_zts_set_ttl")]
|
||||||
|
static extern int zts_set_ttl(int fd, int ttl);
|
||||||
|
|
||||||
|
[DllImport("libzt", EntryPoint="CSharp_zts_get_ttl")]
|
||||||
|
static extern int zts_get_ttl(int fd);
|
||||||
|
|
||||||
|
[DllImport("libzt", EntryPoint="CSharp_zts_set_blocking")]
|
||||||
|
static extern int zts_set_blocking(int fd, int enabled);
|
||||||
|
|
||||||
|
[DllImport("libzt", EntryPoint="CSharp_zts_get_blocking")]
|
||||||
|
static extern int zts_get_blocking(int fd);
|
||||||
|
|
||||||
|
[DllImport("libzt", EntryPoint="CSharp_zts_set_keepalive")]
|
||||||
|
static extern int zts_set_keepalive(int fd, int enabled);
|
||||||
|
|
||||||
|
[DllImport("libzt", EntryPoint="CSharp_zts_get_keepalive")]
|
||||||
|
static extern int zts_get_keepalive(int fd);
|
||||||
|
|
||||||
[DllImport("libzt", EntryPoint="CSharp_zts_add_dns_nameserver")]
|
[DllImport("libzt", EntryPoint="CSharp_zts_add_dns_nameserver")]
|
||||||
static extern int zts_add_dns_nameserver(IntPtr arg1);
|
static extern int zts_add_dns_nameserver(IntPtr arg1);
|
||||||
|
|
||||||
|
|||||||
@@ -386,7 +386,7 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
SWIGEXPORT void SWIGSTDCALL CSharp_zts_errno_set(int jarg1) {
|
SWIGEXPORT void SWIGSTDCALL CSharp_zts_errno_set(int jarg1) {
|
||||||
int arg1 ;
|
int arg1;
|
||||||
|
|
||||||
arg1 = (int)jarg1;
|
arg1 = (int)jarg1;
|
||||||
zts_errno = arg1;
|
zts_errno = arg1;
|
||||||
@@ -394,7 +394,7 @@ SWIGEXPORT void SWIGSTDCALL CSharp_zts_errno_set(int jarg1) {
|
|||||||
|
|
||||||
|
|
||||||
SWIGEXPORT int SWIGSTDCALL CSharp_zts_errno_get() {
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_errno_get() {
|
||||||
int jresult ;
|
int jresult;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
result = (int)zts_errno;
|
result = (int)zts_errno;
|
||||||
@@ -403,8 +403,8 @@ SWIGEXPORT int SWIGSTDCALL CSharp_zts_errno_get() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
SWIGEXPORT int SWIGSTDCALL CSharp_zts_allow_network_caching(unsigned char jarg1) {
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_allow_network_caching(unsigned char jarg1) {
|
||||||
int jresult ;
|
int jresult;
|
||||||
uint8_t arg1 ;
|
uint8_t arg1;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
arg1 = (uint8_t)jarg1;
|
arg1 = (uint8_t)jarg1;
|
||||||
@@ -415,8 +415,8 @@ SWIGEXPORT int SWIGSTDCALL CSharp_zts_allow_network_caching(unsigned char jarg1)
|
|||||||
|
|
||||||
|
|
||||||
SWIGEXPORT int SWIGSTDCALL CSharp_zts_allow_peer_caching(unsigned char jarg1) {
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_allow_peer_caching(unsigned char jarg1) {
|
||||||
int jresult ;
|
int jresult;
|
||||||
uint8_t arg1 ;
|
uint8_t arg1;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
arg1 = (uint8_t)jarg1;
|
arg1 = (uint8_t)jarg1;
|
||||||
@@ -427,8 +427,8 @@ SWIGEXPORT int SWIGSTDCALL CSharp_zts_allow_peer_caching(unsigned char jarg1) {
|
|||||||
|
|
||||||
|
|
||||||
SWIGEXPORT int SWIGSTDCALL CSharp_zts_allow_local_conf(unsigned char jarg1) {
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_allow_local_conf(unsigned char jarg1) {
|
||||||
int jresult ;
|
int jresult;
|
||||||
uint8_t arg1 ;
|
uint8_t arg1;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
arg1 = (uint8_t)jarg1;
|
arg1 = (uint8_t)jarg1;
|
||||||
@@ -439,10 +439,10 @@ SWIGEXPORT int SWIGSTDCALL CSharp_zts_allow_local_conf(unsigned char jarg1) {
|
|||||||
|
|
||||||
|
|
||||||
SWIGEXPORT int SWIGSTDCALL CSharp_zts_start(char * jarg1, void * jarg2, unsigned short jarg3) {
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_start(char * jarg1, void * jarg2, unsigned short jarg3) {
|
||||||
int jresult ;
|
int jresult;
|
||||||
char *arg1 = (char *) 0 ;
|
char *arg1 = (char *) 0;
|
||||||
CppCallback arg2 = (CppCallback) 0 ;
|
CppCallback arg2 = (CppCallback) 0;
|
||||||
uint16_t arg3 ;
|
uint16_t arg3;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
arg1 = (char *)jarg1;
|
arg1 = (char *)jarg1;
|
||||||
@@ -455,7 +455,7 @@ SWIGEXPORT int SWIGSTDCALL CSharp_zts_start(char * jarg1, void * jarg2, unsigned
|
|||||||
|
|
||||||
|
|
||||||
SWIGEXPORT int SWIGSTDCALL CSharp_zts_stop() {
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_stop() {
|
||||||
int jresult ;
|
int jresult;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
result = (int)zts_stop();
|
result = (int)zts_stop();
|
||||||
@@ -465,7 +465,7 @@ SWIGEXPORT int SWIGSTDCALL CSharp_zts_stop() {
|
|||||||
|
|
||||||
|
|
||||||
SWIGEXPORT int SWIGSTDCALL CSharp_zts_restart() {
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_restart() {
|
||||||
int jresult ;
|
int jresult;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
result = (int)zts_restart();
|
result = (int)zts_restart();
|
||||||
@@ -475,7 +475,7 @@ SWIGEXPORT int SWIGSTDCALL CSharp_zts_restart() {
|
|||||||
|
|
||||||
|
|
||||||
SWIGEXPORT int SWIGSTDCALL CSharp_zts_free() {
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_free() {
|
||||||
int jresult ;
|
int jresult;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
result = (int)zts_free();
|
result = (int)zts_free();
|
||||||
@@ -485,8 +485,8 @@ SWIGEXPORT int SWIGSTDCALL CSharp_zts_free() {
|
|||||||
|
|
||||||
|
|
||||||
SWIGEXPORT int SWIGSTDCALL CSharp_zts_join(unsigned long long jarg1) {
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_join(unsigned long long jarg1) {
|
||||||
int jresult ;
|
int jresult;
|
||||||
uint64_t arg1 ;
|
uint64_t arg1;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
arg1 = (uint64_t)jarg1;
|
arg1 = (uint64_t)jarg1;
|
||||||
@@ -497,8 +497,8 @@ SWIGEXPORT int SWIGSTDCALL CSharp_zts_join(unsigned long long jarg1) {
|
|||||||
|
|
||||||
|
|
||||||
SWIGEXPORT int SWIGSTDCALL CSharp_zts_leave(unsigned long long jarg1) {
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_leave(unsigned long long jarg1) {
|
||||||
int jresult ;
|
int jresult;
|
||||||
uint64_t arg1 ;
|
uint64_t arg1;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
arg1 = (uint64_t)jarg1;
|
arg1 = (uint64_t)jarg1;
|
||||||
@@ -509,9 +509,9 @@ SWIGEXPORT int SWIGSTDCALL CSharp_zts_leave(unsigned long long jarg1) {
|
|||||||
|
|
||||||
|
|
||||||
SWIGEXPORT int SWIGSTDCALL CSharp_zts_orbit(unsigned long long jarg1, unsigned long long jarg2) {
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_orbit(unsigned long long jarg1, unsigned long long jarg2) {
|
||||||
int jresult ;
|
int jresult;
|
||||||
uint64_t arg1 ;
|
uint64_t arg1;
|
||||||
uint64_t arg2 ;
|
uint64_t arg2;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
arg1 = (uint64_t)jarg1;
|
arg1 = (uint64_t)jarg1;
|
||||||
@@ -523,8 +523,8 @@ SWIGEXPORT int SWIGSTDCALL CSharp_zts_orbit(unsigned long long jarg1, unsigned l
|
|||||||
|
|
||||||
|
|
||||||
SWIGEXPORT int SWIGSTDCALL CSharp_zts_deorbit(unsigned long long jarg1) {
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_deorbit(unsigned long long jarg1) {
|
||||||
int jresult ;
|
int jresult;
|
||||||
uint64_t arg1 ;
|
uint64_t arg1;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
arg1 = (uint64_t)jarg1;
|
arg1 = (uint64_t)jarg1;
|
||||||
@@ -535,10 +535,10 @@ SWIGEXPORT int SWIGSTDCALL CSharp_zts_deorbit(unsigned long long jarg1) {
|
|||||||
|
|
||||||
|
|
||||||
SWIGEXPORT int SWIGSTDCALL CSharp_zts_get_6plane_addr(void * jarg1, unsigned long long jarg2, unsigned long long jarg3) {
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_get_6plane_addr(void * jarg1, unsigned long long jarg2, unsigned long long jarg3) {
|
||||||
int jresult ;
|
int jresult;
|
||||||
zts_sockaddr_storage *arg1 = (zts_sockaddr_storage *) 0 ;
|
zts_sockaddr_storage *arg1 = (zts_sockaddr_storage *) 0;
|
||||||
uint64_t arg2 ;
|
uint64_t arg2;
|
||||||
uint64_t arg3 ;
|
uint64_t arg3;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
arg1 = (zts_sockaddr_storage *)jarg1;
|
arg1 = (zts_sockaddr_storage *)jarg1;
|
||||||
@@ -551,10 +551,10 @@ SWIGEXPORT int SWIGSTDCALL CSharp_zts_get_6plane_addr(void * jarg1, unsigned lon
|
|||||||
|
|
||||||
|
|
||||||
SWIGEXPORT int SWIGSTDCALL CSharp_zts_get_rfc4193_addr(void * jarg1, unsigned long long jarg2, unsigned long long jarg3) {
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_get_rfc4193_addr(void * jarg1, unsigned long long jarg2, unsigned long long jarg3) {
|
||||||
int jresult ;
|
int jresult;
|
||||||
zts_sockaddr_storage *arg1 = (zts_sockaddr_storage *) 0 ;
|
zts_sockaddr_storage *arg1 = (zts_sockaddr_storage *) 0;
|
||||||
uint64_t arg2 ;
|
uint64_t arg2;
|
||||||
uint64_t arg3 ;
|
uint64_t arg3;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
arg1 = (zts_sockaddr_storage *)jarg1;
|
arg1 = (zts_sockaddr_storage *)jarg1;
|
||||||
@@ -567,9 +567,9 @@ SWIGEXPORT int SWIGSTDCALL CSharp_zts_get_rfc4193_addr(void * jarg1, unsigned lo
|
|||||||
|
|
||||||
|
|
||||||
SWIGEXPORT unsigned long long SWIGSTDCALL CSharp_zts_generate_adhoc_nwid_from_range(unsigned short jarg1, unsigned short jarg2) {
|
SWIGEXPORT unsigned long long SWIGSTDCALL CSharp_zts_generate_adhoc_nwid_from_range(unsigned short jarg1, unsigned short jarg2) {
|
||||||
unsigned long long jresult ;
|
unsigned long long jresult;
|
||||||
uint16_t arg1 ;
|
uint16_t arg1;
|
||||||
uint16_t arg2 ;
|
uint16_t arg2;
|
||||||
uint64_t result;
|
uint64_t result;
|
||||||
|
|
||||||
arg1 = (uint16_t)jarg1;
|
arg1 = (uint16_t)jarg1;
|
||||||
@@ -581,7 +581,7 @@ SWIGEXPORT unsigned long long SWIGSTDCALL CSharp_zts_generate_adhoc_nwid_from_ra
|
|||||||
|
|
||||||
|
|
||||||
SWIGEXPORT void SWIGSTDCALL CSharp_zts_delay_ms(long jarg1) {
|
SWIGEXPORT void SWIGSTDCALL CSharp_zts_delay_ms(long jarg1) {
|
||||||
long arg1 ;
|
long arg1;
|
||||||
|
|
||||||
arg1 = (long)jarg1;
|
arg1 = (long)jarg1;
|
||||||
zts_delay_ms(arg1);
|
zts_delay_ms(arg1);
|
||||||
@@ -589,8 +589,8 @@ SWIGEXPORT void SWIGSTDCALL CSharp_zts_delay_ms(long jarg1) {
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
SWIGEXPORT int SWIGSTDCALL CSharp_zts_get_all_stats(void * jarg1) {
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_get_all_stats(void * jarg1) {
|
||||||
int jresult ;
|
int jresult;
|
||||||
zts_stats *arg1 = (zts_stats *) 0 ;
|
zts_stats *arg1 = (zts_stats *) 0;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
arg1 = (zts_stats *)jarg1;
|
arg1 = (zts_stats *)jarg1;
|
||||||
@@ -601,9 +601,9 @@ SWIGEXPORT int SWIGSTDCALL CSharp_zts_get_all_stats(void * jarg1) {
|
|||||||
|
|
||||||
|
|
||||||
SWIGEXPORT int SWIGSTDCALL CSharp_zts_get_protocol_stats(int jarg1, void * jarg2) {
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_get_protocol_stats(int jarg1, void * jarg2) {
|
||||||
int jresult ;
|
int jresult;
|
||||||
int arg1 ;
|
int arg1;
|
||||||
void *arg2 = (void *) 0 ;
|
void *arg2 = (void *) 0;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
arg1 = (int)jarg1;
|
arg1 = (int)jarg1;
|
||||||
@@ -615,10 +615,10 @@ SWIGEXPORT int SWIGSTDCALL CSharp_zts_get_protocol_stats(int jarg1, void * jarg2
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
SWIGEXPORT int SWIGSTDCALL CSharp_zts_socket(int jarg1, int jarg2, int jarg3) {
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_socket(int jarg1, int jarg2, int jarg3) {
|
||||||
int jresult ;
|
int jresult;
|
||||||
int arg1 ;
|
int arg1;
|
||||||
int arg2 ;
|
int arg2;
|
||||||
int arg3 ;
|
int arg3;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
arg1 = (int)jarg1;
|
arg1 = (int)jarg1;
|
||||||
@@ -631,10 +631,10 @@ SWIGEXPORT int SWIGSTDCALL CSharp_zts_socket(int jarg1, int jarg2, int jarg3) {
|
|||||||
|
|
||||||
|
|
||||||
SWIGEXPORT int SWIGSTDCALL CSharp_zts_connect(int jarg1, zts_sockaddr* jarg2, unsigned short jarg3) {
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_connect(int jarg1, zts_sockaddr* jarg2, unsigned short jarg3) {
|
||||||
int jresult ;
|
int jresult;
|
||||||
int arg1 ;
|
int arg1;
|
||||||
zts_sockaddr *arg2 = (zts_sockaddr *) 0 ;
|
zts_sockaddr *arg2 = (zts_sockaddr *) 0;
|
||||||
zts_socklen_t arg3 ;
|
zts_socklen_t arg3;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
arg1 = (int)jarg1;
|
arg1 = (int)jarg1;
|
||||||
@@ -646,11 +646,20 @@ SWIGEXPORT int SWIGSTDCALL CSharp_zts_connect(int jarg1, zts_sockaddr* jarg2, un
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_connect_easy(int jarg1, int jarg2, char* jarg3, unsigned short jarg4, int jarg5) {
|
||||||
|
int jresult;
|
||||||
|
int result;
|
||||||
|
result = (int)zts_connect_easy(jarg1,jarg2,jarg3,jarg4,jarg5);
|
||||||
|
jresult = result;
|
||||||
|
return jresult;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
SWIGEXPORT int SWIGSTDCALL CSharp_zts_bind(int jarg1, zts_sockaddr* jarg2, unsigned short jarg3) {
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_bind(int jarg1, zts_sockaddr* jarg2, unsigned short jarg3) {
|
||||||
int jresult ;
|
int jresult;
|
||||||
int arg1 ;
|
int arg1;
|
||||||
zts_sockaddr *arg2 = (zts_sockaddr *) 0 ;
|
zts_sockaddr *arg2 = (zts_sockaddr *) 0;
|
||||||
zts_socklen_t arg3 ;
|
zts_socklen_t arg3;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
arg1 = (int)jarg1;
|
arg1 = (int)jarg1;
|
||||||
@@ -662,10 +671,19 @@ SWIGEXPORT int SWIGSTDCALL CSharp_zts_bind(int jarg1, zts_sockaddr* jarg2, unsig
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_bind_easy(int jarg1, int jarg2, char* jarg3, unsigned short jarg4) {
|
||||||
|
int jresult;
|
||||||
|
int result;
|
||||||
|
result = (int)zts_bind_easy(jarg1,jarg2,jarg3,jarg4);
|
||||||
|
jresult = result;
|
||||||
|
return jresult;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
SWIGEXPORT int SWIGSTDCALL CSharp_zts_listen(int jarg1, int jarg2) {
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_listen(int jarg1, int jarg2) {
|
||||||
int jresult ;
|
int jresult;
|
||||||
int arg1 ;
|
int arg1;
|
||||||
int arg2 ;
|
int arg2;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
arg1 = (int)jarg1;
|
arg1 = (int)jarg1;
|
||||||
@@ -677,10 +695,10 @@ SWIGEXPORT int SWIGSTDCALL CSharp_zts_listen(int jarg1, int jarg2) {
|
|||||||
|
|
||||||
|
|
||||||
SWIGEXPORT int SWIGSTDCALL CSharp_zts_accept(int jarg1, zts_sockaddr* jarg2, int * jarg3) {
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_accept(int jarg1, zts_sockaddr* jarg2, int * jarg3) {
|
||||||
int jresult ;
|
int jresult;
|
||||||
int arg1 ;
|
int arg1;
|
||||||
zts_sockaddr *arg2 = (zts_sockaddr *) 0 ;
|
zts_sockaddr *arg2 = (zts_sockaddr *) 0;
|
||||||
zts_socklen_t *arg3 = (zts_socklen_t *) 0 ;
|
zts_socklen_t *arg3 = (zts_socklen_t *) 0;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
arg1 = (int)jarg1;
|
arg1 = (int)jarg1;
|
||||||
@@ -691,14 +709,18 @@ SWIGEXPORT int SWIGSTDCALL CSharp_zts_accept(int jarg1, zts_sockaddr* jarg2, int
|
|||||||
return jresult;
|
return jresult;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_accept_easy(int jarg1, char* remoteAddrStr, int jarg2, int *jarg3)
|
||||||
|
{
|
||||||
|
return zts_accept_easy(jarg1, remoteAddrStr, jarg2, jarg3);
|
||||||
|
}
|
||||||
|
|
||||||
SWIGEXPORT int SWIGSTDCALL CSharp_zts_setsockopt(int jarg1, int jarg2, int jarg3, void * jarg4, unsigned short jarg5) {
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_setsockopt(int jarg1, int jarg2, int jarg3, void * jarg4, unsigned short jarg5) {
|
||||||
int jresult ;
|
int jresult;
|
||||||
int arg1 ;
|
int arg1;
|
||||||
int arg2 ;
|
int arg2;
|
||||||
int arg3 ;
|
int arg3;
|
||||||
void *arg4 = (void *) 0 ;
|
void *arg4 = (void *) 0;
|
||||||
zts_socklen_t arg5 ;
|
zts_socklen_t arg5;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
arg1 = (int)jarg1;
|
arg1 = (int)jarg1;
|
||||||
@@ -713,12 +735,12 @@ SWIGEXPORT int SWIGSTDCALL CSharp_zts_setsockopt(int jarg1, int jarg2, int jarg3
|
|||||||
|
|
||||||
|
|
||||||
SWIGEXPORT int SWIGSTDCALL CSharp_zts_getsockopt(int jarg1, int jarg2, int jarg3, void * jarg4, void * jarg5) {
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_getsockopt(int jarg1, int jarg2, int jarg3, void * jarg4, void * jarg5) {
|
||||||
int jresult ;
|
int jresult;
|
||||||
int arg1 ;
|
int arg1;
|
||||||
int arg2 ;
|
int arg2;
|
||||||
int arg3 ;
|
int arg3;
|
||||||
void *arg4 = (void *) 0 ;
|
void *arg4 = (void *) 0;
|
||||||
zts_socklen_t *arg5 = (zts_socklen_t *) 0 ;
|
zts_socklen_t *arg5 = (zts_socklen_t *) 0;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
arg1 = (int)jarg1;
|
arg1 = (int)jarg1;
|
||||||
@@ -733,10 +755,10 @@ SWIGEXPORT int SWIGSTDCALL CSharp_zts_getsockopt(int jarg1, int jarg2, int jarg3
|
|||||||
|
|
||||||
|
|
||||||
SWIGEXPORT int SWIGSTDCALL CSharp_zts_getsockname(int jarg1, zts_sockaddr* jarg2, void * jarg3) {
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_getsockname(int jarg1, zts_sockaddr* jarg2, void * jarg3) {
|
||||||
int jresult ;
|
int jresult;
|
||||||
int arg1 ;
|
int arg1;
|
||||||
zts_sockaddr *arg2 = (zts_sockaddr *) 0 ;
|
zts_sockaddr *arg2 = (zts_sockaddr *) 0;
|
||||||
zts_socklen_t *arg3 = (zts_socklen_t *) 0 ;
|
zts_socklen_t *arg3 = (zts_socklen_t *) 0;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
arg1 = (int)jarg1;
|
arg1 = (int)jarg1;
|
||||||
@@ -749,10 +771,10 @@ SWIGEXPORT int SWIGSTDCALL CSharp_zts_getsockname(int jarg1, zts_sockaddr* jarg2
|
|||||||
|
|
||||||
|
|
||||||
SWIGEXPORT int SWIGSTDCALL CSharp_zts_getpeername(int jarg1, zts_sockaddr* jarg2, void * jarg3) {
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_getpeername(int jarg1, zts_sockaddr* jarg2, void * jarg3) {
|
||||||
int jresult ;
|
int jresult;
|
||||||
int arg1 ;
|
int arg1;
|
||||||
zts_sockaddr *arg2 = (zts_sockaddr *) 0 ;
|
zts_sockaddr *arg2 = (zts_sockaddr *) 0;
|
||||||
zts_socklen_t *arg3 = (zts_socklen_t *) 0 ;
|
zts_socklen_t *arg3 = (zts_socklen_t *) 0;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
arg1 = (int)jarg1;
|
arg1 = (int)jarg1;
|
||||||
@@ -765,8 +787,8 @@ SWIGEXPORT int SWIGSTDCALL CSharp_zts_getpeername(int jarg1, zts_sockaddr* jarg2
|
|||||||
|
|
||||||
|
|
||||||
SWIGEXPORT int SWIGSTDCALL CSharp_zts_close(int jarg1) {
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_close(int jarg1) {
|
||||||
int jresult ;
|
int jresult;
|
||||||
int arg1 ;
|
int arg1;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
arg1 = (int)jarg1;
|
arg1 = (int)jarg1;
|
||||||
@@ -777,12 +799,12 @@ SWIGEXPORT int SWIGSTDCALL CSharp_zts_close(int jarg1) {
|
|||||||
|
|
||||||
|
|
||||||
SWIGEXPORT int SWIGSTDCALL CSharp_zts_select(int jarg1, void * jarg2, void * jarg3, void * jarg4, void * jarg5) {
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_select(int jarg1, void * jarg2, void * jarg3, void * jarg4, void * jarg5) {
|
||||||
int jresult ;
|
int jresult;
|
||||||
int arg1 ;
|
int arg1;
|
||||||
zts_fd_set *arg2 = (zts_fd_set *) 0 ;
|
zts_fd_set *arg2 = (zts_fd_set *) 0;
|
||||||
zts_fd_set *arg3 = (zts_fd_set *) 0 ;
|
zts_fd_set *arg3 = (zts_fd_set *) 0;
|
||||||
zts_fd_set *arg4 = (zts_fd_set *) 0 ;
|
zts_fd_set *arg4 = (zts_fd_set *) 0;
|
||||||
zts_timeval *arg5 = (zts_timeval *) 0 ;
|
zts_timeval *arg5 = (zts_timeval *) 0;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
arg1 = (int)jarg1;
|
arg1 = (int)jarg1;
|
||||||
@@ -797,10 +819,10 @@ SWIGEXPORT int SWIGSTDCALL CSharp_zts_select(int jarg1, void * jarg2, void * jar
|
|||||||
|
|
||||||
|
|
||||||
SWIGEXPORT int SWIGSTDCALL CSharp_zts_fcntl(int jarg1, int jarg2, int jarg3) {
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_fcntl(int jarg1, int jarg2, int jarg3) {
|
||||||
int jresult ;
|
int jresult;
|
||||||
int arg1 ;
|
int arg1;
|
||||||
int arg2 ;
|
int arg2;
|
||||||
int arg3 ;
|
int arg3;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
arg1 = (int)jarg1;
|
arg1 = (int)jarg1;
|
||||||
@@ -813,10 +835,10 @@ SWIGEXPORT int SWIGSTDCALL CSharp_zts_fcntl(int jarg1, int jarg2, int jarg3) {
|
|||||||
|
|
||||||
|
|
||||||
SWIGEXPORT int SWIGSTDCALL CSharp_zts_poll(void * jarg1, unsigned int jarg2, int jarg3) {
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_poll(void * jarg1, unsigned int jarg2, int jarg3) {
|
||||||
int jresult ;
|
int jresult;
|
||||||
zts_pollfd *arg1 = (zts_pollfd *) 0 ;
|
zts_pollfd *arg1 = (zts_pollfd *) 0;
|
||||||
zts_nfds_t arg2 ;
|
zts_nfds_t arg2;
|
||||||
int arg3 ;
|
int arg3;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
arg1 = (zts_pollfd *)jarg1;
|
arg1 = (zts_pollfd *)jarg1;
|
||||||
@@ -829,10 +851,10 @@ SWIGEXPORT int SWIGSTDCALL CSharp_zts_poll(void * jarg1, unsigned int jarg2, int
|
|||||||
|
|
||||||
|
|
||||||
SWIGEXPORT int SWIGSTDCALL CSharp_zts_ioctl(int jarg1, unsigned long jarg2, void * jarg3) {
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_ioctl(int jarg1, unsigned long jarg2, void * jarg3) {
|
||||||
int jresult ;
|
int jresult;
|
||||||
int arg1 ;
|
int arg1;
|
||||||
unsigned long arg2 ;
|
unsigned long arg2;
|
||||||
void *arg3 = (void *) 0 ;
|
void *arg3 = (void *) 0;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
arg1 = (int)jarg1;
|
arg1 = (int)jarg1;
|
||||||
@@ -843,13 +865,11 @@ SWIGEXPORT int SWIGSTDCALL CSharp_zts_ioctl(int jarg1, unsigned long jarg2, void
|
|||||||
return jresult;
|
return jresult;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_send(int jarg1, void * jarg2, unsigned long jarg3, int jarg4) {
|
||||||
SWIGEXPORT void * SWIGSTDCALL CSharp_zts_send(int jarg1, void * jarg2, unsigned long jarg3, int jarg4) {
|
int arg1;
|
||||||
void * jresult ;
|
void *arg2 = (void *) 0;
|
||||||
int arg1 ;
|
size_t arg3;
|
||||||
void *arg2 = (void *) 0 ;
|
int arg4;
|
||||||
size_t arg3 ;
|
|
||||||
int arg4 ;
|
|
||||||
ssize_t result;
|
ssize_t result;
|
||||||
|
|
||||||
arg1 = (int)jarg1;
|
arg1 = (int)jarg1;
|
||||||
@@ -857,19 +877,17 @@ SWIGEXPORT void * SWIGSTDCALL CSharp_zts_send(int jarg1, void * jarg2, unsigned
|
|||||||
arg3 = (size_t)jarg3;
|
arg3 = (size_t)jarg3;
|
||||||
arg4 = (int)jarg4;
|
arg4 = (int)jarg4;
|
||||||
result = zts_send(arg1,(void const *)arg2,arg3,arg4);
|
result = zts_send(arg1,(void const *)arg2,arg3,arg4);
|
||||||
jresult = new ssize_t((const ssize_t &)result);
|
return result;
|
||||||
return jresult;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
SWIGEXPORT void * SWIGSTDCALL CSharp_zts_sendto(int jarg1, void * jarg2, unsigned long jarg3, int jarg4, zts_sockaddr* jarg5, unsigned short jarg6) {
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_sendto(int jarg1, void * jarg2, unsigned long jarg3, int jarg4, zts_sockaddr* jarg5, unsigned short jarg6) {
|
||||||
void * jresult ;
|
int arg1;
|
||||||
int arg1 ;
|
void *arg2 = (void *) 0;
|
||||||
void *arg2 = (void *) 0 ;
|
size_t arg3;
|
||||||
size_t arg3 ;
|
int arg4;
|
||||||
int arg4 ;
|
zts_sockaddr *arg5 = (zts_sockaddr *) 0;
|
||||||
zts_sockaddr *arg5 = (zts_sockaddr *) 0 ;
|
zts_socklen_t arg6;
|
||||||
zts_socklen_t arg6 ;
|
|
||||||
ssize_t result;
|
ssize_t result;
|
||||||
|
|
||||||
arg1 = (int)jarg1;
|
arg1 = (int)jarg1;
|
||||||
@@ -879,33 +897,29 @@ SWIGEXPORT void * SWIGSTDCALL CSharp_zts_sendto(int jarg1, void * jarg2, unsigne
|
|||||||
arg5 = (zts_sockaddr *)jarg5;
|
arg5 = (zts_sockaddr *)jarg5;
|
||||||
arg6 = (zts_socklen_t)jarg6;
|
arg6 = (zts_socklen_t)jarg6;
|
||||||
result = zts_sendto(arg1,(void const *)arg2,arg3,arg4,(zts_sockaddr const *)arg5,arg6);
|
result = zts_sendto(arg1,(void const *)arg2,arg3,arg4,(zts_sockaddr const *)arg5,arg6);
|
||||||
jresult = new ssize_t((const ssize_t &)result);
|
return result;
|
||||||
return jresult;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
SWIGEXPORT void * SWIGSTDCALL CSharp_zts_sendmsg(int jarg1, void * jarg2, int jarg3) {
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_sendmsg(int jarg1, void * jarg2, int jarg3) {
|
||||||
void * jresult ;
|
int arg1;
|
||||||
int arg1 ;
|
zts_msghdr *arg2 = (zts_msghdr *) 0;
|
||||||
zts_msghdr *arg2 = (zts_msghdr *) 0 ;
|
int arg3;
|
||||||
int arg3 ;
|
|
||||||
ssize_t result;
|
ssize_t result;
|
||||||
|
|
||||||
arg1 = (int)jarg1;
|
arg1 = (int)jarg1;
|
||||||
arg2 = (zts_msghdr *)jarg2;
|
arg2 = (zts_msghdr *)jarg2;
|
||||||
arg3 = (int)jarg3;
|
arg3 = (int)jarg3;
|
||||||
result = zts_sendmsg(arg1,(zts_msghdr const *)arg2,arg3);
|
result = zts_sendmsg(arg1,(zts_msghdr const *)arg2,arg3);
|
||||||
jresult = new ssize_t((const ssize_t &)result);
|
return result;
|
||||||
return jresult;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
SWIGEXPORT int SWIGSTDCALL CSharp_zts_recv(int jarg1, void * jarg2, unsigned long jarg3, int jarg4) {
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_recv(int jarg1, void * jarg2, unsigned long jarg3, int jarg4) {
|
||||||
void * jresult ;
|
int arg1;
|
||||||
int arg1 ;
|
void *arg2 = (void *) 0;
|
||||||
void *arg2 = (void *) 0 ;
|
size_t arg3;
|
||||||
size_t arg3 ;
|
int arg4;
|
||||||
int arg4 ;
|
|
||||||
ssize_t result;
|
ssize_t result;
|
||||||
|
|
||||||
arg1 = (int)jarg1;
|
arg1 = (int)jarg1;
|
||||||
@@ -917,14 +931,13 @@ SWIGEXPORT int SWIGSTDCALL CSharp_zts_recv(int jarg1, void * jarg2, unsigned lon
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
SWIGEXPORT void * SWIGSTDCALL CSharp_zts_recvfrom(int jarg1, void * jarg2, unsigned long jarg3, int jarg4, zts_sockaddr* jarg5, void * jarg6) {
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_recvfrom(int jarg1, void * jarg2, unsigned long jarg3, int jarg4, zts_sockaddr* jarg5, void * jarg6) {
|
||||||
void * jresult ;
|
int arg1;
|
||||||
int arg1 ;
|
void *arg2 = (void *) 0;
|
||||||
void *arg2 = (void *) 0 ;
|
size_t arg3;
|
||||||
size_t arg3 ;
|
int arg4;
|
||||||
int arg4 ;
|
zts_sockaddr *arg5 = (zts_sockaddr *) 0;
|
||||||
zts_sockaddr *arg5 = (zts_sockaddr *) 0 ;
|
zts_socklen_t *arg6 = (zts_socklen_t *) 0;
|
||||||
zts_socklen_t *arg6 = (zts_socklen_t *) 0 ;
|
|
||||||
ssize_t result;
|
ssize_t result;
|
||||||
|
|
||||||
arg1 = (int)jarg1;
|
arg1 = (int)jarg1;
|
||||||
@@ -934,95 +947,84 @@ SWIGEXPORT void * SWIGSTDCALL CSharp_zts_recvfrom(int jarg1, void * jarg2, unsig
|
|||||||
arg5 = (zts_sockaddr *)jarg5;
|
arg5 = (zts_sockaddr *)jarg5;
|
||||||
arg6 = (zts_socklen_t *)jarg6;
|
arg6 = (zts_socklen_t *)jarg6;
|
||||||
result = zts_recvfrom(arg1,arg2,arg3,arg4,arg5,arg6);
|
result = zts_recvfrom(arg1,arg2,arg3,arg4,arg5,arg6);
|
||||||
jresult = new ssize_t((const ssize_t &)result);
|
return result;
|
||||||
return jresult;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
SWIGEXPORT void * SWIGSTDCALL CSharp_zts_recvmsg(int jarg1, void * jarg2, int jarg3) {
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_recvmsg(int jarg1, void * jarg2, int jarg3) {
|
||||||
void * jresult ;
|
int arg1;
|
||||||
int arg1 ;
|
zts_msghdr *arg2 = (zts_msghdr *) 0;
|
||||||
zts_msghdr *arg2 = (zts_msghdr *) 0 ;
|
int arg3;
|
||||||
int arg3 ;
|
|
||||||
ssize_t result;
|
ssize_t result;
|
||||||
|
|
||||||
arg1 = (int)jarg1;
|
arg1 = (int)jarg1;
|
||||||
arg2 = (zts_msghdr *)jarg2;
|
arg2 = (zts_msghdr *)jarg2;
|
||||||
arg3 = (int)jarg3;
|
arg3 = (int)jarg3;
|
||||||
result = zts_recvmsg(arg1,arg2,arg3);
|
result = zts_recvmsg(arg1,arg2,arg3);
|
||||||
jresult = new ssize_t((const ssize_t &)result);
|
return result;
|
||||||
return jresult;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
SWIGEXPORT void * SWIGSTDCALL CSharp_zts_read(int jarg1, void * jarg2, unsigned long jarg3) {
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_read(int jarg1, void * jarg2, unsigned long jarg3) {
|
||||||
void * jresult ;
|
int arg1;
|
||||||
int arg1 ;
|
void *arg2 = (void *) 0;
|
||||||
void *arg2 = (void *) 0 ;
|
size_t arg3;
|
||||||
size_t arg3 ;
|
|
||||||
ssize_t result;
|
ssize_t result;
|
||||||
|
|
||||||
arg1 = (int)jarg1;
|
arg1 = (int)jarg1;
|
||||||
arg2 = (void *)jarg2;
|
arg2 = (void *)jarg2;
|
||||||
arg3 = (size_t)jarg3;
|
arg3 = (size_t)jarg3;
|
||||||
result = zts_read(arg1,arg2,arg3);
|
result = zts_read(arg1,arg2,arg3);
|
||||||
jresult = new ssize_t((const ssize_t &)result);
|
return result;
|
||||||
return jresult;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
SWIGEXPORT void * SWIGSTDCALL CSharp_zts_readv(int jarg1, void * jarg2, int jarg3) {
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_readv(int jarg1, void * jarg2, int jarg3) {
|
||||||
void * jresult ;
|
int arg1;
|
||||||
int arg1 ;
|
zts_iovec *arg2 = (zts_iovec *) 0;
|
||||||
zts_iovec *arg2 = (zts_iovec *) 0 ;
|
int arg3;
|
||||||
int arg3 ;
|
|
||||||
ssize_t result;
|
ssize_t result;
|
||||||
|
|
||||||
arg1 = (int)jarg1;
|
arg1 = (int)jarg1;
|
||||||
arg2 = (zts_iovec *)jarg2;
|
arg2 = (zts_iovec *)jarg2;
|
||||||
arg3 = (int)jarg3;
|
arg3 = (int)jarg3;
|
||||||
result = zts_readv(arg1,(zts_iovec const *)arg2,arg3);
|
result = zts_readv(arg1,(zts_iovec const *)arg2,arg3);
|
||||||
jresult = new ssize_t((const ssize_t &)result);
|
return result;
|
||||||
return jresult;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
SWIGEXPORT void * SWIGSTDCALL CSharp_zts_write(int jarg1, void * jarg2, unsigned long jarg3) {
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_write(int jarg1, void * jarg2, unsigned long jarg3) {
|
||||||
void * jresult ;
|
int arg1;
|
||||||
int arg1 ;
|
void *arg2 = (void *) 0;
|
||||||
void *arg2 = (void *) 0 ;
|
size_t arg3;
|
||||||
size_t arg3 ;
|
|
||||||
ssize_t result;
|
ssize_t result;
|
||||||
|
|
||||||
arg1 = (int)jarg1;
|
arg1 = (int)jarg1;
|
||||||
arg2 = (void *)jarg2;
|
arg2 = (void *)jarg2;
|
||||||
arg3 = (size_t)jarg3;
|
arg3 = (size_t)jarg3;
|
||||||
result = zts_write(arg1,(void const *)arg2,arg3);
|
result = zts_write(arg1,(void const *)arg2,arg3);
|
||||||
jresult = new ssize_t((const ssize_t &)result);
|
return result;
|
||||||
return jresult;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
SWIGEXPORT void * SWIGSTDCALL CSharp_zts_writev(int jarg1, void * jarg2, int jarg3) {
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_writev(int jarg1, void * jarg2, int jarg3) {
|
||||||
void * jresult ;
|
int arg1;
|
||||||
int arg1 ;
|
zts_iovec *arg2 = (zts_iovec *) 0;
|
||||||
zts_iovec *arg2 = (zts_iovec *) 0 ;
|
int arg3;
|
||||||
int arg3 ;
|
|
||||||
ssize_t result;
|
ssize_t result;
|
||||||
|
|
||||||
arg1 = (int)jarg1;
|
arg1 = (int)jarg1;
|
||||||
arg2 = (zts_iovec *)jarg2;
|
arg2 = (zts_iovec *)jarg2;
|
||||||
arg3 = (int)jarg3;
|
arg3 = (int)jarg3;
|
||||||
result = zts_writev(arg1,(zts_iovec const *)arg2,arg3);
|
result = zts_writev(arg1,(zts_iovec const *)arg2,arg3);
|
||||||
jresult = new ssize_t((const ssize_t &)result);
|
return result;
|
||||||
return jresult;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
SWIGEXPORT int SWIGSTDCALL CSharp_zts_shutdown(int jarg1, int jarg2) {
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_shutdown(int jarg1, int jarg2) {
|
||||||
int jresult ;
|
int jresult;
|
||||||
int arg1 ;
|
int arg1;
|
||||||
int arg2 ;
|
int arg2;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
arg1 = (int)jarg1;
|
arg1 = (int)jarg1;
|
||||||
@@ -1032,10 +1034,288 @@ SWIGEXPORT int SWIGSTDCALL CSharp_zts_shutdown(int jarg1, int jarg2) {
|
|||||||
return jresult;
|
return jresult;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_set_no_delay(int jarg1, int jarg2) {
|
||||||
|
int jresult;
|
||||||
|
int arg1;
|
||||||
|
int arg2;
|
||||||
|
int result;
|
||||||
|
|
||||||
|
arg1 = (int)jarg1;
|
||||||
|
arg2 = (int)jarg2;
|
||||||
|
result = (int)zts_set_no_delay(arg1,arg2);
|
||||||
|
jresult = result;
|
||||||
|
return jresult;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_get_no_delay(int jarg1) {
|
||||||
|
int jresult;
|
||||||
|
int arg1;
|
||||||
|
int result;
|
||||||
|
|
||||||
|
arg1 = (int)jarg1;
|
||||||
|
result = (int)zts_get_no_delay(arg1);
|
||||||
|
jresult = result;
|
||||||
|
return jresult;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_set_linger(int jarg1, int jarg2, int jarg3) {
|
||||||
|
int jresult;
|
||||||
|
int arg1;
|
||||||
|
int arg2;
|
||||||
|
int arg3;
|
||||||
|
int result;
|
||||||
|
|
||||||
|
arg1 = (int)jarg1;
|
||||||
|
arg2 = (int)jarg2;
|
||||||
|
arg3 = (int)jarg3;
|
||||||
|
result = (int)zts_set_linger(arg1,arg2,arg3);
|
||||||
|
jresult = result;
|
||||||
|
return jresult;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_get_linger_enabled(int jarg1) {
|
||||||
|
int jresult;
|
||||||
|
int arg1;
|
||||||
|
int result;
|
||||||
|
|
||||||
|
arg1 = (int)jarg1;
|
||||||
|
result = (int)zts_get_linger_enabled(arg1);
|
||||||
|
jresult = result;
|
||||||
|
return jresult;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_get_linger_value(int jarg1) {
|
||||||
|
int jresult;
|
||||||
|
int arg1;
|
||||||
|
int result;
|
||||||
|
|
||||||
|
arg1 = (int)jarg1;
|
||||||
|
result = (int)zts_get_linger_value(arg1);
|
||||||
|
jresult = result;
|
||||||
|
return jresult;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_set_reuse_addr(int jarg1, int jarg2) {
|
||||||
|
int jresult;
|
||||||
|
int arg1;
|
||||||
|
int arg2;
|
||||||
|
int result;
|
||||||
|
|
||||||
|
arg1 = (int)jarg1;
|
||||||
|
arg2 = (int)jarg2;
|
||||||
|
result = (int)zts_set_reuse_addr(arg1,arg2);
|
||||||
|
jresult = result;
|
||||||
|
return jresult;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_get_reuse_addr(int jarg1) {
|
||||||
|
int jresult;
|
||||||
|
int arg1;
|
||||||
|
int result;
|
||||||
|
|
||||||
|
arg1 = (int)jarg1;
|
||||||
|
result = (int)zts_get_reuse_addr(arg1);
|
||||||
|
jresult = result;
|
||||||
|
return jresult;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_set_recv_timeout(int jarg1, int jarg2, int jarg3) {
|
||||||
|
int jresult;
|
||||||
|
int arg1;
|
||||||
|
int arg2;
|
||||||
|
int arg3;
|
||||||
|
int result;
|
||||||
|
|
||||||
|
arg1 = (int)jarg1;
|
||||||
|
arg2 = (int)jarg2;
|
||||||
|
arg3 = (int)jarg3;
|
||||||
|
result = (int)zts_set_recv_timeout(arg1,arg2,arg3);
|
||||||
|
jresult = result;
|
||||||
|
return jresult;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_get_recv_timeout(int jarg1) {
|
||||||
|
int jresult;
|
||||||
|
int arg1;
|
||||||
|
int result;
|
||||||
|
|
||||||
|
arg1 = (int)jarg1;
|
||||||
|
result = (int)zts_get_recv_timeout(arg1);
|
||||||
|
jresult = result;
|
||||||
|
return jresult;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_set_send_timeout(int jarg1, int jarg2, int jarg3) {
|
||||||
|
int jresult;
|
||||||
|
int arg1;
|
||||||
|
int arg2;
|
||||||
|
int arg3;
|
||||||
|
int result;
|
||||||
|
|
||||||
|
arg1 = (int)jarg1;
|
||||||
|
arg2 = (int)jarg2;
|
||||||
|
arg3 = (int)jarg3;
|
||||||
|
result = (int)zts_set_send_timeout(arg1,arg2,arg3);
|
||||||
|
jresult = result;
|
||||||
|
return jresult;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_get_send_timeout(int jarg1) {
|
||||||
|
int jresult;
|
||||||
|
int arg1;
|
||||||
|
int result;
|
||||||
|
|
||||||
|
arg1 = (int)jarg1;
|
||||||
|
result = (int)zts_get_send_timeout(arg1);
|
||||||
|
jresult = result;
|
||||||
|
return jresult;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_set_send_buf_size(int jarg1, int jarg2) {
|
||||||
|
int jresult;
|
||||||
|
int arg1;
|
||||||
|
int arg2;
|
||||||
|
int result;
|
||||||
|
|
||||||
|
arg1 = (int)jarg1;
|
||||||
|
arg2 = (int)jarg2;
|
||||||
|
result = (int)zts_set_send_buf_size(arg1,arg2);
|
||||||
|
jresult = result;
|
||||||
|
return jresult;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_get_send_buf_size(int jarg1) {
|
||||||
|
int jresult;
|
||||||
|
int arg1;
|
||||||
|
int result;
|
||||||
|
|
||||||
|
arg1 = (int)jarg1;
|
||||||
|
result = (int)zts_get_send_buf_size(arg1);
|
||||||
|
jresult = result;
|
||||||
|
return jresult;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_set_recv_buf_size(int jarg1, int jarg2) {
|
||||||
|
int jresult;
|
||||||
|
int arg1;
|
||||||
|
int arg2;
|
||||||
|
int result;
|
||||||
|
|
||||||
|
arg1 = (int)jarg1;
|
||||||
|
arg2 = (int)jarg2;
|
||||||
|
result = (int)zts_set_recv_buf_size(arg1,arg2);
|
||||||
|
jresult = result;
|
||||||
|
return jresult;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_get_recv_buf_size(int jarg1) {
|
||||||
|
int jresult;
|
||||||
|
int arg1;
|
||||||
|
int result;
|
||||||
|
|
||||||
|
arg1 = (int)jarg1;
|
||||||
|
result = (int)zts_get_recv_buf_size(arg1);
|
||||||
|
jresult = result;
|
||||||
|
return jresult;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_set_ttl(int jarg1, int jarg2) {
|
||||||
|
int jresult;
|
||||||
|
int arg1;
|
||||||
|
int arg2;
|
||||||
|
int result;
|
||||||
|
|
||||||
|
arg1 = (int)jarg1;
|
||||||
|
arg2 = (int)jarg2;
|
||||||
|
result = (int)zts_set_ttl(arg1,arg2);
|
||||||
|
jresult = result;
|
||||||
|
return jresult;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_get_ttl(int jarg1) {
|
||||||
|
int jresult;
|
||||||
|
int arg1;
|
||||||
|
int result;
|
||||||
|
|
||||||
|
arg1 = (int)jarg1;
|
||||||
|
result = (int)zts_get_ttl(arg1);
|
||||||
|
jresult = result;
|
||||||
|
return jresult;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_set_blocking(int jarg1, int jarg2) {
|
||||||
|
int jresult;
|
||||||
|
int arg1;
|
||||||
|
int arg2;
|
||||||
|
int result;
|
||||||
|
|
||||||
|
arg1 = (int)jarg1;
|
||||||
|
arg2 = (int)jarg2;
|
||||||
|
result = (int)zts_set_blocking(arg1,arg2);
|
||||||
|
jresult = result;
|
||||||
|
return jresult;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_get_blocking(int jarg1) {
|
||||||
|
int jresult;
|
||||||
|
int arg1;
|
||||||
|
int result;
|
||||||
|
|
||||||
|
arg1 = (int)jarg1;
|
||||||
|
result = (int)zts_get_blocking(arg1);
|
||||||
|
jresult = result;
|
||||||
|
return jresult;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_set_keepalive(int jarg1, int jarg2) {
|
||||||
|
int jresult;
|
||||||
|
int arg1;
|
||||||
|
int arg2;
|
||||||
|
int result;
|
||||||
|
|
||||||
|
arg1 = (int)jarg1;
|
||||||
|
arg2 = (int)jarg2;
|
||||||
|
result = (int)zts_set_keepalive(arg1,arg2);
|
||||||
|
jresult = result;
|
||||||
|
return jresult;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_get_keepalive(int jarg1) {
|
||||||
|
int jresult;
|
||||||
|
int arg1;
|
||||||
|
int result;
|
||||||
|
|
||||||
|
arg1 = (int)jarg1;
|
||||||
|
result = (int)zts_get_keepalive(arg1);
|
||||||
|
jresult = result;
|
||||||
|
return jresult;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
SWIGEXPORT int SWIGSTDCALL CSharp_zts_dns_set_server(zts_sockaddr* jarg1) {
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_dns_set_server(zts_sockaddr* jarg1) {
|
||||||
int jresult ;
|
int jresult;
|
||||||
zts_sockaddr *arg1 = (zts_sockaddr *) 0 ;
|
zts_sockaddr *arg1 = (zts_sockaddr *) 0;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
arg1 = (zts_sockaddr *)jarg1;
|
arg1 = (zts_sockaddr *)jarg1;
|
||||||
@@ -1046,8 +1326,8 @@ SWIGEXPORT int SWIGSTDCALL CSharp_zts_dns_set_server(zts_sockaddr* jarg1) {
|
|||||||
|
|
||||||
|
|
||||||
SWIGEXPORT int SWIGSTDCALL CSharp_zts_dns_get_server(zts_sockaddr* jarg1) {
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_dns_get_server(zts_sockaddr* jarg1) {
|
||||||
int jresult ;
|
int jresult;
|
||||||
zts_sockaddr *arg1 = (zts_sockaddr *) 0 ;
|
zts_sockaddr *arg1 = (zts_sockaddr *) 0;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
arg1 = (zts_sockaddr *)jarg1;
|
arg1 = (zts_sockaddr *)jarg1;
|
||||||
@@ -1059,12 +1339,12 @@ SWIGEXPORT int SWIGSTDCALL CSharp_zts_dns_get_server(zts_sockaddr* jarg1) {
|
|||||||
|
|
||||||
|
|
||||||
SWIGEXPORT char * SWIGSTDCALL CSharp_zts_inet_ntop(int jarg1, void * jarg2, char * jarg3, unsigned short jarg4) {
|
SWIGEXPORT char * SWIGSTDCALL CSharp_zts_inet_ntop(int jarg1, void * jarg2, char * jarg3, unsigned short jarg4) {
|
||||||
char * jresult ;
|
char * jresult;
|
||||||
int arg1 ;
|
int arg1;
|
||||||
void *arg2 = (void *) 0 ;
|
void *arg2 = (void *) 0;
|
||||||
char *arg3 = (char *) 0 ;
|
char *arg3 = (char *) 0;
|
||||||
zts_socklen_t arg4 ;
|
zts_socklen_t arg4;
|
||||||
char *result = 0 ;
|
char *result = 0;
|
||||||
|
|
||||||
arg1 = (int)jarg1;
|
arg1 = (int)jarg1;
|
||||||
arg2 = (void *)jarg2;
|
arg2 = (void *)jarg2;
|
||||||
@@ -1077,10 +1357,10 @@ SWIGEXPORT char * SWIGSTDCALL CSharp_zts_inet_ntop(int jarg1, void * jarg2, char
|
|||||||
|
|
||||||
|
|
||||||
SWIGEXPORT int SWIGSTDCALL CSharp_zts_inet_pton(int jarg1, char * jarg2, void * jarg3) {
|
SWIGEXPORT int SWIGSTDCALL CSharp_zts_inet_pton(int jarg1, char * jarg2, void * jarg3) {
|
||||||
int jresult ;
|
int jresult;
|
||||||
int arg1 ;
|
int arg1;
|
||||||
char *arg2 = (char *) 0 ;
|
char *arg2 = (char *) 0;
|
||||||
void *arg3 = (void *) 0 ;
|
void *arg3 = (void *) 0;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
arg1 = (int)jarg1;
|
arg1 = (int)jarg1;
|
||||||
|
|||||||
@@ -426,16 +426,6 @@ void test_service()
|
|||||||
assert(res == ZTS_ERR_OK);
|
assert(res == ZTS_ERR_OK);
|
||||||
assert(res == 0);
|
assert(res == 0);
|
||||||
|
|
||||||
//----------------------------------------------------------------------------//
|
|
||||||
// Test *_easy API //
|
|
||||||
//----------------------------------------------------------------------------//
|
|
||||||
|
|
||||||
//zts_connect_easy(0, ZTS_AF_INET, "192.168.7.9", 7878);
|
|
||||||
//zts_connect_easy(0, ZTS_AF_INET6, "FCC5:205E:4FF5:5311:DFF0::1", 7878);
|
|
||||||
//res = zts_bind_easy(0, ZTS_AF_INET6, "::", 8080);
|
|
||||||
//fprintf(stderr, "res=%d, zts_errno=%d\n", res, zts_errno);
|
|
||||||
//zts_delay_ms(60000);
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------//
|
//----------------------------------------------------------------------------//
|
||||||
// Test DNS client functionality //
|
// Test DNS client functionality //
|
||||||
//----------------------------------------------------------------------------//
|
//----------------------------------------------------------------------------//
|
||||||
@@ -486,7 +476,8 @@ void test_service()
|
|||||||
// Server //
|
// Server //
|
||||||
//----------------------------------------------------------------------------//
|
//----------------------------------------------------------------------------//
|
||||||
|
|
||||||
#define MAX_CONNECT_TIME 60
|
#define MAX_CONNECT_TIME 60 // outer re-attempt loop
|
||||||
|
#define CONNECT_TIMEOUT 30 // zts_connect_easy, ms
|
||||||
#define BUFLEN 128
|
#define BUFLEN 128
|
||||||
char *msg = "welcome to the machine";
|
char *msg = "welcome to the machine";
|
||||||
|
|
||||||
@@ -549,6 +540,13 @@ void start_server_app(uint16_t port4, uint16_t port6)
|
|||||||
zts_close(acc4);
|
zts_close(acc4);
|
||||||
assert(err == ZTS_ERR_OK && zts_errno == 0);
|
assert(err == ZTS_ERR_OK && zts_errno == 0);
|
||||||
|
|
||||||
|
assert(bytes_sent == bytes_read);
|
||||||
|
if (bytes_sent == bytes_read) {
|
||||||
|
fprintf(stderr, "server4: Test OK\n");
|
||||||
|
} else {
|
||||||
|
fprintf(stderr, "server4: Test FAIL\n");
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// IPv6 test
|
// IPv6 test
|
||||||
//
|
//
|
||||||
@@ -600,6 +598,13 @@ void start_server_app(uint16_t port4, uint16_t port6)
|
|||||||
assert(err == ZTS_ERR_OK && zts_errno == 0);
|
assert(err == ZTS_ERR_OK && zts_errno == 0);
|
||||||
int s = zts_socket(ZTS_AF_INET, ZTS_SOCK_STREAM, 0);
|
int s = zts_socket(ZTS_AF_INET, ZTS_SOCK_STREAM, 0);
|
||||||
assert(("s != ZTS_ERR_SERVICE, not shut down", s == ZTS_ERR_SERVICE));
|
assert(("s != ZTS_ERR_SERVICE, not shut down", s == ZTS_ERR_SERVICE));
|
||||||
|
|
||||||
|
assert(bytes_sent == bytes_read);
|
||||||
|
if (bytes_sent == bytes_read) {
|
||||||
|
fprintf(stderr, "server6: Test OK\n");
|
||||||
|
} else {
|
||||||
|
fprintf(stderr, "server6: Test FAIL\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------//
|
//----------------------------------------------------------------------------//
|
||||||
@@ -633,7 +638,7 @@ void start_client_app(char *ip4, uint16_t port4, char *ip6, uint16_t port6)
|
|||||||
clock_gettime(CLOCK_MONOTONIC, &start);
|
clock_gettime(CLOCK_MONOTONIC, &start);
|
||||||
do {
|
do {
|
||||||
fprintf(stderr, "client4: connecting to: %s:%d\n", ip4, port4);
|
fprintf(stderr, "client4: connecting to: %s:%d\n", ip4, port4);
|
||||||
err = zts_connect_easy(s4, ZTS_AF_INET, ip4, port4);
|
err = zts_connect_easy(s4, ZTS_AF_INET, ip4, port4, CONNECT_TIMEOUT);
|
||||||
zts_delay_ms(500);
|
zts_delay_ms(500);
|
||||||
clock_gettime(CLOCK_MONOTONIC, &now);
|
clock_gettime(CLOCK_MONOTONIC, &now);
|
||||||
time_diff = (now.tv_sec - start.tv_sec);
|
time_diff = (now.tv_sec - start.tv_sec);
|
||||||
@@ -657,6 +662,13 @@ void start_client_app(char *ip4, uint16_t port4, char *ip6, uint16_t port6)
|
|||||||
zts_close(s4);
|
zts_close(s4);
|
||||||
assert(err == ZTS_ERR_OK && zts_errno == 0);
|
assert(err == ZTS_ERR_OK && zts_errno == 0);
|
||||||
|
|
||||||
|
assert(bytes_sent == bytes_read);
|
||||||
|
if (bytes_sent == bytes_read) {
|
||||||
|
fprintf(stderr, "client4: Test OK\n");
|
||||||
|
} else {
|
||||||
|
fprintf(stderr, "client4: Test FAIL\n");
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// IPv6 test
|
// IPv6 test
|
||||||
//
|
//
|
||||||
@@ -671,7 +683,7 @@ void start_client_app(char *ip4, uint16_t port4, char *ip6, uint16_t port6)
|
|||||||
clock_gettime(CLOCK_MONOTONIC, &start);
|
clock_gettime(CLOCK_MONOTONIC, &start);
|
||||||
do {
|
do {
|
||||||
fprintf(stderr, "client6: connecting to: %s:%d\n", ip6, port6);
|
fprintf(stderr, "client6: connecting to: %s:%d\n", ip6, port6);
|
||||||
err = zts_connect_easy(s6, ZTS_AF_INET6, ip6, port6);
|
err = zts_connect_easy(s6, ZTS_AF_INET6, ip6, port6, CONNECT_TIMEOUT);
|
||||||
zts_delay_ms(500);
|
zts_delay_ms(500);
|
||||||
clock_gettime(CLOCK_MONOTONIC, &now);
|
clock_gettime(CLOCK_MONOTONIC, &now);
|
||||||
time_diff = (now.tv_sec - start.tv_sec);
|
time_diff = (now.tv_sec - start.tv_sec);
|
||||||
@@ -699,6 +711,13 @@ void start_client_app(char *ip4, uint16_t port4, char *ip6, uint16_t port6)
|
|||||||
assert(err == ZTS_ERR_OK && zts_errno == 0);
|
assert(err == ZTS_ERR_OK && zts_errno == 0);
|
||||||
int s = zts_socket(ZTS_AF_INET, ZTS_SOCK_STREAM, 0);
|
int s = zts_socket(ZTS_AF_INET, ZTS_SOCK_STREAM, 0);
|
||||||
assert(("s != ZTS_ERR_SERVICE, not shut down", s == ZTS_ERR_SERVICE));
|
assert(("s != ZTS_ERR_SERVICE, not shut down", s == ZTS_ERR_SERVICE));
|
||||||
|
|
||||||
|
assert(bytes_sent == bytes_read);
|
||||||
|
if (bytes_sent == bytes_read) {
|
||||||
|
fprintf(stderr, "client6: Test OK\n");
|
||||||
|
} else {
|
||||||
|
fprintf(stderr, "client6: Test FAIL\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------//
|
//----------------------------------------------------------------------------//
|
||||||
|
|||||||
Reference in New Issue
Block a user