diff --git a/core/src/main/groovy/com/muwire/core/hostcache/CacheClient.groovy b/core/src/main/groovy/com/muwire/core/hostcache/CacheClient.groovy index 4ca583d8..36d8f120 100644 --- a/core/src/main/groovy/com/muwire/core/hostcache/CacheClient.groovy +++ b/core/src/main/groovy/com/muwire/core/hostcache/CacheClient.groovy @@ -4,8 +4,14 @@ import com.muwire.core.EventBus import com.muwire.core.MuWireSettings import com.muwire.core.connection.ConnectionManager +import groovy.json.JsonOutput +import groovy.util.logging.Log import net.i2p.client.I2PSession +import net.i2p.client.I2PSessionMuxedListener +import net.i2p.client.SendMessageOptions +import net.i2p.client.datagram.I2PDatagramMaker +@Log class CacheClient { final EventBus eventBus @@ -41,6 +47,45 @@ class CacheClient { if (!cache.getHosts(1).isEmpty()) return + log.info "Will query hostcaches" + + def ping = [type: "Ping", version: 1, leaf: settings.isLeaf()] + ping = JsonOutput.toJson(ping) + def maker = new I2PDatagramMaker(session) + ping = maker.makeI2PDatagram(ping.bytes) + def options = new SendMessageOptions() + options.setSendLeaseSet(true) + CacheServers.getCacheServers().each { + log.info "Querying hostcache ${it.toBase32()}" + session.sendMessage(it, ping, 0, ping.length, I2PSession.PROTO_DATAGRAM, 0, 0, options) + } + } + + class Listener implements I2PSessionMuxedListener { + + @Override + public void messageAvailable(I2PSession session, int msgId, long size) { + } + + @Override + public void messageAvailable(I2PSession session, int msgId, long size, int proto, int fromport, int toport) { + // TODO Auto-generated method stub + + } + + @Override + public void reportAbuse(I2PSession session, int severity) { + } + + @Override + public void disconnected(I2PSession session) { + log.severe "I2P session disconnected" + } + + @Override + public void errorOccurred(I2PSession session, String message, Throwable error) { + log.severe "I2P error occured $message $error" + } }