2010-01-28 4 views
0

J'utilise la bibliothèque java Mibble pour traiter les fichiers MIB et créer une implémentation MIB pour mon agent snmp. Et avoir un petit problème avec cela:Vérifier si l'objet MIB est DisplayString

Il existe un type DisplayString qui est la représentation de OCTET_STRING mais qui ne peut contenir que des caractères ASCII 7 bits. Il y a aussi un type comme AdminString qui est une autre représentation de OCTET_STRING mais peut contenir tous les caractères ASCII. Donc ma question est: comment distinguer DisplayString (donc je peux vérifier les caractères qui sont plus grands que 126 dans mon implémentation) d'Admin String? J'ai essayé d'utiliser MibTypeTag [1] mais apparemment je ne sais pas comment l'utiliser (des astuces?) et il dit qu '"il est possible de distinguer entre les types en utilisant la même représentation de type primitive ASN.1 (telle que comme DisplayString et IpAddress) »

Mon écrit est pas parfait alors voici ce que je voudrais faire:

if (MibTypeTag == DisplayString) { 
    check for chars greater than 126 
} 
else if (MibTypeTag == AdminString) { 
    awesome! nothing to do! 
} 

Merci à l'avance!

[1] http://www.mibble.org/doc/release/api/net/percederberg/mibble/MibType.html

Répondre

1

Ok, je résolu ce problème.

j'ai décidé de ne pas utiliser getTag() du tout - au lieu que j'ai essayé cet algorithme:

  1. obtenir le type de l'objet (getType()) et vérifier si elle est une instance de StringType

  2. si elle est je reçois symbole de référence de celui-ci:

    MibTypeSymbol mts = (StringType) myObj.getReferenceSymbol()

  3. Je convertir ce MibTypeSymbol en chaîne et comparer à "DisplayString"

    mts.toString.equals ("DisplayString");

Et - pour l'instant - cela fonctionne.

Mayby cette aide pour quelqu'un dans le futur.

Mais quelqu'un peut-il avoir une meilleure idée?