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