@@ -931,23 +931,45 @@ impl Agent {
931
931
/// * `req` - Transfer request handle after `post_xfer_req`
932
932
///
933
933
/// # Returns
934
- /// A handle to the backend used for the transfer
934
+ /// Name of the backend used for the transfer
935
935
///
936
936
/// # Errors
937
937
/// Returns a NixlError if the operation fails
938
- pub fn query_xfer_backend ( & self , req : & XferRequest ) -> Result < Backend , NixlError > {
939
- let mut backend = std:: ptr:: null_mut ( ) ;
938
+ pub fn query_xfer_backend ( & self , req : & XferRequest ) -> Result < String , NixlError > {
939
+ let mut backend_type_ptr: * mut std:: ffi:: c_void = std:: ptr:: null_mut ( ) ;
940
+ let mut backend_type_size: usize = 0 ;
941
+
940
942
let inner_guard = self . inner . write ( ) . unwrap ( ) ;
941
943
let status = unsafe {
942
- nixl_capi_query_xfer_backend (
944
+ nixl_capi_query_xfer_backend_type (
943
945
inner_guard. handle . as_ptr ( ) ,
944
946
req. handle ( ) ,
945
- & mut backend
947
+ & mut backend_type_ptr,
948
+ & mut backend_type_size,
946
949
)
947
950
} ;
948
951
match status {
949
952
NIXL_CAPI_SUCCESS => {
950
- Ok ( Backend { inner : NonNull :: new ( backend) . ok_or ( NixlError :: FailedToCreateBackend ) ? } )
953
+ if backend_type_ptr. is_null ( ) || backend_type_size == 0 {
954
+ return Err ( NixlError :: BackendError ) ;
955
+ }
956
+
957
+ // Extract the backend type string from the binary data
958
+ let backend_type = unsafe {
959
+ let slice = std:: slice:: from_raw_parts (
960
+ backend_type_ptr as * const u8 ,
961
+ backend_type_size
962
+ ) ;
963
+ // Handle potential embedded nulls and convert to String
964
+ String :: from_utf8_lossy ( slice) . to_string ( )
965
+ } ;
966
+
967
+ // Verify this backend type exists in our backends map
968
+ if inner_guard. backends . contains_key ( & backend_type) {
969
+ Ok ( backend_type)
970
+ } else {
971
+ Err ( NixlError :: BackendError )
972
+ }
951
973
}
952
974
NIXL_CAPI_ERROR_INVALID_PARAM => Err ( NixlError :: InvalidParam ) ,
953
975
_ => Err ( NixlError :: BackendError ) ,
0 commit comments