Compare commits

..

274 Commits

Author SHA1 Message Date
zzz
cc16834455 0.8.12 2012-01-06 00:40:20 +00:00
zzz
708e943c44 updates after review 2012-01-06 00:38:33 +00:00
zzz
a2d6dd2c5b disable i2psnark retry link until it can be fixed (ticket #575) 2012-01-04 02:22:34 +00:00
kytv
7d6ab5ca41 Updated geoip.txt from 2011-12-08 Maxmind database 2012-01-04 01:07:06 +00:00
kytv
a9e03504de Updated debian changelog 2012-01-04 01:01:49 +00:00
kytv
3b59af11f6 Suggest itoopie 2012-01-04 01:01:27 +00:00
kytv
3a2286f874 Debian: EXTRA is now assigned dymanically
Before there was a patch to add the -deb1 to the RouterVersion.java file, but
it needed me to update the deb#. With my newly budding regex skills, I'm now manipulating
it using sed and determining the number according to the debian version number.
2012-01-04 00:57:54 +00:00
kytv
ab0e8d94a2 Update geoip country list
PN,Pitcairn Islands added; we already had the flag.
2012-01-03 00:07:42 +00:00
kytv
be7770e679 Add EXTRAVERSION to the build number, custom installers, javadocs
With this check-in I'm adding the EXTRAVERSION to our javadocs and the custom
installer targets (if EXTRAVERSION is set in RouterVersion.java). Also,
i2pinstall*jar and i2pinstall.bz2 will be removed when ant clean is run.
2012-01-02 19:07:09 +00:00
kytv
60c5f06689 Add Isle of Man flag
Flag courtesy of the Open Clip Art Library, released into the public domain
2012-01-02 16:30:13 +00:00
kytv
b391ed15ed Update wrapper to 3.5.13 2012-01-02 16:12:50 +00:00
zzz
d8e297dde7 * Fix webapp PortMapper lookup for SSL-only console 2012-01-02 12:31:23 +00:00
zzz
f956539b4b Wrapper files for armv7.
Compiled on trimslice:
    gcc version 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4) 
    java version "1.6.0_18"
    OpenJDK Runtime Environment (IcedTea6 1.8.10) (6b18-1.8.10-0ubuntu1~11.04.1)
    OpenJDK Zero VM (build 14.0-b16, mixed mode)
    Wrapper 3.5.13 GPLv2
    All binaries stripped.
2012-01-02 12:22:03 +00:00
kytv
2dcc75ad2a set /var/log/i2p to group i2psvc instead of adm 2012-01-01 18:26:38 +00:00
kytv
6409f07c9b debian initscript: move I2PTEMP to /tmp/i2p-daemon 2012-01-01 18:14:08 +00:00
kytv
b38f6606c1 0.8.12 will be released with v3.5.13 of the wrapper 2012-01-01 16:55:28 +00:00
kytv
0a239e1d4a Remove the mention of GMP 4.1
All of the present jbigi libs are linked against 4.3.x and 5.0.2.
2012-01-01 16:53:29 +00:00
kytv
30e298d98b Convert extraneous tabs to spaces 2012-01-01 16:52:21 +00:00
kytv
3729aa31fd Add Estonian to Transifex (and upload the router console translation to tx) 2012-01-01 02:18:00 +00:00
kytv
3f4d154414 Brief instructions on lipo. 2012-01-01 00:20:06 +00:00
kytv
4c76a93adb Add CPU type check for OSX
I removed Tanuki's broken CPU "bitness" check for OSX in
3db46be1ede7d858b6c319905cf310d99227eb29. With this commit I add one that
works. Note that at this point we don't use the "bitness" checking because we
ship a quad-fat wrapper for OSX. Unfortunately, one can only manipulate the osx
binaries with "lipo" which is only available in OSX. In the future we may want
to use the "bitness" logic.

In any case, the old check set the bits to 64 for Leopard and above, but just
because a Mac is running Leopard or Snow Leopard doesn't mean it's 64bit
capable. This addition of mine will actually check the flags using sysctl. I'm
not using uname because OSX < Lion starts in 32bit mode by default (but can
still run 64bit binaries).
2011-12-31 22:46:49 +00:00
kytv
ce0e0b2004 Fix typo (s/stip/strip/), thanks k0e 2011-12-31 20:38:29 +00:00
zzz
fa0b7d9acc merge of '3e30b7ad2af5190cd2d124656e272700c53b8219'
and '554846d3fd4ebcdbfaccb3a001098626e0b26ca0'
2011-12-31 16:27:38 +00:00
zzz
c82dbd82b1 * Fix log NPE when saveConfig() fails at startup, thx kytv (backport from jetty6 branch) 2011-12-31 14:49:47 +00:00
kytv
b3e162e706 s/libwrapper.dll/wrapper.dll/ 2011-12-31 14:16:24 +00:00
kytv
f6d821c932 linux-ppc specific wrapper notes 2011-12-31 14:14:35 +00:00
kytv
45fb0ad9f3 Small wrapper-building HOWTO for BSD 2011-12-31 14:14:08 +00:00
zzz
5346dc1a98 * Estonian router console translation
thx "ajutine" - public domain
2011-12-30 17:06:32 +00:00
zzz
f92edb44ba how to update the wrapper 2011-12-29 16:51:47 +00:00
kytv
2250ce642a Remove mention of mtn repository that hasn't been active for nearly a year 2011-12-27 23:04:12 +00:00
kytv
f4b52b7ccd Remove tino's freenet proxy as it has been shut down 2011-12-27 23:00:31 +00:00
kytv
59f80086db Translation updates (es & sv) from Transifex 2011-12-27 22:41:00 +00:00
kytv
8e7bd9280d Spanish and Swedish debconf translation updates from Transifex 2011-12-27 22:32:39 +00:00
kytv
daca27ea45 loosen exit statuses 2011-12-27 16:02:59 +00:00
kytv
7b49493924 Redo existing account handling 2011-12-26 18:43:28 +00:00
kytv
848f30955d initscript improvements
- move router.ping to /var/run/i2p
   - move temp files to /var/tmp/i2p
   - Since gaps are allowed in the numbering with newer wrapper versions, start
     *.adddional.# numbering at 10
   - redirect errors to stderr
2011-12-26 18:42:13 +00:00
kytv
d9e4c4d7f4 refresh patch 2011-12-25 00:42:59 +00:00
zzz
ebad5ad61c tweaks 2011-12-23 16:52:04 +00:00
zzz
bbcd6243e7 * Logging: Eliminate LogWriter/LogManager deadlock (thx kytv) 2011-12-23 01:23:12 +00:00
zzz
95eabfaaf8 javadoc fix 2011-12-23 01:11:08 +00:00
kytv
0874b3e461 Add updater200WithJavadoc build target 2011-12-21 15:32:14 +00:00
kytv
ac8d65ad78 Debconf: clarify account existence warning
In the forums, someone thought the i2psvc account needed to be pre-existing;
therefore, I'll try to make it clearer.
2011-12-20 23:12:33 +00:00
kytv
bd14dc3112 i2prouter: set locale environment variables if LANG not set
Check for /etc/environment and /etc/default/locale and retrieve/set locale
variables from them--but only if LANG is unset. This should help in those
cases in which someone is starting I2P as a daemon using an initscript and I2P is
starting /before/ the environment is configured, leading to the wrong file
encoding being detected.
2011-12-19 18:14:21 +00:00
dev
cefe20f11d Switched itoopie to a brighter version. 2011-12-19 16:46:48 +00:00
zzz
78229227d2 * Router: Cleanup startup jobs and router.config reading; javadocs 2011-12-18 15:17:09 +00:00
zzz
61810b7215 tweaks 2011-12-18 13:28:57 +00:00
zzz
fb4d85ff8b * Blocklist: Buffer input to speed lookup
* PersistentDataStore: Buffer file writes and reads
2011-12-18 13:28:26 +00:00
zzz
937d2c54c8 * Addresses: Add utility toString() methods
* Transport: Log tweaks
2011-12-18 13:25:51 +00:00
kytv
5b37df5bc9 ...and now that my key is added, let's set it to trusted status 2011-12-18 01:14:10 +00:00
kytv
add3bcedf6 -23-rc
Mainly bumping the version because of the theme regression (that I introduced and fixed).
2011-12-18 00:58:25 +00:00
kytv
7284af9329 Add my signing key 2011-12-18 00:43:50 +00:00
kytv
959932b827 reference UK updates 2011-12-18 00:10:43 +00:00
kytv
f9b2100d75 Updated Ukrainian translation from Transifex 2011-12-18 00:09:52 +00:00
kytv
a2454e8e7d tiny regression fix
The css file originally had align:center, which is invalid. I assumed
text-align was meant but I was obviously wrong.
2011-12-17 23:07:44 +00:00
zzz
4322cb3ee5 merge of '0035c4f64c2b0f23c9e007363b634f360e2f10cb'
and '0c2d5fea1f036773ef51ce22d9d8c4e9203ee5f3'
2011-12-17 18:52:23 +00:00
kytv
a7311a5752 Minor css fixes (fixing validity not style) 2011-12-17 18:27:17 +00:00
zzz
b18e7c7839 add some line feeds 2011-12-17 14:30:14 +00:00
zzz
18b8ddc419 misc. log tweaks 2011-12-17 14:04:57 +00:00
zzz
48841481f0 * ProfileManager: Make some profile update methods non-blocking to reduce
stalls in the transports during profile reorg
    - Make isFailing() non-blocking since it's always false
2011-12-17 14:02:01 +00:00
zzz
bf45e31c62 * GeoIP: Reduce thread priority during lookup 2011-12-17 13:55:45 +00:00
zzz
1488cd0f48 * i2psnark:
- Replace file name characters not supported in default charset
    - Add torrent file name to local details page
2011-12-17 13:52:32 +00:00
dream
5b05d86ec6 merge of '577418047ed3ead63f9f7dc4211cf4ac7e19d251'
and 'c5d321a2c838422c5e813359c2e86f9b98561cf9'
2011-12-16 12:24:37 +00:00
dream
212981dfee Add hooks so the new PortMapper lets i2p plugins not fail when the router console is not on port 7657. Also raise an exception when requesting unregistered ports so as to encourage swift adding of the registration hooks when those ports are taken. 2011-12-15 23:36:32 +00:00
kytv
7864404a8c Swedish language translation updates from Transifex 2011-12-15 20:20:33 +00:00
zzz
51e4003089 merge of 'db5a04b2f4ebd4869d162a3bfa48221dec583b7e'
and 'e82c7db57396b2f2057f46c000a688200c4d12ea'
2011-12-14 03:59:19 +00:00
zzz
6da32a1ccb -21 2011-12-14 00:24:33 +00:00
zzz
eb32e2e23e merge of '581e8c75800b84404730c41f6eb904fbc4e43804'
and 'fda7a0fe63b4cda793b7c15d5d263c211b2a0903'
2011-12-14 00:20:17 +00:00
kytv
5673a6554b Update Oracle's javadoc URL 2011-12-14 00:09:15 +00:00
kytv
fe5c34ebae Minor Javadoc fixes
The author field showed the "may eat your children" line..
2011-12-13 23:57:14 +00:00
kytv
6ce5e8bd03 Don't require that full stats need to enabled in order to graph high capacity
peers. (closes #450)
2011-12-13 23:08:41 +00:00
zzz
27f05879b1 note that these will be moved to router.jar at some point 2011-12-13 21:38:24 +00:00
zzz
60297f56d7 * GeoIP: Buffer input to speed lookup by 10x 2011-12-13 21:19:32 +00:00
zzz
c92c664d3d used cached cert; generics 2011-12-13 20:38:02 +00:00
zzz
24c1473b1d disable debug double-check 2011-12-13 19:12:26 +00:00
zzz
9e88fdeec9 public 2011-12-13 18:59:24 +00:00
zzz
69e5760b37 javadoc clarifications 2011-12-13 18:56:44 +00:00
zzz
5a715f385a * ResettableGZIPInputStream: Better footer log errors 2011-12-13 15:57:51 +00:00
zzz
f9818a2b1d * DataHelper:
- Speed up heavily used long/byte[] converters
    - Add little endian versions of the converters
    - Cache common properties keys
  * RouterAddress: Cache transport names
2011-12-13 15:55:03 +00:00
zzz
900defcd42 * MessageHistory:
- Flush at shutdown
    - Fix file location, only delete if enabled
    - Cleanups, concurrent
2011-12-13 15:25:56 +00:00
zzz
15cbb6bb71 add charset, which is not necessarily the same as file.encoding 2011-12-13 15:24:20 +00:00
zzz
a0c6287d2c log tweak 2011-12-13 15:17:04 +00:00
zzz
14f61bbbb3 * TransportBid: Remove unused stuff 2011-12-13 15:16:07 +00:00
zzz
cd30545c08 * BuildHandler: Increase next hop timeout again 2011-12-13 15:14:54 +00:00
kytv
00c0171d31 English po updates (pushed to Transifex) 2011-12-12 11:23:02 +00:00
kytv
1e5afa8568 German and Spanish translation updates from Transifex 2011-12-12 11:17:17 +00:00
zzz
e117e3310c * ReusableGZIPInputStream: Fix 3 major bugs, all present since 2005:
- Payloads an exact multiple of 512 bytes failed to decompress
    - Data at the end of the stream could be lost
    - read() returned -1 when the data was 0xff
2011-12-11 22:59:37 +00:00
zzz
8448001a17 * I2NP:
- Deprecate unused stream methods and I2NPMessageReader since
      all transports provide encapsulation.
    - Don't throw IOE from byte array methods
    - Use cached null cert in GarlicClove
    - Add method to limit size of buffer to read
    - Don't check checksum at input, in most cases
    - Reuse checksum at output, for unomodified pass-through messages
      (but recalculating it now and logging on a mismatch for testing)
    - Fix DatabaseLookupMessage to internally store the don't include peers as
      a List, not a Set, so it doesn't get reordered and break the checksum
    - Log cleanup
  * NTCP:
    - Zero-copy and limit size when handing buffer to I2NP
    - Log hex dump message on I2NPMessageException, like in SSU
    - Don't close connection on I2NPMessageException
2011-12-11 21:04:43 +00:00
zzz
032b7d8230 merge of '0fc24e38cf763d87b57238415416a162be39e1ad'
and 'eb56602a5a6fb7a1d5b54be0a0618c0e861da10f'
2011-12-11 20:59:26 +00:00
sponge
6caa1c3e81 HTTP server tunnel, use log.WARN for 3 first minutes. (closes #460) 2011-12-11 17:22:28 +00:00
zzz
b47deadc97 log tweak 2011-12-11 13:54:03 +00:00
zzz
60e25b98b7 dont use stream method to avoid data copy 2011-12-11 13:40:06 +00:00
zzz
474909ae66 - Don't set the DatabaseLookupMessage dont-include collection until
it's complete, as DLM now makes a copy
- SearchState generics and cleanups
2011-12-11 13:37:42 +00:00
zzz
caada2bfa0 better logging of corrupted I2NP msgs 2011-12-11 13:36:50 +00:00
zzz
ec460794eb * PortMapper: New service for registering application ports in the context 2011-12-11 13:27:52 +00:00
kytv
929d471aa8 uname -s is sufficient
The OS' release version is discarded anyway....so we won't ask for it.
2011-12-11 12:52:32 +00:00
kytv
6c4dbc545d Redo functions to remove the dependency on bash 2011-12-11 12:50:24 +00:00
kytv
f8a3afd672 Enclose the tr parameters in quotes.
Without quotes will work in most shells but in some configurations it will fail.
2011-12-11 12:19:39 +00:00
kytv
5f81e923ca Change my earlier tests to something POSIX compliant
[ test $condition -a test $condition ] is only used in bash

(and I want to make this script work in any bourne compatible shell)
2011-12-11 11:56:59 +00:00
kytv
d9f5a8621d Enclose "tr" parameters in quotes 2011-12-11 11:50:41 +00:00
kytv
27d9616126 Remove the GNU-only -r parameter to sed
Revisiting this script now that I know a bit about regex.
2011-12-11 11:47:48 +00:00
kytv
50e3cdba05 Replace eepget's whitelist of allowed characters with the blacklist from i2psnark. (closes #562)
Thanks to zzz for pointing me in the right direction so I could fix my own bug. :)
2011-12-11 00:10:38 +00:00
kytv
6fa01a3b2d Better command to determine JAVABINARY
Switch to one awk command instead of using grep and cut.
2011-12-10 20:11:21 +00:00
kytv
fc7d8f72b0 merge of '20dbef275b439ce677bcad2e5044fbe2c3f2699b'
and '63fb5d00844b9465a8c7bfdece6a16946dd0085e'
2011-12-10 10:48:08 +00:00
kytv
03ff4dc0fd Add wrapper.java.maxmemory to debconf
The amount of RAM that I2P is limited to can be adjusted using debconf. The
value in /etc/i2p/wrapper.config is stored in the debconf db and is written to
/etc/default/i2p.
2011-12-10 02:17:37 +00:00
kytv
1d842f024a If dpkg -P i2p is run, remove /etc/default/i2p 2011-12-10 02:12:16 +00:00
zzz
1c4b0335a5 move error check to a better place 2011-12-09 23:01:19 +00:00
zzz
50606a6828 javadoc fix 2011-12-09 20:19:00 +00:00
zzz
25b0603fde * I2NP:
- Earlier detection and better logging of
      truncated TunnelGatewayMessage and DatabaseStoreMessage
    - Fix and enhance UnknownI2NPMessage implementation
    - Don't deserialize or verify the checksum of the
      embeddedI2NP message in the TunnelGatewayMessage
      at the IBGW, just use UnknownI2NPMessage and pass it along,
      except if zero hop; Still to do: similar thing at OBEP
    - Round expiration times when converting to/from seconds for SSU
    - Cleanups and javadoc
2011-12-09 17:36:49 +00:00
zzz
937ae8ad60 * UDP:
- Round expiration times when converting to seconds
    - Zero-copy of single-fragment messages in MessageReceiver
    - Optimizations, log tweaks, comments
2011-12-09 16:43:54 +00:00
zzz
6d4a9abd35 - Fix major bug from 2005 that corrupted outbound messages
that were an exact multiple of the fragment size.
2011-12-09 16:41:41 +00:00
zzz
533f7620ad bounds check 2011-12-09 13:19:18 +00:00
zzz
49d88f0060 * Console, i2psnark: More button CSS tweaks 2011-12-09 13:18:20 +00:00
zzz
1c4d1e9a62 * LeaseSet: Fix size calculations 2011-12-09 13:16:29 +00:00
zzz
51f20c2c33 * Base64: Add decodestring command in main() 2011-12-09 13:15:19 +00:00
zzz
258effcc84 * UDP PacketBuilder:
- Again allow transmitting all new acks if there is room;
      only limit resend acks
    - Sanity checks to limit to 255 acks
2011-12-07 00:51:31 +00:00
zzz
3bd641abd0 * UDP: Fix major MTU bug introduced in 0.8.9.
- Change large MTU from 1492 to 1484 and small from 608 to 620
      for encryption padding efficiency
    - Enforce sent MTU limit
    - Increase receive buffer size from 1536 to 1572 so that excessive-sized
      packets sent by 0.8.9-0.8.11 routers aren't dropped
    - Limit the max acks in a data packet
    - Limit the duplicate acks in successive data packets
    - Only include acks that will fit in the mtu in a data packet
    - Correctly remove acks from the pending set after they are sent,
      so they aren't sent repeatedly
    - Don't pad data packets unless necessary
    - Debug logging and javadocs
2011-12-06 21:50:33 +00:00
zzz
be1d95e991 form size increase to match future hq.postman.i2p limits 2011-12-06 21:49:55 +00:00
zzz
bd82a0c435 increase next hop send timeout; log tweaks 2011-12-06 21:49:23 +00:00
zzz
0f384c86fe * Router:
- More refactoring tasks to their own files
    - Adjust some thread priorities
2011-12-05 16:18:35 +00:00
zzz
5362e7cf15 comment out some stats 2011-12-05 16:17:29 +00:00
zzz
4c2c198c0a cleanup 2011-12-05 16:17:09 +00:00
zzz
51899e9ea0 CSS 2011-12-05 01:01:14 +00:00
zzz
3fc312a66b locking tweaks 2011-12-05 00:59:58 +00:00
zzz
e9d0d79809 * Tunnel RED:
- Complete rework of participating traffic RED.
      Implement an accurate bandwidth tracker in FIFOBandwidthRefiller.
    - Fix drop priority of VTBM at OBEP
    - Lower drop priority of VTBRM at IBGW
    - Raise threshold from 95% to 120%
    - Remove unused things in HopConfig
...needs more testing...
2011-12-04 19:01:52 +00:00
zzz
69cae1a052 cleanup 2011-12-04 18:53:24 +00:00
zzz
cc71e3a5ca useless null check removal 2011-12-04 18:52:31 +00:00
zzz
c5f98a04fa * Console:
- Less icons on configclients.jsp
    - Fix some browsers breaking line on negative numbers
    - Tab CSS tweaks
2011-12-04 18:52:17 +00:00
zzz
489a0ead14 * UDP: Fix i2np.udp.allowLocal operation (thx Quizzers) 2011-12-04 18:50:40 +00:00
zzz
88e7d60e3e * IRC Client: Lower log level for connect error to warn (thx echelon/sponge) 2011-12-04 18:49:50 +00:00
zzz
0d145fc77f * i2psnark: Fix directories not always deleted when torrent is deleted 2011-12-04 18:49:07 +00:00
zzz
b2e4ab4a30 merge of '400a5244d9222e3fa5b59c06d1d1e2aff96bc0ad'
and 'cd21f20ad4b02cde232d083cca6b68b8c3097edc'
2011-12-02 18:02:10 +00:00
zzz
c9cccd7581 * Console:
- Summary bar tweaks
    - Config nav CSS tabs
    - CSS cleanups from last checkin
2011-12-02 17:21:04 +00:00
echelon
58f562d1bd added irc.echelon.i2p to list of IRC servers 2011-12-02 17:15:07 +00:00
zzz
0a76a0db22 * Susimail:
- Login screen tweaks
    - Cleanups, generics, static
2011-12-02 17:05:08 +00:00
zzz
080cc962fb * Console:
- Split up config network page
    - CSS tweaks and cleanups
    - Change some form notices to errors
    - Spiff up the buttons

    new silk icons: See licenses/LICENSE-SilkIcons.txt
    new toopie icon: Shrunk from existing one
2011-11-30 23:23:41 +00:00
zzz
b3fcdb8e46 * Throttle: Update throttle status immediately on shutdown request;
clear starting-up message after 20 minutes
2011-11-30 23:17:40 +00:00
zzz
f6cff78528 * IRC Server: Fix IOOBE (ticket #559) 2011-11-30 23:16:29 +00:00
zzz
5fd20fc77c * i2psnark:
- Retry link on torrent download fail
    - Clear URL after clicking 'add torrent'
    - Message tweaks
    - CSS tweaks
2011-11-30 23:15:22 +00:00
zzz
9ae07688a5 move dummy implementations to their own directory 2011-11-29 19:32:20 +00:00
zzz
9a2a51518a -12 2011-11-29 15:33:37 +00:00
zzz
c0b9fe0340 * Router: Refactor periodic tasks to their own files 2011-11-29 15:25:40 +00:00
zzz
d3564dfcb5 * Random: Use new nextBytes(buf, off, len) for efficiency 2011-11-29 13:54:19 +00:00
zzz
8480788856 -11 2011-11-28 23:04:48 +00:00
zzz
6bcf40b41a merge of '31dc69e6816f5a08d4183272f46d23e9c397f9c6'
and 'da86088817442e065e854274adbd896a92ee148f'
2011-11-28 22:58:08 +00:00
zzz
6b811b36b9 replace more equalsIgnoreCase() calls 2011-11-28 22:55:10 +00:00
zzz
8619fd2c05 dont use equalsIgnoreCase() for booleans 2011-11-28 21:52:49 +00:00
zzz
d9dcb1e583 * Specify locale in all toLowerCase() and toUpperCase() calls to
avoid "Turkish four i problem"
2011-11-28 20:32:23 +00:00
zzz
bf461ee77e * Update: Files listed in deletelist.txt will be deleted 2011-11-28 18:00:36 +00:00
kytv
2537f48d08 Add (more) IRCop (and other safe) commands to the IRCfilter whitelist 2011-11-28 17:42:28 +00:00
zzz
1339209fa9 * Reseed:
- Restore i2pbote (ticket #516)
    - Remove r31453 (cert expiring, host soon to be shut down permanently)
2011-11-27 19:06:40 +00:00
zzz
8744c83ff6 optimize outbound whitelist 2011-11-27 19:05:38 +00:00
zzz
09731ffd3a NPE fix tweak 2011-11-26 23:22:01 +00:00
zzz
6d5678c14e pumper NPE fix 2011-11-26 22:57:23 +00:00
zzz
e4004e6f83 socket error log fix 2011-11-26 22:20:31 +00:00
zzz
17773a2de9 merge of '0df36c67913504a966d734f799d1bb39bf358396'
and '220f8941ffde39c665c1213cbc27037defb3527f'
2011-11-26 22:13:07 +00:00
kytv
97ead4cdd6 -7 (b/c of irc filtering changes) 2011-11-24 18:28:40 +00:00
kytv
18c850c085 commands that are commonly used by IRCops. Should be harmless. 2011-11-24 18:27:55 +00:00
kytv
6b49c03eb8 Add MOTD and ADMIN to the "do not filter" list 2011-11-24 10:42:18 +00:00
kytv
95dd34f009 Since they're harmless, add default unrealircd aliases to the "don't filter"
list.
2011-11-24 10:40:15 +00:00
zzz
f630d2dd27 * NTCP:
- More optimizations in recvEncrypted()
    - More efficient XOR
    - Reduce bandwidth stat update frequency
    - Check for repeated zero-length reads
2011-11-23 23:36:37 +00:00
zzz
f69f06b038 * Tunnel encryption: More efficient XOR 2011-11-23 22:25:36 +00:00
zzz
5a934050d4 * CryptixAESEngine: Fix bogus bounds checks 2011-11-23 22:12:47 +00:00
zzz
df8cd90b85 * RandomSource: Add new method getBytes(buf, offset, length) 2011-11-23 22:10:34 +00:00
kytv
85d7cfb9e0 Remove broken if statement
Tanuki's script has a broken check for 
OSX versions older than Leopard that sets
the CPU bitness to 32 for < 10.5. Since the
doesn't even work on Tiger (or older) (and
our binary is quad-FAT), this check is not 
neeeded.
2011-11-21 22:02:41 +00:00
kytv
f97779bed7 fix stupid typo by adding a missing ! (*facepalm*) 2011-11-21 21:36:49 +00:00
kytv
f4f5873692 minor HTML fixes, trailing space removal 2011-11-21 20:18:26 +00:00
zzz
f3e2dfacdf stat cleanups 2011-11-21 19:06:17 +00:00
zzz
9d0bafb8fa comment out debug code in initialization 2011-11-21 18:40:36 +00:00
zzz
1119612684 * NTCP Pumper:
- Ensure failsafe pumper code gets run on schedule
    - Don't copy the read buffers
    - Adjust minimum read buffers based on memory
    - New i2np.ntcp.useDirectBuffer option (default false)
    - Mark peer unreachable when read failure is during establishment
    - Change some Reader Lists to Sets to avoid linear search
    - Log tweaks, debugging, new loop stats
2011-11-21 18:22:13 +00:00
zzz
dc6c568e9f equals optimization 2011-11-21 15:29:11 +00:00
zzz
bef8fe0c8c spacing 2011-11-21 15:28:19 +00:00
zzz
3e97958100 * NTCP:
- First cut at improving EventPumper performance (ticket #551)
    - Establishment timeout cleanup/concurrent
    - Remove some logging and stats
    - Switch some Queues from LBQ to CLQ
    - Static ByteBuffer cache
2011-11-18 16:21:18 +00:00
zzz
cac1ad35bf reorder susidns xml changes 2011-11-18 16:20:39 +00:00
zzz
579af7e3ad build fix 2011-11-16 13:29:26 +00:00
zzz
e4ee5e3016 * NTCP: Reduce log level for race (ticket #392)
* NTCPConnection: Concurrent PrepBufs
  * OutNetMessage: Remove some fields and methods used only in NTCP debugging
2011-11-16 01:00:08 +00:00
zzz
caaa8dacad cleanup 2011-11-16 00:57:40 +00:00
zzz
ff499844a2 * Router: Move router.ping file from temp directory to config directory 2011-11-16 00:56:45 +00:00
zzz
97fe1baf6a * Console: Add Jetty version to logs page 2011-11-16 00:48:17 +00:00
zzz
7aff01ea84 * SusiDNS: Remove .jsp suffixes 2011-11-14 15:06:23 +00:00
zzz
7f467dbdc8 cleanups 2011-11-14 15:05:26 +00:00
zzz
0675c4caeb * Profiles: Only use same-country metric for countries with
lots of I2P users
2011-11-14 15:04:27 +00:00
zzz
66f25e845a * Console: Remove % chart at bottom of tunnels.jsp 2011-11-14 15:02:57 +00:00
zzz
fcbee9d9c5 * Installer: Fix Ukrainian translation (ticket #550) thx rndnick 2011-11-12 13:55:46 +00:00
zzz
624badfb5f * Console:
- Less magic and fix img sizes, for speed and less artifacts while rendering
    - CSS tweaks
2011-11-11 02:50:55 +00:00
kytv
4677b27e49 Minor and maybe pointless change: We use monotone to manage the i2p source. Any
other DVCSes that I2P may be managed in aren't official.
2011-11-10 12:25:30 +00:00
zzz
f9c3d58b47 -1 2011-11-09 23:31:25 +00:00
zzz
5b5c39bf45 merge of '95d0c51104a5fdcaa83228fbf9016b66b6227600'
and 'fb96ae6d12deead2b45984e33fcfeedb4641b3ac'
2011-11-09 23:27:45 +00:00
zzz
37e3e9e2cf * Console: Add ability to hide news 2011-11-09 18:38:39 +00:00
zzz
af42b9e9a8 * Router: Clean up config map methods and uses 2011-11-09 18:36:32 +00:00
zzz
3fbe8e70e6 * wrapper.config: Increase shutdown timeout 2011-11-09 18:33:06 +00:00
zzz
6a234759d5 * I2PTunnel IRC Client: Don't filter PASS (ticket #549) 2011-11-09 18:32:01 +00:00
zzz
85a8b587cd License corrections that should make things more compatible:
Jetty and commons logging are now Apache 2.0 (not 1.1)
    systray4j.jar is LGPL (not GPL)
    Note where a later GPL version is allowed
2011-11-09 18:30:48 +00:00
kytv
6849427b4f *Sigh* The WRAPPER_CONF variable exists and I don't know why I didn't use it
before with my 'gentoo hack'.
2011-11-09 18:30:21 +00:00
kytv
bb1b9d63df <br/> is XHTML not HTML 2011-11-09 16:47:04 +00:00
kytv
5efd19e4e0 Add doctype, <title>, <p> tags. 2011-11-08 21:26:39 +00:00
kytv
c0a63bcd76 fix stupid packaging error brought about by my tweaks for Gentoo. 2011-11-08 21:00:41 +00:00
kytv
6fc0e0fe22 ticket #490 2011-11-08 14:40:24 +00:00
kytv
ef3f184233 Minor cleanups to the css files (no actual theme changes)
* Remove spaces before :
  * Remove traling spaces
  * Remove lines consisting of spaces
  * Ensure spaces before {
  * Fix indentation in a couple of spots
2011-11-08 11:44:45 +00:00
zzz
20733d3bd2 to DOS line endings 2011-11-07 16:06:05 +00:00
zzz
530b481ffd 0.8.11 2011-11-07 14:48:31 +00:00
zzz
8ecf423dfc javadoc 2011-11-07 14:21:07 +00:00
kytv
67cc3ad5b0 -7rc
Updating geoip
Bumping version b/c of dream's changes to I2PServerSockets
2011-11-05 14:33:19 +00:00
kytv
e6dcd3a892 merge of '01e66d36ba6e97474a6a11980be54d55d4897219'
and '6bdb396ca63eea516f2f5ada93d4d8d94ad76b77'
2011-11-05 14:30:44 +00:00
kytv
e257cc8b05 updated & pushed to tx 2011-11-05 01:09:50 +00:00
dream
26d3646630 Added an "accepting" channel for I2PServerSockets that is really low brow, but should work for now. Compiles, runs. 2011-11-04 22:56:09 +00:00
kytv
668df37d20 becoming an upgrade hosting host 2011-11-03 21:58:44 +00:00
kytv
9e6885d9b3 updated patch due to gentoo related changes to i2prouter and wrapper.config 2011-11-03 21:57:19 +00:00
zzz
2a57c24e9d spelling fix 2011-11-02 18:07:02 +00:00
zzz
e53290db18 proxy error page tweaks 2011-11-02 18:05:40 +00:00
zzz
96d5d75d56 * Reseed:
- Add new host i2p.mooo.com thx "bugme" (wii.torproject -at- gmail dot com)
    - Handle % escaping in file URLs
    - Do basic validation of router hash
    - Add some more sanity checks
2011-11-02 17:58:24 +00:00
kytv
32a4ccc575 Gentoo compatibility
Update i2prouter to be more compatible with Gentoo systems and add a commented out entry to wrapper.config
2011-11-02 00:05:51 +00:00
kytv
1c0554ab6e Ukrainian translation updates from Transifex 2011-11-01 00:17:01 +00:00
kytv
347c579da5 Ukrainian debconf translations from transifex 2011-11-01 00:16:35 +00:00
kytv
835db4341f enable more resources in Ukrainian from tx 2011-11-01 00:16:00 +00:00
zzz
bf0947ee82 * Tunnels:
- Restore and implement lengthOverride()
    - Adjust quantity override
2011-10-31 21:13:01 +00:00
zzz
a3a1110b41 * ProfileOrganizer:
- Fix rare NSEE thx sponge
2011-10-31 16:48:46 +00:00
zzz
fc074234af * ProfileOrganizer:
- Fix expiration of old profiles
    - Don't exceed high cap limit between reorgs
    - Reduce max reorg cycle time
    - Reduce new bonus values
2011-10-31 00:12:21 +00:00
zzz
1e8e067a80 micro-optimization 2011-10-31 00:09:47 +00:00
zzz
fd25ead0bd * NetDB: Reduce max RI publish interval 2011-10-31 00:09:10 +00:00
zzz
6892469e0e * SSU: Increase threshold for incremented cost 2011-10-31 00:08:34 +00:00
zzz
8f31713f6a * CapacityCalculator: Small adjustment for XOR distance to
break ties and encourage closeness
2011-10-29 14:05:39 +00:00
zzz
a9698dd89e -3 2011-10-29 13:23:30 +00:00
zzz
223de5606e * SSU: Limit max peers to use as introducers 2011-10-29 13:21:57 +00:00
zzz
e4b5b97268 negative duration cleanup 2011-10-29 13:21:00 +00:00
zzz
669b26a171 lower min profile expire time 2011-10-29 13:20:27 +00:00
zzz
e3723d7c9f build handler threads advanced config option 2011-10-29 13:19:59 +00:00
zzz
33d566be36 * Tunnels:
- Reduce exploratory tunnel quantity if build success rate
       is very low, but may disable this later
     - Try rebuilding same tunnel (some of the time)
2011-10-28 02:03:01 +00:00
zzz
e8fe115ffe * BuildHandler: Move inbound request handling to its own thread(s)
(ticket #542, see also http://zzz.i2p/topics/996)
2011-10-28 01:43:33 +00:00
zzz
d7a5e3ef53 * CapacityCalculator: Small boost for connected peers, new peers, and
same-country peers; deduct for recently-unreachable peers
2011-10-28 01:28:41 +00:00
zzz
042da4d921 max conns 2011-10-28 01:27:11 +00:00
zzz
05522addba javadoc 2011-10-28 01:26:11 +00:00
zzz
f4fa5d115a * SSU:
- Increase default max connections again
    - Reduce min idle time
    - Separate out introducer pinger from introducer selection
      so it can be run separately and more often
    - Only ping introducers if we need them
2011-10-28 01:25:44 +00:00
zzz
b7ba422983 * DecayingBloomFilter: Whups fix NPE from previous checkin if log=INFO 2011-10-28 01:23:28 +00:00
zzz
7f1c5b2e1a * NTCP: Reduce min idle time 2011-10-28 01:22:53 +00:00
zzz
157a78857d * Tunnels:
- Make most classes package private
    - Final, static, logs, cleanups
    - Consolideate createRateStat calls
    - Add getTotalLength()
    - Remove unused lengthOverride()
2011-10-25 21:39:32 +00:00
zzz
ef93532c96 dont require restart after changing router.publishPeerRankings 2011-10-25 21:36:52 +00:00
zzz
fe6fd13a6a unused and javadoc 2011-10-25 21:35:26 +00:00
zzz
05cd98f9b4 util cleanups 2011-10-25 21:34:32 +00:00
zzz
1a2bd800d9 checklist cleanup 2011-10-25 21:33:24 +00:00
zzz
661604dd4e * BloomSHA1, DecayingBloomFilter:
- Refactor for concurrent, at some small risk of false negatives
    - Optimizations to cache objects and reuse offsets
2011-10-25 21:33:12 +00:00
zzz
1fc6d0ad54 * UDP: Mark only first fragment as a duplicate 2011-10-25 21:31:23 +00:00
zzz
1a6e9257f3 cleanup 2011-10-25 21:31:03 +00:00
zzz
1cd0177f87 handle negative durations better 2011-10-25 21:29:49 +00:00
zzz
c90097eca7 0.8.10 2011-10-19 23:43:12 +00:00
kytv
a01c11ca1a checking in updated Debian changelog 2011-10-19 19:59:15 +00:00
kytv
a57b57f306 restore Serbia & Montenegro 2011-10-19 19:40:11 +00:00
kytv
10e412d494 updated before push to tx 2011-10-19 19:36:47 +00:00
kytv
6a798fb7b5 Italian update from tx (ty danimoth) 2011-10-19 19:32:59 +00:00
kytv
23ad969332 merge of '9c2afc5c3b2920c5284346d3b93a8075fc9d2f37'
and 'cba0dcc238e5631aff5850f49d9cb07ec70e8f65'
2011-10-19 19:22:04 +00:00
zzz
b475e31f70 * I2PTunnel: Fix timeout message on POST (ticket # ) 2011-10-19 19:09:44 +00:00
hiddenz
fda3ef2cfc Update russian translation 2011-10-19 19:03:26 +00:00
zzz
892ef4abe1 reduce RI expiration again 2011-10-19 02:33:45 +00:00
zzz
81093d1342 * StoreJob: Ensure nonzero token
* Tunnels: Connection limit mitigation:
    - Disable tunnel testing
    - Implement closest-to-the-key tunnel selection
    - Use closest-selection in NetDB lookups, stores, and verifies;
      OCMOSJ; and in BuildRequestor
2011-10-18 19:28:47 +00:00
zzz
abd823ab95 dash two 2011-10-17 17:48:43 +00:00
zzz
3bc284b522 hide tunnel lag if testing is disabled 2011-10-17 17:28:57 +00:00
zzz
5f7c971345 return unmodifiable collections 2011-10-17 17:28:37 +00:00
zzz
46a1506c51 log tweak 2011-10-17 17:26:31 +00:00
zzz
0202faf7f9 * SSU: Increase max concurrent outbound attempts;
fix udp.establishRejected stat
2011-10-17 17:25:10 +00:00
zzz
bff518a038 more efficient empty check 2011-10-17 17:23:40 +00:00
zzz
0b293c517f * NetDB: Fix rare NPE from netdb.jsp (ticket #539) 2011-10-17 17:22:23 +00:00
zzz
afd9c2b2c0 * Router: Change all shutdown CRITs to ERRORs; shutdown
the stat manager last to reduce chance of NPEs
    (similar to that in tickets #534,535)
2011-10-17 17:19:57 +00:00
zzz
331da7f4fe javadoc 2011-10-17 17:18:41 +00:00
kytv
25a257b6f1 Even though the country no longer exists, re-add Serbia and Montenegro to
countries.txt. zzz: thanks for reminding me that most users will have an old
geoip file.
2011-10-16 16:26:07 +00:00
zzz
82ac0db333 * BuildExecutor: Add tunnel.buildConfigTime stat
* FloodfillMonitorJob: Log tweak (ticket #533)
  * I2CP: Improve error message (ticket #533)
  * JobQueue:
    - Log error when queue is out of order
    - Log tweaks
  * FloodfillPeerSelector: Fix stat NPE (tickets #534,535)
  * RouterThrottle:
    - Fix stat NPE (tickets #534,535)
    - Increase max tunnels and max delay again
  * OutNetMessagePool: Log tweak (ticket #533)
  * Router:
    - Add OOM help (ticket #533)
    - Prevent parallel shutdowns after multiple OOMs (tickets #534,535)
2011-10-15 17:30:24 +00:00
zzz
3dbefa8d01 * SSU: Fix concurrency errors (ticket #536) 2011-10-15 17:21:31 +00:00
zzz
e8712a3a11 * EepGet:
- Add gunzip support (nonproxied only)
    - Clean up progress formatting
  * SSLEepGet:
    - Add gunzip support
    - Increase buffer size
2011-10-15 17:20:30 +00:00
zzz
104594ed59 log cleanup 2011-10-15 17:15:48 +00:00
zzz
a6ce41fac5 * Stats: Add API methods for zero duration, for efficiency 2011-10-15 17:11:40 +00:00
zzz
a97834d2b7 * configupdate.jsp:
- Fix setting to 'never' (ticket #523)
    - Fix always saying trusted keys changed
    - Parameterize tags
2011-10-15 17:09:04 +00:00
kytv
485a3ee11a updated translations (fi & sv) from Transifex 2011-10-13 00:35:37 +00:00
kytv
b835dbcf4c Add Swedish Debconf translation from Transifex 2011-10-13 00:29:41 +00:00
kytv
6a13d22556 Updated English po files to push to Transifex 2011-10-12 23:50:53 +00:00
kytv
a296dedebe Add new countries from Maxmind's geoipdb 2011-10-12 23:49:24 +00:00
kytv
161e7ca8b2 Add flag for Guernsey from the Open Clip Art Collection, released into the
public domain
2011-10-12 23:47:21 +00:00
495 changed files with 41199 additions and 24794 deletions

View File

@@ -10,6 +10,7 @@ trans.it = apps/i2ptunnel/locale/messages_it.po
trans.nl = apps/i2ptunnel/locale/messages_nl.po
trans.ru = apps/i2ptunnel/locale/messages_ru.po
trans.sv_SE = apps/i2ptunnel/locale/messages_sv.po
trans.uk_UA = apps/i2ptunnel/locale/messages_uk.po
trans.vi = apps/i2ptunnel/locale/messages_vi.po
trans.zh_CN = apps/i2ptunnel/locale/messages_zh.po
@@ -19,6 +20,7 @@ source_lang = en
trans.ar = apps/routerconsole/locale/messages_ar.po
trans.da = apps/routerconsole/locale/messages_da.po
trans.de = apps/routerconsole/locale/messages_de.po
trans.et_EE = apps/routerconsole/locale/messages_ee.po
trans.es = apps/routerconsole/locale/messages_es.po
trans.fi = apps/routerconsole/locale/messages_fi.po
trans.fr = apps/routerconsole/locale/messages_fr.po
@@ -92,6 +94,7 @@ trans.nl = apps/susimail/locale/messages_nl.po
trans.ru = apps/susimail/locale/messages_ru.po
trans.sv_SE = apps/susimail/locale/messages_sv.po
trans.pl = apps/susimail/locale/messages_pl.po
trans.uk_UA = apps/susimail/locale/messages_uk.po
trans.vi = apps/susimail/locale/messages_vi.po
trans.zh_CN = apps/susimail/locale/messages_zh.po
@@ -102,6 +105,7 @@ trans.de = debian/po/de.po
trans.es = debian/po/es.po
trans.pl = debian/po/pl.po
trans.ru = debian/po/ru.po
trans.sv_SE = debian/po/sv.po
trans.uk_UA = debian/po/uk.po
[main]

View File

@@ -2,7 +2,7 @@ This product includes both public domain code and licensed code as described bel
For all code, unless otherwise stated in the appropriate license, the following applies:
NO WARRANTY
NO WARRANTY
BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
@@ -92,34 +92,34 @@ Installer:
See licenses/LICENSE-Launch4j.txt (in binary packages)
See installer/lib/launch4j/LICENSE.txt (in source packages)
The following projects are used by Launch4j...
MinGW binutils (http://www.mingw.org/)
MinGW binutils (http://www.mingw.org/)
Commons BeanUtils (http://jakarta.apache.org/commons/beanutils/)
Commons BeanUtils (http://jakarta.apache.org/commons/beanutils/)
Commons Logging (http://jakarta.apache.org/commons/logging/)
See licenses/LICENSE-Apache1.1.txt
Commons Logging (http://jakarta.apache.org/commons/logging/)
See licenses/LICENSE-Apache2.0.txt
See licenses/NOTICE-Commons-Logging.txt
XStream (http://xstream.codehaus.org/)
XStream (http://xstream.codehaus.org/)
Copyright (c) 2003-2004, Joe Walnes
See licenses/LICENSE-XStream.txt
JGoodies Forms (http://www.jgoodies.com/freeware/forms/)
JGoodies Forms (http://www.jgoodies.com/freeware/forms/)
Copyright (c) 2002-2004 JGoodies Karsten Lentzsch. All rights reserved.
See licenses/LICENSE-JGoodies-Forms.txt
JGoodies Looks (http://www.jgoodies.com/freeware/looks/)
JGoodies Looks (http://www.jgoodies.com/freeware/looks/)
Copyright (c) 2003 JGoodies Karsten Lentzsch. All rights reserved.
See licenses/LICENSE-JGoodies-Looks.txt
Foxtrot (http://foxtrot.sourceforge.net/)
Foxtrot (http://foxtrot.sourceforge.net/)
Copyright (c) 2002, Simone Bordet & Marco Cravero. All rights reserved.
See licenses/LICENSE-Foxtrot.txt
Nuvola Icon Theme (http://www.icon-king.com)
Nuvola Icon Theme (http://www.icon-king.com)
See licenses/LICENSE-LGPLv2.1.txt
Forms were created using Abeille Forms Designer (https://abeille.dev.java.net/)
Forms were created using Abeille Forms Designer (https://abeille.dev.java.net/)
Izpack 4.3.0:
Copyright (c) 2001-2008 Julien Ponge
@@ -127,7 +127,7 @@ Installer:
Java Service Wrapper Community Edition 32-bit 3.5.9:
Java Service Wrapper Community Edition 32-bit 3.5.13:
Copyright (C) 1999-2011 Tanuki Software, Ltd. All Rights Reserved.
See licenses/LICENSE-Wrapper.txt
@@ -135,10 +135,6 @@ Java Service Wrapper Community Edition 32-bit 3.5.9:
Jbigi Libraries (jbigi.jar):
JNI code public domain.
GMP 4.1.3 / 4.1.4:
Copyright 1991, 1996, 1999, 2000 Free Software Foundation, Inc.
See licenses/LICENSE-LGPLv2.1.txt
GMP 4.3.2 / 5.0.2:
Copyright 1991, 1996, 1999, 2000, 2007 Free Software Foundation, Inc.
See licenses/LICENSE-LGPLv3.txt
@@ -156,18 +152,19 @@ Applications:
I2PSnark:
Copyright (C) 2003 Mark J. Wielaard
GPLv2 (or any later version)
See licenses/LICENSE-GPLv2.txt
Silk icons: See licenses/LICENSE-SilkIcons.txt
I2PTunnel:
(c) 2003 - 2004 mihi
GPLv2 with exception.
GPLv2 (or any later version) with exception.
See licenses/LICENSE-I2PTunnel.txt
See licenses/LICENSE-GPLv2.txt
I2PTunnel SOCKS Proxy:
Copyright (c) 2004 by human
GPLv2 with exception.
GPLv2 (or any later version) with exception.
See licenses/LICENSE-I2PTunnel.txt
See licenses/LICENSE-GPLv2.txt
@@ -177,7 +174,6 @@ Applications:
Jetty 5.1.15:
Copyright 2000-2004 Mort Bay Consulting Pty. Ltd.
See licenses/LICENSE-Apache1.1.txt
See licenses/LICENSE-Apache2.0.txt
See licenses/NOTICE-Commons-Logging.txt
@@ -197,6 +193,7 @@ Applications:
Flag icons:
- Jersey and EU flag icons: public domain, courtesy Xrmap flag
collection http://www.arvernes.com/wiki/index.php/Xrmap
- Guernsey and Isle of Man flags from the Open Clip Art Library, released into the public domain
- All other flag icons: public domain, courtesy mjames@gmail.com http://www.famfamfam.com/
Silk icons: See licenses/LICENSE-SilkIcons.txt
@@ -216,18 +213,20 @@ Applications:
SusiDNS:
Copyright (C) 2005 <susi23@mail.i2p>
GPLv2 (or any later version)
See licenses/LICENSE-GPLv2.txt
Uses Apache Jakarta Standard Tag Library 1.1.2:
See licenses/LICENSE-Apache2.0.txt
SusiMail:
Copyright (C) 2004-2005 <susi23@mail.i2p>
GPLv2 (or any later version)
See licenses/LICENSE-GPLv2.txt
Systray:
Public domain.
Bundles systray4j code:
See licenses/LICENSE-GPLv2.txt
Bundles systray4j-2.4.1:
See licenses/LICENSE-LGPLv2.1.txt

View File

@@ -29,6 +29,7 @@ import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.util.Locale;
import java.util.Properties;
import java.util.StringTokenizer;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -434,7 +435,7 @@ public class DoCMDS implements Runnable {
if (token.countTokens() != 0) {
Command = token.nextToken();
Command =
Command.toLowerCase();
Command.toLowerCase(Locale.US);
if (token.countTokens() != 0) {
Arg = token.nextToken();
} else {

View File

@@ -30,6 +30,7 @@ import java.io.OutputStream;
import java.net.ConnectException;
import java.net.NoRouteToHostException;
import java.net.Socket;
import java.util.Locale;
import java.util.concurrent.atomic.AtomicBoolean;
import net.i2p.I2PException;
import net.i2p.client.streaming.I2PSocket;
@@ -144,7 +145,7 @@ public class TCPtoI2P implements Runnable {
in = sock.getInputStream();
out = sock.getOutputStream();
line = lnRead(in);
input = line.toLowerCase();
input = line.toLowerCase(Locale.US);
Destination dest = null;
if (input.endsWith(".i2p")) {
//dest = I2PTunnel.destFromName(input);

View File

@@ -27,6 +27,7 @@ import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Iterator;
import java.util.Locale;
import java.util.Map;
import java.util.NoSuchElementException;
@@ -71,7 +72,7 @@ class ConfigIterator implements Iterator<Map.Entry<String, String>> {
inputLine = ConfigParser.stripComments(inputLine);
String[] splitLine = inputLine.split("=");
if (splitLine.length == 2) {
next = new ConfigEntry(splitLine[0].trim().toLowerCase(), splitLine[1].trim());
next = new ConfigEntry(splitLine[0].trim().toLowerCase(Locale.US), splitLine[1].trim());
return true;
}
inputLine = input.readLine();

View File

@@ -32,6 +32,7 @@ import java.io.StringReader;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import net.i2p.util.SecureFile;
@@ -92,7 +93,7 @@ class ConfigParser {
inputLine = ConfigParser.stripComments(inputLine);
String[] splitLine = inputLine.split("=");
if (splitLine.length == 2) {
result.put(splitLine[0].trim().toLowerCase(), splitLine[1].trim());
result.put(splitLine[0].trim().toLowerCase(Locale.US), splitLine[1].trim());
}
inputLine = input.readLine();
}

View File

@@ -23,11 +23,15 @@ package org.klomp.snark;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.charset.Charset;
import java.nio.charset.CharsetEncoder;
import java.security.MessageDigest;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
import java.util.concurrent.ConcurrentHashMap;
import net.i2p.crypto.SHA1;
import net.i2p.util.SecureFile;
@@ -67,6 +71,8 @@ public class Storage
public static final int MAX_PIECES = 10*1024;
public static final long MAX_TOTAL_SIZE = MAX_PIECE_SIZE * (long) MAX_PIECES;
private static final Map<String, String> _filterNameCache = new ConcurrentHashMap();
/**
* Creates a new storage based on the supplied MetaInfo. This will
* try to create and/or check all needed files in the MetaInfo.
@@ -568,20 +574,49 @@ public class Storage
/**
* Removes 'suspicious' characters from the given file name.
* http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx
* Then replace chars not supported in the charset.
*
* This is called frequently and it can be pretty slow so cache the result.
*
* TODO: If multiple files in the same torrent map to the same filter name,
* the whole torrent will blow up. Check at torrent creation?
*/
public static String filterName(String name)
{
if (name.equals(".") || name.equals(" "))
return "_";
String rv = name;
if (rv.startsWith("."))
rv = '_' + rv.substring(1);
if (rv.endsWith(".") || rv.endsWith(" "))
rv = rv.substring(0, rv.length() - 1) + '_';
for (int i = 0; i < ILLEGAL.length; i++) {
if (rv.indexOf(ILLEGAL[i]) >= 0)
rv = rv.replace(ILLEGAL[i], '_');
String rv = _filterNameCache.get(name);
if (rv != null)
return rv;
if (name.equals(".") || name.equals(" ")) {
rv = "_";
} else {
rv = name;
if (rv.startsWith("."))
rv = '_' + rv.substring(1);
if (rv.endsWith(".") || rv.endsWith(" "))
rv = rv.substring(0, rv.length() - 1) + '_';
for (int i = 0; i < ILLEGAL.length; i++) {
if (rv.indexOf(ILLEGAL[i]) >= 0)
rv = rv.replace(ILLEGAL[i], '_');
}
// Replace characters not supported in the charset
if (!Charset.defaultCharset().name().equals("UTF-8")) {
try {
CharsetEncoder enc = Charset.defaultCharset().newEncoder();
if (!enc.canEncode(rv)) {
String repl = rv;
for (int i = 0; i < rv.length(); i++) {
char c = rv.charAt(i);
if (!enc.canEncode(c))
repl = repl.replace(c, '_');
}
rv = repl;
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
_filterNameCache.put(name, rv);
return rv;
}

View File

@@ -30,6 +30,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Random;
import java.util.Set;
@@ -325,7 +326,7 @@ public class TrackerClient extends I2PAppThread
// don't show secondary tracker problems to the user
if (tr.isPrimary)
snark.setTrackerProblems(tr.trackerProblems);
if (tr.trackerProblems.toLowerCase().startsWith(NOT_REGISTERED)) {
if (tr.trackerProblems.toLowerCase(Locale.US).startsWith(NOT_REGISTERED)) {
// Give a guy some time to register it if using opentrackers too
if (trackers.size() == 1) {
stop = true;

View File

@@ -14,6 +14,7 @@ import java.util.Comparator;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
@@ -245,6 +246,9 @@ public class I2PSnarkServlet extends Default {
}
}
out.write("</div>\n");
String newURL = req.getParameter("newURL");
if (newURL != null && newURL.trim().length() > 0 && req.getMethod().equals("GET"))
_manager.addMessage(_("Click \"Add torrent\" button to fetch torrent"));
out.write("<div class=\"page\"><div class=\"mainsection\"><div class=\"snarkMessages\"><table><tr><td align=\"left\"><pre>");
List msgs = _manager.getMessages();
for (int i = msgs.size()-1; i >= 0; i--) {
@@ -490,6 +494,8 @@ public class I2PSnarkServlet extends Default {
*****/
if (newURL != null) {
if (newURL.startsWith("http://")) {
if (!_manager.util().connected())
_manager.addMessage(_("Opening the I2P tunnel"));
_manager.addMessage(_("Fetching {0}", urlify(newURL)));
I2PAppThread fetch = new I2PAppThread(new FetchAndAdd(_manager, newURL), "Fetch and add", true);
fetch.start();
@@ -578,7 +584,7 @@ public class I2PSnarkServlet extends Default {
File f = new File(name);
f.delete();
_manager.addMessage(_("Torrent file deleted: {0}", f.getAbsolutePath()));
List files = meta.getFiles();
List<List<String>> files = meta.getFiles();
String dataFile = snark.getBaseName();
f = new File(_manager.getDataDir(), dataFile);
if (files == null) { // single file torrent
@@ -588,23 +594,36 @@ public class I2PSnarkServlet extends Default {
_manager.addMessage(_("Data file could not be deleted: {0}", f.getAbsolutePath()));
break;
}
for (int i = 0; i < files.size(); i++) { // pass 1 delete files
// step 1 delete files
for (int i = 0; i < files.size(); i++) {
// multifile torrents have the getFiles() return lists of lists of filenames, but
// each of those lists just contain a single file afaict...
File df = Storage.getFileFromNames(f, (List) files.get(i));
File df = Storage.getFileFromNames(f, files.get(i));
if (df.delete())
_manager.addMessage(_("Data file deleted: {0}", df.getAbsolutePath()));
else
_manager.addMessage(_("Data file could not be deleted: {0}", df.getAbsolutePath()));
}
for (int i = files.size() - 1; i >= 0; i--) { // pass 2 delete dirs - not foolproof,
// we could sort and do a strict bottom-up
File df = Storage.getFileFromNames(f, (List) files.get(i));
df = df.getParentFile();
if (df == null || !df.exists())
continue;
if(df.delete())
// step 2 make Set of dirs with reverse sort
Set<File> dirs = new TreeSet(Collections.reverseOrder());
for (List<String> list : files) {
for (int i = 1; i < list.size(); i++) {
dirs.add(Storage.getFileFromNames(f, list.subList(0, i)));
}
}
// step 3 delete dirs bottom-up
for (File df : dirs) {
if (df.delete()) {
_manager.addMessage(_("Data dir deleted: {0}", df.getAbsolutePath()));
} else if (_log.shouldLog(Log.WARN)) {
_log.warn("Could not delete dir " + df);
}
}
// step 4 delete base
if (f.delete()) {
_manager.addMessage(_("Data dir deleted: {0}", f.getAbsolutePath()));
} else if (_log.shouldLog(Log.WARN)) {
_log.warn("Could not delete dir " + f);
}
break;
}
@@ -727,10 +746,10 @@ public class I2PSnarkServlet extends Default {
l = l.substring(skip.length());
if (r.startsWith(skip))
r = r.substring(skip.length());
String llc = l.toLowerCase();
String llc = l.toLowerCase(Locale.US);
if (llc.startsWith("the ") || llc.startsWith("the.") || llc.startsWith("the_"))
l = l.substring(4);
String rlc = r.toLowerCase();
String rlc = r.toLowerCase(Locale.US);
if (rlc.startsWith("the ") || rlc.startsWith("the.") || rlc.startsWith("the_"))
r = r.substring(4);
return collator.compare(l, r);
@@ -1173,8 +1192,9 @@ public class I2PSnarkServlet extends Default {
}
private void writeAddForm(PrintWriter out, HttpServletRequest req) throws IOException {
// display incoming parameter if a GET so links will work
String newURL = req.getParameter("newURL");
if ( (newURL == null) || (newURL.trim().length() <= 0) )
if (newURL == null || newURL.trim().length() <= 0 || req.getMethod().equals("POST"))
newURL = "";
else
newURL = DataHelper.stripHTML(newURL); // XSS
@@ -1219,7 +1239,7 @@ public class I2PSnarkServlet extends Default {
else
baseFile = DataHelper.stripHTML(baseFile); // XSS
out.write("<div class=\"newtorrentsection\"><div class=\"snarkNewTorrent\">\n");
out.write("<a name=\"add\"></a><div class=\"newtorrentsection\"><div class=\"snarkNewTorrent\">\n");
// *not* enctype="multipart/form-data", so that the input type=file sends the filename, not the file
out.write("<form action=\"_post\" method=\"POST\">\n");
out.write("<input type=\"hidden\" name=\"nonce\" value=\"" + _nonce + "\" >\n");
@@ -1446,7 +1466,7 @@ public class I2PSnarkServlet extends Default {
out.write(": <td><textarea name=\"i2cpOpts\" cols=\"60\" rows=\"1\" wrap=\"off\" spellcheck=\"false\" >"
+ opts.toString() + "</textarea><br>\n" +
"<tr><td>&nbsp;<td><input type=\"submit\" value=\"");
"<tr><td>&nbsp;<td><input type=\"submit\" class=\"accept\" value=\"");
out.write(_("Save configuration"));
out.write("\" name=\"foo\" >\n" +
"</table></div></div></form>");
@@ -1739,6 +1759,7 @@ public class I2PSnarkServlet extends Default {
// We don't have the hash of the torrent file
//buf.append("<br>").append(_("Maggot link")).append(": <a href=\"").append(MAGGOT).append(hex).append(':').append(hex).append("\">")
// .append(MAGGOT).append(hex).append(':').append(hex).append("</a>");
buf.append("<br>").append(_("Torrent file")).append(": ").append(snark.getName());
buf.append("</div></th></tr>");
}
if (ls == null) {
@@ -1836,7 +1857,7 @@ public class I2PSnarkServlet extends Default {
if (complete) {
buf.append("<a href=\"").append(path).append("\">");
// thumbnail ?
String plc = item.toString().toLowerCase();
String plc = item.toString().toLowerCase(Locale.US);
if (plc.endsWith(".jpg") || plc.endsWith(".jpeg") || plc.endsWith(".png") ||
plc.endsWith(".gif") || plc.endsWith(".ico")) {
buf.append("<img alt=\"\" border=\"0\" class=\"thumb\" src=\"")
@@ -1916,7 +1937,7 @@ public class I2PSnarkServlet extends Default {
// instead of this mishmash. We can't get to HttpContext.setMimeMapping()
// from here? We could do it from a web.xml perhaps.
// Or could we put our own org/mortbay/http/mime.properties file in the war?
String plc = path.toLowerCase();
String plc = path.toLowerCase(Locale.US);
String mime = getServletContext().getMimeType(path);
if (mime == null)
mime = "";
@@ -2039,13 +2060,31 @@ private static class FetchAndAdd implements Runnable {
try { if (in != null) in.close(); } catch (IOException ioe) {}
}
} else {
_manager.addMessage(_("Torrent was not retrieved from {0}", urlify(_url)));
// Generate a retry link, but sadly can't have a form inside a table
// So make this an ugly GET
StringBuilder buf = new StringBuilder(1024);
// FIXME don't lose peer setting
//String peerParam = req.getParameter("p");
//if (peerParam != null)
// buf.append("<input type=\"hidden\" name=\"p\" value=\"").append(peerParam).append("\" >\n");
buf.append(_("Torrent was not retrieved from {0}", urlify(_url)));
String link = _url.replace("&", "&amp;").replace(" ", "%20").replace(":", "%3A").replace("/", "%2F");
/**** FIXME ticket #575
buf.append(" - [<a href=\"/i2psnark/?newURL=").append(link).append("#add\" >");
buf.append(_("Retry"));
buf.append("</a>]");
****/
_manager.addMessage(buf.toString());
}
} finally {
if (file != null) file.delete();
}
}
private String _(String s) {
return _manager.util().getString(s);
}
private String _(String s, String o) {
return _manager.util().getString(s, o);
}

View File

@@ -12,7 +12,7 @@ msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-10-07 13:59+0000\n"
"POT-Creation-Date: 2011-12-12 11:16+0000\n"
"PO-Revision-Date: 2011-10-07 01:46+0000\n"
"Last-Translator: blabla <blabla@trash-mail.com>\n"
"Language-Team: German (http://www.transifex.net/projects/p/I2P/team/de/)\n"
@@ -170,7 +170,7 @@ msgstr "Kann dies nicht öffnen: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:661
#: ../java/src/org/klomp/snark/SnarkManager.java:737
#: ../java/src/org/klomp/snark/SnarkManager.java:792
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2015
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2035
#, java-format
msgid "Torrent with this info hash is already running: {0}"
msgstr "Torrent mit diesem Infohash läuft schon: {0}"
@@ -201,7 +201,7 @@ msgid "Torrent in \"{0}\" is invalid"
msgstr "Torrent in \"{0}\" ist nicht gültig"
#: ../java/src/org/klomp/snark/SnarkManager.java:699
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2037
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2057
#, java-format
msgid "ERROR - Out of memory, cannot create torrent from {0}"
msgstr ""
@@ -219,7 +219,7 @@ msgid "Torrent added: \"{0}\""
msgstr "Torrent hinzugefügt: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:748
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:493
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:499
#, java-format
msgid "Fetching {0}"
msgstr "Hole {0}"
@@ -319,7 +319,7 @@ msgid "Metainfo received for {0}"
msgstr "Metainfo für {0} erhalten"
#: ../java/src/org/klomp/snark/SnarkManager.java:1257
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:528
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:534
#, java-format
msgid "Starting up torrent {0}"
msgstr "Starte Torrent {0}"
@@ -333,175 +333,185 @@ msgstr "Konnte mich nicht mit I2P verbinden!"
msgid "Unable to add {0}"
msgstr "Konnte {0} nicht hinzufügen."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:204
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:205
msgid "I2PSnark - Anonymous BitTorrent Client"
msgstr "I2PSnark - Anonymer BitTorrent-Klient"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:220
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:221
msgid "Torrents"
msgstr "Torrents"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:223
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:230
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1033
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:224
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:231
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1052
msgid "I2PSnark"
msgstr "I2PSnark"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:227
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:228
msgid "Refresh page"
msgstr "Aktualisiere Seite"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:232
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:233
msgid "Forum"
msgstr "Forum"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:286
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1758
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:251
msgid "Click \"Add torrent\" button to fetch torrent"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:290
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1778
msgid "Status"
msgstr "Zustand"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:292
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:294
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:296
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:298
msgid "Hide Peers"
msgstr "Teilnehmer ausblenden"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:299
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:301
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:303
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:305
msgid "Show Peers"
msgstr "Teilnehmer einblenden"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:308
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1682
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1698
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:312
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1702
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1718
msgid "Torrent"
msgstr "Torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:312
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:316
msgid "Estimated time remaining"
msgstr "geschätzte verbleibende Zeit"
#. Translators: Please keep short or translate as " "
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:315
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:319
msgid "ETA"
msgstr "Dauer"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:319
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:323
msgid "Downloaded"
msgstr "heruntergeladen"
#. Translators: Please keep short or translate as " "
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:322
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:336
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:326
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:340
msgid "RX"
msgstr " "
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:326
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:330
msgid "Uploaded"
msgstr "hochgeladen"
#. Translators: Please keep short or translate as " "
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:329
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:346
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:333
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:350
msgid "TX"
msgstr " "
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:334
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:338
msgid "Down Rate"
msgstr "eingehend"
#. Translators: Please keep short or translate as " "
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:339
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:348
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:343
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:352
msgid "Rate"
msgstr " "
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:344
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:348
msgid "Up Rate"
msgstr "ausgehend"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:368
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:372
msgid "Stop all torrents and the I2P tunnel"
msgstr "Stoppe alle Torrents und den I2P-Tunnel"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:370
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:374
msgid "Stop All"
msgstr "Stoppe alle"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:379
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:383
msgid "Start all torrents and the I2P tunnel"
msgstr "Starte alle Torrents und den I2P-Tunnel"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:381
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:385
msgid "Start All"
msgstr "Starte alle"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:400
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:404
msgid "No torrents loaded."
msgstr "keine Torrents geladen"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:405
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:409
msgid "Totals"
msgstr "Gesamt"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:407
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:411
#, java-format
msgid "1 torrent"
msgid_plural "{0} torrents"
msgstr[0] "1 Torrent"
msgstr[1] "{0} Torrents"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:410
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:414
#, java-format
msgid "1 connected peer"
msgid_plural "{0} connected peers"
msgstr[0] "1 verbundener Teilnehmer"
msgstr[1] "{0} verbundene Teilnehmer"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:499
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:498
#, fuzzy
msgid "Opening the I2P tunnel"
msgstr "Stoppe alle Torrents und den I2P-Tunnel"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:505
#, java-format
msgid "Invalid URL: Must start with \"http://\", \"{0}\", or \"{1}\""
msgstr "ungültige URL - muss mit \"http://\", \"{0}\", oder \"{1}\" anfangen"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:547
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:574
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:553
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:580
#, java-format
msgid "Magnet deleted: {0}"
msgstr "Magnetlink wurde gelöscht: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:555
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:580
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:561
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:586
#, java-format
msgid "Torrent file deleted: {0}"
msgstr "Torrentdatei gelöscht: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:586
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:596
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:592
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:603
#, java-format
msgid "Data file deleted: {0}"
msgstr "Daten gelöscht: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:588
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:598
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:594
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:605
#, java-format
msgid "Data file could not be deleted: {0}"
msgstr "Daten konnten nicht gelöscht werden: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:607
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:617
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:624
#, java-format
msgid "Data dir deleted: {0}"
msgstr "Datenverzeichnis wurde gelöscht: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:644
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:663
msgid "Error creating torrent - you must select a tracker"
msgstr ""
"Fehler beim Erstellen des Torrents - Sie müssen einen Tracker auswählen!"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:659
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:678
#, java-format
msgid "Torrent created for \"{0}\""
msgstr "Torrent erstellt für \"{0}\""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:661
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:680
#, java-format
msgid ""
"Many I2P trackers require you to register new torrents before seeding - "
@@ -510,118 +520,118 @@ msgstr ""
"Viele I2P-Tracker erfordern eine Registrierung, bevor der Torrent verteilt "
"wird. Bitte tun Sie dies vor dem Start von \"{0}\"!"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:663
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:682
#, java-format
msgid "Error creating a torrent for \"{0}\""
msgstr "Fehler beim Erstellen eines Torrents für \"{0}\""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:666
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:685
#, java-format
msgid "Cannot create a torrent for the nonexistent data: {0}"
msgstr "Kann keinen Torrent für nicht existente Daten erstellen: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:669
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:688
msgid "Error creating torrent - you must enter a file or directory"
msgstr ""
"Fehler beim Erstellen des Torrents - Sie müssen eine Datei oder ein "
"Verzeichnis angeben."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:672
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:691
msgid "Stopping all torrents and closing the I2P tunnel."
msgstr "Stoppe alle Torrents und beende den I2P-Tunnel."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:683
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:702
msgid "I2P tunnel closed."
msgstr "I2P-Tunnel geschlossen."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:686
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:705
msgid "Opening the I2P tunnel and starting all torrents."
msgstr "Öffne den I2P-Tunnel und starte alle Torrents."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:808
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:813
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:819
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:827
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:832
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:838
msgid "Tracker Error"
msgstr "Trackerfehler"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:811
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:815
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:827
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:831
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:839
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:843
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:848
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:852
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:830
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:834
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:846
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:850
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:858
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:862
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:867
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:871
#, java-format
msgid "1 peer"
msgid_plural "{0} peers"
msgstr[0] "1 Teilnehmer"
msgstr[1] "{0} Teilnehmern"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:824
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:829
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:843
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:848
msgid "Seeding"
msgstr "Verteile"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:833
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1704
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1809
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:852
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1724
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1829
msgid "Complete"
msgstr "vollständig"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:836
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:841
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:855
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:860
msgid "OK"
msgstr "OK"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:845
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:850
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:864
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:869
msgid "Stalled"
msgstr "Stillstand"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:854
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:857
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:873
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:876
msgid "No Peers"
msgstr "keine Teilnehmer"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:859
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:878
msgid "Stopped"
msgstr "angehalten"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:891
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:910
msgid "Torrent details"
msgstr "Details"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:903
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1167
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:922
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1186
msgid "Info"
msgstr "Info"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:918
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:937
msgid "View files"
msgstr "Zeige Dateien"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:920
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:939
msgid "Open file"
msgstr "Öffne Datei"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:962
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:981
msgid "Stop the torrent"
msgstr "Torrent stoppen"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:964
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:983
msgid "Stop"
msgstr "Stopp"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:974
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:993
msgid "Start the torrent"
msgstr "Torrent starten"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:976
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:995
msgid "Start"
msgstr "Start"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:987
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1006
msgid "Remove the torrent from the active list, deleting the .torrent file"
msgstr ""
"entfernt den Torrent von der aktiven Liste und löscht die .torrent-Datei"
@@ -629,7 +639,7 @@ msgstr ""
#. Can't figure out how to escape double quotes inside the onclick string.
#. Single quotes in translate strings with parameters must be doubled.
#. Then the remaining single quite must be escaped
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:992
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1011
#, java-format
msgid ""
"Are you sure you want to delete the file \\''{0}.torrent\\'' (downloaded "
@@ -638,18 +648,18 @@ msgstr ""
"Sind Sie sicher, dass Sie die Datei \\''{0}.torrent\\'' löschen wollen? "
"(Heruntergeladene Daten werden nicht gelöscht.)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:995
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1014
msgid "Remove"
msgstr "Entfernen"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1006
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1025
msgid "Delete the .torrent file and the associated data file(s)"
msgstr "löscht die .torrent-Datei und dazugehörige Daten Datei(en)"
#. Can't figure out how to escape double quotes inside the onclick string.
#. Single quotes in translate strings with parameters must be doubled.
#. Then the remaining single quite must be escaped
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1011
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1030
#, java-format
msgid ""
"Are you sure you want to delete the torrent \\''{0}\\'' and all downloaded "
@@ -658,182 +668,182 @@ msgstr ""
"Sind Sie sicher, dass Sie die Torrentdatei \\''{0}\\'' und alle "
"heruntergeladenen Daten löschen wollen?"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1014
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1033
msgid "Delete"
msgstr "Löschen"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1049
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1068
msgid "Unknown"
msgstr "Unbekannt"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1061
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1080
msgid "Seed"
msgstr "Quelle"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1084
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1103
msgid "Uninteresting (The peer has no pieces we need)"
msgstr "uninteressant (Der Teilnehmer hat keine Teile, die wir benötigen)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1086
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1105
msgid "Choked (The peer is not allowing us to request pieces)"
msgstr "gedrosselt (Der Teilnehmer hat uns nicht erlaubt, Teile anzufordern)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1106
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1125
msgid "Uninterested (We have no pieces the peer needs)"
msgstr "uninteressiert (Wir haben keine Teile, die der Teilnehmer benötigt)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1108
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1127
msgid "Choking (We are not allowing the peer to request pieces)"
msgstr "gedrosselt (Wir erlauben dem Teilnehmer nicht, Teile anzufordern)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1166
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1185
#, java-format
msgid "Details at {0} tracker"
msgstr "Details beim Tracker {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1195
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1215
msgid "Add Torrent"
msgstr "Torrent hinzufügen"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1197
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1217
msgid "From URL"
msgstr "Quell-URL"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1200
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1220
msgid ""
"Enter the torrent file download URL (I2P only), magnet link, or maggot link"
msgstr ""
"Gib die Download-URL der torrent-Datei (nur I2P), einen Magnet- oder einen "
"Maggotlink an!"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1205
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1225
msgid "Add torrent"
msgstr "Füge Torrent hinzu"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1208
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1228
#, java-format
msgid "You can also copy .torrent files to: {0}."
msgstr "Alternativ können Sie die .torrent-Dateien auch nach {0} kopieren."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1210
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1230
msgid "Removing a .torrent will cause it to stop."
msgstr "Das Entfernen der .torrent-Datei stoppt den jeweiligen Torrent."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1233
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1253
msgid "Create Torrent"
msgstr "Torrent erstellen"
#. out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\" value=\"" + newFile + "\" /><br>\n");
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1236
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1256
msgid "Data to seed"
msgstr "Daten zum Verteilen"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1240
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1260
msgid "File or directory to seed (must be within the specified path)"
msgstr "Datei oder Verzeichnis zum Verteilen (muss im angegebenen Pfad sein)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1242
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1723
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1262
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1743
msgid "Tracker"
msgstr "Tracker"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1244
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1264
msgid "Select a tracker"
msgstr "Wähle einen Tracker"
#. out.write(_("Open trackers and DHT only"));
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1249
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1269
msgid "Open trackers only"
msgstr "Benutze nur OpenTracker"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1264
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1284
msgid "or"
msgstr "oder"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1267
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1287
msgid "Specify custom tracker announce URL"
msgstr "Geben Sie eine Tracker-Announce-URL an!"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1270
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1290
msgid "Create torrent"
msgstr "Erstelle Torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1291
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1459
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1311
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1479
msgid "Configuration"
msgstr "Einstellungen"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1295
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1315
msgid "Data directory"
msgstr "Datenverzeichnis"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1297
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1317
msgid "Edit i2psnark.config and restart to change"
msgstr "Zum Ändern, bearbeite die i2psnark.config und starte neu!"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1301
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1321
msgid "Files readable by all"
msgstr "Dateien von allen lesbar"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1305
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1325
msgid "If checked, other users may access the downloaded files"
msgstr ""
"Ist dies markiert, können andere Benutzer auf die heruntergeladenen Dateien "
"zugreifen."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1309
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1329
msgid "Auto start"
msgstr "Autostart"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1313
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1333
msgid "If checked, automatically start torrents that are added"
msgstr "Wenn markiert, werden hinzugefügte Torrents automatisch gestartet."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1317
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1337
msgid "Theme"
msgstr "Aufmachung"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1330
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1350
msgid "Refresh time"
msgstr "Auffrischungsintervall"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1343
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1363
msgid "Never"
msgstr "Nie"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1349
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1369
msgid "Startup delay"
msgstr "Startverzögerung"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1351
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1371
msgid "minutes"
msgstr "Minuten"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1375
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1395
msgid "Total uploader limit"
msgstr "Gesamtlimit an Hochladern"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1378
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1398
msgid "peers"
msgstr "Teilnehmer"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1382
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1402
msgid "Up bandwidth limit"
msgstr "Bandbreitenbegrenzung beim Hochladen"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1385
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1405
msgid "Half available bandwidth recommended."
msgstr "Halbe verfügbare Bandbreite wird empfohlen."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1387
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1407
msgid "View or change router bandwidth"
msgstr "Routerbandbreite ansehen oder ändern"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1391
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1411
msgid "Use open trackers also"
msgstr "Benutze auch OpenTracker"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1395
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1415
msgid ""
"If checked, announce torrents to open trackers as well as the tracker listed "
"in the torrent file"
@@ -841,155 +851,163 @@ msgstr ""
"Wenn markiert, wird der Torrent neben dem angegebenen Tracker auch bei den "
"OpenTrackern bekannt gegeben."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1399
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1419
msgid "Open tracker announce URLs"
msgstr "OpenTracker-Announce-URLs"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1411
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1431
msgid "Inbound Settings"
msgstr "Einstellungen eingehend"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1417
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1437
msgid "Outbound Settings"
msgstr "Einstellungen ausgehend"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1425
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1445
msgid "I2CP host"
msgstr "I2CP-Host"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1430
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1450
msgid "I2CP port"
msgstr "I2CP-Port"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1445
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1465
msgid "I2CP options"
msgstr "I2CP-Optionen"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1450
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1470
msgid "Save configuration"
msgstr "Einstellungen speichern"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1475
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1495
#, java-format
msgid "Invalid magnet URL {0}"
msgstr "ungültige Magnet-URL {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1509
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1529
#, java-format
msgid "Invalid info hash in magnet URL {0}"
msgstr "ungültiger Infohash im Magnetlink {0}"
#. * dummies for translation
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1539
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1559
#, java-format
msgid "1 hop"
msgid_plural "{0} hops"
msgstr[0] "1 Zwischenstation"
msgstr[1] "{0} Zwischenstationen"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1540
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1560
#, java-format
msgid "1 tunnel"
msgid_plural "{0} tunnels"
msgstr[0] "1 Tunnel"
msgstr[1] "{0} Tunnel"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1702
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1722
msgid "Completion"
msgstr "Fortschritt"
#. else unknown
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1706
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1755
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1726
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1775
msgid "Size"
msgstr "Größe"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1711
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1731
msgid "Files"
msgstr "Dateien"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1713
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1733
msgid "Pieces"
msgstr "Stücke"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1714
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1734
msgid "Piece size"
msgstr "Stückgröße"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1736
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1756
msgid "Magnet link"
msgstr "Magnetlink"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1753
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1792
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1773
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1812
msgid "Directory"
msgstr "Verzeichnis"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1762
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1782
msgid "Priority"
msgstr "Priorität"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1767
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1787
msgid "Up to higher level directory"
msgstr "Eine Hierarchie nach oben"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1797
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1817
msgid "Torrent not found?"
msgstr "Torrentdatei nicht gefunden?"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1806
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1826
msgid "File not found in torrent?"
msgstr "Datei nicht gefunden im Torrent?"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1819
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1839
msgid "complete"
msgstr "vollständig"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1820
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1840
msgid "bytes remaining"
msgstr "Bytes ausstehend"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1845
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1865
msgid "Open"
msgstr "Öffnen"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1871
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1891
msgid "High"
msgstr "hoch"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1876
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1896
msgid "Normal"
msgstr "normal"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1881
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1901
msgid "Skip"
msgstr "auslassen"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1890
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1910
msgid "Save priorities"
msgstr "Prioritäten speichern"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2006
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2026
#, java-format
msgid "Torrent fetched from {0}"
msgstr "Torrent geholt von {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2027
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2047
#, java-format
msgid "Torrent already running: {0}"
msgstr "Torrent läuft schon: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2029
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2049
#, java-format
msgid "Torrent already in the queue: {0}"
msgstr "Torrent ist schon in der Warteschlange: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2035
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2055
#, java-format
msgid "Torrent at {0} was not valid"
msgstr "Torrent in {0} war nicht gültig"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2042
#. FIXME don't lose peer setting
#. String peerParam = req.getParameter("p");
#. if (peerParam != null)
#. buf.append("<input type=\"hidden\" name=\"p\" value=\"").append(peerParam).append("\" >\n");
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2069
#, java-format
msgid "Torrent was not retrieved from {0}"
msgstr "Torrent wurde nicht geladen von {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2072
msgid "Retry"
msgstr ""

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: I2P i2psnark\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-09-23 20:16+0000\n"
"POT-Creation-Date: 2011-12-12 11:18+0000\n"
"PO-Revision-Date: 2010-06-15 14:09+0100\n"
"Last-Translator: duck <duck@mail.i2p>\n"
"Language-Team: duck <duck@mail.i2p>\n"
@@ -153,7 +153,7 @@ msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:661
#: ../java/src/org/klomp/snark/SnarkManager.java:737
#: ../java/src/org/klomp/snark/SnarkManager.java:792
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2015
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2035
#, java-format
msgid "Torrent with this info hash is already running: {0}"
msgstr ""
@@ -180,7 +180,7 @@ msgid "Torrent in \"{0}\" is invalid"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:699
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2037
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2057
#, java-format
msgid "ERROR - Out of memory, cannot create torrent from {0}"
msgstr ""
@@ -196,7 +196,7 @@ msgid "Torrent added: \"{0}\""
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:748
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:493
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:499
#, java-format
msgid "Fetching {0}"
msgstr ""
@@ -292,7 +292,7 @@ msgid "Metainfo received for {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1257
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:528
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:534
#, java-format
msgid "Starting up torrent {0}"
msgstr ""
@@ -306,309 +306,300 @@ msgstr ""
msgid "Unable to add {0}"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:204
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:205
msgid "I2PSnark - Anonymous BitTorrent Client"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:220
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:221
msgid "Torrents"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:223
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:230
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1033
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:224
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:231
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1052
msgid "I2PSnark"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:227
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:228
msgid "Refresh page"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:232
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:233
msgid "Forum"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:286
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1758
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:251
msgid "Click \"Add torrent\" button to fetch torrent"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:290
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1778
msgid "Status"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:292
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:294
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:296
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:298
msgid "Hide Peers"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:299
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:301
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:303
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:305
msgid "Show Peers"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:308
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1682
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1698
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:312
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1702
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1718
msgid "Torrent"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:312
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:316
msgid "Estimated time remaining"
msgstr ""
#. Translators: Please keep short or translate as " "
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:315
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:319
msgid "ETA"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:319
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:323
msgid "Downloaded"
msgstr ""
#. Translators: Please keep short or translate as " "
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:322
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:336
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:326
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:340
msgid "RX"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:326
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:330
msgid "Uploaded"
msgstr ""
#. Translators: Please keep short or translate as " "
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:329
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:346
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:333
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:350
msgid "TX"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:334
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:338
msgid "Down Rate"
msgstr ""
#. Translators: Please keep short or translate as " "
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:339
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:348
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:343
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:352
msgid "Rate"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:344
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:348
msgid "Up Rate"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:368
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:372
msgid "Stop all torrents and the I2P tunnel"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:370
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:374
msgid "Stop All"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:379
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:383
msgid "Start all torrents and the I2P tunnel"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:381
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:385
msgid "Start All"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:400
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:404
msgid "No torrents loaded."
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:405
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:409
msgid "Totals"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:407
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:411
#, java-format
msgid "1 torrent"
msgid_plural "{0} torrents"
msgstr[0] ""
msgstr[1] ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:410
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:414
#, java-format
msgid "1 connected peer"
msgid_plural "{0} connected peers"
msgstr[0] ""
msgstr[1] ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:499
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:498
msgid "Opening the I2P tunnel"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:505
#, java-format
msgid "Invalid URL: Must start with \"http://\", \"{0}\", or \"{1}\""
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:547
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:574
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:553
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:580
#, java-format
msgid "Magnet deleted: {0}"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:555
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:580
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:561
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:586
#, java-format
msgid "Torrent file deleted: {0}"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:586
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:596
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:592
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:603
#, java-format
msgid "Data file deleted: {0}"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:588
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:598
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:594
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:605
#, java-format
msgid "Data file could not be deleted: {0}"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:607
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:617
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:624
#, java-format
msgid "Data dir deleted: {0}"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:644
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:663
msgid "Error creating torrent - you must select a tracker"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:659
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:678
#, java-format
msgid "Torrent created for \"{0}\""
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:661
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:680
#, java-format
msgid ""
"Many I2P trackers require you to register new torrents before seeding - "
"please do so before starting \"{0}\""
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:663
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:682
#, java-format
msgid "Error creating a torrent for \"{0}\""
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:666
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:685
#, java-format
msgid "Cannot create a torrent for the nonexistent data: {0}"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:669
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:688
msgid "Error creating torrent - you must enter a file or directory"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:672
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:691
msgid "Stopping all torrents and closing the I2P tunnel."
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:683
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:702
msgid "I2P tunnel closed."
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:686
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:705
msgid "Opening the I2P tunnel and starting all torrents."
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:808
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:813
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:819
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:827
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:832
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:838
msgid "Tracker Error"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:811
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:815
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:827
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:831
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:839
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:843
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:848
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:852
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:830
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:834
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:846
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:850
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:858
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:862
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:867
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:871
#, java-format
msgid "1 peer"
msgid_plural "{0} peers"
msgstr[0] ""
msgstr[1] ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:824
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:829
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:843
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:848
msgid "Seeding"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:833
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1704
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1809
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:852
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1724
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1829
msgid "Complete"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:836
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:841
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:855
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:860
msgid "OK"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:845
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:850
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:864
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:869
msgid "Stalled"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:854
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:857
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:873
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:876
msgid "No Peers"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:859
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:878
msgid "Stopped"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:891
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:910
msgid "Torrent details"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:903
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1167
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:922
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1186
msgid "Info"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:918
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:937
msgid "View files"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:920
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:939
msgid "Open file"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:962
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:981
msgid "Stop the torrent"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:964
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:983
msgid "Stop"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:974
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:993
msgid "Start the torrent"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:976
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:995
msgid "Start"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:987
msgid "Remove the torrent from the active list, deleting the .torrent file"
msgstr ""
#. Can't figure out how to escape double quotes inside the onclick string.
#. Single quotes in translate strings with parameters must be doubled.
#. Then the remaining single quite must be escaped
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:992
#, java-format
msgid ""
"Are you sure you want to delete the file \\''{0}.torrent\\'' (downloaded "
"data will not be deleted) ?"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:995
msgid "Remove"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1006
msgid "Delete the .torrent file and the associated data file(s)"
msgid "Remove the torrent from the active list, deleting the .torrent file"
msgstr ""
#. Can't figure out how to escape double quotes inside the onclick string.
@@ -617,336 +608,362 @@ msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1011
#, java-format
msgid ""
"Are you sure you want to delete the file \\''{0}.torrent\\'' (downloaded "
"data will not be deleted) ?"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1014
msgid "Remove"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1025
msgid "Delete the .torrent file and the associated data file(s)"
msgstr ""
#. Can't figure out how to escape double quotes inside the onclick string.
#. Single quotes in translate strings with parameters must be doubled.
#. Then the remaining single quite must be escaped
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1030
#, java-format
msgid ""
"Are you sure you want to delete the torrent \\''{0}\\'' and all downloaded "
"data?"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1014
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1033
msgid "Delete"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1049
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1068
msgid "Unknown"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1061
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1080
msgid "Seed"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1084
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1103
msgid "Uninteresting (The peer has no pieces we need)"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1086
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1105
msgid "Choked (The peer is not allowing us to request pieces)"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1106
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1125
msgid "Uninterested (We have no pieces the peer needs)"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1108
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1127
msgid "Choking (We are not allowing the peer to request pieces)"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1166
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1185
#, java-format
msgid "Details at {0} tracker"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1195
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1215
msgid "Add Torrent"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1197
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1217
msgid "From URL"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1200
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1220
msgid ""
"Enter the torrent file download URL (I2P only), magnet link, or maggot link"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1205
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1225
msgid "Add torrent"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1208
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1228
#, java-format
msgid "You can also copy .torrent files to: {0}."
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1210
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1230
msgid "Removing a .torrent will cause it to stop."
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1233
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1253
msgid "Create Torrent"
msgstr ""
#. out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\" value=\"" + newFile + "\" /><br>\n");
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1236
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1256
msgid "Data to seed"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1240
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1260
msgid "File or directory to seed (must be within the specified path)"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1242
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1723
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1262
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1743
msgid "Tracker"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1244
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1264
msgid "Select a tracker"
msgstr ""
#. out.write(_("Open trackers and DHT only"));
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1249
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1269
msgid "Open trackers only"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1264
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1284
msgid "or"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1267
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1287
msgid "Specify custom tracker announce URL"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1270
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1290
msgid "Create torrent"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1291
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1459
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1311
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1479
msgid "Configuration"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1295
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1315
msgid "Data directory"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1297
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1317
msgid "Edit i2psnark.config and restart to change"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1301
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1321
msgid "Files readable by all"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1305
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1325
msgid "If checked, other users may access the downloaded files"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1309
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1329
msgid "Auto start"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1313
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1333
msgid "If checked, automatically start torrents that are added"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1317
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1337
msgid "Theme"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1330
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1350
msgid "Refresh time"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1343
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1363
msgid "Never"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1349
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1369
msgid "Startup delay"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1351
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1371
msgid "minutes"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1375
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1395
msgid "Total uploader limit"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1378
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1398
msgid "peers"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1382
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1402
msgid "Up bandwidth limit"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1385
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1405
msgid "Half available bandwidth recommended."
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1387
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1407
msgid "View or change router bandwidth"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1391
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1411
msgid "Use open trackers also"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1395
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1415
msgid ""
"If checked, announce torrents to open trackers as well as the tracker listed "
"in the torrent file"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1399
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1419
msgid "Open tracker announce URLs"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1411
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1431
msgid "Inbound Settings"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1417
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1437
msgid "Outbound Settings"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1425
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1445
msgid "I2CP host"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1430
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1450
msgid "I2CP port"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1445
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1465
msgid "I2CP options"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1450
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1470
msgid "Save configuration"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1475
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1495
#, java-format
msgid "Invalid magnet URL {0}"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1509
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1529
#, java-format
msgid "Invalid info hash in magnet URL {0}"
msgstr ""
#. * dummies for translation
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1539
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1559
#, java-format
msgid "1 hop"
msgid_plural "{0} hops"
msgstr[0] ""
msgstr[1] ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1540
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1560
#, java-format
msgid "1 tunnel"
msgid_plural "{0} tunnels"
msgstr[0] ""
msgstr[1] ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1702
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1722
msgid "Completion"
msgstr ""
#. else unknown
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1706
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1755
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1726
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1775
msgid "Size"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1711
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1731
msgid "Files"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1713
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1733
msgid "Pieces"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1714
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1734
msgid "Piece size"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1736
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1756
msgid "Magnet link"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1753
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1792
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1773
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1812
msgid "Directory"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1762
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1782
msgid "Priority"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1767
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1787
msgid "Up to higher level directory"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1797
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1817
msgid "Torrent not found?"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1806
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1826
msgid "File not found in torrent?"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1819
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1839
msgid "complete"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1820
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1840
msgid "bytes remaining"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1845
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1865
msgid "Open"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1871
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1891
msgid "High"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1876
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1896
msgid "Normal"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1881
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1901
msgid "Skip"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1890
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1910
msgid "Save priorities"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2006
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2026
#, java-format
msgid "Torrent fetched from {0}"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2027
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2047
#, java-format
msgid "Torrent already running: {0}"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2029
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2049
#, java-format
msgid "Torrent already in the queue: {0}"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2035
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2055
#, java-format
msgid "Torrent at {0} was not valid"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2042
#. FIXME don't lose peer setting
#. String peerParam = req.getParameter("p");
#. if (peerParam != null)
#. buf.append("<input type=\"hidden\" name=\"p\" value=\"").append(peerParam).append("\" >\n");
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2069
#, java-format
msgid "Torrent was not retrieved from {0}"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2072
msgid "Retry"
msgstr ""

View File

@@ -14,9 +14,9 @@ msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-10-07 13:58+0000\n"
"PO-Revision-Date: 2011-10-07 01:47+0000\n"
"Last-Translator: blabla <blabla@trash-mail.com>\n"
"POT-Creation-Date: 2011-12-27 22:38+0000\n"
"PO-Revision-Date: 2011-12-18 10:52+0000\n"
"Last-Translator: punkibastardo <punkibastardo@gmail.com>\n"
"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/I2P/"
"team/es/)\n"
"Language: es\n"
@@ -171,7 +171,7 @@ msgstr "No se puede abrir \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:661
#: ../java/src/org/klomp/snark/SnarkManager.java:737
#: ../java/src/org/klomp/snark/SnarkManager.java:792
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2015
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2036
#, java-format
msgid "Torrent with this info hash is already running: {0}"
msgstr "Ya hay un Torrent con este hash: {0}."
@@ -202,7 +202,7 @@ msgid "Torrent in \"{0}\" is invalid"
msgstr "El archivo .torrent en \"{0}\" no es válido."
#: ../java/src/org/klomp/snark/SnarkManager.java:699
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2037
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2058
#, java-format
msgid "ERROR - Out of memory, cannot create torrent from {0}"
msgstr "ERROR - Falta de memoria, no se puede crear un torrent de {0}."
@@ -218,7 +218,7 @@ msgid "Torrent added: \"{0}\""
msgstr "Torrent añadido: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:748
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:493
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:499
#, java-format
msgid "Fetching {0}"
msgstr "Recogiendo {0}"
@@ -319,7 +319,7 @@ msgid "Metainfo received for {0}"
msgstr "Metainfo recibida para {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1257
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:528
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:534
#, java-format
msgid "Starting up torrent {0}"
msgstr "Iniciando el torrent {0}"
@@ -333,174 +333,183 @@ msgstr "Imposible conectarse con I2P"
msgid "Unable to add {0}"
msgstr "Imposible añadir {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:204
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:205
msgid "I2PSnark - Anonymous BitTorrent Client"
msgstr "I2PSnark - Cliente de BitTorrent Anónimo"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:220
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:221
msgid "Torrents"
msgstr "Torrents"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:223
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:230
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1033
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:224
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:231
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1052
msgid "I2PSnark"
msgstr "I2PSnark"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:227
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:228
msgid "Refresh page"
msgstr "Actualizar página"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:232
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:233
msgid "Forum"
msgstr "Foro"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:286
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1758
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:251
msgid "Click \"Add torrent\" button to fetch torrent"
msgstr "Click en el botón \"Añadir torrent\" para cargar un torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:290
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1779
msgid "Status"
msgstr "Estado"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:292
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:294
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:296
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:298
msgid "Hide Peers"
msgstr "ocultar pares"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:299
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:301
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:303
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:305
msgid "Show Peers"
msgstr "mostrar pares"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:308
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1682
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1698
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:312
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1702
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1718
msgid "Torrent"
msgstr "Torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:312
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:316
msgid "Estimated time remaining"
msgstr "Tiempo restante para completar la descarga"
#. Translators: Please keep short or translate as " "
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:315
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:319
msgid "ETA"
msgstr "Tiempo"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:319
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:323
msgid "Downloaded"
msgstr "Descargado"
#. Translators: Please keep short or translate as " "
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:322
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:336
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:326
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:340
msgid "RX"
msgstr "Bajado"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:326
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:330
msgid "Uploaded"
msgstr "Subido"
#. Translators: Please keep short or translate as " "
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:329
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:346
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:333
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:350
msgid "TX"
msgstr "Subido"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:334
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:338
msgid "Down Rate"
msgstr "Tasa&nbsp;de descarga"
#. Translators: Please keep short or translate as " "
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:339
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:348
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:343
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:352
msgid "Rate"
msgstr "Tasa"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:344
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:348
msgid "Up Rate"
msgstr "Tasa de subida"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:368
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:372
msgid "Stop all torrents and the I2P tunnel"
msgstr "Detener todos los torrents y el túnel I2P"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:370
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:374
msgid "Stop All"
msgstr "Detener todos"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:379
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:383
msgid "Start all torrents and the I2P tunnel"
msgstr "Iniciar todos los torrents y el túnel I2P"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:381
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:385
msgid "Start All"
msgstr "Arrancar todos"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:400
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:404
msgid "No torrents loaded."
msgstr "No está cargado ningún torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:405
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:409
msgid "Totals"
msgstr "Total"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:407
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:411
#, java-format
msgid "1 torrent"
msgid_plural "{0} torrents"
msgstr[0] "1 torrent"
msgstr[1] "{0} torrents"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:410
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:414
#, java-format
msgid "1 connected peer"
msgid_plural "{0} connected peers"
msgstr[0] "1 par conectado"
msgstr[1] "{0} pares conectados"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:499
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:498
msgid "Opening the I2P tunnel"
msgstr "Abriendo el túnel I2P"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:505
#, java-format
msgid "Invalid URL: Must start with \"http://\", \"{0}\", or \"{1}\""
msgstr "URL no válida: debe comenzar con \"http://\", \"{0}\", o \"{1}\"."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:547
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:574
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:553
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:580
#, java-format
msgid "Magnet deleted: {0}"
msgstr "Magnet eliminado: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:555
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:580
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:561
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:586
#, java-format
msgid "Torrent file deleted: {0}"
msgstr "Borrado archivo torrent: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:586
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:596
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:592
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:603
#, java-format
msgid "Data file deleted: {0}"
msgstr "Borrado el archivo de datos: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:588
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:598
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:594
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:605
#, java-format
msgid "Data file could not be deleted: {0}"
msgstr "No se pudo borrar el archivo de datos: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:607
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:617
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:624
#, java-format
msgid "Data dir deleted: {0}"
msgstr "Ha sido borrada la carpeta de datos: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:644
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:663
msgid "Error creating torrent - you must select a tracker"
msgstr "Error al crear el torrents - Tienes que elegir un rastreador."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:659
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:678
#, java-format
msgid "Torrent created for \"{0}\""
msgstr "Torrent creado para \"{0}\""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:661
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:680
#, java-format
msgid ""
"Many I2P trackers require you to register new torrents before seeding - "
@@ -509,117 +518,117 @@ msgstr ""
"Muchos rastreadores en I2P requieren que te registres, antes de que puedas "
"subir el torrent. Por favor, ¡hazlo antes de iniciar \"{0}\"!"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:663
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:682
#, java-format
msgid "Error creating a torrent for \"{0}\""
msgstr "Error al crear el torrent \"{0}\""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:666
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:685
#, java-format
msgid "Cannot create a torrent for the nonexistent data: {0}"
msgstr "No se puede crear un torrent para datos inexistentes: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:669
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:688
msgid "Error creating torrent - you must enter a file or directory"
msgstr ""
"Error al crear el torrent - Tienes que especificar un archivo o una carpeta."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:672
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:691
msgid "Stopping all torrents and closing the I2P tunnel."
msgstr "Deteniendo todos los torrents y cerrando el túnel I2P"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:683
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:702
msgid "I2P tunnel closed."
msgstr "Túnel I2P cerrado"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:686
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:705
msgid "Opening the I2P tunnel and starting all torrents."
msgstr "Abriendo el túnel I2P e iniciando los torrents ..."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:808
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:813
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:819
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:827
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:832
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:838
msgid "Tracker Error"
msgstr "Error del rastrador"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:811
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:815
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:827
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:831
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:839
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:843
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:848
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:852
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:830
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:834
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:846
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:850
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:858
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:862
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:867
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:871
#, java-format
msgid "1 peer"
msgid_plural "{0} peers"
msgstr[0] "1 par"
msgstr[1] "{0} pares"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:824
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:829
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:843
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:848
msgid "Seeding"
msgstr "sembrando"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:833
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1704
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1809
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:852
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1724
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1830
msgid "Complete"
msgstr "completo"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:836
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:841
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:855
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:860
msgid "OK"
msgstr "bien"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:845
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:850
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:864
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:869
msgid "Stalled"
msgstr "estancado"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:854
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:857
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:873
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:876
msgid "No Peers"
msgstr "sin pares"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:859
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:878
msgid "Stopped"
msgstr "detenido"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:891
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:910
msgid "Torrent details"
msgstr "Detalles del torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:903
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1167
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:922
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1186
msgid "Info"
msgstr "Info"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:918
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:937
msgid "View files"
msgstr "mostrar archivos"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:920
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:939
msgid "Open file"
msgstr "abrir archivo"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:962
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:981
msgid "Stop the torrent"
msgstr "Detener el torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:964
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:983
msgid "Stop"
msgstr "Detener"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:974
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:993
msgid "Start the torrent"
msgstr "Iniciar el torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:976
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:995
msgid "Start"
msgstr "Iniciar"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:987
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1006
msgid "Remove the torrent from the active list, deleting the .torrent file"
msgstr ""
"Quita el torrent de la lista de los torrents activos borrando el archivo ."
@@ -628,7 +637,7 @@ msgstr ""
#. Can't figure out how to escape double quotes inside the onclick string.
#. Single quotes in translate strings with parameters must be doubled.
#. Then the remaining single quite must be escaped
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:992
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1011
#, java-format
msgid ""
"Are you sure you want to delete the file \\''{0}.torrent\\'' (downloaded "
@@ -637,18 +646,18 @@ msgstr ""
"¿Estás seguro de que quieres borrar el archivo \\''{0}.torrent\\''? (Datos "
"bajados no se borrarán.)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:995
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1014
msgid "Remove"
msgstr "Quitar"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1006
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1025
msgid "Delete the .torrent file and the associated data file(s)"
msgstr "Borrar el archivo torrent y el/los archivo(s) de datos pertenecientes"
#. Can't figure out how to escape double quotes inside the onclick string.
#. Single quotes in translate strings with parameters must be doubled.
#. Then the remaining single quite must be escaped
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1011
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1030
#, java-format
msgid ""
"Are you sure you want to delete the torrent \\''{0}\\'' and all downloaded "
@@ -657,184 +666,184 @@ msgstr ""
"¿Estás seguro de que quieres borrar el archivo torrent \\''{0}\\'' y todos "
"los datos descargados de este torrent?"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1014
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1033
msgid "Delete"
msgstr "Borrar"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1049
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1068
msgid "Unknown"
msgstr "desconocido"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1061
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1080
msgid "Seed"
msgstr "Semilla"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1084
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1103
msgid "Uninteresting (The peer has no pieces we need)"
msgstr "no interesante (El par no tiene partes que nos interesen.)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1086
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1105
msgid "Choked (The peer is not allowing us to request pieces)"
msgstr "moderado (De momento el par no nos permite solicitar más partes.)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1106
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1125
msgid "Uninterested (We have no pieces the peer needs)"
msgstr "desinteresado (No tenemos las partes que el par quiere.)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1108
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1127
msgid "Choking (We are not allowing the peer to request pieces)"
msgstr "moderando (De momento no se le permite al par solicitar más partes.)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1166
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1185
#, java-format
msgid "Details at {0} tracker"
msgstr "Detalles en el rastreador {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1195
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1215
msgid "Add Torrent"
msgstr "Añadir un torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1197
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1217
msgid "From URL"
msgstr "URL fuente"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1200
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1220
msgid ""
"Enter the torrent file download URL (I2P only), magnet link, or maggot link"
msgstr ""
"¡Introduce la URL de descarga de torrent (I2P solamente), enlace magnet o un "
"enlace maggot!"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1205
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1225
msgid "Add torrent"
msgstr "Añadir torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1208
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1228
#, java-format
msgid "You can also copy .torrent files to: {0}."
msgstr "También puedes copiar archivos torrent a {0}."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1210
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1230
msgid "Removing a .torrent will cause it to stop."
msgstr ""
"Quitar un archivo torrent resultará en que se detenga el torrent "
"perteneciente."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1233
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1253
msgid "Create Torrent"
msgstr "Crear un torrent"
#. out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\" value=\"" + newFile + "\" /><br>\n");
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1236
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1256
msgid "Data to seed"
msgstr "Datos para sembrar"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1240
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1260
msgid "File or directory to seed (must be within the specified path)"
msgstr ""
"Archivo o carpeta para sembrar (tiene que estár en la carpeta especificada)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1242
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1723
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1262
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1743
msgid "Tracker"
msgstr "Rastreador"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1244
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1264
msgid "Select a tracker"
msgstr "¡Selecciona un rastreador!"
#. out.write(_("Open trackers and DHT only"));
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1249
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1269
msgid "Open trackers only"
msgstr "Sólo rastreadores abiertos"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1264
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1284
msgid "or"
msgstr "o"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1267
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1287
msgid "Specify custom tracker announce URL"
msgstr "¡Especifica una URL para anunciar al rastreador!"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1270
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1290
msgid "Create torrent"
msgstr "Crear torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1291
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1459
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1311
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1479
msgid "Configuration"
msgstr "Preferencias"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1295
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1315
msgid "Data directory"
msgstr "Carpeta de datos"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1297
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1317
msgid "Edit i2psnark.config and restart to change"
msgstr "Para cambiar, ¡modifica el archivo i2psnark.config y reinicia!"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1301
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1321
msgid "Files readable by all"
msgstr "Archivos legibles por todos"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1305
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1325
msgid "If checked, other users may access the downloaded files"
msgstr ""
"Si está activada, otros usuarios pueden acceder a los archivos descargados."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1309
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1329
msgid "Auto start"
msgstr "Arranque automático"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1313
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1333
msgid "If checked, automatically start torrents that are added"
msgstr "Si marcado, los torrents añadidos se iniciarán de forma automática."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1317
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1337
msgid "Theme"
msgstr "Tema"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1330
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1350
msgid "Refresh time"
msgstr "Tiempo de actualización"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1343
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1363
msgid "Never"
msgstr "Nunca"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1349
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1369
msgid "Startup delay"
msgstr "Tiempo de espera al arrancar"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1351
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1371
msgid "minutes"
msgstr "minutos"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1375
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1395
msgid "Total uploader limit"
msgstr "Límite global de subidores"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1378
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1398
msgid "peers"
msgstr "pares"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1382
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1402
msgid "Up bandwidth limit"
msgstr "Límite del ancho de banda para la subida"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1385
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1405
msgid "Half available bandwidth recommended."
msgstr "Se recomienda la mitad del ancho de banda disponible."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1387
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1407
msgid "View or change router bandwidth"
msgstr "Mostrar y cambiar preferencias del ancho de banda del enrutador"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1391
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1411
msgid "Use open trackers also"
msgstr "Usar también rastreadores abiertos"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1395
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1415
msgid ""
"If checked, announce torrents to open trackers as well as the tracker listed "
"in the torrent file"
@@ -842,155 +851,171 @@ msgstr ""
"Si está marcado, el torrent se anunciará a los rastreadores abiertos, además "
"de a los rastreadores especificados."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1399
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1419
msgid "Open tracker announce URLs"
msgstr "URL(s) para anunciar a rastreadores abiertos"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1411
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1431
msgid "Inbound Settings"
msgstr "Preferencias de entrada"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1417
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1437
msgid "Outbound Settings"
msgstr "Preferencias de salida"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1425
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1445
msgid "I2CP host"
msgstr "Anfitrión I2CP"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1430
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1450
msgid "I2CP port"
msgstr "Puerto I2CP"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1445
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1465
msgid "I2CP options"
msgstr "Opciones I2CP"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1450
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1470
msgid "Save configuration"
msgstr "Guardar ajustes"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1475
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1495
#, java-format
msgid "Invalid magnet URL {0}"
msgstr "URL de magnet no válida: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1509
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1529
#, java-format
msgid "Invalid info hash in magnet URL {0}"
msgstr "Hash de información no válido en la URL magnet {0}"
#. * dummies for translation
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1539
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1559
#, java-format
msgid "1 hop"
msgid_plural "{0} hops"
msgstr[0] "1 salto"
msgstr[1] "{0} saltos"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1540
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1560
#, java-format
msgid "1 tunnel"
msgid_plural "{0} tunnels"
msgstr[0] "1 túnel"
msgstr[1] "{0} túneles"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1702
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1722
msgid "Completion"
msgstr "Finalización"
#. else unknown
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1706
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1755
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1726
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1776
msgid "Size"
msgstr "Tamaño"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1711
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1731
msgid "Files"
msgstr "Archivos"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1713
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1733
msgid "Pieces"
msgstr "Partes"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1714
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1734
msgid "Piece size"
msgstr "Tamaño de las partes"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1736
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1756
msgid "Magnet link"
msgstr "Enlace de magnet"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1753
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1792
#. We don't have the hash of the torrent file
#. buf.append("<br>").append(_("Maggot link")).append(": <a href=\"").append(MAGGOT).append(hex).append(':').append(hex).append("\">")
#. .append(MAGGOT).append(hex).append(':').append(hex).append("</a>");
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1762
#, fuzzy
msgid "Torrent file"
msgstr "Detalles del torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1774
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1813
msgid "Directory"
msgstr "Carpeta"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1762
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1783
msgid "Priority"
msgstr "Prioridad"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1767
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1788
msgid "Up to higher level directory"
msgstr "Subir una herarquía"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1797
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1818
msgid "Torrent not found?"
msgstr "¿No se encotró el archivo torrent?"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1806
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1827
msgid "File not found in torrent?"
msgstr "¿Archivo no encontrado en el torrent?"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1819
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1840
msgid "complete"
msgstr "completo"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1820
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1841
msgid "bytes remaining"
msgstr "Bytes faltando"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1845
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1866
msgid "Open"
msgstr "abrir"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1871
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1892
msgid "High"
msgstr "alta"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1876
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1897
msgid "Normal"
msgstr "normal"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1881
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1902
msgid "Skip"
msgstr "dejar de lado"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1890
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1911
msgid "Save priorities"
msgstr "Guardar prioridades"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2006
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2027
#, java-format
msgid "Torrent fetched from {0}"
msgstr "Torrent obtenido desde {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2027
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2048
#, java-format
msgid "Torrent already running: {0}"
msgstr "Torrent ya en marcha: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2029
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2050
#, java-format
msgid "Torrent already in the queue: {0}"
msgstr "Torrent ya encolado: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2035
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2056
#, java-format
msgid "Torrent at {0} was not valid"
msgstr "Torrent en {0} no era válido"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2042
#. FIXME don't lose peer setting
#. String peerParam = req.getParameter("p");
#. if (peerParam != null)
#. buf.append("<input type=\"hidden\" name=\"p\" value=\"").append(peerParam).append("\" >\n");
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2070
#, java-format
msgid "Torrent was not retrieved from {0}"
msgstr "El torrent no se ha podido obtener de {0}."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2073
msgid "Retry"
msgstr "Reintentar"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -16,6 +16,7 @@ import java.io.OutputStream;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
import java.util.zip.GZIPInputStream;
import java.util.Locale;
import java.util.concurrent.RejectedExecutionException;
import net.i2p.I2PAppContext;
@@ -177,23 +178,24 @@ class HTTPResponseOutputStream extends FilterOutputStream {
if (_log.shouldLog(Log.INFO))
_log.info("Response header [" + key + "] = [" + val + "]");
if ("Connection".equalsIgnoreCase(key)) {
String lcKey = key.toLowerCase(Locale.US);
if ("connection".equals(lcKey)) {
out.write("Connection: close\r\n".getBytes());
connectionSent = true;
} else if ("Proxy-Connection".equalsIgnoreCase(key)) {
} else if ("proxy-connection".equals(lcKey)) {
out.write("Proxy-Connection: close\r\n".getBytes());
proxyConnectionSent = true;
} else if ( ("Content-encoding".equalsIgnoreCase(key)) && ("x-i2p-gzip".equalsIgnoreCase(val)) ) {
} else if ("content-encoding".equals(lcKey) && "x-i2p-gzip".equals(val.toLowerCase(Locale.US))) {
_gzip = true;
} else if ("Proxy-Authenticate".equalsIgnoreCase(key)) {
} else if ("proxy-authenticate".equals(lcKey)) {
// filter this hop-by-hop header; outproxy authentication must be configured in I2PTunnelHTTPClient
} else {
if ("Content-Length".equalsIgnoreCase(key)) {
if ("content-length".equals(lcKey)) {
// save for compress decision on server side
try {
_dataExpected = Long.parseLong(val);
} catch (NumberFormatException nfe) {}
} else if ("Content-Type".equalsIgnoreCase(key)) {
} else if ("content-type".equals(lcKey)) {
// save for compress decision on server side
_contentType = val;
}

View File

@@ -46,6 +46,7 @@ import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
import java.util.Properties;
import java.util.Set;
import java.util.StringTokenizer;
@@ -233,7 +234,7 @@ public class I2PTunnel extends EventDispatcherImpl implements Logging {
public void runCommand(String cmd, Logging l) {
if (cmd.indexOf(" ") == -1) cmd += " ";
int iii = cmd.indexOf(" ");
String cmdname = cmd.substring(0, iii).toLowerCase();
String cmdname = cmd.substring(0, iii).toLowerCase(Locale.US);
String allargs = cmd.substring(iii + 1);
String[] args = split(allargs, " "); // .split(" "); // java 1.4
@@ -737,7 +738,7 @@ public class I2PTunnel extends EventDispatcherImpl implements Logging {
String proxy = "";
boolean isShared = true;
if (args.length > 1) {
if ("true".equalsIgnoreCase(args[1].trim())) {
if (Boolean.valueOf(args[1].trim()).booleanValue()) {
isShared = true;
if (args.length == 3)
proxy = args[2];
@@ -806,7 +807,7 @@ public class I2PTunnel extends EventDispatcherImpl implements Logging {
String proxy = "";
boolean isShared = true;
if (args.length > 1) {
if ("true".equalsIgnoreCase(args[1].trim())) {
if (Boolean.valueOf(args[1].trim()).booleanValue()) {
isShared = true;
if (args.length == 3)
proxy = args[2];
@@ -877,7 +878,7 @@ public class I2PTunnel extends EventDispatcherImpl implements Logging {
boolean isShared = true;
if (args.length > 2) {
if ("true".equalsIgnoreCase(args[2].trim())) {
if (Boolean.valueOf(args[2].trim()).booleanValue()) {
isShared = true;
} else if ("false".equalsIgnoreCase(args[2].trim())) {
_log.warn("args[2] == [" + args[2] + "] and rejected explicitly");
@@ -944,7 +945,7 @@ public class I2PTunnel extends EventDispatcherImpl implements Logging {
boolean isShared = false;
if (args.length > 1)
isShared = "true".equalsIgnoreCase(args[1].trim());
isShared = Boolean.valueOf(args[1].trim()).booleanValue();
ownDest = !isShared;
try {
@@ -988,7 +989,7 @@ public class I2PTunnel extends EventDispatcherImpl implements Logging {
boolean isShared = false;
if (args.length == 2)
isShared = "true".equalsIgnoreCase(args[1].trim());
isShared = Boolean.valueOf(args[1].trim()).booleanValue();
ownDest = !isShared;
String privateKeyFile = null;

View File

@@ -11,6 +11,7 @@ import java.net.Socket;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Properties;
import java.util.StringTokenizer;
@@ -193,7 +194,7 @@ public class I2PTunnelConnectClient extends I2PTunnelHTTPClientBase implements R
restofline = request.substring(pos); // ":80 HTTP/1.1" or " HTTP/1.1"
}
if (host.toLowerCase().endsWith(".i2p")) {
if (host.toLowerCase(Locale.US).endsWith(".i2p")) {
// Destination gets the host name
destination = host;
} else if (host.indexOf(".") != -1) {
@@ -209,7 +210,7 @@ public class I2PTunnelConnectClient extends I2PTunnelHTTPClientBase implements R
destination = currentProxy;
usingWWWProxy = true;
newRequest.append("CONNECT ").append(host).append(restofline).append("\r\n"); // HTTP spec
} else if (host.toLowerCase().equals("localhost")) {
} else if (host.toLowerCase(Locale.US).equals("localhost")) {
writeErrorMessage(ERR_LOCALHOST, out);
s.close();
return;
@@ -224,7 +225,7 @@ public class I2PTunnelConnectClient extends I2PTunnelHTTPClientBase implements R
_log.debug(getPrefix(requestId) + "REST :" + restofline + ":");
_log.debug(getPrefix(requestId) + "DEST :" + destination + ":");
}
} else if (line.toLowerCase().startsWith("proxy-authorization: basic ")) {
} else if (line.toLowerCase(Locale.US).startsWith("proxy-authorization: basic ")) {
// strip Proxy-Authenticate from the response in HTTPResponseOutputStream
// save for auth check below
authorization = line.substring(27); // "proxy-authorization: basic ".length()
@@ -261,7 +262,7 @@ public class I2PTunnelConnectClient extends I2PTunnelHTTPClientBase implements R
}
}
if (destination == null || !"CONNECT".equalsIgnoreCase(method)) {
if (destination == null || method == null || !"CONNECT".equals(method.toUpperCase(Locale.US))) {
writeErrorMessage(ERR_BAD_PROTOCOL, out);
s.close();
return;

View File

@@ -336,7 +336,7 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
if (_log.shouldLog(Log.DEBUG))
_log.debug(getPrefix(requestId) + "Line=[" + line + "]");
String lowercaseLine = line.toLowerCase();
String lowercaseLine = line.toLowerCase(Locale.US);
if (lowercaseLine.startsWith("connection: ") ||
lowercaseLine.startsWith("keep-alive: ") ||
lowercaseLine.startsWith("proxy-connection: "))
@@ -365,7 +365,7 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
}
// "http://" + "foo.i2p/bar/baz.html" + " HTTP/1.0"
request = "http://" + uri + subRequest.substring(protopos);
} else if (request.toLowerCase().startsWith("http://i2p/")) {
} else if (request.toLowerCase(Locale.US).startsWith("http://i2p/")) {
// http://i2p/b64key/bar/baz.html HTTP/1.0
String subRequest = request.substring("http://i2p/".length());
int protopos = subRequest.indexOf(" ");
@@ -433,11 +433,11 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
destination = host;
host = getHostName(destination);
line = method + ' ' + request.substring(pos);
} else if (host.toLowerCase().equals(LOCAL_SERVER)) {
} else if (host.toLowerCase(Locale.US).equals(LOCAL_SERVER)) {
// so we don't do any naming service lookups
destination = host;
usingInternalServer = true;
} else if (host.toLowerCase().endsWith(".i2p")) {
} else if (host.toLowerCase(Locale.US).endsWith(".i2p")) {
// Destination gets the host name
destination = host;
// Host becomes the destination's "{b32}.b32.i2p" string, or "i2p" on lookup failure
@@ -498,7 +498,7 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
if (host == null || "i2p".equals(host)) {
// Host lookup failed - resolvable only with addresshelper
// Store in local HashMap unless there is conflict
String old = addressHelpers.putIfAbsent(destination.toLowerCase(), ahelperKey);
String old = addressHelpers.putIfAbsent(destination.toLowerCase(Locale.US), ahelperKey);
ahelperNew = old == null;
if ((!ahelperNew) && !old.equals(ahelperKey)) {
// Conflict: handle when URL reconstruction done
@@ -570,7 +570,7 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
line = method + " " + request.substring(pos);
// end of (host endsWith(".i2p"))
} else if (host.toLowerCase().equals("localhost") || host.equals("127.0.0.1") ||
} else if (host.toLowerCase(Locale.US).equals("localhost") || host.equals("127.0.0.1") ||
host.startsWith("192.168.")) {
// if somebody is trying to get to 192.168.example.com, oh well
if (out != null) {
@@ -758,7 +758,7 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
if (method == null || destination == null) {
//l.log("No HTTP method found in the request.");
if (out != null) {
if ("http://".equalsIgnoreCase(protocol))
if (protocol != null && "http://".equals(protocol.toLowerCase(Locale.US)))
out.write(getErrorPage("denied", ERR_REQUEST_DENIED));
else
out.write(getErrorPage("protocol", ERR_BAD_PROTOCOL));
@@ -804,15 +804,15 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
// look it up again as the naming service does not do negative caching
// so it will be slow.
Destination clientDest = null;
String addressHelper = addressHelpers.get(destination.toLowerCase());
String addressHelper = addressHelpers.get(destination.toLowerCase(Locale.US));
if (addressHelper != null) {
clientDest = _context.namingService().lookup(addressHelper);
// remove bad entries
if (clientDest == null)
addressHelpers.remove(destination.toLowerCase());
addressHelpers.remove(destination.toLowerCase(Locale.US));
} else if ("i2p".equals(host)) {
clientDest = null;
} else if (destination.length() == 60 && destination.toLowerCase().endsWith(".b32.i2p")) {
} else if (destination.length() == 60 && destination.toLowerCase(Locale.US).endsWith(".b32.i2p")) {
// use existing session to look up for efficiency
verifySocketManager();
I2PSession sess = sockMgr.getSession();
@@ -841,7 +841,7 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
header = getErrorPage("dnfp", ERR_DESTINATION_UNKNOWN);
else if (ahelperPresent)
header = getErrorPage("dnfb", ERR_DESTINATION_UNKNOWN);
else if (destination.length() == 60 && destination.toLowerCase().endsWith(".b32.i2p"))
else if (destination.length() == 60 && destination.toLowerCase(Locale.US).endsWith(".b32.i2p"))
header = getErrorPage("dnf", ERR_DESTINATION_UNKNOWN);
else {
header = getErrorPage("dnfh", ERR_DESTINATION_UNKNOWN);
@@ -935,15 +935,15 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
ahelperKey + "</textarea></td></tr></table>\n" +
"<hr><div class=\"formaction\">"+
"<form method=\"GET\" action=\"" + targetRequest + "\">" +
"<button type=\"submit\">" + _("Continue to {0} without saving", destination) + "</button>" +
"<button type=\"submit\" class=\"go\">" + _("Continue to {0} without saving", destination) + "</button>" +
"</form>\n<form method=\"GET\" action=\"http://" + LOCAL_SERVER + "/add\">" +
"<input type=\"hidden\" name=\"host\" value=\"" + destination + "\">\n" +
"<input type=\"hidden\" name=\"dest\" value=\"" + ahelperKey + "\">\n" +
"<input type=\"hidden\" name=\"nonce\" value=\"" + _proxyNonce + "\">\n" +
"<button type=\"submit\" name=\"router\" value=\"router\">" + _("Save {0} to router address book and continue to eepsite", destination) + "</button><br>\n").getBytes("UTF-8"));
"<button type=\"submit\" class=\"accept\" name=\"router\" value=\"router\">" + _("Save {0} to router address book and continue to eepsite", destination) + "</button><br>\n").getBytes("UTF-8"));
if (_context.namingService().getName().equals("BlockfileNamingService")) {
// only blockfile supports multiple books
out.write(("<button type=\"submit\" name=\"master\" value=\"master\">" + _("Save {0} to master address book and continue to eepsite", destination) + "</button><br>\n").getBytes("UTF-8"));
out.write(("<br><button type=\"submit\" name=\"master\" value=\"master\">" + _("Save {0} to master address book and continue to eepsite", destination) + "</button><br>\n").getBytes("UTF-8"));
out.write(("<button type=\"submit\" name=\"private\" value=\"private\">" + _("Save {0} to private address book and continue to eepsite", destination) + "</button>\n").getBytes("UTF-8"));
}
out.write(("<input type=\"hidden\" name=\"url\" value=\"" + targetRequest + "\">\n" +
@@ -984,7 +984,7 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
*/
private final String getHostName(String host) {
if (host == null) return null;
if (host.length() == 60 && host.toLowerCase().endsWith(".b32.i2p"))
if (host.length() == 60 && host.toLowerCase(Locale.US).endsWith(".b32.i2p"))
return host;
Destination dest = _context.namingService().lookup(host);
if (dest == null) return "i2p";
@@ -1097,7 +1097,11 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
out.write("\">http://".getBytes());
out.write(uri.getBytes());
out.write("</a>".getBytes());
if (usingWWWProxy) out.write(("<br>WWW proxy: " + wwwProxy).getBytes());
if (usingWWWProxy) {
out.write(("<br><br><b>").getBytes());
out.write(_("HTTP Outproxy").getBytes("UTF-8"));
out.write((":</b> " + wwwProxy).getBytes());
}
if (jumpServers != null && jumpServers.length() > 0) {
out.write("<br><br>".getBytes());
out.write(_("Click a link below to look for an address helper by using a \"jump\" service:").getBytes("UTF-8"));
@@ -1184,7 +1188,7 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
}
}
****/
return protocol.equalsIgnoreCase("http://");
return protocol.toLowerCase(Locale.US).equals("http://");
}
private final static byte[] ERR_404 =
@@ -1349,7 +1353,7 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
"</head><body>\n" +
"<div class=logo>\n" +
"<a href=\"http://127.0.0.1:7657/\" title=\"" + _("Router Console") + "\"><img src=\"http://proxy.i2p/themes/console/images/i2plogo.png\" alt=\"I2P Router Console\" border=\"0\"></a><hr>\n" +
"<a href=\"http://127.0.0.1:7657/config\">" + _("Configuration") + "</a> <a href=\"http://127.0.0.1:7657/help.jsp\">" + _("Help") + "</a> <a href=\"http://127.0.0.1:7657/susidns/index.jsp\">" + _("Addressbook") + "</a>\n" +
"<a href=\"http://127.0.0.1:7657/config\">" + _("Configuration") + "</a> <a href=\"http://127.0.0.1:7657/help.jsp\">" + _("Help") + "</a> <a href=\"http://127.0.0.1:7657/susidns/index\">" + _("Addressbook") + "</a>\n" +
"</div>" +
"<div class=warning id=warning>\n" +
"<h3>" +

View File

@@ -10,6 +10,7 @@ import java.net.Socket;
import java.util.ArrayList;
import java.io.File;
import java.util.List;
import java.util.Locale;
import net.i2p.I2PAppContext;
import net.i2p.client.streaming.I2PSocketManager;
@@ -101,7 +102,8 @@ public abstract class I2PTunnelHTTPClientBase extends I2PTunnelClientBase implem
// Ref: RFC 2617
// If the socket is an InternalSocket, no auth required.
String authRequired = getTunnel().getClientOptions().getProperty(PROP_AUTH);
if (authRequired != null && (authRequired.equalsIgnoreCase("true") || authRequired.equalsIgnoreCase("basic"))) {
if (Boolean.valueOf(authRequired).booleanValue() ||
(authRequired != null && "basic".equals(authRequired.toLowerCase(Locale.US)))) {
if (s instanceof InternalSocket) {
if (_log.shouldLog(Log.INFO))
_log.info(getPrefix(requestId) + "Internal access, no auth required");

View File

@@ -42,7 +42,7 @@ public class I2PTunnelHTTPClientRunner extends I2PTunnelRunner {
*/
@Override
protected void close(OutputStream out, InputStream in, OutputStream i2pout, InputStream i2pin,
Socket s, I2PSocket i2ps, Thread t1, Thread t2) throws InterruptedException, IOException {
Socket s, I2PSocket i2ps, Thread t1, Thread t2) throws InterruptedException {
try {
i2pin.close();
} catch (IOException ioe) {

View File

@@ -14,6 +14,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Properties;
import java.util.zip.GZIPOutputStream;
@@ -45,6 +46,8 @@ public class I2PTunnelHTTPServer extends I2PTunnelServer {
private static final String SERVER_HEADER = "Server";
private static final String[] SERVER_SKIPHEADERS = {SERVER_HEADER};
private static final long HEADER_TIMEOUT = 60*1000;
private static final long START_INTERVAL = (60 * 1000) * 3;
private long _startedOn = 0L;
private final static byte[] ERR_UNAVAILABLE =
("HTTP/1.1 503 Service Unavailable\r\n"+
@@ -80,6 +83,14 @@ public class I2PTunnelHTTPServer extends I2PTunnelServer {
getTunnel().getContext().statManager().createRateStat("i2ptunnel.httpNullWorkaround", "How often an http server works around a streaming lib or i2ptunnel bug", "I2PTunnel.HTTPServer", new long[] { 60*1000, 10*60*1000 });
}
@Override
public void startRunning() {
super.startRunning();
_startedOn = getTunnel().getContext().clock().now();
// Would be better if this was set when the inbound tunnel becomes alive.
}
/**
* Called by the thread pool of I2PSocket handlers
*
@@ -167,8 +178,10 @@ public class I2PTunnelHTTPServer extends I2PTunnelServer {
try {
socket.close();
} catch (IOException ioe) {}
if (_log.shouldLog(Log.ERROR))
_log.error("Error connecting to HTTP server " + remoteHost + ':' + remotePort, ex);
// Don't complain too early, Jetty may not be ready.
int level = getTunnel().getContext().clock().now() - _startedOn > START_INTERVAL ? Log.ERROR : Log.WARN;
if (_log.shouldLog(level))
_log.log(level, "Error connecting to HTTP server " + remoteHost + ':' + remotePort, ex);
} catch (IOException ex) {
try {
socket.close();
@@ -507,16 +520,17 @@ public class I2PTunnelHTTPServer extends I2PTunnelServer {
else
value = "";
if ("Accept-encoding".equalsIgnoreCase(name))
if ("accept-encoding".equals(name.toLowerCase(Locale.US)))
name = "Accept-encoding";
else if ("X-Accept-encoding".equalsIgnoreCase(name))
else if ("x-accept-encoding".equals(name.toLowerCase(Locale.US)))
name = "X-Accept-encoding";
// For incoming, we remove certain headers to prevent spoofing.
// For outgoing, we remove certain headers to improve anonymity.
boolean skip = false;
String lcName = name.toLowerCase(Locale.US);
for (String skipHeader: skipHeaders) {
if (skipHeader.equalsIgnoreCase(name)) {
if (skipHeader.toLowerCase(Locale.US).equals(lcName)) {
skip = true;
break;
}

View File

@@ -9,6 +9,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
import net.i2p.I2PException;
import net.i2p.client.streaming.I2PSocket;
import net.i2p.data.Base32;
import net.i2p.data.Destination;
@@ -112,7 +113,7 @@ public class I2PTunnelIRCClient extends I2PTunnelClientBase {
in.start();
Thread out = new I2PAppThread(new IrcOutboundFilter(s,i2ps, expectedPong, _log, dcc), "IRC Client " + __clientId + " out", true);
out.start();
} catch (Exception ex) {
} catch (I2PException ex) {
if (_log.shouldLog(Log.ERROR))
_log.error("Error connecting", ex);
//l.log("Error connecting: " + ex.getMessage());
@@ -122,6 +123,17 @@ public class I2PTunnelIRCClient extends I2PTunnelClientBase {
mySockets.remove(sockLock);
}
}
} catch (Exception ex) {
// generally NoRouteToHostException
if (_log.shouldLog(Log.WARN))
_log.warn("Error connecting", ex);
//l.log("Error connecting: " + ex.getMessage());
closeSocket(s);
if (i2ps != null) {
synchronized (sockLock) {
mySockets.remove(sockLock);
}
}
}
}

View File

@@ -6,6 +6,7 @@ import java.io.InputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.SocketException;
import java.util.Locale;
import java.util.Properties;
import net.i2p.client.streaming.I2PSocket;
@@ -197,18 +198,16 @@ public class I2PTunnelIRCServer extends I2PTunnelServer implements Runnable {
String field[]=s.split(" ",5);
String command;
int idx=0;
if(field[0].charAt(0)==':')
idx++;
try {
command = field[idx++];
if (field[0].charAt(0) == ':')
idx++;
command = field[idx++].toUpperCase(Locale.US);
} catch (IndexOutOfBoundsException ioobe) {
// wtf, server sent borked command?
throw new IOException("Dropping defective message: index out of bounds while extracting command.");
throw new IOException("Dropping defective message: [" + s + ']');
}
if ("USER".equalsIgnoreCase(command)) {
if ("USER".equals(command)) {
if (field.length < idx + 4)
throw new IOException("Too few parameters in USER message: " + s);
// USER zzz1 hostname localhost :zzz
@@ -221,7 +220,7 @@ public class I2PTunnelIRCServer extends I2PTunnelServer implements Runnable {
break;
}
buf.append(s).append("\r\n");
if ("SERVER".equalsIgnoreCase(command))
if ("SERVER".equals(command))
break;
}
//if (_log.shouldLog(Log.DEBUG))

View File

@@ -143,6 +143,7 @@ public class I2PTunnelRunner extends I2PAppThread implements I2PSocket.SocketErr
InputStream i2pin = i2ps.getInputStream();
OutputStream i2pout = i2ps.getOutputStream(); //new BufferedOutputStream(i2ps.getOutputStream(), MAX_PACKET_SIZE);
if (initialI2PData != null) {
// why synchronize this? we could be in here a LONG time for large initial data
synchronized (slock) {
// this does not increment totalSent
i2pout.write(initialI2PData);
@@ -182,8 +183,11 @@ public class I2PTunnelRunner extends I2PAppThread implements I2PSocket.SocketErr
if (_log.shouldLog(Log.DEBUG))
_log.debug("runner has a timeout job, totalReceived = " + totalReceived
+ " totalSent = " + totalSent + " job = " + onTimeout);
// should we only look at totalReceived?
if ( (totalSent <= 0) && (totalReceived <= 0) )
// Run even if totalSent > 0, as that's probably POST data.
// This will be run even if initialSocketData != null, it's the timeout job's
// responsibility to know that and decide whether or not to write to the socket.
// HTTPClient never sets initialSocketData.
if (totalReceived <= 0)
onTimeout.run();
}
@@ -234,7 +238,7 @@ public class I2PTunnelRunner extends I2PAppThread implements I2PSocket.SocketErr
}
protected void close(OutputStream out, InputStream in, OutputStream i2pout, InputStream i2pin,
Socket s, I2PSocket i2ps, Thread t1, Thread t2) throws InterruptedException, IOException {
Socket s, I2PSocket i2ps, Thread t1, Thread t2) throws InterruptedException {
try {
out.flush();
} catch (IOException ioe) {

View File

@@ -177,7 +177,7 @@ public class I2PTunnelServer extends I2PTunnelTask implements Runnable {
if (_usePool) {
String usePool = getTunnel().getClientOptions().getProperty(PROP_USE_POOL);
if (usePool != null)
_usePool = "true".equalsIgnoreCase(usePool);
_usePool = Boolean.valueOf(usePool).booleanValue();
else
_usePool = DEFAULT_USE_POOL;
}

View File

@@ -482,7 +482,7 @@ public class TunnelController implements Logging {
/** default true */
public String getSharedClient() { return _config.getProperty("sharedClient", "true"); }
/** default true */
public boolean getStartOnLoad() { return "true".equalsIgnoreCase(_config.getProperty("startOnLoad", "true")); }
public boolean getStartOnLoad() { return Boolean.valueOf(_config.getProperty("startOnLoad", "true")).booleanValue(); }
public boolean getPersistentClientKey() { return Boolean.valueOf(_config.getProperty("option.persistentClientKey")).booleanValue(); }
public String getMyDestination() {
if (_tunnel != null) {

View File

@@ -1,6 +1,7 @@
package net.i2p.i2ptunnel.irc;
import java.util.Iterator;
import java.util.Locale;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@@ -91,7 +92,7 @@ public class DCCClientManager extends EventReceiver {
* @param localPort bind to port or 0; if nonzero it will be the rv
*/
private int newIncoming(String b32, int port, String type, int localPort) {
b32 = b32.toLowerCase();
b32 = b32.toLowerCase(Locale.US);
// do some basic verification before starting the client
if (b32.length() != 60 || !b32.endsWith(".b32.i2p"))
return -1;

View File

@@ -111,18 +111,19 @@ public class I2PTunnelDCCServer extends I2PTunnelServer {
if (_log.shouldLog(Log.WARN))
_log.warn("Incoming DCC connection for I2P port " + myPort +
" sending to " + local.ia + ':' + local.port);
Socket s = new Socket(local.ia, local.port);
_sockList.add(socket);
new I2PTunnelRunner(s, socket, slock, null, _sockList);
local.socket = socket;
local.expire = getTunnel().getContext().clock().now() + OUTBOUND_EXPIRE;
_active.put(Integer.valueOf(myPort), local);
} catch (SocketException ex) {
try {
socket.close();
} catch (IOException ioe) {}
if (_log.shouldLog(Log.ERROR))
_log.error("Error connecting to server " + remoteHost + ':' + remotePort, ex);
Socket s = new Socket(local.ia, local.port);
_sockList.add(socket);
new I2PTunnelRunner(s, socket, slock, null, _sockList);
local.socket = socket;
local.expire = getTunnel().getContext().clock().now() + OUTBOUND_EXPIRE;
_active.put(Integer.valueOf(myPort), local);
} catch (SocketException ex) {
try {
socket.close();
} catch (IOException ioe) {}
_log.error("Error relaying incoming DCC connection to IRC client at " + local.ia + ':' + local.port, ex);
}
} catch (IOException ex) {
_log.error("Error while waiting for I2PConnections", ex);
}

View File

@@ -1,5 +1,10 @@
package net.i2p.i2ptunnel.irc;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Locale;
import java.util.Set;
import net.i2p.data.DataHelper;
import net.i2p.util.Log;
@@ -50,12 +55,13 @@ abstract class IRCFilter {
"CAP"
};
if(field[0].charAt(0)==':')
idx++;
try { command = field[idx++]; }
catch (IndexOutOfBoundsException ioobe) // wtf, server sent borked command?
{
try {
if (field[0].charAt(0) == ':')
idx++;
command = field[idx++].toUpperCase(Locale.US);
} catch (IndexOutOfBoundsException ioobe) {
// wtf, server sent borked command?
//_log.warn("Dropping defective message: index out of bounds while extracting command.");
return null;
}
@@ -69,9 +75,9 @@ abstract class IRCFilter {
} catch(NumberFormatException nfe){}
if ("PING".equalsIgnoreCase(command))
if ("PING".equals(command))
return "PING 127.0.0.1"; // no way to know what the ircd to i2ptunnel server con is, so localhost works
if ("PONG".equalsIgnoreCase(command)) {
if ("PONG".equals(command)) {
// Turn the received ":irc.freshcoffee.i2p PONG irc.freshcoffee.i2p :127.0.0.1"
// into ":127.0.0.1 PONG 127.0.0.1 " so that the caller can append the client's extra parameter
// though, does 127.0.0.1 work for irc clients connecting remotely? and for all of them? sure would
@@ -88,16 +94,16 @@ abstract class IRCFilter {
// Allow all allowedCommands
for(int i=0;i<allowedCommands.length;i++) {
if(allowedCommands[i].equalsIgnoreCase(command))
if(allowedCommands[i].equals(command))
return s;
}
// Allow PRIVMSG, but block CTCP.
if("PRIVMSG".equalsIgnoreCase(command) || "NOTICE".equalsIgnoreCase(command))
if("PRIVMSG".equals(command) || "NOTICE".equals(command))
{
String msg;
msg = field[idx++];
if(msg.indexOf(0x01) >= 0) // CTCP marker ^A can be anywhere, not just immediately after the ':'
{
// CTCP
@@ -126,7 +132,7 @@ abstract class IRCFilter {
}
// XDCC looks safe, ip/port happens over regular DCC
// http://en.wikipedia.org/wiki/XDCC
if (msg.toUpperCase().startsWith("XDCC ") && helper != null && helper.isEnabled())
if (msg.toUpperCase(Locale.US).startsWith("XDCC ") && helper != null && helper.isEnabled())
return s;
if (ALLOW_ALL_CTCP_IN)
return s;
@@ -134,11 +140,99 @@ abstract class IRCFilter {
}
return s;
}
// Block the rest
return null;
}
private static final Set<String> _allowedOutbound;
static {
final String[] allowedCommands =
{
// Commands that regular users might use
"ADMIN",
"AWAY", // should be harmless
"CAP", // http://tools.ietf.org/html/draft-mitchell-irc-capabilities-01
"CYCLE",
"DCCALLOW",
"HELPME", "HELPOP", // helpop is what unrealircd uses by default
"INVITE",
"ISON", // jIRCii uses this for a ping (response is 303)
"JOIN",
"KICK",
"KNOCK",
"LIST",
"LUSERS",
"MAP", // seems safe enough, the ircd should protect themselves though
"MODE",
"MOTD",
"NAMES",
"NICK",
// "NOTICE", // can contain CTCP
"OPER",
// "PART", // replace with filtered PART to hide client part messages
"PASS",
// "PING",
// "PONG", // replaced with a filtered PING/PONG since some clients send the server IP (thanks aardvax!)
// "QUIT", // replace with a filtered QUIT to hide client quit messages
"RULES",
"SETNAME",
"SILENCE",
"STATS",
"TOPIC",
"USERHOST",
"VHOST",
"WATCH",
"WHO",
"WHOIS",
"WHOWAS",
// the next few are default aliases on unreal (+ anope)
"BOTSERV", "BS",
"CHANSERV", "CS",
"HELPSERV",
"HOSTSERV", "HS",
"MEMOSERV", "MS",
"NICKSERV", "NS",
"OPERSERV", "OS",
"STATSERV",
// IRCop commands
"ADCHAT",
"ADDMOTD",
"ADDOMOTD",
"CHATOPS",
"CHGHOST",
"CHGIDENT",
"CHGNAME",
"CLOSE",
"DCCDENY",
"DIE",
"GLOBOPS",
"GZLINE",
"HTM", // "High Traffic Mode"
"KILL",
"KLINE",
"LOCOPS",
"NACHAT",
"OPERMOTD",
"REHASH",
"RESTART",
"SAJOIN",
"SAMODE",
"SAPART",
"SDESC",
"SETHOST",
"SETIDENT",
"SHUN",
"SPAMFILTER",
"SQUIT",
"TEMPSHUN",
"UNDCCDENY",
"WALLOPS",
"ZLINE"
};
_allowedOutbound = new HashSet(Arrays.asList(allowedCommands));
}
/*************************************************************************
*
* Modify or filter a single outbound line.
@@ -147,37 +241,8 @@ abstract class IRCFilter {
* @return the original or modified line, or null if it should be dropped.
*/
public static String outboundFilter(String s, StringBuffer expectedPong, DCCHelper helper) {
String field[]=s.split(" ",3);
String command;
final String[] allowedCommands =
{
// "NOTICE", // can contain CTCP
"MODE",
"JOIN",
"NICK",
"WHO",
"WHOIS",
"LIST",
"NAMES",
"NICK",
// "QUIT", // replace with a filtered QUIT to hide client quit messages
"SILENCE",
"MAP", // seems safe enough, the ircd should protect themselves though
// "PART", // replace with filtered PART to hide client part messages
"OPER",
// "PONG", // replaced with a filtered PING/PONG since some clients send the server IP (thanks aardvax!)
// "PING",
"KICK",
"HELPME",
"RULES",
"TOPIC",
"ISON", // jIRCii uses this for a ping (response is 303)
"INVITE",
"AWAY", // should be harmless
// http://tools.ietf.org/html/draft-mitchell-irc-capabilities-01
"CAP"
};
if(field[0].length()==0)
return null; // W T F?
@@ -186,7 +251,7 @@ abstract class IRCFilter {
if(field[0].charAt(0)==':')
return null; // wtf
command = field[0].toUpperCase();
String command = field[0].toUpperCase(Locale.US);
if ("PING".equals(command)) {
// Most clients just send a PING and are happy with any old PONG. Others,
@@ -228,11 +293,8 @@ abstract class IRCFilter {
return "PONG 127.0.0.1"; // no way to know what the ircd to i2ptunnel server con is, so localhost works
// Allow all allowedCommands
for(int i=0;i<allowedCommands.length;i++)
{
if(allowedCommands[i].equals(command))
return s;
}
if (_allowedOutbound.contains(command))
return s;
// mIRC sends "NOTICE user :DCC Send file (IP)"
// in addition to the CTCP version
@@ -272,7 +334,7 @@ abstract class IRCFilter {
return filterDCCOut(field[0] + ' ' + field[1] + " :\001DCC ", msg.substring(4), helper);
// XDCC looks safe, ip/port happens over regular DCC
// http://en.wikipedia.org/wiki/XDCC
if (msg.toUpperCase().startsWith("XDCC ") && helper != null && helper.isEnabled())
if (msg.toUpperCase(Locale.US).startsWith("XDCC ") && helper != null && helper.isEnabled())
return s;
if (ALLOW_ALL_CTCP_OUT)
return s;

View File

@@ -14,6 +14,7 @@ import java.net.InetAddress;
import java.net.Socket;
import java.net.SocketException;
import java.util.List;
import java.util.Locale;
import net.i2p.I2PAppContext;
import net.i2p.I2PException;
@@ -198,8 +199,8 @@ public class SOCKS4aServer extends SOCKSServer {
I2PSocket destSock;
try {
if (connHostName.toLowerCase().endsWith(".i2p") ||
connHostName.toLowerCase().endsWith(".onion")) {
if (connHostName.toLowerCase(Locale.US).endsWith(".i2p") ||
connHostName.toLowerCase(Locale.US).endsWith(".onion")) {
_log.debug("connecting to " + connHostName + "...");
// Let's not due a new Dest for every request, huh?
//I2PSocketManager sm = I2PSocketManagerFactory.createManager();

View File

@@ -16,6 +16,7 @@ import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Properties;
import net.i2p.I2PAppContext;
@@ -355,7 +356,7 @@ public class SOCKS5Server extends SOCKSServer {
I2PSocket destSock;
try {
if (connHostName.toLowerCase().endsWith(".i2p")) {
if (connHostName.toLowerCase(Locale.US).endsWith(".i2p")) {
_log.debug("connecting to " + connHostName + "...");
// Let's not due a new Dest for every request, huh?
//I2PSocketManager sm = I2PSocketManagerFactory.createManager();

View File

@@ -114,7 +114,7 @@ public class EditBean extends IndexBean {
public boolean isSharedClient(int tunnel) {
TunnelController tun = getController(tunnel);
if (tun != null)
return "true".equalsIgnoreCase(tun.getSharedClient());
return Boolean.valueOf(tun.getSharedClient()).booleanValue();
else
return false;
}

View File

@@ -14,6 +14,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
@@ -185,10 +186,10 @@ public class IndexBean {
else if ("start".equals(_action))
return start();
else if ("Save changes".equals(_action) || // IE workaround:
(_action.toLowerCase().indexOf("s</span>ave") >= 0))
(_action.toLowerCase(Locale.US).indexOf("s</span>ave") >= 0))
return saveChanges();
else if ("Delete this proxy".equals(_action) || // IE workaround:
(_action.toLowerCase().indexOf("d</span>elete") >= 0))
(_action.toLowerCase(Locale.US).indexOf("d</span>elete") >= 0))
return deleteTunnel();
else if ("Estimate".equals(_action))
return PrivateKeyFile.estimateHashCashTime(_hashCashValue);
@@ -265,7 +266,7 @@ public class IndexBean {
}
// Only modify other shared tunnels
// if the current tunnel is shared, and of supported type
if ("true".equalsIgnoreCase(cur.getSharedClient()) && isClient(cur.getType())) {
if (Boolean.valueOf(cur.getSharedClient()).booleanValue() && isClient(cur.getType())) {
// all clients use the same I2CP session, and as such, use the same I2CP options
List controllers = _group.getControllers();
@@ -277,7 +278,7 @@ public class IndexBean {
// Only modify this non-current tunnel
// if it belongs to a shared destination, and is of supported type
if ("true".equalsIgnoreCase(c.getSharedClient()) && isClient(c.getType())) {
if (Boolean.valueOf(c.getSharedClient()).booleanValue() && isClient(c.getType())) {
Properties cOpt = c.getConfig("");
if (_tunnelQuantity != null) {
cOpt.setProperty("option.inbound.quantity", _tunnelQuantity);

View File

@@ -5,6 +5,7 @@
#
# Translators:
# blabla, 2011.
# <blabla@trash-mail.com>, 2011.
# ducki2p <ducki2p@gmail.com>, 2011.
# foo <foo@bar>, 2009.
# mixxy, 2011.
@@ -12,8 +13,8 @@ msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-10-07 13:59+0000\n"
"PO-Revision-Date: 2011-10-07 01:43+0000\n"
"POT-Creation-Date: 2011-12-12 11:16+0000\n"
"PO-Revision-Date: 2011-11-28 01:24+0000\n"
"Last-Translator: blabla <blabla@trash-mail.com>\n"
"Language-Team: German (http://www.transifex.net/projects/p/I2P/team/de/)\n"
"Language: de\n"
@@ -22,15 +23,15 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:485
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:487
msgid "This seems to be a bad destination:"
msgstr "Dies scheint kein gültiges Ziel zu sein:"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:485
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:487
msgid "i2paddresshelper cannot help you with a destination like that!"
msgstr "Der I2P-Adresshelfer kann dir bei solch einem Ziel nicht helfen."
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:554
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:556
#, java-format
msgid ""
"To visit the destination in your host database, click <a href=\"{0}\">here</"
@@ -41,84 +42,88 @@ msgstr ""
"\"{0}\">hier</a>, und um das Ziel aus der kollidierenden Adresshelfer-"
"Anfrage zu besuchen, <a href=\"{1}\">hier</a>!"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:930
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:932
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:398
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:142
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:401
msgid "Host"
msgstr "Host"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:931
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:933
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:370
msgid "Destination"
msgstr "Ziel"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:936
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:938
#, java-format
msgid "Continue to {0} without saving"
msgstr "Weiter zu {0}, ohne zu speichern"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:941
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:943
#, java-format
msgid "Save {0} to router address book and continue to eepsite"
msgstr "{0} im Router-Adressbuch speichern und auf die Eepseite weiterleiten"
#. only blockfile supports multiple books
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:944
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:946
#, java-format
msgid "Save {0} to master address book and continue to eepsite"
msgstr "{0} im Master-Adressbuch speichern und auf die Eepseite weiterleiten"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:945
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:947
#, java-format
msgid "Save {0} to private address book and continue to eepsite"
msgstr "{0} im privaten Adressbuch speichern und auf die Eepseite weiterleiten"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1101
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1102
msgid "HTTP Outproxy"
msgstr "HTTP-Outproxy"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1107
msgid ""
"Click a link below to look for an address helper by using a \"jump\" service:"
msgstr ""
"Durch Klicken auf einen der untenstehenden Links bekommen Sie einen "
"Adresshelfer von einem \"Sprung\"-Service:"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1319
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1325
msgid "Added via address helper"
msgstr "Durch Adresshelfer hinzugefügt"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1343
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1349
#, java-format
msgid "Redirecting to {0}"
msgstr "Weiterleitung zu {0}"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1349
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1355
msgid "Router Console"
msgstr "Routerkonsole"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1350
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1356
msgid "Addressbook"
msgstr "Adressbuch"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1350
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1356
msgid "Configuration"
msgstr "Einstellungen"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1350
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1356
msgid "Help"
msgstr "Hilfe"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1355
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1361
#, java-format
msgid "Saved {0} to the {1} addressbook, redirecting now."
msgstr ""
"{0} wurde ins {1} Adressbuch geschrieben. Du wirst nun weitergeleitet."
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1356
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1362
#, java-format
msgid "Failed to save {0} to the {1} addressbook, redirecting now."
msgstr ""
"Konnte {0} nicht im {1} Adressbuch speichern. Du wirst nun weitergeleitet."
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1358
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1364
msgid "Click here if you are not redirected automatically."
msgstr "Klick hier, wenn du nicht automatisch weitergeleitet wirst!"
@@ -127,7 +132,7 @@ msgstr "Klick hier, wenn du nicht automatisch weitergeleitet wirst!"
msgid "internal"
msgstr "intern"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:174
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:175
msgid ""
"Invalid form submission, probably because you used the 'back' or 'reload' "
"button on your browser. Please resubmit."
@@ -135,86 +140,86 @@ msgstr ""
"Ungültige Formulareingabe - wahrscheinlich haben Sie den \"Zurück\"-Knopf "
"Ihres Browsers betätigt. Bitte neuladen!"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:221
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:222
msgid "Configuration reloaded for all tunnels"
msgstr "Einstellungen für alle Tunnel neugeladen"
#. and give them something to look at in any case
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:233
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:234
msgid "Starting tunnel"
msgstr "Starte Tunnel ..."
#. and give them something to look at in any case
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:246
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:247
msgid "Stopping tunnel"
msgstr "Beende Tunnel ..."
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:314
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:315
msgid "Configuration changes saved"
msgstr "Änderungen der Einstellungen gespeichert"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:317
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:318
msgid "Failed to save configuration"
msgstr "Einstellungen nicht gespeichert"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:435
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:436
msgid "New Tunnel"
msgstr "Neuer Tunnel"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:455
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:456
msgid "Standard client"
msgstr "Standardklient"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:456
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:457
msgid "HTTP client"
msgstr "HTTP-Klient"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:457
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:458
msgid "IRC client"
msgstr "IRC-Klient"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:458
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:459
msgid "Standard server"
msgstr "Standardserver"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:459
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:460
msgid "HTTP server"
msgstr "HTTP-Server"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:460
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:461
msgid "SOCKS 4/4a/5 proxy"
msgstr "SOCKS-4/4a/5-Proxy"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:461
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:462
msgid "SOCKS IRC proxy"
msgstr "SOCKS-IRC-Proxy"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:462
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:463
msgid "CONNECT/SSL/HTTPS proxy"
msgstr "CONNECT/SSL/HTTPS-Proxy"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:463
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:464
msgid "IRC server"
msgstr "IRC-Server"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:464
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:465
msgid "Streamr client"
msgstr "Streamr-Klient"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:465
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:466
msgid "Streamr server"
msgstr "Streamr-Server"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:466
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:467
msgid "HTTP bidir"
msgstr "HTTP Bidir"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:554
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:555
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:293
msgid "Host not set"
msgstr "Host nicht gesetzt"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:558
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:559
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:275
msgid "Port not set"
msgstr "Port nicht gesetzt"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: I2P i2ptunnel\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-09-04 22:56+0000\n"
"POT-Creation-Date: 2011-12-12 11:18+0000\n"
"PO-Revision-Date: 2010-06-15 14:09+0100\n"
"Last-Translator: duck <duck@mail.i2p>\n"
"Language-Team: duck <duck@mail.i2p>\n"
@@ -18,15 +18,15 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:485
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:487
msgid "This seems to be a bad destination:"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:485
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:487
msgid "i2paddresshelper cannot help you with a destination like that!"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:554
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:556
#, java-format
msgid ""
"To visit the destination in your host database, click <a href=\"{0}\">here</"
@@ -34,80 +34,84 @@ msgid ""
"\"{1}\">here</a>."
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:930
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:932
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:398
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:142
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:401
msgid "Host"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:931
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:933
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:370
msgid "Destination"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:936
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:938
#, java-format
msgid "Continue to {0} without saving"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:941
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:943
#, java-format
msgid "Save {0} to router address book and continue to eepsite"
msgstr ""
#. only blockfile supports multiple books
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:944
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:946
#, java-format
msgid "Save {0} to master address book and continue to eepsite"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:945
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:947
#, java-format
msgid "Save {0} to private address book and continue to eepsite"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1101
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1102
msgid "HTTP Outproxy"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1107
msgid ""
"Click a link below to look for an address helper by using a \"jump\" service:"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1319
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1325
msgid "Added via address helper"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1343
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1349
#, java-format
msgid "Redirecting to {0}"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1349
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1355
msgid "Router Console"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1350
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1356
msgid "Addressbook"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1350
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1356
msgid "Configuration"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1350
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1356
msgid "Help"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1355
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1361
#, java-format
msgid "Saved {0} to the {1} addressbook, redirecting now."
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1356
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1362
#, java-format
msgid "Failed to save {0} to the {1} addressbook, redirecting now."
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1358
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1364
msgid "Click here if you are not redirected automatically."
msgstr ""
@@ -116,92 +120,92 @@ msgstr ""
msgid "internal"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:174
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:175
msgid ""
"Invalid form submission, probably because you used the 'back' or 'reload' "
"button on your browser. Please resubmit."
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:221
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:222
msgid "Configuration reloaded for all tunnels"
msgstr ""
#. and give them something to look at in any case
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:233
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:234
msgid "Starting tunnel"
msgstr ""
#. and give them something to look at in any case
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:246
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:247
msgid "Stopping tunnel"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:314
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:315
msgid "Configuration changes saved"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:317
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:318
msgid "Failed to save configuration"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:435
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:436
msgid "New Tunnel"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:455
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:456
msgid "Standard client"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:456
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:457
msgid "HTTP client"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:457
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:458
msgid "IRC client"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:458
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:459
msgid "Standard server"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:459
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:460
msgid "HTTP server"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:460
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:461
msgid "SOCKS 4/4a/5 proxy"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:461
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:462
msgid "SOCKS IRC proxy"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:462
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:463
msgid "CONNECT/SSL/HTTPS proxy"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:463
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:464
msgid "IRC server"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:464
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:465
msgid "Streamr client"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:465
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:466
msgid "Streamr server"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:466
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:467
msgid "HTTP bidir"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:554
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:555
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:293
msgid "Host not set"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:558
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:559
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:275
msgid "Port not set"
msgstr ""

View File

@@ -5,6 +5,7 @@
#
# Translators:
# "blabla", 2011.
# <blabla@trash-mail.com>, 2011.
# ducki2p <ducki2p@gmail.com>, 2011.
# foo <foo@bar>, 2009.
# <punkibastardo@gmail.com>, 2011.
@@ -13,8 +14,8 @@ msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-10-07 13:58+0000\n"
"PO-Revision-Date: 2011-10-07 01:44+0000\n"
"POT-Creation-Date: 2011-12-12 11:15+0000\n"
"PO-Revision-Date: 2011-11-28 01:53+0000\n"
"Last-Translator: blabla <blabla@trash-mail.com>\n"
"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/I2P/"
"team/es/)\n"
@@ -24,15 +25,15 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:485
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:487
msgid "This seems to be a bad destination:"
msgstr "Éste parece ser un destino falso:"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:485
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:487
msgid "i2paddresshelper cannot help you with a destination like that!"
msgstr "El ayudante de direcciones no te puede ayudar con un destino así."
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:554
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:556
#, java-format
msgid ""
"To visit the destination in your host database, click <a href=\"{0}\">here</"
@@ -43,85 +44,89 @@ msgstr ""
"\"{0}\">aquí</a>! Para visitar el destino del ayudante de direcciones en "
"conflicto, ¡pincha <a href=\"{1}\">aquí</a>!"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:930
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:932
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:398
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:142
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:401
msgid "Host"
msgstr "Host"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:931
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:933
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:370
msgid "Destination"
msgstr "Destino"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:936
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:938
#, java-format
msgid "Continue to {0} without saving"
msgstr "Acceder a {0} sin guardar"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:941
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:943
#, java-format
msgid "Save {0} to router address book and continue to eepsite"
msgstr ""
"Guardar {0} a la libreta de direcciones del router y acceder al sitio i2p."
#. only blockfile supports multiple books
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:944
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:946
#, java-format
msgid "Save {0} to master address book and continue to eepsite"
msgstr ""
"Guardar {0} a la libreta de direcciones principal y acceder al sitio i2p."
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:945
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:947
#, java-format
msgid "Save {0} to private address book and continue to eepsite"
msgstr ""
"Guardar {0} a la libreta de direcciones privada y acceder al sitio i2p."
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1101
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1102
msgid "HTTP Outproxy"
msgstr "Puerta de salida HTTP"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1107
msgid ""
"Click a link below to look for an address helper by using a \"jump\" service:"
msgstr ""
"Pincha en un enlace de debajo para buscar un ayudante de direcciones "
"mediante el uso de un servicio de \"salto\":"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1319
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1325
msgid "Added via address helper"
msgstr "Agregado por el ayudante de direcciones."
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1343
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1349
#, java-format
msgid "Redirecting to {0}"
msgstr "Redireccionando a {0}"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1349
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1355
msgid "Router Console"
msgstr "Consola del Router"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1350
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1356
msgid "Addressbook"
msgstr "Libreta de direcciones"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1350
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1356
msgid "Configuration"
msgstr "Ajustes"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1350
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1356
msgid "Help"
msgstr "Ayuda"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1355
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1361
#, java-format
msgid "Saved {0} to the {1} addressbook, redirecting now."
msgstr "{0} ha sido guardado en la libreta {1}, accediendo ahora."
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1356
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1362
#, java-format
msgid "Failed to save {0} to the {1} addressbook, redirecting now."
msgstr "No se ha podido guardar {0} en la libreta {1}, accediendo ahora."
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1358
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1364
msgid "Click here if you are not redirected automatically."
msgstr "¡Haz click aquí si no estás siendo enviado automáticamente!"
@@ -130,7 +135,7 @@ msgstr "¡Haz click aquí si no estás siendo enviado automáticamente!"
msgid "internal"
msgstr "interno"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:174
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:175
msgid ""
"Invalid form submission, probably because you used the 'back' or 'reload' "
"button on your browser. Please resubmit."
@@ -138,86 +143,86 @@ msgstr ""
"El formulario presentado es inválido, probablemente porque has utilizado el "
"botón 'atrás' o 'recargar' de tu navegador. Por favor, ¡vuelve a enviarlo!"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:221
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:222
msgid "Configuration reloaded for all tunnels"
msgstr "Configuración recargada para todos los túneles"
#. and give them something to look at in any case
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:233
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:234
msgid "Starting tunnel"
msgstr "Inicializando el túnel"
#. and give them something to look at in any case
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:246
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:247
msgid "Stopping tunnel"
msgstr "Deteniendo el túnel"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:314
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:315
msgid "Configuration changes saved"
msgstr "Cambios en la configuración guardados"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:317
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:318
msgid "Failed to save configuration"
msgstr "No se pudo guardar la configuración"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:435
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:436
msgid "New Tunnel"
msgstr "Nuevo túnel"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:455
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:456
msgid "Standard client"
msgstr "Cliente estándar"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:456
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:457
msgid "HTTP client"
msgstr "Cliente HTTP"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:457
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:458
msgid "IRC client"
msgstr "Cliente IRC"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:458
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:459
msgid "Standard server"
msgstr "Servidor estándar"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:459
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:460
msgid "HTTP server"
msgstr "Servidor HTTP"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:460
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:461
msgid "SOCKS 4/4a/5 proxy"
msgstr "Proxy SOCKS 4/4a/5"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:461
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:462
msgid "SOCKS IRC proxy"
msgstr "Proxy IRC SOCKS"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:462
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:463
msgid "CONNECT/SSL/HTTPS proxy"
msgstr "Proxy CONNECT/SSL/HTTPS"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:463
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:464
msgid "IRC server"
msgstr "Servidor de IRC"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:464
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:465
msgid "Streamr client"
msgstr "Cliente Streamr"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:465
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:466
msgid "Streamr server"
msgstr "Servidor Streamr"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:466
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:467
msgid "HTTP bidir"
msgstr "HTTP bidir"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:554
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:555
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:293
msgid "Host not set"
msgstr "Host no establecido"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:558
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:559
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:275
msgid "Port not set"
msgstr "Puerto no establecido"
@@ -581,7 +586,7 @@ msgstr "destino local"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:474
msgid "(if known)"
msgstr "(Si se conoce)"
msgstr "(si se conoce)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:480
msgid "Local Authorization"
@@ -652,7 +657,7 @@ msgstr "Nombre de la página"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:203
msgid "(leave blank for outproxies)"
msgstr "(Dejar en blanco para outproxies)"
msgstr "(dejar en blanco para puertas de salida)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:208
msgid "Private key file"
@@ -808,7 +813,7 @@ msgstr "Apunta a"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:156
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:160
msgid "Preview"
msgstr "Preview"
msgstr "Vista previa"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:116
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:180
@@ -882,7 +887,7 @@ msgstr "En espera"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:366
msgid "Outproxy"
msgstr "Outproxy"
msgstr "Puerta de salida"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:384
msgid "none"
@@ -890,4 +895,4 @@ msgstr "ninguno"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:397
msgid "New client tunnel"
msgstr "Nuevo túnel de cliente"
msgstr "Nuevo túnel cliente"

View File

@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: I2P i2ptunnel\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-10-07 16:06+0000\n"
"PO-Revision-Date: 2011-10-07 23:21+0500\n"
"POT-Creation-Date: 2011-10-19 16:40+0000\n"
"PO-Revision-Date: 2011-10-20 00:56+0500\n"
"Last-Translator: Hidden Z <hiddenz@mail.i2p>\n"
"Language-Team: foo <foo@bar>\n"
"Language: \n"
@@ -18,92 +18,92 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-Language: Russian\n"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:485
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:487
msgid "This seems to be a bad destination:"
msgstr "Это плохой адрес:"
msgstr "Кажется это плохой адрес назначения:"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:485
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:487
msgid "i2paddresshelper cannot help you with a destination like that!"
msgstr "С таким адресом назначения i2paddresshelper вам не поможет!"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:554
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:556
#, java-format
msgid "To visit the destination in your host database, click <a href=\"{0}\">here</a>. To visit the conflicting addresshelper destination, click <a href=\"{1}\">here</a>."
msgstr "Для перехода по ссылке из локальной адресной книги, нажмите <a href=\"{0}\">здесь</a>. Для перехода по новой addresshelper-ссылке, нажмите <a href=\"{1}\">здесь</a>."
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:930
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:932
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:398
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:142
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:401
msgid "Host"
msgstr "Адрес"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:931
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:933
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:370
msgid "Destination"
msgstr "Адрес назначения"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:936
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:938
#, java-format
msgid "Continue to {0} without saving"
msgstr "Продолжить переход к {0} без сохранения"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:941
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:943
#, java-format
msgid "Save {0} to router address book and continue to eepsite"
msgstr "Сохранить {0} в адресную книгу роутера (router address book) и продолжить переход к eep-сайту"
#. only blockfile supports multiple books
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:944
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:946
#, java-format
msgid "Save {0} to master address book and continue to eepsite"
msgstr "Сохранить {0} в основную (master) адресную книгу и продолжить переход к eep-сайту"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:945
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:947
#, java-format
msgid "Save {0} to private address book and continue to eepsite"
msgstr "Сохранить {0} в приватную адресную книгу и продолжить переход к eep-сайту"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1101
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1103
msgid "Click a link below to look for an address helper by using a \"jump\" service:"
msgstr "Jump-сервисы, которые, возможно, знают нужную Вам addresshelper-ссылку:"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1319
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1321
msgid "Added via address helper"
msgstr "Добавлен через address helper"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1343
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1345
#, java-format
msgid "Redirecting to {0}"
msgstr "Перенаправляем к {0}"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1349
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1351
msgid "Router Console"
msgstr "Консоль маршрутизатора I2P"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1350
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1352
msgid "Addressbook"
msgstr "Адресная книга"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1350
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1352
msgid "Configuration"
msgstr "Настройки"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1350
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1352
msgid "Help"
msgstr "Помощь"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1355
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1357
#, java-format
msgid "Saved {0} to the {1} addressbook, redirecting now."
msgstr "{0} сохранён в {1}, перенаправляем."
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1356
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1358
#, java-format
msgid "Failed to save {0} to the {1} addressbook, redirecting now."
msgstr "Не удалось сохранить {0} в {1} адресную книгу, перенаправляем."
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1358
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1360
msgid "Click here if you are not redirected automatically."
msgstr "Нажмите сюда если автоматическое перенаправление не сработало"

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-09-23 19:52+0000\n"
"POT-Creation-Date: 2011-12-15 20:14+0000\n"
"PO-Revision-Date: 2011-08-26 09:28+0000\n"
"Last-Translator: digitalmannen <digitalmannen@gmail.com>\n"
"Language-Team: Swedish (Sweden) (http://www.transifex.net/projects/p/I2P/"
@@ -18,15 +18,15 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:485
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:487
msgid "This seems to be a bad destination:"
msgstr "Detta verkar vara ett felaktigt mål"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:485
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:487
msgid "i2paddresshelper cannot help you with a destination like that!"
msgstr "i2padresshjälp kan inte hjälpa dig med ett sådant mål!"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:554
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:556
#, java-format
msgid ""
"To visit the destination in your host database, click <a href=\"{0}\">here</"
@@ -37,82 +37,87 @@ msgstr ""
"För att besöka de motstridiga hjälpaddresserna,<a href=\"{1}\"> klicka <a "
"här </ a>."
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:930
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:932
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:398
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:142
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:401
msgid "Host"
msgstr "Värd"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:931
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:933
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:370
msgid "Destination"
msgstr "Mål"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:936
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:938
#, java-format
msgid "Continue to {0} without saving"
msgstr "Fortsätt till {0} utan att spara"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:941
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:943
#, java-format
msgid "Save {0} to router address book and continue to eepsite"
msgstr "Spara {0} till routeradressboken och fortsätt till eepsite "
#. only blockfile supports multiple books
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:944
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:946
#, java-format
msgid "Save {0} to master address book and continue to eepsite"
msgstr "Spara {0} till huvudadressboken och fortsätt till eepsite "
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:945
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:947
#, java-format
msgid "Save {0} to private address book and continue to eepsite"
msgstr "Spara {0} till privatadressbok och fortsätt till eepsite "
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1101
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1102
#, fuzzy
msgid "HTTP Outproxy"
msgstr "Utproxy"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1107
msgid ""
"Click a link below to look for an address helper by using a \"jump\" service:"
msgstr ""
"Klicka på en länk nedan för att söka efter en hjälpaddress genom att använda "
"en \"hopp\" tjänst"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1319
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1325
msgid "Added via address helper"
msgstr "Tillagd via adresshjälpen "
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1343
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1349
#, java-format
msgid "Redirecting to {0}"
msgstr "Om dirigerar till {0}"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1349
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1355
msgid "Router Console"
msgstr "Router konsol "
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1350
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1356
msgid "Addressbook"
msgstr "Adressbok"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1350
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1356
msgid "Configuration"
msgstr "Konfiguration"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1350
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1356
msgid "Help"
msgstr "Hjälp"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1355
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1361
#, java-format
msgid "Saved {0} to the {1} addressbook, redirecting now."
msgstr "Spara {0} till {1}adressboken, omdirigerar nu "
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1356
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1362
#, java-format
msgid "Failed to save {0} to the {1} addressbook, redirecting now."
msgstr "Misslyckades med att spara {0} till {1}adressboken, omdirigerar nu "
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1358
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1364
msgid "Click here if you are not redirected automatically."
msgstr "Klicka här om du inte omdirigeras automatiskt "
@@ -121,7 +126,7 @@ msgstr "Klicka här om du inte omdirigeras automatiskt "
msgid "internal"
msgstr "Intern "
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:174
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:175
msgid ""
"Invalid form submission, probably because you used the 'back' or 'reload' "
"button on your browser. Please resubmit."
@@ -129,86 +134,86 @@ msgstr ""
"Ogiltigt formulärbegäran, beror troligtvis på attt du använde 'tillbaka' "
"eller 'uppdatera' knappen. Försök att skicka igen"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:221
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:222
msgid "Configuration reloaded for all tunnels"
msgstr "Konfigurationen uppdateras för alla tunnlar"
#. and give them something to look at in any case
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:233
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:234
msgid "Starting tunnel"
msgstr "Startar tunnel"
#. and give them something to look at in any case
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:246
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:247
msgid "Stopping tunnel"
msgstr "Stannar tunnel"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:314
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:315
msgid "Configuration changes saved"
msgstr "Konfigurationsändringar sparas"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:317
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:318
msgid "Failed to save configuration"
msgstr "Det gick inte att spara konfigurationen"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:435
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:436
msgid "New Tunnel"
msgstr "Ny tunnel"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:455
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:456
msgid "Standard client"
msgstr "Standard klient"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:456
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:457
msgid "HTTP client"
msgstr "HTTP-klient"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:457
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:458
msgid "IRC client"
msgstr "IRC-klient"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:458
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:459
msgid "Standard server"
msgstr "Standard server"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:459
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:460
msgid "HTTP server"
msgstr "HTTP server"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:460
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:461
msgid "SOCKS 4/4a/5 proxy"
msgstr "SOCKS 4/4a/5 proxy"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:461
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:462
msgid "SOCKS IRC proxy"
msgstr "SOCKS IRC proxy"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:462
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:463
msgid "CONNECT/SSL/HTTPS proxy"
msgstr "CONNECT/SSL/HTTPS proxy"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:463
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:464
msgid "IRC server"
msgstr "IRC-server"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:464
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:465
msgid "Streamr client"
msgstr "Klient för Streamr "
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:465
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:466
msgid "Streamr server"
msgstr "Server för Streamr"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:466
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:467
msgid "HTTP bidir"
msgstr "HTTP bidir"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:554
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:555
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:293
msgid "Host not set"
msgstr "Ingen värd angiven"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:558
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:559
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:275
msgid "Port not set"
msgstr "Ingen port angiven"

View File

@@ -0,0 +1,902 @@
# I2P
# Copyright (C) 2009 The I2P Project
# This file is distributed under the same license as the i2ptunnel package.
# To contribute translations, see http://www.i2p2.de/newdevelopers
#
# Translators:
# Denis <gribua@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: https://trac.i2p2.de/\n"
"POT-Creation-Date: 2011-12-12 11:18+0000\n"
"PO-Revision-Date: 2011-12-16 22:15+0000\n"
"Last-Translator: Denis <gribua@gmail.com>\n"
"Language-Team: Ukrainian (Ukraine) (http://www.transifex.net/projects/p/I2P/team/uk_UA/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: uk_UA\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:487
msgid "This seems to be a bad destination:"
msgstr "Скоріше всього це поганий адрес призначення:"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:487
msgid "i2paddresshelper cannot help you with a destination like that!"
msgstr "i2paddresshelper не може допомогти Вам з місцем призначення як це!"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:556
#, java-format
msgid ""
"To visit the destination in your host database, click <a "
"href=\"{0}\">here</a>. To visit the conflicting addresshelper destination, "
"click <a href=\"{1}\">here</a>."
msgstr ""
"Для того щоб перейти по локальному посиланню з локальної адресної книги, "
"натисніть ось<a href=\"{0}\">тут</a>. Для переходу по новому addresshelper-"
"посиланню, натисніть будь-ласка <a href=\"{1}\">тут</a>."
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:932
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:398
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:142
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:401
msgid "Host"
msgstr "Адрес"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:933
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:370
msgid "Destination"
msgstr "Адреса призначення"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:938
#, java-format
msgid "Continue to {0} without saving"
msgstr "Продовжити до {0} без збереження"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:943
#, java-format
msgid "Save {0} to router address book and continue to eepsite"
msgstr ""
"Зберегти {0} в адресну книгу роутера и продовжити перехід до eep-сайту"
#. only blockfile supports multiple books
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:946
#, java-format
msgid "Save {0} to master address book and continue to eepsite"
msgstr ""
"Зберегти {0} в основну адресну книгу і продовжити перехід до еер-сайту"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:947
#, java-format
msgid "Save {0} to private address book and continue to eepsite"
msgstr ""
"Зберегти {0} в приватну адресну книгу і продовжити перехід до еер-сайту."
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1102
msgid "HTTP Outproxy"
msgstr "Вихідний HTTP проксі"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1107
msgid ""
"Click a link below to look for an address helper by using a \"jump\" "
"service:"
msgstr ""
"\"Jump\" сервіси, які, можливо, знають необхідне Вам addresshelper-"
"посилання."
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1325
msgid "Added via address helper"
msgstr "Додано через address helper"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1349
#, java-format
msgid "Redirecting to {0}"
msgstr "Перенаправляємо до {0}"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1355
msgid "Router Console"
msgstr "Консоль роутера"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1356
msgid "Addressbook"
msgstr "Адресна книга"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1356
msgid "Configuration"
msgstr "Настройки"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1356
msgid "Help"
msgstr "Допомога"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1361
#, java-format
msgid "Saved {0} to the {1} addressbook, redirecting now."
msgstr "{0} збережено в {1} адресної книги, перенапрявляємо."
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1362
#, java-format
msgid "Failed to save {0} to the {1} addressbook, redirecting now."
msgstr "Не вдалось зберегти {0} в {1} адресної книги, перенаправляємо."
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1364
msgid "Click here if you are not redirected automatically."
msgstr "Клацніть тут якщо вас не перенаправило автоматично."
#: ../java/src/net/i2p/i2ptunnel/web/EditBean.java:332
#: ../java/src/net/i2p/i2ptunnel/web/EditBean.java:342
msgid "internal"
msgstr "внутрішній"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:175
msgid ""
"Invalid form submission, probably because you used the 'back' or 'reload' "
"button on your browser. Please resubmit."
msgstr ""
"Неправильно передана форма, можливо ви використовуєте дію браузера \"назад\""
" або \"оновити\". Будь-ласка повторіть спробу."
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:222
msgid "Configuration reloaded for all tunnels"
msgstr "Конфігурація для всіх тунелів перечитана"
#. and give them something to look at in any case
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:234
msgid "Starting tunnel"
msgstr "Випуск тунелю"
#. and give them something to look at in any case
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:247
msgid "Stopping tunnel"
msgstr "Зупинка тунелю"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:315
msgid "Configuration changes saved"
msgstr "Налаштування збережені"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:318
msgid "Failed to save configuration"
msgstr "Помилка під час зберігання налаштувань"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:436
msgid "New Tunnel"
msgstr "Новий тунель"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:456
msgid "Standard client"
msgstr "Звичайний клієнт"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:457
msgid "HTTP client"
msgstr "HTTP клієнт"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:458
msgid "IRC client"
msgstr "IRC клієнт"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:459
msgid "Standard server"
msgstr "Звичайний сервер"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:460
msgid "HTTP server"
msgstr "HTTP сервер"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:461
msgid "SOCKS 4/4a/5 proxy"
msgstr "SOCKS 4/4a/5 проксі"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:462
msgid "SOCKS IRC proxy"
msgstr "SOCKS IRC проксі"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:463
msgid "CONNECT/SSL/HTTPS proxy"
msgstr "CONNECT/SSL/HTTPS проксі"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:464
msgid "IRC server"
msgstr "IRC сервер"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:465
msgid "Streamr client"
msgstr "Streamr клієнт"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:466
msgid "Streamr server"
msgstr "Streamr сервер"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:467
msgid "HTTP bidir"
msgstr ""
"HTTP bidir (експерементальний двухнаправлений режим, інструкцію запитуйте у "
"sponge)"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:555
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:293
msgid "Host not set"
msgstr "Хост не заданий"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:559
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:275
msgid "Port not set"
msgstr "Порт не заданий"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:73
msgid "I2P Tunnel Manager - Edit Client Tunnel"
msgstr "Менеджер Тунелів I2P - Редагування Клієнтського Тунелю"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:93
msgid "Edit proxy settings"
msgstr "Редагування настройок проксі"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:101
msgid "New proxy settings"
msgstr "Нові налаштування проксі"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:112
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:112
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:110
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:124
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:245
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:260
msgid "Name"
msgstr "Назва"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:116
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:116
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:249
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:282
msgid "Type"
msgstr "Тип"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:120
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:120
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:229
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:389
msgid "Description"
msgstr "Опис"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:126
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:136
msgid "Target"
msgstr "Ціль"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:130
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:132
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:162
msgid "Access Point"
msgstr "Точка доступу"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:137
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:150
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:192
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:153
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:167
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:213
msgid "required"
msgstr "необхідно"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:159
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:178
msgid "Reachable by"
msgstr "Доступно цим"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:180
msgid "Outproxies"
msgstr "Список вихідних проксі (Outproxies)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:187
msgid "Tunnel Destination"
msgstr "Адреса Призначення Тунелю"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:199
msgid "name or destination"
msgstr "ім'я або призначення"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:202
msgid "b32 not recommended"
msgstr "b32 не рекомендується"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:208
msgid "Shared Client"
msgstr "Колективний Клієнт"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:212
msgid ""
"(Share tunnels with other clients and irc/httpclients? Change requires "
"restart of client proxy)"
msgstr ""
"(Використовувати тунелі спільно з іншими клієнтами і irc/httpclients? Зміна"
" налаштування потребує перезапуску тунелю)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:216
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:124
msgid "Auto Start"
msgstr "Автозапуск"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:220
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:228
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:128
msgid "(Check the Box for 'YES')"
msgstr "(Виберіть чекбокс 'ТАК')"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:224
msgid "Enable DCC"
msgstr "Включити DCC"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:232
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:243
msgid "Advanced networking options"
msgstr "Розширені мережеві опції"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:234
msgid ""
"(NOTE: when this client proxy is configured to share tunnels, then these "
"options are for all the shared proxy clients!)"
msgstr ""
"(Зверніть увагу: коли цей клієнтський проксі настроєний ділитись тунелями, "
"то ці опції будуть дійсні для всіх проксі клієнтів з якими ви ділитесь!)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:236
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:245
msgid "Tunnel Options"
msgstr "Опції Тунелю"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:238
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:247
msgid "Length"
msgstr "Довжина"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:245
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:254
msgid "0 hop tunnel (low anonymity, low latency)"
msgstr "0 хоп тунель (низька анонімність, низький пінг)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:249
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:258
msgid "1 hop tunnel (medium anonymity, medium latency)"
msgstr "1 хоп тунель (середня анонімність, середній пінг)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:253
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:262
msgid "2 hop tunnel (high anonymity, high latency)"
msgstr "2 хоп тунель (висока анонімність, великий пінг)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:257
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:266
msgid "3 hop tunnel (very high anonymity, poor performance)"
msgstr ""
"3 хоп тунель (дуже висока анонімність, погана продуктивність (комп'ютера))"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:266
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:275
msgid "hop tunnel (very poor performance)"
msgstr "хоп тунель (дуже погана продуктивність (комп'ютера))"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:271
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:280
msgid "Variance"
msgstr "Розбіжність"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:278
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:287
msgid "0 hop variance (no randomisation, consistant performance)"
msgstr "0 хоп розкид (без рандомізації, фіксована продуктивність)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:282
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:291
msgid ""
"+ 0-1 hop variance (medium additive randomisation, subtractive performance)"
msgstr ""
"+0-1 хоп розкид (помірна збільшена рандомізація, понижена продуктивність)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:286
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:295
msgid ""
"+ 0-2 hop variance (high additive randomisation, subtractive performance)"
msgstr ""
"+0-2 хоп розкид (дуже збільшена рандомізація, понижена продуктивність)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:290
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:299
msgid "+/- 0-1 hop variance (standard randomisation, standard performance)"
msgstr ""
"+/- 0-1 хоп розкид (стандартна рандомізація, стандартна продуктивнсть)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:294
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:303
msgid "+/- 0-2 hop variance (not recommended)"
msgstr "+/- 0-2 хоп розкид (не рекомендовано)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:306
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:315
msgid "hop variance"
msgstr "хоп розбіжність"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:311
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:320
msgid "Count"
msgstr "Кількість"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:318
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:327
msgid "1 inbound, 1 outbound tunnel (low bandwidth usage, less reliability)"
msgstr ""
"1 вхідний, 1 вихідний тунель (низька пропускна спроможність, низька "
"надійність)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:322
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:331
msgid ""
"2 inbound, 2 outbound tunnels (standard bandwidth usage, standard "
"reliability)"
msgstr ""
"2 вхідні, 2 вихідні тунелі (стандартна пропускна спроможність, стандартна "
"надійність)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:326
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:335
msgid ""
"3 inbound, 3 outbound tunnels (higher bandwidth usage, higher reliability)"
msgstr ""
"3 вхідні, 3 вихідні тунелі (висока пропускна спроможність, висока "
"надійність)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:335
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:344
msgid "tunnels"
msgstr "тунелів"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:340
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:349
msgid "Backup Count"
msgstr "Резервна кількість"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:347
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:356
msgid "0 backup tunnels (0 redundancy, no added resource usage)"
msgstr ""
"0 резервних тунелів (0 надлишок, відсутність додаткового навантаження на "
"систему) "
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:351
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:360
msgid "1 backup tunnel each direction (low redundancy, low resource usage)"
msgstr ""
"1 резервний тунель в кожному напрямку (низька надлишковість, низьке "
"використання ресурсів системи)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:355
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:364
msgid ""
"2 backup tunnels each direction (medium redundancy, medium resource usage)"
msgstr ""
"2 резервні тунелі в кожному напрямку (середня надмірність, середнє "
"навантаження на систему)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:359
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:368
msgid "3 backup tunnels each direction (high redundancy, high resource usage)"
msgstr ""
"3 резервні тунелі в кожному напрямку (висока надмірність, високе "
"навантаження на систему)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:368
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:377
msgid "backup tunnels"
msgstr "резервних тунелів"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:375
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:384
msgid "Profile"
msgstr "Режим"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:382
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:391
msgid "interactive connection"
msgstr "оптимізувати для малих затримок (irc)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:386
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:395
msgid "bulk connection (downloads/websites/BT)"
msgstr ""
"оптимізувати для великого об'єму (завантаження/веб-серфінг/Бітторрент)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:388
msgid "Delay Connect"
msgstr "Затримка Зєднання"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:392
msgid "for request/response connections"
msgstr ""
"оптимізація для з'єднань, які починаються з запиту клієнта/відповіді "
"сервера. "
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:396
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:399
msgid "Router I2CP Address"
msgstr "I2CP Адрес Роутера"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:406
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:148
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:409
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:247
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:269
msgid "Port"
msgstr "Порт"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:416
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:479
msgid "Reduce tunnel quantity when idle"
msgstr "Зменьшувати кількість тунелів при простої"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:418
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:432
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:440
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:452
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:462
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:482
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:496
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:419
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:481
msgid "Enable"
msgstr "Включити"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:422
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:485
msgid "Reduced tunnel count"
msgstr "Зменшення числа тунелів"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:426
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:446
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:489
msgid "Idle minutes"
msgstr "Хвилин простою"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:430
msgid "Close tunnels when idle"
msgstr "Закривати тунелі при простою"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:436
msgid "New Keys on Reopen"
msgstr "Генерувати новий ключ при перезапуску"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:444
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:435
msgid "Disable"
msgstr "Вимкнути"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:450
msgid "Delay tunnel open until required"
msgstr "Відкласти запуск до першого запиту"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:460
msgid "Persistent private key"
msgstr "Постійний секретний ключ"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:466
msgid "File"
msgstr "Файл"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:470
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:220
msgid "Local destination"
msgstr "Локальний адрес призначення"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:474
msgid "(if known)"
msgstr "(Якщо відомий)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:480
msgid "Local Authorization"
msgstr "Локальна Авторизація"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:486
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:500
msgid "Username"
msgstr "Ім'я користувача"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:490
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:504
msgid "Password"
msgstr "Пароль"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:494
msgid "Outproxy Authorization"
msgstr "Авторизація outproxy"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:512
msgid "Jump URL List"
msgstr "URL спиок \"Jump\"-сервісів"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:518
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:525
msgid "Custom options"
msgstr "Вибіркові параметри"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:522
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:529
msgid ""
"NOTE: If tunnel is currently running, most changes will not take effect "
"until tunnel is stopped and restarted."
msgstr ""
"Примітка: Якщо тунель зараз активний, то більшість змін не почнуть діяти до "
"того моменту поки тунель не зупинять і перезапустять."
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:524
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:531
msgid "Cancel"
msgstr "Відмінити"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:528
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:535
msgid "Delete"
msgstr "Удалити"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:530
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:537
msgid "Save"
msgstr "Зберегти"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:73
msgid "I2P Tunnel Manager - Edit Server Tunnel"
msgstr "Менеджер I2P Тунелів — Редагування Серверного Тунелю."
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:93
msgid "Edit server settings"
msgstr "Редагувати настройок сервера"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:101
msgid "New server settings"
msgstr "Нові серверні настройки"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:199
msgid "Website name"
msgstr "Назва веб-сайту"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:203
msgid "(leave blank for outproxies)"
msgstr "(залишити пустим для outproxy)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:208
msgid "Private key file"
msgstr "Файл секретного ключа"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:230
msgid "Add to local addressbook"
msgstr "Добавити в локальну адресну книгу"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:237
msgid "Hostname Signature"
msgstr "Підпис Хоста"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:417
msgid "Encrypt Leaseset"
msgstr "Шифрувати Leaseset"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:423
msgid "Encryption Key"
msgstr "Ключ Шифрування"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:427
msgid "Generate New Key"
msgstr "Згенерувати новий ключ"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:429
msgid "Generate"
msgstr "Згенерувати"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:431
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:523
msgid "(Tunnel must be stopped first)"
msgstr "(Спочатку необхідно зупинити тунель)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:433
msgid "Restricted Access List"
msgstr "Обмежений Доступ"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:439
msgid "Whitelist"
msgstr "Білий список"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:443
msgid "Blacklist"
msgstr "Чоний список"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:447
msgid "Access List"
msgstr "Список доступа"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:451
msgid "Inbound connection limits (0=unlimited)"
msgstr "Обмеження вхідних зєднань (0=необмежено)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:453
msgid "Per client"
msgstr "На клієнта"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:455
msgid "Per minute"
msgstr "В хвилину"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:459
msgid "Per hour"
msgstr "В годину"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:463
msgid "Per day"
msgstr "На добу"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:467
msgid "Total"
msgstr "Всього"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:475
msgid "Max concurrent connections (0=unlimited)"
msgstr "Максимум одночасних зєднань (0=необмежено)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:493
msgid "New Certificate type"
msgstr "Новий тип сертифіката"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:495
msgid "None"
msgstr "Жоден"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:499
msgid "Hashcash (effort)"
msgstr "Hashcash (зусиль)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:505
msgid "Hashcash Calc Time"
msgstr "Час генерації hashcash"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:507
msgid "Estimate"
msgstr "Прогноз"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:509
msgid "Hidden"
msgstr "Прихований"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:513
msgid "Signed (signed by)"
msgstr "Підписаний (вказано ким підписано)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:519
msgid "Modify Certificate"
msgstr "Змінити Сертифікат"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:521
msgid "Modify"
msgstr "Змінтити"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:74
msgid "I2P Tunnel Manager - List"
msgstr "Менеджер Тунелів I2P — Список"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:86
msgid "Status Messages"
msgstr "Повідомлення про стан"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:90
msgid "Refresh"
msgstr "Оновити"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:94
msgid "Stop All"
msgstr "Зупинити все"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:98
msgid "Start All"
msgstr "Запустити все"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:102
msgid "Restart All"
msgstr "Перезапустити все"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:106
msgid "Reload Config"
msgstr "Перезапустити настройки"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:108
msgid "I2P Server Tunnels"
msgstr "Серверні I2P тунелі"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:112
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:133
msgid "Points at"
msgstr "Вказує на"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:114
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:156
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:160
msgid "Preview"
msgstr "Попередній перегляд"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:116
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:180
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:253
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:300
msgid "Status"
msgstr "Статус"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:166
msgid "Base32 Address"
msgstr "Base32-адрес"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:174
msgid "No Preview"
msgstr "Попередній перегляд недоступний"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:187
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:307
msgid "Starting..."
msgstr "Запускається..."
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:194
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:208
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:314
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:328
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:342
msgid "Stop"
msgstr "Зупинити"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:201
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:335
msgid "Running"
msgstr "Працює"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:215
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:349
msgid "Stopped"
msgstr "Зупинений"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:222
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:356
msgid "Start"
msgstr "Запустити"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:237
msgid "New server tunnel"
msgstr "Новий серверний тунель"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:239
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:399
msgid "Standard"
msgstr "Стандартний"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:241
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:401
msgid "Create"
msgstr "Створити"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:243
msgid "I2P Client Tunnels"
msgstr "Клієнтскі I2P тунелі"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:251
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:286
msgid "Interface"
msgstr "Мережевий інтерфейс"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:321
msgid "Standby"
msgstr "Режим очікування"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:366
msgid "Outproxy"
msgstr "Outproxy (зовнішній проксі)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:384
msgid "none"
msgstr "ні"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:397
msgid "New client tunnel"
msgstr "Новий клієнтський тунель"

View File

@@ -0,0 +1,18 @@
package net.i2p.client.streaming;
import net.i2p.client.streaming.I2PSocket;
import net.i2p.client.streaming.I2PSocketManager;
import net.i2p.I2PException;
import java.net.ConnectException;
import java.nio.channels.SelectableChannel;
/**
* @since 0.8.11
*/
public abstract class AcceptingChannel extends SelectableChannel {
abstract I2PSocket accept() throws I2PException, ConnectException;
I2PSocketManager _socketManager;
AcceptingChannel(I2PSocketManager manager) {
this._socketManager = manager;
}
}

View File

@@ -31,6 +31,11 @@ public interface I2PServerSocket {
*/
public I2PSocket accept() throws I2PException, ConnectException, SocketTimeoutException;
/**
* @since 0.8.11
*/
public AcceptingChannel getChannel();
/**
* Set Sock Option accept timeout
* @param x timeout in ms

View File

@@ -76,6 +76,19 @@ public class I2PSocketEepGet extends EepGet {
return rv;
}
/**
* Overridden to disable inline gunzipping
* @since 0.8.10
*/
@Override
protected void readHeaders() throws IOException {
try {
super.readHeaders();
} finally {
_isGzippedResponse = false;
}
}
/**
* Look up the address, get a socket from the I2PSocketManager supplied in the constructor,
* and send the request.

View File

@@ -44,7 +44,7 @@ fi
# list specific files in core/ and router/ here, so we don't scan the whole tree
ROUTERFILES="\
../../../core/java/src/net/i2p/data/DataHelper.java \
../../../router/java/src/net/i2p/router/Router.java \
../../../router/java/src/net/i2p/router/tasks/CoalesceStatsEvent.java \
../../../router/java/src/net/i2p/router/RouterThrottleImpl.java \
../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java \
../../../router/java/src/net/i2p/router/transport/TransportManager.java \

View File

@@ -48,6 +48,17 @@ public class CSSHelper extends HelperBase {
return Messages.getLanguage(_context);
}
/**
* Show / hide news on home page
* @param val if non-null, "1" to show, else hide
* @since 0.8.12
*/
public void setNews(String val) {
// Protected with nonce in css.jsi
if (val != null)
NewsFetcher.getInstance(_context).showNews(val.equals("1"));
}
/** change refresh and save it */
public void setRefresh(String r) {
_context.router().setConfigSetting(PROP_REFRESH, r);

View File

@@ -1,11 +1,13 @@
package net.i2p.router.web;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import net.i2p.data.DataHelper;
/**
* Handler to deal with form submissions from the advanced config form and act
@@ -39,28 +41,26 @@ public class ConfigAdvancedHandler extends FormHandler {
*
*/
private void saveChanges() {
HashSet unsetKeys = new HashSet(_context.router().getConfigMap().keySet());
Set<String> unsetKeys = new HashSet(_context.router().getConfigSettings());
if (_config != null) {
BufferedReader reader = new BufferedReader(new InputStreamReader(new ByteArrayInputStream(_config.getBytes())));
String line = null;
Properties props = new Properties();
try {
while ( (line = reader.readLine()) != null) {
int eq = line.indexOf('=');
if (eq == -1) continue;
if (eq >= line.length() - 1) continue;
String key = line.substring(0, eq).trim();
String val = line.substring(eq + 1).trim();
_context.router().setConfigSetting(key, val);
unsetKeys.remove(key);
}
DataHelper.loadProps(props, new ByteArrayInputStream(_config.getBytes()));
} catch (IOException ioe) {
_log.error("Config error", ioe);
addFormError(ioe.toString());
addFormError(_("Error updating the configuration - please see the error logs"));
return;
}
Iterator cleaner = unsetKeys.iterator();
while (cleaner.hasNext()) {
String unsetKey = (String)cleaner.next();
for (Map.Entry e : props.entrySet()) {
String key = (String) e.getKey();
String val = (String) e.getValue();
_context.router().setConfigSetting(key, val);
unsetKeys.remove(key);
}
for (String unsetKey : unsetKeys) {
_context.router().removeConfigSetting(unsetKey);
}
@@ -68,7 +68,7 @@ public class ConfigAdvancedHandler extends FormHandler {
if (saved)
addFormNotice(_("Configuration saved successfully"));
else
addFormNotice(_("Error saving the configuration (applied but not saved) - please see the error logs"));
addFormError(_("Error saving the configuration (applied but not saved) - please see the error logs"));
//if (_forceRestart) {
// addFormNotice("Performing a soft restart");

View File

@@ -1,8 +1,7 @@
package net.i2p.router.web;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
import java.util.Map;
import java.util.TreeMap;
public class ConfigAdvancedHelper extends HelperBase {
@@ -10,11 +9,11 @@ public class ConfigAdvancedHelper extends HelperBase {
public String getSettings() {
StringBuilder buf = new StringBuilder(4*1024);
Set names = _context.router().getConfigSettings();
TreeSet sortedNames = new TreeSet(names);
for (Iterator iter = sortedNames.iterator(); iter.hasNext(); ) {
String name = (String)iter.next();
String val = _context.router().getConfigSetting(name);
TreeMap<String, String> sorted = new TreeMap();
sorted.putAll(_context.router().getConfigMap());
for (Map.Entry<String, String> e : sorted.entrySet()) {
String name = e.getKey();
String val = e.getValue();
buf.append(name).append('=').append(val).append('\n');
}
return buf.toString();

View File

@@ -5,6 +5,7 @@ import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
@@ -131,8 +132,8 @@ public class ConfigClientsHandler extends FormHandler {
// label (IE)
String xStart = _("Start");
if (_action.toLowerCase().startsWith(xStart + "<span class=hide> ") &&
_action.toLowerCase().endsWith("</span>")) {
if (_action.toLowerCase(Locale.US).startsWith(xStart + "<span class=hide> ") &&
_action.toLowerCase(Locale.US).endsWith("</span>")) {
// IE sucks
String app = _action.substring(xStart.length() + 18, _action.length() - 7);
int appnum = -1;

View File

@@ -256,19 +256,21 @@ public class ConfigClientsHelper extends HelperBase {
buf.append("disabled=\"true\" ");
}
buf.append("></td><td align=\"center\" width=\"15%\">");
// The icons were way too much, so there's an X in each button class,
// remove if you wnat to put them back
if (showStartButton && (!ro) && !edit) {
buf.append("<button type=\"submit\" name=\"action\" value=\"Start ").append(index).append("\" >" + _("Start") + "<span class=hide> ").append(index).append("</span></button>");
buf.append("<button type=\"submit\" class=\"Xaccept\" name=\"action\" value=\"Start ").append(index).append("\" >" + _("Start") + "<span class=hide> ").append(index).append("</span></button>");
}
if (showEditButton && (!edit) && !ro)
buf.append("<button type=\"submit\" name=\"edit\" value=\"Edit ").append(index).append("\" >" + _("Edit") + "<span class=hide> ").append(index).append("</span></button>");
buf.append("<button type=\"submit\" class=\"Xadd\" name=\"edit\" value=\"Edit ").append(index).append("\" >" + _("Edit") + "<span class=hide> ").append(index).append("</span></button>");
if (showStopButton && (!edit))
buf.append("<button type=\"submit\" name=\"action\" value=\"Stop ").append(index).append("\" >" + _("Stop") + "<span class=hide> ").append(index).append("</span></button>");
buf.append("<button type=\"submit\" class=\"Xstop\" name=\"action\" value=\"Stop ").append(index).append("\" >" + _("Stop") + "<span class=hide> ").append(index).append("</span></button>");
if (showUpdateButton && (!edit) && !ro) {
buf.append("<button type=\"submit\" name=\"action\" value=\"Check ").append(index).append("\" >" + _("Check for updates") + "<span class=hide> ").append(index).append("</span></button>");
buf.append("<button type=\"submit\" name=\"action\" value=\"Update ").append(index).append("\" >" + _("Update") + "<span class=hide> ").append(index).append("</span></button>");
buf.append("<button type=\"submit\" class=\"Xcheck\" name=\"action\" value=\"Check ").append(index).append("\" >" + _("Check for updates") + "<span class=hide> ").append(index).append("</span></button>");
buf.append("<button type=\"submit\" class=\"Xdownload\" name=\"action\" value=\"Update ").append(index).append("\" >" + _("Update") + "<span class=hide> ").append(index).append("</span></button>");
}
if (showDeleteButton && (!edit) && !ro) {
buf.append("<button type=\"submit\" name=\"action\" value=\"Delete ").append(index)
buf.append("<button type=\"submit\" class=\"Xdelete\" name=\"action\" value=\"Delete ").append(index)
.append("\" onclick=\"if (!confirm('")
.append(_("Are you sure you want to delete {0}?", _(name)))
.append("')) { return false; }\">")

View File

@@ -159,7 +159,7 @@ public class ConfigLoggingHandler extends FormHandler {
if (saved)
addFormNotice(_("Log configuration saved"));
else
addFormNotice("Error saving the configuration (applied but not saved) - please see the error logs");
addFormError("Error saving the configuration (applied but not saved) - please see the error logs");
}
}
}

View File

@@ -3,6 +3,7 @@ package net.i2p.router.web;
import java.io.IOException;
/**
* Render the configuration menu at the top of all the config pages.
* refactored from confignav.jsp to reduce size and make translation easier
* @author zzz
*/
@@ -10,29 +11,45 @@ public class ConfigNavHelper extends HelperBase {
/** configX.jsp */
private static final String pages[] =
{"", "ui", "service", "update", "tunnels",
{"", "net", "ui", "service", "update", "tunnels",
"clients", "peer", "keyring", "logging", "stats",
"reseed", "advanced" };
private static final String titles[] =
{_x("Network"), _x("UI"), _x("Service"), _x("Update"), _x("Tunnels"),
{_x("Bandwidth"), _x("Network"), _x("UI"), _x("Service"), _x("Update"), _x("Tunnels"),
_x("Clients"), _x("Peers"), _x("Keyring"), _x("Logging"), _x("Stats"),
_x("Reseeding"), _x("Advanced") };
public void renderNavBar(String requestURI) throws IOException {
/**
* @param graphical false for text-mode browsers
*/
public void renderNavBar(String requestURI, boolean graphical) throws IOException {
StringBuilder buf = new StringBuilder(1024);
// TODO fix up the non-light themes
String theme = _context.getProperty(CSSHelper.PROP_THEME_NAME);
boolean span = graphical && (theme == null || theme.equals(CSSHelper.DEFAULT_THEME));
if (!span)
buf.append("<center>");
for (int i = 0; i < pages.length; i++) {
String page = "config" + pages[i];
if (requestURI.endsWith(page) || requestURI.endsWith(page + ".jsp")) {
// we are there
if (span)
buf.append("<span class=\"tab2\">");
buf.append(_(titles[i]));
} else {
// we are not there, make a link
if (span)
buf.append("<span class=\"tab\">");
buf.append("<a href=\"").append(page).append("\">").append(_(titles[i])).append("</a>");
}
if (i != pages.length - 1)
if (span)
buf.append(" </span>\n");
else if (i != pages.length - 1)
buf.append(" |\n");
}
if (!span)
buf.append("</center>");
_out.write(buf.toString());
}
}

View File

@@ -44,7 +44,7 @@ public class ConfigNetHandler extends FormHandler {
private String _reseedFrom;
private boolean _enableLoadTesting;
private String _sharePct;
private static final boolean _ratesOnly = false; // always false - delete me
private boolean _ratesOnly;
private static final String PROP_HIDDEN = Router.PROP_HIDDEN_HIDDEN; // see Router for other choice
@Override
@@ -120,6 +120,11 @@ public class ConfigNetHandler extends FormHandler {
_sharePct = (pct != null ? pct.trim() : null);
}
/** @since 0.8.12 */
public void setRatesOnly(String foo) {
_ratesOnly = true;
}
private void recheckReachability() {
_context.commSystem().recheckReachability();
addFormNotice(_("Rechecking router reachability..."));
@@ -169,7 +174,7 @@ public class ConfigNetHandler extends FormHandler {
String oldNPort = _context.getProperty(ConfigNetHelper.PROP_I2NP_NTCP_PORT, "");
String oldAutoHost = _context.getProperty(ConfigNetHelper.PROP_I2NP_NTCP_AUTO_IP, "true");
String sAutoPort = _context.getProperty(ConfigNetHelper.PROP_I2NP_NTCP_AUTO_PORT, "true");
boolean oldAutoPort = "true".equalsIgnoreCase(sAutoPort);
boolean oldAutoPort = Boolean.valueOf(sAutoPort).booleanValue();
if (_ntcpHostname == null) _ntcpHostname = "";
if (_ntcpPort == null) _ntcpPort = "";
if (_ntcpAutoIP == null) _ntcpAutoIP = "true";
@@ -274,12 +279,10 @@ public class ConfigNetHandler extends FormHandler {
}
boolean saved = _context.router().saveConfig();
if ( (_action != null) && (_("Save changes").equals(_action)) ) {
if (saved)
addFormNotice(_("Configuration saved successfully"));
else
addFormNotice(_("Error saving the configuration (applied but not saved) - please see the error logs"));
}
if (saved)
addFormNotice(_("Configuration saved successfully"));
else
addFormError(_("Error saving the configuration (applied but not saved) - please see the error logs"));
if (switchRequired) {
hiddenSwitch();
@@ -341,10 +344,11 @@ public class ConfigNetHandler extends FormHandler {
private void updateRates() {
boolean updated = false;
boolean bwUpdated = false;
if (_sharePct != null) {
String old = _context.router().getConfigSetting(Router.PROP_BANDWIDTH_SHARE_PERCENTAGE);
if ( (old == null) || (!old.equalsIgnoreCase(_sharePct)) ) {
if ( (old == null) || (!old.equals(_sharePct)) ) {
_context.router().setConfigSetting(Router.PROP_BANDWIDTH_SHARE_PERCENTAGE, _sharePct);
addFormNotice(_("Updating bandwidth share percentage"));
updated = true;
@@ -361,7 +365,7 @@ public class ConfigNetHandler extends FormHandler {
_context.router().setConfigSetting(FIFOBandwidthRefiller.PROP_INBOUND_BURST_BANDWIDTH, "" + rate);
_context.router().setConfigSetting(FIFOBandwidthRefiller.PROP_INBOUND_BANDWIDTH_PEAK, "" + kb);
} catch (NumberFormatException nfe) {}
updated = true;
bwUpdated = true;
}
if ( (_outboundRate != null) && (_outboundRate.length() > 0) &&
!_outboundRate.equals(_context.getProperty(FIFOBandwidthRefiller.PROP_OUTBOUND_BANDWIDTH, "" + FIFOBandwidthRefiller.DEFAULT_OUTBOUND_BANDWIDTH))) {
@@ -372,6 +376,11 @@ public class ConfigNetHandler extends FormHandler {
_context.router().setConfigSetting(FIFOBandwidthRefiller.PROP_OUTBOUND_BURST_BANDWIDTH, "" + rate);
_context.router().setConfigSetting(FIFOBandwidthRefiller.PROP_OUTBOUND_BANDWIDTH_PEAK, "" + kb);
} catch (NumberFormatException nfe) {}
bwUpdated = true;
}
if (bwUpdated) {
addFormNotice(_("Updated bandwidth limits"));
updated = true;
}
@@ -427,9 +436,7 @@ public class ConfigNetHandler extends FormHandler {
***********/
if (updated && !_ratesOnly) {
if (updated)
_context.bandwidthLimiter().reinitialize();
addFormNotice(_("Updated bandwidth limits"));
}
}
}

View File

@@ -68,8 +68,8 @@ public class ConfigNetHelper extends HelperBase {
}
public String getEnableTimeSyncChecked() {
String disabled = _context.getProperty(Timestamper.PROP_DISABLED, "false");
if ( (disabled != null) && ("true".equalsIgnoreCase(disabled)) )
boolean disabled = _context.getBooleanProperty(Timestamper.PROP_DISABLED);
if (disabled)
return "";
else
return CHECKED;
@@ -77,7 +77,7 @@ public class ConfigNetHelper extends HelperBase {
/** @param prop must default to false */
public String getChecked(String prop) {
if (Boolean.valueOf(_context.getProperty(prop)).booleanValue())
if (_context.getBooleanProperty(prop))
return CHECKED;
return "";
}
@@ -130,7 +130,7 @@ public class ConfigNetHelper extends HelperBase {
/** default true */
public String getUpnpChecked() {
if (Boolean.valueOf(_context.getProperty(TransportManager.PROP_ENABLE_UPNP, "true")).booleanValue())
if (_context.getBooleanPropertyDefaultTrue(TransportManager.PROP_ENABLE_UPNP))
return CHECKED;
return "";
}
@@ -228,7 +228,7 @@ public class ConfigNetHelper extends HelperBase {
public String getSharePercentageBox() {
int pct = (int) (100 * _context.router().getSharePercentage());
StringBuilder buf = new StringBuilder(256);
buf.append("<select style=\"text-align: right;\" name=\"sharePercentage\">\n");
buf.append("<select style=\"text-align: right !important;\" name=\"sharePercentage\">\n");
boolean found = false;
for (int i = 30; i <= 110; i += 10) {
int val = i;

View File

@@ -9,11 +9,13 @@ import net.i2p.router.RouterContext;
*
*/
public class ConfigRestartBean {
/** all these are tagged below so no need to _x them here */
static final String[] SET1 = {"shutdownImmediate", "Shutdown immediately", "cancelShutdown", "Cancel shutdown"};
static final String[] SET2 = {"restartImmediate", "Restart immediately", "cancelShutdown", "Cancel restart"};
static final String[] SET3 = {"restart", "Restart", "shutdown", "Shutdown"};
static final String[] SET4 = {"shutdown", "Shutdown"};
/** all these are tagged below so no need to _x them here.
* order is: form value, form class, display text.
*/
static final String[] SET1 = {"shutdownImmediate", "stop", "Shutdown immediately", "cancelShutdown", "cancel", "Cancel shutdown"};
static final String[] SET2 = {"restartImmediate", "reload", "Restart immediately", "cancelShutdown", "cancel", "Cancel restart"};
static final String[] SET3 = {"restart", "reload", "Restart", "shutdown", "stop", "Shutdown"};
static final String[] SET4 = {"shutdown", "stop", "Shutdown"};
public static String getNonce() {
RouterContext ctx = ContextHelper.getContext(null);
@@ -58,21 +60,21 @@ public class ConfigRestartBean {
long timeRemaining = ctx.router().getShutdownTimeRemaining();
StringBuilder buf = new StringBuilder(128);
if ((shuttingDown || restarting) && timeRemaining <= 0) {
buf.append("<center><b>");
buf.append("<h4>");
if (restarting)
buf.append(_("Restart imminent", ctx));
else
buf.append(_("Shutdown imminent", ctx));
buf.append("</b></center>");
buf.append("</h4>");
} else if (shuttingDown) {
buf.append("<center><b>");
buf.append("<h4>");
buf.append(_("Shutdown in {0}", DataHelper.formatDuration2(timeRemaining), ctx));
buf.append("</b></center><br>");
buf.append("</h4><hr>");
buttons(ctx, buf, urlBase, systemNonce, SET1);
} else if (restarting) {
buf.append("<center><b>");
buf.append("<h4>");
buf.append(_("Restart in {0}", DataHelper.formatDuration2(timeRemaining), ctx));
buf.append("</b></center><br>");
buf.append("</h4><hr>");
buttons(ctx, buf, urlBase, systemNonce, SET2);
} else {
if (ctx.hasWrapper())
@@ -83,12 +85,16 @@ public class ConfigRestartBean {
return buf.toString();
}
/** @param s value,label,... pairs */
/** @param s value,class,label,... triplets */
private static void buttons(RouterContext ctx, StringBuilder buf, String url, String nonce, String[] s) {
buf.append("<form action=\"").append(url).append("\" method=\"POST\">\n");
buf.append("<input type=\"hidden\" name=\"consoleNonce\" value=\"").append(nonce).append("\" >\n");
for (int i = 0; i < s.length; i+= 2)
buf.append("<button type=\"submit\" name=\"action\" value=\"").append(s[i]).append("\" >").append(_(s[i+1], ctx)).append("</button>\n");
for (int i = 0; i < s.length; i+= 3) {
buf.append("<button type=\"submit\" name=\"action\" value=\"")
.append(s[i]).append("\" class=\"")
.append(s[i+1]).append("\" >")
.append(_(s[i+2], ctx)).append("</button>\n");
}
buf.append("</form>\n");
}

View File

@@ -139,7 +139,7 @@ public class ConfigTunnelsHandler extends FormHandler {
if (saved)
addFormNotice(_("Exploratory tunnel configuration saved successfully."));
else
addFormNotice(_("Error saving the configuration (applied but not saved) - please see the error logs."));
addFormError(_("Error saving the configuration (applied but not saved) - please see the error logs."));
}
}
private static final int getInt(Object val) {

View File

@@ -63,6 +63,7 @@ public class ConfigTunnelsHelper extends HelperBase {
private static final int MAX_BACKUP_QUANTITY = 3;
private static final int MAX_VARIANCE = 2;
private static final int MIN_NEG_VARIANCE = -1;
private void renderForm(StringBuilder buf, int index, String prefix, String name, TunnelPoolSettings in, TunnelPoolSettings out) {
buf.append("<tr><th colspan=\"3\"><a name=\"").append(prefix).append("\">");
@@ -80,8 +81,8 @@ public class ConfigTunnelsHelper extends HelperBase {
if (in.getLength() + Math.abs(in.getLengthVariance()) >= WARN_LENGTH ||
out.getLength() + Math.abs(out.getLengthVariance()) >= WARN_LENGTH)
buf.append("<tr><th colspan=\"3\"><font color=\"red\">" + _("PERFORMANCE WARNING - Settings include very long tunnels.") + "</font></th></tr>");
if (in.getQuantity() + in.getBackupQuantity() >= WARN_QUANTITY ||
out.getQuantity() + out.getBackupQuantity() >= WARN_QUANTITY)
if (in.getTotalQuantity() >= WARN_QUANTITY ||
out.getTotalQuantity() >= WARN_QUANTITY)
buf.append("<tr><th colspan=\"3\"><font color=\"red\">" + _("PERFORMANCE WARNING - Settings include high tunnel quantities.") + "</font></th></tr>");
buf.append("<tr><th></th><th><img src=\"/themes/console/images/inbound.png\" alt=\"Inbound\" title=\"Inbound Tunnels\">&nbsp;&nbsp;" + _("Inbound") + "</th><th><img src=\"/themes/console/images/outbound.png\" alt=\"Outbound Tunnels\" title=\"Outbound\">&nbsp;&nbsp;" + _("Outbound") + "</th></tr>\n");

View File

@@ -33,7 +33,7 @@ public class ConfigUIHandler extends FormHandler {
_("Refresh the page to view.") +
"</a>");
} else {
addFormNotice(_("Error saving the configuration (applied but not saved) - please see the error logs."));
addFormError(_("Error saving the configuration (applied but not saved) - please see the error logs."));
}
}
}

View File

@@ -53,14 +53,14 @@ public class ConfigUIHelper extends HelperBase {
* Any language-specific flag added to the icon set must be
* added to the top-level build.xml for the updater.
*/
private static final String langs[] = {"ar", "da", "de", "en", "es", "fi",
private static final String langs[] = {"ar", "da", "de", "ee", "en", "es", "fi",
"fr", "it", "nl", "pl", "pt", "ru",
"sv", "uk", "vi", "zh"};
private static final String flags[] = {"lang_ar", "dk", "de", "us", "es", "fi",
private static final String flags[] = {"lang_ar", "dk", "de", "ee", "us", "es", "fi",
"fr", "it", "nl", "pl", "pt", "ru",
"se", "ua", "vn", "cn"};
private static final String xlangs[] = {_x("Arabic"), _x("Danish"),
_x("German"), _x("English"), _x("Spanish"),_x("Finnish"),
_x("German"), _x("Estonian"), _x("English"), _x("Spanish"), _x("Finnish"),
_x("French"), _x("Italian"), _x("Dutch"), _x("Polish"),
_x("Portuguese"), _x("Russian"), _x("Swedish"),
_x("Ukrainian"), _x("Vietnamese"), _x("Chinese")};

View File

@@ -24,7 +24,8 @@ public class ConfigUpdateHandler extends FormHandler {
public static final String OLD_DEFAULT_NEWS_URL = "http://complication.i2p/news.xml";
public static final String DEFAULT_NEWS_URL = "http://echelon.i2p/i2p/news.xml";
public static final String PROP_REFRESH_FREQUENCY = "router.newsRefreshFrequency";
public static final String DEFAULT_REFRESH_FREQUENCY = 36*60*60*1000 + "";
public static final long DEFAULT_REFRESH_FREQ = 36*60*60*1000l;
public static final String DEFAULT_REFRESH_FREQUENCY = Long.toString(DEFAULT_REFRESH_FREQ);
public static final String PROP_UPDATE_POLICY = "router.updatePolicy";
public static final String DEFAULT_UPDATE_POLICY = "download";
public static final String PROP_SHOULD_PROXY = "router.updateThroughProxy";
@@ -52,6 +53,7 @@ public class ConfigUpdateHandler extends FormHandler {
"http://inr.i2p/i2p/i2pupdate.su2\r\n" +
"http://stats.i2p/i2p/i2pupdate.su2\r\n" +
"http://www.i2p2.i2p/_static/i2pupdate.su2\r\n" +
"http://update.killyourtv.i2p/i2pupdate.su2\r\n" +
"http://update.postman.i2p/i2pupdate.su2" ;
private static final String NO_PACK200_URLS =
@@ -59,6 +61,7 @@ public class ConfigUpdateHandler extends FormHandler {
"http://inr.i2p/i2p/i2pupdate.sud\r\n" +
"http://stats.i2p/i2p/i2pupdate.sud\r\n" +
"http://www.i2p2.i2p/_static/i2pupdate.sud\r\n" +
"http://update.killyourtv.i2p/i2pupdate.sud\r\n" +
"http://update.postman.i2p/i2pupdate.sud" ;
public static final String DEFAULT_UPDATE_URL;
@@ -100,7 +103,7 @@ public class ConfigUpdateHandler extends FormHandler {
if ( (oldURL == null) || (!_newsURL.equals(oldURL)) ) {
_context.router().setConfigSetting(PROP_NEWS_URL, _newsURL);
NewsFetcher.getInstance(_context).invalidateNews();
addFormNotice(_("Updating news URL to") + " " + _newsURL);
addFormNotice(_("Updating news URL to {0}", _newsURL));
}
}
@@ -108,7 +111,7 @@ public class ConfigUpdateHandler extends FormHandler {
String oldHost = _context.router().getConfigSetting(PROP_PROXY_HOST);
if ( (oldHost == null) || (!_proxyHost.equals(oldHost)) ) {
_context.router().setConfigSetting(PROP_PROXY_HOST, _proxyHost);
addFormNotice(_("Updating proxy host to") + " " + _proxyHost);
addFormNotice(_("Updating proxy host to {0}", _proxyHost));
}
}
@@ -116,27 +119,27 @@ public class ConfigUpdateHandler extends FormHandler {
String oldPort = _context.router().getConfigSetting(PROP_PROXY_PORT);
if ( (oldPort == null) || (!_proxyPort.equals(oldPort)) ) {
_context.router().setConfigSetting(PROP_PROXY_PORT, _proxyPort);
addFormNotice(_("Updating proxy port to") + " " + _proxyPort);
addFormNotice(_("Updating proxy port to {0}", _proxyPort));
}
}
_context.router().setConfigSetting(PROP_SHOULD_PROXY, "" + _updateThroughProxy);
_context.router().setConfigSetting(PROP_UPDATE_UNSIGNED, "" + _updateUnsigned);
String oldFreqStr = _context.router().getConfigSetting(PROP_REFRESH_FREQUENCY);
long oldFreq = -1;
if (oldFreqStr != null)
try { oldFreq = Long.parseLong(oldFreqStr); } catch (NumberFormatException nfe) {}
String oldFreqStr = _context.getProperty(PROP_REFRESH_FREQUENCY, DEFAULT_REFRESH_FREQUENCY);
long oldFreq = DEFAULT_REFRESH_FREQ;
try { oldFreq = Long.parseLong(oldFreqStr); } catch (NumberFormatException nfe) {}
if (_refreshFrequency != oldFreq) {
_context.router().setConfigSetting(PROP_REFRESH_FREQUENCY, ""+_refreshFrequency);
addFormNotice(_("Updating refresh frequency to") + " " + DataHelper.formatDuration2(_refreshFrequency));
addFormNotice(_("Updating refresh frequency to {0}",
_refreshFrequency <= 0 ? _("Never") : DataHelper.formatDuration2(_refreshFrequency)));
}
if ( (_updatePolicy != null) && (_updatePolicy.length() > 0) ) {
String oldPolicy = _context.router().getConfigSetting(PROP_UPDATE_POLICY);
if ( (oldPolicy == null) || (!_updatePolicy.equals(oldPolicy)) ) {
_context.router().setConfigSetting(PROP_UPDATE_POLICY, _updatePolicy);
addFormNotice(_("Updating update policy to") + " " + _updatePolicy);
addFormNotice(_("Updating update policy to {0}", _updatePolicy));
}
}
@@ -152,7 +155,9 @@ public class ConfigUpdateHandler extends FormHandler {
if ( (_trustedKeys != null) && (_trustedKeys.length() > 0) ) {
_trustedKeys = _trustedKeys.replace("\r\n", ",").replace("\n", ",");
String oldKeys = new TrustedUpdate(_context).getTrustedKeysString();
if ( (oldKeys == null) || (!_trustedKeys.equals(oldKeys)) ) {
oldKeys = oldKeys.replace("\r\n", ",");
if (!_trustedKeys.equals(oldKeys)) {
// note that keys are not validated here and no console error message will be generated
_context.router().setConfigSetting(PROP_TRUSTED_KEYS, _trustedKeys);
addFormNotice(_("Updating trusted keys."));
}
@@ -162,7 +167,7 @@ public class ConfigUpdateHandler extends FormHandler {
String oldURL = _context.router().getConfigSetting(PROP_ZIP_URL);
if ( (oldURL == null) || (!_zipURL.equals(oldURL)) ) {
_context.router().setConfigSetting(PROP_ZIP_URL, _zipURL);
addFormNotice(_("Updating unsigned update URL to") + " " + _zipURL);
addFormNotice(_("Updating unsigned update URL to {0}", _zipURL));
}
}

View File

@@ -75,7 +75,7 @@ public class ConfigUpdateHelper extends HelperBase {
public String getRefreshFrequencySelectBox() {
String freq = _context.getProperty(ConfigUpdateHandler.PROP_REFRESH_FREQUENCY,
ConfigUpdateHandler.DEFAULT_REFRESH_FREQUENCY);
long ms = -1;
long ms = ConfigUpdateHandler.DEFAULT_REFRESH_FREQ;
try {
ms = Long.parseLong(freq);
} catch (NumberFormatException nfe) {}

View File

@@ -9,19 +9,19 @@ class ContextHelper {
/** @throws IllegalStateException if no context available */
public static RouterContext getContext(String contextId) {
List contexts = RouterContext.listContexts();
List<RouterContext> contexts = RouterContext.listContexts();
if ( (contexts == null) || (contexts.isEmpty()) )
throw new IllegalStateException("No contexts. This is usually because the router is either starting up or shutting down.");
if ( (contextId == null) || (contextId.trim().length() <= 0) )
return (RouterContext)contexts.get(0);
return contexts.get(0);
for (int i = 0; i < contexts.size(); i++) {
RouterContext context = (RouterContext)contexts.get(i);
RouterContext context = contexts.get(i);
Hash hash = context.routerHash();
if (hash == null) continue;
if (hash.toBase64().startsWith(contextId))
return context;
}
// not found, so just give them the first we can find
return (RouterContext)contexts.get(0);
return contexts.get(0);
}
}

View File

@@ -195,7 +195,7 @@ public class GraphHelper extends FormHandler {
if (persistent)
_out.write(" checked=\"true\"");
_out.write(">" +
"<hr><div class=\"formaction\"><input type=\"submit\" value=\"" + _("Save settings and redraw graphs") + "\"></div></form>");
"<hr><div class=\"formaction\"><input type=\"submit\" class=\"acceot\" value=\"" + _("Save settings and redraw graphs") + "\"></div></form>");
} catch (IOException ioe) {
ioe.printStackTrace();
}

View File

@@ -14,14 +14,14 @@ import org.mortbay.jetty.servlet.WebApplicationHandler;
* Convert foo.jsp to foo_xx.jsp for language xx.
* This is appropriate for jsps with large amounts of text.
*
* Also, as of 0.8.2, rewrite "/" and "/index.html" to "/index.jsp",x
* Also, as of 0.8.2, rewrite "/" and "/index.html" to "/index.jsp",
* and "/foo" to "/foo.jsp".
*
* @author zzz
*/
public class LocaleWebAppHandler extends WebApplicationHandler
{
private I2PAppContext _context;
private final I2PAppContext _context;
public LocaleWebAppHandler(I2PAppContext ctx) {
super();
@@ -32,7 +32,7 @@ public class LocaleWebAppHandler extends WebApplicationHandler
* Handle foo.jsp by converting to foo_xx.jsp
* for language xx, where xx is the language for the default locale,
* or as specified in the routerconsole.lang property.
* Unless language==="en".
* Unless language == "en".
*/
@Override
public void handle(String pathInContext,

View File

@@ -5,9 +5,16 @@ import java.util.List;
import net.i2p.util.FileUtil;
import org.mortbay.http.Version;
public class LogsHelper extends HelperBase {
public LogsHelper() {}
/** @since 0.8.12 */
public String getJettyVersion() {
return Version.getImplVersion();
}
public String getLogs() {
String str = formatMessages(_context.logManager().getBuffer().getMostRecentMessages());
return _("File location") + ": <b><code>" + _context.logManager().currentFile() + "</code></b><br><br>" + str;

View File

@@ -305,7 +305,7 @@ public class NetDbRenderer {
buf.append("<tr><th align=\"left\">" + _("Country") + "</th><th>" + _("Count") + "</th></tr>\n");
for (String country : countryList) {
int num = countries.count(country);
buf.append("<tr><td><img height=\"11\" width=\"16\" alt=\"").append(country.toUpperCase()).append("\"");
buf.append("<tr><td><img height=\"11\" width=\"16\" alt=\"").append(country.toUpperCase(Locale.US)).append("\"");
buf.append(" src=\"/flags.jsp?c=").append(country).append("\"> ");
buf.append(_(_context.commSystem().getCountryName(country)));
buf.append("</td><td align=\"center\">").append(num).append("</td></tr>\n");
@@ -365,7 +365,7 @@ public class NetDbRenderer {
buf.append("<b>" + _("Address(es)") + ":</b> ");
String country = _context.commSystem().getCountry(info.getIdentity().getHash());
if(country != null) {
buf.append("<img height=\"11\" width=\"16\" alt=\"").append(country.toUpperCase()).append('\"');
buf.append("<img height=\"11\" width=\"16\" alt=\"").append(country.toUpperCase(Locale.US)).append('\"');
buf.append(" title=\"").append(_(_context.commSystem().getCountryName(country))).append('\"');
buf.append(" src=\"/flags.jsp?c=").append(country).append("\"> ");
}

View File

@@ -24,8 +24,8 @@ import net.i2p.util.Log;
* track of whether that has an announcement for a new version.
*/
public class NewsFetcher implements Runnable, EepGet.StatusListener {
private I2PAppContext _context;
private Log _log;
private final RouterContext _context;
private final Log _log;
private boolean _updateAvailable;
private boolean _unsignedUpdateAvailable;
private long _lastFetch;
@@ -34,13 +34,13 @@ public class NewsFetcher implements Runnable, EepGet.StatusListener {
private String _unsignedUpdateVersion;
private String _lastModified;
private boolean _invalidated;
private File _newsFile;
private File _tempFile;
private final File _newsFile;
private final File _tempFile;
private static NewsFetcher _instance;
private volatile boolean _isRunning;
//public static final synchronized NewsFetcher getInstance() { return _instance; }
public static final synchronized NewsFetcher getInstance(I2PAppContext ctx) {
public static final synchronized NewsFetcher getInstance(RouterContext ctx) {
if (_instance != null)
return _instance;
_instance = new NewsFetcher(ctx);
@@ -52,8 +52,10 @@ public class NewsFetcher implements Runnable, EepGet.StatusListener {
/** @since 0.7.14 not configurable */
private static final String BACKUP_NEWS_URL = "http://www.i2p2.i2p/_static/news/news.xml";
private static final String PROP_LAST_CHECKED = "router.newsLastChecked";
/** @since 0.8.12 */
private static final String PROP_LAST_HIDDEN = "routerconsole.newsLastHidden";
private NewsFetcher(I2PAppContext ctx) {
private NewsFetcher(RouterContext ctx) {
_context = ctx;
_log = ctx.logManager().getLog(NewsFetcher.class);
_instance = this;
@@ -94,9 +96,40 @@ public class NewsFetcher implements Runnable, EepGet.StatusListener {
public boolean unsignedUpdateAvailable() { return _unsignedUpdateAvailable; }
public String unsignedUpdateVersion() { return _unsignedUpdateVersion; }
/**
* Is the news newer than the last time it was hidden?
* @since 0.8.12
*/
public boolean shouldShowNews() {
if (_lastUpdated <= 0)
return true;
String h = _context.getProperty(PROP_LAST_HIDDEN);
if (h == null)
return true;
long last = 0;
try {
last = Long.parseLong(h);
} catch (NumberFormatException nfe) {}
return _lastUpdated > last;
}
/**
* Save config with the timestamp of the current news to hide, or 0 to show
* @since 0.8.12
*/
public void showNews(boolean yes) {
long stamp = yes ? 0 : _lastUpdated;
_context.router().setConfigSetting(PROP_LAST_HIDDEN, Long.toString(stamp));
_context.router().saveConfig();
}
/**
* @return HTML
*/
public String status() {
StringBuilder buf = new StringBuilder(128);
long now = _context.clock().now();
buf.append("<i>");
if (_lastUpdated > 0) {
buf.append(Messages.getString("News last updated {0} ago.",
DataHelper.formatDuration2(now - _lastUpdated),
@@ -108,6 +141,18 @@ public class NewsFetcher implements Runnable, EepGet.StatusListener {
DataHelper.formatDuration2(now - _lastFetch),
_context));
}
buf.append("</i>");
String consoleNonce = System.getProperty("router.consoleNonce");
if (_lastUpdated > 0 && consoleNonce != null) {
if (shouldShowNews()) {
buf.append(" <a href=\"/?news=0&amp;consoleNonce=").append(consoleNonce).append("\">")
.append(Messages.getString("Hide news", _context));
} else {
buf.append(" <a href=\"/?news=1&amp;consoleNonce=").append(consoleNonce).append("\">")
.append(Messages.getString("Show news", _context));
}
buf.append("</a>");
}
return buf.toString();
}
@@ -232,16 +277,15 @@ public class NewsFetcher implements Runnable, EepGet.StatusListener {
if (get.fetch()) {
String lastmod = get.getLastModified();
if (lastmod != null) {
if (!(_context.isRouterContext())) return;
long modtime = RFC822Date.parse822Date(lastmod);
if (modtime <= 0) return;
String lastUpdate = _context.getProperty(UpdateHandler.PROP_LAST_UPDATE_TIME);
if (lastUpdate == null) {
// we don't know what version you have, so stamp it with the current time,
// and we'll look for something newer next time around.
((RouterContext)_context).router().setConfigSetting(UpdateHandler.PROP_LAST_UPDATE_TIME,
"" + _context.clock().now());
((RouterContext)_context).router().saveConfig();
_context.router().setConfigSetting(UpdateHandler.PROP_LAST_UPDATE_TIME,
Long.toString(_context.clock().now()));
_context.router().saveConfig();
return;
}
long ms = 0;
@@ -267,7 +311,7 @@ public class NewsFetcher implements Runnable, EepGet.StatusListener {
String url = _context.getProperty(ConfigUpdateHandler.PROP_ZIP_URL);
if (url == null || url.length() <= 0)
return;
UpdateHandler handler = new UnsignedUpdateHandler((RouterContext)_context, url,
UpdateHandler handler = new UnsignedUpdateHandler(_context, url,
_unsignedUpdateVersion);
handler.update();
}
@@ -329,18 +373,8 @@ public class NewsFetcher implements Runnable, EepGet.StatusListener {
if (shouldInstall()) {
if (_log.shouldLog(Log.DEBUG))
_log.debug("Policy requests update, so we update");
UpdateHandler handler = null;
if (_context.isRouterContext()) {
handler = new UpdateHandler((RouterContext)_context);
} else {
List contexts = RouterContext.listContexts();
if (!contexts.isEmpty())
handler = new UpdateHandler((RouterContext)contexts.get(0));
else
_log.log(Log.CRIT, "No router context to update with?");
}
if (handler != null)
handler.update();
UpdateHandler handler = new UpdateHandler(_context);
handler.update();
} else {
if (_log.shouldLog(Log.DEBUG))
_log.debug("Policy requests manual update, so we do nothing");
@@ -373,10 +407,8 @@ public class NewsFetcher implements Runnable, EepGet.StatusListener {
_log.warn("Transfer complete, but no file? - probably 304 Not Modified");
}
_lastFetch = now;
if (_context.isRouterContext()) {
((RouterContext)_context).router().setConfigSetting(PROP_LAST_CHECKED, "" + now);
((RouterContext)_context).router().saveConfig();
}
_context.router().setConfigSetting(PROP_LAST_CHECKED, Long.toString(now));
_context.router().saveConfig();
}
public void transferFailed(String url, long bytesTransferred, long bytesRemaining, int currentAttempt) {

View File

@@ -17,4 +17,9 @@ public class NewsHelper extends ContentHelper {
_page = (new File(_context.getBaseDir(), "docs/initialNews/initialNews.xml")).getAbsolutePath();
return super.getContent();
}
/** @since 0.8.12 */
public boolean shouldShowNews() {
return NewsFetcher.getInstance(_context).shouldShowNews();
}
}

View File

@@ -18,6 +18,7 @@ import net.i2p.desktopgui.Main;
import net.i2p.router.RouterContext;
import net.i2p.util.FileUtil;
import net.i2p.util.I2PAppThread;
import net.i2p.util.PortMapper;
import net.i2p.util.SecureDirectory;
import net.i2p.util.SecureFileOutputStream;
import net.i2p.util.ShellCommand;
@@ -207,6 +208,7 @@ public class RouterConsoleRunner {
// add standard listeners
if (_listenPort != null) {
Integer lport = Integer.parseInt(_listenPort);
StringTokenizer tok = new StringTokenizer(_listenHost, " ,");
while (tok.hasMoreTokens()) {
String host = tok.nextToken().trim();
@@ -215,7 +217,6 @@ public class RouterConsoleRunner {
// _server.addListener('[' + host + "]:" + _listenPort);
//else
// _server.addListener(host + ':' + _listenPort);
Integer lport = Integer.parseInt(_listenPort);
InetAddrPort iap = new InetAddrPort(host, lport);
SocketListener lsnr = new SocketListener(iap);
lsnr.setMinThreads(1); // default 2
@@ -230,6 +231,8 @@ public class RouterConsoleRunner {
System.err.println("Unable to bind routerconsole to " + host + " port " + _listenPort + ' ' + ioe);
}
}
// XXX: what if listenhosts do not include 127.0.0.1? (Should that ever even happen?)
I2PAppContext.getGlobalContext().portMapper().register(PortMapper.SVC_CONSOLE,lport);
}
// add SSL listeners
@@ -267,6 +270,7 @@ public class RouterConsoleRunner {
System.err.println("Unable to bind routerconsole to " + host + " port " + sslPort + " for SSL: " + e);
}
}
I2PAppContext.getGlobalContext().portMapper().register(PortMapper.SVC_HTTPS_CONSOLE,sslPort);
} else {
System.err.println("Unable to create or access keystore for SSL: " + keyStore.getAbsolutePath());
}
@@ -341,25 +345,29 @@ public class RouterConsoleRunner {
}
}
NewsFetcher fetcher = NewsFetcher.getInstance(I2PAppContext.getGlobalContext());
Thread newsThread = new I2PAppThread(fetcher, "NewsFetcher", true);
newsThread.start();
Thread t = new I2PAppThread(new StatSummarizer(), "StatSummarizer", true);
t.setPriority(Thread.NORM_PRIORITY - 1);
t.start();
List<RouterContext> contexts = RouterContext.listContexts();
if (contexts != null) {
RouterContext ctx = contexts.get(0);
NewsFetcher fetcher = NewsFetcher.getInstance(ctx);
Thread newsThread = new I2PAppThread(fetcher, "NewsFetcher", true);
newsThread.setPriority(Thread.NORM_PRIORITY - 1);
newsThread.start();
if (PluginStarter.pluginsEnabled(ctx)) {
t = new I2PAppThread(new PluginStarter(ctx), "PluginStarter", true);
t.setPriority(Thread.NORM_PRIORITY - 1);
t.start();
ctx.addShutdownTask(new PluginStopper(ctx));
}
ctx.addShutdownTask(new NewsShutdown(fetcher, newsThread));
// stat summarizer registers its own hook
ctx.addShutdownTask(new ServerShutdown());
}
} // else log CRIT ?
}
/**

View File

@@ -52,7 +52,7 @@ public class StatSummarizer implements Runnable {
private Thread _thread;
public StatSummarizer() {
_context = (RouterContext)RouterContext.listContexts().get(0); // fuck it, only summarize one per jvm
_context = RouterContext.listContexts().get(0); // fuck it, only summarize one per jvm
_log = _context.logManager().getLog(getClass());
_listeners = new CopyOnWriteArrayList();
_instance = this;

View File

@@ -12,8 +12,8 @@ import net.i2p.router.RouterContext;
*
*/
public class SummaryBarRenderer {
private RouterContext _context;
private SummaryHelper _helper;
private final RouterContext _context;
private final SummaryHelper _helper;
public SummaryBarRenderer(RouterContext context, SummaryHelper helper) {
_context = context;
@@ -28,14 +28,18 @@ public class SummaryBarRenderer {
StringBuilder buf = new StringBuilder(8*1024);
String theme = _context.getProperty(CSSHelper.PROP_THEME_NAME, CSSHelper.DEFAULT_THEME);
buf.append("<a href=\"/\" target=\"_top\"><img src=\"")
// TODO - the bar would render more cleanly if we specified the img height and width here,
// but unfortunately the images in the different themes are different sizes.
// They range in height from 37 to 43 px. But there's a -2 bottom margin...
// So put it in a div.
buf.append("<div style=\"height: 36px;\"><a href=\"/\" target=\"_top\"><img src=\"")
.append(CSSHelper.BASE_THEME_PATH)
.append(theme)
.append("/images/i2plogo.png\" alt=\"")
.append(_("I2P Router Console"))
.append("\" title=\"")
.append(_("I2P Router Console"))
.append("\"></a><hr>")
.append("\"></a></div><hr>")
.append("<h3><a href=\"/help\" target=\"_top\" title=\"")
.append(_("I2P Router Help &amp; FAQ"))
@@ -57,31 +61,25 @@ public class SummaryBarRenderer {
.append(_("I2P Services"))
.append("</a></h3>\n" +
"<hr><table>" +
"<hr class=\"b\"><table><tr><td>" +
"<tr><td><a href=\"/susidns/index.jsp\" target=\"_blank\" title=\"")
.append(_("Manage your I2P hosts file here (I2P domain name resolution)"))
"<a href=\"/susimail/susimail\" target=\"blank\" title=\"")
.append(_("Anonymous webmail client"))
.append("\">")
.append(_("Addressbook"))
.append(_("Email"))
.append("</a>\n" +
"<a href=\"/i2psnark/\" target=\"_blank\" title=\"")
.append(_("Built-in anonymous BitTorrent Client"))
.append("\">")
.append(_("Torrents"))
.append("</a>\n" +
"<a href=\"/susimail/susimail\" target=\"blank\" title=\"")
.append(_("Anonymous webmail client"))
.append("\">")
.append(_("Webmail"))
.append("</a>\n" +
"<a href=\"http://127.0.0.1:7658/\" target=\"_blank\" title=\"")
.append(_("Anonymous resident webserver"))
.append(_("Local web server"))
.append("\">")
.append(_("Webserver"))
.append("</a>")
.append(_("Website"))
.append("</a>\n")
.append(NavHelper.getClientAppLinks(_context))
@@ -91,7 +89,7 @@ public class SummaryBarRenderer {
.append(_("Configure I2P Router"))
.append("\">")
.append(_("I2P Internals"))
.append("</a></h3><hr>\n" +
.append("</a></h3><hr class=\"b\">\n" +
"<table><tr><td>\n" +
@@ -149,6 +147,12 @@ public class SummaryBarRenderer {
.append(_("Local Destinations"))
.append("\">")
.append(_("I2PTunnel"))
.append("</a>\n" +
"<a href=\"/susidns/index\" target=\"_blank\" title=\"")
.append(_("Manage your I2P hosts file here (I2P domain name resolution)"))
.append("\">")
.append(_("Addressbook"))
.append("</a>\n");
File javadoc = new File(_context.getBaseDir(), "docs/javadoc/index.html");
@@ -166,7 +170,7 @@ public class SummaryBarRenderer {
.append(_("I2P Router Help"))
.append("\">")
.append(_("General"))
.append("</a></h3><hr>\n" +
.append("</a></h3><hr class=\"b\">\n" +
"<table><tr>" +
"<td align=\"left\"><b>")
@@ -200,7 +204,7 @@ public class SummaryBarRenderer {
.append(_helper.getUptime())
.append("</td></tr></table>\n" +
"<hr><h4><a href=\"/config#help\" target=\"_top\" title=\"")
"<hr><h4><a href=\"/confignet#help\" target=\"_top\" title=\"")
.append(_("Help with configuring your firewall and router for optimal I2P performance"))
.append("\">")
.append(_("Network"))
@@ -210,7 +214,10 @@ public class SummaryBarRenderer {
// display all the time so we display the final failure message, and plugin update messages too
buf.append(UpdateHandler.getStatus());
String status = UpdateHandler.getStatus();
if (status.length() > 0) {
buf.append("<h4>").append(status).append("</h4><hr>\n");
}
if (_helper.updateAvailable() || _helper.unsignedUpdateAvailable()) {
if ("true".equals(System.getProperty(UpdateHandler.PROP_UPDATE_IN_PROGRESS))) {
// nothing
@@ -229,13 +236,13 @@ public class SummaryBarRenderer {
buf.append("<form action=\"").append(uri).append("\" method=\"POST\">\n");
buf.append("<input type=\"hidden\" name=\"updateNonce\" value=\"").append(nonce).append("\" >\n");
if (_helper.updateAvailable()) {
buf.append("<button type=\"submit\" name=\"updateAction\" value=\"signed\" >")
buf.append("<button type=\"submit\" class=\"download\" name=\"updateAction\" value=\"signed\" >")
// Note to translators: parameter is a version, e.g. "0.8.4"
.append(_("Download {0} Update", _helper.getUpdateVersion()))
.append("</button><br>\n");
}
if (_helper.unsignedUpdateAvailable()) {
buf.append("<button type=\"submit\" name=\"updateAction\" value=\"Unsigned\" >")
buf.append("<button type=\"submit\" class=\"download\" name=\"updateAction\" value=\"Unsigned\" >")
// Note to translators: parameter is a date and time, e.g. "02-Mar 20:34 UTC"
// <br> is optional, to help the browser make the lines even in the button
// If the translation is shorter than the English, you should probably not include <br>
@@ -255,7 +262,7 @@ public class SummaryBarRenderer {
.append(_("Show all current peer connections"))
.append("\">")
.append(_("Peers"))
.append("</a></h3><hr>\n" +
.append("</a></h3><hr class=\"b\">\n" +
"<table>\n" +
@@ -301,10 +308,10 @@ public class SummaryBarRenderer {
boolean anotherLine = false;
if (_helper.showFirewallWarning()) {
buf.append("<h4><a href=\"/config\" target=\"_top\" title=\"")
buf.append("<h4><a href=\"/confignet\" target=\"_top\" title=\"")
.append(_("Help with firewall configuration"))
.append("\">")
.append(_("Check NAT/firewall"))
.append(_("Check network connection and NAT/firewall"))
.append("</a></h4>");
anotherLine = true;
}
@@ -324,7 +331,7 @@ public class SummaryBarRenderer {
String uri = _helper.getRequestURI();
buf.append("<p><form action=\"").append(uri).append("\" method=\"POST\">\n");
buf.append("<input type=\"hidden\" name=\"reseedNonce\" value=\"").append(nonce).append("\" >\n");
buf.append("<button type=\"submit\" value=\"Reseed\" >").append(_("Reseed")).append("</button></form></p>\n");
buf.append("<button type=\"submit\" class=\"reload\" value=\"Reseed\" >").append(_("Reseed")).append("</button></form></p>\n");
}
anotherLine = true;
}
@@ -344,7 +351,7 @@ public class SummaryBarRenderer {
.append(_("Configure router bandwidth allocation"))
.append("\" target=\"_top\">")
.append(_("Bandwidth in/out"))
.append("</a></h3><hr>" +
.append("</a></h3><hr class=\"b\">" +
"<table>\n" +
"<tr><td align=\"left\"><b>")
@@ -381,7 +388,7 @@ public class SummaryBarRenderer {
.append(_("View existing tunnels and tunnel build status"))
.append("\">")
.append(_("Tunnels"))
.append("</a></h3><hr>" +
.append("</a></h3><hr class=\"b\">" +
"<table>\n" +
"<tr><td align=\"left\"><b>")
@@ -412,7 +419,7 @@ public class SummaryBarRenderer {
.append(_("What's in the router's job queue?"))
.append("\">")
.append(_("Congestion"))
.append("</a></h3><hr>" +
.append("</a></h3><hr class=\"b\">" +
"<table>\n" +
"<tr><td align=\"left\"><b>")
@@ -425,15 +432,17 @@ public class SummaryBarRenderer {
.append(_("Message delay"))
.append(":</b></td><td align=\"right\">")
.append(_helper.getMessageDelay())
.append("</td></tr>\n" +
.append("</td></tr>\n");
"<tr><td align=\"left\"><b>")
if (!_context.getBooleanPropertyDefaultTrue("router.disableTunnelTesting")) {
buf.append("<tr><td align=\"left\"><b>")
.append(_("Tunnel lag"))
.append(":</b></td><td align=\"right\">")
.append(_helper.getTunnelLag())
.append("</td></tr>\n" +
.append("</td></tr>\n");
}
"<tr><td align=\"left\"><b>")
buf.append("<tr><td align=\"left\"><b>")
.append(_("Backlog"))
.append(":</b></td><td align=\"right\">")
.append(_helper.getInboundBacklog())

View File

@@ -367,7 +367,7 @@ public class SummaryHelper extends HelperBase {
List<Destination> clients = new ArrayList(_context.clientManager().listClients());
StringBuilder buf = new StringBuilder(512);
buf.append("<h3><a href=\"/i2ptunnel/\" target=\"_blank\" title=\"").append(_("Add/remove/edit &amp; control your client and server tunnels")).append("\">").append(_("Local Destinations")).append("</a></h3><hr><div class=\"tunnels\">");
buf.append("<h3><a href=\"/i2ptunnel/\" target=\"_blank\" title=\"").append(_("Add/remove/edit &amp; control your client and server tunnels")).append("\">").append(_("Local Destinations")).append("</a></h3><hr class=\"b\"><div class=\"tunnels\">");
if (!clients.isEmpty()) {
Collections.sort(clients, new AlphaComparator());
buf.append("<table>");

View File

@@ -28,7 +28,7 @@ import net.i2p.stat.RateStat;
import net.i2p.util.ObjectCounter;
/**
*
* tunnels.jsp
*/
public class TunnelRenderer {
private RouterContext _context;
@@ -133,12 +133,12 @@ public class TunnelRenderer {
out.write("<div class=\"statusnotes\"><b>" + _("Limited display to the {0} tunnels with the highest usage", DISPLAY_LIMIT) + "</b></div>\n");
out.write("<div class=\"statusnotes\"><b>" + _("Inactive participating tunnels") + ": " + inactive + "</b></div>\n");
out.write("<div class=\"statusnotes\"><b>" + _("Lifetime bandwidth usage") + ": " + DataHelper.formatSize2(processed*1024) + "B</b></div>\n");
renderPeers(out);
//renderPeers(out);
}
private static class TunnelComparator implements Comparator {
public int compare(Object l, Object r) {
return (int) (((HopConfig)r).getProcessedMessagesCount() - ((HopConfig)l).getProcessedMessagesCount());
private static class TunnelComparator implements Comparator<HopConfig> {
public int compare(HopConfig l, HopConfig r) {
return (int) (r.getProcessedMessagesCount() - l.getProcessedMessagesCount());
}
}
@@ -228,6 +228,7 @@ public class TunnelRenderer {
DataHelper.formatSize2(processedOut*1024) + "B " + _("out") + "</b></center></div>");
}
/****
private void renderPeers(Writer out) throws IOException {
// count up the peers in the local pools
ObjectCounter<Hash> lc = new ObjectCounter();
@@ -265,9 +266,11 @@ public class TunnelRenderer {
out.write("</b> <td>&nbsp;</td> <td align=\"center\"><b>" + partCount);
out.write("</b> <td>&nbsp;</td></tr></table></div>\n");
}
****/
/* duplicate of that in tunnelPoolManager for now */
/** @return total number of non-fallback expl. + client tunnels */
/****
private int countTunnelsPerPeer(ObjectCounter<Hash> lc) {
List<TunnelPool> pools = new ArrayList();
_context.tunnelManager().listPools(pools);
@@ -286,8 +289,10 @@ public class TunnelRenderer {
}
return tunnelCount;
}
****/
/** @return total number of part. tunnels */
/****
private int countParticipatingPerPeer(ObjectCounter<Hash> pc) {
List<HopConfig> participating = _context.tunnelDispatcher().listParticipatingTunnels();
for (HopConfig cfg : participating) {
@@ -301,12 +306,6 @@ public class TunnelRenderer {
return participating.size();
}
private static class HashComparator implements Comparator {
public int compare(Object l, Object r) {
return ((Hash)l).toBase64().compareTo(((Hash)r).toBase64());
}
}
private static class CountryComparator implements Comparator<Hash> {
public CountryComparator(CommSystemFacade comm) {
this.comm = comm;
@@ -326,7 +325,9 @@ public class TunnelRenderer {
private CommSystemFacade comm;
}
****/
/** cap string */
private String getCapacity(Hash peer) {
RouterInfo info = _context.netDb().lookupRouterInfoLocally(peer);
if (info != null) {

View File

@@ -12,6 +12,7 @@ import net.i2p.I2PAppContext;
import net.i2p.util.FileUtil;
import net.i2p.util.Log;
import net.i2p.util.SecureDirectory;
import net.i2p.util.PortMapper;
import org.mortbay.http.HttpContext;
import org.mortbay.http.HttpListener;
@@ -136,12 +137,16 @@ public class WebAppStarter {
/** see comments in ConfigClientsHandler */
static Server getConsoleServer() {
PortMapper pm = I2PAppContext.getGlobalContext().portMapper();
int p1 = pm.getPort(PortMapper.SVC_CONSOLE);
int p2 = pm.getPort(PortMapper.SVC_HTTPS_CONSOLE);
Collection c = Server.getHttpServers();
for (int i = 0; i < c.size(); i++) {
Server s = (Server) c.toArray()[i];
HttpListener[] hl = s.getListeners();
for (int j = 0; j < hl.length; j++) {
if (hl[j].getPort() == 7657)
int port = hl[j].getPort();
if (port == p1 || port == p2)
return s;
}
}

View File

@@ -4,14 +4,14 @@
<html><head>
<%@include file="css.jsi" %>
<%=intl.title("config networking")%>
<%=intl.title("configure bandwidth")%>
</head><body>
<%@include file="summary.jsi" %>
<jsp:useBean class="net.i2p.router.web.ConfigNetHelper" id="nethelper" scope="request" />
<jsp:setProperty name="nethelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<h1><%=intl._("I2P Network Configuration")%></h1>
<h1><%=intl._("I2P Bandwidth Configuration")%></h1>
<div class="main" id="main">
<%@include file="confignav.jsi" %>
@@ -24,7 +24,9 @@
<form action="" method="POST">
<input type="hidden" name="nonce" value="<jsp:getProperty name="formhandler" property="newNonce" />" >
<input type="hidden" name="action" value="blah" >
<input type="hidden" name="ratesOnly" value="1" >
<h3><%=intl._("Bandwidth limiter")%></h3><p>
<img src="/themes/console/images/itoopie_xsm.png" alt="">
<b><%=intl._("I2P will work best if you configure your rates to match the speed of your internet connection.")%></b>
</p>
<div class="wideload"><p><table><tr><td><input style="text-align: right; width: 5em;" name="inboundrate" type="text" size="5" maxlength="5" value="<jsp:getProperty name="nethelper" property="inboundRate" />" >
@@ -53,10 +55,10 @@
</tr><tr>
<td><jsp:getProperty name="nethelper" property="sharePercentageBox" /> <%=intl._("Share")%></td>
<td>(<jsp:getProperty name="nethelper" property="shareRateBits" />)
</td></tr></table></p></div></p>
</td></tr></table></p></div></p><p>
<% int share = nethelper.getShareBandwidth();
if (share < 12) {
out.print("<p><b>");
out.print("<b>");
out.print(intl._("NOTE"));
out.print("</b>: ");
out.print(intl._("You have configured I2P to share only {0} KBps.", share));
@@ -64,218 +66,18 @@
out.print(intl._("I2P requires at least 12KBps to enable sharing. "));
out.print(intl._("Please enable sharing (participating in tunnels) by configuring more bandwidth. "));
out.print(intl._("It improves your anonymity by creating cover traffic, and helps the network.")+"</p>");
out.print(intl._("It improves your anonymity by creating cover traffic, and helps the network."));
} else {
out.print("<p>");
out.print(intl._("You have configured I2P to share {0} KBps.", share));
out.print("\n");
out.print(intl._("The higher the share bandwidth the more you improve your anonymity and help the network.")+"</p><hr>");
out.print(intl._("The higher the share bandwidth the more you improve your anonymity and help the network."));
}
%>
<p><a href="confignet"><%=intl._("Advanced network configuration page")%></a></p><hr>
<div class="formaction">
<input type="reset" value="<%=intl._("Cancel")%>" >
<input type="submit" name="save" value="<%=intl._("Save changes")%>" >
<input type="reset" class="cancel" value="<%=intl._("Cancel")%>" >
<input type="submit" class="accept" name="save" value="<%=intl._("Save changes")%>" >
</div>
<% /********
<!--
<b>Enable load testing: </b>
<input type="checkbox" class="optbox" name="enableloadtesting" value="true" <jsp:getProperty name="nethelper" property="enableLoadTesting" /> />
<p>If enabled, your router will periodically anonymously probe some of your peers
to see what sort of throughput they can handle. This improves your router's ability
to pick faster peers, but can cost substantial bandwidth. Relevant data from the
load testing is fed into the profiles as well as the
<a href="oldstats.jsp#test.rtt">test.rtt</a> and related stats.</p>
<br>
-->
*********/ %>
<h3><%=intl._("IP and Transport Configuration")%></h3><p>
<b><%=intl._("The default settings will work for most people.")%>
<a href="#chelp"><%=intl._("There is help below.")%></a></b>
</p><p><b><%=intl._("UPnP Configuration")%>:</b><br>
<input type="checkbox" class="optbox" name="upnp" value="true" <jsp:getProperty name="nethelper" property="upnpChecked" /> >
<%=intl._("Enable UPnP to open firewall ports")%> - <a href="peers#upnp"><%=intl._("UPnP status")%></a>
</p><p><b><%=intl._("IP Configuration")%>:</b><br>
<%=intl._("Externally reachable hostname or IP address")%>:<br>
<input type="radio" class="optbox" name="udpAutoIP" value="local,upnp,ssu" <%=nethelper.getUdpAutoIPChecked(3) %> >
<%=intl._("Use all auto-detect methods")%><br>
<input type="radio" class="optbox" name="udpAutoIP" value="local,ssu" <%=nethelper.getUdpAutoIPChecked(4) %> >
<%=intl._("Disable UPnP IP address detection")%><br>
<input type="radio" class="optbox" name="udpAutoIP" value="upnp,ssu" <%=nethelper.getUdpAutoIPChecked(5) %> >
<%=intl._("Ignore local interface IP address")%><br>
<input type="radio" class="optbox" name="udpAutoIP" value="ssu" <%=nethelper.getUdpAutoIPChecked(0) %> >
<%=intl._("Use SSU IP address detection only")%><br>
<input type="radio" class="optbox" name="udpAutoIP" value="fixed" <%=nethelper.getUdpAutoIPChecked(1) %> >
<%=intl._("Specify hostname or IP")%>:
<input name ="udpHost1" type="text" size="16" value="<jsp:getProperty name="nethelper" property="udphostname" />" >
<% String[] ips = nethelper.getAddresses();
if (ips.length > 0) {
out.print(intl._("or") + " <select name=\"udpHost2\"><option value=\"\" selected=\"true\">"+intl._("Select Interface")+"</option>\n");
for (int i = 0; i < ips.length; i++) {
out.print("<option value=\"");
out.print(ips[i]);
out.print("\">");
out.print(ips[i]);
out.print("</option>\n");
}
out.print("</select>\n");
}
%>
<br>
<input type="radio" class="optbox" name="udpAutoIP" value="hidden" <%=nethelper.getUdpAutoIPChecked(2) %> >
<%=intl._("Hidden mode - do not publish IP")%> <i><%=intl._("(prevents participating traffic)")%></i><br>
</p><p>
<%=intl._("Action when IP changes")%>:<br>
<input type="checkbox" class="optbox" name="laptop" value="true" <jsp:getProperty name="nethelper" property="laptopChecked" /> >
<%=intl._("Laptop mode - Change router identity and UDP port when IP changes for enhanced anonymity")%>
(<i><%=intl._("Experimental")%></i>)
</p><p><b><%=intl._("UDP Configuration:")%></b><br>
<%=intl._("UDP port:")%>
<input name ="udpPort" type="text" size="5" maxlength="5" value="<jsp:getProperty name="nethelper" property="configuredUdpPort" />" ><br>
<% /********
<!-- let's keep this simple...
<input type="checkbox" class="optbox" name="requireIntroductions" value="true" <jsp:getProperty name="nethelper" property="requireIntroductionsChecked" /> />
Require SSU introductions
<i>(Enable if you cannot open your firewall)</i>
</p><p>
Current External UDP address: <i><jsp:getProperty name="nethelper" property="udpAddress" /></i><br>
-->
*********/ %>
</p><p>
<b><%=intl._("TCP Configuration")%>:</b><br>
<%=intl._("Externally reachable hostname or IP address")%>:<br>
<input type="radio" class="optbox" name="ntcpAutoIP" value="true" <%=nethelper.getTcpAutoIPChecked(2) %> >
<%=intl._("Use auto-detected IP address")%>
<i>(<%=intl._("currently")%> <jsp:getProperty name="nethelper" property="udpIP" />)</i>
<%=intl._("if we are not firewalled")%><br>
<input type="radio" class="optbox" name="ntcpAutoIP" value="always" <%=nethelper.getTcpAutoIPChecked(3) %> >
<%=intl._("Always use auto-detected IP address (Not firewalled)")%><br>
<input type="radio" class="optbox" name="ntcpAutoIP" value="false" <%=nethelper.getTcpAutoIPChecked(1) %> >
<%=intl._("Specify hostname or IP")%>:
<input name ="ntcphost" type="text" size="16" value="<jsp:getProperty name="nethelper" property="ntcphostname" />" ><br>
<input type="radio" class="optbox" name="ntcpAutoIP" value="false" <%=nethelper.getTcpAutoIPChecked(0) %> >
<%=intl._("Disable inbound (Firewalled)")%><br>
<input type="radio" class="optbox" name="ntcpAutoIP" value="disabled" <%=nethelper.getTcpAutoIPChecked(4) %> >
<%=intl._("Completely disable")%> <i><%=intl._("(select only if behind a firewall that throttles or blocks outbound TCP)")%></i><br>
</p><p>
<%=intl._("Externally reachable TCP port")%>:<br>
<input type="radio" class="optbox" name="ntcpAutoPort" value="2" <%=nethelper.getTcpAutoPortChecked(2) %> >
<%=intl._("Use the same port configured for UDP")%>
<i>(<%=intl._("currently")%> <jsp:getProperty name="nethelper" property="udpPort" />)</i><br>
<input type="radio" class="optbox" name="ntcpAutoPort" value="1" <%=nethelper.getTcpAutoPortChecked(1) %> >
<%=intl._("Specify Port")%>:
<input name ="ntcpport" type="text" size="5" maxlength="5" value="<jsp:getProperty name="nethelper" property="ntcpport" />" ><br>
</p><p><b><%=intl._("Notes")%>: <%=intl._("a) Do not reveal your port numbers to anyone! b) Changing these settings will restart your router.")%></b></p>
<hr><div class="formaction">
<input type="reset" value="<%=intl._("Cancel")%>" >
<input type="submit" name="save" value="<%=intl._("Save changes")%>" >
</div><h3><a name="chelp"><%=intl._("Configuration Help")%>:</a></h3><div align="justify"><p>
<%=intl._("While I2P will work fine behind most firewalls, your speeds and network integration will generally improve if the I2P port is forwarded for both UDP and TCP.")%>
</p><p>
<%=intl._("If you can, please poke a hole in your firewall to allow unsolicited UDP and TCP packets to reach you.")%>
<%=intl._("If you can't, I2P supports UPnP (Universal Plug and Play) and UDP hole punching with \"SSU introductions\" to relay traffic.")%>
<%=intl._("Most of the options above are for special situations, for example where UPnP does not work correctly, or a firewall not under your control is doing harm.")%>
<%=intl._("Certain firewalls such as symmetric NATs may not work well with I2P.")%>
</p>
<% /********
<!-- let's keep this simple...
<input type="submit" name="recheckReachability" value="Check network reachability..." />
</p>
-->
*********/ %>
<p>
<%=intl._("UPnP is used to communicate with Internet Gateway Devices (IGDs) to detect the external IP address and forward ports.")%>
<%=intl._("UPnP support is beta, and may not work for any number of reasons")%>:
<ul>
<li class="tidylist"><%=intl._("No UPnP-compatible device present")%>
<li class="tidylist"><%=intl._("UPnP disabled on the device")%>
<li class="tidylist"><%=intl._("Software firewall interference with UPnP")%>
<li class="tidylist"><%=intl._("Bugs in the device's UPnP implementation")%>
<li class="tidylist"><%=intl._("Multiple firewall/routers in the internet connection path")%>
<li class="tidylist"><%=intl._("UPnP device change, reset, or address change")%>
</ul></p><p>
<a href="peers#upnp"><%=intl._("Review the UPnP status here.")%></a>
<%=intl._("UPnP may be enabled or disabled above, but a change requires a router restart to take effect.")%></p>
<p><%=intl._("Hostnames entered above will be published in the network database.")%>
<%=intl._("They are <b>not private</b>.")%>
<%=intl._("Also, <b>do not enter a private IP address</b> like 127.0.0.1 or 192.168.1.1.")%>
<%=intl._("If you specify the wrong IP address or hostname, or do not properly configure your NAT or firewall, your network performance will degrade substantially.")%>
<%=intl._("When in doubt, leave the settings at the defaults.")%>
</p>
<h3><a name="help"><%=intl._("Reachability Help")%>:</a></h3><p>
<%=intl._("While I2P will work fine behind most firewalls, your speeds and network integration will generally improve if the I2P port is forwarded for both UDP and TCP.")%>
<%=intl._("If you think you have opened up your firewall and I2P still thinks you are firewalled, remember that you may have multiple firewalls, for example both software packages and external hardware routers.")%>
<%=intl._("If there is an error, the <a href=\"logs.jsp\">logs</a> may also help diagnose the problem.")%>
<ul>
<li class="tidylist"><b><%=intl._("OK")%></b> -
<%=intl._("Your UDP port does not appear to be firewalled.")%>
<li class="tidylist"><b><%=intl._("Firewalled")%></b> -
<%=intl._("Your UDP port appears to be firewalled.")%>
<%=intl._("As the firewall detection methods are not 100% reliable, this may occasionally be displayed in error.")%>
<%=intl._("However, if it appears consistently, you should check whether both your external and internal firewalls are open for your port.")%>
<%=intl._("I2P will work fine when firewalled, there is no reason for concern. When firewalled, the router uses \"introducers\" to relay inbound connections.")%>
<%=intl._("However, you will get more participating traffic and help the network more if you can open your firewall(s).")%>
<%=intl._("If you think you have already done so, remember that you may have both a hardware and a software firewall, or be behind an additional, institutional firewall you cannot control.")%>
<%=intl._("Also, some routers cannot correctly forward both TCP and UDP on a single port, or may have other limitations or bugs that prevent them from passing traffic through to I2P.")%>
<li class="tidylist"><b><%=intl._("Testing")%></b> -
<%=intl._("The router is currently testing whether your UDP port is firewalled.")%>
<li class="tidylist"><b><%=intl._("Hidden")%></b> -
<%=intl._("The router is not configured to publish its address, therefore it does not expect incoming connections.")%>
<li class="tidylist"><b><%=intl._("WARN - Firewalled and Fast")%></b> -
<%=intl._("You have configured I2P to share more than 128KBps of bandwidth, but you are firewalled.")%>
<%=intl._("While I2P will work fine in this configuration, if you really have over 128KBps of bandwidth to share, it will be much more helpful to the network if you open your firewall.")%>
<li class="tidylist"><b><%=intl._("WARN - Firewalled and Floodfill")%></b> -
<%=intl._("You have configured I2P to be a floodfill router, but you are firewalled.")%>
<%=intl._("For best participation as a floodfill router, you should open your firewall.")%>
<li class="tidylist"><b><%=intl._("WARN - Firewalled with Inbound TCP Enabled")%></b> -
<%=intl._("You have configured inbound TCP, however your UDP port is firewalled, and therefore it is likely that your TCP port is firewalled as well.")%>
<%=intl._("If your TCP port is firewalled with inbound TCP enabled, routers will not be able to contact you via TCP, which will hurt the network.")%>
<%=intl._("Please open your firewall or disable inbound TCP above.")%>
<li class="tidylist"><b><%=intl._("WARN - Firewalled with UDP Disabled")%></b> -
<%=intl._("You have configured inbound TCP, however you have disabled UDP.")%>
<%=intl._("You appear to be firewalled on TCP, therefore your router cannot accept inbound connections.")%>
<%=intl._("Please open your firewall or enable UDP.")%>
<li class="tidylist"><b><%=intl._("ERR - Clock Skew")%></b> -
<%=intl._("Your system's clock is skewed, which will make it difficult to participate in the network.")%>
<%=intl._("Correct your clock setting if this error persists.")%>
<li class="tidylist"><b><%=intl._("ERR - Private TCP Address")%></b> -
<%=intl._("You must never advertise an unroutable IP address such as 127.0.0.1 or 192.168.1.1 as your external address.")%>
<%=intl._("Correct the address or disable inbound TCP above.")%>
<li class="tidylist"><b><%=intl._("ERR - SymmetricNAT")%></b> -
<%=intl._("I2P detected that you are firewalled by a Symmetric NAT.")%>
<%=intl._("I2P does not work well behind this type of firewall. You will probably not be able to accept inbound connections, which will limit your participation in the network.")%>
<li class="tidylist"><b><%=intl._("ERR - UDP Port In Use - Set i2np.udp.internalPort=xxxx in advanced config and restart")%></b> -
<%=intl._("I2P was unable to bind to port 8887 or other configured port.")%>
<%=intl._("Check to see if another program is using the configured port. If so, stop that program or configure I2P to use a different port.")%>
<%=intl._("This may be a transient error, if the other program is no longer using the port.")%>
<%=intl._("However, a restart is always required after this error.")%>
<li class="tidylist"><b><%=intl._("ERR - UDP Disabled and Inbound TCP host/port not set")%></b> -
<%=intl._("You have not configured inbound TCP with a hostname and port above, however you have disabled UDP.")%>
<%=intl._("Therefore your router cannot accept inbound connections.")%>
<%=intl._("Please configure a TCP host and port above or enable UDP.")%>
<li class="tidylist"><b><%=intl._("ERR - Client Manager I2CP Error - check logs")%></b> -
<%=intl._("This is usually due to a port 7654 conflict. Check the logs to verify.")%>
<%=intl._("Do you have another I2P instance running? Stop the conflicting program and restart I2P.")%>
</ul></p><hr>
<% /********
<!--
<b>Dynamic Router Keys: </b>
<input type="checkbox" class="optbox" name="dynamicKeys" value="true" <jsp:getProperty name="nethelper" property="dynamicKeysChecked" /> /><br>
<p>
This setting causes your router identity to be regenerated every time your IP address
changes. If you have a dynamic IP this option can speed up your reintegration into
the network (since people will have shitlisted your old router identity), and, for
very weak adversaries, help frustrate trivial
<a href="http://www.i2p.net/how_threatmodel#intersection">intersection
attacks</a> against the NetDB. Your different router identities would only be
'hidden' among other I2P users at your ISP, and further analysis would link
the router identities further.</p>
<p>Note that when I2P detects an IP address change, it will automatically
initiate a restart in order to rekey and to disconnect from peers before they
update their profiles - any long lasting client connections will be disconnected,
though such would likely already be the case anyway, since the IP address changed.
</p>
<br>
-->
*********/ %>
</div></form></div></div></body></html>
</div></form>
</div></div></body></html>

View File

@@ -30,7 +30,7 @@
<h3><%=intl._("Advanced I2P Configuration")%></h3>
<textarea rows="32" cols="60" name="config" wrap="off" spellcheck="false"><jsp:getProperty name="advancedhelper" property="settings" /></textarea><br><hr>
<div class="formaction">
<input type="reset" value="<%=intl._("Cancel")%>" >
<input type="submit" name="shouldsave" value="<%=intl._("Save changes")%>" >
<input type="reset" class="cancel" value="<%=intl._("Cancel")%>" >
<input type="submit" name="shouldsave" class="accept" value="<%=intl._("Save changes")%>" >
<br><b><%=intl._("NOTE")%>:</b> <%=intl._("Some changes may require a restart to take effect.")%>
</div></form></div></div></div></body></html>

View File

@@ -41,11 +41,11 @@ button span.hide{
<%=net.i2p.router.startup.ClientAppConfig.configFile(net.i2p.I2PAppContext.getGlobalContext()).getAbsolutePath()%>.
<%=intl._("All changes require restart to take effect.")%></i>
</p><hr><div class="formaction">
<input type="submit" name="foo" value="<%=intl._("Cancel")%>" />
<input type="submit" class="cancel" name="foo" value="<%=intl._("Cancel")%>" />
<% if (request.getParameter("edit") == null) { %>
<input type="submit" name="edit" value="<%=intl._("Add Client")%>" />
<input type="submit" name="edit" class="add" value="<%=intl._("Add Client")%>" />
<% } %>
<input type="submit" name="action" value="<%=intl._("Save Client Configuration")%>" />
<input type="submit" class="accept" name="action" value="<%=intl._("Save Client Configuration")%>" />
</div></form></div>
<h3><a name="i2cp"></a><%=intl._("Advanced Client Interface Configuration")%></h3>
@@ -89,8 +89,8 @@ button span.hide{
<%=intl._("Many clients do not support SSL or authorization.")%>
<i><%=intl._("All changes require restart to take effect.")%></i>
</p><hr><div class="formaction">
<input type="submit" name="foo" value="<%=intl._("Cancel")%>" />
<input type="submit" name="action" value="<%=intl._("Save Interface Configuration")%>" />
<input type="submit" class="cancel" name="foo" value="<%=intl._("Cancel")%>" />
<input type="submit" class="accept" name="action" value="<%=intl._("Save Interface Configuration")%>" />
</div></form>
<h3><a name="webapp"></a><%=intl._("WebApp Configuration")%></h3><p>
@@ -103,7 +103,7 @@ button span.hide{
<jsp:getProperty name="clientshelper" property="form2" />
<p><i><%=intl._("All changes require restart to take effect.")%></i>
</p><hr><div class="formaction">
<input type="submit" name="action" value="<%=intl._("Save WebApp Configuration")%>" />
<input type="submit" name="action" class="accept" value="<%=intl._("Save WebApp Configuration")%>" />
</div></form></div>
<% if (clientshelper.showPlugins()) { %>
@@ -114,7 +114,7 @@ button span.hide{
<input type="hidden" name="nonce" value="<%=pageNonce%>" >
<jsp:getProperty name="clientshelper" property="form3" />
<hr><div class="formaction">
<input type="submit" name="action" value="<%=intl._("Save Plugin Configuration")%>" />
<input type="submit" name="action" class="accept" value="<%=intl._("Save Plugin Configuration")%>" />
</div></form></div>
<h3><a name="plugin"></a><%=intl._("Plugin Installation")%></h3><p>
@@ -125,7 +125,7 @@ button span.hide{
<p>
<input type="text" size="60" name="pluginURL" >
</p><hr><div class="formaction">
<input type="submit" name="action" value="<%=intl._("Install Plugin")%>" />
<input type="submit" name="action" class="download" value="<%=intl._("Install Plugin")%>" />
</div></form></div>
<% } %>
</div></div></body></html>

View File

@@ -41,7 +41,7 @@
<td><input type="text" size="55" name="key" ></td>
</tr><tr>
<td align="right" colspan="2">
<input type="reset" value="<%=intl._("Cancel")%>" >
<input type="submit" name="action" value="<%=intl._("Delete key")%>" >
<input type="submit" name="action" value="<%=intl._("Add key")%>" >
<input type="reset" class="cancel" value="<%=intl._("Cancel")%>" >
<input type="submit" name="action" class="delete" value="<%=intl._("Delete key")%>" >
<input type="submit" name="action" class="add" value="<%=intl._("Add key")%>" >
</td></tr></table></p></div></form></div></div></body></html>

View File

@@ -26,7 +26,7 @@
<h3><%=intl._("Configure I2P Logging Options")%></h3>
<div class="wideload">
<table border="0" cellspacing="5">
<tr><td class="mediumtags" align="right"><b><%=intl._("Logging filename")%>:</b></td>
<tr><td class="mediumtags" align="right"><b><%=intl._("Log file")%>:</b></td>
<td><input type="text" name="logfilename" size="40" value="<jsp:getProperty name="logginghelper" property="logFilePattern" />" >
<br> <i><%=intl._("(the symbol '@' will be replaced during log rotation)")%></i></td>
</tr><tr><td class="mediumtags" align="right"><b><%=intl._("Log record format")%>:</b></td>
@@ -48,6 +48,6 @@
<td><jsp:getProperty name="logginghelper" property="newClassBox" /></td>
</tr><tr><td colspan="2"><hr></td>
</tr><tr class="tablefooter"><td colspan="2"> <div class="formaction">
<input type="reset" value="<%=intl._("Cancel")%>" >
<input type="submit" name="shouldsave" value="<%=intl._("Save changes")%>" >
<input type="reset" class="cancel" value="<%=intl._("Cancel")%>" >
<input type="submit" name="shouldsave" class="accept" value="<%=intl._("Save changes")%>" >
</div></td></tr></table></div></form></div></div></body></html>

View File

@@ -7,9 +7,9 @@
<jsp:setProperty name="navHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<% navHelper.storeWriter(out); %>
<div class="confignav" id="confignav">
<center>
<%
// moved to java for ease of translation and to avoid 10 copies
navHelper.renderNavBar(request.getRequestURI());
// allowIFrame variable from summary.jsi
navHelper.renderNavBar(request.getRequestURI(), allowIFrame);
%>
</center></div>
</div>

View File

@@ -0,0 +1,217 @@
<%@page contentType="text/html" %>
<%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
<%@include file="css.jsi" %>
<%=intl.title("config networking")%>
</head><body>
<%@include file="summary.jsi" %>
<jsp:useBean class="net.i2p.router.web.ConfigNetHelper" id="nethelper" scope="request" />
<jsp:setProperty name="nethelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<h1><%=intl._("I2P Network Configuration")%></h1>
<div class="main" id="main">
<%@include file="confignav.jsi" %>
<jsp:useBean class="net.i2p.router.web.ConfigNetHandler" id="formhandler" scope="request" />
<% formhandler.storeMethod(request.getMethod()); %>
<jsp:setProperty name="formhandler" property="*" />
<jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<jsp:getProperty name="formhandler" property="allMessages" />
<div class="configure">
<form action="" method="POST">
<input type="hidden" name="nonce" value="<jsp:getProperty name="formhandler" property="newNonce" />" >
<input type="hidden" name="action" value="blah" >
<h3><%=intl._("IP and Transport Configuration")%></h3><p>
<img src="/themes/console/images/itoopie_xsm.png" alt="">
<b><%=intl._("The default settings will work for most people.")%>
<a href="#chelp"><%=intl._("There is help below.")%></a></b>
</p><p><b><%=intl._("UPnP Configuration")%>:</b><br>
<input type="checkbox" class="optbox" name="upnp" value="true" <jsp:getProperty name="nethelper" property="upnpChecked" /> >
<%=intl._("Enable UPnP to open firewall ports")%> - <a href="peers#upnp"><%=intl._("UPnP status")%></a>
</p><p><b><%=intl._("IP Configuration")%>:</b><br>
<%=intl._("Externally reachable hostname or IP address")%>:<br>
<input type="radio" class="optbox" name="udpAutoIP" value="local,upnp,ssu" <%=nethelper.getUdpAutoIPChecked(3) %> >
<%=intl._("Use all auto-detect methods")%><br>
<input type="radio" class="optbox" name="udpAutoIP" value="local,ssu" <%=nethelper.getUdpAutoIPChecked(4) %> >
<%=intl._("Disable UPnP IP address detection")%><br>
<input type="radio" class="optbox" name="udpAutoIP" value="upnp,ssu" <%=nethelper.getUdpAutoIPChecked(5) %> >
<%=intl._("Ignore local interface IP address")%><br>
<input type="radio" class="optbox" name="udpAutoIP" value="ssu" <%=nethelper.getUdpAutoIPChecked(0) %> >
<%=intl._("Use SSU IP address detection only")%><br>
<input type="radio" class="optbox" name="udpAutoIP" value="fixed" <%=nethelper.getUdpAutoIPChecked(1) %> >
<%=intl._("Specify hostname or IP")%>:
<input name ="udpHost1" type="text" size="16" value="<jsp:getProperty name="nethelper" property="udphostname" />" >
<% String[] ips = nethelper.getAddresses();
if (ips.length > 0) {
out.print(intl._("or") + " <select name=\"udpHost2\"><option value=\"\" selected=\"true\">"+intl._("Select Interface")+"</option>\n");
for (int i = 0; i < ips.length; i++) {
out.print("<option value=\"");
out.print(ips[i]);
out.print("\">");
out.print(ips[i]);
out.print("</option>\n");
}
out.print("</select>\n");
}
%>
<br>
<input type="radio" class="optbox" name="udpAutoIP" value="hidden" <%=nethelper.getUdpAutoIPChecked(2) %> >
<%=intl._("Hidden mode - do not publish IP")%> <i><%=intl._("(prevents participating traffic)")%></i><br>
</p><p>
<%=intl._("Action when IP changes")%>:<br>
<input type="checkbox" class="optbox" name="laptop" value="true" <jsp:getProperty name="nethelper" property="laptopChecked" /> >
<%=intl._("Laptop mode - Change router identity and UDP port when IP changes for enhanced anonymity")%>
(<i><%=intl._("Experimental")%></i>)
</p><p><b><%=intl._("UDP Configuration:")%></b><br>
<%=intl._("UDP port:")%>
<input name ="udpPort" type="text" size="5" maxlength="5" value="<jsp:getProperty name="nethelper" property="configuredUdpPort" />" ><br>
<% /********
<!-- let's keep this simple...
<input type="checkbox" class="optbox" name="requireIntroductions" value="true" <jsp:getProperty name="nethelper" property="requireIntroductionsChecked" /> />
Require SSU introductions
<i>(Enable if you cannot open your firewall)</i>
</p><p>
Current External UDP address: <i><jsp:getProperty name="nethelper" property="udpAddress" /></i><br>
-->
*********/ %>
</p><p>
<b><%=intl._("TCP Configuration")%>:</b><br>
<%=intl._("Externally reachable hostname or IP address")%>:<br>
<input type="radio" class="optbox" name="ntcpAutoIP" value="true" <%=nethelper.getTcpAutoIPChecked(2) %> >
<%=intl._("Use auto-detected IP address")%>
<i>(<%=intl._("currently")%> <jsp:getProperty name="nethelper" property="udpIP" />)</i>
<%=intl._("if we are not firewalled")%><br>
<input type="radio" class="optbox" name="ntcpAutoIP" value="always" <%=nethelper.getTcpAutoIPChecked(3) %> >
<%=intl._("Always use auto-detected IP address (Not firewalled)")%><br>
<input type="radio" class="optbox" name="ntcpAutoIP" value="false" <%=nethelper.getTcpAutoIPChecked(1) %> >
<%=intl._("Specify hostname or IP")%>:
<input name ="ntcphost" type="text" size="16" value="<jsp:getProperty name="nethelper" property="ntcphostname" />" ><br>
<input type="radio" class="optbox" name="ntcpAutoIP" value="false" <%=nethelper.getTcpAutoIPChecked(0) %> >
<%=intl._("Disable inbound (Firewalled)")%><br>
<input type="radio" class="optbox" name="ntcpAutoIP" value="disabled" <%=nethelper.getTcpAutoIPChecked(4) %> >
<%=intl._("Completely disable")%> <i><%=intl._("(select only if behind a firewall that throttles or blocks outbound TCP)")%></i><br>
</p><p>
<%=intl._("Externally reachable TCP port")%>:<br>
<input type="radio" class="optbox" name="ntcpAutoPort" value="2" <%=nethelper.getTcpAutoPortChecked(2) %> >
<%=intl._("Use the same port configured for UDP")%>
<i>(<%=intl._("currently")%> <jsp:getProperty name="nethelper" property="udpPort" />)</i><br>
<input type="radio" class="optbox" name="ntcpAutoPort" value="1" <%=nethelper.getTcpAutoPortChecked(1) %> >
<%=intl._("Specify Port")%>:
<input name ="ntcpport" type="text" size="5" maxlength="5" value="<jsp:getProperty name="nethelper" property="ntcpport" />" ><br>
</p><p><b><%=intl._("Notes")%>: <%=intl._("a) Do not reveal your port numbers to anyone! b) Changing these settings will restart your router.")%></b></p>
<hr><div class="formaction">
<input type="reset" class="cancel" value="<%=intl._("Cancel")%>" >
<input type="submit" class="accept" name="save" value="<%=intl._("Save changes")%>" >
</div><h3><a name="chelp"><%=intl._("Configuration Help")%>:</a></h3><div align="justify"><p>
<%=intl._("While I2P will work fine behind most firewalls, your speeds and network integration will generally improve if the I2P port is forwarded for both UDP and TCP.")%>
</p><p>
<%=intl._("If you can, please poke a hole in your firewall to allow unsolicited UDP and TCP packets to reach you.")%>
<%=intl._("If you can't, I2P supports UPnP (Universal Plug and Play) and UDP hole punching with \"SSU introductions\" to relay traffic.")%>
<%=intl._("Most of the options above are for special situations, for example where UPnP does not work correctly, or a firewall not under your control is doing harm.")%>
<%=intl._("Certain firewalls such as symmetric NATs may not work well with I2P.")%>
</p>
<% /********
<!-- let's keep this simple...
<input type="submit" name="recheckReachability" value="Check network reachability..." />
</p>
-->
*********/ %>
<p>
<%=intl._("UPnP is used to communicate with Internet Gateway Devices (IGDs) to detect the external IP address and forward ports.")%>
<%=intl._("UPnP support is beta, and may not work for any number of reasons")%>:
<ul>
<li class="tidylist"><%=intl._("No UPnP-compatible device present")%>
<li class="tidylist"><%=intl._("UPnP disabled on the device")%>
<li class="tidylist"><%=intl._("Software firewall interference with UPnP")%>
<li class="tidylist"><%=intl._("Bugs in the device's UPnP implementation")%>
<li class="tidylist"><%=intl._("Multiple firewall/routers in the internet connection path")%>
<li class="tidylist"><%=intl._("UPnP device change, reset, or address change")%>
</ul></p><p>
<a href="peers#upnp"><%=intl._("Review the UPnP status here.")%></a>
<%=intl._("UPnP may be enabled or disabled above, but a change requires a router restart to take effect.")%></p>
<p><%=intl._("Hostnames entered above will be published in the network database.")%>
<%=intl._("They are <b>not private</b>.")%>
<%=intl._("Also, <b>do not enter a private IP address</b> like 127.0.0.1 or 192.168.1.1.")%>
<%=intl._("If you specify the wrong IP address or hostname, or do not properly configure your NAT or firewall, your network performance will degrade substantially.")%>
<%=intl._("When in doubt, leave the settings at the defaults.")%>
</p>
<h3><a name="help"><%=intl._("Reachability Help")%>:</a></h3><p>
<%=intl._("While I2P will work fine behind most firewalls, your speeds and network integration will generally improve if the I2P port is forwarded for both UDP and TCP.")%>
<%=intl._("If you think you have opened up your firewall and I2P still thinks you are firewalled, remember that you may have multiple firewalls, for example both software packages and external hardware routers.")%>
<%=intl._("If there is an error, the <a href=\"logs.jsp\">logs</a> may also help diagnose the problem.")%>
<ul>
<li class="tidylist"><b><%=intl._("OK")%></b> -
<%=intl._("Your UDP port does not appear to be firewalled.")%>
<li class="tidylist"><b><%=intl._("Firewalled")%></b> -
<%=intl._("Your UDP port appears to be firewalled.")%>
<%=intl._("As the firewall detection methods are not 100% reliable, this may occasionally be displayed in error.")%>
<%=intl._("However, if it appears consistently, you should check whether both your external and internal firewalls are open for your port.")%>
<%=intl._("I2P will work fine when firewalled, there is no reason for concern. When firewalled, the router uses \"introducers\" to relay inbound connections.")%>
<%=intl._("However, you will get more participating traffic and help the network more if you can open your firewall(s).")%>
<%=intl._("If you think you have already done so, remember that you may have both a hardware and a software firewall, or be behind an additional, institutional firewall you cannot control.")%>
<%=intl._("Also, some routers cannot correctly forward both TCP and UDP on a single port, or may have other limitations or bugs that prevent them from passing traffic through to I2P.")%>
<li class="tidylist"><b><%=intl._("Testing")%></b> -
<%=intl._("The router is currently testing whether your UDP port is firewalled.")%>
<li class="tidylist"><b><%=intl._("Hidden")%></b> -
<%=intl._("The router is not configured to publish its address, therefore it does not expect incoming connections.")%>
<li class="tidylist"><b><%=intl._("WARN - Firewalled and Fast")%></b> -
<%=intl._("You have configured I2P to share more than 128KBps of bandwidth, but you are firewalled.")%>
<%=intl._("While I2P will work fine in this configuration, if you really have over 128KBps of bandwidth to share, it will be much more helpful to the network if you open your firewall.")%>
<li class="tidylist"><b><%=intl._("WARN - Firewalled and Floodfill")%></b> -
<%=intl._("You have configured I2P to be a floodfill router, but you are firewalled.")%>
<%=intl._("For best participation as a floodfill router, you should open your firewall.")%>
<li class="tidylist"><b><%=intl._("WARN - Firewalled with Inbound TCP Enabled")%></b> -
<%=intl._("You have configured inbound TCP, however your UDP port is firewalled, and therefore it is likely that your TCP port is firewalled as well.")%>
<%=intl._("If your TCP port is firewalled with inbound TCP enabled, routers will not be able to contact you via TCP, which will hurt the network.")%>
<%=intl._("Please open your firewall or disable inbound TCP above.")%>
<li class="tidylist"><b><%=intl._("WARN - Firewalled with UDP Disabled")%></b> -
<%=intl._("You have configured inbound TCP, however you have disabled UDP.")%>
<%=intl._("You appear to be firewalled on TCP, therefore your router cannot accept inbound connections.")%>
<%=intl._("Please open your firewall or enable UDP.")%>
<li class="tidylist"><b><%=intl._("ERR - Clock Skew")%></b> -
<%=intl._("Your system's clock is skewed, which will make it difficult to participate in the network.")%>
<%=intl._("Correct your clock setting if this error persists.")%>
<li class="tidylist"><b><%=intl._("ERR - Private TCP Address")%></b> -
<%=intl._("You must never advertise an unroutable IP address such as 127.0.0.1 or 192.168.1.1 as your external address.")%>
<%=intl._("Correct the address or disable inbound TCP above.")%>
<li class="tidylist"><b><%=intl._("ERR - SymmetricNAT")%></b> -
<%=intl._("I2P detected that you are firewalled by a Symmetric NAT.")%>
<%=intl._("I2P does not work well behind this type of firewall. You will probably not be able to accept inbound connections, which will limit your participation in the network.")%>
<li class="tidylist"><b><%=intl._("ERR - UDP Port In Use - Set i2np.udp.internalPort=xxxx in advanced config and restart")%></b> -
<%=intl._("I2P was unable to bind to port 8887 or other configured port.")%>
<%=intl._("Check to see if another program is using the configured port. If so, stop that program or configure I2P to use a different port.")%>
<%=intl._("This may be a transient error, if the other program is no longer using the port.")%>
<%=intl._("However, a restart is always required after this error.")%>
<li class="tidylist"><b><%=intl._("ERR - UDP Disabled and Inbound TCP host/port not set")%></b> -
<%=intl._("You have not configured inbound TCP with a hostname and port above, however you have disabled UDP.")%>
<%=intl._("Therefore your router cannot accept inbound connections.")%>
<%=intl._("Please configure a TCP host and port above or enable UDP.")%>
<li class="tidylist"><b><%=intl._("ERR - Client Manager I2CP Error - check logs")%></b> -
<%=intl._("This is usually due to a port 7654 conflict. Check the logs to verify.")%>
<%=intl._("Do you have another I2P instance running? Stop the conflicting program and restart I2P.")%>
</ul></p><hr>
<% /********
<!--
<b>Dynamic Router Keys: </b>
<input type="checkbox" class="optbox" name="dynamicKeys" value="true" <jsp:getProperty name="nethelper" property="dynamicKeysChecked" /> /><br>
<p>
This setting causes your router identity to be regenerated every time your IP address
changes. If you have a dynamic IP this option can speed up your reintegration into
the network (since people will have shitlisted your old router identity), and, for
very weak adversaries, help frustrate trivial
<a href="http://www.i2p.net/how_threatmodel#intersection">intersection
attacks</a> against the NetDB. Your different router identities would only be
'hidden' among other I2P users at your ISP, and further analysis would link
the router identities further.</p>
<p>Note that when I2P detects an IP address change, it will automatically
initiate a restart in order to rekey and to disconnect from peers before they
update their profiles - any long lasting client connections will be disconnected,
though such would likely already be the case anyway, since the IP address changed.
</p>
<br>
-->
*********/ %>
</div></form></div></div></body></html>

View File

@@ -39,8 +39,8 @@
<h3><%=intl._("Manually Ban / Unban a Peer")%></h3>
<p><%=intl._("Banning will prevent the participation of this peer in tunnels you create.")%></p>
<div class="formaction">
<input type="submit" name="action" value="<%=intl._("Ban peer until restart")%>" />
<input type="submit" name="action" value="<%=intl._("Unban peer")%>" />
<input type="submit" name="action" class="delete" value="<%=intl._("Ban peer until restart")%>" />
<input type="submit" name="action" class="accept" value="<%=intl._("Unban peer")%>" />
<% if (! "".equals(peer)) { %>
<!-- <font color="blue">&lt;---- click to verify action</font> -->
<% } %>
@@ -57,7 +57,7 @@
<input type="text" size="8" name="speed" value="<%=speed%>" />
<%=intl._("Capacity")%>:
<input type="text" size="8" name="capacity" value="<%=capacity%>" />
<input type="submit" name="action" value="<%=intl._("Adjust peer bonuses")%>" /></p></div>
<input type="submit" name="action" class="add" value="<%=intl._("Adjust peer bonuses")%>" /></p></div>
</form>
<a name="shitlist"> </a><h2><%=intl._("Banned Peers")%></h2>
<jsp:useBean class="net.i2p.router.web.ProfilesHelper" id="profilesHelper" scope="request" />

View File

@@ -75,7 +75,7 @@
</table></div>
<hr><div class="formaction">
<input type="submit" name="foo" value="<%=intl._("Cancel")%>" />
<input type="submit" name="action" value="<%=intl._("Save changes and reseed now")%>" />
<input type="submit" name="action" value="<%=intl._("Save changes")%>" />
<input type="submit" class="cancel" name="foo" value="<%=intl._("Cancel")%>" />
<input type="submit" name="action" class="download" value="<%=intl._("Save changes and reseed now")%>" />
<input type="submit" name="action" class="accept" value="<%=intl._("Save changes")%>" />
</div></form></div></div></body></html>

View File

@@ -24,9 +24,9 @@
<p><%=intl._("Graceful shutdown lets the router satisfy the agreements it has already made before shutting down, but may take a few minutes.")%>
<%=intl._("If you need to kill the router immediately, that option is available as well.")%></p>
<hr><div class="formaction">
<input type="submit" name="action" value="<%=intl._("Shutdown gracefully")%>" >
<input type="submit" name="action" value="<%=intl._("Shutdown immediately")%>" >
<input type="submit" name="action" value="<%=intl._("Cancel graceful shutdown")%>" >
<input type="submit" class="stop" name="action" value="<%=intl._("Shutdown gracefully")%>" >
<input type="submit" class="stop" name="action" value="<%=intl._("Shutdown immediately")%>" >
<input type="submit" class="cancel" name="action" value="<%=intl._("Cancel graceful shutdown")%>" >
</div>
<% if (System.getProperty("wrapper.version") != null) { %>
<p><%=intl._("If you want the router to restart itself after shutting down, you can choose one of the following.")%>
@@ -34,8 +34,8 @@
<%=intl._("A graceful restart will take a few minutes (but your peers will appreciate your patience), while a hard restart does so immediately.")%>
<%=intl._("After tearing down the router, it will wait 1 minute before starting back up again.")%></p>
<hr><div class="formaction">
<input type="submit" name="action" value="<%=intl._("Graceful restart")%>" >
<input type="submit" name="action" value="<%=intl._("Hard restart")%>" >
<input type="submit" class="reload" name="action" value="<%=intl._("Graceful restart")%>" >
<input type="submit" class="reload" name="action" value="<%=intl._("Hard restart")%>" >
<% } %></div>
<% if ( (System.getProperty("os.name") != null) && (System.getProperty("os.name").startsWith("Win")) ) { %>

View File

@@ -111,7 +111,7 @@ function toggleAll(category)
<td colspan="2"><%=intl._("Advanced filter")%>:
<input type="text" name="explicitFilterValue" value="<%=statshelper.getExplicitFilter()%>" size="40" ></td></tr>
<tr class="tablefooter"><td colspan="3" align="right">
<input type="reset" value="<%=intl._("Cancel")%>" >
<input type="submit" name="shouldsave" value="<%=intl._("Save changes")%>" >
<input type="reset" class="cancel" value="<%=intl._("Cancel")%>" >
<input type="submit" name="shouldsave" class="accept" value="<%=intl._("Save changes")%>" >
</td></tr>
</table></div></form></div></div></body></html>

View File

@@ -38,7 +38,7 @@
<%=intl._("Client tunnel changes are temporary and are not saved.")%>
<%=intl._("To make permanent client tunnel changes see the")%> <a href="i2ptunnel/index.jsp"><%=intl._("i2ptunnel page")%></a>.
<hr><div class="formaction">
<input type="reset" value="<%=intl._("Cancel")%>" >
<input type="submit" name="shouldsave" value="<%=intl._("Save changes")%>" >
<input type="reset" class="cancel" value="<%=intl._("Cancel")%>" >
<input type="submit" name="shouldsave" class="accept" value="<%=intl._("Save changes")%>" >
</div>
</form></div></div></div></body></html>

View File

@@ -47,9 +47,9 @@
<% } %>
<h3><%=uihelper._("Router Console Language")%></h3>
<jsp:getProperty name="uihelper" property="langSettings" />
<%=uihelper._("Please contribute to the router console translation project! Contact the developers in #i2p-dev on IRC to help.")%>
<hr><div class="formaction">
<input type="reset" value="<%=intl._("Cancel")%>" >
<input type="submit" name="shouldsave" value="<%=intl._("Apply")%>" >
<p><%=uihelper._("Please contribute to the router console translation project! Contact the developers in #i2p-dev on IRC to help.")%>
</p><hr><div class="formaction">
<input type="reset" class="cancel" value="<%=intl._("Cancel")%>" >
<input type="submit" name="shouldsave" class="accept" value="<%=intl._("Apply")%>" >
</div></form></div>
</div></body></html>

View File

@@ -20,7 +20,7 @@
<jsp:useBean class="net.i2p.router.web.ConfigUpdateHelper" id="updatehelper" scope="request" />
<jsp:setProperty name="updatehelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<div class="messages">
<i><jsp:getProperty name="updatehelper" property="newsStatus" /></i></div>
<jsp:getProperty name="updatehelper" property="newsStatus" /></div>
<div class="configure">
<form action="" method="POST">
<input type="hidden" name="nonce" value="<jsp:getProperty name="formhandler" property="newNonce" />" >
@@ -37,7 +37,7 @@
<tr><td colspan="2"></tr>
<tr><td class= "mediumtags" align="right"><b><%=intl._("News Updates")%>:</b></td>
<% } // if canInstall %>
<td> <% if ("true".equals(System.getProperty("net.i2p.router.web.UpdateHandler.updateInProgress", "false"))) { %> <i><%=intl._("Update In Progress")%></i><br> <% } else { %> <input type="submit" name="action" value="<%=intl._("Check for updates")%>" />
<td> <% if ("true".equals(System.getProperty("net.i2p.router.web.UpdateHandler.updateInProgress", "false"))) { %> <i><%=intl._("Update In Progress")%></i><br> <% } else { %> <input type="submit" name="action" class="check" value="<%=intl._("Check for updates")%>" />
<% } %></td></tr>
<tr><td colspan="2"><br></td></tr>
<tr><td class= "mediumtags" align="right"><b><%=intl._("News URL")%>:</b></td>
@@ -68,6 +68,6 @@
<% } // if canInstall %>
<tr class="tablefooter"><td colspan="2">
<div class="formaction">
<input type="reset" value="<%=intl._("Cancel")%>" >
<input type="submit" name="action" value="<%=intl._("Save")%>" >
<input type="reset" class="cancel" value="<%=intl._("Cancel")%>" >
<input type="submit" name="action" class="accept" value="<%=intl._("Save")%>" >
</div></td></tr></table></div></form></div></div></body></html>

View File

@@ -32,6 +32,7 @@
String conNonceParam = request.getParameter("consoleNonce");
if (conNonceParam != null && conNonceParam.equals(System.getProperty("router.consoleNonce"))) {
intl.setLang(request.getParameter("lang"));
intl.setNews(request.getParameter("news"));
}
%>
<link href="<%=intl.getTheme(request.getHeader("User-Agent"))%>console.css" rel="stylesheet" type="text/css">

View File

@@ -41,7 +41,7 @@ your computer's time.</li> */
%>
<li class="tidylist"><b>Reachability:</b>
The router's view of whether it can be contacted by other routers.
Further information is on the <a href="config.jsp#help">configuration page</a>.
Further information is on the <a href="confignet#help">configuration page</a>.
</li></ul><h3>Peers</h3><ul>
<li class="tidylist"><b>Active:</b>
The first number is the number of peers you've sent or received a message from in the last few minutes.
@@ -49,16 +49,16 @@ This may range from 8-10 to several hundred, depending on your total bandwidth,
shared bandwidth, and locally-generated traffic.
The second number is the number of peers seen in the last hour or so.
Do not be concerned if these numbers vary widely.
First enable all stats to <a href="configstats.jsp#router.activePeers">[Enable graphing]</a>.</li>
<a href="configstats.jsp#router.activePeers">[Enable graphing]</a>.</li>
<li class="tidylist"><b>Fast:</b>
This is the number of peers you use for building client tunnels. It is generally in the
range 8-30. Your fast peers are shown on the <a href="profiles.jsp">profiles page</a>.
<a href="configstats.jsp#router.fastPeers">[Enable graphing]</a>.</li>
<a href="configstats.jsp#router.fastPeers">[Enable graphing]</a></li>
<li class="tidylist"><b>High Capacity:</b>
This is the number of peers you use for building some of your exploratory tunnels. It is generally in the
range 8-75. The fast peers are included in the high capacity tier.
Your high capacity peers are shown on the <a href="profiles.jsp">profiles page</a>.
First enable all stats to <a href="configstats.jsp#router.highCapacityPeers">[Enable graphing]</a>.</li>
<a href="configstats.jsp#router.highCapacityPeers">[Enable graphing]</a></li>
<li class="tidylist"><b>Well Integrated:</b>
This is the number of peers you use for network database inquiries.
These are usually the "floodfill" peers.
@@ -73,7 +73,7 @@ shared bandwidth, and locally-generated traffic.
I2P does not require a router to know every other router.</li>
</ul><h3>Bandwidth in/out</h3><div align="justify">
Should be self-explanatory. All values are in bytes per second, not bits per second.
Change your bandwidth limits on the <a href="config.jsp#help">configuration page</a>.
Change your bandwidth limits on the <a href="confignet#help">configuration page</a>.
Bandwidth is <a href="graphs.jsp">graphed</a> by default.</div>
<h3>Local destinations</h3><div align="justify">
@@ -92,7 +92,7 @@ Tunnels built by other routers through your router.
This may vary widely depending on network demand, your
shared bandwidth, and amount of locally-generated traffic.
The recommended method for limiting participating tunnels is
to change your share percentage on the <a href="config.jsp#help">configuration page</a>.
to change your share percentage on the <a href="confignet#help">configuration page</a>.
You may also limit the total number by setting <tt>router.maxParticipatingTunnels=nnn</tt> on
the <a href="configadvanced.jsp">advanced configuration page</a>. <a href="configstats.jsp#tunnel.participatingTunnels">[Enable graphing]</a>.</li>
<li class="tidylist"><b>Share ratio:</b>

View File

@@ -36,7 +36,7 @@ The full hash is shown on your <a href="netdb.jsp?r=.">صفحة معلومات
الوقت الحالي (UTC)والانحراف الممكن. يحتاج I2P الى ساعة مضبوطة. اذا كان انحراف الساعة اكثر من بضع ثواني، قم بتصحيح الخلل.</li>
<li class="tidylist"><b>إمكانية الوصول</b>
امكانية الاتصال الخارجي بالموجه
المزيد من التفاصيل في <a href="config.jsp#help">صفحة الاعدادات</a>.</li>
المزيد من التفاصيل في <a href="confignet#help">صفحة الاعدادات</a>.</li>
</ul><h3>النظائر</h3><ul>
<li class="tidylist"><b>مفعل</b>
هذا هو عدد النظائر التي تم إرسال أو تلقيها رسالة في الدقائق القليلة الماضية.
@@ -65,7 +65,7 @@ The full hash is shown on your <a href="netdb.jsp?r=.">صفحة معلومات
</li>
</ul><h3>سرعة الاتصال الداخلي/خارجي</h3><div align="justify">
السرعة ب بايت في الثانية
غير السرعة في <a href="config.jsp#help">صفحة الاعدادات</a>.
غير السرعة في <a href="confignet#help">صفحة الاعدادات</a>.
السرعة <a href="graphs.jsp">مرسومة</a> </div>
<h3>الوجهات الداخلية</h3><div align="justify">
الاتصالات الداخلية
@@ -82,7 +82,7 @@ The full hash is shown on your <a href="netdb.jsp?r=.">صفحة معلومات
<li class="tidylist"><b>المشاركة</b>
الأنفاق المنشئة من طرف موجهات أخرى عبر موجهك.
هذا ينبني على درجة استخدام الشبكة، مقدار المشاركة...
يمكنك تغيير درجة المشاركة بـ <a href="config.jsp#help">صفحة الاعدادات</a>.
يمكنك تغيير درجة المشاركة بـ <a href="confignet#help">صفحة الاعدادات</a>.
You may also limit the total number by setting <tt>router.maxParticipatingTunnels=nnn</tt> on
the <a href="configadvanced.jsp">صفحة الاعدادات المتقدمة</a>. <a href="configstats.jsp#tunnel.participatingTunnels">[تفعيل الرسم البياني]</a>.</li>
<li class="tidylist"><b>نسبة المشاركة</b>

View File

@@ -37,14 +37,13 @@ La version d'I2P qui vous affiche actuellement cette page.</li>
Indique depuis combien de temps le routeur tourne.</li>
<li class="tidylist"><b>Réseau:</b>
Statut de joignabilité du routeur par les autres routeurs.
Plus d'infos sur la page de <a href="config.jsp#help">configuration</a>.
Plus d'infos sur la page de <a href="confignet#help">configuration</a>.
</li></ul><h3>Pairs</h3><ul>
<li class="tidylist"><b>Actifs:</b>
le premier nombre est celui des routeurs avec qui le votre a communiqué dans les dernières minutes. Ça peut varier de
8-10 à plusieurs centaines, selon votre bande passante et son rapport de partage, et le trafic généré localement. Le
second est celui des pairs vus dans les dernières heures. Ces nombres penvent varier sensiblement sans conséquence.
<a href="configstats.jsp#router.activePeers">[Activer le graphique]</a> (activer auparavant "toutes
les statistiques").</li>
<a href="configstats.jsp#router.activePeers">[Activer le graphique]</a></li>
<li class="tidylist"><b>Rapides:</b>
le nombre de pairs que vous mettez à contribution pour construire vos tunnels clients. En général dans une tranche de
8 à 30. Vos pairs rapides sont détaillés sur la page <a href="profiles.jsp">profils</a>.
@@ -53,8 +52,7 @@ le nombre de pairs que vous mettez à contribution pour construire vos tunnels c
nombre des pairs que vous utilisez pour construire quelques uns de vos tunnels exploratoires. Habituellement de 8 à 75.
Les pairs rapides font partie du groupe des "Hautes capacités". Vos pairs à hautes capacités sont aussi listés sur
la page <a href="profiles.jsp">profils</a>.
<a href="configstats.jsp#router.highCapacityPeers">[Activer le graphique]</a> (activer auparavant "toutes les
statistiques").</li>
<a href="configstats.jsp#router.highCapacityPeers">[Activer le graphique]</a></li>
<li class="tidylist"><b>Bien intégrés:</b>
vous utilisez ce groupe pour vos requêtes à la base de données du réseau. Ils sont souvent des pairs de remplissage par
diffusion ("floodfill"). Vos pairs "bien intégrés" sont affichés en bas de la même page
@@ -65,7 +63,7 @@ taille totale du réseau; il varie en fonction de votre bande passante totale et
local. I2P n'a pas besoin que chaque routeur connaisse tous les autres.
</li></ul><h3>Bande passante entrée/sortie</h3><div align="justify">
Ça parle tout seul. Toutes les valeurs sont en octets par seconde (o/s), pas en bits par seconde (b/s). Modifiez vos
limites de bande passante sur la page de <a href="config.jsp#help">configuration</a>.
limites de bande passante sur la page de <a href="confignet#help">configuration</a>.
Le <a href="graphs.jsp">graphique de bande passante</a> est activé par défaut.</div>
<h3>Destinations locales</h3><div align="justify">
@@ -80,7 +78,7 @@ pairs diffuseurs pour la création des nouveaux tunnels et le test des tunnels e
<li class="tidylist"><b>Participants:</b> les tunnels créés par d'autres routeurs et qui passent par le votre. Leur
nombre dépend largement de la demande du réseau, de votre part de bande passante partagée, et du trafic local.
La méthode recommandée pour limiter leur nombre est de diminuer le rapport de bande passante partagée dans la
<a href="config.jsp#help">configuration</a>. Vous pouvez également limiter ce nombre en définissant la variable
<a href="confignet#help">configuration</a>. Vous pouvez également limiter ce nombre en définissant la variable
<tt>router.maxParticipatingTunnels=nnn</tt> dans la <a href="configadvanced.jsp">configuration avancée</a>.
<a href="configstats.jsp#tunnel.participatingTunnels">[Activer le graphique]</a>.</li>
<li class="tidylist"><b>Rapport de partage:</b> le nombre de tunnels participants que vous routez pour les autres,

View File

@@ -39,7 +39,7 @@ De versie van de I2P software die je nu gebruikt.</li>
Hoe lang je I2P router al draait.</li>
<li class="tidylist"><b>Netwerk Bereikbaarheid:</b>
De bereikbaarheid van je router door andere routers.
Meer informatie is te vinden op de <a href="config.jsp#help">configuratie pagina</a>.</li>
Meer informatie is te vinden op de <a href="confignet#help">configuratie pagina</a>.</li>
</ul>
<h3>Peers</h3><ul>
@@ -78,7 +78,7 @@ Voor I2P is het niet nodig dat een router alle andere routers kent.
<h3>Bandbreedte in/out</h3><div align="justify">
Dit zou zichzelf moeten verklaren. Alle waarden zijn in bytes per seconde, niet in bits per seconde.
Wijzig je bandbreedte limieten op de <a href="config.jsp#help">configuratie pagina</a>.
Wijzig je bandbreedte limieten op de <a href="confignet#help">configuratie pagina</a>.
Bandbreedte wordt standaard <a href="graphs.jsp">geplot</a>.</div>
<h3>Tunnels</h3><div align="justify">
@@ -93,7 +93,7 @@ Tunnels gebouwd door andere routers die door je eigen router heen lopen.
Dit kan erg vari&euml;ren afhankelijk van de vraag vanuit het netwerk,
je gedeelde bandbreedte en hoeveelheid lokaal gegenereerd verkeer.
De aanbevolen methode om het aantal deelnemende tunnels te beperken
is door het share percentage te wijzigen op de <a href="config.jsp#help">configuratie pagina</a>.
is door het share percentage te wijzigen op de <a href="confignet#help">configuratie pagina</a>.
Je kan het totale aantal ook beperken met de instelling <tt>router.maxParticipatingTunnels=nnn</tt> op
de <a href="configadvanced.jsp">geavanceerde configuratie pagina</a>. <a href="configstats.jsp#tunnel.participatingTunnels">[Grafieken inschakelen]</a>.</li>
<li class="tidylist"><b>Share rato:</b>

View File

@@ -45,7 +45,7 @@
</li>
<li class="tidylist"><b>Доступность:</b>
Результат проверки Вашим маршрутизатором, насколько он открыт для входящих соединений от маршрутизаторов других пользователей. Подробнее смотрите на <a href="config.jsp#help">странице сетевых настроек</a>.
Результат проверки Вашим маршрутизатором, насколько он открыт для входящих соединений от маршрутизаторов других пользователей. Подробнее смотрите на <a href="confignet#help">странице сетевых настроек</a>.
</li>
</ul>
@@ -100,7 +100,7 @@
</li>
<li class="tidylist"><b>Транзитные:</b>
Туннели, построенные другими маршрутизаторами, проходящие через Ваш маршрутизатор. Их количество может сильно варьироваться в зависимости от потребностей сети, настроенной доли транзитного трафика и объема локально создаваемого трафика. Рекомендуемый способ ограничения количества транзитных туннелей — настроить долю транзитного трафика на странице <a href="config.jsp#help">сетевых настроек</a>. Также можно задать точный ограничитель количества через параметр <tt>router.maxParticipatingTunnels=nnn</tt> на странице <a href="configadvanced.jsp">дополнительных настроек</a>.
Туннели, построенные другими маршрутизаторами, проходящие через Ваш маршрутизатор. Их количество может сильно варьироваться в зависимости от потребностей сети, настроенной доли транзитного трафика и объема локально создаваемого трафика. Рекомендуемый способ ограничения количества транзитных туннелей — настроить долю транзитного трафика на странице <a href="confignet#help">сетевых настроек</a>. Также можно задать точный ограничитель количества через параметр <tt>router.maxParticipatingTunnels=nnn</tt> на странице <a href="configadvanced.jsp">дополнительных настроек</a>.
<a href="configstats.jsp#tunnel.participatingTunnels">[Включить построение графика]</a>.
</li>

View File

@@ -18,39 +18,46 @@
<div class="news" id="news">
<jsp:useBean class="net.i2p.router.web.NewsHelper" id="newshelper" scope="request" />
<jsp:setProperty name="newshelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<% java.io.File fpath = new java.io.File(net.i2p.I2PAppContext.getGlobalContext().getRouterDir(), "docs/news.xml"); %>
<%
if (newshelper.shouldShowNews()) {
java.io.File fpath = new java.io.File(net.i2p.I2PAppContext.getGlobalContext().getRouterDir(), "docs/news.xml");
%>
<jsp:setProperty name="newshelper" property="page" value="<%=fpath.getAbsolutePath()%>" />
<jsp:setProperty name="newshelper" property="maxLines" value="300" />
<jsp:getProperty name="newshelper" property="content" />
<hr>
<%
} // shouldShowNews()
%>
<jsp:useBean class="net.i2p.router.web.ConfigUpdateHelper" id="updatehelper" scope="request" />
<jsp:setProperty name="updatehelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<hr><i><jsp:getProperty name="updatehelper" property="newsStatus" /></i><br>
<jsp:getProperty name="updatehelper" property="newsStatus" /><br>
</div><div class="main" id="main">
<jsp:useBean class="net.i2p.router.web.ContentHelper" id="contenthelper" scope="request" />
<div class="welcome">
<div class="langbox">
<a href="/?lang=en&amp;consoleNonce=<%=consoleNonce%>"><img style="padding: 0 2px;" src="/flags.jsp?c=us" title="English" alt="English"></a>
<a href="/?lang=ar&amp;consoleNonce=<%=consoleNonce%>"><img style="padding: 0 2px;" src="/flags.jsp?c=lang_ar" title="عربية" alt="عربية"></a>
<a href="/?lang=zh&amp;consoleNonce=<%=consoleNonce%>"><img style="padding: 0 2px;" src="/flags.jsp?c=cn" title="中文" alt="中文"></a>
<a href="/?lang=da&amp;consoleNonce=<%=consoleNonce%>"><img style="padding: 0 2px;" src="/flags.jsp?c=dk" title="Danish" alt="Danish"></a>
<a href="/?lang=de&amp;consoleNonce=<%=consoleNonce%>"><img style="padding: 0 2px;" src="/flags.jsp?c=de" title="Deutsch" alt="Deutsch"></a>
<a href="/?lang=es&amp;consoleNonce=<%=consoleNonce%>"><img style="padding: 0 2px;" src="/flags.jsp?c=es" title="Español" alt="Español"></a>
<a href="/?lang=fi&amp;consoleNonce=<%=consoleNonce%>"><img style="padding: 0 2px;" src="/flags.jsp?c=fi" title="Suomi" alt="Suomi"></a>
<a href="/?lang=fr&amp;consoleNonce=<%=consoleNonce%>"><img style="padding: 0 2px;" src="/flags.jsp?c=fr" title="Français" alt="Français"></a><br/>
<a href="/?lang=it&amp;consoleNonce=<%=consoleNonce%>"><img style="padding: 0 2px;" src="/flags.jsp?c=it" title="Italiano" alt="Italiano"></a>
<a href="/?lang=nl&amp;consoleNonce=<%=consoleNonce%>"><img style="padding: 0 2px;" src="/flags.jsp?c=nl" title="Nederlands" alt="Nederlands"></a>
<a href="/?lang=pl&amp;consoleNonce=<%=consoleNonce%>"><img style="padding: 0 2px;" src="/flags.jsp?c=pl" title="Polski" alt="Polski"></a>
<a href="/?lang=pt&amp;consoleNonce=<%=consoleNonce%>"><img style="padding: 0 2px;" src="/flags.jsp?c=pt" title="Português" alt="Português"></a>
<a href="/?lang=ru&amp;consoleNonce=<%=consoleNonce%>"><img style="padding: 0 2px;" src="/flags.jsp?c=ru" title="Русский" alt="Русский"></a>
<a href="/?lang=sv&amp;consoleNonce=<%=consoleNonce%>"><img style="padding: 0 2px;" src="/flags.jsp?c=se" title="Svenska" alt="Svenska"></a>
<a href="/?lang=uk&amp;consoleNonce=<%=consoleNonce%>"><img style="padding: 0 2px;" src="/flags.jsp?c=ua" title="Ukrainian" alt="Ukrainian"></a>
<a href="/?lang=vi&amp;consoleNonce=<%=consoleNonce%>"><img style="padding: 0 2px;" src="/flags.jsp?c=vn" title="Tiếng Việt" alt="Tiếng Việt"></a>
<a href="/?lang=en&amp;consoleNonce=<%=consoleNonce%>"><img height="11" width="16" style="padding: 0 2px;" src="/flags.jsp?c=us" title="English" alt="English"></a>
<a href="/?lang=ar&amp;consoleNonce=<%=consoleNonce%>"><img height="11" width="16" style="padding: 0 2px;" src="/flags.jsp?c=lang_ar" title="عربية" alt="عربية"></a>
<a href="/?lang=zh&amp;consoleNonce=<%=consoleNonce%>"><img height="11" width="16" style="padding: 0 2px;" src="/flags.jsp?c=cn" title="中文" alt="中文"></a>
<a href="/?lang=da&amp;consoleNonce=<%=consoleNonce%>"><img height="11" width="16" style="padding: 0 2px;" src="/flags.jsp?c=dk" title="Danish" alt="Danish"></a>
<a href="/?lang=de&amp;consoleNonce=<%=consoleNonce%>"><img height="11" width="16" style="padding: 0 2px;" src="/flags.jsp?c=de" title="Deutsch" alt="Deutsch"></a>
<a href="/?lang=ee&amp;consoleNonce=<%=consoleNonce%>"><img height="11" width="16" style="padding: 0 2px;" src="/flags.jsp?c=ee" title="Eesti" alt="Eesti"></a>
<a href="/?lang=es&amp;consoleNonce=<%=consoleNonce%>"><img height="11" width="16" style="padding: 0 2px;" src="/flags.jsp?c=es" title="Español" alt="Español"></a>
<a href="/?lang=fi&amp;consoleNonce=<%=consoleNonce%>"><img height="11" width="16" style="padding: 0 2px;" src="/flags.jsp?c=fi" title="Suomi" alt="Suomi"></a>
<a href="/?lang=fr&amp;consoleNonce=<%=consoleNonce%>"><img height="11" width="16" style="padding: 0 2px;" src="/flags.jsp?c=fr" title="Français" alt="Français"></a><br>
<a href="/?lang=it&amp;consoleNonce=<%=consoleNonce%>"><img height="11" width="16" style="padding: 0 2px;" src="/flags.jsp?c=it" title="Italiano" alt="Italiano"></a>
<a href="/?lang=nl&amp;consoleNonce=<%=consoleNonce%>"><img height="11" width="16" style="padding: 0 2px;" src="/flags.jsp?c=nl" title="Nederlands" alt="Nederlands"></a>
<a href="/?lang=pl&amp;consoleNonce=<%=consoleNonce%>"><img height="11" width="16" style="padding: 0 2px;" src="/flags.jsp?c=pl" title="Polski" alt="Polski"></a>
<a href="/?lang=pt&amp;consoleNonce=<%=consoleNonce%>"><img height="11" width="16" style="padding: 0 2px;" src="/flags.jsp?c=pt" title="Português" alt="Português"></a>
<a href="/?lang=ru&amp;consoleNonce=<%=consoleNonce%>"><img height="11" width="16" style="padding: 0 2px;" src="/flags.jsp?c=ru" title="Русский" alt="Русский"></a>
<a href="/?lang=sv&amp;consoleNonce=<%=consoleNonce%>"><img height="11" width="16" style="padding: 0 2px;" src="/flags.jsp?c=se" title="Svenska" alt="Svenska"></a>
<a href="/?lang=uk&amp;consoleNonce=<%=consoleNonce%>"><img height="11" width="16" style="padding: 0 2px;" src="/flags.jsp?c=ua" title="Ukrainian" alt="Ukrainian"></a>
<a href="/?lang=vi&amp;consoleNonce=<%=consoleNonce%>"><img height="11" width="16" style="padding: 0 2px;" src="/flags.jsp?c=vn" title="Tiếng Việt" alt="Tiếng Việt"></a>
</div>
<a name="top"></a>
<h2><%=intl._("Welcome to I2P")%></h2>
</div>
<% fpath = new java.io.File(net.i2p.I2PAppContext.getGlobalContext().getBaseDir(), "docs/readme.html"); %>
<% java.io.File fpath = new java.io.File(net.i2p.I2PAppContext.getGlobalContext().getBaseDir(), "docs/readme.html"); %>
<jsp:setProperty name="contenthelper" property="page" value="<%=fpath.getAbsolutePath()%>" />
<jsp:setProperty name="contenthelper" property="maxLines" value="300" />
<jsp:setProperty name="contenthelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />

View File

@@ -21,13 +21,15 @@
<b>I2P version:</b> <%=net.i2p.router.RouterVersion.FULL_VERSION%><br>
<b>Java version:</b> <%=System.getProperty("java.vendor")%> <%=System.getProperty("java.version")%> (<%=System.getProperty("java.runtime.name")%> <%=System.getProperty("java.runtime.version")%>)<br>
<b>Wrapper version:</b> <%=System.getProperty("wrapper.version", "none")%><br>
<jsp:useBean class="net.i2p.router.web.LogsHelper" id="logsHelper" scope="request" />
<jsp:setProperty name="logsHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<b>Server version:</b> <jsp:getProperty name="logsHelper" property="jettyVersion" /><br>
<b>Platform:</b> <%=System.getProperty("os.name")%> <%=System.getProperty("os.arch")%> <%=System.getProperty("os.version")%><br>
<b>Processor:</b> <%=net.i2p.util.NativeBigInteger.cpuModel()%> (<%=net.i2p.util.NativeBigInteger.cpuType()%>)<br>
<b>Jbigi:</b> <%=net.i2p.util.NativeBigInteger.loadStatus()%><br>
<b>Encoding:</b> <%=System.getProperty("file.encoding")%></p>
<b>Encoding:</b> <%=System.getProperty("file.encoding")%><br>
<b>Charset:</b> <%=java.nio.charset.Charset.defaultCharset().name()%></p>
<p><%=intl._("Note that system information, log timestamps, and log messages may provide clues to your location; please review everything you include in a bug report.")%></p>
<jsp:useBean class="net.i2p.router.web.LogsHelper" id="logsHelper" scope="request" />
<jsp:setProperty name="logsHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<h3><%=intl._("Critical Logs")%></h3><a name="criticallogs"> </a>
<jsp:getProperty name="logsHelper" property="criticalLogs" />
<h3><%=intl._("Router Logs")%> (<a href="configlogging"><%=intl._("configure")%></a>)</h3>

View File

@@ -38,16 +38,16 @@
} else if (allowIFrame) {
// since we don't have an iframe this will reload the base page, and
// the new delay will be passed to the iframe above
out.print("<div class=\"refresh\"><form action=\"" + request.getRequestURI() + "\" method=\"POST\">\n");
out.print("<b>");
out.print("<div class=\"refresh\"><form action=\"" + request.getRequestURI() + "\" method=\"POST\">\n" +
"<b>");
// We have intl defined when this is included, but not when compiled standalone.
out.print(intl._("Refresh (s)"));
out.print(":</b> <input size=\"3\" type=\"text\" name=\"refresh\" value=\"60\" >\n");
out.print("<button type=\"submit\" value=\"Enable\" >");
out.print(":</b> <input size=\"3\" type=\"text\" name=\"refresh\" value=\"60\" >\n" +
"<button type=\"submit\" value=\"Enable\" >");
// ditto
out.print(intl._("Enable"));
out.print("</button>\n");
out.print("</form></div></div>\n");
out.print("</button>\n" +
"</form></div></div>\n");
} else {
out.print("</div>\n");
}

View File

@@ -32,7 +32,8 @@
// doesn't work for restart or shutdown with no expl. tunnels,
// since the call to ConfigRestartBean.renderStatus() hasn't happened yet...
// So we delay slightly
if ("restart".equalsIgnoreCase(action) || "shutdown".equalsIgnoreCase(action)) {
if (action != null &&
("restart".equals(action.toLowerCase(java.util.Locale.US)) || "shutdown".equals(action.toLowerCase(java.util.Locale.US)))) {
synchronized(this) {
try {
wait(1000);

View File

@@ -3279,7 +3279,7 @@ msgid "Anonymous webmail client"
msgstr "بريد الكتروني مجهول"
#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:77
msgid "Webmail"
msgid "Email"
msgstr "بريد الكتروني"
#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:81
@@ -3419,7 +3419,7 @@ msgid "Help with firewall configuration"
msgstr "مساعدة خول اعدادات الجدار الناري"
#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:310
msgid "Check NAT/firewall"
msgid "Check network connection and NAT/firewall"
msgstr "تأكد من NAT/جدار ناري"
#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:330
@@ -4794,7 +4794,7 @@ msgid "Configure I2P Logging Options"
msgstr "اعدادت السجلات I2P"
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:303
msgid "Logging filename"
msgid "Log file"
msgstr "ملف السجل"
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:307

View File

@@ -3559,8 +3559,8 @@ msgid "Anonymous webmail client"
msgstr "Anonym webmail klient"
#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:77
msgid "Webmail"
msgstr "Webmail"
msgid "Email"
msgstr "Email"
#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:81
msgid "Anonymous resident webserver"
@@ -3708,7 +3708,7 @@ msgid "Help with firewall configuration"
msgstr "Hjælp med konfiguration af firewall"
#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:307
msgid "Check NAT/firewall"
msgid "Check network connection and NAT/firewall"
msgstr "Tjek NAT/firewall"
#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:327
@@ -5319,7 +5319,7 @@ msgid "Configure I2P Logging Options"
msgstr "Konfigurer I2P logging indstillinger"
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:321
msgid "Logging filename"
msgid "Log file"
msgstr "Logging filnavn"
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:325

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More