/* * ObimpData.java * * Created on 9 Декабрь 2010 г., 20:40 * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ // #sijapp cond.if protocols_OBIMP is "true" # package protocol.obimp; import jimm.comm.StringUtils; import jimm.comm.Util; /** * * @author Vladimir Kryukov */ public class ObimpData { private byte[] inData; private int inCursor; /** Creates a new instance of ObimpData */ public ObimpData(byte[] data) { inData = data; inCursor = 0; } public byte[] getWtld(int tlvNum) { int ip = 0; while (ip < inData.length) { int id = (int)Util.getDWordBE(inData, ip); int len = (int)Util.getDWordBE(inData, ip + 4); if (id == tlvNum) { byte[] data = new byte[len]; if (0 < len) { System.arraycopy(inData, ip + 8, data, 0, len); } return data; } ip += 4 + 4 + len; } return null; } public byte getWtld_byte(int tlvNum) { byte[] buf = getWtld(tlvNum); return (null == buf) ? 0 : buf[0]; } public int getWtld_word(int tlvNum) { byte[] buf = getWtld(tlvNum); return (null == buf) ? 0 : Util.getWordBE(buf, 0); } public long getWtld_dword(int tlvNum) { byte[] buf = getWtld(tlvNum); return (null == buf) ? 0 : Util.getDWordBE(buf, 0); } public String getWtld_str(int tlvNum) { byte[] buf = getWtld(tlvNum); return (null == buf) ? null : StringUtils.utf8beByteArrayToString(buf, 0, buf.length); } public int getWtldType() { return (int)Util.getDWordBE(inData, inCursor); } public byte[] getWtldData() { int len = (int)Util.getDWordBE(inData, inCursor + 4); byte[] data = new byte[len]; if (0 < len) { System.arraycopy(inData, inCursor + 8, data, 0, len); } return data; } public void skipWtld() { inCursor += 8 + (int)Util.getDWordBE(inData, inCursor + 4); } public int getStldType() { return (int)Util.getWordBE(inData, inCursor); } public byte[] getStldData() { int len = (int)Util.getWordBE(inData, inCursor + 2); byte[] data = new byte[len]; if (0 < len) { System.arraycopy(inData, inCursor + 4, data, 0, len); } return data; } public void skipStld() { inCursor += 4 + (int)Util.getWordBE(inData, inCursor + 2); } public long getDWordBE() { long value = Util.getDWordBE(inData, inCursor); inCursor += 4; return value; } public int getWordBE() { int value = Util.getWordBE(inData, inCursor); inCursor += 2; return value; } public boolean isEof() { return inData.length <= inCursor; } public byte[] getData(int len) { byte[] data = new byte[len]; if (0 < len) { System.arraycopy(inData, inCursor, data, 0, len); } inCursor += len; return data; } public byte[] b() { return inData; } } // #sijapp cond.end #