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;
11 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana.afn.safi.rev130704.AddressFamily;
12 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.DistinguishedNameAfi;
13 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.DistinguishedNameType;
14 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.LispAddress;
15 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SimpleAddress;
16 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.DistinguishedName;
17 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.DistinguishedNameBuilder;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.EidBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.Rloc;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.RlocBuilder;
23 public final class DistinguishedNameSerializer extends LispAddressSerializer {
24 private static final DistinguishedNameSerializer INSTANCE = new DistinguishedNameSerializer();
26 // Private constructor prevents instantiation from other classes
27 private DistinguishedNameSerializer() {
30 public static DistinguishedNameSerializer getInstance() {
35 public int getAddressSize(LispAddress lispAddress) {
36 return ((DistinguishedName) lispAddress.getAddress()).getDistinguishedName().getValue().length() + 1;
41 public int getAddressSize(SimpleAddress simpleAddress) {
42 return simpleAddress.getDistinguishedNameType().getValue().length() + 1;
47 protected short getAfi() {
48 return (short) AddressFamily.DistinguishedName.getIntValue();
52 protected void serializeData(ByteBuffer buffer, LispAddress lispAddress) {
53 DistinguishedName distinguishedNameAddress = (DistinguishedName) lispAddress.getAddress();
54 buffer.put(distinguishedNameAddress.getDistinguishedName().getValue().getBytes());
59 protected void serializeData(ByteBuffer buffer, SimpleAddress simpleAddress) {
60 buffer.put(simpleAddress.getDistinguishedNameType().getValue().getBytes());
65 protected Eid deserializeEidData(ByteBuffer buffer, LispAddressSerializerContext ctx) {
66 EidBuilder eb = new EidBuilder();
67 eb.setAddressType(DistinguishedNameAfi.class);
68 eb.setVirtualNetworkId(getVni(ctx));
69 eb.setAddress(new DistinguishedNameBuilder().setDistinguishedName(deserializeData(buffer)).build());
74 protected Rloc deserializeRlocData(ByteBuffer buffer) {
75 RlocBuilder rb = new RlocBuilder();
76 rb.setAddressType(DistinguishedNameAfi.class);
77 rb.setVirtualNetworkId(null);
78 rb.setAddress(new DistinguishedNameBuilder().setDistinguishedName(deserializeData(buffer)).build());
84 protected SimpleAddress deserializeSimpleAddressData(ByteBuffer buffer, LispAddressSerializerContext ctx) {
85 return new SimpleAddress(deserializeData(buffer));
88 private DistinguishedNameType deserializeData(ByteBuffer buffer) {
89 StringBuilder sb = new StringBuilder();
90 byte character = buffer.get();
91 while (character != 0) {
92 sb.append((char) character);
93 character = buffer.get();
95 return new DistinguishedNameType(sb.toString());