1 20 21 22 package org.snmp4j.agent.mo.snmp; 23 24 import org.snmp4j.agent.mo.MOMutableColumn; 25 import org.snmp4j.agent.MOAccess; 26 import org.snmp4j.smi.Variable; 27 import org.snmp4j.smi.SMIConstants; 28 import org.snmp4j.smi.OctetString; 29 import org.snmp4j.mp.SnmpConstants; 30 import java.util.StringTokenizer ; 31 import java.util.Set ; 32 import java.util.HashSet ; 33 import java.util.Collection ; 34 35 public class SnmpTagList extends MOMutableColumn { 36 37 private static final OctetString TAG_DELIMITER = new OctetString(" \t\r\n"); 38 39 public SnmpTagList(int columnID, MOAccess access, 40 Variable defaultValue, boolean mutableInService) { 41 super(columnID, SMIConstants.SYNTAX_OCTET_STRING, 42 access, defaultValue, mutableInService); 43 } 44 45 public synchronized int validate(Variable newValue, Variable oldValue) { 46 int status = super.validate(newValue, oldValue); 47 if (status == SnmpConstants.SNMP_ERROR_SUCCESS) { 48 return isValidTagList(newValue); 49 } 50 return status; 51 } 52 53 public static Set getTags(OctetString tagList) { 54 Collection tags = OctetString.split(tagList, TAG_DELIMITER); 55 HashSet list = new HashSet (tags); 56 return list; 57 } 58 59 public static int isValidTagList(Variable newValue) { 60 if (!(newValue instanceof OctetString)) { 61 return SnmpConstants.SNMP_ERROR_WRONG_TYPE; 62 } 63 OctetString os = (OctetString)newValue; 64 if (os.length() > 255) { 65 return SnmpConstants.SNMP_ERROR_WRONG_LENGTH; 66 } 67 else if (os.length() > 0) { 68 if (SnmpTagValue.isDelimiter(os.get(0)) || 69 SnmpTagValue.isDelimiter(os.get(os.length()-1))) { 70 return SnmpConstants.SNMP_ERROR_BAD_VALUE; 71 } 72 boolean lastWasDelimiter = false; 73 for (int i = 0; i < os.length()-1; i++) { 74 boolean isDelimiter = SnmpTagValue.isDelimiter(os.get(i)); 75 if (lastWasDelimiter && isDelimiter) { 76 return SnmpConstants.SNMP_ERROR_BAD_VALUE; 77 } 78 lastWasDelimiter = isDelimiter; 79 } 80 } 81 return SnmpConstants.SNMP_ERROR_SUCCESS; 82 } 83 } 84 | Popular Tags |