in samplecode/mutual-ra/app/src/main.rs [157:232]
fn main() {
let mut mode:Mode = Mode::Server;
let mut args: Vec<_> = env::args().collect();
let mut sign_type = sgx_quote_sign_type_t::SGX_LINKABLE_SIGNATURE;
args.remove(0);
while !args.is_empty() {
match args.remove(0).as_ref() {
"--client" => mode = Mode::Client,
"--server" => mode = Mode::Server,
"--unlink" => sign_type = sgx_quote_sign_type_t::SGX_UNLINKABLE_SIGNATURE,
_ => {
panic!("Only --client/server/unlink is accepted");
}
}
}
let enclave = match init_enclave() {
Ok(r) => {
println!("[+] Init Enclave Successful {}!", r.geteid());
r
},
Err(x) => {
println!("[-] Init Enclave Failed {}!", x.as_str());
return;
},
};
match mode {
Mode::Server => {
println!("Running as server...");
let listener = TcpListener::bind("0.0.0.0:3443").unwrap();
//loop{
match listener.accept() {
Ok((socket, addr)) => {
println!("new client from {:?}", addr);
let mut retval = sgx_status_t::SGX_SUCCESS;
let result = unsafe {
run_server(enclave.geteid(), &mut retval, socket.as_raw_fd(), sign_type)
};
match result {
sgx_status_t::SGX_SUCCESS => {
println!("ECALL success!");
},
_ => {
println!("[-] ECALL Enclave Failed {}!", result.as_str());
return;
}
}
}
Err(e) => println!("couldn't get client: {:?}", e),
}
//} //loop
}
Mode::Client => {
println!("Running as client...");
let socket = TcpStream::connect("localhost:3443").unwrap();
let mut retval = sgx_status_t::SGX_SUCCESS;
let result = unsafe {
run_client(enclave.geteid(), &mut retval, socket.as_raw_fd(), sign_type)
};
match result {
sgx_status_t::SGX_SUCCESS => {
println!("ECALL success!");
},
_ => {
println!("[-] ECALL Enclave Failed {}!", result.as_str());
return;
}
}
}
}
println!("[+] Done!");
enclave.destroy();
}