Fixed building of models, moved code into directory structure.
[packetcable.git] / protocol_plugins.packetcable / src / main / java / org / umu / cops / stack / COPSMsg.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 Message\r
15  *\r
16  * @version COPSMsg.java, v 1.00 2003\r
17  *\r
18  */\r
19 abstract public class COPSMsg {\r
20 \r
21     protected COPSHeader _hdr;\r
22     protected int _dataLength;\r
23     protected int _dataStart;\r
24 \r
25     /**\r
26      * Method getHeader\r
27      *\r
28      * @return   a COPSHeader\r
29      *\r
30      */\r
31     public COPSHeader getHeader() {\r
32         return _hdr;\r
33     }\r
34 \r
35     /**\r
36      * Method writeData\r
37      *\r
38      * @param    id                  a  Socket\r
39      *\r
40      * @throws   IOException\r
41      *\r
42      */\r
43     public abstract void writeData(Socket id) throws IOException;\r
44 \r
45     /**\r
46      * Method getMsgLength\r
47      *\r
48      * @return   an int\r
49      *\r
50      */\r
51     public int getMsgLength() {\r
52         return _hdr.getMsgLength();\r
53     }\r
54 \r
55     /**\r
56      * Method parse\r
57      *\r
58      * @param    hdr                 a  COPSHeader\r
59      * @param    data                a  byte[]\r
60      *\r
61      * @throws   COPSException\r
62      *\r
63      */\r
64     protected abstract void parse(COPSHeader hdr, byte[] data) throws COPSException;\r
65 \r
66     /**\r
67      * Method parse\r
68      *\r
69      * @param    data                a  byte[]\r
70      *\r
71      * @throws   COPSException\r
72      *\r
73      */\r
74     protected abstract void parse(byte[] data) throws COPSException;\r
75 \r
76     /**\r
77      * Method parseHeader\r
78      *\r
79      * @param    data                a  byte[]\r
80      *\r
81      * @throws   COPSException\r
82      *\r
83      */\r
84     protected void parseHeader(byte[] data) throws COPSException {\r
85         _dataLength = 0;\r
86         _dataStart = 0;\r
87         if (_hdr == null) {\r
88             // _hdr = new COPSHeader(COPSHeader.COPS_OP_CAT);\r
89             _hdr = new COPSHeader(data);\r
90             _dataStart += 8;\r
91             _dataLength = _hdr.getMsgLength();\r
92         } else {\r
93             //header is already read\r
94             _dataLength = _hdr.getMsgLength() - 8;\r
95         }\r
96 \r
97         //validate the message length\r
98         //Should fill on the 32bit boundary\r
99         if ((_hdr.getMsgLength() % 4 != 0)) {\r
100             throw new COPSException("Bad message format: COPS message is not on 32 bit bounday");\r
101         }\r
102     }\r
103 \r
104     /** Checks the sanity of COPS message and throw an\r
105          COPSBadDataException when data is bad.\r
106     */\r
107     public abstract void checkSanity()throws COPSException;\r
108 \r
109     /**\r
110      * Write an object textual description in the output stream\r
111      *\r
112      * @param    os                  an OutputStream\r
113      *\r
114      * @throws   IOException\r
115      *\r
116      */\r
117     public void dump(OutputStream os) throws IOException {\r
118         os.write(new String("COPS Message").getBytes());\r
119     }\r
120 \r
121 }\r