/// <summary>
        /// Formats as block-formatted string of an <see cref="ITracerouteResult" />.
        /// </summary>
        /// <param name="traceRouteResult">The data to format.</param>
        /// <returns>The formatted string.</returns>
        public string Format(ITracerouteResult traceRouteResult)
        {
            if (traceRouteResult == null)
            {
                return("<null>");
            }

            StringBuilder returnBuilder = new StringBuilder(traceRouteResult.HopCount * 128);

            returnBuilder.Append("Routing Hops:");

            if (traceRouteResult.HopCount == 0)
            {
                returnBuilder.Append(" No hops found.");
            }
            else
            {
                uint hopCounter = 0;
                foreach (var item in traceRouteResult.Hops)
                {
                    returnBuilder.Append("Hop #").Append(++hopCounter).Append(": ").AppendLine(SnmpAbstraction.IndentLines(this.Format(item)));
                }
            }

            return(returnBuilder.ToString());
        }
        private ActionResult <IStatusReply> DoTraceroute()
        {
            try
            {
                using (var querier = SnmpQuerierFactory.Instance.Create(this.host, this.querierOptions))
                {
                    ITracerouteResult tracerouteResult = querier.Traceroute(this.remotePeerAddress, Convert.ToUInt32(this.count), this.timeout, this.maxHops);

                    return(new TracerouteWebResult(tracerouteResult));
                }
            }
            catch (Exception ex)
            {
                return(new ErrorReply(ex));
            }
        }
 /// <summary>
 /// Construct from the querier interface container.
 /// </summary>
 /// <param name="tracerouteResult">The peers to construct from.</param>
 public TracerouteWebResult(ITracerouteResult tracerouteResult)
 {
     this.hopResultsBacking = (tracerouteResult == null) ? new List <ITracerouteWebHop>() : tracerouteResult.Hops.Select(p => new TracerouteWebHop(p) as ITracerouteWebHop).ToList();
     this.FromAddress       = tracerouteResult.FromAddress?.ToString();
     this.ToAddress         = tracerouteResult.ToAddress?.ToString();
 }
        /// <summary>
        /// Formats a generic object if it's of one of the supported types.
        /// </summary>
        /// <param name="someObject">The object to format.</param>
        /// <returns>The formatted text.</returns>
        public string Format(object someObject)
        {
            if (someObject == null)
            {
                return("<null>");
            }

            IDeviceSystemData asDevSysData = someObject as IDeviceSystemData;

            if (asDevSysData != null)
            {
                return(this.Format(asDevSysData));
            }

            IInterfaceDetails asIfDetails = someObject as IInterfaceDetails;

            if (asIfDetails != null)
            {
                return(this.Format(asIfDetails));
            }

            IInterfaceDetail asIfDetail = someObject as IInterfaceDetail;

            if (asIfDetail != null)
            {
                return(this.Format(asIfDetail));
            }

            IWirelessPeerInfos asWiPeerInfos = someObject as IWirelessPeerInfos;

            if (asWiPeerInfos != null)
            {
                return(this.Format(asWiPeerInfos));
            }

            IWirelessPeerInfo asWiPeerInfo = someObject as IWirelessPeerInfo;

            if (asWiPeerInfo != null)
            {
                return(this.Format(asWiPeerInfo));
            }

            ILinkDetails asLinkDetails = someObject as ILinkDetails;

            if (asLinkDetails != null)
            {
                return(this.Format(asLinkDetails));
            }

            IBgpPeers asBgpPeers = someObject as IBgpPeers;

            if (asBgpPeers != null)
            {
                return(this.Format(asBgpPeers));
            }

            IBgpPeer asBgpPeer = someObject as IBgpPeer;

            if (asBgpPeer != null)
            {
                return(this.Format(asBgpPeer));
            }

            ITracerouteResult asTracerouteResult = someObject as ITracerouteResult;

            if (asTracerouteResult != null)
            {
                return(this.Format(asTracerouteResult));
            }

            ITracerouteHop asTracerouteHop = someObject as ITracerouteHop;

            if (asTracerouteHop != null)
            {
                return(this.Format(asTracerouteHop));
            }

            // fallback: call the object's ToString
            return(someObject.ToString());
        }