@@ -39,6 +39,18 @@ use libdd_common_ffi::slice::{AsBytes, CharSlice};
3939use libdd_common_ffi:: { self as ffi, MaybeError } ;
4040use libdd_dogstatsd_client:: DogStatsDActionOwned ;
4141use libdd_telemetry:: {
42+ #[ cfg( unix) ]
43+ use datadog_sidecar:: { connect_worker_unix, start_master_listener_unix} ;
44+ #[ cfg( windows) ]
45+ use datadog_sidecar:: {
46+ connect_worker_windows, start_master_listener_windows, transport_from_owned_handle,
47+ } ;
48+ use datadog_trace_utils:: msgpack_encoder;
49+ use ddcommon:: tag:: Tag ;
50+ use ddcommon:: Endpoint ;
51+ use ddcommon_ffi:: slice:: { AsBytes , CharSlice } ;
52+ use ddcommon_ffi:: { self as ffi, MaybeError } ;
53+ use ddtelemetry:: {
4254 data:: { self , Dependency , Integration } ,
4355 worker:: { LifecycleAction , LogIdentifier , TelemetryActions } ,
4456} ;
@@ -305,8 +317,6 @@ pub extern "C" fn ddog_remote_config_reader_drop(_: Box<RemoteConfigReader>) {}
305317#[ no_mangle]
306318pub extern "C" fn ddog_sidecar_transport_drop ( _: Box < SidecarTransport > ) { }
307319
308- /// # Safety
309- /// Caller must ensure the process is safe to fork, at the time when this method is called
310320#[ no_mangle]
311321pub extern "C" fn ddog_sidecar_connect ( connection : & mut * mut SidecarTransport ) -> MaybeError {
312322 let cfg = datadog_sidecar:: config:: FromEnv :: config ( ) ;
@@ -317,6 +327,38 @@ pub extern "C" fn ddog_sidecar_connect(connection: &mut *mut SidecarTransport) -
317327 MaybeError :: None
318328}
319329
330+ #[ no_mangle]
331+ pub extern "C" fn ddog_sidecar_connect_master ( master_pid : i32 ) -> MaybeError {
332+ #[ cfg( unix) ]
333+ {
334+ try_c ! ( start_master_listener_unix( master_pid) ) ;
335+ }
336+ #[ cfg( windows) ]
337+ {
338+ try_c ! ( start_master_listener_windows( master_pid) ) ;
339+ }
340+ MaybeError :: None
341+ }
342+
343+ #[ no_mangle]
344+ pub extern "C" fn ddog_sidecar_connect_worker (
345+ master_pid : i32 ,
346+ connection : & mut * mut SidecarTransport ,
347+ ) -> MaybeError {
348+ #[ cfg( unix) ]
349+ {
350+ let transport = Box :: new ( try_c ! ( connect_worker_unix( master_pid) ) ) ;
351+ * connection = Box :: into_raw ( transport) ;
352+ }
353+ #[ cfg( windows) ]
354+ {
355+ let handle = try_c ! ( connect_worker_windows( master_pid) ) ;
356+ let transport = Box :: new ( try_c ! ( transport_from_owned_handle( handle) ) ) ;
357+ * connection = Box :: into_raw ( transport) ;
358+ }
359+ MaybeError :: None
360+ }
361+
320362#[ no_mangle]
321363pub extern "C" fn ddog_sidecar_ping ( transport : & mut Box < SidecarTransport > ) -> MaybeError {
322364 try_c ! ( blocking:: ping( transport) ) ;
0 commit comments