Juan Lang : inetmib1: Support the MIB2 UDP statistics.

Alexandre Julliard julliard at winehq.org
Wed Jun 25 16:44:45 CDT 2008


Module: wine
Branch: master
Commit: 677946941c4b29911dd0d13027a72c9354f292f3
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=677946941c4b29911dd0d13027a72c9354f292f3

Author: Juan Lang <juan.lang at gmail.com>
Date:   Wed Jun 25 09:39:47 2008 -0700

inetmib1: Support the MIB2 UDP statistics.

---

 dlls/inetmib1/main.c |   49 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 49 insertions(+), 0 deletions(-)

diff --git a/dlls/inetmib1/main.c b/dlls/inetmib1/main.c
index 48fad9d..d514653 100644
--- a/dlls/inetmib1/main.c
+++ b/dlls/inetmib1/main.c
@@ -950,6 +950,54 @@ static BOOL mib2TcpQuery(BYTE bPduType, SnmpVarBind *pVarBind,
     return TRUE;
 }
 
+static UINT mib2Udp[] = { 1,3,6,1,2,1,7 };
+static MIB_UDPSTATS udpStats;
+
+static void mib2UdpInit(void)
+{
+    GetUdpStatistics(&udpStats);
+}
+
+static struct structToAsnValue mib2UdpMap[] = {
+    { FIELD_OFFSET(MIB_UDPSTATS, dwInDatagrams), copyInt },
+    { FIELD_OFFSET(MIB_UDPSTATS, dwNoPorts), copyInt },
+    { FIELD_OFFSET(MIB_UDPSTATS, dwInErrors), copyInt },
+    { FIELD_OFFSET(MIB_UDPSTATS, dwOutDatagrams), copyInt },
+};
+
+static BOOL mib2UdpQuery(BYTE bPduType, SnmpVarBind *pVarBind,
+    AsnInteger32 *pErrorStatus)
+{
+    AsnObjectIdentifier myOid = DEFINE_OID(mib2Udp);
+    UINT item;
+
+    TRACE("(0x%02x, %s, %p)\n", bPduType, SnmpUtilOidToA(&pVarBind->name),
+        pErrorStatus);
+
+    switch (bPduType)
+    {
+    case SNMP_PDU_GET:
+    case SNMP_PDU_GETNEXT:
+        *pErrorStatus = getItemFromOid(&pVarBind->name, &myOid, bPduType,
+            &item);
+        if (!*pErrorStatus)
+        {
+            *pErrorStatus = mapStructEntryToValue(mib2UdpMap,
+                DEFINE_SIZEOF(mib2UdpMap), &udpStats, item, bPduType, pVarBind);
+            if (!*pErrorStatus && bPduType == SNMP_PDU_GETNEXT)
+                setOidWithItem(&pVarBind->name, &myOid, item);
+        }
+        break;
+    case SNMP_PDU_SET:
+        *pErrorStatus = SNMP_ERRORSTATUS_READONLY;
+        break;
+    default:
+        FIXME("0x%02x: unsupported PDU type\n", bPduType);
+        *pErrorStatus = SNMP_ERRORSTATUS_NOSUCHNAME;
+    }
+    return TRUE;
+}
+
 /* This list MUST BE lexicographically sorted */
 static struct mibImplementation supportedIDs[] = {
     { DEFINE_OID(mib2IfNumber), mib2IfNumberInit, mib2IfNumberQuery },
@@ -960,6 +1008,7 @@ static struct mibImplementation supportedIDs[] = {
     { DEFINE_OID(mib2IpNet), mib2IpNetInit, mib2IpNetQuery },
     { DEFINE_OID(mib2Icmp), mib2IcmpInit, mib2IcmpQuery },
     { DEFINE_OID(mib2Tcp), mib2TcpInit, mib2TcpQuery },
+    { DEFINE_OID(mib2Udp), mib2UdpInit, mib2UdpQuery },
 };
 static UINT minSupportedIDLength;
 




More information about the wine-cvs mailing list