librist-rust 0.6.3

Rust wapper for librist
docs.rs failed to build librist-rust-0.6.3
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Visit the last successful build: librist-rust-0.6.1

librist-rust

crates.io version Documentation

Rust wapper for librist, allowing you to use the RIST protocol within Rust applications.

Feature support

This wrapper is in very early stages and currently does not support a number of librist features:

  • Sending - not supported
  • Receiving - basic support
  • Custom authentication hooks - not supported
  • Out-of-band data - not supported
  • librist logging configuration supported
  • stats reporting - not supported
  • data callback - not supported
  • NAK control - not supported

Example

Receive and hex-dump RIST packets,

use librist_rust::{LoggingSettings, LogLevel, ReceiverContext, Profile, PeerConfig, RistError, DataReadResponse};
use std::io::stderr;

fn main() {
   let url = std::env::args().skip(1).next()
       .expect("Please supply one URL argument");
   let peer_config = PeerConfig::parse_address(&url)
       .expect(&format!("Unable to parse {:?}",url));
   let logging_settings = LoggingSettings::file(LogLevel::Info, stderr())
       .expect("LoggingSettings::file() failed");
   let mut ctx = ReceiverContext::create(Profile::Main, logging_settings)
       .expect("Context::receiver_create failed");

   ctx.peer_create(peer_config)
       .expect("peer_create() failed");

   // Have to call these or the connection with the librist 'ristsender' tool will not be
   // established
   ctx.auth_handler_set().expect("auth_handler_set() failed");
   ctx.oob_callback_set().expect("oob_callback_set() failed");

   ctx.start();
   loop {
       match ctx.data_read(std::time::Duration::from_secs(1)) {
           Ok(DataReadResponse::NoData) => {
               println!("No data received within timeout window")
           },
           Ok(DataReadResponse::Data { block, queue_size }) => {
               println!("Got a data block; queue now at {} items", queue_size);
               hexdump::hexdump(block.payload())
           },
           Err(e) => {
               println!("data_read() failed {:?}", e);
               return;
           },
       }
   }
}

The above example is in this project, so from a checked-out copy you can run the following to dump payloads of RIST packets sent to port 12344 on localhost,

cargo run --release --example receiver rist://@127.0.0.1:12344