blob: 813969ad59f8414871c4fb2a16fc7e8ca8844622 [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License..
#![allow(dead_code)]
#![allow(unused_assignments)]
extern crate sgx_types;
extern crate sgx_urts;
use sgx_types::*;
use sgx_urts::SgxEnclave;
use std::env;
use std::str::FromStr;
static ENCLAVE_FILE: &'static str = "enclave.signed.so";
extern {
fn run_server(eid: sgx_enclave_id_t, max_conn: uint8_t) -> sgx_status_t;
}
fn init_enclave() -> SgxResult<SgxEnclave> {
let mut launch_token: sgx_launch_token_t = [0; 1024];
let mut launch_token_updated: i32 = 0;
// call sgx_create_enclave to initialize an enclave instance
// Debug Support: set 2nd parameter to 1
let debug = 1;
let mut misc_attr = sgx_misc_attribute_t {secs_attr: sgx_attributes_t { flags:0, xfrm:0}, misc_select:0};
SgxEnclave::create(ENCLAVE_FILE,
debug,
&mut launch_token,
&mut launch_token_updated,
&mut misc_attr)
}
fn main() {
let mut args: Vec<_> = env::args().collect();
//default max_conn is 30
let mut max_conn = 30;
args.remove(0);
while !args.is_empty() {
match args.remove(0).as_ref() {
"--maxconn" => {
max_conn =
uint8_t::from_str(args.remove(0).as_ref()).expect("error parsing argument");
println!("max connections is: {}", max_conn);
}
_ => {
panic!("Only --maxconn 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;
},
};
println!("[+] Test server in enclave, start!");
let result = unsafe { run_server(enclave.geteid(), max_conn) };
match result {
sgx_status_t::SGX_SUCCESS => {},
_ => {
println!("[-] ECALL Enclave Failed {}!", result.as_str());
}
}
println!("[+] Test Server in enclave, done!");
enclave.destroy();
}