pub struct Socket {
    pub encoder: Box<dyn Fn(Vec<u8>, &[u8; 32]) -> Vec<u8>>,
    pub decoder: Box<dyn Fn(Vec<u8>, &[u8; 32]) -> Vec<u8>>,
    /* private fields */
}

Fields

encoder: Box<dyn Fn(Vec<u8>, &[u8; 32]) -> Vec<u8>>

Datagrams encoder

decoder: Box<dyn Fn(Vec<u8>, &[u8; 32]) -> Vec<u8>>

Datagrams decoder

Implementations

Sets function that will encode datagrams before its transferring

Sets function that will decode received datagrams

Generate shared secret with specified remote address

use udpsec::Socket;
 
let local_addr = "127.0.0.1:50000".parse().unwrap();
let remote_addr = "127.0.0.1:50001".parse().unwrap();
 
let mut socket_a = Socket::new(local_addr).unwrap();
let mut socket_b = Socket::new(remote_addr).unwrap();
 
// wait_not_await's Await
socket_a.generate_secret(remote_addr).unwrap().then(|ping| {
    println!("Ping: {} ms", ping.as_millis());
});
 
socket_b.recv(); // Remote client updates its state in a loop
 
while socket_a.shared_secret(remote_addr) == None {
    socket_a.recv();
}
 
println!("Shared secret (local): {:?}", socket_a.shared_secret(remote_addr).unwrap());
println!("Shared secret (remote): {:?}", socket_b.shared_secret(local_addr).unwrap());

Get shared secret with a specified remote address

See Socket.generate_secret() for more details

Send data to remote address

Returns false if data couldn’t be sent, or shared secret wasn’t generated

use udpsec::Socket;
 
let local_addr = "127.0.0.1:50002".parse().unwrap();
let remote_addr = "127.0.0.1:50003".parse().unwrap();
 
let mut socket_a = Socket::new(local_addr).unwrap();
let mut socket_b = Socket::new(remote_addr).unwrap();
 
socket_a.generate_secret(remote_addr); // Send KeyExchangeInit to remote client
 
socket_b.recv(); // Process KeyExchangeInit packet from local client
socket_a.recv(); // Receive KeyExchangeDone packet from remote client
 
socket_a.send(remote_addr, "Hello, World!".as_bytes().to_vec());
 
let received = socket_b.recv().unwrap();
 
println!("[{}] {}", received.0, String::from_utf8(received.1).unwrap());

Receive data from remote socket

See Socket.send() for more details

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Should always be Self

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.