private void AddInterface(INetworkLog <INetworkInterface> reporter, INetworkInterface iface) { lock (innerLock) { if (observedInterfaces.ContainsKey(reporter)) { if (!observedInterfaces[reporter].Contains(iface)) { observedInterfaces[reporter].Add(iface); wiresharkSender.TryOpenWireshark(); reporter.FrameTransmitted += SendTransmittedFrame; reporter.FrameProcessed += SendTransmittedFrame; } else { if (!wiresharkSender.TryOpenWireshark()) { throw new RecoverableException("The interface is already being logged in this Wireshark instance."); } } } else { observedInterfaces.Add(reporter, new List <INetworkInterface>() { iface }); wiresharkSender.TryOpenWireshark(); reporter.FrameTransmitted += SendTransmittedFrame; reporter.FrameProcessed += SendTransmittedFrame; } } }
public void LogToWireshark(INetworkLog <INetworkInterface> reporter, INetworkInterface iface) { lock (innerLock) { if (IsConfiguredForMediumType(reporter)) { AddInterface(reporter, iface); } } }
private void DetachMedium(INetworkLog <INetworkInterface> reporter) { lock (innerLock) { if (observedMedium.Contains(reporter)) { observedMedium.Remove(reporter); reporter.FrameProcessed -= SendProcessedFrame; } else { throw new RecoverableException("Wireshark doesn't contain this medium"); } } }
private static Wireshark GetConfiguredWireshark(Emulation emulation, INetworkLog <INetworkInterface> reporter, string hostName) { if (reporter is WirelessMedium) { return(CreateWirelessConfiguredWireshark(emulation, hostName)); } else if (reporter is Switch) { return(CreateEthernetConfiguredWireshark(emulation, hostName)); } else { throw new ArgumentException("Expected Switch or WirelessMedium."); } }
private void AddMedium(INetworkLog <INetworkInterface> reporter) { lock (innerLock) { if (!observedMedium.Contains(reporter)) { observedMedium.Add(reporter); wiresharkSender.TryOpenWireshark(); reporter.FrameProcessed += SendProcessedFrame; } else { if (!wiresharkSender.TryOpenWireshark()) { throw new RecoverableException("The medium is already being logged in this Wireshark instance."); } } } }
private bool IsConfiguredForMediumType(INetworkLog <INetworkInterface> medium) { var typeOfInterface = medium.GetType(); lock (innerLock) { if (mediumToLinkLayer[typeOfInterface] == layer) { return(true); } } if (layer == LinkLayer.Wireless_802_15_4) { throw new RecoverableException("Cannot log ethernet traffic to wireless-configured Wireshark."); } else { throw new RecoverableException("Cannot log wireless traffic to ethernet-configured Wireshark."); } }
public void DetachFrom(INetworkLog <INetworkInterface> reporter) { DetachMedium(reporter); }
public static void LogToWireshark(this Emulation emulation, INetworkLog <INetworkInterface> reporter) { GetConfiguredWireshark(emulation, reporter, GetName(reporter)).LogToWireshark(reporter); }