mesh
zzz: hey?
zzz
mesh, just ask your question, I'll get to it when I can, or somebody else may answer faster
mesh
zzz: Is it okay for multiple clients to use the same I2PSocketManager?
zzz
yes, it's all thread-safe
mesh
zzz: What I mean is, can I call I2PSocketManager.connect() multiple times and connect to multiple destinations (using different Sockets) and everything will be multiplexed back to the right client socket when those services respond?
zzz
yes
mesh
ok. It's possible the bug is in my code then. I'm seeing some strange behavior when multiple clients share the same I2PSocketManager. It goes away when I use separate ones though.
zzz
that's equivalent to 'shared clients' in the console, where you can be doing email, browsing, etc
zzz
all on one set of tunnels
mesh
zzz: Ok. So it's okay for multiple services to share the same I2PSocketManager.getServerSocket() as long as each one listens on a different port. And multiple clients can use the same I2PSocketManager to connect() elsewhere.
zzz
correct
mesh
zzz: When I create a Destination on my (hidden) Router how long do you think it should take before the Destination is usable for other clients?
zzz
as long as it takes to build one tunnel each direction, plus a second or two to publish the LS to the ff
zzz
maybe a couple more seconds to flood
mesh
zzz: I have a machine in Asia and another machine in North Am. Asia will publish a Destination and North Am won't be able to connect to it for several minutes. Does that seem normal?
zzz
not normal but not unusual
zzz
if North Am is repeatedly trying before Asia is up, North Am will negative cache the lookup for a couple minues
mesh
zzz: I wonder if there's a way to shorten this publishing delay. Like the machine in North Am is very powerful. I could turn it into a flood fill I think. I wonder if I could tell my router to have a preference for that specific flood fill?
zzz
no, thats not how DHT works
mesh
zzz: Is there anything I can do to help shorten the delay? Sometimes it's only a minute or so but sometimes it's several minutes
zzz
if Asia is in hidden mode, it's going to struggle
mesh
zzz: ok. thanks for the help. I'll continue to poke at it.
mesh
zzz: btw, are there any docs on setting up a floodfill/high bandwidth router that I should read?
zzz
search on my forum
zzz
but for the most part, don't mess with it, it will become ff automatically if it's happy
zzz
trying to manually tune things can make it worse
mesh
zzz: I was thinking I might just give it lots of memory and bandwidth.
mesh
I thought there was an option to actually enable floodfill but now I can't find it.
zzz
/configadvanced
RN
first time ever seeing this message: "Maximum number of open connections reached."
zzz
re: today's #Spring4Shell 0-day, I2P does not use Spring, nor are we aware of any plugins or related apps that do
mesh
zzz: honestly spring4shell looks like a hoax
zzz
don't care. just trying to get ahead of it
zlatinb
yeah, not very clear according to the twitter front page ranking algorithm :)
zzz
because the log4j one was a bit of a fire drill, trying to do better this time
mesh
zzz: what do you think of this code: github.com/i2p/i2p.i2p/blob/master/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java#L1197 ?
mesh
what do people think about resolving "localhost.i2p" to your local Destination. Does that make sense?
zlatinb
not really because there's nothing listening on your local destination. Or do you mean to the embedded jetty http server?
mesh
is there a more standard mechanism for representing the value of "instance.getSession().getMyDestination()"?
mesh
zlatinb: I have stuff listening on the local destination
zlatinb
ok
mesh
zlatinb: I'm writing a kind of "I2P AddressResolver" (or maybe HostResolver is a better name) that can turn a java.lang.String into a net.i2p.data.Destination
zlatinb
ok in that case localhost.i2p makes sense why not
mesh
the basic idea was to check for "localhost.i2p", then based on this code github.com/i2p/i2p.i2p/blob/master/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java#L1197
mesh
then check for else if (destination.toLowerCase(Locale.US).endsWith(".b32.i2p"))
mesh
if it's not "localhost.i2p" and it doesn't end with ".b32.i2p" I think the next step is just to see if it's a base64 string and try to do, new Destination(host)
mesh
if all else fails give NamingService.lookup a try?
mesh
zlatinb: I use "localhost.i2p" in my tests at least. But I am thinking about removing the "i2p" and just going with the traditional "localhost"
mesh
then again I think stuff like browsers/i2ptunnel might want to make a clear distinction between "localhost" and "localhost.i2p"
zlatinb
yeah localhost.i2p makes more sense. Unless someone decides to register that on stats.i2p or reg.i2p in which case it would get confusing
mesh
yeah I hope the jumpservers would never accept such an address
mesh
right now my address resolver basically says, if (host is 'localhost.i2p') return session.getMyDestination() else if (host endswith 'b32.i2p') return b32Lookup(host); try base64 parsing of host; Last Resort: namingContext.lookup
mesh
I think that covers all the possibilities
mesh
the other question is how do you represent I2P addresses as uris
mesh
I was thinking something like, urn:i2p:${BASE64String}
mesh
there are actually some interesting advantages to using Uniform Resource Names (https://en.wikipedia.org/wiki/Uniform_Resource_Name) I think
mesh
part of me always wonders what are the chances of an i2p Destination collision
mesh
but that's insane hehe
eyedeekay
Should localhost.i2p be invalid entirely? proxy.i2p router.i2p and console.i2p are all invalid in AddressBook.java, see ~260
eyedeekay
bandura reached out to all the jump providers we could find to ask them to disallow registration of those names
mesh
eyedeekay: I treat "localhost.i2p" as a synonym for I2PSession.getMyDestionation() in my unit tests
mesh
I think it might be useful as a general rule when a user wants to access a local service they can just refer localhost.i2p
mesh
eyedeekay: certain addresses probably should be rejected since they are open to abuse. I could even see users falling for something like "update.i2p" and being asked to download "The offical update to the latest version of I2P"
mesh
of course there's no way to catch them all in a decentralized system