KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > snmp4j > agent > agentx > master > AgentXPendingGet


1 /*_############################################################################
2   _##
3   _## SNMP4J-AgentX - AgentXPendingGet.java
4   _##
5   _## Copyright (C) 2005-2007 Frank Fock (SNMP4J.org)
6   _##
7   _## This program is free software; you can redistribute it and/or modify
8   _## it under the terms of the GNU General Public License version 2 as
9   _## published by the Free Software Foundation.
10   _##
11   _## This program is distributed in the hope that it will be useful,
12   _## but WITHOUT ANY WARRANTY; without even the implied warranty of
13   _## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14   _## GNU General Public License for more details.
15   _##
16   _## You should have received a copy of the GNU General Public License
17   _## along with this program; if not, write to the Free Software
18   _## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19   _## MA 02110-1301 USA
20   _##
21   _##########################################################################*/

22
23 package org.snmp4j.agent.agentx.master;
24
25 import org.snmp4j.agent.agentx.AgentXGetNextPDU;
26 import org.snmp4j.agent.request.SnmpRequest;
27 import java.util.LinkedList JavaDoc;
28 import org.snmp4j.smi.OID;
29 import org.snmp4j.agent.MOScope;
30 import java.util.Collection JavaDoc;
31 import org.snmp4j.PDU;
32 import org.snmp4j.agent.agentx.AgentXGetBulkPDU;
33 import java.util.List JavaDoc;
34 import org.snmp4j.agent.agentx.AgentXGetPDU;
35 import org.snmp4j.agent.agentx.AgentXPDU;
36 import org.snmp4j.log.LogFactory;
37 import org.snmp4j.log.LogAdapter;
38 import org.snmp4j.agent.request.SubRequestIterator;
39 import org.snmp4j.agent.request.SubRequestIteratorSupport;
40 import org.snmp4j.agent.request.SubRequest;
41
42 public class AgentXPendingGet extends AbstractAgentXPending {
43
44   private static final LogAdapter logger =
45       LogFactory.getLogger(AgentXPendingGet.class);
46
47   private AgentXPDU agentXRequestPDU;
48   private List JavaDoc searchRanges = new LinkedList JavaDoc();
49
50   private short nonRepeater = 0;
51
52   public AgentXPendingGet(AgentXRegEntry registration,
53                           SnmpRequest request,
54                           AgentXSearchRange searchRange) {
55     super(registration, request);
56     this.searchRanges.add(searchRange);
57   }
58
59   public synchronized void addSearchRange(AgentXSearchRange searchRange) {
60     this.searchRanges.add(searchRange);
61   }
62
63   public void setNonRepeater(short nonRepeater) {
64     this.nonRepeater = nonRepeater;
65   }
66
67   public synchronized void incNonRepeater() {
68     nonRepeater++;
69   }
70
71   public AgentXPDU getAgentXPDU() {
72     if (agentXRequestPDU == null) {
73       createRequestPDU();
74     }
75     return agentXRequestPDU;
76   }
77
78   public Collection JavaDoc getSearchRanges() {
79     return searchRanges;
80   }
81
82   public short getNonRepeater() {
83     return nonRepeater;
84   }
85
86   /**
87    * Creates the AgentX request PDU from the search ranges.
88    */

89   private void createRequestPDU() {
90     SnmpRequest request = (SnmpRequest)
91         ((AgentXSearchRange) searchRanges.get(0))
92         .getReferenceSubRequest().getRequest();
93     PDU requestPDU = request.getInitiatingEvent().getPDU();
94     switch (requestPDU.getType()) {
95       case PDU.GETBULK: {
96         short maxRep = getMaxRepetitions(request, requestPDU);
97         agentXRequestPDU =
98             new AgentXGetBulkPDU(request.getContext(),
99                                  maxRep, nonRepeater,
100                                  (MOScope[]) searchRanges.toArray(
101                                      new MOScope[searchRanges.size()]));
102         break;
103       }
104       case PDU.GET: {
105         OID[] oids = new OID[searchRanges.size()];
106         for (int i = 0; i < oids.length; i++) {
107           AgentXSearchRange sr = (AgentXSearchRange) searchRanges.get(i);
108           oids[i] = sr.getLowerBound();
109         }
110         agentXRequestPDU = new AgentXGetPDU(request.getContext(), oids);
111         break;
112       }
113       case PDU.GETNEXT: {
114         agentXRequestPDU =
115             new AgentXGetNextPDU(request.getContext(),
116                                  (MOScope[]) searchRanges.toArray(
117                                      new MOScope[searchRanges.size()]));
118         break;
119       }
120       default: {
121         logger.error("Failed to create AgentX PDU for PDU type " +
122                      requestPDU.getType());
123       }
124     }
125   }
126
127   private static short getMaxRepetitions(SnmpRequest request, PDU requestPDU) {
128     int maxRep =
129         requestPDU.getMaxRepetitions() - request.getCompleteRepetitions();
130     maxRep = Math.max(0, maxRep);
131     maxRep =
132         Math.min(maxRep, AgentXMasterAgent.getMaxGetBulkRepetitions());
133     return (short) maxRep;
134   }
135
136   public AgentXMasterSession getSession() {
137     return registration.getSession();
138   }
139
140   public SubRequestIterator getReferences() {
141     return new GetSubRequestIterator();
142   }
143
144   public String JavaDoc toString() {
145     return getClass().getName()+"["+super.toStringMembers()+",searchRanges="+
146         searchRanges+"]";
147   }
148
149   class GetSubRequestIterator extends SubRequestIteratorSupport {
150
151     protected GetSubRequestIterator() {
152       super(searchRanges.iterator());
153     }
154
155     protected SubRequest mapToSubRequest(Object JavaDoc element) {
156       return ((AgentXSearchRange)element).getReferenceSubRequest();
157     }
158   }
159 }
160
Popular Tags