2 * Copyright (c) 2014 Contextream, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.lispflowmapping.lisp.serializer.address;
10 import java.nio.ByteBuffer;
12 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana.afn.safi.rev130704.AddressFamily;
13 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.DistinguishedNameAfi;
14 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.DistinguishedNameType;
15 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.LispAddress;
16 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SimpleAddress;
17 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.DistinguishedName;
18 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.DistinguishedNameBuilder;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.EidBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.Rloc;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.RlocBuilder;
24 public class DistinguishedNameSerializer extends LispAddressSerializer {
26 private static final DistinguishedNameSerializer INSTANCE = new DistinguishedNameSerializer();
28 // Private constructor prevents instantiation from other classes
29 private DistinguishedNameSerializer() {
32 public static DistinguishedNameSerializer getInstance() {
37 public int getAddressSize(LispAddress lispAddress) {
38 return ((DistinguishedName) lispAddress.getAddress()).getDistinguishedName().getValue().length() + 1;
43 public int getAddressSize(SimpleAddress simpleAddress) {
44 return simpleAddress.getDistinguishedNameType().getValue().length() + 1;
49 protected short getAfi() {
50 return (short) AddressFamily.DistinguishedName.getIntValue();
54 protected void serializeData(ByteBuffer buffer, LispAddress lispAddress) {
55 DistinguishedName distinguishedNameAddress = (DistinguishedName) lispAddress.getAddress();
56 buffer.put(distinguishedNameAddress.getDistinguishedName().getValue().getBytes());
61 protected void serializeData(ByteBuffer buffer, SimpleAddress simpleAddress) {
62 buffer.put(simpleAddress.getDistinguishedNameType().getValue().getBytes());
67 protected Eid deserializeEidData(ByteBuffer buffer, LispAddressSerializerContext ctx) {
68 EidBuilder eb = new EidBuilder();
69 eb.setAddressType(DistinguishedNameAfi.class);
70 eb.setVirtualNetworkId(getVni(ctx));
71 eb.setAddress(new DistinguishedNameBuilder().setDistinguishedName(deserializeData(buffer)).build());
76 protected Rloc deserializeRlocData(ByteBuffer buffer) {
77 RlocBuilder rb = new RlocBuilder();
78 rb.setAddressType(DistinguishedNameAfi.class);
79 rb.setVirtualNetworkId(null);
80 rb.setAddress(new DistinguishedNameBuilder().setDistinguishedName(deserializeData(buffer)).build());
86 protected SimpleAddress deserializeSimpleAddressData(ByteBuffer buffer, LispAddressSerializerContext ctx) {
87 return new SimpleAddress(deserializeData(buffer));
90 private DistinguishedNameType deserializeData(ByteBuffer buffer) {
91 StringBuilder sb = new StringBuilder();
92 byte b = buffer.get();
97 return new DistinguishedNameType(sb.toString());