Add extension 50/317450/7
authordongkwan <dk3776.kim@samsung.com>
Wed, 11 Sep 2024 05:44:54 +0000 (14:44 +0900)
committerdongkwan <dk3776.kim@samsung.com>
Wed, 11 Sep 2024 06:20:52 +0000 (15:20 +0900)
 add codes for rust -e(extension) option.

 - extern rpc_port_get_peer_info
 - extern rpc_port_stub_has_pending_request
 - has_pending_pending rust style wrap up function
 - get_peer_info rust style wrap up function
 - few unit tests code

Change-Id: I8af83b5c1642ef4c47421b3ad2db33c5c6d80c28
Signed-off-by: dongkwan <dk3776.kim@samsung.com>
src/rust-rpc-port/src/lib.rs
src/rust-rpc-port/src/stub/mod.rs
src/rust-rpc-port/src/stub/tests.rs
src/rust-rpc-port/src/tests.rs

index 63967bc4e776ebaa85eab958308e41d6161f3229..7b634c2ea8aaeb4a8568d5b55678e1c39d2df7a5 100644 (file)
@@ -49,6 +49,7 @@ extern "C" {
     ) -> i32;
     fn rpc_port_set_private_sharing(h: *mut c_void, path: *const c_char) -> i32;
     fn rpc_port_unset_private_sharing(h: *mut c_void) -> i32;
+    fn rpc_port_get_peer_info(rpc_port_h: *mut c_void, pid_t: *mut i32, uid_t: *mut u32) -> i32;
 }
 
 impl Port {
@@ -115,4 +116,16 @@ impl Port {
             Ok(())
         }
     }
+
+    pub fn get_peer_info(&self) -> Result<(i32, u32), i32>
+    {
+        let mut pid = -1;
+        let mut uid = 0;
+        let ret = unsafe { rpc_port_get_peer_info(self.handle, &mut pid, &mut uid) };
+        if ret != 0 {
+            Err(ret)
+        } else {
+            Ok((pid, uid))
+        }
+    }
 }
index 61f12b5455068853cf15890957a0f5854e4c3d56..344e45b4d0f49b675c38944cf9f10e3b9f42dda0 100644 (file)
@@ -11,6 +11,7 @@ extern "C" {
     fn rpc_port_stub_listen(h: *mut c_void) -> i32;
     fn rpc_port_stub_add_privilege(h: *mut c_void, privilege: *const c_char) -> i32;
     fn rpc_port_stub_set_trusted(h: *mut c_void, trusted: bool) -> i32;
+    fn rpc_port_stub_has_pending_request(rpc_port_h: *mut c_void, has_request: *mut bool) -> i32;
     fn rpc_port_stub_get_port(
         h: *mut c_void,
         port_type: super::CPortType,
@@ -106,6 +107,16 @@ impl<'b> Stub<'b> {
         }
     }
 
+    pub fn has_pending_request(&self) -> Result<bool, i32> {
+        let mut has_request: bool = false;
+        let ret = unsafe { rpc_port_stub_has_pending_request(self.handle, &mut has_request) };
+        if ret == 0 {
+            Ok(has_request)
+        } else {
+            Err(ret)
+        }
+    }
+
     pub fn add_privilege(&self, privilege: &str) {
         let pri = CString::new(privilege).expect("CString::new failed");
         let ret = unsafe { rpc_port_stub_add_privilege(self.handle, pri.as_ptr()) };
index ccbc88fe20107c1334ebbff45c5d6ff280c85ef8..7a8a1b2e0cac1dfd431c9a89883113f2c60a89e5 100644 (file)
@@ -42,3 +42,10 @@ fn test_stub_get_port_n() {
     let stub = Stub::try_new("test").unwrap();
     let _ret = stub.get_port(&crate::PortType::Main, "inst1");
 }
+
+#[test]
+fn test_stub_has_pending_request() {
+    let stub = Stub::try_new("test").unwrap();
+    let has_request = stub.has_pending_request().unwrap();
+    assert_eq!(false, has_request);
+}
\ No newline at end of file
index bf5701ce09b40dd60b62384887830847a4bd6c44..569c0636736ccd47f41e8b173144b31362490f26 100644 (file)
@@ -46,3 +46,10 @@ fn test_port_unset_private_sharing_n() {
     let port = Port::new();
     port.unset_private_sharing();
 }
+
+#[test]
+#[should_panic]
+fn test_port_get_peer_info_n() {
+    let port = Port::new();
+    let (pid, uid) = port.get_peer_info().unwrap();
+}