private void updatePeer( final Peer peer, final InetSocketAddress isa, final Type type, final LanternTrafficCounter trafficCounter) { // We can get multiple notifications for the same peer, in which case // they'll already have a counter. if (peer.getTrafficCounter() == null) { log.debug("Setting traffic counter..."); peer.setTrafficCounter(trafficCounter); } else { log.debug("Peer already has traffic counter..."); } final String address = isa.getAddress().getHostAddress(); if (StringUtils.isBlank(peer.getIp())) { peer.setIp(address); } if (peer.getPort() == 0) { peer.setPort(isa.getPort()); } if (peer.getRosterEntry() == null) { log.debug("Setting roster entry"); final URI uri = LanternUtils.newURI(peer.getPeerid()); peer.setRosterEntry(rosterEntry(uri)); } peer.setType(type.toString()); updateGeoData(peer, isa.getAddress()); // Note we don't sync peers with the frontend here because the timer // will do it for us }
/** * There are two ways we initially learn about new peers. The first is a Lantern peer directly on * our roster, which will produce this event. The second is a kaleidoscope advertisement. Those * Kaleidoscope advertisements can be from peers on our roster, but they can also be from peers * we're not directly connected to. This method captures the first case where peers on our roster * are running Lantern. * * @param event The update presence event. */ @Subscribe public void onUpdatePresenceEvent(final UpdatePresenceEvent event) { log.debug("Processing presence event"); final Presence presence = event.getPresence(); final String from = presence.getFrom(); if (StringUtils.isBlank(from)) { log.warn("Presence with blank from?"); } else { addPeer(LanternUtils.newURI(from), Type.pc); } }
@Subscribe public void onKscopeAd(final KscopeAdEvent event) { final LanternKscopeAdvertisement ad = event.getAd(); // It is possible and even likely we already know about this peer // through some other means, in which case we have to update the data // about that peer as necessary. log.debug("Adding peer through kscope ad..."); final String jid = ad.getJid(); final URI uri = LanternUtils.newURI(jid); final Peer existing = this.model.getPeerCollector().getPeer(uri); final LanternRosterEntry entry = this.roster.getRosterEntry(jid); if (existing == null) { // The following can be null. final Peer peer = new Peer( uri, "", ad.hasMappedEndpoint(), 0, 0, Type.pc, ad.getAddress(), ad.getPort(), Mode.give, false, null, entry); this.model.getPeerCollector().addPeer(uri, peer); updateGeoData(peer, ad.getAddress()); } else { existing.setIp(ad.getAddress()); existing.setPort(ad.getPort()); existing.setMode(Mode.give); existing.setMapped(ad.hasMappedEndpoint()); if (existing.getRosterEntry() == null) { // Ours could be null too, but can't hurt to set. existing.setRosterEntry(entry); } existing.setVersion(ad.getLanternVersion()); updateGeoData(existing, ad.getAddress()); } }
/** returns true iff the request should have a cookie filter applied to it. */ boolean shouldFilter(HttpRequest request) { return LanternUtils.shouldProxy(request); }