Start of the COPS message refactoring to make all of these classes more semantic...
[packetcable.git] / packetcable-driver / src / main / java / org / umu / cops / stack / COPSClientSI.java
1 /*\r
2  * Copyright (c) 2003 University of Murcia.  All rights reserved.\r
3  * --------------------------------------------------------------\r
4  * For more information, please see <http://www.umu.euro6ix.org/>.\r
5  */\r
6 \r
7 package org.umu.cops.stack;\r
8 \r
9 import org.umu.cops.stack.COPSObjHeader.CNum;\r
10 \r
11 import java.io.IOException;\r
12 import java.io.OutputStream;\r
13 import java.net.Socket;\r
14 \r
15 /**\r
16  * COPS Client Specific Information Object\r
17  *\r
18  * @version COPSClientSI.java, v 1.00 2003\r
19  *\r
20  */\r
21 public class COPSClientSI extends COPSObjBase {\r
22     public final static byte CSI_SIGNALED = 1;\r
23     public final static byte CSI_NAMED = 2;\r
24 \r
25     private COPSObjHeader _objHdr;\r
26     private COPSData _data;\r
27     private COPSData _padding;\r
28 \r
29     ///\r
30     public COPSClientSI(byte type) {\r
31         _objHdr = new COPSObjHeader(CNum.CSI, COPSObjHeader.VAL_TO_CTYPE.get((int)type));\r
32     }\r
33 \r
34     public COPSClientSI(byte cnum, byte ctype) {\r
35         _objHdr = new COPSObjHeader(COPSObjHeader.VAL_TO_CNUM.get((int)cnum), COPSObjHeader.VAL_TO_CTYPE.get((int)ctype));\r
36     }\r
37 \r
38     /**\r
39      Parse the data and create a ClientSI object\r
40      */\r
41     protected COPSClientSI(byte[] dataPtr) {\r
42         _objHdr = COPSObjHeader.parse(dataPtr);\r
43 \r
44         //Get the length of data following the obj header\r
45         short dLen = (short) (_objHdr.getDataLength() - 4);\r
46         COPSData d = new COPSData(dataPtr, 4, dLen);\r
47         setData(d);\r
48     }\r
49 \r
50     /**\r
51      * Method setData\r
52      *\r
53      * @param    data                a  COPSData\r
54      *\r
55      */\r
56     public void setData(COPSData data) {\r
57         _data = data;\r
58         if (_data.length() % 4 != 0) {\r
59             int padLen = 4 - _data.length() % 4;\r
60             _padding = getPadding(padLen);\r
61         }\r
62         _objHdr.setDataLength((short) _data.length());\r
63     }\r
64 \r
65     /**\r
66      * Returns size in number of octects, including header\r
67      *\r
68      * @return   a short\r
69      *\r
70      */\r
71     public short getDataLength() {\r
72         //Add the size of the header also\r
73         int lpadding = 0;\r
74         if (_padding != null) lpadding = _padding.length();\r
75         return (short) (_objHdr.getDataLength() + lpadding);\r
76     }\r
77 \r
78     /**\r
79      * Method getData\r
80      *\r
81      * @return   a COPSData\r
82      *\r
83      */\r
84     public COPSData getData() {\r
85         return _data;\r
86     };\r
87 \r
88     /**\r
89      * Method isClientSI\r
90      *\r
91      * @return   a boolean\r
92      *\r
93      */\r
94     public boolean isClientSI() {\r
95         return true;\r
96     }\r
97 \r
98     /**\r
99      * Write data on a given network socket\r
100      *\r
101      * @param    id                  a  Socket\r
102      *\r
103      * @throws   IOException\r
104      *\r
105      */\r
106     public void writeData(Socket id) throws IOException {\r
107         _objHdr.writeData(id);\r
108         COPSUtil.writeData(id, _data.getData(), _data.length());\r
109         if (_padding != null) {\r
110             COPSUtil.writeData(id, _padding.getData(), _padding.length());\r
111         }\r
112     }\r
113 \r
114     /**\r
115      * Write an object textual description in the output stream\r
116      *\r
117      * @param    os                  an OutputStream\r
118      *\r
119      * @throws   IOException\r
120      *\r
121      */\r
122     public void dump(OutputStream os) throws IOException {\r
123         _objHdr.dump(os);\r
124         os.write(new String("client-SI: " + _data.str() + "\n").getBytes());\r
125     }\r
126 }\r
127 \r