Struct cyfs_bdt::StackGuard
source · pub struct StackGuard(_);Methods from Deref<Target = Stack>§
pub fn to_weak(&self) -> Weak<StackImpl>
pub fn id_generator(&self) -> &IncreaseIdGenerator
pub fn keystore(&self) -> &Keystore
pub fn net_manager(&self) -> &NetManager
pub fn device_cache(&self) -> &DeviceCache
pub fn config(&self) -> &StackConfig
pub fn tunnel_manager(&self) -> &TunnelManager
sourcepub fn stream_manager(&self) -> &StreamManager
pub fn stream_manager(&self) -> &StreamManager
Examples found in repository?
More examples
examples/error_tcp_endpoint.rs (line 13)
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
async fn recv_large_stream(stack: StackGuard) -> BuckyResult<Vec<u8>> {
let acceptor = stack.stream_manager().listen(0).unwrap();
let mut incoming = acceptor.incoming();
let mut pre_stream = incoming.next().await.unwrap()?;
pre_stream.stream.confirm(vec![].as_ref()).await?;
let mut buffer = vec![];
let _ = pre_stream.stream.read_to_end(&mut buffer).await?;
let _ = pre_stream.stream.shutdown(Shutdown::Both);
Ok(buffer)
}
async fn send_large_stream(
ln_stack: &StackGuard,
rn_dev: Device,
data: &[u8],
) -> BuckyResult<()> {
let param = BuildTunnelParams {
remote_const: rn_dev.desc().clone(),
remote_sn: None,
remote_desc: Some(rn_dev),
};
let mut stream = ln_stack
.stream_manager()
.connect(0u16, vec![], param)
.await?;
stream.write_all(data).await?;
let _ = stream.shutdown(Shutdown::Both);
Ok(())
}examples/stream.rs (line 13)
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
async fn recv_large_stream(stack: StackGuard) -> BuckyResult<Vec<u8>> {
let acceptor = stack.stream_manager().listen(0).unwrap();
let mut incoming = acceptor.incoming();
let mut pre_stream = incoming.next().await.unwrap()?;
pre_stream.stream.confirm(vec![].as_ref()).await?;
let mut buffer = vec![];
let _ = pre_stream.stream.read_to_end(&mut buffer).await?;
let _ = pre_stream.stream.shutdown(Shutdown::Both);
Ok(buffer)
}
async fn send_large_stream(
ln_stack: &StackGuard,
rn_stack: &StackGuard,
data: &[u8],
) -> BuckyResult<()> {
let param = BuildTunnelParams {
remote_const: rn_stack.local_const().clone(),
remote_sn: None,
remote_desc: Some(rn_stack.sn_client().ping().default_local()),
};
let mut stream = ln_stack
.stream_manager()
.connect(0u16, vec![], param)
.await?;
stream.write_all(data).await?;
let _ = stream.shutdown(Shutdown::Both);
Ok(())
}examples/reset_sn.rs (line 18)
17 18 19 20 21 22 23 24 25 26 27 28
async fn recv_large_stream(stack: StackGuard, sender: channel::Sender<Vec<u8>>) {
let acceptor = stack.stream_manager().listen(0).unwrap();
let mut incoming = acceptor.incoming();
loop {
let mut pre_stream = incoming.next().await.unwrap().unwrap();
pre_stream.stream.confirm(vec![].as_ref()).await.unwrap();
let mut buffer = vec![];
let _ = pre_stream.stream.read_to_end(&mut buffer).await.unwrap();
let _ = pre_stream.stream.shutdown(Shutdown::Both);
sender.send(buffer).await.unwrap();
}
}examples/use_next_sn.rs (line 17)
16 17 18 19 20 21 22 23 24 25 26 27
async fn recv_large_stream(stack: StackGuard, sender: channel::Sender<Vec<u8>>) {
let acceptor = stack.stream_manager().listen(0).unwrap();
let mut incoming = acceptor.incoming();
loop {
let mut pre_stream = incoming.next().await.unwrap().unwrap();
pre_stream.stream.confirm(vec![].as_ref()).await.unwrap();
let mut buffer = vec![];
let _ = pre_stream.stream.read_to_end(&mut buffer).await.unwrap();
let _ = pre_stream.stream.shutdown(Shutdown::Both);
sender.send(buffer).await.unwrap();
}
}sourcepub fn datagram_manager(&self) -> &DatagramManager
pub fn datagram_manager(&self) -> &DatagramManager
Examples found in repository?
examples/datagram.rs (line 87)
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
async fn datagram_qa(ln_ep: &[&str], rn_ep: &[&str]) {
let ((ln_stack, _), (rn_stack, _)) = utils::local_stack_pair(
ln_ep,
rn_ep).await.unwrap();
let qa_port = 10000;
let question = b"question".to_vec();
let answer = b"answer".to_vec();
let question_tunnel = ln_stack.datagram_manager().bind(qa_port).unwrap();
let answer_tunnel = rn_stack.datagram_manager().bind(qa_port).unwrap();
let mut question_options = DatagramOptions::default();
let _ = send_with_timeout(
&question_tunnel,
question.as_ref(),
&mut question_options,
rn_stack.local_device_id(),
qa_port,
Duration::from_millis(500),
Duration::from_secs(5)).await.unwrap();
{
let answer_tunnel = answer_tunnel.clone();
let answer = answer.clone();
let ln_stack = ln_stack.clone();
task::spawn(async move {
let recv_question = watch_question(answer_tunnel, answer).await.unwrap();
assert!(recv_question.source.remote.eq(ln_stack.local_device_id()));
assert_eq!(recv_question.source.vport, qa_port);
});
}
let recv = future::timeout(Duration::from_secs(5), watch_answer(question_tunnel)).await.unwrap();
let recv_answer = recv.unwrap();
assert!(recv_answer.source.remote.eq(rn_stack.local_device_id()));
assert_eq!(recv_answer.source.vport, qa_port);
}pub fn proxy_manager(&self) -> &ProxyManager
sourcepub fn local_device_id(&self) -> &DeviceId
pub fn local_device_id(&self) -> &DeviceId
Examples found in repository?
examples/datagram.rs (line 94)
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
async fn datagram_qa(ln_ep: &[&str], rn_ep: &[&str]) {
let ((ln_stack, _), (rn_stack, _)) = utils::local_stack_pair(
ln_ep,
rn_ep).await.unwrap();
let qa_port = 10000;
let question = b"question".to_vec();
let answer = b"answer".to_vec();
let question_tunnel = ln_stack.datagram_manager().bind(qa_port).unwrap();
let answer_tunnel = rn_stack.datagram_manager().bind(qa_port).unwrap();
let mut question_options = DatagramOptions::default();
let _ = send_with_timeout(
&question_tunnel,
question.as_ref(),
&mut question_options,
rn_stack.local_device_id(),
qa_port,
Duration::from_millis(500),
Duration::from_secs(5)).await.unwrap();
{
let answer_tunnel = answer_tunnel.clone();
let answer = answer.clone();
let ln_stack = ln_stack.clone();
task::spawn(async move {
let recv_question = watch_question(answer_tunnel, answer).await.unwrap();
assert!(recv_question.source.remote.eq(ln_stack.local_device_id()));
assert_eq!(recv_question.source.vport, qa_port);
});
}
let recv = future::timeout(Duration::from_secs(5), watch_answer(question_tunnel)).await.unwrap();
let recv_answer = recv.unwrap();
assert!(recv_answer.source.remote.eq(rn_stack.local_device_id()));
assert_eq!(recv_answer.source.vport, qa_port);
}sourcepub fn local_const(&self) -> &DeviceDesc
pub fn local_const(&self) -> &DeviceDesc
Examples found in repository?
examples/stream.rs (line 29)
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
async fn send_large_stream(
ln_stack: &StackGuard,
rn_stack: &StackGuard,
data: &[u8],
) -> BuckyResult<()> {
let param = BuildTunnelParams {
remote_const: rn_stack.local_const().clone(),
remote_sn: None,
remote_desc: Some(rn_stack.sn_client().ping().default_local()),
};
let mut stream = ln_stack
.stream_manager()
.connect(0u16, vec![], param)
.await?;
stream.write_all(data).await?;
let _ = stream.shutdown(Shutdown::Both);
Ok(())
}sourcepub fn sn_client(&self) -> &ClientManager
pub fn sn_client(&self) -> &ClientManager
Examples found in repository?
examples/stream.rs (line 31)
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
async fn send_large_stream(
ln_stack: &StackGuard,
rn_stack: &StackGuard,
data: &[u8],
) -> BuckyResult<()> {
let param = BuildTunnelParams {
remote_const: rn_stack.local_const().clone(),
remote_sn: None,
remote_desc: Some(rn_stack.sn_client().ping().default_local()),
};
let mut stream = ln_stack
.stream_manager()
.connect(0u16, vec![], param)
.await?;
stream.write_all(data).await?;
let _ = stream.shutdown(Shutdown::Both);
Ok(())
}sourcepub fn ndn(&self) -> &NdnStack
pub fn ndn(&self) -> &NdnStack
Examples found in repository?
examples/channel.rs (line 10)
8 9 10 11 12 13 14 15 16 17 18 19 20
async fn watch_recv_chunk(stack: StackGuard, chunkid: ChunkId) -> BuckyResult<ChunkId> {
loop {
let ret = stack.ndn().chunk_manager().store().get(&chunkid).await;
if let Ok(mut reader) = ret {
let mut content = vec![0u8; chunkid.len()];
let _ = reader.read(content.as_mut_slice()).await?;
let recv_id = ChunkId::calculate(content.as_slice()).await?;
return Ok(recv_id);
} else {
task::sleep(Duration::from_millis(500)).await;
}
}
}More examples
examples/double_source.rs (line 10)
8 9 10 11 12 13 14 15 16 17 18 19 20
async fn watch_recv_chunk(stack: StackGuard, chunkid: ChunkId) -> BuckyResult<ChunkId> {
loop {
let ret = stack.ndn().chunk_manager().store().get(&chunkid).await;
if let Ok(mut reader) = ret {
let mut content = vec![0u8; chunkid.len()];
let _ = reader.read(content.as_mut_slice()).await?;
let recv_id = ChunkId::calculate(content.as_slice()).await?;
return Ok(recv_id);
} else {
task::sleep(Duration::from_millis(500)).await;
}
}
}examples/upload_download.rs (line 13)
11 12 13 14 15 16 17 18 19 20 21 22 23
async fn watch_recv_chunk(stack: StackGuard, chunkid: ChunkId) -> BuckyResult<ChunkId> {
loop {
let ret = stack.ndn().chunk_manager().store().get(&chunkid).await;
if let Ok(mut reader) = ret {
let mut content = vec![0u8; chunkid.len()];
let _ = reader.read(content.as_mut_slice()).await?;
let recv_id = ChunkId::calculate(content.as_slice()).await?;
return Ok(recv_id);
} else {
task::sleep(Duration::from_millis(500)).await;
}
}
}examples/upload_from_path.rs (line 26)
24 25 26 27 28 29 30 31 32 33 34 35 36
async fn watch_recv_chunk(stack: StackGuard, chunkid: ChunkId) -> BuckyResult<ChunkId> {
loop {
let ret = stack.ndn().chunk_manager().store().get(&chunkid).await;
if let Ok(mut reader) = ret {
let mut content = vec![0u8; chunkid.len()];
let _ = reader.read(content.as_mut_slice()).await?;
let recv_id = ChunkId::calculate(content.as_slice()).await?;
return Ok(recv_id);
} else {
task::sleep(Duration::from_millis(500)).await;
}
}
}pub fn close(&self)
pub fn reset_sn_list(&self, sn_list: Vec<Device>) -> PingClients
pub async fn reset_endpoints(&self, endpoints: &Vec<Endpoint>) -> PingClients
Trait Implementations§
source§impl Clone for StackGuard
impl Clone for StackGuard
source§fn clone(&self) -> StackGuard
fn clone(&self) -> StackGuard
Returns a copy of the value. Read more
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read more