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 }