//
// 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
+}