- small pedantic fix
* streaming:
- Fix a deadly race condition.
- Some small pedantic fixes.
* core:
- Fix a deadly race condition.
* BOB:
- Fixed some races that occured from fixing races in streaming and core.
- Some badly needed code refactoring to depend less on the database.
* Remove the last reference to my eepsite as a "news.xml" source,
and likewise stop my public key from being included
among valid release signing keys.
---------------------------------------------------------------------------------------
* netdb.jsp: Add country chart at bottom, clean up version chart
- Extract files from jar to temp dir, load from that dir, then
copy to the base dir if we have permissions (and failing silently
if we don't), so we have optimized libs and no complaints
when we have a read-only base dir.
- Don't cd to script location, no longer required
* RouterLaunch:
- If no wrapper, put wrapper.log in system temp dir
unless specified with -Dwrapper.logfile=/path/to/wrapper.log
or it already exists in CWD (for backward compatibility)
- Append rather than replace wrapper.log
- Pass wrapper log location to router as a property, so that logs.jsp can find it
* logs.jsp:
- Get wrapper log location from a property too
* runplain.sh:
- Add path substitution to runplain.sh on install
- Pass I2P base dir to the router as a property
* wrapper.config:
- Put wrapper.log in system temp dir for new installs
- Pass I2P base dir to the router as a property
* WorkingDir:
- Don't migrate an existing install by default
- Never migrate the data (too hard)
Eliminate all uses of the current working directory, and
set up multiple directories specified by absolute paths for various uses.
Add a WorkingDir class to create a user config directory and
migrate files to it for new installs.
The directory will be $HOME/.i2p on linux and %APPDIR%\I2P on Windows,
or as specified in the system property -Di2p.dir.config=/path/to/i2pdir
All files except for the base install and temp files will be
in the config directory by default.
Temp files will be in a i2p-xxxxx subdirectory of the system temp directory
specified by the system property java.io.tmpdir.
Convert all file opens in the code to be relative to a specific directory,
as specified in the context. Code and applications should never open
files relative to the current working directory (e.g. new File("foo")).
All files should be accessed in the appropriate context directory,
e.g. new File(_context.getAppDir(), "foo").
The router.config file location may be specified as a system property on the
java command line with -Drouter.configLocation=/path/to/router.config
All directories may be specified as properties in the router.config file.
The migration will copy all files from an existing installation,
except i2psnark/, with the system property -Di2p.dir.migrate=true.
Otherwise it will just set up a new directory with a minimal configuration.
The migration will also create a modified wrapper.config and (on linux only)
a modified i2prouter script, and place them in the config directory.
There are no changes to the installer or the default i2prouter, i2prouter.bat,
i2prouter, wrapper.config, runplain.sh, windows service installer/uninstaller,
etc. in this checkin.
* Directories. These are all set at instantiation and will not be changed by
* subsequent property changes.
* All properties, if set, should be absolute paths.
*
* Name Property Method Files
* ----- -------- ----- -----
* Base i2p.dir.base getBaseDir() lib/, webapps/, docs/, geoip/, licenses/, ...
* Temp i2p.dir.temp getTempDir() Temporary files
* Config i2p.dir.config getConfigDir() *.config, hosts.txt, addressbook/, ...
*
* (the following all default to the same as Config)
*
* Router i2p.dir.router getRouterDir() netDb/, peerProfiles/, router.*, keyBackup/, ...
* Log i2p.dir.log getLogDir() wrapper.log*, logs/
* PID i2p.dir.pid getPIDDir() wrapper *.pid files, router.ping
* App i2p.dir.app getAppDir() eepsite/, ...
*
* Note that we can't control where the wrapper actually puts its files.
All these will be set appropriately in a Router Context.
In an I2P App Context, all except Temp will be the current working directory.
Lightly tested so far, needs much more testing.
- Don't instantiate unused SessionKeyPersistenceHelper
- Use TransientSessionKeyManager instead of PersistentSessionKeyManager
- Add generics to TransientSessionKeyManager to help understand it
- Change initial session map size to 64 (was 1024)
- Prepare for per-destination SessionKeyManagers in ElGamalAESEngine