1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 package uk.co.westhawk.snmp.beans;
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 import uk.co.westhawk.snmp.stack.*;
52 import uk.co.westhawk.snmp.pdu.*;
53 import uk.co.westhawk.snmp.event.*;
54 import uk.co.westhawk.snmp.util.*;
55 import java.util.*;
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88 public class UsmBeingDiscoveredBean implements RequestPduListener {
89 private static final String version_id = "@(#)$Id: UsmBeingDiscoveredBean.java,v 1.8 2009/03/05 15:51:42 birgita Exp $ Copyright Westhawk Ltd";
90
91 private UsmAgent usmAgent = null;
92 private SnmpContextv3 context = null;
93
94
95 private SnmpContextv3Discovery discEngineIdContextIn;
96 private SnmpContextv3Discovery discTimeLineContextIn;
97
98
99 private SnmpContextv3 discEngineIdContextOut;
100 private SnmpContextv3 discTimeLineContextOut;
101
102
103
104
105
106
107
108
109
110
111 public UsmBeingDiscoveredBean(SnmpContextv3 myContext, UsmAgent myUsmAgent)
112 throws java.io.IOException {
113 usmAgent = myUsmAgent;
114 context = myContext;
115
116 if (AsnObject.debug > 4) {
117 System.out.println(getClass().getName() + " Constructor:"
118 + "usmAgent=" + usmAgent.toString()
119 + "context=" + context.toString());
120 }
121 usmAgent.setSnmpContext(context);
122
123 discEngineIdContextIn = new SnmpContextv3Discovery(context.getSendToHostAddress(),
124 context.getPort(), context.getBindAddress(), context.getTypeSocket());
125 discEngineIdContextIn.setUserName("");
126 discEngineIdContextIn.setUseAuthentication(false);
127 discEngineIdContextIn.setUsePrivacy(false);
128 discEngineIdContextIn.setContextEngineId(SnmpUtilities.toBytes(usmAgent.getSnmpEngineId()));
129 discEngineIdContextIn.setContextName("");
130 discEngineIdContextIn.setUsmAgent(usmAgent);
131
132 discTimeLineContextIn = new SnmpContextv3Discovery(context.getSendToHostAddress(),
133 context.getPort(), context.getBindAddress(), context.getTypeSocket());
134 discTimeLineContextIn.setUserName(context.getUserName());
135 discTimeLineContextIn.setUseAuthentication(context.isUseAuthentication());
136 discTimeLineContextIn.setAuthenticationProtocol(context.getAuthenticationProtocol());
137 discTimeLineContextIn.setUserAuthenticationPassword(context.getUserAuthenticationPassword());
138 discTimeLineContextIn.setUsePrivacy(context.isUsePrivacy());
139 discTimeLineContextIn.setPrivacyProtocol(context.getPrivacyProtocol());
140 discTimeLineContextIn.setUserPrivacyPassword(context.getUserPrivacyPassword());
141 discTimeLineContextIn.setContextEngineId(SnmpUtilities.toBytes(usmAgent.getSnmpEngineId()));
142 discTimeLineContextIn.setContextName("");
143 discTimeLineContextIn.setUsmAgent(usmAgent);
144 }
145
146
147
148
149
150 public void addRequestPduListener(ListeningContextPool lcontext)
151 throws java.io.IOException {
152 if (AsnObject.debug > 4) {
153 System.out.println(getClass().getName()
154 + ".addRequestPduListener(" + lcontext.toString() + ")");
155 }
156 discEngineIdContextIn.addRequestPduListener(this, lcontext);
157 discTimeLineContextIn.addRequestPduListener(this, lcontext);
158 }
159
160
161
162
163
164
165 public void removeRequestPduListener(ListeningContextPool lcontext)
166 throws java.io.IOException {
167 if (AsnObject.debug > 4) {
168 System.out.println(getClass().getName()
169 + ".removeRequestPduListener(" + lcontext.toString() + ")");
170 }
171 discEngineIdContextIn.removeRequestPduListener(this, lcontext);
172 discTimeLineContextIn.removeRequestPduListener(this, lcontext);
173 }
174
175
176
177
178 public void requestPduReceived(RequestPduEvent evt) {
179 Object src = evt.getSource();
180 int port = evt.getHostPort();
181 Pdu orgPdu = evt.getPdu();
182 if (src == discEngineIdContextIn) {
183 sendEngineIdReport(orgPdu, port);
184 } else {
185 sendTimeLineReport(orgPdu, port);
186 }
187 }
188
189
190
191
192 protected void sendEngineIdReport(Pdu orgPdu, int port) {
193 if (AsnObject.debug > 4) {
194 System.out.println(getClass().getName() + ".sendEngineIdReport()");
195 }
196
197 try {
198 if (discEngineIdContextOut != null) {
199 discEngineIdContextOut.destroy();
200 }
201 discEngineIdContextOut = new SnmpContextv3(discEngineIdContextIn.getHost(),
202 port, discEngineIdContextIn.getBindAddress(),
203 discEngineIdContextIn.getTypeSocket());
204 discEngineIdContextOut = (SnmpContextv3) discEngineIdContextIn.cloneParameters(discEngineIdContextOut);
205
206 Pdu repPdu = new ReportPdu(discEngineIdContextOut, orgPdu);
207 repPdu.addOid(usmStatsConstants.usmStatsUnknownEngineIDs,
208 new AsnUnsInteger(usmAgent.getUsmStatsUnknownEngineIDs()));
209 repPdu.send();
210 } catch (java.io.IOException iexc) {
211 if (AsnObject.debug > 4) {
212 System.out.println(getClass().getName() + ".sendEngineIdReport(): "
213 + "IOException: " + iexc.getMessage());
214 }
215 } catch (PduException pexc) {
216 if (AsnObject.debug > 4) {
217 System.out.println(getClass().getName() + ".sendEngineIdReport(): "
218 + "PduException: " + pexc.getMessage());
219 }
220 }
221 }
222
223
224
225
226 protected void sendTimeLineReport(Pdu orgPdu, int port) {
227 if (AsnObject.debug > 4) {
228 System.out.println(getClass().getName() + ".sendTimeLineReport()");
229 }
230
231 try {
232 if (discTimeLineContextOut != null) {
233 discTimeLineContextOut.destroy();
234 }
235 discTimeLineContextOut = new SnmpContextv3(discTimeLineContextIn.getHost(),
236 port, discTimeLineContextIn.getBindAddress(),
237 discTimeLineContextIn.getTypeSocket());
238 discTimeLineContextOut = (SnmpContextv3) discTimeLineContextIn.cloneParameters(discTimeLineContextOut);
239
240 Pdu repPdu = new ReportPdu(discTimeLineContextOut, orgPdu);
241 repPdu.addOid(usmStatsConstants.usmStatsNotInTimeWindows,
242 new AsnUnsInteger(usmAgent.getUsmStatsNotInTimeWindows()));
243 repPdu.send();
244 } catch (java.io.IOException iexc) {
245 if (AsnObject.debug > 4) {
246 System.out.println(getClass().getName() + ".sendTimeLineReport(): "
247 + "IOException: " + iexc.getMessage());
248 }
249 } catch (PduException pexc) {
250 if (AsnObject.debug > 4) {
251 System.out.println(getClass().getName() + ".sendEngineIdReport(): "
252 + "PduException: " + pexc.getMessage());
253 }
254 }
255 }
256
257
258
259
260 public void freeResources() {
261 discEngineIdContextIn.destroy();
262 discEngineIdContextIn = null;
263
264 discTimeLineContextIn.destroy();
265 discTimeLineContextIn = null;
266
267 if (discEngineIdContextOut != null) {
268 discEngineIdContextOut.destroy();
269 discEngineIdContextOut = null;
270 }
271 if (discTimeLineContextOut != null) {
272 discTimeLineContextOut.destroy();
273 discTimeLineContextOut = null;
274 }
275 }
276
277 }