Merge pull request #3011 from akoeplinger/ci-fixes
[mono.git] / mcs / class / System / System.Net.NetworkInformation / TcpStatistics.cs
index 5f8bb3cc87959e0e49bd9141824e175d3de38e3d..6e5fff4fdfe015b3403ad51f8cda8585e76e1fb6 100644 (file)
@@ -1,10 +1,11 @@
 //
 // System.Net.NetworkInformation.TcpStatistics
 //
-// Author:
+// Authors:
 //     Gonzalo Paniagua Javier (gonzalo@novell.com)
+//     Atsushi Enomoto (atsushi@ximian.com)
 //
-// Copyright (c) 2006 Novell, Inc. (http://www.novell.com)
+// Copyright (c) 2006-2007 Novell, Inc. (http://www.novell.com)
 //
 // Permission is hereby granted, free of charge, to any person obtaining
 // a copy of this software and associated documentation files (the
 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
-#if NET_2_0
+using System.Collections.Specialized;
+using System.Globalization;
+
 namespace System.Net.NetworkInformation {
-       public abstract class TcpStatistics {
-               protected TcpStatistics ()
+       class MibTcpStatistics : TcpStatistics
+       {
+               StringDictionary dic;
+
+               public MibTcpStatistics (StringDictionary dic)
+               {
+                       this.dic = dic;
+               }
+
+               long Get (string name)
                {
+                       return dic [name] != null ? long.Parse (dic [name], NumberFormatInfo.InvariantInfo) : 0;
+               }
+
+               public override long ConnectionsAccepted {
+                       get { return Get ("PassiveOpens"); }
+               }
+               public override long ConnectionsInitiated {
+                       get { return Get ("ActiveOpens"); }
+               }
+               public override long CumulativeConnections {
+                       get { return Get ("NumConns"); }
+               }
+               public override long CurrentConnections {
+                       get { return Get ("CurrEstab"); }
+               }
+               public override long ErrorsReceived {
+                       get { return Get ("InErrs"); }
+               }
+               public override long FailedConnectionAttempts {
+                       get { return Get ("AttemptFails"); }
+               }
+               public override long MaximumConnections {
+                       get { return Get ("MaxConn"); }
+               }
+               public override long MaximumTransmissionTimeout {
+                       get { return Get ("RtoMax"); }
+               }
+               public override long MinimumTransmissionTimeout {
+                       get { return Get ("RtoMin"); }
+               }
+               public override long ResetConnections {
+                       get { return Get ("EstabResets"); }
+               }
+               public override long ResetsSent {
+                       get { return Get ("OutRsts"); }
+               }
+               public override long SegmentsReceived {
+                       get { return Get ("InSegs"); }
+               }
+               public override long SegmentsResent {
+                       get { return Get ("RetransSegs"); }
+               }
+               public override long SegmentsSent {
+                       get { return Get ("OutSegs"); }
                }
-               
-               public abstract long ConnectionsAccepted { get; }
-               public abstract long ConnectionsInitiated { get; }
-               public abstract long CumulativeConnections { get; }
-               public abstract long CurrentConnections { get; }
-               public abstract long ErrorsReceived { get; }
-               public abstract long FailedConnectionAttempts { get; }
-               public abstract long MaximumConnections { get; }
-               public abstract long MaximumTransmissionTimeout { get; }
-               public abstract long MinimumTransmissionTimeout { get; }
-               public abstract long ResetConnections { get; }
-               public abstract long ResetsSent { get; }
-               public abstract long SegmentsReceived { get; }
-               public abstract long SegmentsResent { get; }
-               public abstract long SegmentsSent { get; }
        }
-}
+
+#if !MOBILE
+       class Win32TcpStatistics : TcpStatistics
+       {
+               Win32_MIB_TCPSTATS info;
+
+               public Win32TcpStatistics (Win32_MIB_TCPSTATS info)
+               {
+                       this.info = info;
+               }
+
+               public override long ConnectionsAccepted {
+                       get { return info.PassiveOpens; }
+               }
+
+               public override long ConnectionsInitiated {
+                       get { return info.ActiveOpens; }
+               }
+
+               public override long CumulativeConnections {
+                       get { return info.NumConns; }
+               }
+
+               public override long CurrentConnections {
+                       get { return info.CurrEstab; }
+               }
+
+               public override long ErrorsReceived {
+                       get { return info.InErrs; }
+               }
+
+               public override long FailedConnectionAttempts {
+                       get { return info.AttemptFails; }
+               }
+
+               public override long MaximumConnections {
+                       get { return info.MaxConn; }
+               }
+
+               public override long MaximumTransmissionTimeout {
+                       get { return info.RtoMax; }
+               }
+
+               public override long MinimumTransmissionTimeout {
+                       get { return info.RtoMin; }
+               }
+
+               public override long ResetConnections {
+                       get { return info.EstabResets; }
+               }
+
+               public override long ResetsSent {
+                       get { return info.OutRsts; }
+               }
+
+               public override long SegmentsReceived {
+                       get { return info.InSegs; }
+               }
+
+               public override long SegmentsResent {
+                       get { return info.RetransSegs; }
+               }
+
+               public override long SegmentsSent {
+                       get { return info.OutSegs; }
+               }
+       }
+
+       struct Win32_MIB_TCPSTATS
+       {
+               public uint RtoAlgorithm;
+               public uint RtoMin;
+               public uint RtoMax;
+               public uint MaxConn;
+               public uint ActiveOpens;
+               public uint PassiveOpens;
+               public uint AttemptFails;
+               public uint EstabResets;
+               public uint CurrEstab;
+               public uint InSegs;
+               public uint OutSegs;
+               public uint RetransSegs;
+               public uint InErrs;
+               public uint OutRsts;
+               public uint NumConns;
+       }
 #endif
+}