public void Send(IcmpEchoSender.SendEchoInfo info, Action<IList<SendResult<IcmpEchoResponseDatagram>>> finished) { IPEndPoint endPoint = null; var finishedResult = new List<SendResult<IcmpEchoResponseDatagram>>(); var senderImpl = new IcmpTracertSenderImpl(); var lastTtl = 1; var manualResetevent = new ManualResetEvent(false); while (endPoint == null || endPoint.Address != info.IpAddress) { senderImpl.Send(new SendTracertInfo(info, lastTtl++), result => { endPoint = result.EndPoint as IPEndPoint; finishedResult.Add(result); manualResetevent.Set(); }); info.IncreaseSequence(); manualResetevent.WaitOne(); manualResetevent.Reset(); } senderImpl.CloseHost(); finished(finishedResult); }
public SendTracertInfo(IcmpEchoSender.SendEchoInfo echoInfo, int ttl) : this(echoInfo.IpAddress, echoInfo.ReceiveTimeout, echoInfo.Identifier, echoInfo.Sequence, echoInfo.Data, ttl) { }