2017-05-05 18:56:57 -07:00
## **ZeroTier SDK**: Embed ZeroTier directly into your app
2017-05-05 18:51:04 -07:00
2017-05-05 18:56:57 -07:00
< a href = "https://www.zerotier.com" > < img src = "https://github.com/zerotier/ZeroTierOne/raw/master/artwork/AppIcon_87x87.png" align = "left" hspace = "10" vspace = "6" > < / a >
2017-05-05 18:51:04 -07:00
2017-05-05 18:56:57 -07:00
**ZeroTier** makes it easy to securely connect devices, servers, cloud VMs, containers, and apps everywhere and manage them at scale. [](https://webchat.freenode.net/?channels=zerotier)
< br >
2017-04-06 19:16:01 -07:00
2017-04-20 13:39:46 -07:00
## Example
```
2017-04-21 14:56:42 -07:00
string str = "welcome to the machine";
zts_start("./zt");
2017-05-05 16:46:07 -07:00
while(!zts_running())
2017-04-21 14:56:42 -07:00
sleep(1);
2017-05-05 16:46:07 -07:00
zts_join("e5cd7a7b1c0fa971");
2017-04-21 14:56:42 -07:00
while(!zts_has_address(nwid))
sleep(1);
if((fd = zts_socket(AF_INET, SOCK_STREAM, 0)) < 0 ) {
printf("error creating ZeroTier socket");
}
if((err = zts_connect(fd, (const struct sockaddr *)addr, sizeof(addr))) < 0 ) {
printf("error connecting to remote host (%d)\n", err);
}
int wrote = zts_write(fd, str.c_str(), str.length());
zts_close(fd);
2017-04-20 13:39:46 -07:00
```
Bindings also exist for [many popular languages]().
2017-04-06 19:16:01 -07:00
## Build Targets
### Static Library
2017-05-05 16:46:07 -07:00
- `make static_lib SDK_IPV4=1` : Will output to `build/`
2017-04-20 13:39:46 -07:00
### Tests
- `make tests` : Will output to `build/tests/`
2017-05-01 17:44:45 -07:00
Then run the unit test suite with whatever configuration you need. For instance:
2017-04-20 13:39:46 -07:00
2017-05-01 17:44:45 -07:00
To run a single-test IPv4 client/server test:
2017-04-20 13:39:46 -07:00
2017-05-05 16:46:07 -07:00
- Host 1: `./build/selftest zt1 c7cd7c9e1b0f52a2 simple 4 server 8787`
- Host 2: `./build/selftest zt2 c7cd7c9e1b0f52a2 simple 4 client 10.9.9.40 8787`
2017-04-06 19:16:01 -07:00
2017-05-01 17:44:45 -07:00
To run a multi-message IPv4 client/server test:
- Host 1: ./build/test/unit zt2 c7cd7c9e1b0f52a2 simple 4 server 8787 n_bytes 100 50'
- Host 2: ./build/test/unit zt2 c7cd7c9e1b0f52a2 simple 4 client 10.9.9.40 8787 n_bytes 100 50'
- For more unit test examples, see the [testing]() page
2017-05-05 16:46:07 -07:00
## IP version flags
2017-05-05 18:51:04 -07:00
- `SDK_IPV4=1`
- `SDK_IPV6=1`
2017-05-05 16:46:07 -07:00
2017-04-06 19:16:01 -07:00
## Using Language Bindings
2017-05-05 18:51:04 -07:00
- `SDK_LANG_JNI=1` : Enable JNI bindings for Java (produces a shared library)
- `SDK_LANG_CSHARP=1`
- `SDK_LANG_PYTHON=1`
- `SDK_LANG_GO=1`
2017-05-05 16:46:07 -07:00
## Debugging flags
2017-05-05 18:51:04 -07:00
- `SDK_DEBUG=1` - Enable SDK library debugging
- `ZT_DEBUG=1` - Enable core ZeroTier service debugging