Getting Started
The C bindings allow for you to build a Streams API which can be pulled into other languages.
The streams instance underlying the bindings is built with the sync-client
flag to
ensure a compatible client interface using the iota.rs iota-client
crate.
Before building anything you'll need to make sure you have cmake
installed on your
machine.
To build the library, first make sure you're in the c directory:
cd bindings/c
Update the flags in the CMakeLists.txt
and run cmake .
to
prepare the installation files.
Options for CMakeLlists.txt
NO_STD
: Enable no_std build, without iota_client (when ON,SYNC_CLIENT
isnt supported)SYNC_CLIENT
: Enable sync transport via iota_client, otherwise it's going to be Bucket which can only be used for testsSTATIC
: Build static library when ON, otherwise dynamic libraryRELEASE
: Build in release or debug mode (when ON, builds release, when OFF, build debug)
To build the library run:
make
This generates a binary library to be included into a project. This can be either:
iota_streams_c_static
iota_streams_c.so
(Unix)iota_streams_c.dll
(Windows)
An example of the header file can be found in include/channels.h
.
Starting a Channel
Once the package has been built, you can pull it into a script file like so:
#include "iota_streams/channels.h"
#include <stdio.h>
int main()
{
uint8_t multi_branching = 0;
char seed[] = "Some unique seed";
char const encoding[] = "utf-8";
const size_t size = 1024;
char const *url = "https://chrysalis-nodes.iota.org";
transport_t *tsp = tsp_client_new_from_url(url);
// Author constructor requires: (seed, encoding, payload size, multi branching, transport client)
author_t *auth = auth_new(seed, encoding, size, multi_branching, tsp);
address_t const *ann_link = auth_send_announce(auth);
printf("Announcement message sent");
char const *ann_address_inst_str = get_address_inst_str(ann_link);
char const *ann_address_id_str = get_address_id_str(ann_link);
// Link used by subscribers to attach to instance
printf("Link: %s:%s\n", ann_address_inst_str, ann_address_id_str);
// Clean up
drop_str(ann_address_inst_str);
drop_str(ann_address_id_str);
drop_address(ann_link);
auth_drop(auth);
tsp_drop(tsp);
}