public class ExternalLinksResource extends ServerResource {
@Get("json")
public Set<LinkWithType> retrieve() {
ILinkDiscoveryService ld = (ILinkDiscoveryService)getContext().getAttributes().
get(ILinkDiscoveryService.class.getCanonicalName());
Map<Link, LinkInfo> links = new HashMap<Link, LinkInfo>();
Set<LinkWithType> returnLinkSet = new HashSet<LinkWithType>();
if (ld != null) {
links.putAll(ld.getLinks());
for (Link link: links.keySet()) {
LinkInfo info = links.get(link);
LinkType type = ld.getLinkType(link, info);
if (type == LinkType.MULTIHOP_LINK) {
LinkWithType lwt;
long src = link.getSrc();
long dst = link.getDst();
short srcPort = link.getSrcPort();
short dstPort = link.getDstPort();
Link otherLink = new Link(dst, dstPort, src, srcPort);
LinkInfo otherInfo = links.get(otherLink);
LinkType otherType = null;
if (otherInfo != null)
otherType = ld.getLinkType(otherLink, otherInfo);
if (otherType == LinkType.MULTIHOP_LINK) {
// This is a bi-direcitonal link.
// It is sufficient to add only one side of it.
if ((src < dst) || (src == dst && srcPort < dstPort)) {
lwt = new LinkWithType(link,