ln.skyscanner/crawl/service/ICMP.cs

72 lines
2.2 KiB
C#

// /**
// * File: ICMP.cs
// * Author: haraldwolff
// *
// * This file and it's content is copyrighted by the Author and / or copyright holder.
// * Any use wihtout proper permission is illegal and may lead to legal actions.
// *
// *
// **/
using System;
using System.Net.NetworkInformation;
using ln.skyscanner.crawl.service;
namespace ln.skyscanner.crawl.tests
{
public class ICMP : CrawlService
{
public ICMP()
:base("ping")
{}
public override bool Check(Crawl crawl)
{
using (Ping ping = new Ping())
{
int nSuccess = 0;
long roundTripTime = 0;
for (int n = 0; n < 10; n++)
{
//HostCrawl.setState("ICMP check [{0}/10]", n);
PingReply pingReply = ping.Send(crawl.Host.PrimaryIP, 500);
if (pingReply.Status == IPStatus.Success)
{
nSuccess++;
roundTripTime += pingReply.RoundtripTime;
}
else if ((n > 3) && (nSuccess == 0))
{
break;
}
}
if (nSuccess > 0)
{
roundTripTime /= nSuccess;
crawl.Host.SetHint("ping.success", true);
crawl.Host.SetHint("ping.rta", (int)roundTripTime);
crawl.Host.SetHint("ping.out_of_ten", nSuccess);
crawl.Host.LastSeen = DateTime.Now;
if (crawl.Host.FirstSeen < new DateTime(1970, 1, 2))
crawl.Host.FirstSeen = DateTime.Now;
}
else
{
crawl.Host.SetHint("ping.success", false);
crawl.Host.SetHint("ping.rta", null);
crawl.Host.SetHint("ping.out_of_ten", 0);
}
}
return true;
}
public override bool HostProvidesOption(Crawl crawl, params object[] parameters)
{
return crawl.Host.GetHint("ping.success", false);
}
}
}