- LispAddressContainer srcEid = null;
- LispAFIAddress srcEidAfi = null;
- if (request.getSourceEid() != null) {
- srcEid = request.getSourceEid().getLispAddressContainer();
- srcEidAfi = LispAFIConvertor.toAFI(srcEid);
- }
- MapReplyBuilder builder = new MapReplyBuilder();
- builder.setEchoNonceEnabled(false);
- builder.setProbe(false);
- builder.setSecurityEnabled(false);
- builder.setNonce(request.getNonce());
- builder.setEidToLocatorRecord(new ArrayList<EidToLocatorRecord>());
- for (EidRecord eid : request.getEidRecord()) {
- EidToLocatorRecordBuilder recordBuilder = new EidToLocatorRecordBuilder();
- Entry<IMappingKey, List<RLOCGroup>> mapping =
- DAOMappingUtil.getMapping(srcEidAfi, eid, dao);
- recordBuilder.setRecordTtl(0);
- recordBuilder.setAction(Action.NoAction);
- recordBuilder.setAuthoritative(false);
- recordBuilder.setMapVersion((short) 0);
- recordBuilder.setMaskLength((short) mapping.getKey().getMask());
- recordBuilder.setLispAddressContainer(mapping.getKey().getEID());
- recordBuilder.setLocatorRecord(new ArrayList<LocatorRecord>());
- List<RLOCGroup> locators = mapping.getValue();
- if (locators != null && locators.size() > 0) {
- List<ItrRloc> itrRlocs = request.getItrRloc();
- addLocatorGroups(recordBuilder, locators, itrRlocs);
- if (srcEid != null && !(srcEid.getAddress() instanceof No) && itrRlocs != null
- && itrRlocs.size() > 0) {
- LispAddressContainer itrRloc = itrRlocs.get(0).getLispAddressContainer();
- SubscriberRLOC subscriberRloc = new SubscriberRLOC(itrRloc, srcEid);
- Set<SubscriberRLOC> subscribers = DAOMappingUtil.getSubscribers(mapping.getKey().getEID(),
- mapping.getKey().getMask(), dao);
- if (subscribers == null) {
- subscribers = Sets.newConcurrentHashSet();
- } else if (subscribers.contains(subscriberRloc)) {
- // If there is an entry already for this subscriberRloc, remove it, so that it gets the new
- // timestamp
- subscribers.remove(subscriberRloc);
- }
- if (smr) {
- LOG.trace("Adding new subscriber: " + subscriberRloc.toString());
- subscribers.add(subscriberRloc);
- DAOMappingUtil.addSubscribers(mapping.getKey().getEID(), mapping.getKey().getMask(),
- subscribers, dao);
- }
- }
- } else {
- recordBuilder.setAction(Action.NativelyForward);
- if (shouldAuthenticate() && DAOMappingUtil.getPassword(eid.getLispAddressContainer(), eid.getMask(),
- dao, shouldIterateMask()) != null) {
- recordBuilder.setRecordTtl(TTL_RLOC_TIMED_OUT);
- } else {
- recordBuilder.setRecordTtl(TTL_NO_RLOC_KNOWN);