View Javadoc
1   //////////////////////////////////////////////////////////////////////////////
2   // dexterIM - Instant Messaging Framework
3   // Copyright (C) 2003  Christoph Walcher
4   //
5   // This program is free software; you can redistribute it and/or modify
6   // it under the terms of the GNU General Public License as published by
7   // the Free Software Foundation; either version 2 of the License, or
8   // (at your option) any later version.
9   //
10  // This program is distributed in the hope that it will be useful,
11  // but WITHOUT ANY WARRANTY; without even the implied warranty of
12  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  // GNU General Public License for more details.
14  //
15  // You should have received a copy of the GNU General Public License
16  // along with this program; if not, write to the Free Software
17  // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
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 }