use openvpn_ffi; use std::collections::HashMap; use talpid_ipc::{IpcClient, IpcServerId}; error_chain! { errors { IpcSendingError { description("Failed while sending an event over the IPC channel") } } } /// Struct processing OpenVPN events and notifies listeners over IPC pub struct EventProcessor { ipc_client: IpcClient<(openvpn_ffi::OpenVpnPluginEvent, HashMap)>, } impl EventProcessor { pub fn new(server_id: IpcServerId) -> Result { debug!("Creating EventProcessor"); let ipc_client = IpcClient::new(server_id); Ok(EventProcessor { ipc_client: ipc_client }) } pub fn process_event(&mut self, event: openvpn_ffi::OpenVpnPluginEvent, env: HashMap) -> Result<()> { trace!("Processing \"{:?}\" event", event); self.ipc_client.send(&(event, env)).chain_err(|| ErrorKind::IpcSendingError) } } impl Drop for EventProcessor { fn drop(&mut self) { // TODO(linus): If we need, this is where we send some shutdown event or similar to core. debug!("Dropping EventProcessor"); } }