Merge pull request #3007 from directhex/use-mingw64
[mono.git] / mcs / class / System / System.Net.NetworkInformation / IcmpV4Statistics.cs
index eebe240fa7d557e32dc75df208e3a590029e12f4..c3888abeafd736812dd3f58968fbc3d65de2b0a1 100644 (file)
@@ -1,10 +1,11 @@
 //
 // System.Net.NetworkInformation.IcmpV4Statistics
 //
-// 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 IcmpV4Statistics {
-               protected IcmpV4Statistics ()
+       class MibIcmpV4Statistics : IcmpV4Statistics
+       {
+               StringDictionary dic;
+
+               public MibIcmpV4Statistics (StringDictionary dic)
+               {
+                       this.dic = dic;
+               }
+
+               long Get (string name)
                {
+                       return dic [name] != null ? long.Parse (dic [name], NumberFormatInfo.InvariantInfo) : 0;
                }
 
-               public abstract long AddressMaskRepliesReceived { get; }
-               public abstract long AddressMaskRepliesSent { get; }
-               public abstract long AddressMaskRequestsReceived { get; }
-               public abstract long AddressMaskRequestsSent { get; }
-               public abstract long DestinationUnreachableMessagesReceived { get; }
-               public abstract long DestinationUnreachableMessagesSent { get; }
-               public abstract long EchoRepliesReceived { get; }
-               public abstract long EchoRepliesSent { get; }
-               public abstract long EchoRequestsReceived { get; }
-               public abstract long EchoRequestsSent { get; }
-               public abstract long ErrorsReceived { get; }
-               public abstract long ErrorsSent { get; }
-               public abstract long MessagesReceived { get; }
-               public abstract long MessagesSent { get; }
-               public abstract long ParameterProblemsReceived { get; }
-               public abstract long ParameterProblemsSent { get; }
-               public abstract long RedirectsReceived { get; }
-               public abstract long RedirectsSent { get; }
-               public abstract long SourceQuenchesReceived { get; }
-               public abstract long SourceQuenchesSent { get; }
-               public abstract long TimeExceededMessagesReceived { get; }
-               public abstract long TimeExceededMessagesSent { get; }
-               public abstract long TimestampRepliesReceived { get; }
-               public abstract long TimestampRepliesSent { get; }
-               public abstract long TimestampRequestsReceived { get; }
-               public abstract long TimestampRequestsSent { get; }
+               public override long AddressMaskRepliesReceived {
+                       get { return Get ("InAddrMaskReps"); }
+               }
+               public override long AddressMaskRepliesSent {
+                       get { return Get ("OutAddrMaskReps"); }
+               }
+               public override long AddressMaskRequestsReceived {
+                       get { return Get ("InAddrMasks"); }
+               }
+               public override long AddressMaskRequestsSent {
+                       get { return Get ("OutAddrMasks"); }
+               }
+               public override long DestinationUnreachableMessagesReceived {
+                       get { return Get ("InDestUnreachs"); }
+               }
+               public override long DestinationUnreachableMessagesSent {
+                       get { return Get ("OutDestUnreachs"); }
+               }
+               public override long EchoRepliesReceived {
+                       get { return Get ("InEchoReps"); }
+               }
+               public override long EchoRepliesSent {
+                       get { return Get ("OutEchoReps"); }
+               }
+               public override long EchoRequestsReceived {
+                       get { return Get ("InEchos"); }
+               }
+               public override long EchoRequestsSent {
+                       get { return Get ("OutEchos"); }
+               }
+               public override long ErrorsReceived {
+                       get { return Get ("InErrors"); }
+               }
+               public override long ErrorsSent {
+                       get { return Get ("OutErrors"); }
+               }
+               public override long MessagesReceived {
+                       get { return Get ("InMsgs"); }
+               }
+               public override long MessagesSent {
+                       get { return Get ("OutMsgs"); }
+               }
+               public override long ParameterProblemsReceived {
+                       get { return Get ("InParmProbs"); }
+               }
+               public override long ParameterProblemsSent {
+                       get { return Get ("OutParmProbs"); }
+               }
+               public override long RedirectsReceived {
+                       get { return Get ("InRedirects"); }
+               }
+               public override long RedirectsSent {
+                       get { return Get ("OutRedirects"); }
+               }
+               public override long SourceQuenchesReceived {
+                       get { return Get ("InSrcQuenchs"); }
+               }
+               public override long SourceQuenchesSent {
+                       get { return Get ("OutSrcQuenchs"); }
+               }
+               public override long TimeExceededMessagesReceived {
+                       get { return Get ("InTimeExcds"); }
+               }
+               public override long TimeExceededMessagesSent {
+                       get { return Get ("OutTimeExcds"); }
+               }
+               public override long TimestampRepliesReceived {
+                       get { return Get ("InTimestampReps"); }
+               }
+               public override long TimestampRepliesSent {
+                       get { return Get ("OutTimestampReps"); }
+               }
+               public override long TimestampRequestsReceived {
+                       get { return Get ("InTimestamps"); }
+               }
+               public override long TimestampRequestsSent {
+                       get { return Get ("OutTimestamps"); }
+               }
+       }
+
+#if !MOBILE
+       class Win32IcmpV4Statistics : IcmpV4Statistics
+       {
+               Win32_MIBICMPSTATS iin, iout;
+
+               public Win32IcmpV4Statistics (Win32_MIBICMPINFO info)
+               {
+                       iin = info.InStats;
+                       iout = info.OutStats;
+               }
+
+               public override long AddressMaskRepliesReceived {
+                       get { return iin.AddrMaskReps; }
+               }
+               public override long AddressMaskRepliesSent {
+                       get { return iout.AddrMaskReps; }
+               }
+               public override long AddressMaskRequestsReceived {
+                       get { return iin.AddrMasks; }
+               }
+               public override long AddressMaskRequestsSent {
+                       get { return iout.AddrMasks; }
+               }
+               public override long DestinationUnreachableMessagesReceived {
+                       get { return iin.DestUnreachs; }
+               }
+               public override long DestinationUnreachableMessagesSent {
+                       get { return iout.DestUnreachs; }
+               }
+               public override long EchoRepliesReceived {
+                       get { return iin.EchoReps; }
+               }
+               public override long EchoRepliesSent {
+                       get { return iout.EchoReps; }
+               }
+               public override long EchoRequestsReceived {
+                       get { return iin.Echos; }
+               }
+               public override long EchoRequestsSent {
+                       get { return iout.Echos; }
+               }
+               public override long ErrorsReceived {
+                       get { return iin.Errors; }
+               }
+               public override long ErrorsSent {
+                       get { return iout.Errors; }
+               }
+               public override long MessagesReceived {
+                       get { return iin.Msgs; }
+               }
+               public override long MessagesSent {
+                       get { return iout.Msgs; }
+               }
+               public override long ParameterProblemsReceived {
+                       get { return iin.ParmProbs; }
+               }
+               public override long ParameterProblemsSent {
+                       get { return iout.ParmProbs; }
+               }
+               public override long RedirectsReceived {
+                       get { return iin.Redirects; }
+               }
+               public override long RedirectsSent {
+                       get { return iout.Redirects; }
+               }
+               public override long SourceQuenchesReceived {
+                       get { return iin.SrcQuenchs; }
+               }
+               public override long SourceQuenchesSent {
+                       get { return iout.SrcQuenchs; }
+               }
+               public override long TimeExceededMessagesReceived {
+                       get { return iin.TimeExcds; }
+               }
+               public override long TimeExceededMessagesSent {
+                       get { return iout.TimeExcds; }
+               }
+               public override long TimestampRepliesReceived {
+                       get { return iin.TimestampReps; }
+               }
+               public override long TimestampRepliesSent {
+                       get { return iout.TimestampReps; }
+               }
+               public override long TimestampRequestsReceived {
+                       get { return iin.Timestamps; }
+               }
+               public override long TimestampRequestsSent {
+                       get { return iout.Timestamps; }
+               }
+       }
+
+       struct Win32_MIBICMPINFO
+       {
+               public Win32_MIBICMPSTATS InStats;
+               public Win32_MIBICMPSTATS OutStats;
+       }
+
+       struct Win32_MIBICMPSTATS
+       {
+               public uint Msgs;
+               public uint Errors;
+               public uint DestUnreachs;
+               public uint TimeExcds;
+               public uint ParmProbs;
+               public uint SrcQuenchs;
+               public uint Redirects;
+               public uint Echos;
+               public uint EchoReps;
+               public uint Timestamps;
+               public uint TimestampReps;
+               public uint AddrMasks;
+               public uint AddrMaskReps;
        }
-}
 #endif
+}