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.agent.mo.MOValueValidationEvent; 30 import org.snmp4j.mp.SnmpConstants; 31 import org.snmp4j.agent.mo.snmp.smi.Constraints; 32 import org.snmp4j.agent.mo.snmp.smi.ConstraintsImpl; 33 import org.snmp4j.agent.mo.snmp.smi.Constraint; 34 import org.snmp4j.agent.mo.snmp.smi.ValueConstraintValidator; 35 import org.snmp4j.PDU; 36 import org.snmp4j.agent.mo.snmp.smi.ValueConstraint; 37 38 46 public class DisplayString extends MOMutableColumn { 47 48 public static final int MIB_SIZE = 0; 49 public static final int MAX_SIZE = 255; 50 51 private Constraints sizeConstraints = new ConstraintsImpl(); 52 53 public DisplayString(int columnID, 54 MOAccess access, 55 Variable defaultValue, 56 boolean mutableInService) { 57 super(columnID, SMIConstants.SYNTAX_OCTET_STRING, 58 access, defaultValue, mutableInService); 59 } 60 61 public DisplayString(int columnID, 62 MOAccess access, 63 Variable defaultValue) { 64 super(columnID, SMIConstants.SYNTAX_OCTET_STRING, 65 access, defaultValue); 66 } 67 68 public DisplayString(int columnID, 69 MOAccess access, 70 Variable defaultValue, 71 boolean mutableInService, int minSize, int maxSize) { 72 super(columnID, SMIConstants.SYNTAX_OCTET_STRING, 73 access, defaultValue, mutableInService); 74 sizeConstraints.add(new Constraint(minSize, maxSize)); 75 } 76 77 public synchronized int validate(Variable newValue, Variable oldValue) { 78 int status = super.validate(newValue, oldValue); 79 if (status == SnmpConstants.SNMP_ERROR_SUCCESS) { 80 status = validateDisplayString(newValue, sizeConstraints); 81 } 82 return status; 83 } 84 85 99 public static int validateDisplayString(Variable displayString, 100 ValueConstraint sizeContraints) { 101 if (displayString instanceof OctetString) { 102 OctetString os = (OctetString)displayString; 103 int status = sizeContraints.validate(displayString); 104 if (status != PDU.noError) { 105 return status; 106 } 107 for (int i=0; i<os.length(); i++) { 108 if (os.get(i) < 0) { 109 return SnmpConstants.SNMP_ERROR_WRONG_VALUE; 110 } 111 if (os.get(i) == '\r') { 112 if (i+1 == os.length()) { 113 return SnmpConstants.SNMP_ERROR_WRONG_VALUE; 114 } 115 else if ((os.get(i+1) != 0) && (os.get(i+1) != '\n')) { 116 return SnmpConstants.SNMP_ERROR_WRONG_VALUE; 117 } 118 } 119 } 120 return SnmpConstants.SNMP_ERROR_SUCCESS; 121 } 122 else { 123 return SnmpConstants.SNMP_ERROR_WRONG_TYPE; 124 } 125 } 126 127 135 public static class DisplayStringValidation extends ValueConstraintValidator 136 { 137 public DisplayStringValidation(Constraints valueConstraint) { 138 super(valueConstraint); 139 } 140 141 public DisplayStringValidation(int minSize, int maxSize) { 142 super(new ConstraintsImpl()); 143 ((ConstraintsImpl) 144 getValueConstraint()).add(new Constraint(minSize, maxSize)); 145 } 146 147 public void validate(MOValueValidationEvent validationEvent) { 148 Variable newValue = validationEvent.getNewValue(); 149 int status = 150 DisplayString.validateDisplayString(newValue, getValueConstraint()); 151 validationEvent.setValidationStatus(status); 152 } 153 } 154 155 } 156 | Popular Tags |