support lcaf traffic engineering TELSDN-178: #close
[lispflowmapping.git] / mappingservice / implementation / src / main / java / org / opendaylight / lispflowmapping / implementation / serializer / address / LispApplicationDataLCAFAddressSerializer.java
1 package org.opendaylight.lispflowmapping.implementation.serializer.address;
2
3 import java.nio.ByteBuffer;
4
5 import org.opendaylight.lispflowmapping.implementation.util.ByteUtil;
6 import org.opendaylight.lispflowmapping.type.lisp.address.LispAddress;
7 import org.opendaylight.lispflowmapping.type.lisp.address.LispApplicationDataLCAFAddress;
8
9 public class LispApplicationDataLCAFAddressSerializer extends LispLCAFAddressSerializer {
10
11     private static final LispApplicationDataLCAFAddressSerializer INSTANCE = new LispApplicationDataLCAFAddressSerializer();
12
13     // Private constructor prevents instantiation from other classes
14     private LispApplicationDataLCAFAddressSerializer() {
15     }
16
17     public static LispApplicationDataLCAFAddressSerializer getInstance() {
18         return INSTANCE;
19     }
20
21     @Override
22     protected short getLcafLength(LispAddress lispAddress) {
23         return (short) (Length.ALL_FIELDS + LispAddressSerializer.getInstance().getAddressSize(((LispApplicationDataLCAFAddress)lispAddress).getAddress()));
24     }
25
26     @Override
27     protected void serializeData(ByteBuffer buffer, LispAddress lispAddress) {
28         LispApplicationDataLCAFAddress applicationDataAddress = ((LispApplicationDataLCAFAddress) lispAddress);
29         buffer.put(ByteUtil.partialIntToByteArray(applicationDataAddress.getIPTos(), Length.TOC));
30         buffer.put(applicationDataAddress.getProtocol());
31         buffer.putShort(applicationDataAddress.getLocalPort());
32         buffer.putShort(applicationDataAddress.getRemotePort());
33         LispAddressSerializer.getInstance().serialize(buffer, ((LispApplicationDataLCAFAddress) lispAddress).getAddress());
34     }
35
36     @Override
37     protected LispApplicationDataLCAFAddress deserializeData(ByteBuffer buffer, byte res2, short length) {
38
39         LispApplicationDataLCAFAddress applicationDataAddress = new LispApplicationDataLCAFAddress(res2);
40         byte[] rawIPTos = new byte[3];
41         buffer.get(rawIPTos);
42         applicationDataAddress.setIPTos(ByteUtil.getPartialInt(rawIPTos));
43         applicationDataAddress.setProtocol(buffer.get());
44         applicationDataAddress.setLocalPort(buffer.getShort());
45         applicationDataAddress.setRemotePort(buffer.getShort());
46         LispAddress address = LispAddressSerializer.getInstance().deserialize(buffer);
47         applicationDataAddress.setAddress(address);
48
49         return applicationDataAddress;
50     }
51
52     private interface Length {
53         int LOCAL_PORT = 2;
54         int REMOTE_PORT = 2;
55         int TOC = 3;
56         int PROTOCOL = 1;
57         int ALL_FIELDS = LOCAL_PORT + REMOTE_PORT + TOC + PROTOCOL;
58     }
59
60 }