- srcEid = LispAFIConvertor.toAFI(request.getSourceEid().getLispAddressContainer());
- }
- 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<IMappingServiceKey, List<MappingServiceRLOCGroup>> mapping = DAOMappingUtil.getMapping(srcEid, 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<MappingServiceRLOCGroup> locators = mapping.getValue();
- if (locators != null && locators.size() > 0) {
- List<ItrRloc> itrRlocs = request.getItrRloc();
- addLocatorGroups(recordBuilder, locators, itrRlocs);
- if (itrRlocs != null && itrRlocs.size() > 0) {
- LispAddressContainer itrRloc = itrRlocs.get(0).getLispAddressContainer();
- MappingServiceSubscriberRLOC subscriberRloc = new MappingServiceSubscriberRLOC(itrRloc);
- HashSet<MappingServiceSubscriberRLOC> subscribers = getSubscribers(mapping.getKey().getEID(), mapping.getKey().getMask());
- if (subscribers == null) {
- subscribers = new HashSet<MappingServiceSubscriberRLOC>();
- } 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) {
- IMappingServiceKey key = MappingServiceKeyUtil.generateMappingServiceKey(mapping.getKey().getEID(),
- mapping.getKey().getMask());
- LOG.trace("Adding new subscriber: " + subscriberRloc.toString());
- subscribers.add(subscriberRloc);
- dao.put(key, new MappingEntry<HashSet<MappingServiceSubscriberRLOC>>(SUBSCRIBERS_SUBKEY, subscribers));
+ srcEid = request.getSourceEid().getEid();
+ }
+ MapReplyBuilder replyBuilder = new MapReplyBuilder();
+ replyBuilder.setEchoNonceEnabled(false);
+ replyBuilder.setProbe(false);
+ replyBuilder.setSecurityEnabled(false);
+ replyBuilder.setNonce(request.getNonce());
+ replyBuilder.setMappingRecordItem(new ArrayList<>());
+ List<ItrRloc> itrRlocs = request.getItrRloc();
+ final IpAddressBinary sourceRloc = request.getSourceRloc();
+
+ for (EidItem eidRecord : request.getEidItem()) {
+ MappingRecord mapping = (MappingRecord) mapService.getMapping(srcEid,
+ eidRecord.getEid());
+ if (mapping != null) {
+ if (itrRlocs != null && itrRlocs.size() != 0) {
+ if (subscriptionService) {
+ final Rloc resolvedRloc = resolveRloc(itrRlocs, sourceRloc);
+ updateSubscribers(resolvedRloc, eidRecord.getEid(), mapping.getEid(), srcEid);