IRCaBot 2.1.0
GPLv3 © acetone, 2021-2022
#saltr
/2024/08/01
~dr|z3d
@RN
@RN_
@StormyCloud
@eyedeekay
@postman
@zzz
%Liorar
+FreefallHeavens
+Xeha
+bak83_
+cumlord
+hk
+poriori
+profetikla
+uop23ip
Arch
DeltaOreo
FreeRider
Irc2PGuest10850
Irc2PGuest19353
Irc2PGuest23854
Irc2PGuest46029
Irc2PGuest48064
Meow
Nausicaa
Onn4l7h
Onn4|7h
Over
T3s|4__
acetone_
anon4
anu
boonst
enoxa
glowie
mareki2pb
mittwerk
orignal
plap
shiver_
simprelay
solidx66
u5657_1
weko_
dr|z3d got a code issue that's giving me grief, zzz. have you got a few minutes?
zzz shoot
dr|z3d ok, thanks. so I'm trying to set inbound/outbound.lengthVariance in snark, and it's being a real pita.
dr|z3d I've got toggles for both, separate, click on/off, for a +0/1 variation when enabled.
dr|z3d can't figure out how to set those values when save is applied the first time. currently I'm adding the values to the text input, on save, and then another save is required to activate them. works for "on", doesn't work for off.
zzz they're checkboxes?
dr|z3d let me pull up the commit.. it's been tweaked since then, but you'll get a basic idea of what I'm doing (wrong).
zzz check the POST data in inspector, but I belive browsers don't send the input field for unchecked boxes, so you have to assume unchecked if the field is not in the POST data
dr|z3d yeah, I'm handling that ok I think. if the value is submitted, we're "on", otherwise off.
dr|z3d the issue is, I think, more, how to force an immediate update of the i2cp values when save is hit for the first time.
dr|z3d boolean enableVaryInboundHops = req.getParameter("varyInbound") != null;
dr|z3d boolean enableVaryOutboundHops = req.getParameter("varyOutbound") != null;
zzz well, you have to tell the router of course
zzz are you doing that?
dr|z3d yeah, this is where's I'm at with that:
dr|z3d if (_util.enableVaryInboundHops() != enableVaryInboundHops) {
dr|z3d _config.setProperty(PROP_VARY_INBOUND_HOPS, Boolean.toString(enableVaryInboundHops));
dr|z3d if (enableVaryInboundHops) {addMessage(_t("Enabled +0/1 tunnel hop randomization on Inbound tunnels"));}
dr|z3d else {addMessage(_t("Disabled tunnel hop randomization on Inbound tunnels"));}
dr|z3d _util.setEnableVaryInboundHops(enableVaryInboundHops);
dr|z3d changed = true;
dr|z3d if (_util.enableVaryOutboundHops() != enableVaryOutboundHops) {
dr|z3d _config.setProperty(PROP_VARY_OUTBOUND_HOPS, Boolean.toString(enableVaryOutboundHops));
dr|z3d if (enableVaryInboundHops) {addMessage(_t("Enabled +0/1 tunnel hop randomization on Outbound tunnels"));}
dr|z3d else {addMessage(_t("Disabled tunnel hop randomization on Outbound tunnels"));}
dr|z3d _util.setEnableVaryOutboundHops(enableVaryOutboundHops);
dr|z3d changed = true;
dr|z3d and then in util:
dr|z3d @SuppressWarnings({"unchecked", "rawtypes"})
dr|z3d public void setI2CPConfig(String i2cpHost, int i2cpPort, Map opts) {
dr|z3d if (i2cpHost != null) {_i2cpHost = i2cpHost;}
dr|z3d if (i2cpPort > 0) {_i2cpPort = i2cpPort;}
dr|z3d if (getVaryInboundHops()) {_opts.put("inbound.tunnelVariance", "1");}
dr|z3d else {_opts.remove("inbound.tunnelVariance");}
dr|z3d if (getVaryOutboundHops()) {_opts.put("outbound.tunnelVariance", "1");}
dr|z3d else {_opts.remove("outbound.tunnelVariance");}
dr|z3d if (opts != null) {
dr|z3d synchronized(_opts) {
dr|z3d // removed options...
dr|z3d for (Iterator<String> iter = _opts.keySet().iterator(); iter.hasNext(); ) {
dr|z3d String k = iter.next();
dr|z3d if (!HIDDEN_I2CP_OPTS.contains(k) && !opts.containsKey(k)) {iter.remove();}
dr|z3d _opts.putAll(opts);
dr|z3d // this updates the session options and tells the router
dr|z3d setMaxUpBW(_maxUpBW);
dr|z3d if (_manager != null) {
dr|z3d I2PSession sess = _manager.getSession();
dr|z3d if (sess != null) {
dr|z3d Properties newProps = new Properties();
dr|z3d synchronized(_opts) {newProps.putAll(_opts);}
dr|z3d sess.updateOptions(newProps);
dr|z3d also in util:
dr|z3d public boolean getVaryInboundHops() {return _varyInboundHops;}
dr|z3d public boolean getVaryOutboundHops() {return _varyOutboundHops;}
dr|z3d public void setVaryInboundHops(boolean yes) {
dr|z3d Properties opts = _context.getProperties();
dr|z3d _varyInboundHops = yes;
dr|z3d if (_varyInboundHops) {opts.setProperty("inbound.lengthVariance", "1");}
dr|z3d else {opts.setProperty("inbound.lengthVariance", "0");}
dr|z3d public void setVaryOutboundHops(boolean yes) {
dr|z3d Properties opts = _context.getProperties();
dr|z3d _varyOutboundHops = yes;
dr|z3d if (_varyOutboundHops) {opts.setProperty("outbound.lengthVariance", "1");}
dr|z3d else {opts.setProperty("outbound.lengthVariance", "0");}
zzz the router side probably isn't going to recognize and deal with removed options, so set variances to "0" instead of opts.remove()
dr|z3d ok, that makes sense, enable is kind of working, albeit with 2* save required, disable isn't.
zzz it's like that because there could be a zillion other options set initially, you don't know what those were and don't want those auto-removed when you do an updateOptions()
zzz don't know if that's documented anywhere though
zzz so once you add a variance, you can only turn it back off by setting to 0
dr|z3d well, I suspect I'm going to be nuking any pre-existing variance configs, but I'm ok with that for now, +0/1 is probably the only sane value in snark.
dr|z3d ok, thanks. that's good info.
dr|z3d is there anything explicit that I need to be doing on save configs to ensure the new values get immediately applied?
dr|z3d it's currently a 2*save thing, first time populates the i2cp text input with the values, second time saves those values.
zzz can't think of any generic advice, you'll have to just go thru your code and figure out why
dr|z3d ok, thanks. I'll keep introducing my head to the nearest wall until something works then :)
dr|z3d I think I may have found something, maybe setting varyEnabled values too late in locked_updateConfig, after the i2cp options have been set. I'll let you know when I got it fixed. thanks again for the help.
dr|z3d on a totally different issue, did you ever look at google-java-format?
zzz we have our style guide, not interested in somebody else's
dr|z3d sure, not asking because formatting per se.
dr|z3d asking because it has an interesting feature to remove unused imports from class files, and when you run it the unused imports are off the charts.
zzz not surprising
zzz jrandom can get some of the blame but copypasta also a culprit. also sometimes things start out complex and then don't get cleaned up
dr|z3d I just wonder whether a single pass with that tool is a "good idea" to remove the cruft.
zzz knock yourself out
dr|z3d no issue with compiling after the imports removed.
dr|z3d oh, I'm probably going to do it, just thought you might be interested. I can give you a simple bash script to handle it all.
dr|z3d #!/bin/sh
dr|z3d if [ $# -ne 1 ]; then
dr|z3d echo "Usage: $0 directory"
dr|z3d exit 1
dr|z3d directory=$1
dr|z3d find "$directory" -name "*.java" -print0 | xargs -0 /usr/lib/jvm/java-22-openjdk-amd64/bin/java -jar ./google-java-format.jar --replace --fix-imports-only --skip-sorting-imports
dr|z3d requires the .jar with dependencies version, I've pointed it at latest java, but it'll likely work with earlier versions (just not 8).
dr|z3d script takes a folder as argument.
dr|z3d also, re geomap, this looks interesting: leafletjs.com
zzz I made a plan for the big maps refactor and started on it. I got the js delta injection add/remove working.
zzz but gosh animation is a CPU pig, bad on chrome, even worse on firefox
zzz may have to rip it out or make it optional
snex Isn’t it already optional as in you have to click the Map tab
zzz thats where drz has it for now, I have it at the top of netdb summary page, don't know where it will end up