1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package net.sf.dexterim.oscar.entity;
20
21 import java.io.ByteArrayOutputStream;
22 import java.io.IOException;
23
24 /***
25 * xx xx word TLV type number
26 * xx xx word TLV length value
27 * ...... TLV data
28 * @author christoph
29 */
30 public class TLV implements ByteBased {
31 private Word type;
32 private ByteBased data;
33 private Word dataLength;
34
35 /***
36 * @param i
37 */
38 public TLV(Word type) {
39 this.type = type;
40 this.dataLength = new Word(0);
41 }
42
43 public TLV(int type) {
44 this(new Word(type));
45 }
46
47 public byte[] toByteArray() {
48 ByteArrayOutputStream out = new ByteArrayOutputStream();
49
50 try {
51 out.write(type.toByteArray());
52 out.write(dataLength.toByteArray());
53
54 if (data != null) {
55 out.write(data.toByteArray());
56 }
57 }
58 catch (IOException e) {
59 e.printStackTrace();
60 }
61
62 return out.toByteArray();
63 }
64
65 public int getLength() {
66 return type.getLength() + data.getLength() + dataLength.getLength();
67 }
68
69 /***
70 * @return
71 */
72 public int getType() {
73 return type.getValue();
74 }
75
76 public void setData(ByteBased data) {
77 this.data = data;
78
79 if (data != null) {
80 this.dataLength = new Word(data.getLength());
81 }
82 else {
83 this.dataLength = new Word(0);
84 }
85 }
86
87 public void setData(byte[] data) {
88 setData(new VariableByte(data));
89 }
90
91 /***
92 * @return
93 */
94 public ByteBased getData() {
95 return data;
96 }
97
98 public String toString() {
99 StringBuffer builder = new StringBuffer();
100
101 builder.append("[TLV ");
102 builder.append(type);
103 builder.append(" data ");
104 builder.append(getData());
105 builder.append("]");
106
107 return builder.toString();
108 }
109 }