01: /*_############################################################################
02: _##
03: _## SNMP4J-Agent - TestAndIncr.java
04: _##
05: _## Copyright (C) 2005-2007 Frank Fock (SNMP4J.org)
06: _##
07: _## Licensed under the Apache License, Version 2.0 (the "License");
08: _## you may not use this file except in compliance with the License.
09: _## You may obtain a copy of the License at
10: _##
11: _## http://www.apache.org/licenses/LICENSE-2.0
12: _##
13: _## Unless required by applicable law or agreed to in writing, software
14: _## distributed under the License is distributed on an "AS IS" BASIS,
15: _## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16: _## See the License for the specific language governing permissions and
17: _## limitations under the License.
18: _##
19: _##########################################################################*/
20:
21: package org.snmp4j.agent.mo.snmp;
22:
23: import org.snmp4j.agent.mo.MOScalar;
24: import org.snmp4j.agent.mo.MOAccessImpl;
25: import org.snmp4j.smi.Integer32;
26: import org.snmp4j.smi.OID;
27: import org.snmp4j.agent.request.SubRequest;
28: import org.snmp4j.mp.SnmpConstants;
29: import org.snmp4j.agent.request.RequestStatus;
30:
31: public class TestAndIncr extends MOScalar {
32:
33: public TestAndIncr(OID oid) {
34: super (oid, MOAccessImpl.ACCESS_READ_WRITE, new Integer32(0));
35: }
36:
37: public void commit(SubRequest request) {
38: RequestStatus status = request.getStatus();
39: int v = ((Integer32) getValue()).getValue();
40: request.setUndoValue(getValue());
41: if (v == Integer.MAX_VALUE) {
42: v = 0;
43: } else {
44: v++;
45: }
46: setValue(new Integer32(v));
47: status.setPhaseComplete(true);
48: }
49:
50: public void prepare(SubRequest request) {
51: super .prepare(request);
52: if (!request.hasError()) {
53: Integer32 value = (Integer32) request.getVariableBinding()
54: .getVariable();
55: if (!getValue().equals(value)) {
56: request.getStatus().setErrorStatus(
57: SnmpConstants.SNMP_ERROR_INCONSISTENT_VALUE);
58: }
59: }
60: }
61:
62: public int isValueOK(SubRequest request) {
63: Integer32 value = (Integer32) request.getVariableBinding()
64: .getVariable();
65: if (value.getValue() < 0) {
66: return SnmpConstants.SNMP_ERROR_WRONG_VALUE;
67: }
68: return SnmpConstants.SNMP_ERROR_SUCCESS;
69: }
70:
71: }
|