Struct file_protocol::protocol::Protocol[][src]

pub struct Protocol { /* fields omitted */ }

File protocol information structure

Methods

impl Protocol
[src]

Create a new file protocol instance using an automatically assigned UDP socket

Arguments

  • host_ip - The local IP address
  • remote_addr - The remote IP and port to communicate with
  • prefix - Temporary storage directory prefix

Errors

If this function encounters any errors, it will panic

Examples

use file_protocol::*;

let f_protocol = FileProtocol::new("0.0.0.0", "192.168.0.1:7000", Some("my/file/storage".to_owned()));

Create a new file protocol instance using a specific UDP socket

Arguments

  • socket - The local socket to use for communication
  • remote_addr - The remote IP and port to communicate with
  • prefix - Temporary storage directory prefix

Errors

If this function encounters any errors, it will panic

Examples

use file_protocol::*;
use std::net::UdpSocket;

let socket = UdpSocket::bind("0.0.0.0:8000").unwrap();

let f_protocol = FileProtocol::new_from_socket(socket, "192.168.0.1:7000", None);

Send CBOR packet to the destination port

Arguments

  • vec - CBOR packet to send

Errors

If this function encounters any errors, it will return an error message string

Examples

extern crate file_protocol;
extern crate serde_cbor;

use file_protocol::*;
use serde_cbor::ser;

let f_protocol = FileProtocol::new("0.0.0.0", "0.0.0.0:7000", None);
let message = ser::to_vec_packed(&"ping").unwrap();

f_protocol.send(message);

Receive a file protocol message

Arguments

  • timeout - Maximum time to wait for a reply. If None, will block indefinitely

Errors

  • If this function times out, it will return Err(None)
  • If this function encounters any errors, it will return an error message string

Examples

extern crate file_protocol;

use file_protocol::*;
use std::time::Duration;

let f_protocol = FileProtocol::new("0.0.0.0", "0.0.0.0:7000", None);

let message = match f_protocol.recv(Some(Duration::from_secs(1))) {
    Ok(data) => data,
    Err(None) => {
        println!("Timeout waiting for message");
        return;
    }
    Err(Some(err)) => panic!("Failed to receive message: {}", err),
};

Send a file's metadata information to the remote target

Arguments

  • hash - BLAKE2s hash of file
  • num_chunks - Number of data chunks needed for file

Errors

If this function encounters any errors, it will return an error message string

Examples

use file_protocol::*;

let f_protocol = FileProtocol::new("0.0.0.0", "0.0.0.0:7000", None);


let (hash, num_chunks, _mode) = f_protocol.initialize_file("client.txt").unwrap();
f_protocol.send_metadata(&hash, num_chunks);

Request remote target to receive file from host

Arguments

  • hash - BLAKE2s hash of file
  • target_path - Destination file path
  • mode - File mode

Errors

If this function encounters any errors, it will return an error message string

Examples

use file_protocol::*;

let f_protocol = FileProtocol::new("0.0.0.0", "0.0.0.0:7000", None);


let (hash, _num_chunks, mode) = f_protocol.initialize_file("client.txt").unwrap();
f_protocol.send_export(&hash, "final/dir/service.txt", mode);

Request a file from a remote target

Arguments

  • source_path - File remote target should send

Errors

If this function encounters any errors, it will return an error message string

Examples

use file_protocol::*;

let f_protocol = FileProtocol::new("0.0.0.0", "0.0.0.0:7000", None);

f_protocol.send_import("service.txt");

Prepare a file for transfer

Imports the file into temporary storage and calculates the BLAKE2s hash

Arguments

  • source_path - File to initialize for transfer

Errors

If this function encounters any errors, it will return an error message string

Examples

use file_protocol::*;

let f_protocol = FileProtocol::new("0.0.0.0", "0.0.0.0:7000", None);


let (_hash, _num_chunks, _mode) = f_protocol.initialize_file("client.txt").unwrap();

Listen for and process file protocol messages

Arguments

  • timeout - Maximum time to listen for a single message
  • start_state - Current transaction state

Errors

If this function encounters any errors, it will return an error message string

Examples

extern crate file_protocol;

use file_protocol::*;
use std::time::Duration;

let f_protocol = FileProtocol::new("0.0.0.0", "0.0.0.0:7000", None);

f_protocol.message_engine(Duration::from_millis(10), State::Transmitting);

Process a file protocol message

Returns the new transaction state

Arguments

  • message - File protocol message to process
  • state - Current transaction state

Errors

If this function encounters any errors, it will return an error message string

Examples

extern crate file_protocol;

use file_protocol::*;
use std::time::Duration;

let f_protocol = FileProtocol::new("0.0.0.0", "0.0.0.0:7000", None);

if let Ok(Some(message)) = f_protocol.recv(Some(Duration::from_millis(100))) {
    let _state = f_protocol.process_message(
        message,
        State::StartReceive {
            path: "target/dir/file.bin".to_owned()
        }
    );
}

Auto Trait Implementations

impl Send for Protocol

impl !Sync for Protocol