1ca0551cfSopenharmony_ci/* 2ca0551cfSopenharmony_ci * Copyright (C) 2023 Huawei Device Co., Ltd. 3ca0551cfSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4ca0551cfSopenharmony_ci * you may not use this file except in compliance with the License. 5ca0551cfSopenharmony_ci * You may obtain a copy of the License at 6ca0551cfSopenharmony_ci * 7ca0551cfSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8ca0551cfSopenharmony_ci * 9ca0551cfSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10ca0551cfSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11ca0551cfSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12ca0551cfSopenharmony_ci * See the License for the specific language governing permissions and 13ca0551cfSopenharmony_ci * limitations under the License. 14ca0551cfSopenharmony_ci */ 15ca0551cfSopenharmony_ci#![allow(unused_variables)] 16ca0551cfSopenharmony_ci 17ca0551cfSopenharmony_ci//! IPC test server 18ca0551cfSopenharmony_ci 19ca0551cfSopenharmony_ciextern crate ipc_rust; 20ca0551cfSopenharmony_ciextern crate rust_idl_ipc_test_service; 21ca0551cfSopenharmony_ci 22ca0551cfSopenharmony_ciuse std::ptr; 23ca0551cfSopenharmony_ciuse std::ffi::{c_char, CString}; 24ca0551cfSopenharmony_ci 25ca0551cfSopenharmony_ciuse ipc_rust::{IRemoteBroker, join_work_thread, Result, add_service}; 26ca0551cfSopenharmony_ciuse rust_idl_ipc_test_service::{IIdlTestService, IdlTestServiceStub}; 27ca0551cfSopenharmony_ci 28ca0551cfSopenharmony_ciconst IPC_TEST_SERVICE_ID: i32 = 1118; 29ca0551cfSopenharmony_ci 30ca0551cfSopenharmony_ci#[repr(C)] 31ca0551cfSopenharmony_cistruct TokenInfoParams { 32ca0551cfSopenharmony_ci dcaps_num: i32, 33ca0551cfSopenharmony_ci perms_num: i32, 34ca0551cfSopenharmony_ci acls_num: i32, 35ca0551cfSopenharmony_ci dcaps: *const *const c_char, 36ca0551cfSopenharmony_ci perms: *const *const c_char, 37ca0551cfSopenharmony_ci acls: *const *const c_char, 38ca0551cfSopenharmony_ci process_name: *const c_char, 39ca0551cfSopenharmony_ci apl_str: *const c_char, 40ca0551cfSopenharmony_ci} 41ca0551cfSopenharmony_ci 42ca0551cfSopenharmony_cifn init_access_token() 43ca0551cfSopenharmony_ci{ 44ca0551cfSopenharmony_ci let name = CString::new("com.ipc.test").expect("process name is invalid"); 45ca0551cfSopenharmony_ci let apl = CString::new("normal").expect("apl string is invalid"); 46ca0551cfSopenharmony_ci let mut param = TokenInfoParams { 47ca0551cfSopenharmony_ci dcaps_num: 0, 48ca0551cfSopenharmony_ci perms_num: 0, 49ca0551cfSopenharmony_ci acls_num: 0, 50ca0551cfSopenharmony_ci dcaps: ptr::null(), 51ca0551cfSopenharmony_ci perms: ptr::null(), 52ca0551cfSopenharmony_ci acls: ptr::null(), 53ca0551cfSopenharmony_ci process_name: name.as_ptr(), 54ca0551cfSopenharmony_ci apl_str: apl.as_ptr(), 55ca0551cfSopenharmony_ci }; 56ca0551cfSopenharmony_ci 57ca0551cfSopenharmony_ci unsafe { 58ca0551cfSopenharmony_ci let token_id = GetAccessTokenId(&mut param as *mut TokenInfoParams); 59ca0551cfSopenharmony_ci SetSelfTokenID(token_id); 60ca0551cfSopenharmony_ci } 61ca0551cfSopenharmony_ci} 62ca0551cfSopenharmony_ci 63ca0551cfSopenharmony_ciextern "C" { 64ca0551cfSopenharmony_ci fn GetAccessTokenId(tokenInfo: *mut TokenInfoParams) -> u64; 65ca0551cfSopenharmony_ci fn SetSelfTokenID(tokenID: u64) -> i32; 66ca0551cfSopenharmony_ci} 67ca0551cfSopenharmony_ci 68ca0551cfSopenharmony_ci/// test.ipc.ITestService type 69ca0551cfSopenharmony_cipub struct TestService; 70ca0551cfSopenharmony_ci 71ca0551cfSopenharmony_ciimpl IIdlTestService for TestService { 72ca0551cfSopenharmony_ci fn idl_ipc_test_basic_001(&self) -> Result<()> { 73ca0551cfSopenharmony_ci println!("idl_ipc_test_basic_001 start"); 74ca0551cfSopenharmony_ci Ok(()) 75ca0551cfSopenharmony_ci } 76ca0551cfSopenharmony_ci 77ca0551cfSopenharmony_ci fn idl_ipc_test_basic_002(&self) -> Result<()> { 78ca0551cfSopenharmony_ci println!("idl_ipc_test_basic_002 start"); 79ca0551cfSopenharmony_ci Ok(()) 80ca0551cfSopenharmony_ci } 81ca0551cfSopenharmony_ci 82ca0551cfSopenharmony_ci fn idl_ipc_test_basic_101(&self, i_bool: &bool) -> Result<bool>{ 83ca0551cfSopenharmony_ci println!("idl_ipc_test_basic_101 start -> {}", i_bool); 84ca0551cfSopenharmony_ci Ok(!i_bool) 85ca0551cfSopenharmony_ci } 86ca0551cfSopenharmony_ci 87ca0551cfSopenharmony_ci fn idl_ipc_test_basic_102(&self, i_byte: &i8) -> Result<i8>{ 88ca0551cfSopenharmony_ci println!("idl_ipc_test_basic_102 start -> {}", i_byte); 89ca0551cfSopenharmony_ci Ok(i_byte * 2) 90ca0551cfSopenharmony_ci } 91ca0551cfSopenharmony_ci 92ca0551cfSopenharmony_ci fn idl_ipc_test_basic_103(&self, i_short: &i16) -> Result<i16>{ 93ca0551cfSopenharmony_ci println!("idl_ipc_test_basic_103 start -> {}", i_short); 94ca0551cfSopenharmony_ci Ok(i_short * 2) 95ca0551cfSopenharmony_ci } 96ca0551cfSopenharmony_ci 97ca0551cfSopenharmony_ci fn idl_ipc_test_basic_104(&self, i_int: &i32) -> Result<i32>{ 98ca0551cfSopenharmony_ci println!("idl_ipc_test_basic_104 start -> {}", i_int); 99ca0551cfSopenharmony_ci Ok(i_int * 2) 100ca0551cfSopenharmony_ci } 101ca0551cfSopenharmony_ci 102ca0551cfSopenharmony_ci fn idl_ipc_test_basic_105(&self, i_long: &i64) -> Result<i64>{ 103ca0551cfSopenharmony_ci println!("idl_ipc_test_basic_105 start -> {}", i_long); 104ca0551cfSopenharmony_ci Ok(i_long * 2) 105ca0551cfSopenharmony_ci } 106ca0551cfSopenharmony_ci 107ca0551cfSopenharmony_ci fn idl_ipc_test_basic_106(&self, i_float: &f32) -> Result<f32>{ 108ca0551cfSopenharmony_ci println!("idl_ipc_test_basic_106 start -> {}", i_float); 109ca0551cfSopenharmony_ci Ok(*i_float * 2.0) 110ca0551cfSopenharmony_ci } 111ca0551cfSopenharmony_ci 112ca0551cfSopenharmony_ci fn idl_ipc_test_basic_107(&self, i_double: &f64) -> Result<f64>{ 113ca0551cfSopenharmony_ci println!("idl_ipc_test_basic_107 start -> {}", i_double); 114ca0551cfSopenharmony_ci Ok(*i_double * 2.0) 115ca0551cfSopenharmony_ci } 116ca0551cfSopenharmony_ci 117ca0551cfSopenharmony_ci fn idl_ipc_test_basic_108(&self, i_string: &str) -> Result<String>{ 118ca0551cfSopenharmony_ci println!("idl_ipc_test_basic_108 start -> {}", i_string); 119ca0551cfSopenharmony_ci let mut result = String::from(i_string); 120ca0551cfSopenharmony_ci result.push_str(i_string); 121ca0551cfSopenharmony_ci Ok(result.to_string()) 122ca0551cfSopenharmony_ci } 123ca0551cfSopenharmony_ci 124ca0551cfSopenharmony_ci fn idl_ipc_test_basic_199(&self, i_bool: &bool, i_long: &i64, i_float: &f32, 125ca0551cfSopenharmony_ci i_double: &f64, i_string: &str) -> Result<bool>{ 126ca0551cfSopenharmony_ci println!("idl_ipc_test_basic_199 start -> {} - {} - {} - {} - {}", i_bool, i_long, i_float, i_double, i_string); 127ca0551cfSopenharmony_ci Ok(true) 128ca0551cfSopenharmony_ci } 129ca0551cfSopenharmony_ci} 130ca0551cfSopenharmony_ci 131ca0551cfSopenharmony_ciimpl IRemoteBroker for TestService {} 132ca0551cfSopenharmony_ci 133ca0551cfSopenharmony_cifn main() { 134ca0551cfSopenharmony_ci init_access_token(); 135ca0551cfSopenharmony_ci // create stub 136ca0551cfSopenharmony_ci let service = IdlTestServiceStub::new_remote_stub(TestService).expect("create TestService success"); 137ca0551cfSopenharmony_ci add_service(&service.as_object().expect("get IIdlTestService service failed"), 138ca0551cfSopenharmony_ci IPC_TEST_SERVICE_ID).expect("add server to samgr failed"); 139ca0551cfSopenharmony_ci println!("join to ipc work thread"); 140ca0551cfSopenharmony_ci join_work_thread(); 141ca0551cfSopenharmony_ci} 142