MCPcopy Create free account
hub / github.com/bendudson/EuraliOS / gopher

Function gopher

gopher/src/main.rs:14–49  ·  view source on GitHub ↗
(host: &str, selector: &str)

Source from the content-addressed store, hash-verified

12 message::{self, rcall, MessageData}};
13
14fn gopher(host: &str, selector: &str) -> Result<(MemoryHandle, usize), ()> {
15 let handle = syscalls::open(host, message::O_READ + message::O_WRITE).expect("Couldn't open");
16
17 let mut path: Vec<u8> = selector
18 .as_bytes() // Convert to u8
19 .to_vec();
20 path.extend_from_slice(&[0x0D, 0x0A]); // Append CR LF
21
22 let result = rcall(&handle,
23 message::WRITE, (path.len() as u64).into(),
24 syscalls::MemoryHandle::from_u8_slice(path.as_slice()).into(),
25 None);
26
27 println!("[gopher] Write returned: {:?}", result);
28
29 match rcall(&handle,
30 message::READ, 0.into(),
31 0.into(),
32 None) {
33 Ok((message::DATA,
34 MessageData::Value(length),
35 MessageData::MemoryHandle(mem_handle))) => {
36 syscalls::send(&handle,
37 syscalls::Message::Short(
38 message::CLOSE, 0, 0));
39 return Ok((mem_handle, length as usize));
40 }
41 result => {
42 println!("[gopher] Read returned: {:?}", result);
43 _ = syscalls::send(&handle,
44 syscalls::Message::Short(
45 message::CLOSE, 0, 0));
46 return Err(());
47 }
48 }
49}
50
51enum Command<'a> {
52 Quit,

Callers 1

mainFunction · 0.85

Calls 5

rcallFunction · 0.85
sendFunction · 0.85
as_sliceMethod · 0.80
openFunction · 0.50
lenMethod · 0.45

Tested by

no test coverage detected