1 // NAME
2 // $RCSfile: OneNTSharedResBean.java,v $
3 // DESCRIPTION
4 // [given below in javadoc format]
5 // DELTA
6 // $Revision: 1.13 $
7 // CREATED
8 // $Date: 2006/01/25 18:08:56 $
9 // COPYRIGHT
10 // Westhawk Ltd
11 // TO DO
12 //
13
14 /*
15 * Copyright (C) 1998 - 2006 by Westhawk Ltd
16 *
17 * Permission to use, copy, modify, and distribute this software
18 * for any purpose and without fee is hereby granted, provided
19 * that the above copyright notices appear in all copies and that
20 * both the copyright notice and this permission notice appear in
21 * supporting documentation.
22 * This software is provided "as is" without express or implied
23 * warranty.
24 * author <a href="mailto:snmp@westhawk.co.uk">Tim Panton</a>
25 */
26
27 package uk.co.westhawk.snmp.beans;
28
29 /*-
30 * ╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲
31 * SNMP Java Client
32 * ჻჻჻჻჻჻
33 * Copyright 2023 MetricsHub, Westhawk
34 * ჻჻჻჻჻჻
35 * This program is free software: you can redistribute it and/or modify
36 * it under the terms of the GNU Lesser General Public License as
37 * published by the Free Software Foundation, either version 3 of the
38 * License, or (at your option) any later version.
39 *
40 * This program is distributed in the hope that it will be useful,
41 * but WITHOUT ANY WARRANTY; without even the implied warranty of
42 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
43 * GNU General Lesser Public License for more details.
44 *
45 * You should have received a copy of the GNU General Lesser Public
46 * License along with this program. If not, see
47 * <http://www.gnu.org/licenses/lgpl-3.0.html>.
48 * ╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱
49 */
50
51 import uk.co.westhawk.snmp.stack.*;
52 import uk.co.westhawk.snmp.pdu.*;
53 import java.awt.*;
54 import java.util.*;
55 import java.text.*;
56 import java.lang.*;
57 import java.io.*;
58 import java.beans.*;
59
60 /**
61 * <p>
62 * This bean collects information about one NT shared resource installed
63 * on a NT server. The NT mib is described in the
64 *
65 * <a href="http://premium.microsoft.com/msdn/library/winresource/dnwinnt/f1d/d25/s86a2.htm">LAN Manager MIB II for Windows NT Objects</a> .
66 *
67 * You will have to register to the MSDN before accessing this page.
68 * </p>
69 *
70 * <p>
71 * The properties in the parent classes should be set, before calling
72 * the action() method. Via a PropertyChangeEvent the application/applet
73 * will be notified.
74 * </p>
75 *
76 * @see SNMPBean#setHost
77 * @see SNMPBean#setPort
78 * @see SNMPBean#setCommunityName
79 * @see SNMPRunBean#setUpdateInterval
80 * @see #setIndex(String)
81 * @see SNMPBean#addPropertyChangeListener
82 * @see SNMPBean#action
83 * @see GetPdu_vec
84 * @see NTSharedResBean
85 *
86 * @author <a href="mailto:snmp@westhawk.co.uk">Birgit Arkesteijn</a>
87 * @version $Revision: 1.13 $ $Date: 2006/01/25 18:08:56 $
88 */
89 public class OneNTSharedResBean extends SNMPRunBean implements Observer {
90 private static final String version_id = "@(#)$Id: OneNTSharedResBean.java,v 1.13 2006/01/25 18:08:56 birgit Exp $ Copyright Westhawk Ltd";
91
92 private GetPdu_vec pdu;
93
94 private boolean isPduInFlight;
95 private Date lastUpdateDate = null;
96
97 private String index = "";
98 private String name = "";
99 private String path = "";
100 private String comment = "";
101
102 private final static int NR_OID = 3;
103 private final static String svShareName = "1.3.6.1.4.1.77.1.2.27.1.1";
104 private final static String svSharePath = "1.3.6.1.4.1.77.1.2.27.1.2";
105 private final static String svShareComment = "1.3.6.1.4.1.77.1.2.27.1.3";
106
107 /**
108 * The default constructor.
109 */
110 public OneNTSharedResBean() {
111 }
112
113 /**
114 * The constructor that will set the host and the port no.
115 *
116 * @param h the hostname
117 * @param p the port no
118 * @see SNMPBean#setHost
119 * @see SNMPBean#setPort
120 */
121 public OneNTSharedResBean(String h, int p) {
122 this(h, p, null);
123 }
124
125 /**
126 * The constructor that will set the host, the port no and the local
127 * bind address.
128 *
129 * @param h the hostname
130 * @param p the port no
131 * @param b the local bind address
132 * @see SNMPBean#setHost
133 * @see SNMPBean#setPort
134 * @see SNMPBean#setBindAddress
135 *
136 * @since 4_14
137 */
138 public OneNTSharedResBean(String h, int p, String b) {
139 this();
140 setHost(h);
141 setPort(p);
142 setBindAddress(b);
143 }
144
145 /**
146 * Sets the index of the NT shared resource that will be requested.
147 *
148 * @param ind the index
149 * @see #getIndex()
150 * @see NTSharedResBean#getIndex(String)
151 */
152 public void setIndex(String ind) {
153 if (ind != null && ind.length() > 0) {
154 index = ind;
155 }
156 }
157
158 /**
159 * Returns the index of the NT shared resource.
160 *
161 * @return the index
162 * @see #setIndex(String)
163 */
164 public String getIndex() {
165 return index;
166 }
167
168 /**
169 * Returns the name of the NT shared resource.
170 *
171 * @return the name
172 */
173 public String getName() {
174 return name;
175 }
176
177 /**
178 * Returns the local name (path) of the NT shared resource.
179 *
180 * @return the path
181 */
182 public String getPath() {
183 return path;
184 }
185
186 /**
187 * Returns the comment associated with the NT shared resource.
188 *
189 * @return the comment
190 */
191 public String getComment() {
192 return comment;
193 }
194
195 /**
196 * Returns the date of the moment when this bean was last updated.
197 * This might be null when the first time the update was not finished.
198 *
199 * @return the last update date
200 */
201 public Date getLastUpdateDate() {
202 return lastUpdateDate;
203 }
204
205 /**
206 * This method starts sending the SNMP request. All properties should be
207 * set before this method is called.
208 *
209 * The actual sending will take place in the run method.
210 * It makes a new snmp context and initialises all variables before
211 * starting.
212 */
213 public void action() {
214 if (isHostPortReachable()) {
215 lastUpdateDate = new Date();
216 isPduInFlight = false;
217 setRunning(true);
218 }
219 }
220
221 /**
222 * The run method according to the Runnable interface.
223 * This method will send the Pdu request, if the previous one is not
224 * still in flight.
225 *
226 * @see SNMPRunBean#isRunning()
227 */
228 public void run() {
229 while (context != null && isRunning()) {
230 String ind = getIndex();
231 if (isPduInFlight == false && ind != null && ind.length() > 0) {
232 isPduInFlight = true;
233 pdu = new GetPdu_vec(context, NR_OID);
234 pdu.addObserver(this);
235 pdu.addOid(svShareName + "." + ind);
236 pdu.addOid(svSharePath + "." + ind);
237 pdu.addOid(svShareComment + "." + ind);
238 try {
239 pdu.send();
240 } catch (PduException exc) {
241 System.out.println("PduException " + exc.getMessage());
242 } catch (IOException exc) {
243 System.out.println("IOException " + exc.getMessage());
244 }
245 }
246
247 try {
248 Thread.sleep(interval);
249 } catch (InterruptedException ix) {
250 ;
251 }
252 }
253 }
254
255 /**
256 * The update method according to the Observer interface, it will be
257 * called when the Pdu response is received.
258 * The property change event is fired.
259 *
260 * @see SNMPBean#addPropertyChangeListener
261 */
262 public void update(Observable obs, Object ov) {
263 pdu = (GetPdu_vec) obs;
264 varbind[] varbinds = (varbind[]) ov;
265
266 if (pdu.getErrorStatus() == AsnObject.SNMP_ERR_NOERROR) {
267 AsnObject asnobj;
268 name = ((AsnOctets) varbinds[0].getValue()).getValue();
269
270 asnobj = varbinds[1].getValue();
271 path = " ";
272 if (asnobj instanceof AsnOctets) {
273 path = ((AsnOctets) asnobj).getValue();
274 }
275
276 asnobj = varbinds[2].getValue();
277 comment = " ";
278 if (asnobj instanceof AsnOctets) {
279 comment = ((AsnOctets) asnobj).getValue();
280 }
281
282 lastUpdateDate = new Date();
283 isPduInFlight = false;
284 firePropertyChange("NTService", null, null);
285 }
286 }
287
288 }