Juan Lang : inetmib1: Support querying the MIB2 number of interfaces.
Alexandre Julliard
julliard at winehq.org
Wed Jun 25 04:47:33 CDT 2008
Module: wine
Branch: master
Commit: f913252ea2d94bc9cf732b716419b126a8361f27
URL: http://source.winehq.org/git/wine.git/?a=commit;h=f913252ea2d94bc9cf732b716419b126a8361f27
Author: Juan Lang <juan.lang at gmail.com>
Date: Tue May 20 20:53:17 2008 -0700
inetmib1: Support querying the MIB2 number of interfaces.
---
dlls/inetmib1/main.c | 53 +++++++++++++++++++++++++++++++++++++++++++-
dlls/inetmib1/tests/main.c | 2 -
2 files changed, 52 insertions(+), 3 deletions(-)
diff --git a/dlls/inetmib1/main.c b/dlls/inetmib1/main.c
index 5e87b8c..be2d3b9 100644
--- a/dlls/inetmib1/main.c
+++ b/dlls/inetmib1/main.c
@@ -48,6 +48,15 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
return TRUE;
}
+/**
+ * Utility functions
+ */
+static void copyInt(AsnAny *value, void *src)
+{
+ value->asnType = ASN_INTEGER;
+ value->asnValue.number = *(DWORD *)src;
+}
+
static UINT mib2[] = { 1,3,6,1,2,1 };
static UINT mib2System[] = { 1,3,6,1,2,1,1 };
@@ -76,9 +85,51 @@ static void mib2IfNumberInit(void)
}
}
+static BOOL mib2IfNumberQuery(BYTE bPduType, SnmpVarBind *pVarBind,
+ AsnInteger32 *pErrorStatus)
+{
+ AsnObjectIdentifier numberOid = DEFINE_OID(mib2IfNumber);
+
+ TRACE("(0x%02x, %s, %p)\n", bPduType, SnmpUtilOidToA(&pVarBind->name),
+ pErrorStatus);
+
+ switch (bPduType)
+ {
+ case SNMP_PDU_GET:
+ case SNMP_PDU_GETNEXT:
+ if ((bPduType == SNMP_PDU_GET &&
+ !SnmpUtilOidNCmp(&pVarBind->name, &numberOid, numberOid.idLength))
+ || SnmpUtilOidNCmp(&pVarBind->name, &numberOid, numberOid.idLength)
+ < 0)
+ {
+ DWORD numIfs = ifTable ? ifTable->dwNumEntries : 0;
+
+ copyInt(&pVarBind->value, &numIfs);
+ if (bPduType == SNMP_PDU_GETNEXT)
+ SnmpUtilOidCpy(&pVarBind->name, &numberOid);
+ *pErrorStatus = SNMP_ERRORSTATUS_NOERROR;
+ }
+ else
+ {
+ *pErrorStatus = SNMP_ERRORSTATUS_NOSUCHNAME;
+ /* Caller deals with OID if bPduType == SNMP_PDU_GETNEXT, so don't
+ * need to set it here.
+ */
+ }
+ 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 },
+ { DEFINE_OID(mib2IfNumber), mib2IfNumberInit, mib2IfNumberQuery },
};
static UINT minSupportedIDLength;
diff --git a/dlls/inetmib1/tests/main.c b/dlls/inetmib1/tests/main.c
index 6e4627e..71bf141 100644
--- a/dlls/inetmib1/tests/main.c
+++ b/dlls/inetmib1/tests/main.c
@@ -132,11 +132,9 @@ static void testQuery(void)
moreData = TRUE;
ret = pQuery(SNMP_PDU_GETNEXT, &list, &error, &index);
ok(ret, "SnmpExtensionQuery failed: %d\n", GetLastError());
- todo_wine {
ok(error == SNMP_ERRORSTATUS_NOERROR,
"expected SNMP_ERRORSTATUS_NOERROR, got %d\n", error);
ok(index == 0, "expected index 0, got %d\n", index);
- }
vars[0].name.idLength = sizeof(mib2If) / sizeof(mib2If[0]);
vars[0].name.ids = mib2If;
ok(!SnmpUtilOidNCmp(&vars2[0].name, &vars[0].name, vars[0].name.idLength),
More information about the wine-cvs
mailing list