5c8d1df8b4fdc27624f1902e6f853c67868be489
[packetcable.git] / protocol_plugins.packetcable / src / main / java / org / umu / cops / stack / COPSIpv4PdpAddress.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.net.Socket;\r
11 import java.net.UnknownHostException;\r
12 \r
13 /**\r
14  * COPS IPv4 PDP Address\r
15  *\r
16  * @version COPSIpv4PdpAddress.java, v 1.00 2003\r
17  *\r
18  */\r
19 abstract public class COPSIpv4PdpAddress extends COPSPdpAddress {\r
20 \r
21     protected COPSObjHeader _objHdr;\r
22     protected COPSIpv4Address _addr;\r
23     private short _reserved;\r
24     protected short _tcpPort;\r
25 \r
26     protected COPSIpv4PdpAddress() {\r
27         _addr = new COPSIpv4Address();\r
28         _objHdr = new COPSObjHeader();\r
29         _objHdr.setCType((byte) 1);\r
30         // _objHdr.setDataLength((short) _addr.getDataLength() + sizeof(u_int32_t));\r
31         _objHdr.setDataLength((short) (_addr.getDataLength() + 4));\r
32     }\r
33 \r
34     protected COPSIpv4PdpAddress(byte[] dataPtr) {\r
35         _addr = new COPSIpv4Address();\r
36         _objHdr = new COPSObjHeader();\r
37         _objHdr.parse(dataPtr);\r
38         // _objHdr.checkDataLength();\r
39 \r
40         byte[] buf = new byte[4];\r
41         System.arraycopy(dataPtr,2,buf,0,4);\r
42         _addr.parse(buf);\r
43 \r
44         _reserved |= ((short) dataPtr[8]) << 8;\r
45         _reserved |= ((short) dataPtr[9]) & 0xFF;\r
46         _tcpPort |= ((short) dataPtr[10]) << 8;\r
47         _tcpPort |= ((short) dataPtr[11]) & 0xFF;\r
48 \r
49         // _objHdr.setDataLength(_addr.getDataLength() + sizeof(u_int32_t));\r
50         _objHdr.setDataLength((short) (_addr.getDataLength() + 4));\r
51     }\r
52 \r
53     /**\r
54      * Method setIpAddress\r
55      *\r
56      * @param    hostName            a  String\r
57      *\r
58      * @throws   UnknownHostException\r
59      *\r
60      */\r
61     public void setIpAddress(String hostName) throws UnknownHostException  {\r
62         _addr.setIpAddress(hostName);\r
63     }\r
64 \r
65     /**\r
66      * Method setTcpPort\r
67      *\r
68      * @param    port                a  short\r
69      *\r
70      */\r
71     public void setTcpPort(short port) {\r
72         _tcpPort = port;\r
73     }\r
74 \r
75     /**\r
76      * Method getIpName\r
77      *\r
78      * @return   a String\r
79      *\r
80      * @throws   UnknownHostException\r
81      *\r
82      */\r
83     public String getIpName() throws UnknownHostException {\r
84         return (_addr.getIpName());\r
85     }\r
86 \r
87     /**\r
88      * Method getTcpPort\r
89      *\r
90      * @return   a short\r
91      *\r
92      */\r
93     short getTcpPort() {\r
94         return _tcpPort;\r
95     };\r
96 \r
97     /**\r
98      * Returns size in number of octects, including header\r
99      *\r
100      * @return   a short\r
101      *\r
102      */\r
103     public short getDataLength() {\r
104         //Add the size of the header also\r
105         return (_objHdr.getDataLength());\r
106     }\r
107 \r
108     /**\r
109      * Method isIpv6PdpAddress\r
110      *\r
111      * @return   a boolean\r
112      *\r
113      */\r
114     public boolean isIpv6PdpAddress() {\r
115         return true;\r
116     }\r
117 \r
118     /**\r
119      * Write data on a given network socket\r
120      *\r
121      * @param    id                  a  Socket\r
122      *\r
123      * @throws   IOException\r
124      *\r
125      */\r
126     public void writeData(Socket id) throws IOException {\r
127         //\r
128         _objHdr.writeData(id);\r
129         _addr.writeData(id);\r
130 \r
131         byte[] buf = new byte[4];\r
132         buf[0] = (byte) (_reserved & 0xFF);\r
133         buf[1] = (byte) (_reserved << 8);\r
134         buf[2] = (byte) (_tcpPort & 0xFF);\r
135         buf[3] = (byte) (_tcpPort << 8);\r
136 \r
137         COPSUtil.writeData(id, buf, 4);\r
138     }\r
139 \r
140 }\r
141 \r