package dmg.protocols.snmp ;
import java.util.Vector;
/**
*
*
* @author Patrick Fuhrmann
* @version 0.1, 15 Feb 1998
*/
public class SnmpSequence extends SnmpObject {
private Vector<SnmpObject> _vector = new Vector<>() ;
SnmpSequence( SnmpObjectHeader head , byte [] b , int offIn , int maxLen ){
int off = offIn + head.getCodedLength() ;
int len = head.getLength() ;
int rest = len ;
int cl ;
SnmpObject snmp ;
while( rest > 0 ){
snmp = SnmpObject.generate( b , off , rest ) ;
_vector.addElement( snmp ) ;
cl = snmp.getCodedLength() ;
rest -= cl ;
off += cl ;
}
setCodedLength( head.getCodedLength() + len ) ;
}
public SnmpSequence(){}
public SnmpSequence( SnmpSequence snmp ){
_vector = snmp._vector ;
}
public void removeAllObjects(){ _vector.removeAllElements() ; }
public void addObject( SnmpObject snmp ){ _vector.addElement(snmp) ; }
public SnmpObject objectAt(int i ){
return (_vector.elementAt(i));
}
public int size(){ return _vector.size() ; }
public String toString(){ return toString("Sequence") ;}
public String toString( String type ){
SnmpObject snmp;
StringBuilder sb = new StringBuilder();
sb.append(type).append('\n');
for( int i = 0 ; i < _vector.size() ; i++ ){
snmp = _vector.elementAt(i);
sb.append("Class : ").append(snmp.getClass().getName());
if( snmp instanceof SnmpSequence ){
sb.append("Value : \n").append(snmp).append('\n');
}else{
sb.append("Value : ").append(snmp).append('\n');
}
}
return sb.toString();
}
@Override
public byte [] getSnmpBytes(){
return getSnmpBytes(SnmpObjectHeader.SEQUENCE);
}
protected byte [] getSnmpBytes( int type ){
int s = _vector.size();
byte [][] v = new byte[s][] ;
int total = 0 ;
for( int i = 0 ; i < s ; i++ ){
v[i] = (_vector.elementAt(i)).getSnmpBytes() ;
total += v[i].length ;
}
SnmpObjectHeader head = new SnmpObjectHeader(
type ,
total ) ;
int headLen = head.getCodedLength() ;
byte [] out = new byte[headLen+total] ;
System.arraycopy( head.getSnmpBytes() , 0 , out , 0 , headLen ) ;
int pos = headLen ;
for( int i = 0 ; i < s ; i++){
System.arraycopy( v[i] , 0 , out , pos , v[i].length ) ;
pos += v[i].length ;
}
return out ;
}
}