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