/*
* Copyright (c) 2002-2003 iReasoning Inc. All Rights Reserved.
*
* This SOURCE CODE FILE, which has been provided by iReasoning Inc. as part
* of an iReasoning Software product for use ONLY by licensed users of the product,
* includes CONFIDENTIAL and PROPRIETARY information of iReasoning Inc.
*
* USE OF THIS SOFTWARE IS GOVERNED BY THE TERMS AND CONDITIONS
* OF THE LICENSE STATEMENT AND LIMITED WARRANTY FURNISHED WITH
* THE PRODUCT.
*
* IN PARTICULAR, YOU WILL INDEMNIFY AND HOLD IREASONING SOFTWARE, ITS
* RELATED COMPANIES AND ITS SUPPLIERS, HARMLESS FROM AND AGAINST ANY
* CLAIMS OR LIABILITIES ARISING OUT OF THE USE, REPRODUCTION, OR
* DISTRIBUTION OF YOUR PROGRAMS, INCLUDING ANY CLAIMS OR LIABILITIES
* ARISING OUT OF OR RESULTING FROM THE USE, MODIFICATION, OR
* DISTRIBUTION OF PROGRAMS OR FILES CREATED FROM, BASED ON, AND/OR
* DERIVED FROM THIS SOURCE CODE FILE.
*/
package agent.subagent;
import java.io.*;
import java.util.*;
import com.ireasoning.util.*;
import com.ireasoning.protocol.snmp.*;
import com.ireasoning.protocol.Listener;
import com.ireasoning.protocol.Msg;
import javax.management.*;
/**
* Agent main class. This class create a subagent and connect to a master agent running at localhost.
* It then registers two subtrees with the master agent.
*/
public class Agent extends SnmpAgentX implements Listener
{
/**
* Constructor. Create MBeanServer instance internally. Agent will be listening on port specified in config file, which can be retrieved by using getConfig().getPort().
* @param configFileName Agent's config file name. If absolute path is not specified, the file will be assumed located under ./config directory or current directory
*/
public Agent() throws Exception
{
super();
}
/**
* Constructor. Create MBeanServer instance internally. Agent will be listening on port specified in config file, which can be retrieved by using getConfig().getPort().
* @param configFileName Agent's config file name. If absolute path is not specified, the file will be assumed located under ./config directory or current directory
*/
public Agent(String configFileName) throws Exception
{
super(configFileName, true);
}
public static void main(String[] args)
{
try
{
int mode = 0;
// use SnmpAgent.xml on ./config directory
Agent agent = new Agent();
//For testing purpose, add subagent event listener to receive subagent state change event
//'handleMsg(Object msgSender, Msg msg)' method will be called if there're any new events
agent.addSubagentEventListener(agent);
String host = null;
if(args.length > 0)
{
host = args[0];
}
if(host == null)
{
host = "localhost";
}
int port = 705;
if(args.length > 1)
{
port = Integer.parseInt(args[1]);
}
if(args.length > 2)
{//three testing subagents
if(args[2].equals("1")) mode = 1;
else if(args[2].equals("2")) mode = 2;
}
System.out.println( "Connecting master agent @ " + host + ":" + port);
SubAgentSession session = agent.connect(host, port);
//New code
//To register OID subtrees ...
int ret1 = 0, ret2 = 0;
if(mode == 0)
{// mode 0, registers all table subtree
ret1 = session.register(".1.3.6.1.4.1.15145.1.1.1"); //InfoGroup
ret2 = session.register(".1.3.6.1.4.1.15145.1.1.2"); //SubagentTable
}
else if(mode == 1)
{// mode 1, only register first row
System.out.println( "register first row");
ret2 = session.register(".1.3.6.1.4.1.15145.1.1.2.1.1.1", 12, 5, 30); //SubagentTable first row
}
else if(mode == 2)
{// mode 2, only register second row
System.out.println( "register second row");
ret2 = session.register(".1.3.6.1.4.1.15145.1.1.2.1.1.2", 12, 5, 30); //SubagentTable second row
}
if(ret1 != -1 && ret2 != -1)
{
System.out.println( "Subtrees were registered successfully");
}
else
{
System.out.println( "At least one of the subtrees were not registered successfully");
}
// ...
// Use sendTrapToMasterAgents(SnmpTrap trap) method to forward trap to master agent
SnmpTrap trap = new SnmpTrap(getSysUpTime(), new SnmpOID( ".1.3.6.1.4.1.15415.1.1.3.1") );
trap.addVarBind(new SnmpVarBind(".1.3.6.1.4.1.15415.1.1.1.1", new SnmpInt(1)));
trap.addVarBind(new SnmpVarBind(".1.3.6.1.4.1.15415.1.1.1.2", new SnmpInt(2)));
sendTrapToMasterAgents(trap);
// session.close();
}
catch(Exception e)
{
Logger.error(e);
System.exit(1);
}
}
/**
* Callback method for receiving subagent state change event
* @param msgSender event originator object
* @param msg a SubagentEvent object
*/
public void handleMsg(Object msgSender, Msg msg)
{
SubagentEvent event = (SubagentEvent) msg;
System.out.println( event );
}
/**
* Sets the MIB tree data structure. This method gets called by base class
*/
protected void setOIDTree()
{
_root = OIDTree.getTree();
}
/**
* Register necessary MBeans
*/
protected void registerMBeans() throws SnmpException
{
AgentMib.registerMBeans(_mbeanServer, _root);
}
/**
* Unregister necessary MBeans
*/
protected void unregisterMBeans()
{
AgentMib.unregisterMBeans();
}
}