package dmg.protocols.snmp ;
/**
*
*
* @author Patrick Fuhrmann
* @version 0.1, 15 Feb 1998
*/
public class SnmpPDU extends SnmpSequence {
SnmpInteger _requestID ;
SnmpInteger _errorStatus ;
SnmpInteger _errorIndex ;
SnmpSequence _varBindList ;
int _type;
SnmpPDU( SnmpObjectHeader head , byte [] b , int offIn , int maxLen ){
super( head , b , offIn , maxLen ) ;
if( size() < 4 ) {
throw new NumberFormatException("Not a PDU");
}
try{
_requestID = (SnmpInteger)objectAt(0) ;
_errorStatus = (SnmpInteger)objectAt(1) ;
_errorIndex = (SnmpInteger)objectAt(2) ;
_varBindList = (SnmpSequence)objectAt(3);
}catch(Exception e ){
throw new NumberFormatException("Not a PDU structure") ;
}
_determineType() ;
}
public SnmpPDU( SnmpInteger id , SnmpInteger status ,
SnmpInteger index , SnmpSequence list ){
_requestID = id ;
_errorStatus = status ;
_errorIndex = index ;
_varBindList = list ;
_determineType() ;
addObject( _requestID ) ;
addObject( _errorStatus ) ;
addObject( _errorIndex ) ;
addObject( _varBindList ) ;
}
public SnmpPDU( SnmpSequence snmp ){
super( snmp ) ;
if( size() < 4 ) {
throw new NumberFormatException("Not a PDU");
}
try{
_requestID = (SnmpInteger)objectAt(0) ;
_errorStatus = (SnmpInteger)objectAt(1) ;
_errorIndex = (SnmpInteger)objectAt(2) ;
_varBindList = (SnmpSequence)objectAt(3);
}catch(Exception e ){
throw new NumberFormatException("Not a PDU structure") ;
}
_determineType() ;
}
@Override
public byte [] getSnmpBytes(){
removeAllObjects() ;
addObject( _requestID ) ;
addObject( _errorStatus ) ;
addObject( _errorIndex ) ;
addObject( _varBindList ) ;
return super.getSnmpBytes(_type) ;
}
private void _determineType(){
if( this instanceof SnmpGetRequest ){
_type = SnmpObjectHeader.GetRequest ;
}else if( this instanceof SnmpGetNextRequest ){
_type = SnmpObjectHeader.GetNextRequest ;
}else if( this instanceof SnmpGetResponse ){
_type = SnmpObjectHeader.GetResponse ;
}else if( this instanceof SnmpSetRequest ){
_type = SnmpObjectHeader.SetRequest ;
}else if( this instanceof SnmpTrap ){
_type = SnmpObjectHeader.Trap ;
}
// System.out.println( " My type : "+_type ) ;
}
public SnmpInteger getRequestID(){ return _requestID ; }
public SnmpInteger getErrorStatus(){ return _errorStatus ; }
public SnmpInteger getErrorIndex(){ return _errorIndex ; }
public SnmpSequence getVarBindList(){ return _varBindList ; }
}