package dmg.protocols.snmp ; /** * * * @author Patrick Fuhrmann * @version 0.1, 15 Feb 1998 */ public class SnmpOctetString extends SnmpObject { String _string = "" ; SnmpOctetString( SnmpObjectHeader head , byte [] b , int offIn , int maxLen ){ int off = offIn + head.getCodedLength() ; int len = head.getLength() ; boolean printable = true ; for( int i = off ; i < (off+len) ; i++ ){ if( ( b[i] < 16 ) && ! ( ( b[i] == 0xa ) || ( b[i] == 0xd ) ) ) { printable = false ; break ;} } if( printable ){ _string = new String( b , off , len ) ; }else{ int x ; StringBuilder sb = new StringBuilder() ; for( int i = off ; i < (off+len); i++ ){ x = b[i] ; x = ( x == 0xa ) || ( x == 0xd ) ? ' ' : x ; sb.append(Integer.toHexString((x < 0) ? (x + 256) : x)).append(':'); } _string = sb.toString() ; } setCodedLength( head.getCodedLength() + len ) ; } public SnmpOctetString( String str ){ _string = str ; } public String toString(){ return _string ; } public String stringValue(){ return _string ; } @Override public byte [] getSnmpBytes(){ byte [] b = _string.getBytes() ; SnmpObjectHeader head = new SnmpObjectHeader( SnmpObjectHeader.OCTET_STRING , b.length ) ; int headLen = head.getCodedLength() ; byte [] out = new byte[headLen+b.length] ; System.arraycopy( head.getSnmpBytes() , 0 , out , 0 , headLen ) ; System.arraycopy( b , 0 , out , headLen , b.length ) ; return out ; } }