Compare commits

...

125 Commits

Author SHA1 Message Date
zzz
90cd68900e 0.9.12 2014-03-31 12:43:15 +00:00
zzz
3f865edb4f Convert pt_BR getopt translation from ISO-8859-15 to escaped UTF-8 2014-03-31 12:36:50 +00:00
kytv
2e8681de2c getopt translations 2014-03-28 20:23:53 +00:00
zzz
2d85b98c20 * i2ptunnel.config: Remove irc.freshcoffee.i2p
* NetDbRenderer: Adjust debug floodfill estimate
 * StatManager: Don't start thread for an empty config
 * StatisticsManager: Don't publish client tunnel stats
 * Log tweaks
2014-03-28 14:01:39 +00:00
kytv
d28d6efb79 geoip updates 2014-03-28 12:21:52 +00:00
kytv
43d84a5f07 fr, nb, and ru translation updates 2014-03-28 12:21:32 +00:00
kytv
e4d57f62bb merge of '1202f5d3645add930a96dfa77cd2b2ebfb56ca95'
and '5c131297d763f8953029fea257681d55f2103aaa'
2014-03-24 11:57:46 +00:00
kytv
a974268e7b postinstall: fix freebsd x86 wrapper path
Spotted in the FreeBSD Port (http://svnweb.freebsd.org/ports/head/security/i2p/files/patch-installer__resources__postinstall.sh?view=markup)
2014-03-24 11:57:04 +00:00
zzz
1695af7011 belated jisko.i2p 2014-03-23 20:44:47 +00:00
kytv
682c4cd0b8 remove extraneous '>' from editServer 2014-03-23 18:33:29 +00:00
str4d
0f6d039391 Console: Handle stopping plugin ClientApps 2014-03-23 10:55:00 +00:00
kytv
d6233a8798 add *.torrent to .gitignore 2014-03-21 11:35:37 +00:00
kytv
4f12e81dbb build: add -pre-release target, add addt'l files to distclean
Moving the pre-release checks to a new target (to be run at the very start of
"release")
2014-03-21 11:35:04 +00:00
kytv
ab612d0088 cleanup of *clean targets, remove more generated files in distclean 2014-03-19 22:00:43 +00:00
kytv
3fa7bb9dc5 mtn-ignore: ignore .torrent 2014-03-19 21:59:27 +00:00
kytv
22b3d4d70b translation updates 2014-03-16 23:56:43 +00:00
zzz
bd6c588c74 * SSU: Fix corruption of introducer keys 2014-03-16 18:27:46 +00:00
zzz
6c202e8f1d fix router identity test broken by previous checkin 2014-03-15 19:40:41 +00:00
zzz
24e6750529 * Certificate: Fix null cert hash code
* Hash: Cleanup of cached hash
* NetDB: Randomize returned DSM timestamp
2014-03-15 18:43:42 +00:00
kytv
af7ce8e18e remove extraneous <a> tag
(fixing my mistake)
2014-03-15 13:47:53 +00:00
zzz
c73f0eeeb5 more Jetty classpath cleanup 2014-03-13 13:58:50 +00:00
zzz
c68769cf7f MultiMap: Cleanups, javadocs after review 2014-03-13 13:57:10 +00:00
zzz
3e639a319d SAM:
- Classes static/private
 - Fields private/final
 - Remove unused fields
 - Remove shadowing fields
 - Remove dup method overrides
 - Remove static Logs
 - Remove unnecessary field initialization
 - Atomics
 - Findbugs
2014-03-13 12:22:04 +00:00
zzz
1bbb79f5b1 log tweaks 2014-03-13 12:17:34 +00:00
kytv
84e6991374 Add .su3 to .mtn-ignore, create new .gitignore file 2014-03-13 11:27:37 +00:00
kytv
5d1796bb6f Debian: Remove service directory when package is purged
This was in the 0.9.11 packages but not checked into mtn.
2014-03-13 02:31:23 +00:00
kytv
bfba732f76 Debian: Add systemd support (ticket #1208)
Currently just for Debian unstable and Ubuntu Saucy and newer.
2014-03-13 02:29:41 +00:00
zzz
738c5ed14e Streaming: Workaround for jwebcache and i2phex (ticket #1231) 2014-03-12 16:02:23 +00:00
zzz
beed080390 anoncoin.i2p 2014-03-12 15:21:17 +00:00
zzz
3624d66c12 send message on HTTP Server OOM 2014-03-12 15:18:41 +00:00
zzz
2cca2781fd * Streaming: Track recently closed connections (ticket #1161)
Consolidate and synchronize code for selecting a random stream ID
2014-03-12 12:39:53 +00:00
zzz
31d485299c log tweak 2014-03-12 12:36:00 +00:00
zzz
a39f667c2f set BAOS size 2014-03-12 12:35:29 +00:00
zzz
5283fc923e * Wrapper: Fix failed restarts on ARM (ticket #1230);
extend shutdown timeouts for all archs.
2014-03-12 12:33:36 +00:00
zzz
c57552f4e9 * Console: Handle ISO-639-2 language codes (ticket #1229) 2014-03-12 12:29:38 +00:00
zzz
96b4c6b219 findbugs sam/bob 2014-03-12 12:27:23 +00:00
zzz
51911bd9a8 fix jetty deprecations 2014-03-12 12:25:30 +00:00
zzz
1f5926e4e9 * PeerManager: Restore profileOrganizer.sameCountryBonus advanced config,
inadvertently removed in 0.9.10
2014-03-08 16:03:35 +00:00
zzz
d6a02a13ad * Router:
- Look for DeliveryStatusMessages beyond the message expiration,
     so we don't throw out a tagset that gets acked late
   - Allow re-adding of a "failed" tagset to the SKM
   - Extend max message age in MessageValidator
   - Remove unused and confusing timeout param when registering a selector
   - Log tweaks, javadocs, cleanups
2014-03-07 14:17:11 +00:00
str4d
e282491798 merge of '10a291d2283174a7527515a7448d220d5023ffc0'
and '6ace0f7ffbda402db7e1af21a74ca29ad54829c2'
2014-03-07 08:35:12 +00:00
str4d
2b0dfed012 Fixed Android API version detection, load cacerts dir for API >= 14 2014-03-07 08:27:14 +00:00
zzz
9d80aff977 * GarlicClove, CloveSet, GarlicMessageParser:
- Cleanup, reduce object churn, comment out unused code
   - Limit max cloves to 32
2014-03-06 19:31:09 +00:00
zzz
a0724dc009 * Router: Encrypt DeliveryStatusMessages sent in garlics (ticket #1217) 2014-03-06 16:21:36 +00:00
zzz
8c820bb237 clean up build classpath (ticket #1165) 2014-03-06 06:03:58 +00:00
zzz
3fdc964eac javadoc fixes 2014-03-05 16:53:04 +00:00
zzz
597662d0dc * Transports: Don't send a duplicate store of our RI at
start of a connection (ticket #1187)
 * NTCP:
   - Lower send priority of the RI at exchange
   - Bob will now send his RI even if he doesn't have Alice's
   - Send RI again sooner on long-lived connections
2014-03-05 16:32:04 +00:00
str4d
17c80c29e6 Updated history.txt 2014-03-05 03:35:52 +00:00
str4d
5d0bfc63fa Updated readme.html files for new website paths 2014-03-05 03:34:53 +00:00
str4d
0c449f8b8e susimail: Removed remaining Jetty dependencies in susimail (ticket #1165)
Thanks for the patch, wockenfuss!
2014-03-05 03:02:08 +00:00
str4d
36b6baa33e Updated .mtn-ignore 2014-03-05 02:58:07 +00:00
str4d
2c049878c6 Enable addressbook.jar building (for I2P-Android) 2014-03-03 03:49:48 +00:00
zzz
81c58c1796 log tweak 2014-03-01 13:13:52 +00:00
zzz
36a3edf612 - DatabaseStoreMessage: Don't instantiate an ArrayList unless we need it
- Overrides in GarlicConfig/PGC for efficiency and clarity
 - Check for valid ID in DeliveryStatusMessage
 - Misc. log tweaks, javadocs, cleanups
2014-02-27 13:37:11 +00:00
zzz
4b6fd3d387 format tweak 2014-02-24 14:06:24 +00:00
zzz
f777696e14 finals, volatiles, cleanups 2014-02-24 14:02:48 +00:00
zzz
c9c181c14a * NetDB: Slow down router refresh after startup to reduce load
on exploratory tunnels
2014-02-24 14:01:35 +00:00
zzz
a62b7a4374 * Tunnels: Rate-limit connections at the OBEP (ticket #1134) 2014-02-24 14:00:39 +00:00
zzz
9d7a9c9895 * NTCP:
- Add check for replayed session requests (ticket #1212)
   - Disable inbound check connection
   - Reduce object churn in EstablishmentManager
   - Don't pollute Hash cache in EstablishmentManager
   - addRateData() cleanup
2014-02-24 13:54:52 +00:00
zzz
5d6a1c5e35 reduce log level 2014-02-24 13:52:44 +00:00
zzz
c48266fdc4 * Transports: Use SigUtil.rectify() in DH 2014-02-24 13:51:20 +00:00
zzz
895d54d36d minor cleanup 2014-02-24 13:46:07 +00:00
dg2-new
ba0e1a3aa9 * I2PTunnel: add 'irc.dg.i2p' to the default IRC2P tunnel (for more information, see http://echelon.i2p/docs/IRC2p/irc2p_userguide.txt) 2014-02-23 21:38:12 +00:00
kytv
6ec665db50 Br. Portugese, French, Japanese, Polish translation updates 2014-02-23 16:54:49 +00:00
kytv
7f4c52cf42 remove #i2p-help from initialNews 2014-02-23 16:40:28 +00:00
kytv
37728e38c9 (hopefully) langbox fixes 2014-02-22 23:58:25 +00:00
zzz
18b4a2427b * I2CP Client: Generate revocation key of same type as signing key
* i2ptunnel: Only offer Sig options that are available in the JVM
 * LeaseSet: Add check for SigTYpe mismatch
 * SigType: Add isAvailable()
2014-02-21 17:47:30 +00:00
zzz
3102970540 * RouterAddress: Restore storage of expiration and use in signature
calculation, broken in 0.9.3, in anticipation of using it someday
2014-02-21 14:57:28 +00:00
zzz
c679091afd target build property 2014-02-21 13:59:27 +00:00
zzz
91cdf85772 * Router: Allow null args to main() (broke Android) 2014-02-20 14:08:05 +00:00
zzz
aab8b10adf * i2ptunnel: Add inproxy block option to HTTP server 2014-02-20 14:07:02 +00:00
kytv
5bcfe1ec72 don't link to docs.i2p2.de in the router console
docs.i2p2.de was last updated in October of 2010!
2014-02-18 19:51:35 +00:00
zzz
4209c291ba * history for prop, -9 (ticket #1090) 2014-02-17 14:18:18 +00:00
zzz
7c5dc7fa55 propagate from branch 'i2p.i2p.zzz.jetty8' (head 0a03ce60906c508b08cc84b3044954844a6ee157)
to branch 'i2p.i2p' (head d99392e09883a92b99a316b4deed0586dcf4ea5b)
2014-02-17 14:01:13 +00:00
zzz
c6dfb8744a Jetty 8.1.14 jars 2014-02-17 13:58:19 +00:00
zzz
6e0ca92041 * getopt fix for PrivateKeyFile -t sigtype, busted in prop
* history for prop, -8
2014-02-17 13:39:32 +00:00
zzz
2f7eb56790 propagate from branch 'i2p.i2p.zzz.ecdsa' (head e83bcdc842f5995d310a4295147f9326a993e010)
to branch 'i2p.i2p' (head 4983f716f8740bc7ddfae5561a562a0d42a815ae)
2014-02-17 13:29:41 +00:00
zzz
8c98ef7328 update version 2014-02-17 13:14:23 +00:00
zzz
45997fd1d5 * SSU:
- Restrict authentication with Bob's intro key to session created packet
2014-02-17 13:05:17 +00:00
zzz
6a3e5ec620 * SSU:
- Use session key for relay request/response if available (ticket #1206)
   - Remove packetAuthTime stats
   - Misc. cleanups and logging
2014-02-17 12:56:08 +00:00
zzz
18cbf3d253 * HMAC:
- Replace BC MD5 with JVM version, refactor I2PHMAC to use
     MessageDigest instead of BC Digest (ticket #1189)
   - Use JVM HmacSHA256 instead of I2PHMAC for Syndie since it is standard
2014-02-17 12:03:22 +00:00
zzz
4df6a6f47b min java version for izpack 2014-02-16 22:31:17 +00:00
HungryHobo
5542406f3d Merge pull request from https://github.com/i2p/i2p.i2p/pull/1 2014-02-16 11:28:48 +00:00
zzz
a9fceae181 * I2CP:
- Add session limit, add new status code for refused
   - Ramdomize session ID, prevent dups
   - Make session IDs immutable
2014-02-14 17:05:32 +00:00
zzz
c79ff0dc09 minor cleanups 2014-02-14 17:02:14 +00:00
zzz
e2fc5c6957 * Tunnels: Change expl. OB default to 3+0 2014-02-13 15:46:34 +00:00
zzz
5667a6647f * Router: Convert to getopt (ticket #1173) 2014-02-13 14:43:23 +00:00
zzz
b70d616083 update links 2014-02-12 23:06:30 +00:00
kytv
75fa2b1809 typo fix 2014-02-12 21:38:42 +00:00
zzz
66d9017d58 fix PingTest 2014-02-11 19:45:52 +00:00
kytv
53efb7119a merge of '12c51adcf9862cc57488b27ec00002b1bb399294'
and 'b870e2fda1291f95ae4e6e35cc5ded300578d92b'
2014-02-11 14:15:35 +00:00
kytv
8b946bb56b Remove mention of Pebble in the router console for reasons noted in ticket #865 2014-02-11 14:15:04 +00:00
zzz
8ed34e3edf * HTTP client proxy: Don't flush after headers for a POST,
so the POST data is included in the SYN packet,
   to improve speed and reliability of small POSTs
2014-02-11 13:44:37 +00:00
kytv
d8fef53aef i2prouter: - note FBSD10 workaround in ticket #1118
- remove tanuki's script version checks
2014-02-11 01:54:45 +00:00
zzz
6af82f2a9a history for prop, -2 2014-02-10 20:32:20 +00:00
zzz
36b2547ca4 propagate from branch 'i2p.i2p.zzz.test2' (head 7db2f2b73bc7c44b4be1077185314201c5b0bfe6)
to branch 'i2p.i2p' (head ea9844ecc27e816a09cf5d9b36c10ee2c3d1bcc9)
2014-02-10 18:46:38 +00:00
zzz
72e96cdd23 remove concatentation within appends 2014-02-10 18:33:32 +00:00
zzz
a2ba9bbdb1 * Checklist updates
* Console:
   - Don't reset graph settings when clicking restart or shutdown on graphs page
   - Don't recommend guest login on trac, it's disabled
   - Catch and remove corrupt jrb file (ticket #1186)
   - Always set default language on /configui
 * Readme: Update links
 * Transports: Reduce target connection count again to reduce
               tunnel reject rate further
2014-02-10 14:22:43 +00:00
echelon2
f6d9a6917f Removed a comment line from french translation 2014-02-09 20:27:42 +00:00
zzz
1956068698 * Addressbook:
- Rewrite subscriptions.txt to convert to new default URL
   - Static method call cleanups
2014-02-08 16:02:50 +00:00
zzz
855cae0a45 propagate from branch 'i2p.i2p' (head eac6caabd2ea6731ee27111f0dbadf5afcd3695b)
to branch 'i2p.i2p.zzz.test2' (head 911a8782667d878dd7a2976c7fb10d481d80e023)
2014-02-07 16:33:59 +00:00
zzz
ef3a12f01a * UpdateManager:
- Convert to RouterApp and remove update hooks from context
     (ticket #1185)
2014-02-07 15:40:23 +00:00
zzz
37bf750ab9 * I2PTunnel:
- Convert to getopt (ticket #1173)
   - Add more argument sanity checking
   - Add a usage output
2014-02-07 14:24:09 +00:00
zzz
9a01fdf57c * PrivateKeyFile:
- Convert to getopt (ticket #1173)
   - New option -e for hashcash effort, instead of -h with optional arg
   - Stub out -t option, to be propped from ecdsa branch
   Will require manual merge with ecdsa branch...
2014-02-06 15:30:03 +00:00
zzz
deec84713f * EepHead, PartialEepGet, SSLEepGet:
- Convert to getopt (ticket #1173)
 * EepHead, PartialEepGet:
   - New option -c for clearnet (no proxy), same as -p:0
   - New option -o, same as EepGet
   - Proxy option -p with host name arg only (no ':') now allowed
   - Add proxy auth support with -u and -x options (ticket #1173)
 * EepGet:
   - Catch error in -h option
   - Cleanups
2014-02-06 14:18:51 +00:00
zzz
0d028122a6 * EepGet:
- Support Digest proxy authentication(ticket #1173)
   - Move authentication parsing method from I2PTunnelHTTPClientBase
2014-02-06 01:29:46 +00:00
zzz
4998f86efe * EepGet:
- Convert to getopt (ticket #1173)
   - New option -c for clearnet (no proxy), same as -p:0
   - Proxy option -p with host name arg only (no ':') now allowed
   - Proxy password option is now -x, not the second arg to -u
   - Prompt for proxy password if not supplied in options
   - Line length option is now -l, not the second arg to -m
   - Error on nonproxied .onion hosts
   - Update man page, sort options (ticket #1173)
2014-02-05 16:10:56 +00:00
zzz
839bd51bc8 javadoc fix 2014-02-05 14:46:23 +00:00
zzz
936f2bb317 combine help strings 2014-02-04 14:32:36 +00:00
zzz
0cd774273c * I2Ping:
- Convert to getopt (ticket #1173)
   - Add support for from/to ports
2014-02-04 14:11:09 +00:00
zzz
fe391ff29f Convert all jars and wars to compile to 1.6 target,
except for the following which are used by android,
to maintain compatibility with very old phones, for now:

	addressbook.war
	BOB.jar
	i2p.jar
	i2ptunnel.jar
	mstreaming.jar
	router.jar
	streaming.jar
2014-02-03 23:59:48 +00:00
zzz
001b127258 * Jetty:
- Update to Jetty 8.x, Servlet 3.0, JSP 2.2
   - Require Java 6
   - Use Servlet and JSP jars from Jetty instead of Tomcat
   - Tomcat remains at 6.0.37 supporting Servlet 2.5 / JSP 2.1
   - Remove Jetty dependency in console error pages
   - Build files for Jetty 8.1.14
   - Doc updates
   - Delete Jetty 7.6.14
   - Jetty 8.1.14 not yet checked in,
     waiting to see if a new version is released soon,
     but build will download it for testing
2014-02-03 23:24:45 +00:00
zzz
7c00a5165f Build: Honor require.gettext=false for i2prouter translations 2014-02-03 20:43:02 +00:00
zzz
e1c3e2c1c7 * Getopt bundle fixes for Java Properties standard:
Fix comment lines
   Encoding conversion to UTF-8 with escapes
   Add unicode escapes for all chars over 0x7f
   Change Transifex type to PROPERTIES
   Also:
    - Remove BOMs
    - Remove \r
    - Remove blank lines
   Encodings were as follows:
     cs: marked ISO-8859-2
     pl: marked ISO-8859-2, possibly corrupt, ?? in two strings
     de, es, fr: marked ISO-8859-1
     hu: detected as ISO-8859-2
     it: apparently ISO-8859-1
     ja: Unicode escaped already
     nb, nl: ASCII
     ro: marked ISO-8859-2 but actually UTF-8
     zh: detected as GB2312 w/ CRLF
     zh_TW: UTF-8 w/ BOM w/ CRLF
2014-02-02 21:05:14 +00:00
zzz
e9b3577eec snark: cache PeerID.toString() 2014-02-02 17:19:06 +00:00
zzz
3622501471 * Streaming:
- Set ports on many packets that were missing them
   - Use connection throttling methods on pings too (ticket #1142)
   - Add methods to set ports on pings
   - Argument checking on ping methods
2014-02-02 16:47:29 +00:00
zzz
b7207fd29f Use getopt lib in SU3File (ticket #1173) 2014-02-02 15:14:00 +00:00
zzz
4dc1241d2f Add lightweight getopt command line parsing lib
(ticket #1173)
This is Java getopt 1.0.14 (released 2012/02/08)
Source was retrieved from https://github.com/arenn/java-getopt
Previous version 1.0.13 (released 2006/08/29)
is available at http://www.urbanophile.com/arenn/hacking/getopt/
Copyright (c) 1998 by Aaron M. Renn (arenn@urbanophile.com),
LGPL v2.
Include the small translation files, add to build.xml and to .tx/config
Fixes:
  Simplified Chinese
    MessagesBundle_chs.properties renamed to MessagesBundle_zh.properties
  Traditional Chinese
    MessagesBundle_cht.properties renamed to MessagesBundle_zh_TW.properties
  Norwegian Bokmaal
    MessagesBundle_no.properties renamed to MessagesBundle_nb.properties
2014-02-02 15:12:44 +00:00
zzz
2cacded182 datagram sigtype bugfix 2014-01-28 22:40:36 +00:00
zzz
ec22a1dafc - Only store LS with more than 6 leases to routers that support it 2014-01-28 22:35:33 +00:00
zzz
28575dbdae * Key certs:
- Hide setting in i2ptunnel edit pages unless advanced user
  - Only store LS with key certs to routers that support it
2014-01-28 14:21:54 +00:00
zzz
17e63b054c add sigtype to i2ptunnel client gui too 2014-01-05 16:38:39 +00:00
zzz
fba209ca7d restore method used by bote 2014-01-04 17:32:38 +00:00
zzz
41e071efe5 * Key cert GUI support:
- Add setting in i2ptunnel server edit page
  - Comment out cert setting on i2ptunnel server edit page
  - Show key type on susidns details page
  - Show key type on LS debug page
2014-01-03 15:31:08 +00:00
zzz
e8e239616f * Crypto: More implementation for key certs
- Support i2cp.destination.sigType option in TunnelController and
    I2PSocketManagerFactory
  - Fixup of Destination.create() and Destination.size()
  - Add generic off/len methods in DSAEngine, needed for streaming
  - Fixup of sign/verify in streaming Packet
  - Javadocs
2014-01-03 00:22:44 +00:00
zzz
5842e25205 Initial support for key certificates and arbitrary types and lengths
of signing keys and signatures in RouterIdentities and Destinations.
Untested, not even for regressions, except with command line
using PrivateKeyFile.
Based on preliminary spec at http://zzz.i2p/topics/1442?page=1#p7524
Not done:
 - Transport handshake signing
 - Configuration of default type
 - Specification of type in options to I2PSocketManagerFactory
 - Specification of type in i2ptunnel
 - Fix up caching of SigningPublicKey and P256 key cert
 - Any non-default crypto type in the key cert
 - Documentation
2013-12-24 16:41:05 +00:00
321 changed files with 11253 additions and 6229 deletions

47
.gitignore vendored Normal file
View File

@@ -0,0 +1,47 @@
# Just to try and prevent some noob disasters.
# Use git add -f foo.jar to ignore this ignore list
# generated release files
*.exe
*.[gx]z
*.bz2
*.[rwjt]ar
*.sig
*.su[d23]
*.deb
*.zip
*.torrent
*~
web-fragment.xml
web-out.xml
*.out
# Temporary/build dirs
build/
pkg-temp/
classes/
dist/
/installer/resources/locale/mo
/tmp
/apps/jetty/jettylib
*_jsp.java
*.class
# Debian-related
/debian/copyright
/debian/changelog
# Build property overrides
/override.properties
# Reporting
*.fba
sloccount.sc
/reports/
# Don't allow patches
*.(diff|patch)
# but allow debian/patches
!/debian/patches/*.(patch|diff)

View File

@@ -16,10 +16,12 @@ _jsp\.java$
\.sig$
\.sud$
\.su2$
.\su3$
\.tar$
\.war$
.\deb$
\.zip$
\.torrent$
^\.
~$
web-fragment.xml
@@ -31,7 +33,7 @@ web-out.xml
/build
/classes
/dist
/mo
^installer/resources/locale/mo
/tmp
^apps/jetty/jettylib

View File

@@ -242,6 +242,25 @@ trans.ru_RU = installer/resources/locale/po/messages_ru.po
trans.tr_TR = installer/resources/locale/po/messages_tr.po
trans.zh_CN = installer/resources/locale/po/messages_zh.po
[I2P.getopt]
source_file = core/java/src/gnu/getopt/MessagesBundle.properties
source_lang = en
type = PROPERTIES
trans.cs = core/java/src/gnu/getopt/MessagesBundle_cs.properties
trans.de = core/java/src/gnu/getopt/MessagesBundle_de.properties
trans.es = core/java/src/gnu/getopt/MessagesBundle_es.properties
trans.fr = core/java/src/gnu/getopt/MessagesBundle_fr.properties
trans.hu = core/java/src/gnu/getopt/MessagesBundle_hu.properties
trans.it = core/java/src/gnu/getopt/MessagesBundle_it.properties
trans.ja = core/java/src/gnu/getopt/MessagesBundle_ja.properties
trans.nl = core/java/src/gnu/getopt/MessagesBundle_nl.properties
trans.nb = core/java/src/gnu/getopt/MessagesBundle_nb.properties
trans.pl = core/java/src/gnu/getopt/MessagesBundle_pl.properties
trans.pt_BR = core/java/src/gnu/getopt/MessagesBundle_pt_BR.properties
trans.ro = core/java/src/gnu/getopt/MessagesBundle_ro.properties
trans.ru_RU = core/java/src/gnu/getopt/MessagesBundle_ru.properties
trans.zh_CN = core/java/src/gnu/getopt/MessagesBundle_zh.properties
[main]
host = https://www.transifex.com

View File

@@ -12,7 +12,7 @@ you may use:
to configure the router.
If you're having trouble, swing by http://forum.i2p/, check the
website at http://www.i2p2.de/, or get on irc://irc.freenode.net/#i2p
website at https://geti2p.net/, or get on irc://irc.freenode.net/#i2p
I2P will create and store files and configuration data in the user directory
~/.i2p/ on Linux and %APPDATA%\I2P\ on Windows. This directory is created
@@ -39,7 +39,10 @@ To uninstall I2P:
rm -rf $I2PInstallDir ~/.i2p
Supported JVMs:
Windows: Latest available from http://java.com/download (1.5+ supported)
Linux: Latest available from http://java.com/download (1.5+ supported)
FreeBSD: 1.5-compatible (NIO required)
Other operating systems and JVMs: See https://trac.i2p2.de/wiki/java
All platforms: Java 1.6 or higher required; 1.7 or higher recommended
Windows: OpenJDK or Oracle from http://java.com/download
Linux: OpenJDK or Oracle from http://java.com/download
FreeBSD: OpenJDK or Oracle from http://java.com/download
Raspberry Pi: Oracle 8 Early Access https://jdk8.java.net/download.html
PowerPC: IBM SDK 7 http://www.ibm.com/developerworks/java/jdk/linux/download.html
Other operating systems and JVMs: See https://trac.i2p2.de/wiki/java or https://geti2p.net/download

View File

@@ -36,7 +36,7 @@ Public domain except as listed below:
Copyright (c) 2003, TheCrypto
See licenses/LICENSE-ElGamalDSA.txt
SHA256 and HMAC-SHA256:
SHA256 and HMAC:
Copyright (c) 2000 - 2004 The Legion Of The Bouncy Castle
See licenses/LICENSE-SHA256.txt
@@ -76,6 +76,11 @@ Public domain except as listed below:
Copyright 2012 Hiroshi Nakamura <nahi@ruby-lang.org>
See licenses/LICENSE-Apache2.0.txt
Getopt:
Copyright (c) 1998 by Aaron M. Renn (arenn@urbanophile.com)
See licenses/LICENSE-LGPLv2.1.txt
Router (router.jar):
Public domain except as listed below:
UPnP.java:
@@ -177,7 +182,7 @@ Applications:
By welterde.
See licenses/LICENSE-GPLv2.txt
Jetty 7.6.14.v20131031:
Jetty 8.1.14.v20131031:
See licenses/ABOUT-Jetty.html
See licenses/NOTICE-Jetty.html
See licenses/LICENSE-Apache2.0.txt

View File

@@ -15,20 +15,20 @@ To build:
ant installer-osx
Run 'ant' with no arguments to see other build options.
See INSTALL.txt or http://www.i2p2.de/download.html for installation instructions.
See INSTALL.txt or https://geti2p.net/download for installation instructions.
Documentation:
http://www.i2p2.de/how
https://geti2p.net/how
API: run 'ant javadoc' then start at build/javadoc/index.html
Latest release:
http://www.i2p2.de/download
https://geti2p.net/download
To get development branch from source control:
http://www.i2p2.de/newdevelopers
https://geti2p.net/newdevelopers
FAQ:
http://www.i2p2.de/faq
https://geti2p.net/faq
Need help?
IRC irc.freenode.net #i2p

View File

@@ -221,15 +221,17 @@ public class BOB implements Runnable, ClientApp {
if (!cfg.isAbsolute()) {
cfg = new File(I2PAppContext.getGlobalContext().getConfigDir(), configLocation);
}
FileInputStream fi = null;
try {
FileInputStream fi = new FileInputStream(cfg);
fi = new FileInputStream(cfg);
props.load(fi);
fi.close();
} catch (FileNotFoundException fnfe) {
_log.warn("Unable to load up the BOB config file " + cfg.getAbsolutePath() + ", Using defaults.", fnfe);
save = true;
} catch (IOException ioe) {
_log.warn("IOException on BOB config file " + cfg.getAbsolutePath() + ", using defaults.", ioe);
} finally {
if (fi != null) try { fi.close(); } catch (IOException ioe) {}
}
}
// Global router and client API configurations that are missing are set to defaults here.
@@ -276,13 +278,15 @@ public class BOB implements Runnable, ClientApp {
if (!cfg.isAbsolute()) {
cfg = new File(I2PAppContext.getGlobalContext().getConfigDir(), configLocation);
}
FileOutputStream fo = null;
try {
_log.warn("Writing new defaults file " + cfg.getAbsolutePath());
FileOutputStream fo = new FileOutputStream(cfg);
fo = new FileOutputStream(cfg);
props.store(fo, cfg.getAbsolutePath());
fo.close();
} catch (IOException ioe) {
_log.error("IOException on BOB config file " + cfg.getAbsolutePath(), ioe);
} finally {
if (fo != null) try { fo.close(); } catch (IOException ioe) {}
}
}
}

View File

@@ -7,6 +7,7 @@
<property name="jar" value="addressbook.jar"/>
<property name="war" value="addressbook.war"/>
<property name="javac.compilerargs" value="" />
<property name="javac.version" value="1.6" />
<target name="init">
<mkdir dir="${build}"/>
@@ -24,6 +25,18 @@
<typefound name="depend" />
</condition>
<target name="depend" if="depend.available">
<depend
cache="../../build"
srcdir="${src}"
destdir="${build}" >
<!-- Depend on classes instead of jars where available -->
<classpath>
<pathelement location="../../core/java/build/obj" />
</classpath>
</depend>
</target>
<target name="dependServlet" if="depend.available">
<depend
cache="../../build"
srcdir="${src}"
@@ -37,9 +50,23 @@
</target>
<target name="compile" depends="init, depend">
<javac debug="true" deprecation="on" source="1.5" target="1.5"
<javac debug="true" deprecation="on" source="${javac.version}" target="${javac.version}"
includeAntRuntime="false"
srcdir="${src}" destdir="${build}">
srcdir="${src}" destdir="${build}"
excludes="net/i2p/addressbook/Servlet.java">
<compilerarg line="${javac.compilerargs}" />
<classpath>
<pathelement location="../../core/java/build/i2p.jar" />
<pathelement location="../jetty/jettylib/javax.servlet.jar" />
</classpath>
</javac>
</target>
<target name="compileServlet" depends="init, dependServlet, compile">
<javac debug="true" deprecation="on" source="${javac.version}" target="${javac.version}"
includeAntRuntime="false"
srcdir="${src}" destdir="${build}"
includes="net/i2p/addressbook/Servlet.java">
<compilerarg line="${javac.compilerargs}" />
<classpath>
<pathelement location="../../core/java/build/i2p.jar" />
@@ -50,9 +77,9 @@
<!-- unused for now, as we oddly ship addressbook as a .war -->
<target name="jar" depends="compile, changes">
<jar basedir="${build}" destfile="${dist}/${jar}">
<!-- set if unset -->
<property name="workspace.changes" value="" />
<jar basedir="${build}" destfile="${dist}/${jar}">
<manifest>
<attribute name="Main-Class" value="addressbook.Daemon"/>
<attribute name="Implementation-Version" value="${full.version}" />
@@ -64,7 +91,7 @@
</jar>
</target>
<target name="war" depends="compile, changes, warUpToDate" unless="war.uptodate">
<target name="war" depends="compileServlet, changes, warUpToDate" unless="war.uptodate">
<mkdir dir="${dist}/tmp"/>
<mkdir dir="${dist}/tmp/WEB-INF"/>
<mkdir dir="${dist}/tmp/WEB-INF/classes"/>

View File

@@ -91,7 +91,7 @@ class ConfigParser {
String inputLine;
inputLine = input.readLine();
while (inputLine != null) {
inputLine = ConfigParser.stripComments(inputLine);
inputLine = stripComments(inputLine);
String[] splitLine = inputLine.split("=");
if (splitLine.length == 2) {
result.put(splitLine[0].trim().toLowerCase(Locale.US), splitLine[1].trim());
@@ -116,7 +116,7 @@ class ConfigParser {
FileInputStream fileStream = new FileInputStream(file);
BufferedReader input = new BufferedReader(new InputStreamReader(
fileStream));
Map<String, String> rv = ConfigParser.parse(input);
Map<String, String> rv = parse(input);
try {
fileStream.close();
} catch (IOException ioe) {}
@@ -136,7 +136,7 @@ class ConfigParser {
public static Map<String, String> parse(String string) throws IOException {
StringReader stringReader = new StringReader(string);
BufferedReader input = new BufferedReader(stringReader);
return ConfigParser.parse(input);
return parse(input);
}
/**
@@ -153,7 +153,7 @@ class ConfigParser {
public static Map<String, String> parse(File file, Map<String, String> map) {
Map<String, String> result;
try {
result = ConfigParser.parse(file);
result = parse(file);
for (Map.Entry<String, String> entry : map.entrySet()) {
if (!result.containsKey(entry.getKey()))
result.put(entry.getKey(), entry.getValue());
@@ -161,7 +161,7 @@ class ConfigParser {
} catch (IOException exp) {
result = map;
try {
ConfigParser.write(result, file);
write(result, file);
} catch (IOException exp2) {
}
}
@@ -182,7 +182,7 @@ class ConfigParser {
List<String> result = new LinkedList<String>();
String inputLine = input.readLine();
while (inputLine != null) {
inputLine = ConfigParser.stripComments(inputLine).trim();
inputLine = stripComments(inputLine).trim();
if (inputLine.length() > 0) {
result.add(inputLine);
}
@@ -205,7 +205,7 @@ class ConfigParser {
FileInputStream fileStream = new FileInputStream(file);
BufferedReader input = new BufferedReader(new InputStreamReader(
fileStream));
List<String> rv = ConfigParser.parseSubscriptions(input);
List<String> rv = parseSubscriptions(input);
try {
fileStream.close();
} catch (IOException ioe) {}
@@ -224,7 +224,7 @@ class ConfigParser {
public static List<String> parseSubscriptions(String string) throws IOException {
StringReader stringReader = new StringReader(string);
BufferedReader input = new BufferedReader(stringReader);
return ConfigParser.parseSubscriptions(input);
return parseSubscriptions(input);
}
/**
@@ -234,18 +234,30 @@ class ConfigParser {
*
* @param file
* A File to attempt to parse.
* @param list list of files to parse
* @param list The default subscriptions to be saved and returned if the file cannot be read
* @return A List consisting of one element for each line in file, or if
* file cannot be read, list.
*/
public static List<String> parseSubscriptions(File file, List<String> list) {
List<String> result;
try {
result = ConfigParser.parseSubscriptions(file);
result = parseSubscriptions(file);
// Fix up files that contain the old default
// which was changed in 0.9.11
if (result.remove(Daemon.OLD_DEFAULT_SUB)) {
for (String sub : list) {
if (!result.contains(sub))
result.add(sub);
}
try {
writeSubscriptions(result, file);
// TODO log
} catch (IOException ioe) {}
}
} catch (IOException exp) {
result = list;
try {
ConfigParser.writeSubscriptions(result, file);
writeSubscriptions(result, file);
} catch (IOException exp2) {
}
}
@@ -289,8 +301,7 @@ class ConfigParser {
boolean success = false;
if (!isWindows) {
File tmp = SecureFile.createTempFile("temp-", ".tmp", file.getAbsoluteFile().getParentFile());
ConfigParser
.write(map, new BufferedWriter(new OutputStreamWriter(new SecureFileOutputStream(tmp), "UTF-8")));
write(map, new BufferedWriter(new OutputStreamWriter(new SecureFileOutputStream(tmp), "UTF-8")));
success = tmp.renameTo(file);
if (!success) {
tmp.delete();
@@ -299,8 +310,7 @@ class ConfigParser {
}
if (!success) {
// hmm, that didn't work, try it the old way
ConfigParser
.write(map, new BufferedWriter(new OutputStreamWriter(new SecureFileOutputStream(file), "UTF-8")));
write(map, new BufferedWriter(new OutputStreamWriter(new SecureFileOutputStream(file), "UTF-8")));
}
}
@@ -337,7 +347,7 @@ class ConfigParser {
*/
public static void writeSubscriptions(List<String> list, File file)
throws IOException {
ConfigParser.writeSubscriptions(list, new BufferedWriter(
writeSubscriptions(list, new BufferedWriter(
new OutputStreamWriter(new SecureFileOutputStream(file), "UTF-8")));
}

View File

@@ -50,6 +50,9 @@ public class Daemon {
private static final Daemon _instance = new Daemon();
private volatile boolean _running;
private static final boolean DEBUG = false;
private static final String DEFAULT_SUB = "http://i2p-projekt.i2p/hosts.txt";
/** @since 0.9.12 */
static final String OLD_DEFAULT_SUB = "http://www.i2p2.i2p/hosts.txt";
/**
* Update the router and published address books using remote data from the
@@ -253,7 +256,7 @@ public class Daemon {
List<String> defaultSubs = new LinkedList<String>();
// defaultSubs.add("http://i2p/NF2RLVUxVulR3IqK0sGJR0dHQcGXAzwa6rEO4WAWYXOHw-DoZhKnlbf1nzHXwMEJoex5nFTyiNMqxJMWlY54cvU~UenZdkyQQeUSBZXyuSweflUXFqKN-y8xIoK2w9Ylq1k8IcrAFDsITyOzjUKoOPfVq34rKNDo7fYyis4kT5bAHy~2N1EVMs34pi2RFabATIOBk38Qhab57Umpa6yEoE~rbyR~suDRvD7gjBvBiIKFqhFueXsR2uSrPB-yzwAGofTXuklofK3DdKspciclTVzqbDjsk5UXfu2nTrC1agkhLyqlOfjhyqC~t1IXm-Vs2o7911k7KKLGjB4lmH508YJ7G9fLAUyjuB-wwwhejoWqvg7oWvqo4oIok8LG6ECR71C3dzCvIjY2QcrhoaazA9G4zcGMm6NKND-H4XY6tUWhpB~5GefB3YczOqMbHq4wi0O9MzBFrOJEOs3X4hwboKWANf7DT5PZKJZ5KorQPsYRSq0E3wSOsFCSsdVCKUGsAAAA/i2p/hosts.txt");
defaultSubs.add("http://i2p-projekt.i2p/hosts.txt");
defaultSubs.add(DEFAULT_SUB);
SubscriptionList subscriptions = new SubscriptionList(subscriptionFile,
etagsFile, lastModifiedFile, lastFetchedFile, delay, defaultSubs, settings

View File

@@ -7,12 +7,13 @@
<property name="jar" value="desktopgui.jar"/>
<property name="resources" value="resources"/>
<property name="javadoc" value="javadoc"/>
<property name="javac.compilerargs" value=""/>
<property name="javac.version" value="1.6" />
<property name="require.gettext" value="true" />
<condition property="no.bundle">
<isfalse value="${require.gettext}" />
</condition>
<property name="javac.compilerargs" value=""/>
<property name="require.gettext" value="true" />
<target name="init">
<mkdir dir="${build}"/>
@@ -27,7 +28,7 @@
</target>
<target name="compile" depends="init">
<javac debug="true" deprecation="on" source="1.5" target="1.5"
<javac debug="true" deprecation="on" source="${javac.version}" target="${javac.version}"
includeAntRuntime="false"
srcdir="${src}" destdir="${build}">
<compilerarg line="${javac.compilerargs}" />

View File

@@ -17,29 +17,28 @@
<classpath>
<pathelement location="../../../core/java/build/obj" />
<pathelement location="../../ministreaming/java/build/obj" />
<pathelement location="../../jetty/jettylib/org.mortbay.jetty.jar" />
<pathelement location="../../jetty/jettylib/javax.servlet.jar" />
<pathelement location="../../jetty/jettylib/jetty-servlet.jar" />
<pathelement location="../../jetty/jettylib/jetty-util.jar" />
</classpath>
</depend>
</target>
<property name="javac.compilerargs" value="" />
<property name="javac.version" value="1.6" />
<property name="require.gettext" value="true" />
<condition property="no.bundle">
<isfalse value="${require.gettext}" />
</condition>
<property name="javac.compilerargs" value="" />
<property name="require.gettext" value="true" />
<target name="compile" depends="depend">
<mkdir dir="./build" />
<mkdir dir="./build/obj" />
<javac
srcdir="./src"
debug="true" deprecation="on" source="1.5" target="1.5"
debug="true" deprecation="on" source="${javac.version}" target="${javac.version}"
destdir="./build/obj"
includeAntRuntime="false"
classpath="../../../core/java/build/i2p.jar:../../jetty/jettylib/org.mortbay.jetty.jar:../../jetty/jettylib/javax.servlet.jar:../../jetty/jettylib/jetty-servlet.jar:../../jetty/jettylib/jetty-util.jar:../../ministreaming/java/build/mstreaming.jar" >
classpath="../../../core/java/build/i2p.jar:../../jetty/jettylib/javax.servlet.jar:../../ministreaming/java/build/mstreaming.jar" >
<compilerarg line="${javac.compilerargs}" />
</javac>
</target>

View File

@@ -52,6 +52,7 @@ class PeerID implements Comparable<PeerID>
private boolean triedDestLookup;
private final int hash;
private final I2PSnarkUtil util;
private String _toStringCache;
public PeerID(byte[] id, Destination address)
{
@@ -216,13 +217,15 @@ class PeerID implements Comparable<PeerID>
}
/**
* Returns the String "id@address" where id is the base64 encoded id
* and address is the base64 dest (was the base64 hash of the dest) which
* Returns the String "id@address" where id is the first 4 chars of the base64 encoded id
* and address is the first 6 chars of the base64 dest (was the base64 hash of the dest) which
* should match what the bytemonsoon tracker reports on its web pages.
*/
@Override
@Override
public String toString()
{
if (_toStringCache != null)
return _toStringCache;
if (id == null || address == null)
return "unkn@" + Base64.encode(destHash).substring(0, 6);
int nonZero = 0;
@@ -232,7 +235,8 @@ class PeerID implements Comparable<PeerID>
break;
}
}
return Base64.encode(id, nonZero, id.length-nonZero).substring(0,4) + "@" + address.toBase64().substring(0,6);
_toStringCache = Base64.encode(id, nonZero, id.length-nonZero).substring(0,4) + "@" + address.toBase64().substring(0,6);
return _toStringCache;
}
/**

View File

@@ -24,6 +24,7 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.LinkedBlockingQueue;
import net.i2p.I2PAppContext;
import net.i2p.app.ClientAppManager;
import net.i2p.data.Base64;
import net.i2p.data.DataHelper;
import net.i2p.update.*;
@@ -198,7 +199,9 @@ public class SnarkManager implements CompleteListener {
public void timeReached() {
if (!_running)
return;
_umgr = _context.updateManager();
ClientAppManager cmgr = _context.clientAppManager();
if (cmgr != null)
_umgr = (UpdateManager) cmgr.getRegisteredApp(UpdateManager.APP_NAME);
if (_umgr != null) {
_uhandler = new UpdateHandler(_context, _umgr, SnarkManager.this);
_umgr.register(_uhandler, UpdateType.ROUTER_SIGNED, UpdateMethod.TORRENT, 10);

View File

@@ -5,13 +5,18 @@ import java.io.File;
import net.i2p.I2PAppContext;
import net.i2p.util.FileUtil;
import org.eclipse.jetty.server.Server;
//import org.eclipse.jetty.server.Server;
/**
* @deprecated does not work
*/
public class RunStandalone {
/****
static {
System.setProperty("org.mortbay.http.Version.paranoid", "true");
System.setProperty("org.mortbay.xml.XmlParser.NotValidating", "true");
}
****/
private RunStandalone(String args[]) {}
@@ -21,6 +26,8 @@ public class RunStandalone {
}
public void start() {
throw new RuntimeException("unsupported");
/****
File workDir = new File(I2PAppContext.getGlobalContext().getTempDir(), "jetty-work");
boolean workDirRemoved = FileUtil.rmdir(workDir, false);
if (!workDirRemoved)
@@ -29,8 +36,6 @@ public class RunStandalone {
if (!workDirCreated)
System.err.println("ERROR: Unable to create Jetty temporary work directory");
throw new RuntimeException("unsupported");
/****
try {
_server = new Server("jetty-i2psnark.xml");
// just blow up NPE if we don't have a context

View File

@@ -24,7 +24,9 @@
<condition property="no.bundle">
<isfalse value="${require.gettext}" />
</condition>
<property name="javac.compilerargs" value="" />
<property name="javac.version" value="1.6" />
<property name="require.gettext" value="true" />
<target name="compile" depends="depend">
@@ -238,7 +240,7 @@
<arg value="-webapp" />
<arg value="../jsp/" />
</java>
<javac debug="true" deprecation="on" source="1.5" target="1.5"
<javac debug="true" deprecation="on" source="${javac.version}" target="${javac.version}"
includeAntRuntime="false"
destdir="../jsp/WEB-INF/classes/" srcdir="../jsp/WEB-INF/classes" includes="**/*.java">
<compilerarg line="${javac.compilerargs}" />

View File

@@ -53,6 +53,9 @@ import java.util.StringTokenizer;
import java.util.concurrent.CopyOnWriteArraySet;
import java.util.concurrent.atomic.AtomicLong;
import gnu.getopt.Getopt;
import gnu.getopt.LongOpt;
import net.i2p.I2PAppContext;
import net.i2p.I2PException;
import net.i2p.client.I2PClient;
@@ -107,18 +110,46 @@ public class I2PTunnel extends EventDispatcherImpl implements Logging {
private final Set<ConnectionEventListener> listeners = new CopyOnWriteArraySet<ConnectionEventListener>();
public static void main(String[] args) throws IOException {
new I2PTunnel(args);
private static final int NOGUI = 99999;
private static final LongOpt[] longopts = new LongOpt[] {
new LongOpt("cli", LongOpt.NO_ARGUMENT, null, 'c'),
new LongOpt("die", LongOpt.NO_ARGUMENT, null, 'd'),
new LongOpt("gui", LongOpt.NO_ARGUMENT, null, 'g'),
new LongOpt("help", LongOpt.NO_ARGUMENT, null, 'h'),
new LongOpt("nocli", LongOpt.NO_ARGUMENT, null, 'w'),
new LongOpt("nogui", LongOpt.NO_ARGUMENT, null, NOGUI),
new LongOpt("wait", LongOpt.NO_ARGUMENT, null, 'w')
};
public static void main(String[] args) {
try {
new I2PTunnel(args);
} catch (IllegalArgumentException iae) {
System.err.println(iae.toString());
System.exit(1);
}
}
/**
* Standard constructor for embedded, uses args "-nocli -die" to return immediately
*/
public I2PTunnel() {
this(nocli_args);
}
/**
* See usage() for options
* @throws IllegalArgumentException
*/
public I2PTunnel(String[] args) {
this(args, null);
}
/**
* See usage() for options
* @param lsnr may be null
* @throws IllegalArgumentException
*/
public I2PTunnel(String[] args, ConnectionEventListener lsnr) {
super();
_context = I2PAppContext.getGlobalContext(); // new I2PAppContext();
@@ -134,37 +165,95 @@ public class I2PTunnel extends EventDispatcherImpl implements Logging {
boolean checkRunByE = true;
boolean cli = true;
boolean dontDie = true;
for (int i = 0; i < args.length; i++) {
if (args[i].equals("-die")) {
boolean error = false;
List<String> eargs = null;
Getopt g = new Getopt("i2ptunnel", args, "d::n:c::w::e:h::", longopts);
int c;
while ((c = g.getopt()) != -1) {
switch (c) {
case 'd': // -d, -die, --die
dontDie = false;
gui = false;
cli = false;
checkRunByE = false;
} else if (args[i].equals("-nogui")) {
break;
case 'n': // -noc, -nog, -nocli, -nogui
String a = g.getOptarg();
if (a.startsWith("oc")) {
gui = false;
cli = false;
checkRunByE = false;
break;
} else if (a.startsWith("og")) {
// fall thru
} else {
error = true;
break;
}
// fall thru for -nogui only
case NOGUI: // --nogui
gui = false;
_log.warn(getPrefix() + "The `-nogui' option of I2PTunnel is deprecated.\n"
if (_log.shouldLog(Log.WARN))
_log.warn(getPrefix() + "The `-nogui' option of I2PTunnel is deprecated.\n"
+ "Use `-cli', `-nocli' (aka `-wait') or `-die' instead.");
} else if (args[i].equals("-cli")) {
case 'c': // -c, -cli, --cli
gui = false;
cli = true;
checkRunByE = false;
} else if (args[i].equals("-nocli") || args[i].equals("-wait")) {
break;
case 'w': // -w, -wait, --nocli
gui = false;
cli = false;
checkRunByE = false;
} else if (args[i].equals("-e")) {
runCommand(args[i + 1], this);
i++;
break;
case 'e':
if (eargs == null)
eargs = new ArrayList<String>(4);
eargs.add(g.getOptarg());
if (checkRunByE) {
checkRunByE = false;
cli = false;
}
} else if (new File(args[i]).exists()) {
runCommand("run " + args[i], this);
} else {
System.out.println("Unknown parameter " + args[i]);
break;
case 'h':
case '?':
case ':':
default:
error = true;
}
}
int remaining = args.length - g.getOptind();
if (error || remaining > 1) {
System.err.println(usage());
throw new IllegalArgumentException();
}
if (eargs != null) {
for (String arg : eargs) {
runCommand(arg, this);
}
}
if (remaining == 1) {
String f = args[g.getOptind()];
File file = new File(f);
// This is probably just a problem with the options, so
// throw from here
if (!file.exists()) {
System.err.println(usage());
throw new IllegalArgumentException("Command file does not exist: " + f);
}
runCommand("run " + f, this);
}
if (gui) {
new I2PTunnelGUI(this);
} else if (cli) {
@@ -185,6 +274,9 @@ public class I2PTunnel extends EventDispatcherImpl implements Logging {
} catch (IOException ex) {
ex.printStackTrace();
}
} else if (eargs == null && remaining == 0 && dontDie) {
System.err.println(usage());
throw new IllegalArgumentException("Waiting for nothing! Specify gui, cli, command, command file, or die");
}
while (dontDie) {
@@ -197,6 +289,23 @@ public class I2PTunnel extends EventDispatcherImpl implements Logging {
}
}
/** with newlines except for last line */
private static String usage() {
// not sure this all makes sense, just documenting what's above
return
"Usage: i2ptunnel [options] [commandFile]\n" +
" Default is to run the GUI.\n" +
" commandFile: run all commands in this file\n" +
" Options:\n" +
" -c, -cli, --cli : run the command line interface\n" +
" -d, -die, --die : exit immediately, do not wait for commands to finish\n" +
" -e 'command [args]' : run the command\n" +
" -h, --help : display this help\n" +
" -nocli, --nocli : do not run the command line interface or GUI\n" +
" -nogui, --nogui : do not run the GUI\n" +
" -w, -wait, --wait : do not run the command line interface or GUI";
}
/** @return A copy, non-null */
List<I2PSession> getSessions() {
return new ArrayList<I2PSession>(_sessions);
@@ -312,30 +421,30 @@ public class I2PTunnel extends EventDispatcherImpl implements Logging {
* @param l logger to receive events and output
*/
private static void runHelp(Logging l) {
l.log("Command list:");
l.log("Command list:\n" +
// alphabetical please...
l.log(" auth <username> <password>");
l.log(" client <port> <pubkey>[,<pubkey,...]|file:<pubkeyfile> [<sharedClient>]");
l.log(" clientoptions [-acx] [key=value ]*");
l.log(" close [forced] <jobnumber>|all");
l.log(" config [-s] <i2phost> <i2pport>");
l.log(" connectclient <port> [<sharedClient>] [<proxy>]");
l.log(" genkeys <privkeyfile> [<pubkeyfile>]");
l.log(" gentextkeys");
l.log(" httpbidirserver <host> <port> <proxyport> <spoofedhost> <privkeyfile>");
l.log(" httpclient <port> [<sharedClient>] [<proxy>]");
l.log(" httpserver <host> <port> <spoofedhost> <privkeyfile>");
l.log(" ircclient <port> <pubkey>[,<pubkey,...]|file:<pubkeyfile> [<sharedClient>]");
l.log(" list");
l.log(" listen_on <ip>");
l.log(" lookup <name>");
l.log(" owndest yes|no");
l.log(" ping <args>");
l.log(" quit");
l.log(" read_timeout <msecs>");
l.log(" run <commandfile>");
l.log(" server <host> <port> <privkeyfile>");
l.log(" textserver <host> <port> <privkey>");
" auth <username> <password>\n" +
" client <port> <pubkey>[,<pubkey,...]|file:<pubkeyfile> [<sharedClient>]\n" +
" clientoptions [-acx] [key=value ]*\n" +
" close [forced] <jobnumber>|all\n" +
" config [-s] <i2phost> <i2pport>\n" +
" connectclient <port> [<sharedClient>] [<proxy>]\n" +
" genkeys <privkeyfile> [<pubkeyfile>]\n" +
" gentextkeys\n" +
" httpbidirserver <host> <port> <proxyport> <spoofedhost> <privkeyfile>\n" +
" httpclient <port> [<sharedClient>] [<proxy>]\n" +
" httpserver <host> <port> <spoofedhost> <privkeyfile>\n" +
" ircclient <port> <pubkey>[,<pubkey,...]|file:<pubkeyfile> [<sharedClient>]\n" +
" list\n" +
" listen_on <ip>\n" +
" lookup <name>\n" +
" owndest yes|no\n" +
" ping <args>\n" +
" quit\n" +
" read_timeout <msecs>\n" +
" run <commandfile>\n" +
" server <host> <port> <privkeyfile>\n" +
" textserver <host> <port> <privkey>\n");
}
/**
@@ -378,12 +487,12 @@ public class I2PTunnel extends EventDispatcherImpl implements Logging {
_clientOptions.setProperty(key, val);
}
} else {
l.log("Usage:");
l.log(" clientoptions [key=value ]* // sets current options");
l.log(" clientoptions -a [key=value ]* // adds to current options");
l.log(" clientoptions -c // clears current options");
l.log(" clientoptions -x [key ]* // removes listed options");
l.log("Current options:");
l.log("Usage:\n" +
" clientoptions [key=value ]* // sets current options\n" +
" clientoptions -a [key=value ]* // adds to current options\n" +
" clientoptions -c // clears current options\n" +
" clientoptions -x [key ]* // removes listed options\n" +
"Current options:\n");
Properties p = new OrderedProperties();
p.putAll(_clientOptions);
for (Map.Entry<Object, Object> e : p.entrySet()) {
@@ -466,8 +575,8 @@ public class I2PTunnel extends EventDispatcherImpl implements Logging {
notifyEvent("serverTaskId", Integer.valueOf(serv.getId()));
return;
} else {
l.log("server <host> <port> <privkeyfile>");
l.log(" creates a server that sends all incoming data\n" + " of its destination to host:port.");
l.log("server <host> <port> <privkeyfile>\n" +
" creates a server that sends all incoming data\n" + " of its destination to host:port.");
notifyEvent("serverTaskId", Integer.valueOf(-1));
}
}
@@ -517,8 +626,8 @@ public class I2PTunnel extends EventDispatcherImpl implements Logging {
notifyEvent("serverTaskId", Integer.valueOf(serv.getId()));
return;
} else {
l.log("server <host> <port> <privkeyfile>");
l.log(" creates a server that sends all incoming data\n" + " of its destination to host:port.");
l.log("server <host> <port> <privkeyfile>\n" +
" creates a server that sends all incoming data\n" + " of its destination to host:port.");
notifyEvent("serverTaskId", Integer.valueOf(-1));
}
}
@@ -578,8 +687,8 @@ public class I2PTunnel extends EventDispatcherImpl implements Logging {
notifyEvent("serverTaskId", Integer.valueOf(serv.getId()));
return;
} else {
l.log("httpserver <host> <port> <spoofedhost> <privkeyfile>");
l.log(" creates an HTTP server that sends all incoming data\n"
l.log("httpserver <host> <port> <spoofedhost> <privkeyfile>\n" +
" creates an HTTP server that sends all incoming data\n"
+ " of its destination to host:port., filtering the HTTP\n"
+ " headers so it looks like the request is to the spoofed host.");
notifyEvent("serverTaskId", Integer.valueOf(-1));
@@ -654,8 +763,8 @@ public class I2PTunnel extends EventDispatcherImpl implements Logging {
notifyEvent("serverTaskId", Integer.valueOf(serv.getId()));
return;
} else {
l.log("httpserver <host> <port> <proxyport> <spoofedhost> <privkeyfile>");
l.log(" creates a bidirectional HTTP server that sends all incoming data\n"
l.log("httpserver <host> <port> <proxyport> <spoofedhost> <privkeyfile>\n" +
" creates a bidirectional HTTP server that sends all incoming data\n"
+ " of its destination to host:port., filtering the HTTP\n"
+ " headers so it looks like the request is to the spoofed host,"
+ " and listens to host:proxyport to proxy HTTP requests.");
@@ -707,8 +816,8 @@ public class I2PTunnel extends EventDispatcherImpl implements Logging {
addtask(serv);
notifyEvent("serverTaskId", Integer.valueOf(serv.getId()));
} else {
l.log("textserver <host> <port> <privkey>");
l.log(" creates a server that sends all incoming data\n" + " of its destination to host:port.");
l.log("textserver <host> <port> <privkey>\n" +
" creates a server that sends all incoming data\n" + " of its destination to host:port.");
notifyEvent("textserverTaskId", Integer.valueOf(-1));
}
}
@@ -765,8 +874,8 @@ public class I2PTunnel extends EventDispatcherImpl implements Logging {
throw iae;
}
} else {
l.log("client <port> <pubkey>[,<pubkey>]|file:<pubkeyfile>[ <sharedClient>] [<privKeyFile>]");
l.log(" creates a client that forwards port to the pubkey.\n"
l.log("client <port> <pubkey>[,<pubkey>]|file:<pubkeyfile>[ <sharedClient>] [<privKeyFile>]\n" +
" creates a client that forwards port to the pubkey.\n"
+ " use 0 as port to get a free port assigned. If you specify\n"
+ " a comma delimited list of pubkeys, it will rotate among them\n"
+ " randomlyl. sharedClient indicates if this client shares \n"
@@ -841,11 +950,11 @@ public class I2PTunnel extends EventDispatcherImpl implements Logging {
throw iae;
}
} else {
l.log("httpclient <port> [<sharedClient>] [<proxy>]");
l.log(" creates a client that distributes HTTP requests.");
l.log(" <sharedClient> (optional) indicates if this client shares tunnels with other clients (true of false)");
l.log(" <proxy> (optional) indicates a proxy server to be used");
l.log(" when trying to access an address out of the .i2p domain");
l.log("httpclient <port> [<sharedClient>] [<proxy>]\n" +
" creates a client that distributes HTTP requests.\n" +
" <sharedClient> (optional) indicates if this client shares tunnels with other clients (true of false)\n" +
" <proxy> (optional) indicates a proxy server to be used\n" +
" when trying to access an address out of the .i2p domain");
notifyEvent("httpclientTaskId", Integer.valueOf(-1));
}
}
@@ -908,11 +1017,11 @@ public class I2PTunnel extends EventDispatcherImpl implements Logging {
throw iae;
}
} else {
l.log("connectclient <port> [<sharedClient>] [<proxy>]");
l.log(" creates a client that for SSL/HTTPS requests.");
l.log(" <sharedClient> (optional) indicates if this client shares tunnels with other clients (true of false)");
l.log(" <proxy> (optional) indicates a proxy server to be used");
l.log(" when trying to access an address out of the .i2p domain");
l.log("connectclient <port> [<sharedClient>] [<proxy>]\n" +
" creates a client that for SSL/HTTPS requests.\n" +
" <sharedClient> (optional) indicates if this client shares tunnels with other clients (true of false)\n" +
" <proxy> (optional) indicates a proxy server to be used\n" +
" when trying to access an address out of the .i2p domain\n");
}
}
@@ -975,9 +1084,9 @@ public class I2PTunnel extends EventDispatcherImpl implements Logging {
throw iae;
}
} else {
l.log("ircclient <port> [<sharedClient> [<privKeyFile>]]");
l.log(" creates a client that filter IRC protocol.");
l.log(" <sharedClient> (optional) indicates if this client shares tunnels with other clients (true of false)");
l.log("ircclient <port> [<sharedClient> [<privKeyFile>]]\n" +
" creates a client that filter IRC protocol.\n" +
" <sharedClient> (optional) indicates if this client shares tunnels with other clients (true of false)\n");
notifyEvent("ircclientTaskId", Integer.valueOf(-1));
}
}
@@ -1028,8 +1137,8 @@ public class I2PTunnel extends EventDispatcherImpl implements Logging {
throw iae;
}
} else {
l.log("sockstunnel <port>");
l.log(" creates a tunnel that distributes SOCKS requests.");
l.log("sockstunnel <port>\n" +
" creates a tunnel that distributes SOCKS requests.");
notifyEvent("sockstunnelTaskId", Integer.valueOf(-1));
}
}
@@ -1075,8 +1184,8 @@ public class I2PTunnel extends EventDispatcherImpl implements Logging {
throw iae;
}
} else {
l.log("socksirctunnel <port> [<sharedClient> [<privKeyFile>]]");
l.log(" creates a tunnel for SOCKS IRC.");
l.log("socksirctunnel <port> [<sharedClient> [<privKeyFile>]]\n" +
" creates a tunnel for SOCKS IRC.");
notifyEvent("sockstunnelTaskId", Integer.valueOf(-1));
}
}
@@ -1125,8 +1234,8 @@ public class I2PTunnel extends EventDispatcherImpl implements Logging {
throw iae;
}
} else {
l.log("streamrclient <host> <port> <destination>");
l.log(" creates a tunnel that receives streaming data.");
l.log("streamrclient <host> <port> <destination>\n" +
" creates a tunnel that receives streaming data.");
notifyEvent("streamrtunnelTaskId", Integer.valueOf(-1));
}
}
@@ -1166,8 +1275,8 @@ public class I2PTunnel extends EventDispatcherImpl implements Logging {
addtask(task);
notifyEvent("streamrtunnelTaskId", Integer.valueOf(task.getId()));
} else {
l.log("streamrserver <port> <privkeyfile>");
l.log(" creates a tunnel that sends streaming data.");
l.log("streamrserver <port> <privkeyfile>\n" +
" creates a tunnel that sends streaming data.");
notifyEvent("streamrtunnelTaskId", Integer.valueOf(-1));
}
}
@@ -1195,12 +1304,12 @@ public class I2PTunnel extends EventDispatcherImpl implements Logging {
port = args[i];
notifyEvent("configResult", "ok");
} else {
l.log("Usage:");
l.log(" config [-s] <i2phost> <i2pport>");
l.log(" sets the connection to the i2p router.");
l.log("Current setting:");
boolean ssl = Boolean.parseBoolean(_clientOptions.getProperty("i2cp.SSL"));
l.log(" " + host + ' ' + port + (ssl ? " SSL" : ""));
l.log("Usage:\n" +
" config [-s] <i2phost> <i2pport>\n" +
" sets the connection to the i2p router.\n" +
"Current setting:\n" +
" " + host + ' ' + port + (ssl ? " SSL" : ""));
notifyEvent("configResult", "error");
}
}
@@ -1217,9 +1326,9 @@ public class I2PTunnel extends EventDispatcherImpl implements Logging {
_clientOptions.setProperty("i2cp.username", args[0]);
_clientOptions.setProperty("i2cp.password", args[1]);
} else {
l.log("Usage:");
l.log(" auth <username> <password>");
l.log(" Sets the i2cp credentials");
l.log("Usage:\n" +
" auth <username> <password>\n" +
" Sets the i2cp credentials");
}
}
@@ -1237,8 +1346,8 @@ public class I2PTunnel extends EventDispatcherImpl implements Logging {
ownDest = args[0].equalsIgnoreCase("yes");
notifyEvent("owndestResult", "ok");
} else {
l.log("owndest yes|no");
l.log(" Specifies whether to use its own destination \n" + " for each outgoing tunnel");
l.log("owndest yes|no\n" +
" Specifies whether to use its own destination \n" + " for each outgoing tunnel");
notifyEvent("owndestResult", "error");
}
}
@@ -1256,8 +1365,8 @@ public class I2PTunnel extends EventDispatcherImpl implements Logging {
listenHost = args[0];
notifyEvent("listen_onResult", "ok");
} else {
l.log("listen_on <ip>");
l.log(" sets the interface to listen for the I2PClient.");
l.log("listen_on <ip>\n" +
" sets the interface to listen for the I2PClient.");
notifyEvent("listen_onResult", "error");
}
}
@@ -1279,15 +1388,16 @@ public class I2PTunnel extends EventDispatcherImpl implements Logging {
}
notifyEvent("read_timeoutResult", "ok");
} else {
l.log("read_timeout <msecs>");
l.log(" sets the read timeout (in milliseconds) for I2P connections\n"
l.log("read_timeout <msecs>\n" +
" sets the read timeout (in milliseconds) for I2P connections\n"
+" Negative values will make the connections wait forever");
notifyEvent("read_timeoutResult", "error");
}
}
/**
* Generate a new keypair
* Generate a new keypair.
* Does NOT support non-default sig types.
* Deprecated - only used by CLI
*
* Sets the event "genkeysResult" = "ok" or "error" after the generation is complete
@@ -1307,8 +1417,8 @@ public class I2PTunnel extends EventDispatcherImpl implements Logging {
return;
}
} else if (args.length != 1) {
l.log("genkeys <privkeyfile> [<pubkeyfile>]");
l.log(" creates a new keypair and prints the public key.\n"
l.log("genkeys <privkeyfile> [<pubkeyfile>]\n" +
" creates a new keypair and prints the public key.\n"
+ " if pubkeyfile is given, saves the public key there." + "\n"
+ " if the privkeyfile already exists, just print/save" + "the pubkey.");
//notifyEvent("genkeysResult", "error");
@@ -1330,7 +1440,8 @@ public class I2PTunnel extends EventDispatcherImpl implements Logging {
}
/**
* Generate a new keypair
* Generate a new keypair.
* Does NOT support non-default sig types.
* Deprecated - only used by CLI
*
* Sets the event "privateKey" = base64 of the privateKey stream and
@@ -1339,7 +1450,7 @@ public class I2PTunnel extends EventDispatcherImpl implements Logging {
* @param l logger to receive events and output
*/
private static void runGenTextKeys(Logging l) {
ByteArrayOutputStream privkey = new ByteArrayOutputStream(512);
ByteArrayOutputStream privkey = new ByteArrayOutputStream(1024);
ByteArrayOutputStream pubkey = new ByteArrayOutputStream(512);
makeKey(privkey, pubkey, l);
l.log("Private key: " + Base64.encode(privkey.toByteArray()));
@@ -1394,8 +1505,8 @@ public class I2PTunnel extends EventDispatcherImpl implements Logging {
*/
public void runClose(String args[], Logging l) {
if (args.length == 0 || args.length > 2) {
l.log("close [forced] <jobnumber>|all");
l.log(" stop running tasks. either only one or all.\n"
l.log("close [forced] <jobnumber>|all\n" +
" stop running tasks. either only one or all.\n"
+ " use 'forced' to also stop tasks with active connections.\n"
+ " use the 'list' command to show the job numbers");
notifyEvent("closeResult", "error");
@@ -1456,8 +1567,8 @@ public class I2PTunnel extends EventDispatcherImpl implements Logging {
notifyEvent("runResult", "error");
}
} else {
l.log("run <commandfile>");
l.log(" loads commandfile and runs each line in it. \n"
l.log("run <commandfile>\n" +
" loads commandfile and runs each line in it. \n"
+ " You can also give the filename on the commandline.");
notifyEvent("runResult", "error");
}
@@ -1474,8 +1585,8 @@ public class I2PTunnel extends EventDispatcherImpl implements Logging {
*/
private void runLookup(String args[], Logging l) {
if (args.length != 1) {
l.log("lookup <name>");
l.log(" try to resolve the name into a destination key");
l.log("lookup <name>\n" +
" try to resolve the name into a destination key");
notifyEvent("lookupResult", "invalidUsage");
} else {
try {
@@ -1513,15 +1624,7 @@ public class I2PTunnel extends EventDispatcherImpl implements Logging {
addtask(task);
notifyEvent("pingTaskId", Integer.valueOf(task.getId()));
} else {
l.log("ping <opts> <b64dest|host>");
l.log("ping <opts> -h (pings all hosts in hosts.txt)");
l.log("ping <opts> -l <destlistfile> (pings a list of hosts in a file)");
l.log(" Options:\n" +
" -c (require 5 consecutive pings to report success)\n" +
" -m maxSimultaneousPings (default 10)\n" +
" -n numberOfPings (default 3)\n" +
" -t timeout (ms, default 30000)\n");
l.log(" Tests communication with peers.\n");
l.log(I2Ping.usage());
notifyEvent("pingTaskId", Integer.valueOf(-1));
}
}
@@ -1593,10 +1696,11 @@ public class I2PTunnel extends EventDispatcherImpl implements Logging {
/**
* Create a new destination, storing the destination and its private keys where
* instructed
* instructed.
* Does NOT support non-default sig types.
* Deprecated - only used by CLI
*
* @param writeTo location to store the private keys
* @param writeTo location to store the destination and private keys
* @param pubDest location to store the destination
* @param l logger to send messages to
*/
@@ -1605,8 +1709,8 @@ public class I2PTunnel extends EventDispatcherImpl implements Logging {
l.log("Generating new keys...");
I2PClient client = I2PClientFactory.createClient();
Destination d = client.createDestination(writeTo);
l.log("Secret key saved.");
l.log("Public key: " + d.toBase64());
l.log("Secret key saved.\n" +
"Public key: " + d.toBase64());
writeTo.flush();
writeTo.close();
writePubKey(d, pubDest, l);

View File

@@ -24,6 +24,7 @@ import net.i2p.I2PAppContext;
import net.i2p.client.streaming.I2PSocketManager;
import net.i2p.data.Base64;
import net.i2p.data.DataHelper;
import net.i2p.util.EepGet;
import net.i2p.util.EventDispatcher;
import net.i2p.util.InternalSocket;
import net.i2p.util.Log;
@@ -409,60 +410,8 @@ public abstract class I2PTunnelHTTPClientBase extends I2PTunnelClientBase implem
* @since 0.9.4
*/
private static Map<String, String> parseArgs(String args) {
Map<String, String> rv = new HashMap<String, String>(8);
char data[] = args.toCharArray();
StringBuilder buf = new StringBuilder(32);
boolean isQuoted = false;
String key = null;
for (int i = 0; i < data.length; i++) {
switch (data[i]) {
case '\"':
if (isQuoted) {
// keys never quoted
if (key != null) {
rv.put(key, buf.toString().trim());
key = null;
}
buf.setLength(0);
}
isQuoted = !isQuoted;
break;
case ' ':
case '\r':
case '\n':
case '\t':
case ',':
// whitespace - if we're in a quoted section, keep this as part of the quote,
// otherwise use it as a delim
if (isQuoted) {
buf.append(data[i]);
} else {
if (key != null) {
rv.put(key, buf.toString().trim());
key = null;
}
buf.setLength(0);
}
break;
case '=':
if (isQuoted) {
buf.append(data[i]);
} else {
key = buf.toString().trim().toLowerCase(Locale.US);
buf.setLength(0);
}
break;
default:
buf.append(data[i]);
break;
}
}
if (key != null)
rv.put(key, buf.toString().trim());
return rv;
// moved to EepGet, since it needs this too
return EepGet.parseAuthArgs(args);
}
//////// Error page stuff

View File

@@ -48,6 +48,7 @@ public class I2PTunnelHTTPServer extends I2PTunnelServer {
public static final String OPT_POST_TOTAL_BAN_TIME = "postTotalBanTime";
public static final String OPT_POST_MAX = "maxPosts";
public static final String OPT_POST_TOTAL_MAX = "maxTotalPosts";
public static final String OPT_REJECT_INPROXY = "rejectInproxy";
public static final int DEFAULT_POST_WINDOW = 5*60;
public static final int DEFAULT_POST_BAN_TIME = 30*60;
public static final int DEFAULT_POST_TOTAL_BAN_TIME = 10*60;
@@ -95,6 +96,19 @@ public class I2PTunnelHTTPServer extends I2PTunnelServer {
"</body></html>")
.getBytes();
private final static byte[] ERR_INPROXY =
("HTTP/1.1 403 Denied\r\n"+
"Content-Type: text/html; charset=iso-8859-1\r\n"+
"Cache-control: no-cache\r\n"+
"Connection: close\r\n"+
"Proxy-Connection: close\r\n"+
"\r\n"+
"<html><head><title>403 Denied</title></head>\n"+
"<body><h2>403 Denied</h2>\n" +
"<p>Inproxy access denied. You must run <a href=\"https://geti2p.net/\">I2P</a> to access this site.</p>\n" +
"</body></html>")
.getBytes();
public I2PTunnelHTTPServer(InetAddress host, int port, String privData, String spoofHost, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel) {
super(host, port, privData, l, notifyThis, tunnel);
setupI2PTunnelHTTPServer(spoofHost);
@@ -198,6 +212,24 @@ public class I2PTunnelHTTPServer extends I2PTunnelServer {
CLIENT_SKIPHEADERS, getTunnel().getContext());
long afterHeaders = getTunnel().getContext().clock().now();
Properties opts = getTunnel().getClientOptions();
if (Boolean.parseBoolean(opts.getProperty(OPT_REJECT_INPROXY)) &&
(headers.containsKey("X-Forwarded-For") ||
headers.containsKey("X-Forwarded-Server") ||
headers.containsKey("X-Forwarded-Host"))) {
if (_log.shouldLog(Log.WARN))
_log.warn("Refusing inproxy access: " + peerHash.toBase64());
try {
// Send a 403, so the user doesn't get an HTTP Proxy error message
// and blame his router or the network.
socket.getOutputStream().write(ERR_INPROXY);
} catch (IOException ioe) {}
try {
socket.close();
} catch (IOException ioe) {}
return;
}
if (_postThrottler != null &&
command.length() >= 5 &&
command.substring(0, 5).toUpperCase(Locale.US).equals("POST ")) {
@@ -221,7 +253,6 @@ public class I2PTunnelHTTPServer extends I2PTunnelServer {
addEntry(headers, DEST64_HEADER, socket.getPeerDestination().toBase64());
// Port-specific spoofhost
Properties opts = getTunnel().getClientOptions();
String spoofHost;
int ourPort = socket.getLocalPort();
if (ourPort != 80 && ourPort > 0 && ourPort <= 65535 && opts != null) {
@@ -309,6 +340,13 @@ public class I2PTunnelHTTPServer extends I2PTunnelServer {
if (_log.shouldLog(Log.WARN))
_log.warn("Error while receiving the new HTTP request", ex);
} catch (OutOfMemoryError oom) {
// Often actually a file handle limit problem so we can safely send a response
// java.lang.OutOfMemoryError: unable to create new native thread
try {
// Send a 503, so the user doesn't get an HTTP Proxy error message
// and blame his router or the network.
socket.getOutputStream().write(ERR_UNAVAILABLE);
} catch (IOException ioe) {}
try {
socket.close();
} catch (IOException ioe) {}
@@ -668,15 +706,21 @@ public class I2PTunnelHTTPServer extends I2PTunnelServer {
else
value = "";
if ("accept-encoding".equals(name.toLowerCase(Locale.US)))
String lcName = name.toLowerCase(Locale.US);
if ("accept-encoding".equals(lcName))
name = "Accept-encoding";
else if ("x-accept-encoding".equals(name.toLowerCase(Locale.US)))
else if ("x-accept-encoding".equals(lcName))
name = "X-Accept-encoding";
else if ("x-forwarded-for".equals(lcName))
name = "X-Forwarded-For";
else if ("x-forwarded-server".equals(lcName))
name = "X-Forwarded-Server";
else if ("x-forwarded-host".equals(lcName))
name = "X-Forwarded-Host";
// 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.toLowerCase(Locale.US).equals(lcName)) {
skip = true;

View File

@@ -18,6 +18,7 @@ import javax.net.ssl.SSLException;
import net.i2p.I2PAppContext;
import net.i2p.client.streaming.I2PSocket;
import net.i2p.data.ByteArray;
import net.i2p.data.DataHelper;
import net.i2p.util.ByteCache;
import net.i2p.util.Clock;
import net.i2p.util.I2PAppThread;
@@ -137,6 +138,8 @@ public class I2PTunnelRunner extends I2PAppThread implements I2PSocket.SocketErr
protected InputStream getSocketIn() throws IOException { return s.getInputStream(); }
protected OutputStream getSocketOut() throws IOException { return s.getOutputStream(); }
private static final byte[] POST = { 'P', 'O', 'S', 'T', ' ' };
@Override
public void run() {
try {
@@ -159,8 +162,12 @@ public class I2PTunnelRunner extends I2PAppThread implements I2PSocket.SocketErr
// So we now get a fast return from flush(), and can do it here to save 250 ms.
// To make sure we are under the initial window size and don't hang waiting for accept,
// only flush if it fits in one message.
if (initialI2PData.length <= 1730) // ConnectionOptions.DEFAULT_MAX_MESSAGE_SIZE
i2pout.flush();
if (initialI2PData.length <= 1730) { // ConnectionOptions.DEFAULT_MAX_MESSAGE_SIZE
// Don't flush if POST, so we can get POST data into the initial packet
if (initialI2PData.length < 5 ||
!DataHelper.eq(POST, 0, initialI2PData, 0, 5))
i2pout.flush();
}
//}
}
if (initialSocketData != null) {

View File

@@ -11,6 +11,8 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import gnu.getopt.Getopt;
import net.i2p.I2PAppContext;
import net.i2p.I2PException;
import net.i2p.client.I2PSession;
@@ -86,48 +88,76 @@ public class I2Ping extends I2PTunnelClientBase {
int count = PING_COUNT;
boolean countPing = false;
boolean reportTimes = true;
while (true) {
if (cmd.startsWith("-t ")) { // timeout
cmd = cmd.substring(3);
int pos = cmd.indexOf(" ");
if (pos == -1) {
l.log("Syntax error");
return;
} else {
timeout = Long.parseLong(cmd.substring(0, pos));
String hostListFile = null;
int localPort = 0;
int remotePort = 0;
boolean error = false;
String[] argv = cmd.split(" ");
Getopt g = new Getopt("ping", argv, "t:m:n:chl:f:p:");
int c;
while ((c = g.getopt()) != -1) {
switch (c) {
case 't': // timeout
timeout = Long.parseLong(g.getOptarg());
// convenience, convert msec to sec
if (timeout < 100)
timeout *= 1000;
cmd = cmd.substring(pos + 1);
}
} else if (cmd.startsWith("-m ")) { // max simultaneous pings
cmd = cmd.substring(3);
int pos = cmd.indexOf(" ");
if (pos == -1) {
l.log("Syntax error");
return;
} else {
MAX_SIMUL_PINGS = Integer.parseInt(cmd.substring(0, pos));
cmd = cmd.substring(pos + 1);
}
} else if (cmd.startsWith("-n ")) { // number of pings
cmd = cmd.substring(3);
int pos = cmd.indexOf(" ");
if (pos == -1) {
l.log("Syntax error");
return;
} else {
count = Integer.parseInt(cmd.substring(0, pos));
cmd = cmd.substring(pos + 1);
}
} else if (cmd.startsWith("-c ")) { // "count" ping
break;
case 'm': // max simultaneous pings
MAX_SIMUL_PINGS = Integer.parseInt(g.getOptarg());
break;
case 'n': // number of pings
count = Integer.parseInt(g.getOptarg());
break;
case 'c': // "count" ping
countPing = true;
count = CPING_COUNT;
cmd = cmd.substring(3);
} else if (cmd.equals("-h")) { // ping all hosts
cmd = "-l hosts.txt";
} else if (cmd.startsWith("-l ")) { // ping a list of hosts
BufferedReader br = new BufferedReader(new FileReader(cmd.substring(3)));
break;
case 'h': // ping all hosts
if (hostListFile != null)
error = true;
else
hostListFile = "hosts.txt";
break;
case 'l': // ping a list of hosts
if (hostListFile != null)
error = true;
else
hostListFile = g.getOptarg();
break;
case 'f': // local port
localPort = Integer.parseInt(g.getOptarg());
break;
case 'p': // remote port
remotePort = Integer.parseInt(g.getOptarg());
break;
case '?':
case ':':
default:
error = true;
}
}
int remaining = argv.length - g.getOptind();
if (error ||
remaining > 1 ||
(remaining <= 0 && hostListFile == null) ||
(remaining > 0 && hostListFile != null)) {
System.out.println(usage());
return;
}
if (hostListFile != null) {
BufferedReader br = new BufferedReader(new FileReader(hostListFile));
String line;
List<PingHandler> pingHandlers = new ArrayList<PingHandler>();
int i = 0;
@@ -138,7 +168,8 @@ public class I2Ping extends I2PTunnelClientBase {
if (line.indexOf("=") != -1) { // maybe file is hosts.txt?
line = line.substring(0, line.indexOf("="));
}
PingHandler ph = new PingHandler(line, count, timeout, countPing, reportTimes);
PingHandler ph = new PingHandler(line, count, localPort, remotePort,
timeout, countPing, reportTimes);
ph.start();
pingHandlers.add(ph);
if (++i > 1)
@@ -148,13 +179,31 @@ public class I2Ping extends I2PTunnelClientBase {
for (Thread t : pingHandlers)
t.join();
return;
} else {
Thread t = new PingHandler(cmd, count, timeout, countPing, reportTimes);
t.start();
t.join();
return;
}
}
String host = argv[g.getOptind()];
Thread t = new PingHandler(host, count, localPort, remotePort,
timeout, countPing, reportTimes);
t.start();
t.join();
}
/**
* With newlines except for last line
* @since 0.9.12
*/
public static String usage() {
return
"ping <opts> <b64dest|host>\n" +
"ping <opts> -h (pings all hosts in hosts.txt)\n" +
"ping <opts> -l <destlistfile> (pings a list of hosts in a file)\n" +
"Options:\n" +
" -c (require 5 consecutive pings to report success)\n" +
" -m maxSimultaneousPings (default 10)\n" +
" -n numberOfPings (default 3)\n" +
" -t timeout (ms, default 30000)\n" +
" -f fromPort\n" +
" -p toPort";
}
@Override
@@ -170,7 +219,7 @@ public class I2Ping extends I2PTunnelClientBase {
return true;
}
private boolean ping(Destination dest, long timeout) throws I2PException {
private boolean ping(Destination dest, int fromPort, int toPort, long timeout) throws I2PException {
try {
synchronized (simulLock) {
while (simulPings >= MAX_SIMUL_PINGS) {
@@ -183,7 +232,7 @@ public class I2Ping extends I2PTunnelClientBase {
}
lastPingTime = System.currentTimeMillis();
}
boolean sent = sockMgr.ping(dest, timeout);
boolean sent = sockMgr.ping(dest, fromPort, toPort, timeout);
synchronized (simulLock) {
simulPings--;
simulLock.notifyAll();
@@ -207,15 +256,20 @@ public class I2Ping extends I2PTunnelClientBase {
private final long timeout;
private final boolean countPing;
private final boolean reportTimes;
private final int localPort;
private final int remotePort;
/**
* As of 0.9.11, does NOT start itself.
* Caller must call start()
* @param dest b64 or b32 or host name
*/
public PingHandler(String dest, int count, long timeout, boolean countPings, boolean report) {
public PingHandler(String dest, int count, int fromPort, int toPort,
long timeout, boolean countPings, boolean report) {
this.destination = dest;
cnt = count;
localPort = fromPort;
remotePort = toPort;
this.timeout = timeout;
countPing = countPings;
reportTimes = report;
@@ -235,8 +289,7 @@ public class I2Ping extends I2PTunnelClientBase {
long totalTime = 0;
StringBuilder pingResults = new StringBuilder(2 * cnt + destination.length() + 3);
for (int i = 0; i < cnt; i++) {
boolean sent;
sent = ping(dest, timeout);
boolean sent = ping(dest, localPort, remotePort, timeout);
if (countPing) {
if (!sent) {
pingResults.append(i).append(" ");

View File

@@ -7,11 +7,13 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import net.i2p.I2PAppContext;
import net.i2p.I2PException;
import net.i2p.client.I2PClient;
import net.i2p.client.I2PClientFactory;
import net.i2p.client.I2PSession;
import net.i2p.crypto.SigType;
import net.i2p.data.Base32;
import net.i2p.data.Destination;
import net.i2p.i2ptunnel.socks.I2PSOCKSTunnel;
@@ -49,8 +51,8 @@ public class TunnelController implements Logging {
* the prefix should be used (and, in turn, that prefix should be stripped off
* before being interpreted by this controller)
*
* @param config original key=value mapping
* @param prefix beginning of key values that are relevent to this tunnel
* @param config original key=value mapping non-null
* @param prefix beginning of key values that are relevant to this tunnel
*/
public TunnelController(Properties config, String prefix) {
this(config, prefix, true);
@@ -58,6 +60,8 @@ public class TunnelController implements Logging {
/**
*
* @param config original key=value mapping non-null
* @param prefix beginning of key values that are relevant to this tunnel
* @param createKey for servers, whether we want to create a brand new destination
* with private keys at the location specified or not (does not
* overwrite existing ones)
@@ -99,7 +103,16 @@ public class TunnelController implements Logging {
FileOutputStream fos = null;
try {
fos = new SecureFileOutputStream(keyFile);
Destination dest = client.createDestination(fos);
SigType stype = I2PClient.DEFAULT_SIGTYPE;
String st = _config.getProperty("option." + I2PClient.PROP_SIGTYPE);
if (st != null) {
SigType type = SigType.parseSigType(st);
if (type != null)
stype = type;
else
log("Unsupported sig type " + st);
}
Destination dest = client.createDestination(fos, stype);
String destStr = dest.toBase64();
log("Private key created and saved in " + keyFile.getAbsolutePath());
log("You should backup this file in a secure place.");

View File

@@ -12,6 +12,7 @@ import net.i2p.client.I2PClient;
import net.i2p.client.I2PClientFactory;
import net.i2p.client.I2PSession;
import net.i2p.client.I2PSessionException;
import net.i2p.crypto.SigType;
import net.i2p.data.Destination;
import net.i2p.i2ptunnel.I2PTunnel;
import net.i2p.i2ptunnel.I2PTunnelTask;
@@ -78,8 +79,17 @@ import net.i2p.util.EventDispatcher;
I2PClient client = I2PClientFactory.createClient();
byte[] key;
try {
ByteArrayOutputStream out = new ByteArrayOutputStream(512);
client.createDestination(out);
ByteArrayOutputStream out = new ByteArrayOutputStream(1024);
SigType stype = I2PClient.DEFAULT_SIGTYPE;
String st = tunnel.getClientOptions().getProperty(I2PClient.PROP_SIGTYPE);
if (st != null) {
SigType type = SigType.parseSigType(st);
if (type != null)
stype = type;
else
l.log("Unsupported sig type " + st);
}
client.createDestination(out, stype);
key = out.toByteArray();
} catch(Exception exc) {
throw new RuntimeException("failed to create i2p-destination", exc);

View File

@@ -14,6 +14,8 @@ import java.util.Properties;
import java.util.Set;
import java.util.TreeMap;
import net.i2p.client.I2PClient;
import net.i2p.crypto.SigType;
import net.i2p.data.Base64;
import net.i2p.data.Destination;
import net.i2p.data.PrivateKeyFile;
@@ -177,6 +179,17 @@ public class EditBean extends IndexBean {
return getBooleanProperty(tunnel, "i2cp.encryptLeaseSet");
}
/** @since 0.9.12 */
public int getSigType(int tunnel) {
return getProperty(tunnel, I2PClient.PROP_SIGTYPE, 0);
}
/** @since 0.9.12 */
public boolean isSigTypeAvailable(int code) {
SigType type = SigType.getByCode(code);
return type != null && type.isAvailable();
}
/** @since 0.8.9 */
public boolean getDCC(int tunnel) {
return getBooleanProperty(tunnel, I2PTunnelIRCClient.PROP_DCC);
@@ -358,6 +371,11 @@ public class EditBean extends IndexBean {
return Addresses.getAllAddresses();
}
/** @since 0.9.12 */
public boolean isAdvanced() {
return _context.getBooleanProperty("routerconsole.advanced");
}
public String getI2CPHost(int tunnel) {
if (_context.isRouterContext())
return _("internal");

View File

@@ -24,6 +24,7 @@ import java.util.concurrent.ConcurrentHashMap;
import net.i2p.I2PAppContext;
import net.i2p.app.ClientAppManager;
import net.i2p.app.Outproxy;
import net.i2p.client.I2PClient;
import net.i2p.data.Base32;
import net.i2p.data.Certificate;
import net.i2p.data.Destination;
@@ -807,6 +808,21 @@ public class IndexBean {
return false;
}
/** @since 0.9.12 */
public void setRejectInproxy(String moo) {
_booleanOptions.add(I2PTunnelHTTPServer.OPT_REJECT_INPROXY);
}
/** @since 0.9.12 */
public boolean isRejectInproxy(int tunnel) {
TunnelController tun = getController(tunnel);
if (tun != null) {
Properties opts = tun.getClientOptionProps();
return Boolean.parseBoolean(opts.getProperty(I2PTunnelHTTPServer.OPT_REJECT_INPROXY));
}
return false;
}
protected static final String PROP_ENABLE_ACCESS_LIST = "i2cp.enableAccessList";
protected static final String PROP_ENABLE_BLACKLIST = "i2cp.enableBlackList";
@@ -983,6 +999,7 @@ public class IndexBean {
} catch (NumberFormatException nfe) {}
}
}
public void setCert(String val) {
if (val != null) {
try {
@@ -990,10 +1007,24 @@ public class IndexBean {
} catch (NumberFormatException nfe) {}
}
}
public void setSigner(String val) {
_certSigner = val;
}
/** @since 0.9.12 */
public void setSigType(String val) {
if (val != null) {
_otherOptions.put(I2PClient.PROP_SIGTYPE, val);
if (val.equals("0"))
_certType = 0;
else
_certType = 5;
}
// TODO: Call modifyDestination??
// Otherwise this only works on a new tunnel...
}
/** Modify or create a destination */
private String modifyDestination() {
if (_privKeyFile == null || _privKeyFile.trim().length() <= 0)
@@ -1227,20 +1258,22 @@ public class IndexBean {
};
private static final String _booleanServerOpts[] = {
"i2cp.reduceOnIdle", "i2cp.encryptLeaseSet", PROP_ENABLE_ACCESS_LIST, PROP_ENABLE_BLACKLIST,
I2PTunnelServer.PROP_USE_SSL
I2PTunnelServer.PROP_USE_SSL,
I2PTunnelHTTPServer.OPT_REJECT_INPROXY
};
private static final String _otherClientOpts[] = {
"i2cp.reduceIdleTime", "i2cp.reduceQuantity", "i2cp.closeIdleTime",
"outproxyUsername", "outproxyPassword",
I2PTunnelHTTPClient.PROP_JUMP_SERVERS,
I2PTunnelHTTPClientBase.PROP_AUTH,
I2PClient.PROP_SIGTYPE,
I2PTunnelHTTPClient.PROP_SSL_OUTPROXIES
};
private static final String _otherServerOpts[] = {
"i2cp.reduceIdleTime", "i2cp.reduceQuantity", "i2cp.leaseSetKey", "i2cp.accessList",
PROP_MAX_CONNS_MIN, PROP_MAX_CONNS_HOUR, PROP_MAX_CONNS_DAY,
PROP_MAX_TOTAL_CONNS_MIN, PROP_MAX_TOTAL_CONNS_HOUR, PROP_MAX_TOTAL_CONNS_DAY,
PROP_MAX_STREAMS
PROP_MAX_STREAMS, I2PClient.PROP_SIGTYPE
};
private static final String _httpServerOpts[] = {
I2PTunnelHTTPServer.OPT_POST_WINDOW,

View File

@@ -449,6 +449,43 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
</div>
<% } %>
<% if (editBean.isAdvanced()) { %>
<div id="tunnelOptionsField" class="rowItem">
<label>
<%=intl._("Signature type")%>
(<%=intl._("Experts only!")%>)
</label>
</div>
<div id="hostField" class="rowItem">
<div id="portField" class="rowItem">
<label>DSA-SHA1</label>
<input value="0" type="radio" id="startOnLoad" name="sigType" title="Default"<%=(editBean.getSigType(curTunnel)==0 ? " checked=\"checked\"" : "")%> class="tickbox" />
</div>
<% if (editBean.isSigTypeAvailable(1)) { %>
<div id="portField" class="rowItem">
<label>ECDSA-P256</label>
<input value="1" type="radio" id="startOnLoad" name="sigType" title="Advanced users only"<%=(editBean.getSigType(curTunnel)==1 ? " checked=\"checked\"" : "")%> class="tickbox" />
</div>
<% }
if (editBean.isSigTypeAvailable(2)) { %>
<div id="portField" class="rowItem">
<label>ECDSA-P384</label>
<input value="2" type="radio" id="startOnLoad" name="sigType" title="Advanced users only"<%=(editBean.getSigType(curTunnel)==2 ? " checked=\"checked\"" : "")%> class="tickbox" />
</div>
<% }
if (editBean.isSigTypeAvailable(3)) { %>
<div id="portField" class="rowItem">
<label>ECDSA-P521</label>
<input value="3" type="radio" id="startOnLoad" name="sigType" title="Advanced users only"<%=(editBean.getSigType(curTunnel)==3 ? " checked=\"checked\"" : "")%> class="tickbox" />
</div>
<% } // isAvailable %>
</div>
<div class="subdivider">
<hr />
</div>
<% } // isAdvanced %>>
<% if ("httpclient".equals(tunnelType) || "connectclient".equals(tunnelType) || "sockstunnel".equals(tunnelType) || "socksirctunnel".equals(tunnelType)) { %>
<div id="accessField" class="rowItem">
<label><%=intl._("Local Authorization")%>:</label>

View File

@@ -381,7 +381,22 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<textarea rows="2" style="height: 8em;" cols="60" id="hostField" name="accessList" title="Access List" wrap="off" spellcheck="false"><%=editBean.getAccessList(curTunnel)%></textarea>
</div>
<div class="subdivider">
<% if (("httpserver".equals(tunnelType)) || ("httpbidirserver".equals(tunnelType))) {
%><div class="rowItem">
<div id="optionsField" class="rowItem">
<label>
<%=intl._("Block Access via Inproxies")%>:
</label>
</div>
<div id="portField" class="rowItem">
<label for="access" accesskey="d">
<%=intl._("Enable")%>:
</label>
<input value="1" type="checkbox" id="startOnLoad" name="rejectInproxy" title="Deny inproxy access when enabled"<%=(editBean.isRejectInproxy(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
</div>
</div>
<% } // httpserver
%><div class="subdivider">
<hr />
</div>
@@ -491,6 +506,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<hr />
</div>
<% /***************** %>
<div id="tunnelOptionsField" class="rowItem">
<label for="cert" accesskey="c">
<%=intl._("New Certificate type")%>(<span class="accessKey">C</span>):
@@ -533,10 +549,44 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
<button accesskey="S" class="control" type="submit" name="action" value="Modify" title="Force New Cert Now"><%=intl._("Modify")%></button>
<span class="comment"><%=intl._("(Tunnel must be stopped first)")%></span>
</div>
<% **********************/ %>
<% if (editBean.isAdvanced()) { %>
<div id="tunnelOptionsField" class="rowItem">
<label>
<%=intl._("Signature type")%>
(<%=intl._("Experts only! Changes B32!")%>)
</label>
</div>
<div id="hostField" class="rowItem">
<div id="portField" class="rowItem">
<label>DSA-SHA1</label>
<input value="0" type="radio" id="startOnLoad" name="sigType" title="Default"<%=(editBean.getSigType(curTunnel)==0 ? " checked=\"checked\"" : "")%> class="tickbox" />
</div>
<% if (editBean.isSigTypeAvailable(1)) { %>
<div id="portField" class="rowItem">
<label>ECDSA-P256</label>
<input value="1" type="radio" id="startOnLoad" name="sigType" title="Advanced users only"<%=(editBean.getSigType(curTunnel)==1 ? " checked=\"checked\"" : "")%> class="tickbox" />
</div>
<% }
if (editBean.isSigTypeAvailable(2)) { %>
<div id="portField" class="rowItem">
<label>ECDSA-P384</label>
<input value="2" type="radio" id="startOnLoad" name="sigType" title="Advanced users only"<%=(editBean.getSigType(curTunnel)==2 ? " checked=\"checked\"" : "")%> class="tickbox" />
</div>
<% }
if (editBean.isSigTypeAvailable(3)) { %>
<div id="portField" class="rowItem">
<label>ECDSA-P521</label>
<input value="3" type="radio" id="startOnLoad" name="sigType" title="Advanced users only"<%=(editBean.getSigType(curTunnel)==3 ? " checked=\"checked\"" : "")%> class="tickbox" />
</div>
<% } // isAvailable %>
</div>
<div class="subdivider">
<hr />
</div>
<% } // isAdvanced %>
<div id="customOptionsField" class="rowItem">
<label for="customOptions" accesskey="u">

View File

@@ -2,12 +2,13 @@
# 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:
# blabla, 2011
# D.A. Loader <>, 2012
# driz <driz@i2pmail.org>, 2012
# ducki2p <ducki2p@gmail.com>, 2011
# Ettore Atalan <atalanttore@googlemail.com>, 2014
# foo <foo@bar>, 2009
# echeloni2p <echelon@i2pmail.org>, 2014
# mixxy, 2011
@@ -18,15 +19,14 @@ msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-01-09 18:07+0000\n"
"PO-Revision-Date: 2014-01-05 16:17+0000\n"
"Last-Translator: echeloni2p <echelon@i2pmail.org>\n"
"Language-Team: German (http://www.transifex.com/projects/p/I2P/language/"
"de/)\n"
"Language: de\n"
"POT-Creation-Date: 2014-02-06 18:27+0000\n"
"PO-Revision-Date: 2014-03-10 13:40+0000\n"
"Last-Translator: Ettore Atalan <atalanttore@googlemail.com>\n"
"Language-Team: German (http://www.transifex.com/projects/p/I2P/language/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: ../java/build/Proxy.java:5 ../java/build/Proxy.java:11
@@ -90,28 +90,21 @@ msgstr "Der HTTP-Proxy ist nicht bereit"
msgid ""
"It is offline, there is network congestion, or your router is not yet well-"
"integrated with peers."
msgstr ""
"Er ist Offline, das Netzwerk ist überlastet oder Ihr Router ist nicht gut "
"ins Netzwerk integriert."
msgstr "Er ist Offline, das Netzwerk ist überlastet oder Ihr Router ist nicht gut ins Netzwerk integriert."
#: ../java/build/Proxy.java:14
#, java-format
msgid ""
"You may want to {0}retry{1} as this will randomly reselect an outproxy from "
"the pool you have defined {2}here{3} (if you have more than one configured)."
msgstr ""
"Sie können es {0}noch einmal versuchen{1}, dieses verwendet einen zufällig "
"aus dem {2}hier definierten{3} Pool Outproxy (falls Sie mehr als einen "
"eingerichtet haben)."
msgstr "Sie können es {0}noch einmal versuchen{1}, dieses verwendet einen zufällig aus dem {2}hier definierten{3} Pool Outproxy (falls Sie mehr als einen eingerichtet haben)."
#: ../java/build/Proxy.java:15
#, java-format
msgid ""
"If you continue to have trouble you may want to edit your outproxy list {0}"
"here{1}."
msgstr ""
"Falls Sie weiterhin Probleme haben, können Sie {0}hier{1} Ihre Liste der "
"Outproxies ändern."
"If you continue to have trouble you may want to edit your outproxy list "
"{0}here{1}."
msgstr "Falls Sie weiterhin Probleme haben, können Sie {0}hier{1} Ihre Liste der Outproxies ändern."
#: ../java/build/Proxy.java:16 ../java/build/Proxy.java:38
#: ../java/build/Proxy.java:59 ../java/build/Proxy.java:102
@@ -134,9 +127,7 @@ msgstr "Dein Browser unterstützt keine iFrames."
msgid ""
"Do not use the proxy to access the router console, localhost, or local LAN "
"destinations."
msgstr ""
"Benutzen Sie den Proxy nicht um auf Ihre Router Konsole, Localhost Adressen "
"oder lokale LAN Ziele zuzugreifen."
msgstr "Benutzen Sie den Proxy nicht um auf Ihre Router Konsole, Localhost Adressen oder lokale LAN Ziele zuzugreifen."
#: ../java/build/Proxy.java:26
msgid "Warning: Eepsite Unknown"
@@ -152,32 +143,25 @@ msgstr "Die Eepsite wurde nicht im Adressbuch ihres Routers gefunden."
#: ../java/build/Proxy.java:34
msgid "Check the link or find a Base 32 or Base 64 address."
msgstr ""
"Kontrollieren Sie den Link oder finden Sie eine Base 32, bzw. eine Base 64 "
"Adresse."
msgstr "Kontrollieren Sie den Link oder finden Sie eine Base 32, bzw. eine Base 64 Adresse."
#: ../java/build/Proxy.java:35
#, java-format
msgid "If you have the Base 64 address, {0}add it to your addressbook{1}."
msgstr ""
"Haben Sie eine Base 64 Adresse, {0}fügen Sie diese ihrem Adressbuch hinzu{1}."
msgstr "Haben Sie eine Base 64 Adresse, {0}fügen Sie diese ihrem Adressbuch hinzu{1}."
#: ../java/build/Proxy.java:36
msgid ""
"Otherwise, find a Base 32 or address helper link, or use a jump service link "
"below."
msgstr ""
"Finden Sie alternativ eine Base 32 Adresse, einen Adress-Hilfs-Link oder "
"nutzen Sie einen der Jump-Service Links unten."
"Otherwise, find a Base 32 or address helper link, or use a jump service link"
" below."
msgstr "Finden Sie alternativ eine Base 32 Adresse, einen Adress-Hilfs-Link oder nutzen Sie einen der Jump-Service Links unten."
#: ../java/build/Proxy.java:37
#, java-format
msgid ""
"Seeing this page often? See {0}the FAQ{1} for help in {2}adding some "
"subscriptions{3} to your addressbook."
msgstr ""
"Ist diese Seite oft offline? Schauen Sie in der {0}FAQ{1} nach Hilfe zum {2}"
"Eintragen einger Subscriptionen{3} zu Ihrem Adressbuch. "
msgstr "Ist diese Seite oft offline? Schauen Sie in der {0}FAQ{1} nach Hilfe zum {2}Eintragen einger Subscriptionen{3} zu Ihrem Adressbuch. "
#: ../java/build/Proxy.java:39 ../java/build/Proxy.java:45
msgid "Warning: Invalid Request URI"
@@ -185,17 +169,13 @@ msgstr "Warnung: Ungültige Anfrage URI"
#: ../java/build/Proxy.java:46
msgid "The request URI is invalid, and probably contains illegal characters."
msgstr ""
"Die angefragte URI ist ungültig und enthält möglicherweise nicht erlaubte "
"Zeichen."
msgstr "Die angefragte URI ist ungültig und enthält möglicherweise nicht erlaubte Zeichen."
#: ../java/build/Proxy.java:47
msgid ""
"If you clicked a link, check the end of the URI for any characters the "
"browser has mistakenly added on."
msgstr ""
"Falls Sie einen Link angeklickt hatten, kontrollieren Sie das Ende der URI "
"nach ungültigen Zeichen, die ihr Browser fälschlicherweise angehangen hat."
msgstr "Falls Sie einen Link angeklickt hatten, kontrollieren Sie das Ende der URI nach ungültigen Zeichen, die ihr Browser fälschlicherweise angehangen hat."
#: ../java/build/Proxy.java:48 ../java/build/Proxy.java:54
msgid "Warning: Invalid Destination"
@@ -205,17 +185,13 @@ msgstr "lokales Ziel"
msgid ""
"The eepsite destination specified was not valid, or was otherwise "
"unreachable."
msgstr ""
"Die genannte Eepsite Adresse ist nicht gültig, oder andersweitig "
"unerreichbar."
msgstr "Die genannte Eepsite Adresse ist nicht gültig, oder andersweitig unerreichbar."
#: ../java/build/Proxy.java:56
msgid ""
"Perhaps you pasted in the wrong Base 64 string or the link you are following "
"is bad."
msgstr ""
"Möglicherweise haben Sie einen falschen Base 64 String eingetragen oder der "
"gefolgte Link ist ungültig."
"Perhaps you pasted in the wrong Base 64 string or the link you are following"
" is bad."
msgstr "Möglicherweise haben Sie einen falschen Base 64 String eingetragen oder der gefolgte Link ist ungültig."
#: ../java/build/Proxy.java:57
msgid "The I2P host could also be offline."
@@ -232,9 +208,7 @@ msgstr "Warnung: Anfrage abgelehnt"
#: ../java/build/Proxy.java:67
msgid "You attempted to connect to a non-I2P website or location."
msgstr ""
"Sie haben versucht eine Webseite oder Adresse ausserhalb von I2P zu "
"erreichen,"
msgstr "Sie haben versucht eine Webseite oder Adresse ausserhalb von I2P zu erreichen,"
#: ../java/build/Proxy.java:68 ../java/build/Proxy.java:74
msgid "Warning: No Outproxy Configured"
@@ -244,9 +218,7 @@ msgstr "Warnung: Kein Outproxy eingerichtet"
msgid ""
"Your request was for a site outside of I2P, but you have no HTTP outproxy "
"configured."
msgstr ""
"Dieser Seitenaufruf ist nach außerhalb von I2P adressiert aber es ist kein "
"Ausgangsproxy eingestellt."
msgstr "Dieser Seitenaufruf ist nach außerhalb von I2P adressiert aber es ist kein Ausgangsproxy eingestellt."
#: ../java/build/Proxy.java:76
msgid "Please configure an outproxy in I2PTunnel."
@@ -260,27 +232,20 @@ msgstr "Warnung: Destinations Schlüssel Konflikt"
msgid ""
"The addresshelper link you followed specifies a different destination key "
"than a host entry in your host database."
msgstr ""
"Der von Ihnen gefolgte Adresshelfer Link definiert einen anderen "
"Destinations Schlüssel als der Host Eintrag in ihrer Host Datenbank."
msgstr "Der von Ihnen gefolgte Adresshelfer Link definiert einen anderen Destinations Schlüssel als der Host Eintrag in ihrer Host Datenbank."
#: ../java/build/Proxy.java:85
msgid ""
"Someone could be trying to impersonate another eepsite, or people have given "
"two eepsites identical names."
msgstr ""
"Jemand kann versuchen Ihnen eine gefälschte Eepsite darzubieten oder zwei "
"Eepsites haben zufäälig den selben Namen."
"Someone could be trying to impersonate another eepsite, or people have given"
" two eepsites identical names."
msgstr "Jemand kann versuchen Ihnen eine gefälschte Eepsite darzubieten oder zwei Eepsites haben zufäälig den selben Namen."
#: ../java/build/Proxy.java:86
msgid ""
"You can resolve the conflict by considering which key you trust, and either "
"discarding the addresshelper link, discarding the host entry from your host "
"database, or naming one of them differently."
msgstr ""
"Sie können diesen Konflikt lösen, in dem Sie entscheiden, welchem Schlüssel "
"Sie vertrauen und entweder den Adresshelfer Link löschen, den Host Eintrag "
"aus ihrere Host Datenbank löschen oder einen anders benennen."
msgstr "Sie können diesen Konflikt lösen, in dem Sie entscheiden, welchem Schlüssel Sie vertrauen und entweder den Adresshelfer Link löschen, den Host Eintrag aus ihrere Host Datenbank löschen oder einen anders benennen."
#: ../java/build/Proxy.java:87
msgid "Proxy Authorization Required"
@@ -291,7 +256,8 @@ msgid "I2P HTTP Proxy Authorization Required"
msgstr "Anmeldung für den I2P-HTTP-Proxy vonnöten"
#: ../java/build/Proxy.java:89
msgid "This proxy is configured to require a username and password for access."
msgid ""
"This proxy is configured to require a username and password for access."
msgstr "Dieser Proxy kann nur mit Benutzername und Passwort erreicht werde."
#: ../java/build/Proxy.java:90
@@ -299,19 +265,15 @@ msgstr "Dieser Proxy kann nur mit Benutzername und Passwort erreicht werde."
msgid ""
"Please enter your username and password, or check your {0}router "
"configuration{1} or {2}I2PTunnel configuration{3}."
msgstr ""
"Bitte Benutzername und Passwort eingeben, oder überprüfe die {0}Router-"
"Einstellungen{1} oder die {2}I2P-Tunnel Einstellungen{3}"
msgstr "Bitte Benutzername und Passwort eingeben, oder überprüfe die {0}Router-Einstellungen{1} oder die {2}I2P-Tunnel Einstellungen{3}"
#: ../java/build/Proxy.java:91
#, java-format
msgid ""
"To disable authorization, remove the configuration {0}i2ptunnel.proxy."
"auth=basic{1}, then stop and restart the HTTP Proxy tunnel."
msgstr ""
"Um die Authorisierung zu deaktivieren, entfernen Sie die Einstellung {0}"
"i2ptunnel.proxy.auth=basic{1}, stoppen und starten Sie dann den HTTP Tunnel "
"neu."
"To disable authorization, remove the configuration "
"{0}i2ptunnel.proxy.auth=basic{1}, then stop and restart the HTTP Proxy "
"tunnel."
msgstr "Um die Authorisierung zu deaktivieren, entfernen Sie die Einstellung {0}i2ptunnel.proxy.auth=basic{1}, stoppen und starten Sie dann den HTTP Tunnel neu."
#: ../java/build/Proxy.java:92 ../java/build/Proxy.java:98
msgid "Warning: Eepsite Unreachable"
@@ -325,9 +287,7 @@ msgstr "Die Eepsite ist nicht erreichbar."
msgid ""
"The eepsite is offline, there is network congestion, or your router is not "
"yet well-integrated with peers."
msgstr ""
"Die Eepsite ist offline, das Netzwerk ist überlastet oder ihr Router ist "
"nicht gut ins Netzwerk integriert. "
msgstr "Die Eepsite ist offline, das Netzwerk ist überlastet oder ihr Router ist nicht gut ins Netzwerk integriert. "
#: ../java/build/Proxy.java:103
msgid "Information: New Host Name"
@@ -341,9 +301,7 @@ msgstr "Information: Ein neuer Hostname mit Adresshelfer."
msgid ""
"The address helper link you followed is for a new host name that is not in "
"your address book."
msgstr ""
"Der Adresshelferlink, den du versuchst aufzurufen, ist für einen neuen "
"Adressnamen, welcher nicht in dem Adressbuch ist."
msgstr "Der Adresshelferlink, den du versuchst aufzurufen, ist für einen neuen Adressnamen, welcher nicht in dem Adressbuch ist."
#: ../java/build/Proxy.java:111
msgid "You may save this host name to your local address book."
@@ -352,25 +310,19 @@ msgstr "Du kannst den Adressnamen in deinem Adressbuch speichern."
#: ../java/build/Proxy.java:112
msgid ""
"If you save it to your address book, you will not see this message again."
msgstr ""
"Wenn Sie ihn ins Adressbuch speichern, sehen Sie diese Nachricht nicht noch "
"einmal."
msgstr "Wenn Sie ihn ins Adressbuch speichern, sehen Sie diese Nachricht nicht noch einmal."
#: ../java/build/Proxy.java:113
msgid ""
"If you do not save it, the host name will be forgotten after the next router "
"restart."
msgstr ""
"Speichern Sie ihn nicht, ist der Host Name nach dem nächsten Router Neustart "
"vergessen."
"If you do not save it, the host name will be forgotten after the next router"
" restart."
msgstr "Speichern Sie ihn nicht, ist der Host Name nach dem nächsten Router Neustart vergessen."
#: ../java/build/Proxy.java:114
msgid ""
"If you do not wish to visit this host, click the \"back\" button on your "
"browser."
msgstr ""
"Möchten Sie diesen Host nicht besuchen, klicken Sie auf den \"Zurück\" Knopf "
"ihres Browsers."
msgstr "Möchten Sie diesen Host nicht besuchen, klicken Sie auf den \"Zurück\" Knopf ihres Browsers."
#: ../java/build/Proxy.java:115 ../java/build/Proxy.java:121
msgid "Warning: Bad Address Helper"
@@ -379,22 +331,17 @@ msgstr "Warnung: Ungültiger Adress-Helfer"
#: ../java/build/Proxy.java:122
#, java-format
msgid "The helper key in the URL ({0}i2paddresshelper={1}) is not resolvable."
msgstr ""
"Der Helfer-Schlüssel in der URL ({0}i2paddresshelper={1}) ist nicht "
"auflösbar."
msgstr "Der Helfer-Schlüssel in der URL ({0}i2paddresshelper={1}) ist nicht auflösbar."
#: ../java/build/Proxy.java:123
msgid "It seems to be garbage data, or a mistyped Base 32 address."
msgstr ""
"Es scheinen Mülldaten oder eine falsch getippte Base 32 Adresse zu sein."
msgstr "Es scheinen Mülldaten oder eine falsch getippte Base 32 Adresse zu sein."
#: ../java/build/Proxy.java:124
msgid ""
"Check your URL to try and fix the helper key to be a valid Base 32 hostname "
"or Base 64 key."
msgstr ""
"Kontrollieren Sie die URL und versuchen Sie den Helfer-Schlüssel in einen "
"korrekten Base 32 Hostnamen oder Base 64 Schlüssel zu bringen."
msgstr "Kontrollieren Sie die URL und versuchen Sie den Helfer-Schlüssel in einen korrekten Base 32 Hostnamen oder Base 64 Schlüssel zu bringen."
#: ../java/build/Proxy.java:125 ../java/build/Proxy.java:131
msgid "Warning: Non-HTTP Protocol"
@@ -405,82 +352,74 @@ msgid "The request uses a bad protocol."
msgstr "Die Anfrage nutzt ein ungültiges Protokoll."
#: ../java/build/Proxy.java:133
#, java-format
msgid "The I2P HTTP Proxy supports {0}http://{1} requests ONLY."
msgstr "Der I2P HTTP Proxy unterstützt einzig nur {0}http://{1} Anfragen."
msgid "The I2P HTTP Proxy supports HTTP and HTTPS requests only."
msgstr "Der I2P HTTP-Proxy unterstützt nur HTTP- und HTTPS-Anfragen."
#: ../java/build/Proxy.java:134
#, java-format
msgid ""
"Other protocols such as {0}https://{1} and {0}ftp://{1} are not allowed."
msgstr ""
"Andere Protokolle wie {0}https://{1} oder {0}ftp://{1} sind nicht erlaubt."
msgid "Other protocols such as FTP are not allowed."
msgstr "Andere Protokolle wie FTP sind nicht erlaubt."
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:571
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:595
msgid "This seems to be a bad destination:"
msgstr "Dies scheint kein gültiges Ziel zu sein:"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:571
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:595
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:638
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:662
#, 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 ""
"Um das Ziel in Ihrer Host-Datenbank zu besuchen, klicken Sie <a href="
"\"{0}\">hier</a>, und um das Ziel aus der kollidierenden Adresshelfer-"
"Anfrage zu besuchen, <a href=\"{1}\">hier</a>!"
"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 "Um das Ziel in Ihrer Host-Datenbank zu besuchen, klicken Sie <a href=\"{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:1042
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1151
msgid "Host"
msgstr "Host"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1046
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1155
msgid "Base 32"
msgstr "Base 32"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1050
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1159
msgid "Destination"
msgstr "Ziel"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1056
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1165
#, java-format
msgid "Continue to {0} without saving"
msgstr "Weiter zu {0}, ohne zu speichern"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1061
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1170
#, 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:1064
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1173
#, 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:1065
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1174
#, 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:1180
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1290
msgid "HTTP Outproxy"
msgstr "HTTP-Outproxy"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1216
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1326
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:"
"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:"
#. Translators: parameter is a host name
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1224
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1334
#, java-format
msgid "{0} jump service"
msgstr "Weiterleitungsdienst {0}"
@@ -514,14 +453,12 @@ msgstr "Weiterleitung zu {0}"
#: ../java/src/net/i2p/i2ptunnel/localServer/LocalHTTPServer.java:210
#, java-format
msgid "Saved {0} to the {1} addressbook, redirecting now."
msgstr ""
"{0} wurde ins {1} Adressbuch geschrieben. Du wirst nun weitergeleitet."
msgstr "{0} wurde ins {1} Adressbuch geschrieben. Du wirst nun weitergeleitet."
#: ../java/src/net/i2p/i2ptunnel/localServer/LocalHTTPServer.java:211
#, 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."
msgstr "Konnte {0} nicht im {1} Adressbuch speichern. Du wirst nun weitergeleitet."
#: ../java/src/net/i2p/i2ptunnel/localServer/LocalHTTPServer.java:213
msgid "Click here if you are not redirected automatically."

View File

@@ -2,7 +2,7 @@
# 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:
# Boxoa590, 2012-2013
# ducki2p <ducki2p@gmail.com>, 2011
@@ -13,15 +13,14 @@ msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-01-09 19:14+0000\n"
"PO-Revision-Date: 2014-01-09 09:54+0000\n"
"POT-Creation-Date: 2014-02-06 18:27+0000\n"
"PO-Revision-Date: 2014-03-22 14:59+0000\n"
"Last-Translator: Towatowa441\n"
"Language-Team: French (http://www.transifex.com/projects/p/I2P/language/"
"fr/)\n"
"Language: fr\n"
"Language-Team: French (http://www.transifex.com/projects/p/I2P/language/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: ../java/build/Proxy.java:5 ../java/build/Proxy.java:11
@@ -85,28 +84,21 @@ msgstr "Le proxy HTTP n'est pas en place"
msgid ""
"It is offline, there is network congestion, or your router is not yet well-"
"integrated with peers."
msgstr ""
"Il est hors ligne, ou il y a congestion du réseau, ou votre routeur n'est "
"pas encore bien intégré avec les pairs."
msgstr "Il est hors ligne, ou il y a congestion du réseau, ou votre routeur n'est pas encore bien intégré avec les pairs."
#: ../java/build/Proxy.java:14
#, java-format
msgid ""
"You may want to {0}retry{1} as this will randomly reselect an outproxy from "
"the pool you have defined {2}here{3} (if you have more than one configured)."
msgstr ""
"Vous pouvez vouloir {0}réessayer{1} car cela va re-sélectionner au hasard un "
"outproxy du pool que vous avez défini {2}içi{3} (si vous en avez plus d'un "
"de configuré)."
msgstr "Vous pouvez vouloir {0}réessayer{1} car cela va re-sélectionner au hasard un outproxy parmi le pool que vous avez défini {2}ici{3} (si vous en avez plus d'un de configuré)."
#: ../java/build/Proxy.java:15
#, java-format
msgid ""
"If you continue to have trouble you may want to edit your outproxy list {0}"
"here{1}."
msgstr ""
"Si vous continuez à avoir des dérangements vous pouvez vouloir modifier "
"votre liste de outproxy {0}içi{1}."
"If you continue to have trouble you may want to edit your outproxy list "
"{0}here{1}."
msgstr "Si vous continuez à avoir des dérangements vous pourriez vouloir modifier votre liste de outproxy {0}ici{1}."
#: ../java/build/Proxy.java:16 ../java/build/Proxy.java:38
#: ../java/build/Proxy.java:59 ../java/build/Proxy.java:102
@@ -129,9 +121,7 @@ msgstr "Votre navigateur n'est pas compatible iFrames."
msgid ""
"Do not use the proxy to access the router console, localhost, or local LAN "
"destinations."
msgstr ""
"Ne pas utiliser le proxy pour accéder à la console du routeur, ni au "
"localhost, ni vers des destinations de votre LAN local."
msgstr "Ne pas utiliser le proxy pour accéder à la console du routeur, ni au localhost, ni vers des destinations de votre LAN local."
#: ../java/build/Proxy.java:26
msgid "Warning: Eepsite Unknown"
@@ -143,8 +133,7 @@ msgstr "Avertissement : Eepsite pas trouvé dans le carnet d'adresses"
#: ../java/build/Proxy.java:33
msgid "The eepsite was not found in your router's addressbook."
msgstr ""
"Le eepsite n'a pas été trouvé dans le carnet d'adresses de votre routeur."
msgstr "Le eepsite n'a pas été trouvé dans le carnet d'adresses de votre routeur."
#: ../java/build/Proxy.java:34
msgid "Check the link or find a Base 32 or Base 64 address."
@@ -153,25 +142,20 @@ msgstr "Cliquez le lien ou trouvez une adresse base 32 ou base 64."
#: ../java/build/Proxy.java:35
#, java-format
msgid "If you have the Base 64 address, {0}add it to your addressbook{1}."
msgstr ""
"Si vous avez l''adresse Base 64, {0}ajoutez-là à votre carnet d''adresse{1}."
msgstr "Si vous avez l''adresse Base 64, {0}ajoutez-là à votre carnet d''adresse{1}."
#: ../java/build/Proxy.java:36
msgid ""
"Otherwise, find a Base 32 or address helper link, or use a jump service link "
"below."
msgstr ""
"Sinon, trouver un lien d'assistant d'adresse ou un lien Base 32, ou utiliser "
"ci-dessous un lien service de saut."
"Otherwise, find a Base 32 or address helper link, or use a jump service link"
" below."
msgstr "Sinon, trouver un lien d'assistant d'adresse ou un lien Base 32, ou utiliser ci-dessous un lien service de saut."
#: ../java/build/Proxy.java:37
#, java-format
msgid ""
"Seeing this page often? See {0}the FAQ{1} for help in {2}adding some "
"subscriptions{3} to your addressbook."
msgstr ""
"Voyez-vous cette page souvent ? Voyez {0}la FAQ{1} pour de l'aide afin d'{2}"
"ajouter quelques abonnements{3} à votre carnet d'adresses."
msgstr "Voyez-vous cette page souvent ? Voyez {0}la FAQ{1} pour de l'aide afin d'{2}ajouter quelques abonnements{3} à votre carnet d'adresses."
#: ../java/build/Proxy.java:39 ../java/build/Proxy.java:45
msgid "Warning: Invalid Request URI"
@@ -179,17 +163,13 @@ msgstr "Avertissement : demande invalide d'URI"
#: ../java/build/Proxy.java:46
msgid "The request URI is invalid, and probably contains illegal characters."
msgstr ""
"L'URI de la requête n'est pas valide, et contient probablement des "
"caractères illégaux."
msgstr "L'URI de la requête n'est pas valide, et contient probablement des caractères illégaux."
#: ../java/build/Proxy.java:47
msgid ""
"If you clicked a link, check the end of the URI for any characters the "
"browser has mistakenly added on."
msgstr ""
"Si vous avez cliqué sur un lien, vérifiez la fin de l'URI pour d'éventuels "
"caractères que le navigateur aurait ajourté à tort."
msgstr "Si vous avez cliqué sur un lien, vérifiez la fin de l'URI pour d'éventuels caractères que le navigateur aurait ajourté à tort."
#: ../java/build/Proxy.java:48 ../java/build/Proxy.java:54
msgid "Warning: Invalid Destination"
@@ -199,17 +179,13 @@ msgstr "Avertissement : destination invalide"
msgid ""
"The eepsite destination specified was not valid, or was otherwise "
"unreachable."
msgstr ""
"La destination vers l'eepsite spécifié n'était pas valide, ou autrement "
"était inaccessible."
msgstr "La destination vers l'eepsite spécifié n'était pas valide, ou autrement était inaccessible."
#: ../java/build/Proxy.java:56
msgid ""
"Perhaps you pasted in the wrong Base 64 string or the link you are following "
"is bad."
msgstr ""
"Peut-être que vous avez collé dans la mauvaise chaîne base 64, ou le lien "
"que vous suivez est mauvais."
"Perhaps you pasted in the wrong Base 64 string or the link you are following"
" is bad."
msgstr "Peut-être que vous avez collé dans la mauvaise chaîne base 64, ou le lien que vous suivez est mauvais."
#: ../java/build/Proxy.java:57
msgid "The I2P host could also be offline."
@@ -236,9 +212,7 @@ msgstr "Avertissement : pas de proxy sortant configuré"
msgid ""
"Your request was for a site outside of I2P, but you have no HTTP outproxy "
"configured."
msgstr ""
"Votre demande était pour un site en dehors de I2P, mais vous n'avez aucun "
"outproxy HTTP de configuré."
msgstr "Votre demande était pour un site en dehors de I2P, mais vous n'avez aucun outproxy HTTP de configuré."
#: ../java/build/Proxy.java:76
msgid "Please configure an outproxy in I2PTunnel."
@@ -252,29 +226,20 @@ msgstr "Avertissement : conflit de clé de destination"
msgid ""
"The addresshelper link you followed specifies a different destination key "
"than a host entry in your host database."
msgstr ""
"Le lien d'assistant d'adresse que vous avez suivi spécifie une clé de "
"destination différente de l'entrée d'hôte contenue dans votre base de "
"données hôte."
msgstr "Le lien d'assistant d'adresse que vous avez suivi spécifie une clé de destination différente de l'entrée d'hôte contenue dans votre base de données hôte."
#: ../java/build/Proxy.java:85
msgid ""
"Someone could be trying to impersonate another eepsite, or people have given "
"two eepsites identical names."
msgstr ""
"Quelqu'un pourrait essayer de se faire passer pour un autre eepsite, ou des "
"gens ont donné des noms identiques à deux eepsites."
"Someone could be trying to impersonate another eepsite, or people have given"
" two eepsites identical names."
msgstr "Quelqu'un pourrait essayer de se faire passer pour un autre eepsite, ou des gens ont donné des noms identiques à deux eepsites."
#: ../java/build/Proxy.java:86
msgid ""
"You can resolve the conflict by considering which key you trust, and either "
"discarding the addresshelper link, discarding the host entry from your host "
"database, or naming one of them differently."
msgstr ""
"Vous pouvez résoudre le conflit en considérant à quelle clé vous faites "
"confiance, et soit rejeter le lien de l'assistant d'adresse en rejetant "
"l'entrée d'hôte hors de votre base de données hôte, ou nommer l'une d'elles "
"différemment."
msgstr "Vous pouvez résoudre le conflit en considérant à quelle clé vous faites confiance, et soit rejeter le lien de l'assistant d'adresse en rejetant l'entrée d'hôte hors de votre base de données hôte, ou nommer l'une d'elles différemment."
#: ../java/build/Proxy.java:87
msgid "Proxy Authorization Required"
@@ -285,28 +250,24 @@ msgid "I2P HTTP Proxy Authorization Required"
msgstr "Autorisation requise par le proxy HTTP de I2P"
#: ../java/build/Proxy.java:89
msgid "This proxy is configured to require a username and password for access."
msgstr ""
"Ce proxy est configuré pour exiger un nom d'utilisateur et un mot de passe "
"pour y accéder."
msgid ""
"This proxy is configured to require a username and password for access."
msgstr "Ce proxy est configuré pour exiger un nom d''utilisateur et un mot de passe pour y accéder."
#: ../java/build/Proxy.java:90
#, java-format
msgid ""
"Please enter your username and password, or check your {0}router "
"configuration{1} or {2}I2PTunnel configuration{3}."
msgstr ""
"Veuillez saisir votre nom d''utilisateur et mot de passe, ou vérifier votre "
"{0}configuration de routeur{1} ou {2}configuration de I2PTunnel{3}."
msgstr "Veuillez saisir votre nom d''utilisateur et mot de passe, ou vérifier votre {0}configuration de routeur{1} ou {2}configuration de I2PTunnel{3}."
#: ../java/build/Proxy.java:91
#, java-format
msgid ""
"To disable authorization, remove the configuration {0}i2ptunnel.proxy."
"auth=basic{1}, then stop and restart the HTTP Proxy tunnel."
msgstr ""
"Pour désactiver l''autorisation, supprimer la configuration {0}i2ptunnel."
"proxy.auth=basic{1}, puis arrêtez et redémarrez le tunnel du proxy HTTP."
"To disable authorization, remove the configuration "
"{0}i2ptunnel.proxy.auth=basic{1}, then stop and restart the HTTP Proxy "
"tunnel."
msgstr "Pour désactiver l''autorisation, supprimer la configuration {0}i2ptunnel.proxy.auth=basic{1}, puis arrêtez et redémarrez le tunnel du proxy HTTP."
#: ../java/build/Proxy.java:92 ../java/build/Proxy.java:98
msgid "Warning: Eepsite Unreachable"
@@ -320,9 +281,7 @@ msgstr "Le eepsite n'était pas joignable."
msgid ""
"The eepsite is offline, there is network congestion, or your router is not "
"yet well-integrated with peers."
msgstr ""
"Le eepsite est hors ligne, ou il y a congestion du réseau, ou votre routeur "
"n'est pas encore bien intégré avec les pairs."
msgstr "Le eepsite est hors ligne, ou il y a congestion du réseau, ou votre routeur n'est pas encore bien intégré avec les pairs."
#: ../java/build/Proxy.java:103
msgid "Information: New Host Name"
@@ -336,38 +295,28 @@ msgstr "Information : nouveau nom d'hôte avec assistant d'adresse"
msgid ""
"The address helper link you followed is for a new host name that is not in "
"your address book."
msgstr ""
"Le lien d'assistant d'adresse que vous avez suivi est pour un nouveau nom "
"d'hôte qui n'est pas dans votre carnet d'adresses."
msgstr "Le lien d'assistant d'adresse que vous avez suivi est pour un nouveau nom d'hôte qui n'est pas dans votre carnet d'adresses."
#: ../java/build/Proxy.java:111
msgid "You may save this host name to your local address book."
msgstr ""
"Il vous est possible d'enregistrer ce nom d'hôte à votre carnet d'adresses "
"local."
msgstr "Il vous est possible d'enregistrer ce nom d'hôte à votre carnet d'adresses local."
#: ../java/build/Proxy.java:112
msgid ""
"If you save it to your address book, you will not see this message again."
msgstr ""
"Si vous l'enregistrez dans votre carnet d'adresses, vous ne verrez plus ce "
"message."
msgstr "Si vous l'enregistrez dans votre carnet d'adresses, vous ne verrez plus ce message."
#: ../java/build/Proxy.java:113
msgid ""
"If you do not save it, the host name will be forgotten after the next router "
"restart."
msgstr ""
"Si vous n'enregistrez pas, le nom d'hôte sera oublié après le prochain "
"redémarrage du routeur."
"If you do not save it, the host name will be forgotten after the next router"
" restart."
msgstr "Si vous n'enregistrez pas, le nom d'hôte sera oublié après le prochain redémarrage du routeur."
#: ../java/build/Proxy.java:114
msgid ""
"If you do not wish to visit this host, click the \"back\" button on your "
"browser."
msgstr ""
"Si vous ne souhaitez pas visiter cet hôte, cliquez sur le bouton \"précédent"
"\" de votre navigateur."
msgstr "Si vous ne souhaitez pas visiter cet hôte, cliquez sur le bouton \"précédent\" de votre navigateur."
#: ../java/build/Proxy.java:115 ../java/build/Proxy.java:121
msgid "Warning: Bad Address Helper"
@@ -376,22 +325,17 @@ msgstr "Avertissement : mauvais assistant d'adresse"
#: ../java/build/Proxy.java:122
#, java-format
msgid "The helper key in the URL ({0}i2paddresshelper={1}) is not resolvable."
msgstr ""
"La clé auxiliaire dans l''URL ({0}i2paddresshelper={1}) n''est pas résoluble."
msgstr "La clé auxiliaire dans l''URL ({0}i2paddresshelper={1}) n''est pas résoluble."
#: ../java/build/Proxy.java:123
msgid "It seems to be garbage data, or a mistyped Base 32 address."
msgstr ""
"Il semble y avoir des données incorrectes, ou une faute de frappe dans "
"l'adresse Base 32."
msgstr "Il semble y avoir des données incorrectes, ou une faute de frappe dans l'adresse Base 32."
#: ../java/build/Proxy.java:124
msgid ""
"Check your URL to try and fix the helper key to be a valid Base 32 hostname "
"or Base 64 key."
msgstr ""
"Vérifiez votre URL afin d'essayer de résoudre la clé d'assistance pour "
"qu'elle soit un nom d'hôte Base 32 valide ou clé Base 64."
msgstr "Vérifiez votre URL afin d'essayer de résoudre la clé d'assistance pour qu'elle soit un nom d'hôte Base 32 valide ou clé Base 64."
#: ../java/build/Proxy.java:125 ../java/build/Proxy.java:131
msgid "Warning: Non-HTTP Protocol"
@@ -402,87 +346,74 @@ msgid "The request uses a bad protocol."
msgstr "La requête utilise un mauvais protocole."
#: ../java/build/Proxy.java:133
#, java-format
msgid "The I2P HTTP Proxy supports {0}http://{1} requests ONLY."
msgstr ""
"Le proxy HTTP I2P prend en charge les demandes {0}http://{1} uniquement."
msgid "The I2P HTTP Proxy supports HTTP and HTTPS requests only."
msgstr "Le proxy HTTP d'I2P soutient les requêtes HTTP et HTTPS seulement."
#: ../java/build/Proxy.java:134
#, java-format
msgid ""
"Other protocols such as {0}https://{1} and {0}ftp://{1} are not allowed."
msgstr ""
"D''autres protocoles tels que {0}https://{1} et {0}ftp://{1} ne sont pas "
"autorisés."
msgid "Other protocols such as FTP are not allowed."
msgstr "Les autres protocoles tel que le FTP ne sont pas permis."
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:571
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:595
msgid "This seems to be a bad destination:"
msgstr "Cela semble être une mauvaise destination"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:571
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:595
msgid "i2paddresshelper cannot help you with a destination like that!"
msgstr ""
"L'assistant d'adresse ne peut pas vous aider avec une destination comme "
"cela !"
msgstr "L'assistant d'adresse ne peut pas vous aider avec une destination comme cela !"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:638
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:662
#, 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 ""
"Pour aller à la destination de votre base de données d''hôtes, cliquez <a "
"href=\"{0}\">içi</a>. Pour aller à la destination de l''assistant d''adresse "
"en conflit, cliquez <a href=\"{1}\">ici</a>."
"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 "Pour aller à la destination de votre base de données d''hôtes, cliquez <a href=\"{0}\">ici</a>. Pour aller à la destination de l''assistant d''adresse en conflit, cliquez <a href=\"{1}\">ici</a>."
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1042
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1151
msgid "Host"
msgstr "Hôte"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1046
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1155
msgid "Base 32"
msgstr "Base 32"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1050
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1159
msgid "Destination"
msgstr "Destination"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1056
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1165
#, java-format
msgid "Continue to {0} without saving"
msgstr ""
"Aller sur le site i2p {0} sans enregistrer dans un carnet d''adresses. "
msgstr "Aller sur le site i2p {0} sans enregistrer dans un carnet d''adresses. "
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1061
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1170
#, java-format
msgid "Save {0} to router address book and continue to eepsite"
msgstr "Ajouter au carnet d''adresse du routeur {0} et aller sur le site i2p"
#. only blockfile supports multiple books
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1064
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1173
#, java-format
msgid "Save {0} to master address book and continue to eepsite"
msgstr "Ajouter au carnet d''adresse principal {0} et aller sur le site i2p"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1065
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1174
#, java-format
msgid "Save {0} to private address book and continue to eepsite"
msgstr "Ajouter au carnet d''adresse privé {0} et aller sur le site i2p"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1180
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1290
msgid "HTTP Outproxy"
msgstr "Proxy sortant HTTP"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1216
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1326
msgid ""
"Click a link below to look for an address helper by using a \"jump\" service:"
msgstr ""
"Cliquez sur un des liens ci-dessous pour chercher une aide d'adresse en "
"utilisant un \"service de saut\":"
"Click a link below to look for an address helper by using a \"jump\" "
"service:"
msgstr "Cliquez sur un des liens ci-dessous pour chercher une aide d'adresse en utilisant un \"service de saut\":"
#. Translators: parameter is a host name
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1224
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1334
#, java-format
msgid "{0} jump service"
msgstr "{0} jump service"
@@ -490,11 +421,11 @@ msgstr "{0} jump service"
#: ../java/src/net/i2p/i2ptunnel/localServer/LocalHTTPServer.java:162
#, java-format
msgid "Added via address helper from {0}"
msgstr "Ajouté via assistant d''adresse depuis {0}"
msgstr "Ajouté via l''assistant d''adresse depuis {0}"
#: ../java/src/net/i2p/i2ptunnel/localServer/LocalHTTPServer.java:164
msgid "Added via address helper"
msgstr "Ajouté via assitant d'adresse"
msgstr "Ajouté via l''assistant d''adresse"
#: ../java/src/net/i2p/i2ptunnel/localServer/LocalHTTPServer.java:187
msgid "router"

View File

@@ -2,29 +2,28 @@
# 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:
# IOException <opexob@yandex.ru>, 2013
# Андрей Лукьяненко <operru32@yandex.ru>, 2013
# ducki2p <ducki2p@gmail.com>, 2011
# foo <foo@bar>, 2009
# gmind, 2012-2013
# Nikolay Parukhin <parukhin@gmail.com>, 2014
# sfix <anon-9b36b2e@lycos.com>, 2013
msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-01-09 19:11+0000\n"
"PO-Revision-Date: 2013-11-20 06:36+0000\n"
"Last-Translator: IOException <opexob@yandex.ru>\n"
"Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/I2P/"
"language/ru_RU/)\n"
"Language: ru_RU\n"
"POT-Creation-Date: 2014-02-06 18:27+0000\n"
"PO-Revision-Date: 2014-03-17 19:03+0000\n"
"Last-Translator: Nikolay Parukhin <parukhin@gmail.com>\n"
"Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/I2P/language/ru_RU/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\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"
"Language: ru_RU\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/build/Proxy.java:5 ../java/build/Proxy.java:11
msgid "Warning: Outproxy Not Found"
@@ -87,28 +86,21 @@ msgstr "HTTP-прокси не поднят"
msgid ""
"It is offline, there is network congestion, or your router is not yet well-"
"integrated with peers."
msgstr ""
"Возможно, он отключен, сеть перегружена или ваш маршрутизатор недостаточно "
"интегрирован с другими узлами."
msgstr "Возможно, он отключен, сеть перегружена или ваш маршрутизатор недостаточно интегрирован с другими узлами."
#: ../java/build/Proxy.java:14
#, java-format
msgid ""
"You may want to {0}retry{1} as this will randomly reselect an outproxy from "
"the pool you have defined {2}here{3} (if you have more than one configured)."
msgstr ""
"Вы можете {0}повторить{1} операцию (это случайным образом выберет прокси-"
"сервер из определенного {2}здесь{3} списка, если вы настроили более одного "
"прокси-сервера)."
msgstr "Вы можете {0}повторить{1} операцию (это случайным образом выберет прокси-сервер из определенного {2}здесь{3} списка, если вы настроили более одного прокси-сервера)."
#: ../java/build/Proxy.java:15
#, java-format
msgid ""
"If you continue to have trouble you may want to edit your outproxy list {0}"
"here{1}."
msgstr ""
"Если проблема продолжит появляться, вы можете изменить список прокси-"
"серверов {0}здесь{1}."
"If you continue to have trouble you may want to edit your outproxy list "
"{0}here{1}."
msgstr "Если проблема продолжит появляться, вы можете изменить список прокси-серверов {0}здесь{1}."
#: ../java/build/Proxy.java:16 ../java/build/Proxy.java:38
#: ../java/build/Proxy.java:59 ../java/build/Proxy.java:102
@@ -131,9 +123,7 @@ msgstr "Ваш браузер не поддерживает iFrames"
msgid ""
"Do not use the proxy to access the router console, localhost, or local LAN "
"destinations."
msgstr ""
"Не используйте прокси-сервер для доступа к консоли маршрутизатора, "
"локальному компьютеру или локальной сети."
msgstr "Не используйте прокси-сервер для доступа к консоли маршрутизатора, локальному компьютеру или локальной сети."
#: ../java/build/Proxy.java:26
msgid "Warning: Eepsite Unknown"
@@ -158,20 +148,16 @@ msgstr "Если у вас есть адрес Base64, {0}добавьте ег
#: ../java/build/Proxy.java:36
msgid ""
"Otherwise, find a Base 32 or address helper link, or use a jump service link "
"below."
msgstr ""
"В противном случае найдите ссылку Base32 или AddressHelper или используйте "
"Jump-службу."
"Otherwise, find a Base 32 or address helper link, or use a jump service link"
" below."
msgstr "В противном случае найдите ссылку Base32 или AddressHelper или используйте Jump-службу."
#: ../java/build/Proxy.java:37
#, java-format
msgid ""
"Seeing this page often? See {0}the FAQ{1} for help in {2}adding some "
"subscriptions{3} to your addressbook."
msgstr ""
"Если вы слишком часто попадаете на эту страницу, то обратитесь к {0}FAQ{1} "
"за инструкциями по {2}добавлению подписок{3} адресной книги."
msgstr "Если вы слишком часто попадаете на эту страницу, то обратитесь к {0}FAQ{1} за инструкциями по {2}добавлению подписок{3} адресной книги."
#: ../java/build/Proxy.java:39 ../java/build/Proxy.java:45
msgid "Warning: Invalid Request URI"
@@ -185,9 +171,7 @@ msgstr "Некорректный URI запроса. Возможно, он со
msgid ""
"If you clicked a link, check the end of the URI for any characters the "
"browser has mistakenly added on."
msgstr ""
"Если вы прошли по ссылке, проверьте конец URI на наличие символов, ошибочно "
"добавленных браузером."
msgstr "Если вы прошли по ссылке, проверьте конец URI на наличие символов, ошибочно добавленных браузером."
#: ../java/build/Proxy.java:48 ../java/build/Proxy.java:54
msgid "Warning: Invalid Destination"
@@ -201,11 +185,9 @@ msgstr "Указанный адрес недействителен или нед
#: ../java/build/Proxy.java:56
msgid ""
"Perhaps you pasted in the wrong Base 64 string or the link you are following "
"is bad."
msgstr ""
"Возможно, вы вставили неправильную строку Base64 или прошли по нерабочей "
"ссылке."
"Perhaps you pasted in the wrong Base 64 string or the link you are following"
" is bad."
msgstr "Возможно, вы вставили неправильную строку Base64 или прошли по нерабочей ссылке."
#: ../java/build/Proxy.java:57
msgid "The I2P host could also be offline."
@@ -232,9 +214,7 @@ msgstr "Предупреждение: Выходной прокси-сервер
msgid ""
"Your request was for a site outside of I2P, but you have no HTTP outproxy "
"configured."
msgstr ""
"Вы запросили страницу вне сети I2P, но не имеете настроенного выходного "
"прокси-сервера."
msgstr "Вы запросили страницу вне сети I2P, но не имеете настроенного выходного прокси-сервера."
#: ../java/build/Proxy.java:76
msgid "Please configure an outproxy in I2PTunnel."
@@ -248,27 +228,20 @@ msgstr "Предупреждение: Конфликт ключа назначе
msgid ""
"The addresshelper link you followed specifies a different destination key "
"than a host entry in your host database."
msgstr ""
"Ссылка AddressHelper, по которой вы прошли, определяет ключ назначения, "
"отличный от указанного в адресной книге."
msgstr "Ссылка AddressHelper, по которой вы прошли, определяет ключ назначения, отличный от указанного в адресной книге."
#: ../java/build/Proxy.java:85
msgid ""
"Someone could be trying to impersonate another eepsite, or people have given "
"two eepsites identical names."
msgstr ""
"Кто-то может пытаться выдать себя за другой сайт или разные люди дали двум "
"сайтам одинаковые имена."
"Someone could be trying to impersonate another eepsite, or people have given"
" two eepsites identical names."
msgstr "Кто-то может пытаться выдать себя за другой сайт или разные люди дали двум сайтам одинаковые имена."
#: ../java/build/Proxy.java:86
msgid ""
"You can resolve the conflict by considering which key you trust, and either "
"discarding the addresshelper link, discarding the host entry from your host "
"database, or naming one of them differently."
msgstr ""
"Для разрешения конфликта вы можете определить, какому ключу вы доверяете, и "
"либо отказаться от прохода по ссылке, либо удалить старый ключ, либо "
"присвоить одному из них другое имя."
msgstr "Для разрешения конфликта вы можете определить, какому ключу вы доверяете, и либо отказаться от прохода по ссылке, либо удалить старый ключ, либо присвоить одному из них другое имя."
#: ../java/build/Proxy.java:87
msgid "Proxy Authorization Required"
@@ -279,7 +252,8 @@ msgid "I2P HTTP Proxy Authorization Required"
msgstr "Авторизация outproxy"
#: ../java/build/Proxy.java:89
msgid "This proxy is configured to require a username and password for access."
msgid ""
"This proxy is configured to require a username and password for access."
msgstr "Этот прокси-сервер требует имя пользователя и пароль для доступа."
#: ../java/build/Proxy.java:90
@@ -287,18 +261,15 @@ msgstr "Этот прокси-сервер требует имя пользов
msgid ""
"Please enter your username and password, or check your {0}router "
"configuration{1} or {2}I2PTunnel configuration{3}."
msgstr ""
"Введите имя и пароль или проверьте ваши {0}настройки маршрутизатора{1} и {2}"
"настройки I2PTunnel{3}."
msgstr "Введите имя и пароль или проверьте ваши {0}настройки маршрутизатора{1} и {2}настройки I2PTunnel{3}."
#: ../java/build/Proxy.java:91
#, java-format
msgid ""
"To disable authorization, remove the configuration {0}i2ptunnel.proxy."
"auth=basic{1}, then stop and restart the HTTP Proxy tunnel."
msgstr ""
"Для отключения авторизации удалите строку {0}i2ptunnel.proxy.auth=basic{1} и "
"перезапустите туннель HTTP Proxy."
"To disable authorization, remove the configuration "
"{0}i2ptunnel.proxy.auth=basic{1}, then stop and restart the HTTP Proxy "
"tunnel."
msgstr "Для отключения авторизации удалите строку {0}i2ptunnel.proxy.auth=basic{1} и перезапустите туннель HTTP Proxy."
#: ../java/build/Proxy.java:92 ../java/build/Proxy.java:98
msgid "Warning: Eepsite Unreachable"
@@ -312,9 +283,7 @@ msgstr "Сайт I2P недоступен."
msgid ""
"The eepsite is offline, there is network congestion, or your router is not "
"yet well-integrated with peers."
msgstr ""
"Возможно, он отключен, сеть перегружена или ваш маршрутизатор недостаточно "
"интегрирован с другими узлами."
msgstr "Возможно, он отключен, сеть перегружена или ваш маршрутизатор недостаточно интегрирован с другими узлами."
#: ../java/build/Proxy.java:103
msgid "Information: New Host Name"
@@ -328,9 +297,7 @@ msgstr "Информация: Новый доменной адрес с AddressH
msgid ""
"The address helper link you followed is for a new host name that is not in "
"your address book."
msgstr ""
"Ссылка AddressHelper, по которой вы прошли, ведет на домен, не внесенный в "
"адресную книгу."
msgstr "Ссылка AddressHelper, по которой вы прошли, ведет на домен, не внесенный в адресную книгу."
#: ../java/build/Proxy.java:111
msgid "You may save this host name to your local address book."
@@ -339,23 +306,19 @@ msgstr "Вы можете сохранить этот домен в свою л
#: ../java/build/Proxy.java:112
msgid ""
"If you save it to your address book, you will not see this message again."
msgstr ""
"Если вы сохраните его в вашей адресной книге, вы больше не будете видеть это "
"сообщение."
msgstr "Если вы сохраните его в вашей адресной книге, вы больше не будете видеть это сообщение."
#: ../java/build/Proxy.java:113
msgid ""
"If you do not save it, the host name will be forgotten after the next router "
"restart."
msgstr ""
"Если вы не сохраните его, он будет «забыт» после перезапуска маршрутизатора."
"If you do not save it, the host name will be forgotten after the next router"
" restart."
msgstr "Если вы не сохраните его, он будет «забыт» после перезапуска маршрутизатора."
#: ../java/build/Proxy.java:114
msgid ""
"If you do not wish to visit this host, click the \"back\" button on your "
"browser."
msgstr ""
"Если вы не хотите посещать этот сайт, нажмите кнопку «Назад» в браузере."
msgstr "Если вы не хотите посещать этот сайт, нажмите кнопку «Назад» в браузере."
#: ../java/build/Proxy.java:115 ../java/build/Proxy.java:121
msgid "Warning: Bad Address Helper"
@@ -374,9 +337,7 @@ msgstr "Возможно, он содержит ненужные данные и
msgid ""
"Check your URL to try and fix the helper key to be a valid Base 32 hostname "
"or Base 64 key."
msgstr ""
"Проверьте URL и попробуйте исправить ссылку с использованием корректной "
"ссылки Base32 или Base64."
msgstr "Проверьте URL и попробуйте исправить ссылку с использованием корректной ссылки Base32 или Base64."
#: ../java/build/Proxy.java:125 ../java/build/Proxy.java:131
msgid "Warning: Non-HTTP Protocol"
@@ -387,86 +348,74 @@ msgid "The request uses a bad protocol."
msgstr "Запрос отправлен через неподдерживанмый протокол."
#: ../java/build/Proxy.java:133
#, java-format
msgid "The I2P HTTP Proxy supports {0}http://{1} requests ONLY."
msgstr "HTTP-прокси I2P поддерживает ТОЛЬКО протокол {0}http://{1}."
msgid "The I2P HTTP Proxy supports HTTP and HTTPS requests only."
msgstr "I2P HTTP прокси поддерживает только HTTP и HTTPS запросы."
#: ../java/build/Proxy.java:134
#, java-format
msgid ""
"Other protocols such as {0}https://{1} and {0}ftp://{1} are not allowed."
msgstr ""
"Другие протоколы, такие как {0}https://{1} и {0}ftp://{1} не поддерживаются."
msgid "Other protocols such as FTP are not allowed."
msgstr "Другие протоколы, такие как FTP не допустимы."
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:571
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:595
msgid "This seems to be a bad destination:"
msgstr "Кажется это плохой адрес назначения:"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:571
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:595
msgid "i2paddresshelper cannot help you with a destination like that!"
msgstr "С таким адресом назначения i2paddresshelper вам не поможет!"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:638
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:662
#, 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>."
"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:1042
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1151
msgid "Host"
msgstr "Адрес"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1046
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1155
msgid "Base 32"
msgstr "Base 32"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1050
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1159
msgid "Destination"
msgstr "Адрес назначения"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1056
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1165
#, java-format
msgid "Continue to {0} without saving"
msgstr "Продолжить переход к {0} без сохранения"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1061
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1170
#, java-format
msgid "Save {0} to router address book and continue to eepsite"
msgstr ""
"Сохранить {0} в адресную книгу роутера (router address book) и продолжить "
"переход к eep-сайту"
msgstr "Сохранить {0} в адресную книгу роутера (router address book) и продолжить переход к eep-сайту"
#. only blockfile supports multiple books
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1064
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1173
#, java-format
msgid "Save {0} to master address book and continue to eepsite"
msgstr ""
"Сохранить {0} в основную (master) адресную книгу и продолжить переход к eep-"
"сайту"
msgstr "Сохранить {0} в основную (master) адресную книгу и продолжить переход к eep-сайту"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1065
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1174
#, java-format
msgid "Save {0} to private address book and continue to eepsite"
msgstr ""
"Сохранить {0} в приватную адресную книгу и продолжить переход к eep-сайту"
msgstr "Сохранить {0} в приватную адресную книгу и продолжить переход к eep-сайту"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1180
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1290
msgid "HTTP Outproxy"
msgstr "HTTP Outproxy"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1216
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1326
msgid ""
"Click a link below to look for an address helper by using a \"jump\" service:"
msgstr ""
"Jump-сервисы, которые, возможно, знают нужную Вам addresshelper-ссылку:"
"Click a link below to look for an address helper by using a \"jump\" "
"service:"
msgstr "Jump-сервисы, которые, возможно, знают нужную Вам addresshelper-ссылку:"
#. Translators: parameter is a host name
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1224
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1334
#, java-format
msgid "{0} jump service"
msgstr "{0} jump service"

File diff suppressed because it is too large Load Diff

View File

@@ -14,8 +14,8 @@ msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-01-09 19:27+0000\n"
"PO-Revision-Date: 2014-01-13 16:45+0000\n"
"POT-Creation-Date: 2014-02-06 18:27+0000\n"
"PO-Revision-Date: 2014-03-13 20:13+0000\n"
"Last-Translator: Towatowa441\n"
"Language-Team: French (http://www.transifex.com/projects/p/I2P/language/fr/)\n"
"MIME-Version: 1.0\n"
@@ -24,141 +24,141 @@ msgstr ""
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: ../java/src/net/i2p/i2ptunnel/web/EditBean.java:350
#: ../java/src/net/i2p/i2ptunnel/web/EditBean.java:360
#: ../java/src/net/i2p/i2ptunnel/web/EditBean.java:363
#: ../java/src/net/i2p/i2ptunnel/web/EditBean.java:373
msgid "internal"
msgstr "interne"
#: ../java/src/net/i2p/i2ptunnel/web/EditBean.java:436
#: ../java/src/net/i2p/i2ptunnel/web/EditBean.java:449
#, java-format
msgid "{0} inbound, {0} outbound tunnel"
msgid_plural "{0} inbound, {0} outbound tunnels"
msgstr[0] "{0} entrant, {0} sortant tunnels"
msgstr[1] "{0} entrants, {0} sortants tunnels"
#: ../java/src/net/i2p/i2ptunnel/web/EditBean.java:440
#: ../java/src/net/i2p/i2ptunnel/web/EditBean.java:453
msgid "lower bandwidth and reliability"
msgstr "bande passante et fiabilité plus basses"
#: ../java/src/net/i2p/i2ptunnel/web/EditBean.java:442
#: ../java/src/net/i2p/i2ptunnel/web/EditBean.java:455
msgid "standard bandwidth and reliability"
msgstr "basse passante et fiabilité standards"
#: ../java/src/net/i2p/i2ptunnel/web/EditBean.java:444
#: ../java/src/net/i2p/i2ptunnel/web/EditBean.java:457
msgid "higher bandwidth and reliability"
msgstr "basse passante et fiabilité plus élevées"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:121
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:123
msgid "Tunnels are not initialized yet, please reload in two minutes."
msgstr "Les tunnels sont pas encore initialisés, s'il vous plaît rechargez dans deux minutes."
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:194
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:196
msgid ""
"Invalid form submission, probably because you used the 'back' or 'reload' "
"button on your browser. Please resubmit."
msgstr "Échec de soumission du formulaire: vous avez peut-être utilisé le bouton \"Page précédente\" ou \"Recharger\" de votre navigateur. Merci de soumettre à nouveau."
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:196
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:198
msgid ""
"If the problem persists, verify that you have cookies enabled in your "
"browser."
msgstr "Si le problème persiste, vérifiez que vous avez activé les cookies dans votre navigateur."
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:242
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:244
msgid "Configuration reloaded for all tunnels"
msgstr "Configuration rechargée pour tous les tunnels"
#. and give them something to look at in any case
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:255
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:257
msgid "Starting tunnel"
msgstr "Démarrage du tunnel"
#. and give them something to look at in any case
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:268
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:270
msgid "Stopping tunnel"
msgstr "Arrêt du tunnel"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:334
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:336
msgid "Configuration changes saved"
msgstr "Modification de configuration enregistrée"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:337
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:339
msgid "Failed to save configuration"
msgstr "Échec d'enregistrement de la configuration"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:459
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:461
msgid "New Tunnel"
msgstr "Nouveau tunnel"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:482
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:492
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:609
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:484
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:494
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:611
msgid "Port not set"
msgstr "Port non défini"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:485
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:611
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:487
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:613
msgid "Invalid port"
msgstr "Port invalide"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:488
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:490
msgid "Warning - ports less than 1024 are not recommended"
msgstr "Avertissement - les ports en dessous de 1024 ne sont pas recommandés"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:504
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:506
msgid "Standard client"
msgstr "Client standard"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:505
msgid "HTTP client"
msgstr "Client HTTP"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:507
msgid "HTTP/HTTPS client"
msgstr "Client HTTP/HTTPS"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:506
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:508
msgid "IRC client"
msgstr "Client IRC"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:507
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:509
msgid "Standard server"
msgstr "Serveur standard"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:508
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:510
msgid "HTTP server"
msgstr "Serveur HTTP"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:509
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:511
msgid "SOCKS 4/4a/5 proxy"
msgstr "Mandataire SOCKS 4/4a/5"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:510
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:512
msgid "SOCKS IRC proxy"
msgstr "Mandataire IRC SOCKS"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:511
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:513
msgid "CONNECT/SSL/HTTPS proxy"
msgstr "Mandataire CONNECT/SSL/HTTPS"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:512
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:514
msgid "IRC server"
msgstr "Serveur IRC"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:513
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:515
msgid "Streamr client"
msgstr "Client flux"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:514
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:516
msgid "Streamr server"
msgstr "Serveur flux"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:515
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:517
msgid "HTTP bidir"
msgstr "bidir HTTP"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:603
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:605
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:313
msgid "Host not set"
msgstr "Hôte non défini"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:605
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:607
msgid "Invalid address"
msgstr "Adresse incorrecte"
@@ -194,7 +194,7 @@ msgstr "Type"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:137
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:137
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:255
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:413
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:422
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:330
msgid "Description"
msgstr "Description"
@@ -212,7 +212,7 @@ msgstr "Point d'accès"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:154
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:167
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:208
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:223
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:170
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:191
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:236
@@ -231,202 +231,211 @@ msgid "Outproxies"
msgstr "Mandataires sortants"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:203
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:378
msgid "Tunnel Destination"
msgstr "Destination de tunnel"
msgid "SSL Outproxies"
msgstr "Proxies sortants SSL"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:215
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:382
msgid "name, name:port, or destination"
msgstr "nom, nom:port, ou destination"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:209
msgid "Use Outproxy Plugin"
msgstr "Utiliser plug-in proxy sortant"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:218
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:386
msgid "b32 not recommended"
msgstr "b32 déconseillée"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:224
msgid "Shared Client"
msgstr "Client partagé"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:228
msgid ""
"(Share tunnels with other clients and irc/httpclients? Change requires "
"restart of client proxy)"
msgstr "(Partager les tunnels avec d'autres clients et des clients http/irc ? La modification requiert le redémarrage du client mandataire)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:232
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:141
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:522
msgid "Auto Start"
msgstr "Démarrage automatique"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:236
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:244
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:213
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:251
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:259
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:145
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:526
msgid "(Check the Box for 'YES')"
msgstr "(Cochez la case pour démarrage automatique en même temps que le routeur)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:240
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:218
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:378
msgid "Tunnel Destination"
msgstr "Destination de tunnel"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:230
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:382
msgid "name, name:port, or destination"
msgstr "nom, nom:port, ou destination"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:233
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:386
msgid "b32 not recommended"
msgstr "b32 déconseillée"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:239
msgid "Shared Client"
msgstr "Client partagé"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:243
msgid ""
"(Share tunnels with other clients and irc/httpclients? Change requires "
"restart of client proxy)"
msgstr "(Partager les tunnels avec d'autres clients et des clients http/irc ? La modification requiert le redémarrage du client mandataire)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:247
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:141
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:522
msgid "Auto Start"
msgstr "Démarrage automatique"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:255
msgid "Enable DCC"
msgstr "Active DCC"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:248
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:263
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:266
msgid "Advanced networking options"
msgstr "Options de réseau avancées"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:250
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:265
msgid ""
"(NOTE: when this client proxy is configured to share tunnels, then these "
"options are for all the shared proxy clients!)"
msgstr "(ATTENTION : quand ce mandataire client est configuré pour partager les tunnels, ces options sont appliquées à tous les mandataires clients partagés)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:252
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:267
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:268
msgid "Tunnel Options"
msgstr "Options de tunnel"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:254
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:269
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:270
msgid "Length"
msgstr "Longueur"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:261
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:276
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:277
msgid "0 hop tunnel (no anonymity)"
msgstr "0 tunnel d'étape (aucun anonymat)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:265
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:280
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:281
msgid "1 hop tunnel (low anonymity)"
msgstr "1 tunnel d'étape (bas anonymat)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:269
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:284
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:285
msgid "2 hop tunnel (medium anonymity)"
msgstr "2 tunnels d'étape (moyen anonymat)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:273
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:288
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:289
msgid "3 hop tunnel (high anonymity)"
msgstr "3 tunnels d'étape (haut anonymat)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:281
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:296
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:297
msgid "hop tunnel (very poor performance)"
msgstr "Tunnel de saut (performances médiocres)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:286
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:301
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:302
msgid "Variance"
msgstr "Variance"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:293
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:308
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:309
msgid "0 hop variance (no randomisation, consistant performance)"
msgstr "Variance à 0 saut (pas d'aléa, performances stables)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:297
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:312
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:313
msgid ""
"+ 0-1 hop variance (medium additive randomisation, subtractive performance)"
msgstr "Variance à + 0 ou 1 saut (aléa moyen, performances diminuées)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:301
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:316
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:317
msgid ""
"+ 0-2 hop variance (high additive randomisation, subtractive performance)"
msgstr "Variance à + 0 à 2 sauts (aléa élevé, performances diminuées)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:305
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:320
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:321
msgid "+/- 0-1 hop variance (standard randomisation, standard performance)"
msgstr "Variance à +/- 0 ou 1 saut (aléas légers, performances diminuées)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:309
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:324
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:325
msgid "+/- 0-2 hop variance (not recommended)"
msgstr "Variance à +/- 0 à 2 sauts (déconseillée)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:320
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:335
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:336
msgid "hop variance"
msgstr "variance de saut"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:325
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:340
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:341
msgid "Count"
msgstr "Nombre"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:329
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:344
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:345
msgid "Backup Count"
msgstr "Secours"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:336
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:351
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:352
msgid "0 backup tunnels (0 redundancy, no added resource usage)"
msgstr "Aucun tunnel de secours (pas de tolérance de pannes, pas de consommation de ressources) "
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:340
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:355
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:356
msgid "1 backup tunnel each direction (low redundancy, low resource usage)"
msgstr "1 tunnel de secours par direction (légère tolérance de pannes, faible consommation de ressources)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:344
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:359
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:360
msgid ""
"2 backup tunnels each direction (medium redundancy, medium resource usage)"
msgstr "2 tunnels de secours par direction (tolérance de pannes moyenne, consommation de ressources moyenne)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:348
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:363
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:364
msgid "3 backup tunnels each direction (high redundancy, high resource usage)"
msgstr "3 tunnels de secours par direction (tolérance de pannes élevée, consommation de ressources élevée)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:356
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:371
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:372
msgid "backup tunnels"
msgstr "Tunnels de secours"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:363
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:378
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:379
msgid "Profile"
msgstr "Profil"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:370
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:385
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:386
msgid "interactive connection"
msgstr "connexion interactive"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:374
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:389
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:390
msgid "bulk connection (downloads/websites/BT)"
msgstr "connexion à fort transfert (téléchargements/sites web/BT)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:376
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:391
msgid "Delay Connect"
msgstr "Retard à la connexion"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:380
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:395
msgid "for request/response connections"
msgstr "pour les connexions demande/réponse"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:384
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:399
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:394
msgid "Router I2CP Address"
msgstr "Adresse I2CP du routeur"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:386
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:401
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:159
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:396
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:413
msgid "Host"
msgstr "Hôte"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:394
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:409
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:165
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:404
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:273
@@ -435,107 +444,107 @@ msgstr "Hôte"
msgid "Port"
msgstr "Port"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:404
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:419
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:502
msgid "Reduce tunnel quantity when idle"
msgstr "Réduire le nombre de tunnels quand inactif"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:406
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:420
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:428
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:440
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:450
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:478
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:488
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:421
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:435
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:443
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:455
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:465
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:493
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:503
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:414
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:504
msgid "Enable"
msgstr "Activer"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:410
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:425
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:508
msgid "Reduced tunnel count"
msgstr "Réduire à"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:414
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:434
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:429
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:449
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:512
msgid "Idle minutes"
msgstr "Minutes d'inactivité"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:418
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:433
msgid "Close tunnels when idle"
msgstr "Fermer les tunnels quand inactif"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:424
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:439
msgid "New Keys on Reopen"
msgstr "Nouvelles clés à la réouverture"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:432
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:447
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:430
msgid "Disable"
msgstr "Désactiver"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:438
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:453
msgid "Delay tunnel open until required"
msgstr "Retarder l'ouverture jusqu'à l'utilisation"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:448
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:463
msgid "Persistent private key"
msgstr "Clé privée persistante"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:454
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:469
msgid "File"
msgstr "Fichier"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:463
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:478
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:243
msgid "Local destination"
msgstr "Destination locale"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:467
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:482
msgid "Local Base 32"
msgstr "Base locale 32"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:476
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:491
msgid "Local Authorization"
msgstr "Autorisation locale"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:482
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:492
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:497
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:507
msgid "Username"
msgstr "Identifiant"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:484
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:496
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:499
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:511
msgid "Password"
msgstr "Mot de passe"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:486
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:501
msgid "Outproxy Authorization"
msgstr "Autorisation de mandataire sortant"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:503
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:518
msgid "Jump URL List"
msgstr "Liste d'URL de sauts"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:509
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:524
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:548
msgid "Custom options"
msgstr "Options personnelles"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:513
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:528
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:552
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:702
msgid "Cancel"
msgstr "Annuler"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:517
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:532
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:556
msgid "Delete"
msgstr "Supprimer"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:519
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:534
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:558
msgid "Save"
msgstr "Enregistrer"
@@ -786,7 +795,7 @@ msgid "New server tunnel"
msgstr "Nouveau tunnel serveur"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:265
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:423
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:432
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:223
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:265
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:295
@@ -796,7 +805,7 @@ msgid "Standard"
msgstr "Standard"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:267
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:425
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:434
msgid "Create"
msgstr "Créer"
@@ -821,11 +830,15 @@ msgstr "Mandataire sortant"
msgid "Destination"
msgstr "Destination"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:408
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:395
msgid "internal plugin"
msgstr "plugin interne"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:414
msgid "none"
msgstr "aucun"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:421
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:430
msgid "New client tunnel"
msgstr "Nouveau tunnel client"
@@ -1146,7 +1159,7 @@ msgstr "Voici un résumé des options que vous avez choisies :"
msgid ""
"Alongside these basic settings, there are a number of advanced options for "
"tunnel configuration."
msgstr "Parallèlement à ces réglages de base, il ya un certain nombre d'options avancées pour la configuration du tunnel."
msgstr "Parallèlement à ces réglages de base, il y a un certain nombre d'options avancées pour la configuration du tunnel."
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:665
msgid ""

View File

@@ -4,14 +4,14 @@
# To contribute translations, see http://www.i2p2.de/newdevelopers
#
# Translators:
# plazmism <gomidori@live.jp>, 2013
# plazmism <gomidori@live.jp>, 2013-2014
msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-01-09 19:27+0000\n"
"PO-Revision-Date: 2014-01-09 19:27+0000\n"
"Last-Translator: kytv <killyourtv@i2pmail.org>\n"
"POT-Creation-Date: 2014-02-06 18:27+0000\n"
"PO-Revision-Date: 2014-02-13 10:06+0000\n"
"Last-Translator: plazmism <gomidori@live.jp>\n"
"Language-Team: Japanese (http://www.transifex.com/projects/p/I2P/language/ja/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,140 +19,140 @@ msgstr ""
"Language: ja\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: ../java/src/net/i2p/i2ptunnel/web/EditBean.java:350
#: ../java/src/net/i2p/i2ptunnel/web/EditBean.java:360
#: ../java/src/net/i2p/i2ptunnel/web/EditBean.java:363
#: ../java/src/net/i2p/i2ptunnel/web/EditBean.java:373
msgid "internal"
msgstr "内部"
#: ../java/src/net/i2p/i2ptunnel/web/EditBean.java:436
#: ../java/src/net/i2p/i2ptunnel/web/EditBean.java:449
#, java-format
msgid "{0} inbound, {0} outbound tunnel"
msgid_plural "{0} inbound, {0} outbound tunnels"
msgstr[0] ""
#: ../java/src/net/i2p/i2ptunnel/web/EditBean.java:440
#: ../java/src/net/i2p/i2ptunnel/web/EditBean.java:453
msgid "lower bandwidth and reliability"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/web/EditBean.java:442
#: ../java/src/net/i2p/i2ptunnel/web/EditBean.java:455
msgid "standard bandwidth and reliability"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/web/EditBean.java:444
#: ../java/src/net/i2p/i2ptunnel/web/EditBean.java:457
msgid "higher bandwidth and reliability"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:121
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:123
msgid "Tunnels are not initialized yet, please reload in two minutes."
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:194
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:196
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:196
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:198
msgid ""
"If the problem persists, verify that you have cookies enabled in your "
"browser."
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:242
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:244
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:255
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:257
msgid "Starting tunnel"
msgstr "トンネルを開始中"
#. and give them something to look at in any case
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:268
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:270
msgid "Stopping tunnel"
msgstr "トンネルを開始中"
msgstr "トンネルを停止中"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:334
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:336
msgid "Configuration changes saved"
msgstr "設定の変更は保存されました"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:337
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:339
msgid "Failed to save configuration"
msgstr "設定を保存できませんでした"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:459
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:461
msgid "New Tunnel"
msgstr "新しいトンネル"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:482
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:492
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:609
msgid "Port not set"
msgstr "ポート設定なし"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:485
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:484
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:494
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:611
msgid "Port not set"
msgstr "ポート未設定"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:487
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:613
msgid "Invalid port"
msgstr "無効なポート"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:488
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:490
msgid "Warning - ports less than 1024 are not recommended"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:504
msgid "Standard client"
msgstr "通常クライアント"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:505
msgid "HTTP client"
msgstr "HTTP クライアント"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:506
msgid "Standard client"
msgstr "標準クライアント"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:507
msgid "HTTP/HTTPS client"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:508
msgid "IRC client"
msgstr "IRC クライアント"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:507
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:509
msgid "Standard server"
msgstr "通常サーバー"
msgstr "標準サーバー"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:508
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:510
msgid "HTTP server"
msgstr "HTTP サーバー"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:509
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:511
msgid "SOCKS 4/4a/5 proxy"
msgstr "SOCKS 4/4a/5 プロキシ"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:510
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:512
msgid "SOCKS IRC proxy"
msgstr "SOCKS IRC プロキシ"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:511
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:513
msgid "CONNECT/SSL/HTTPS proxy"
msgstr "CONNECT/SSL/HTTPS プロキシ"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:512
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:514
msgid "IRC server"
msgstr "IRC サーバー"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:513
msgid "Streamr client"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:514
msgid "Streamr server"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:515
msgid "Streamr client"
msgstr "Streamr クライアント"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:516
msgid "Streamr server"
msgstr "Streamr サーバー"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:517
msgid "HTTP bidir"
msgstr "HTTP 双方向"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:603
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:605
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:313
msgid "Host not set"
msgstr "ホスト設定なし"
msgstr "ホスト設定"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:605
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:607
msgid "Invalid address"
msgstr "無効なアドレス"
@@ -188,7 +188,7 @@ msgstr "タイプ"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:137
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:137
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:255
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:413
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:422
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:330
msgid "Description"
msgstr "説明"
@@ -206,7 +206,7 @@ msgstr "アクセスポイント"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:154
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:167
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:208
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:223
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:170
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:191
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:236
@@ -217,210 +217,219 @@ msgstr "必須"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:201
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:482
msgid "Reachable by"
msgstr ""
msgstr "次からアクセス可能:"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:196
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:358
msgid "Outproxies"
msgstr ""
msgstr "アウトプロキシ"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:203
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:378
msgid "Tunnel Destination"
msgid "SSL Outproxies"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:215
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:209
msgid "Use Outproxy Plugin"
msgstr "アウトプロキシのプラグインを使用"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:213
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:251
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:259
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:145
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:526
msgid "(Check the Box for 'YES')"
msgstr "(「はい」のボックスにチェックを入れてください)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:218
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:378
msgid "Tunnel Destination"
msgstr "トンネル送信先"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:230
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:382
msgid "name, name:port, or destination"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:218
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:233
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:386
msgid "b32 not recommended"
msgstr ""
msgstr "b32 は非推奨です"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:224
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:239
msgid "Shared Client"
msgstr ""
msgstr "共有クライアント"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:228
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:243
msgid ""
"(Share tunnels with other clients and irc/httpclients? Change requires "
"restart of client proxy)"
msgstr ""
msgstr "(他のクライアント及び irc/http クライアントとトンネルを共有しますか?変更にはクライアントプロキシの再起動が必要です)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:232
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:247
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:141
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:522
msgid "Auto Start"
msgstr ""
msgstr "自動開始"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:236
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:244
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:145
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:526
msgid "(Check the Box for 'YES')"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:240
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:255
msgid "Enable DCC"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:248
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:263
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:266
msgid "Advanced networking options"
msgstr ""
msgstr "高度なネットワークオプション"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:250
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:265
msgid ""
"(NOTE: when this client proxy is configured to share tunnels, then these "
"options are for all the shared proxy clients!)"
msgstr ""
msgstr "(注: このクライアントプロキシがトンネルを共有するよう設定されると、これらのオプションは共有されるプロキシクライアント全てに有効です!)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:252
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:267
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:268
msgid "Tunnel Options"
msgstr ""
msgstr "トンネルオプション"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:254
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:269
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:270
msgid "Length"
msgstr ""
msgstr "長さ"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:261
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:276
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:277
msgid "0 hop tunnel (no anonymity)"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:265
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:280
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:281
msgid "1 hop tunnel (low anonymity)"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:269
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:284
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:285
msgid "2 hop tunnel (medium anonymity)"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:273
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:288
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:289
msgid "3 hop tunnel (high anonymity)"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:281
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:296
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:297
msgid "hop tunnel (very poor performance)"
msgstr ""
msgstr "トンネルをホップ(非常に乏しいパフォーマンス)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:286
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:301
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:302
msgid "Variance"
msgstr ""
msgstr "分散"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:293
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:308
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:309
msgid "0 hop variance (no randomisation, consistant performance)"
msgstr ""
msgstr "0 ホップ分散 (非ランダム化、一貫したパフォーマンス)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:297
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:312
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:313
msgid ""
"+ 0-1 hop variance (medium additive randomisation, subtractive performance)"
msgstr ""
msgstr "+ 0-1 ホップ分散 (中間的な追加的ランダム化、パフォーマンス減退)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:301
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:316
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:317
msgid ""
"+ 0-2 hop variance (high additive randomisation, subtractive performance)"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:305
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:321
msgid "+/- 0-1 hop variance (standard randomisation, standard performance)"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:309
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:325
msgid "+/- 0-2 hop variance (not recommended)"
msgstr ""
msgstr "+ 0-2 ホップ分散 (高い追加的ランダム化、パフォーマンス減退)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:320
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:321
msgid "+/- 0-1 hop variance (standard randomisation, standard performance)"
msgstr "+/- 0-1 ホップ分散 (標準的ランダム化、標準的パフォーマンス)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:324
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:325
msgid "+/- 0-2 hop variance (not recommended)"
msgstr "+/- 0-2 ホップ分散 (非推奨)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:335
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:336
msgid "hop variance"
msgstr ""
msgstr "ホップ分散"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:325
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:340
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:341
msgid "Count"
msgstr ""
msgstr "回数"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:329
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:344
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:345
msgid "Backup Count"
msgstr ""
msgstr "バックアップ回数"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:336
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:351
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:352
msgid "0 backup tunnels (0 redundancy, no added resource usage)"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:340
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:355
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:356
msgid "1 backup tunnel each direction (low redundancy, low resource usage)"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:344
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:359
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:360
msgid ""
"2 backup tunnels each direction (medium redundancy, medium resource usage)"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:348
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:363
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:364
msgid "3 backup tunnels each direction (high redundancy, high resource usage)"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:356
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:371
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:372
msgid "backup tunnels"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:363
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:378
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:379
msgid "Profile"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:370
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:385
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:386
msgid "interactive connection"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:374
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:389
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:390
msgid "bulk connection (downloads/websites/BT)"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:376
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:391
msgid "Delay Connect"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:380
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:395
msgid "for request/response connections"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:384
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:399
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:394
msgid "Router I2CP Address"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:386
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:401
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:159
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:396
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:413
msgid "Host"
msgstr "ホスト"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:394
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:409
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:165
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:404
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:273
@@ -429,107 +438,107 @@ msgstr "ホスト"
msgid "Port"
msgstr "ポート"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:404
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:419
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:502
msgid "Reduce tunnel quantity when idle"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:406
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:420
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:428
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:440
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:450
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:478
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:488
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:421
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:435
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:443
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:455
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:465
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:493
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:503
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:414
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:504
msgid "Enable"
msgstr "有効"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:410
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:425
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:508
msgid "Reduced tunnel count"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:414
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:434
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:429
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:449
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:512
msgid "Idle minutes"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:418
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:433
msgid "Close tunnels when idle"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:424
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:439
msgid "New Keys on Reopen"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:432
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:447
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:430
msgid "Disable"
msgstr "無効"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:438
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:453
msgid "Delay tunnel open until required"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:448
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:463
msgid "Persistent private key"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:454
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:469
msgid "File"
msgstr "ファイル"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:463
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:478
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:243
msgid "Local destination"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:467
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:482
msgid "Local Base 32"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:476
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:491
msgid "Local Authorization"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:482
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:492
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:497
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:507
msgid "Username"
msgstr "ユーザー名"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:484
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:496
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:499
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:511
msgid "Password"
msgstr "パスワード"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:486
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:501
msgid "Outproxy Authorization"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:503
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:518
msgid "Jump URL List"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:509
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:524
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:548
msgid "Custom options"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:513
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:528
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:552
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:702
msgid "Cancel"
msgstr "キャンセル"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:517
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:532
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:556
msgid "Delete"
msgstr "削除"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:519
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:534
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:558
msgid "Save"
msgstr "保存"
@@ -548,7 +557,7 @@ msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:179
msgid "Use SSL?"
msgstr ""
msgstr "SSLを使用しますか"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:222
msgid "Website name"
@@ -780,7 +789,7 @@ msgid "New server tunnel"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:265
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:423
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:432
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:223
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:265
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:295
@@ -790,7 +799,7 @@ msgid "Standard"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:267
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:425
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:434
msgid "Create"
msgstr ""
@@ -815,11 +824,15 @@ msgstr ""
msgid "Destination"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:408
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:395
msgid "internal plugin"
msgstr "内部プラグイン"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:414
msgid "none"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:421
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:430
msgid "New client tunnel"
msgstr ""

File diff suppressed because it is too large Load Diff

View File

@@ -6,9 +6,21 @@ Retrieved from the file
minus the following files and directores:
build.xml
deployer-howto.html
images/*
lib/catalina*
LICENSE (see ../../../licenses/LICENSE-Apache2.0.txt, it's also inside every jar)
RELEASE-NOTES
build.xml
deployer-howto.html
images/*
lib/catalina*
lib/jsp-api.jar (see below)
lib/servlet-api.jar (see below)
LICENSE (see ../../../licenses/LICENSE-Apache2.0.txt, it's also inside every jar)
RELEASE-NOTES
We could use the following API jars from Apache Tomcat 7.x, supporting Servlet 3.0 and JSP 2.2,
that are required for Jetty 8, but we just bundle the ones from Jetty 8 instead:
lib/jsp-api.jar
lib/servlet-api.jar
For more info:
http://tomcat.apache.org/whichversion.html

View File

@@ -1,13 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<project basedir="." default="all" name="jetty">
<property name="jetty.ver" value="7.6.14.v20131031" />
<property name="jetty.ver" value="8.1.14.v20131031" />
<property name="jetty.base" value="jetty-distribution-${jetty.ver}" />
<property name="jetty.sha1" value="f83894b5641f920ed8ac31501b473528e52a23fd" />
<property name="jetty.sha1" value="a6690261a822157c82fcc6327d05ac8c7dfed0a3" />
<property name="jetty.filename" value="${jetty.base}.zip" />
<property name="jetty.url" value="http://download.eclipse.org/jetty/${jetty.ver}/dist/${jetty.filename}" />
<property name="verified.filename" value="verified.txt" />
<property name="javac.compilerargs" value="" />
<property name="javac.version" value="1.6" />
<property name="tomcat.lib" value="apache-tomcat-deployer/lib" />
<target name="all" depends="build" />
@@ -104,9 +105,10 @@
jetty-servlets-xxx.jar: Needed for CGI for eepsite
jetty-sslengine-xxx.jar: Old Jetty 6, now a dummy
jetty-java5-threadpool-xxx.jar: Old Jetty 6, now a dummy
glassfish 2.1: Not used, too old, see Tomcat below.
jetty-rewrite-handler: Not used by I2P, but only 20KB and could be useful for eepsites
jetty-management: Not used by I2P, but only 34KB and could be useful for eepsites, and we bundled it with Jetty 5
javax.servlet.jsp-2.2.0.v201112011158.jar: Required API
servlet-api-3.0.jar: Required API
All of these are available in the Ubuntu packages libjetty-java and libjetty-extra-java
-->
<copy preservelastmodified="true" file="${jetty.base}/start.jar" tofile="jettylib/jetty-start.jar" />
@@ -133,6 +135,10 @@
<attribute name="Note" value="Intentionally empty" />
</manifest>
</jar>
<jar destfile="jettylib/javax.servlet.jar" duplicate="preserve" filesetmanifest="mergewithoutmain" >
<zipfileset excludes="about.html about_files about_files/* META-INF/ECLIPSEF.* META-INF/eclipse.inf plugin.properties" src="${jetty.base}/lib/servlet-api-3.0.jar" />
<zipfileset excludes="about.html about_files about_files/* META-INF/ECLIPSEF.* META-INF/eclipse.inf plugin.properties" src="${jetty.base}/lib/jsp/javax.servlet.jsp-2.2.0.v201112011158.jar" />
</jar>
<!--
<delete file="jetty.tar" />
<delete dir="${jetty.base}" />
@@ -152,10 +158,14 @@
was set individually in wrapper.config, we rename and combine the jars as follows:
jasper.jar : jasper-runtime.jar
jasper-el.jar + el-api.jar : commons-el.jar
servlet-api.jar + jsp-api.jar : javax.servlet.jar
tomcat-juli.jar : Add to commons-logging.jar
empty jar : jasper-compiler.jar
Also, take NOTICE and LICENSE out of each one, we bundle those separately.
Not as of Jetty 8 (using from Jetty):
servlet-api.jar + jsp-api.jar : javax.servlet.jar
If we go to Tomcat 7:
tomcat-api.jar + tomcat-util.jar: Add to javax.servlet.jar (as of Tomcat 7 / Jetty 8)
-->
<target name="copyTomcatLib" >
<jar destfile="jettylib/jasper-runtime.jar" filesetmanifest="merge" >
@@ -165,10 +175,14 @@
<zipfileset excludes="META-INF/LICENSE META-INF/NOTICE" src="${tomcat.lib}/jasper-el.jar" />
<zipfileset excludes="META-INF/**/*" src="${tomcat.lib}/el-api.jar" />
</jar>
<!--
<jar destfile="jettylib/javax.servlet.jar" duplicate="preserve" filesetmanifest="mergewithoutmain" >
<zipfileset excludes="META-INF/LICENSE META-INF/NOTICE" src="${tomcat.lib}/servlet-api.jar" />
<zipfileset excludes="META-INF/**/*" src="${tomcat.lib}/jsp-api.jar" />
<zipfileset excludes="META-INF/LICENSE META-INF/NOTICE" src="${tomcat.lib}/tomcat-api.jar" />
<zipfileset excludes="META-INF/LICENSE META-INF/NOTICE" src="${tomcat.lib}/tomcat-util.jar" />
</jar>
-->
<!-- Ant bug, don't set update and filesetmanifest or the update doesn't happen,
Their bug tracker claims fixed in 1.8.0 but broken for me in 1.8.1
-->
@@ -214,7 +228,7 @@
<mkdir dir="./build/obj" />
<javac
srcdir="./java/src"
debug="true" deprecation="on" source="1.5" target="1.5"
debug="true" deprecation="on" source="${javac.version}" target="${javac.version}"
destdir="./build/obj"
includeAntRuntime="false"
classpath="../../core/java/build/i2p.jar:./jettylib/commons-logging.jar:./jettylib/javax.servlet.jar:./jettylib/org.mortbay.jetty.jar:./jettylib/jetty-http.jar:./jettylib/jetty-io.jar:./jettylib/jetty-security.jar:./jettylib/jetty-util.jar:./jettylib/jetty-xml.jar" >

View File

@@ -405,7 +405,7 @@ public class I2PRequestLog extends AbstractLifeCycle implements RequestLog
}
catch (IOException e)
{
Log.warn(e);
Log.getLogger((String)null).warn(e);
}
}
@@ -449,7 +449,7 @@ public class I2PRequestLog extends AbstractLifeCycle implements RequestLog
{
_fileOut = new RolloverFileOutputStream(_filename,_append,_retainDays,TimeZone.getTimeZone(_logTimeZone),_filenameDateFormat,null);
_closeOut = true;
Log.info("Opened "+getDatedFilename());
Log.getLogger((String)null).info("Opened "+getDatedFilename());
}
else
_fileOut = System.err;
@@ -475,9 +475,9 @@ public class I2PRequestLog extends AbstractLifeCycle implements RequestLog
protected void doStop() throws Exception
{
super.doStop();
try {if (_writer != null) _writer.flush();} catch (IOException e) {Log.ignore(e);}
try {if (_writer != null) _writer.flush();} catch (IOException e) {Log.getLogger((String)null).ignore(e);}
if (_out != null && _closeOut)
try {_out.close();} catch (IOException e) {Log.ignore(e);}
try {_out.close();} catch (IOException e) {Log.getLogger((String)null).ignore(e);}
_out = null;
_fileOut = null;

View File

@@ -126,12 +126,31 @@ public interface I2PSocketManager {
* Ping the specified peer, returning true if they replied to the ping within
* the timeout specified, false otherwise. This call blocks.
*
* Uses the ports from the default options.
*
* @param peer Destination to ping
* @param timeoutMs timeout in ms
* @param timeoutMs timeout in ms, greater than zero
* @throws IllegalArgumentException
* @return success or failure
*/
public boolean ping(Destination peer, long timeoutMs);
/**
* Ping the specified peer, returning true if they replied to the ping within
* the timeout specified, false otherwise. This call blocks.
*
* Uses the ports specified.
*
* @param peer Destination to ping
* @param localPort 0 - 65535
* @param remotePort 0 - 65535
* @param timeoutMs timeout in ms, greater than zero
* @return success or failure
* @throws IllegalArgumentException
* @since 0.9.12
*/
public boolean ping(Destination peer, int localPort, int remotePort, long timeoutMs);
public String getName();
public void setName(String name);

View File

@@ -14,6 +14,7 @@ import net.i2p.client.I2PClient;
import net.i2p.client.I2PClientFactory;
import net.i2p.client.I2PSession;
import net.i2p.client.I2PSessionException;
import net.i2p.crypto.SigType;
import net.i2p.util.Log;
/**
@@ -26,7 +27,7 @@ public class I2PSocketManagerFactory {
public static final String PROP_MANAGER = "i2p.streaming.manager";
public static final String DEFAULT_MANAGER = "net.i2p.client.streaming.impl.I2PSocketManagerFull";
/**
* Create a socket manager using a brand new destination connected to the
* I2CP router on the local machine on the default port (7654).
@@ -79,9 +80,9 @@ public class I2PSocketManagerFactory {
*/
public static I2PSocketManager createManager(String i2cpHost, int i2cpPort, Properties opts) {
I2PClient client = I2PClientFactory.createClient();
ByteArrayOutputStream keyStream = new ByteArrayOutputStream(512);
ByteArrayOutputStream keyStream = new ByteArrayOutputStream(1024);
try {
client.createDestination(keyStream);
client.createDestination(keyStream, getSigType(opts));
ByteArrayInputStream in = new ByteArrayInputStream(keyStream.toByteArray());
return createManager(in, i2cpHost, i2cpPort, opts);
} catch (IOException ioe) {
@@ -168,9 +169,9 @@ public class I2PSocketManagerFactory {
int i2cpPort, Properties opts) throws I2PSessionException {
if (myPrivateKeyStream == null) {
I2PClient client = I2PClientFactory.createClient();
ByteArrayOutputStream keyStream = new ByteArrayOutputStream(512);
ByteArrayOutputStream keyStream = new ByteArrayOutputStream(1024);
try {
client.createDestination(keyStream);
client.createDestination(keyStream, getSigType(opts));
} catch (Exception e) {
throw new I2PSessionException("Error creating keys", e);
}
@@ -224,7 +225,10 @@ public class I2PSocketManagerFactory {
private static I2PSocketManager createManager(I2PSession session, Properties opts, String name) {
I2PAppContext context = I2PAppContext.getGlobalContext();
String classname = opts.getProperty(PROP_MANAGER, DEFAULT_MANAGER);
// As of 0.9.12, ignore this setting, as jwebcache and i2phex set it to the old value.
// There is no other valid manager.
//String classname = opts.getProperty(PROP_MANAGER, DEFAULT_MANAGER);
String classname = DEFAULT_MANAGER;
try {
Class<?> cls = Class.forName(classname);
if (!I2PSocketManager.class.isAssignableFrom(cls))
@@ -257,6 +261,23 @@ public class I2PSocketManagerFactory {
return i2cpPort;
}
/**
* @param opts may be null
* @since 0.9.12
*/
private static SigType getSigType(Properties opts) {
if (opts != null) {
String st = opts.getProperty(I2PClient.PROP_SIGTYPE);
if (st != null) {
SigType rv = SigType.parseSigType(st);
if (rv != null)
return rv;
getLog().error("Unsupported sig type " + st);
}
}
return I2PClient.DEFAULT_SIGTYPE;
}
/** @since 0.9.7 */
private static Log getLog() {
return I2PAppContext.getGlobalContext().logManager().getLog(I2PSocketManagerFactory.class);

View File

@@ -0,0 +1,13 @@
package net.i2p.client.streaming;
/**
* Moved to net.i2p.client.streaming.impl in 0.9.10.
* Restored as a dummy class in 0.9.12, as i2phex imports it and
* calls I2PSocketManagerFull.class.getName() to pass to I2PSocketManagerFactory.
* I2PSocketManagerFactory ignores the class setting as of 0.9.12.
* This does not implement I2PSocketManager. Do not use.
*
* @since 0.9.12
* @deprecated
*/
public class I2PSocketManagerFull {}

View File

@@ -46,13 +46,16 @@
<targetfilelist dir="." files="build/obj/net/i2p/router/web/UpdateHandler.class" />
</dependset>
</target>
<property name="javac.compilerargs" value="" />
<property name="javac.version" value="1.6" />
<target name="compile" depends="prepare, depend, dependVersion">
<mkdir dir="./build" />
<mkdir dir="./build/obj" />
<javac
srcdir="./src"
debug="true" deprecation="on" source="1.5" target="1.5"
debug="true" deprecation="on" source="${javac.version}" target="${javac.version}"
includeAntRuntime="false"
destdir="./build/obj">
<compilerarg line="${javac.compilerargs}" />
@@ -342,7 +345,7 @@
<arg value="../jsp/" />
</java>
<javac debug="true" deprecation="on" source="1.5" target="1.5"
<javac debug="true" deprecation="on" source="${javac.version}" target="${javac.version}"
encoding="UTF-8"
includeAntRuntime="false"
destdir="../jsp/WEB-INF/classes/"

View File

@@ -17,12 +17,16 @@ import java.util.StringTokenizer;
import java.util.concurrent.ConcurrentHashMap;
import net.i2p.I2PAppContext;
import net.i2p.app.ClientAppManager;
import net.i2p.app.ClientAppState;
import static net.i2p.app.ClientAppState.*;
import net.i2p.crypto.SU3File;
import net.i2p.crypto.TrustedUpdate;
import net.i2p.data.DataHelper;
import net.i2p.router.Router;
import net.i2p.router.RouterContext;
import net.i2p.router.RouterVersion;
import net.i2p.router.app.RouterApp;
import net.i2p.router.web.ConfigServiceHandler;
import net.i2p.router.web.ConfigUpdateHandler;
import net.i2p.router.web.Messages;
@@ -50,7 +54,7 @@ import net.i2p.util.VersionComparator;
*
* @since 0.9.4
*/
public class ConsoleUpdateManager implements UpdateManager {
public class ConsoleUpdateManager implements UpdateManager, RouterApp {
private final RouterContext _context;
private final Log _log;
@@ -68,6 +72,8 @@ public class ConsoleUpdateManager implements UpdateManager {
private final Map<UpdateItem, Version> _installed;
private final boolean _allowTorrent;
private static final DecimalFormat _pct = new DecimalFormat("0.0%");
private final ClientAppManager _cmgr;
private volatile ClientAppState _state = UNINITIALIZED;
private volatile String _status;
@@ -77,8 +83,12 @@ public class ConsoleUpdateManager implements UpdateManager {
private static final long TASK_CLEANER_TIME = 15*60*1000;
private static final String PROP_UNSIGNED_AVAILABLE = "router.updateUnsignedAvailable";
public ConsoleUpdateManager(RouterContext ctx) {
/**
* @param args ignored
*/
public ConsoleUpdateManager(RouterContext ctx, ClientAppManager listener, String[] args) {
_context = ctx;
_cmgr = listener;
_log = ctx.logManager().getLog(ConsoleUpdateManager.class);
_registeredUpdaters = new ConcurrentHashSet<RegisteredUpdater>();
_registeredCheckers = new ConcurrentHashSet<RegisteredChecker>();
@@ -98,13 +108,34 @@ public class ConsoleUpdateManager implements UpdateManager {
//_allowTorrent = RouterVersion.BUILD != 0 || _context.random().nextInt(100) < 60;
// Finally, for 0.9.12, 18 months later...
_allowTorrent = true;
_state = INITIALIZED;
}
/**
* @return null if not found
*/
public static ConsoleUpdateManager getInstance() {
return (ConsoleUpdateManager) I2PAppContext.getGlobalContext().updateManager();
ClientAppManager cmgr = I2PAppContext.getGlobalContext().clientAppManager();
if (cmgr == null)
return null;
return (ConsoleUpdateManager) cmgr.getRegisteredApp(APP_NAME);
}
/////// ClientApp methods
/**
* UpdateManager interface
*/
public void start() {
startup();
}
/**
* ClientApp interface
* @since 0.9.12
*/
public synchronized void startup() {
changeState(STARTING);
notifyInstalled(NEWS, "", Long.toString(NewsHelper.lastUpdated(_context)));
notifyInstalled(ROUTER_SIGNED, "", RouterVersion.VERSION);
notifyInstalled(ROUTER_SIGNED_SU3, "", RouterVersion.VERSION);
@@ -118,7 +149,6 @@ public class ConsoleUpdateManager implements UpdateManager {
notifyInstalled(PLUGIN, plugin, ver);
}
_context.registerUpdateManager(this);
DummyHandler dh = new DummyHandler(_context, this);
register((Checker)dh, TYPE_DUMMY, METHOD_DUMMY, 0);
register((Updater)dh, TYPE_DUMMY, METHOD_DUMMY, 0);
@@ -162,10 +192,27 @@ public class ConsoleUpdateManager implements UpdateManager {
//register((Updater)puh, PLUGIN, FILE, 0);
new NewsTimerTask(_context, this);
_context.simpleScheduler().addPeriodicEvent(new TaskCleaner(), TASK_CLEANER_TIME);
changeState(RUNNING);
if (_cmgr != null)
_cmgr.register(this);
}
/**
* UpdateManager interface
*/
public void shutdown() {
_context.unregisterUpdateManager(this);
shutdown(null);
}
/**
* ClientApp interface
* @param args ignored
* @since 0.9.12
*/
public synchronized void shutdown(String[] args) {
if (_state == STOPPED)
return;
changeState(STOPPING);
stopChecks();
stopUpdates();
_registeredUpdaters.clear();
@@ -173,6 +220,30 @@ public class ConsoleUpdateManager implements UpdateManager {
_available.clear();
_downloaded.clear();
_installed.clear();
changeState(STOPPED);
}
/** @since 0.9.12 */
public ClientAppState getState() {
return _state;
}
/** @since 0.9.12 */
public String getName() {
return APP_NAME;
}
/** @since 0.9.12 */
public String getDisplayName() {
return "Console Update Manager";
}
/////// end ClientApp methods
private synchronized void changeState(ClientAppState state) {
_state = state;
if (_cmgr != null)
_cmgr.notify(this, state, null, null);
}
/**

View File

@@ -53,19 +53,20 @@ public class CSSHelper extends HelperBase {
/**
* change default language for the router AND save it
* @param lang xx OR xx_XX
* @param lang xx OR xx_XX OR xxx OR xxx_XX
*/
public void setLang(String lang) {
// Protected with nonce in css.jsi
if (lang != null) {
if (lang != null && lang.length() > 0) {
Map m = new HashMap(2);
if (lang.length() == 2) {
int under = lang.indexOf('_');
if (under < 0) {
m.put(Messages.PROP_LANG, lang.toLowerCase(Locale.US));
m.put(Messages.PROP_COUNTRY, "");
_context.router().saveConfig(m, null);
} else if (lang.length() == 5) {
m.put(Messages.PROP_LANG, lang.substring(0, 2).toLowerCase(Locale.US));
m.put(Messages.PROP_COUNTRY, lang.substring(3, 5).toUpperCase(Locale.US));
} else if (under > 0 && lang.length() > under + 1) {
m.put(Messages.PROP_LANG, lang.substring(0, under).toLowerCase(Locale.US));
m.put(Messages.PROP_COUNTRY, lang.substring(under + 1).toUpperCase(Locale.US));
_context.router().saveConfig(m, null);
}
}

View File

@@ -370,7 +370,7 @@ public class ConfigClientsHandler extends FormHandler {
* @param app null for a new install
*/
private void installPlugin(String app, String url) {
ConsoleUpdateManager mgr = (ConsoleUpdateManager) _context.updateManager();
ConsoleUpdateManager mgr = UpdateHandler.updateManager(_context);
if (mgr == null) {
addFormError("Update manager not registered, cannot install");
return;
@@ -397,7 +397,7 @@ public class ConfigClientsHandler extends FormHandler {
}
private void checkPlugin(String app) {
ConsoleUpdateManager mgr = (ConsoleUpdateManager) _context.updateManager();
ConsoleUpdateManager mgr = UpdateHandler.updateManager(_context);
if (mgr == null) {
addFormError("Update manager not registered, cannot check");
return;

View File

@@ -90,8 +90,11 @@ public class ConfigClientsHelper extends HelperBase {
/** clients */
public String getForm1() {
StringBuilder buf = new StringBuilder(1024);
buf.append("<table>\n");
buf.append("<tr><th align=\"right\">" + _("Client") + "</th><th>" + _("Run at Startup?") + "</th><th>" + _("Control") + "</th><th align=\"left\">" + _("Class and arguments") + "</th></tr>\n");
buf.append("<table>\n" +
"<tr><th align=\"right\">").append(_("Client")).append("</th><th>")
.append(_("Run at Startup?")).append("</th><th>")
.append(_("Control")).append("</th><th align=\"left\">")
.append(_("Class and arguments")).append("</th></tr>\n");
List<ClientAppConfig> clients = ClientAppConfig.getClientApps(_context);
for (int cur = 0; cur < clients.size(); cur++) {
@@ -134,8 +137,11 @@ public class ConfigClientsHelper extends HelperBase {
/** webapps */
public String getForm2() {
StringBuilder buf = new StringBuilder(1024);
buf.append("<table>\n");
buf.append("<tr><th align=\"right\">" + _("WebApp") + "</th><th>" + _("Run at Startup?") + "</th><th>" + _("Control") + "</th><th align=\"left\">" + _("Description") + "</th></tr>\n");
buf.append("<table>\n" +
"<tr><th align=\"right\">").append(_("WebApp")).append("</th><th>")
.append(_("Run at Startup?")).append("</th><th>")
.append(_("Control")).append("</th><th align=\"left\">")
.append(_("Description")).append("</th></tr>\n");
Properties props = RouterConsoleRunner.webAppProperties(_context);
Set<String> keys = new TreeSet(props.keySet());
for (String name : keys) {
@@ -159,8 +165,11 @@ public class ConfigClientsHelper extends HelperBase {
/** plugins */
public String getForm3() {
StringBuilder buf = new StringBuilder(1024);
buf.append("<table>\n");
buf.append("<tr><th align=\"right\">" + _("Plugin") + "</th><th>" + _("Run at Startup?") + "</th><th>" + _("Control") + "</th><th align=\"left\">" + _("Description") + "</th></tr>\n");
buf.append("<table>\n" +
"<tr><th align=\"right\">").append(_("Plugin")).append("</th><th>")
.append(_("Run at Startup?")).append("</th><th>")
.append(_("Control")).append("</th><th align=\"left\">")
.append(_("Description")).append("</th></tr>\n");
Properties props = PluginStarter.pluginProperties();
Set<String> keys = new TreeSet(props.keySet());
for (String name : keys) {
@@ -273,15 +282,20 @@ public class ConfigClientsHelper extends HelperBase {
// 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\" class=\"Xaccept\" 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("\" >")
.append(_("Start")).append("<span class=hide> ").append(index).append("</span></button>");
}
if (showStopButton && (!edit))
buf.append("<button type=\"submit\" class=\"Xstop\" 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("\" >")
.append(_("Stop")).append("<span class=hide> ").append(index).append("</span></button>");
if (showEditButton && (!edit) && !ro)
buf.append("<button type=\"submit\" class=\"Xadd\" 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("\" >")
.append(_("Edit")).append("<span class=hide> ").append(index).append("</span></button>");
if (showUpdateButton && (!edit) && !ro) {
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>");
buf.append("<button type=\"submit\" class=\"Xcheck\" name=\"action\" value=\"Check ").append(index).append("\" >")
.append(_("Check for updates")).append("<span class=hide> ").append(index).append("</span></button>");
buf.append("<button type=\"submit\" class=\"Xdownload\" name=\"action\" value=\"Update ").append(index).append("\" >")
.append(_("Update")).append("<span class=hide> ").append(index).append("</span></button>");
}
if (showDeleteButton && (!edit) && !ro) {
buf.append("<button type=\"submit\" class=\"Xdelete\" name=\"action\" value=\"Delete ").append(index)

View File

@@ -45,9 +45,9 @@ public class ConfigLoggingHelper extends HelperBase {
buf.append(prefix).append('=').append(level).append('\n');
}
buf.append("</textarea><br>\n");
buf.append("<i>" + _("Add additional logging statements above. Example: net.i2p.router.tunnel=WARN") + "</i><br>");
buf.append("<i>" + _("Or put entries in the logger.config file. Example: logger.record.net.i2p.router.tunnel=WARN") + "</i><br>");
buf.append("<i>" + _("Valid levels are DEBUG, INFO, WARN, ERROR, CRIT") + "</i>\n");
buf.append("<i>").append(_("Add additional logging statements above. Example: net.i2p.router.tunnel=WARN")).append("</i><br>");
buf.append("<i>").append(_("Or put entries in the logger.config file. Example: logger.record.net.i2p.router.tunnel=WARN")).append("</i><br>");
buf.append("<i>").append(_("Valid levels are DEBUG, INFO, WARN, ERROR, CRIT")).append("</i>\n");
/****
// this is too big and ugly

View File

@@ -3,6 +3,7 @@ package net.i2p.router.web;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Properties;
import net.i2p.apps.systray.UrlLauncher;
import net.i2p.router.Router;
@@ -57,7 +58,8 @@ public class ConfigServiceHandler extends FormHandler {
private final boolean _rekey;
private final boolean _tellWrapper;
private static final int HASHCODE = -123999871;
private static final int WAIT = 30*1000;
// RPi takes a long time to write out the peer profiles
private static final int WAIT = SystemVersion.isARM() ? 4*60*1000 : 2*60*1000;
public UpdateWrapperOrRekeyTask(boolean rekey, boolean tellWrapper) {
_rekey = rekey;
@@ -68,8 +70,19 @@ public class ConfigServiceHandler extends FormHandler {
try {
if (_rekey)
ContextHelper.getContext(null).router().killKeys();
if (_tellWrapper)
WrapperManager.signalStopping(WAIT);
if (_tellWrapper) {
int wait = WAIT;
Properties props = WrapperManager.getProperties();
String tmout = props.getProperty("wrapper.jvm_exit.timeout");
if (tmout != null) {
try {
int cwait = Integer.parseInt(tmout) * 1000;
if (cwait > wait)
wait = cwait;
} catch (NumberFormatException nfe) {}
}
WrapperManager.signalStopping(wait);
}
} catch (Throwable t) {
t.printStackTrace();
}

View File

@@ -70,6 +70,7 @@ public class ConfigUIHelper extends HelperBase {
* See http://en.wikipedia.org/wiki/ISO_639-1 .
* Any language-specific flag added to the icon set must be
* added to the top-level build.xml for the updater.
* As of 0.9.12, ISO 639-2 three-letter codes are supported also.
*/
private static final String langs[][] = {
{ "ar", "lang_ar", _x("Arabic"), null },
@@ -103,11 +104,33 @@ public class ConfigUIHelper extends HelperBase {
/** todo sort by translated string */
public String getLangSettings() {
StringBuilder buf = new StringBuilder(512);
String current = Messages.getLanguage(_context);
String clang = Messages.getLanguage(_context);
String current = clang;
String country = Messages.getCountry(_context);
if (country != null && country.length() > 0)
current += '_' + country;
// find best match
boolean found = false;
for (int i = 0; i < langs.length; i++) {
if (langs[i][0].equals(current)) {
found = true;
break;
}
}
if (!found) {
if (country != null && country.length() > 0) {
current = clang;
for (int i = 0; i < langs.length; i++) {
if (langs[i][0].equals(current)) {
found = true;
break;
}
}
}
if (!found)
current = "en";
}
StringBuilder buf = new StringBuilder(512);
for (int i = 0; i < langs.length; i++) {
// we use "lang" so it is set automagically in CSSHelper
buf.append("<input type=\"radio\" class=\"optbox\" name=\"lang\" ");
@@ -116,7 +139,8 @@ public class ConfigUIHelper extends HelperBase {
buf.append("checked=\"checked\" ");
buf.append("value=\"").append(lang).append("\">")
.append("<img height=\"11\" width=\"16\" alt=\"\" src=\"/flags.jsp?c=").append(langs[i][1]).append("\"> ");
String slang = lang.length() > 2 ? lang.substring(0, 2) : lang;
int under = lang.indexOf('_');
String slang = (under > 0) ? lang.substring(0, under) : lang;
buf.append(Messages.getDisplayLanguage(slang, langs[i][2], _context));
String name = langs[i][3];
if (name != null) {

View File

@@ -139,7 +139,7 @@ public class ConfigUpdateHandler extends FormHandler {
if (_action == null)
return;
if (_action.equals(_("Check for updates"))) {
ConsoleUpdateManager mgr = (ConsoleUpdateManager) _context.updateManager();
ConsoleUpdateManager mgr = UpdateHandler.updateManager(_context);
if (mgr == null) {
addFormError("Update manager not registered, cannot check");
return;

View File

@@ -115,9 +115,9 @@ public class ConfigUpdateHelper extends HelperBase {
buf.append("\" selected=\"selected");
if (PERIODS[i] == -1)
buf.append("\">" + _("Never") + "</option>\n");
buf.append("\">").append(_("Never")).append("</option>\n");
else
buf.append("\">" + _("Every") + " ").append(DataHelper.formatDuration2(PERIODS[i])).append("</option>\n");
buf.append("\">").append(_("Every")).append(' ').append(DataHelper.formatDuration2(PERIODS[i])).append("</option>\n");
}
buf.append("</select>\n");
return buf.toString();

View File

@@ -351,7 +351,7 @@ public class GraphHelper extends FormHandler {
try {
_out.write("<br><h3>" + _("Configure Graph Display") + " [<a href=\"configstats\">" + _("Select Stats") + "</a>]</h3>");
_out.write("<form action=\"graphs\" method=\"POST\">\n" +
"<input type=\"hidden\" name=\"action\" value=\"foo\">\n" +
"<input type=\"hidden\" name=\"action\" value=\"save\">\n" +
"<input type=\"hidden\" name=\"nonce\" value=\"" + nonce + "\" >\n");
_out.write(_("Periods") + ": <input size=\"5\" style=\"text-align: right;\" type=\"text\" name=\"periodCount\" value=\"" + _periodCount + "\"><br>\n");
_out.write(_("Plot averages") + ": <input type=\"radio\" class=\"optbox\" name=\"showEvents\" value=\"false\" " + (_showEvents ? "" : "checked=\"checked\" ") + "> ");
@@ -380,7 +380,7 @@ public class GraphHelper extends FormHandler {
if (persistent)
_out.write(" checked=\"checked\"");
_out.write(">" +
"<hr><div class=\"formaction\"><input type=\"submit\" class=\"acceot\" value=\"" + _("Save settings and redraw graphs") + "\"></div></form>");
"<hr><div class=\"formaction\"><input type=\"submit\" class=\"accept\" value=\"" + _("Save settings and redraw graphs") + "\"></div></form>");
} catch (IOException ioe) {
ioe.printStackTrace();
}
@@ -413,7 +413,8 @@ public class GraphHelper extends FormHandler {
*/
@Override
protected void processForm() {
saveSettings();
if ("save".equals(_action))
saveSettings();
}
/**

View File

@@ -36,6 +36,7 @@ public class HomeHelper extends HelperBase {
"";
static final String DEFAULT_FAVORITES =
"anoncoin.i2p" + S + _x("The Anoncoin project") + S + "http://anoncoin.i2p/" + S + I + "anoncoin_32.png" + S +
_x("Bug Reports") + S + _x("Bug tracker") + S + "http://trac.i2p2.i2p/report/1" + S + I + "bug.png" + S +
//"colombo-bt.i2p" + S + _x("The Italian Bittorrent Resource") + S + "http://colombo-bt.i2p/" + S + I + "colomboicon.png" + S +
_x("Dev Forum") + S + _x("Development forum") + S + "http://zzz.i2p/" + S + I + "group_gear.png" + S +

View File

@@ -23,6 +23,7 @@ import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import net.i2p.data.Base32;
import net.i2p.data.DataHelper;
import net.i2p.data.Destination;
import net.i2p.data.Hash;
@@ -167,6 +168,8 @@ public class NetDbRenderer {
median = dist;
}
buf.append(" Dist: <b>").append(fmt.format(biLog2(dist))).append("</b><br>");
buf.append(Base32.encode(key.getData())).append(".b32.i2p<br>");
buf.append("Sig type: ").append(dest.getSigningPublicKey().getType()).append("<br>");
buf.append("Routing Key: ").append(ls.getRoutingKey().toBase64());
buf.append("<br>");
buf.append("Encryption Key: ").append(ls.getEncryptionKey().toBase64().substring(0, 20)).append("...<br>");
@@ -206,8 +209,8 @@ public class NetDbRenderer {
if (median != null) {
double log2 = biLog2(median);
buf.append("</b></p><p><b>Median distance (bits): ").append(fmt.format(log2));
// 3 for 8 floodfills... -1 for median
int total = (int) Math.round(Math.pow(2, 3 + 256 - 1 - log2));
// 2 for 4 floodfills... -1 for median
int total = (int) Math.round(Math.pow(2, 2 + 256 - 1 - log2));
buf.append("</b></p><p><b>Estimated total floodfills: ").append(total);
buf.append("</b></p><p><b>Estimated total leasesets: ").append(total * rapCount / 8);
} else {

View File

@@ -19,6 +19,8 @@ import java.util.concurrent.ConcurrentHashMap;
import net.i2p.CoreVersion;
import net.i2p.I2PAppContext;
import net.i2p.app.ClientApp;
import net.i2p.app.ClientAppState;
import net.i2p.data.DataHelper;
import net.i2p.router.RouterContext;
import net.i2p.router.RouterVersion;
@@ -121,7 +123,7 @@ public class PluginStarter implements Runnable {
if (toUpdate.isEmpty())
return;
ConsoleUpdateManager mgr = (ConsoleUpdateManager) ctx.updateManager();
ConsoleUpdateManager mgr = UpdateHandler.updateManager(ctx);
if (mgr == null)
return;
if (mgr.isUpdateInProgress())
@@ -602,6 +604,20 @@ public class PluginStarter implements Runnable {
_pendingPluginClients.put(pluginName, new ConcurrentHashSet<SimpleTimer2.TimedEvent>());
for(ClientAppConfig app : apps) {
// If the client is a running ClientApp that we want to stop,
// bypass all the logic below.
ClientApp ca = ctx.routerAppManager().getClientApp(app.className, LoadClientAppsJob.parseArgs(app.args));
if (ca != null && ca.getState() == ClientAppState.RUNNING) {
if (action.equals("stop")) {
try {
ca.shutdown(LoadClientAppsJob.parseArgs(app.stopargs));
} catch (Throwable t) {
throw new Exception(t);
}
continue;
}
}
if (action.equals("start") && app.disabled)
continue;
String argVal[];

View File

@@ -645,7 +645,7 @@ public class RouterConsoleRunner implements RouterApp {
t.setPriority(Thread.NORM_PRIORITY - 1);
t.start();
ConsoleUpdateManager um = new ConsoleUpdateManager(_context);
ConsoleUpdateManager um = new ConsoleUpdateManager(_context, _mgr, null);
um.start();
if (PluginStarter.pluginsEnabled(_context)) {

View File

@@ -244,7 +244,7 @@ public class StatsGenerator {
buf.append(":</b> ");
}
private final static DecimalFormat _fmt = new DecimalFormat("###,##0.00");
private final static DecimalFormat _fmt = new DecimalFormat("###,##0.0##");
private final static String num(double num) { synchronized (_fmt) { return _fmt.format(num); } }
private final static DecimalFormat _pct = new DecimalFormat("#0.00%");

View File

@@ -422,11 +422,11 @@ public class SummaryHelper extends HelperBase {
buf.append("<tr><td align=\"right\"><img src=\"/themes/console/images/");
if (_context.clientManager().shouldPublishLeaseSet(h))
buf.append("server.png\" alt=\"Server\" title=\"" + _("Server") + "\">");
buf.append("server.png\" alt=\"Server\" title=\"").append(_("Server")).append("\">");
else
buf.append("client.png\" alt=\"Client\" title=\"" + _("Client") + "\">");
buf.append("client.png\" alt=\"Client\" title=\"").append(_("Client")).append("\">");
buf.append("</td><td align=\"left\"><b><a href=\"tunnels#").append(h.toBase64().substring(0,4));
buf.append("\" target=\"_top\" title=\"" + _("Show tunnels") + "\">");
buf.append("\" target=\"_top\" title=\"").append(_("Show tunnels")).append("\">");
if (name.length() < 18)
buf.append(name);
else
@@ -861,7 +861,7 @@ public class SummaryHelper extends HelperBase {
.append("\"></td><td align=\"left\">")
.append(_(sectionNames.get(section)))
.append("</td><td align=\"right\"><input type=\"hidden\" name=\"order_")
.append(i + "_" + section)
.append(i).append('_').append(section)
.append("\" value=\"")
.append(i)
.append("\">");

View File

@@ -78,8 +78,17 @@ class SummaryListener implements RateSummaryListener {
//String names[] = _sample.getDsNames();
//System.out.println("Add " + val + " over " + eventCount + " for " + _name
// + " [" + names[0] + ", " + names[1] + "]");
} catch (IllegalArgumentException iae) {
// ticket #1186
// apparently a corrupt file, thrown from update()
_log.error("Error adding", iae);
String path = _isPersistent ? _db.getPath() : null;
stopListening();
if (path != null)
(new File(path)).delete();
} catch (IOException ioe) {
_log.error("Error adding", ioe);
stopListening();
} catch (RrdException re) {
// this can happen after the time slews backwards, so don't make it an error
// org.jrobin.core.RrdException: Bad sample timestamp 1264343107. Last update time was 1264343172, at least one second step is required

View File

@@ -1,7 +1,9 @@
package net.i2p.router.web;
import net.i2p.app.ClientAppManager;
import net.i2p.router.RouterContext;
import net.i2p.router.update.ConsoleUpdateManager;
import net.i2p.update.UpdateManager;
import net.i2p.update.UpdateType;
import static net.i2p.update.UpdateType.*;
import net.i2p.util.Log;
@@ -33,6 +35,17 @@ public class UpdateHandler {
_context = ctx;
_log = ctx.logManager().getLog(UpdateHandler.class);
}
/**
* @return null if not found
* @since 0.9.12
*/
public static ConsoleUpdateManager updateManager(RouterContext ctx) {
ClientAppManager cmgr = ctx.clientAppManager();
if (cmgr == null)
return null;
return (ConsoleUpdateManager) cmgr.getRegisteredApp(UpdateManager.APP_NAME);
}
/**
* Configure this bean to query a particular router context
@@ -75,7 +88,7 @@ public class UpdateHandler {
}
private void update(UpdateType type) {
ConsoleUpdateManager mgr = (ConsoleUpdateManager) _context.updateManager();
ConsoleUpdateManager mgr = updateManager(_context);
if (mgr == null)
return;
if (mgr.isUpdateInProgress(ROUTER_SIGNED) || mgr.isUpdateInProgress(ROUTER_UNSIGNED) ||

View File

@@ -30,7 +30,14 @@
/*
* Print out the status for the UpdateManager
*/
ctx.updateManager().renderStatusHTML(out);
net.i2p.app.ClientAppManager cmgr = ctx.clientAppManager();
if (cmgr != null) {
net.i2p.router.update.ConsoleUpdateManager umgr =
(net.i2p.router.update.ConsoleUpdateManager) cmgr.getRegisteredApp(net.i2p.update.UpdateManager.APP_NAME);
if (umgr != null) {
umgr.renderStatusHTML(out);
}
}
/*
* Print out the status for the AppManager

View File

@@ -4,9 +4,12 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%
// Let's make this easy...
final Integer ERROR_CODE = (Integer) request.getAttribute(org.eclipse.jetty.server.Dispatcher.ERROR_STATUS_CODE);
final String ERROR_URI = (String) request.getAttribute(org.eclipse.jetty.server.Dispatcher.ERROR_REQUEST_URI);
final String ERROR_MESSAGE = (String) request.getAttribute(org.eclipse.jetty.server.Dispatcher.ERROR_MESSAGE);
// These are defined in Jetty 7 org.eclipse.jetty.server.Dispatcher,
// and in Servlet 3.0 (Jetty 8) javax.servlet.RequestDispatcher,
// just use the actual strings here to make it compatible with either
final Integer ERROR_CODE = (Integer) request.getAttribute("javax.servlet.error.status_code");
final String ERROR_URI = (String) request.getAttribute("javax.servlet.error.request_uri");
final String ERROR_MESSAGE = (String) request.getAttribute("javax.servlet.error.message");
if (ERROR_CODE != null && ERROR_MESSAGE != null) {
// this is deprecated but we don't want sendError()
response.setStatus(ERROR_CODE.intValue(), ERROR_MESSAGE);

View File

@@ -3,11 +3,14 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%
// Let's make this easy...
final Integer ERROR_CODE = (Integer) request.getAttribute(org.eclipse.jetty.server.Dispatcher.ERROR_STATUS_CODE);
final String ERROR_URI = (String) request.getAttribute(org.eclipse.jetty.server.Dispatcher.ERROR_REQUEST_URI);
final String ERROR_MESSAGE = (String) request.getAttribute(org.eclipse.jetty.server.Dispatcher.ERROR_MESSAGE);
final Class ERROR_CLASS = (Class)request.getAttribute(org.eclipse.jetty.server.Dispatcher.ERROR_EXCEPTION_TYPE);
final Throwable ERROR_THROWABLE = (Throwable)request.getAttribute(org.eclipse.jetty.server.Dispatcher.ERROR_EXCEPTION);
// These are defined in Jetty 7 org.eclipse.jetty.server.Dispatcher,
// and in Servlet 3.0 (Jetty 8) javax.servlet.RequestDispatcher,
// just use the actual strings here to make it compatible with either
final Integer ERROR_CODE = (Integer) request.getAttribute("javax.servlet.error.status_code");
final String ERROR_URI = (String) request.getAttribute("javax.servlet.error.request_uri");
final String ERROR_MESSAGE = (String) request.getAttribute("javax.servlet.error.message");
final Class ERROR_CLASS = (Class) request.getAttribute("javax.servlet.error.exception_type");
final Throwable ERROR_THROWABLE = (Throwable) request.getAttribute("javax.servlet.error.exception");
if (ERROR_CODE != null && ERROR_MESSAGE != null) {
// this is deprecated but we don't want sendError()
response.setStatus(ERROR_CODE.intValue(), ERROR_MESSAGE);
@@ -31,7 +34,9 @@
%><%=intl._("Please report bugs on {0} or {1}.",
"<a href=\"http://trac.i2p2.i2p/newticket\">trac.i2p2.i2p</a>",
"<a href=\"https://trac.i2p2.de/newticket\">trac.i2p2.de</a>")%>
<!--
<%=intl._("You may use the username \"guest\" and password \"guest\" if you do not wish to register.")%>
-->
<p><%=intl._("Please include this information in bug reports")%>:
</p></div><div class="sorry" id="warning2">
<h3><%=intl._("Error Details")%></h3>

View File

@@ -17,7 +17,9 @@
%><%=intl._("Please report bugs on {0} or {1}.",
"<a href=\"http://trac.i2p2.i2p/newticket\">trac.i2p2.i2p</a>",
"<a href=\"https://trac.i2p2.de/newticket\">trac.i2p2.de</a>")%>
<!--
<%=intl._("You may use the username \"guest\" and password \"guest\" if you do not wish to register.")%>
-->
<p><i><%=intl._("Please include this information in bug reports")%>:</i>
<p>
<b>I2P version:</b> <%=net.i2p.router.RouterVersion.FULL_VERSION%><br>

View File

@@ -11,7 +11,7 @@ msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-10-14 13:33+0000\n"
"PO-Revision-Date: 2014-02-04 19:47+0000\n"
"PO-Revision-Date: 2014-02-13 13:04+0000\n"
"Last-Translator: blueboy\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/I2P/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
@@ -432,334 +432,334 @@ msgid "Latvia"
msgstr "Letônia"
msgid "Libyan Arab Jamahiriya"
msgstr ""
msgstr "Líbia"
msgid "Morocco"
msgstr ""
msgstr "Marrocos"
msgid "Monaco"
msgstr ""
msgstr "Mônaco"
msgid "Republic of Moldova"
msgstr ""
msgstr "Moldávia"
msgid "Montenegro"
msgstr ""
msgstr "Montenegro"
msgid "Saint Martin"
msgstr ""
msgstr "São Martinho"
msgid "Madagascar"
msgstr ""
msgstr "Madagascar"
msgid "Marshall Islands"
msgstr ""
msgstr "Ilhas Marshall"
msgid "The Former Yugoslav Republic of Macedonia"
msgstr ""
msgstr "Macedônia"
msgid "Mali"
msgstr ""
msgstr "Mali"
msgid "Myanmar"
msgstr ""
msgstr "Myanmar"
msgid "Mongolia"
msgstr ""
msgstr "Mongólia"
msgid "Macao"
msgstr ""
msgstr "Macau"
msgid "Northern Mariana Islands"
msgstr ""
msgstr "Ilhas Marianas do Norte"
msgid "Martinique"
msgstr ""
msgstr "Martinica"
msgid "Mauritania"
msgstr ""
msgstr "Mauritânia"
msgid "Montserrat"
msgstr ""
msgstr "Montserrat"
msgid "Malta"
msgstr ""
msgstr "Malta"
msgid "Mauritius"
msgstr ""
msgstr "Maurício"
msgid "Maldives"
msgstr ""
msgstr "Maldivas"
msgid "Malawi"
msgstr ""
msgstr "Malawi"
msgid "Mexico"
msgstr ""
msgstr "México"
msgid "Malaysia"
msgstr ""
msgstr "Malásia"
msgid "Mozambique"
msgstr ""
msgstr "Moçambique"
msgid "Namibia"
msgstr ""
msgstr "Namíbia"
msgid "New Caledonia"
msgstr ""
msgstr "Nova Caledônia"
msgid "Niger"
msgstr ""
msgstr "Níger"
msgid "Norfolk Island"
msgstr ""
msgstr "Ilha Norfolk"
msgid "Nigeria"
msgstr ""
msgstr "Nigéria"
msgid "Nicaragua"
msgstr ""
msgstr "Nicarágua"
msgid "Netherlands"
msgstr ""
msgstr "Holanda"
msgid "Norway"
msgstr ""
msgstr "Noruega"
msgid "Nepal"
msgstr ""
msgstr "Nepal"
msgid "Nauru"
msgstr ""
msgstr "Nauru"
msgid "Niue"
msgstr ""
msgstr "Niue"
msgid "New Zealand"
msgstr ""
msgstr "Nova Zelândia"
msgid "Oman"
msgstr ""
msgstr "Omã"
msgid "Panama"
msgstr ""
msgstr "Panamá"
msgid "Peru"
msgstr ""
msgstr "Peru"
msgid "French Polynesia"
msgstr ""
msgstr "Polinésia Francesa"
msgid "Papua New Guinea"
msgstr ""
msgstr "Papua-Nova Guiné"
msgid "Philippines"
msgstr ""
msgstr "Filipinas"
msgid "Pakistan"
msgstr ""
msgstr "Paquistão"
msgid "Poland"
msgstr ""
msgstr "Polônia"
msgid "Saint Pierre and Miquelon"
msgstr ""
msgstr "Saint-Pierre e Miquelon"
msgid "Pitcairn Islands"
msgstr ""
msgstr "Ilhas Pitcairn"
msgid "Puerto Rico"
msgstr ""
msgstr "Porto Rico"
msgid "Palestinian Territory"
msgstr ""
msgstr "Território palestino"
msgid "Portugal"
msgstr ""
msgstr "Portugal"
msgid "Palau"
msgstr ""
msgstr "Palau"
msgid "Paraguay"
msgstr ""
msgstr "Paraguai"
msgid "Qatar"
msgstr ""
msgstr "Catar"
msgid "Réunion"
msgstr ""
msgstr "Reunião"
msgid "Romania"
msgstr ""
msgstr "Romênia"
msgid "Serbia"
msgstr ""
msgstr "Sérvia"
msgid "Russian Federation"
msgstr ""
msgstr "Rússia"
msgid "Rwanda"
msgstr ""
msgstr "Ruanda"
msgid "Saudi Arabia"
msgstr ""
msgstr "Arábia Saudita"
msgid "Solomon Islands"
msgstr ""
msgstr "Ilhas Salomão"
msgid "Seychelles"
msgstr ""
msgstr "Seychelles"
msgid "Sudan"
msgstr ""
msgstr "Sudão"
msgid "Sweden"
msgstr ""
msgstr "Suécia"
msgid "Singapore"
msgstr ""
msgstr "Singapura"
msgid "Saint Helena"
msgstr ""
msgstr "Santa Helena"
msgid "Slovenia"
msgstr ""
msgstr "Eslovênia"
msgid "Svalbard and Jan Mayen"
msgstr ""
msgstr "Svalbard e Jan Mayen"
msgid "Slovakia"
msgstr ""
msgstr "Eslováquia"
msgid "Sierra Leone"
msgstr ""
msgstr "Serra Leoa"
msgid "San Marino"
msgstr ""
msgstr "São Marinho"
msgid "Senegal"
msgstr ""
msgstr "Senegal"
msgid "Somalia"
msgstr ""
msgstr "Somália"
msgid "Suriname"
msgstr ""
msgstr "Suriname"
msgid "Sao Tome and Principe"
msgstr ""
msgstr "São Tomé e Príncipe"
msgid "El Salvador"
msgstr ""
msgstr "El Salvador"
msgid "Syrian Arab Republic"
msgstr ""
msgstr "Síria"
msgid "Swaziland"
msgstr ""
msgstr "Suazilândia"
msgid "Turks and Caicos Islands"
msgstr ""
msgstr "Turks e Caicos"
msgid "Chad"
msgstr ""
msgstr "Chade"
msgid "French Southern Territories"
msgstr ""
msgstr "Terras Austrais e Antárticas Francesas"
msgid "Togo"
msgstr ""
msgstr "Togo"
msgid "Thailand"
msgstr ""
msgstr "Tailândia"
msgid "Tajikistan"
msgstr ""
msgstr "Tajiquistão"
msgid "Tokelau"
msgstr ""
msgstr "Tokelau"
msgid "Timor-Leste"
msgstr ""
msgstr "Timor-Leste"
msgid "Turkmenistan"
msgstr ""
msgstr "Turcomenistão"
msgid "Tunisia"
msgstr ""
msgstr "Tunísia"
msgid "Tonga"
msgstr ""
msgstr "Tonga"
msgid "Turkey"
msgstr ""
msgstr "Turquia"
msgid "Trinidad and Tobago"
msgstr ""
msgstr "Trinidad e Tobago"
msgid "Tuvalu"
msgstr ""
msgstr "Tuvalu"
msgid "Taiwan"
msgstr ""
msgstr "Taiwan"
msgid "United Republic of Tanzania"
msgstr ""
msgstr "Tanzânia"
msgid "Ukraine"
msgstr ""
msgstr "Ucrânia"
msgid "Uganda"
msgstr ""
msgstr "Uganda"
msgid "United States Minor Outlying Islands"
msgstr ""
msgstr "Ilhas Menores Distantes dos Estados Unidos"
msgid "United States"
msgstr ""
msgstr "Estados Unidos"
msgid "Uruguay"
msgstr ""
msgstr "Uruguai"
msgid "Uzbekistan"
msgstr ""
msgstr "Uzbequistão"
msgid "Holy See (Vatican City State)"
msgstr ""
msgstr "Santa Sé (Cidade do Vaticano)"
msgid "Saint Vincent and the Grenadines"
msgstr ""
msgstr "São Vicente e Granadinas"
msgid "Venezuela"
msgstr ""
msgstr "Venezuela"
msgid "Virgin Islands"
msgstr ""
msgstr "Ilhas Virgens"
msgid "Viet Nam"
msgstr ""
msgstr "Vietnã"
msgid "Vanuatu"
msgstr ""
msgstr "Vanuatu"
msgid "Wallis and Futuna"
msgstr ""
msgstr "Wallis e Futuna"
msgid "Samoa"
msgstr ""
msgstr "Samoa"
msgid "Yemen"
msgstr ""
msgstr "Iêmen"
msgid "Mayotte"
msgstr ""
msgstr "Mayotte"
msgid "South Africa"
msgstr ""
msgstr "África do Sul"
msgid "Zambia"
msgstr ""
msgstr "Zâmbia"
msgid "Zimbabwe"
msgstr ""
msgstr "Zimbábue"

View File

@@ -2,22 +2,21 @@
# Copyright (C) 2009 The I2P Project
# This file is distributed under the same license as the routerconsole package.
# To contribute translations, see http://www.i2p2.de/newdevelopers
#
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: I2P routerconsole\n"
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-07-13 21:46+0000\n"
"PO-Revision-Date: 2011-03-04 14:02-0000\n"
"Last-Translator: hamada <hamada@mail.i2p>\n"
"Language-Team: hamada@mail.i2p\n"
"Language: ar\n"
"PO-Revision-Date: 2014-02-23 16:51+0000\n"
"Last-Translator: kytv <killyourtv@i2pmail.org>\n"
"Language-Team: Arabic (http://www.transifex.com/projects/p/I2P/language/ar/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
"X-Generator: Virtaal 0.6.1\n"
"Language: ar\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
msgid "Congratulations on getting I2P installed!"
msgstr ""
@@ -31,11 +30,12 @@ msgstr "انتظر قليلا بينما يتم ربط الإتصال بباقي
#, java-format
msgid ""
"While you are waiting, please {0}adjust your bandwidth settings{1} on the {2}"
"configuration page{3}."
"While you are waiting, please {0}adjust your bandwidth settings{1} on the "
"{2}configuration page{3}."
msgstr "بسنما يتم الإتصال {0}بتغير بيانات سرعة الشبكة في{1} قم {2}صفحة الخيارات{3}."
msgid "Also you can setup your browser to use the I2P proxy to reach eepsites."
msgid ""
"Also you can setup your browser to use the I2P proxy to reach eepsites."
msgstr ""
msgid ""
@@ -53,12 +53,12 @@ msgstr ""
#, java-format
msgid ""
"Once you have a \"shared clients\" destination listed on the left, please {0}"
"check out{1} our {2}FAQ{3}."
"Once you have a \"shared clients\" destination listed on the left, please "
"{0}check out{1} our {2}FAQ{3}."
msgstr "عندما عندما تظهر عبارة \"shared clients\" على اليسار يمكنك حينها {0}زيارة{1} {2}الأسئلة الشائعة{3}."
#, java-format
msgid ""
"Point your IRC client to {0}localhost:6668{1} and say hi to us on {2}#i2p-"
"help{3} or {4}#i2p{5}."
msgstr "IRC اتصل بخادم الدردشة الفورية على {0}localhost:6668{1} {2}#i2p-help{3} or {4}#i2p{5}."
"Point your IRC client to {0}localhost:6668{1} and say hi to us on "
"{2}#i2p{3}."
msgstr ""

View File

@@ -2,22 +2,23 @@
# Copyright (C) 2009 The I2P Project
# This file is distributed under the same license as the routerconsole package.
# To contribute translations, see http://www.i2p2.de/newdevelopers
#
#
# Translators:
# Ashoka <martin2p@posteo.de>, 2013
# blabla <blabla@trash-mail.com>, 2014
# Ashoka <martin2p@posteo.de>, 2013
msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-09-20 10:25+0000\n"
"PO-Revision-Date: 2013-09-16 07:09+0000\n"
"Last-Translator: Ashoka <martin2p@posteo.de>\n"
"Language-Team: German (http://www.transifex.com/projects/p/I2P/language/"
"de/)\n"
"Language: de\n"
"POT-Creation-Date: 2013-07-13 21:46+0000\n"
"PO-Revision-Date: 2014-02-25 16:10+0000\n"
"Last-Translator: blabla <blabla@trash-mail.com>\n"
"Language-Team: German (http://www.transifex.com/projects/p/I2P/language/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
msgid "Congratulations on getting I2P installed!"
@@ -28,51 +29,39 @@ msgstr "Willkommen im I2P!"
#, java-format
msgid "Please {0}have patience{1} as I2P boots up and finds peers."
msgstr ""
"Hab noch {0}etwas Geduld{1}, w&auml;hrend I2P startet und weitere I2P-Router "
"findet."
msgstr "Hab noch {0}etwas Geduld{1}, w&auml;hrend I2P startet und weitere I2P-Router findet."
#, java-format
msgid ""
"While you are waiting, please {0}adjust your bandwidth settings{1} on the {2}"
"configuration page{3}."
msgstr ""
"Passe bitte in der Zwischenzeit {0}deine Einstellungen zur Bandbreite{1} auf "
"der{2}Einstellungsseite{3} an!"
"While you are waiting, please {0}adjust your bandwidth settings{1} on the "
"{2}configuration page{3}."
msgstr "Passe bitte in der Zwischenzeit {0}deine Einstellungen zur Bandbreite{1} auf der{2}Einstellungsseite{3} an!"
msgid "Also you can setup your browser to use the I2P proxy to reach eepsites."
msgstr ""
"Auch kannst Du gleich deinen Browser f&uuml;r die Nutzung von I2P einrichten."
msgid ""
"Also you can setup your browser to use the I2P proxy to reach eepsites."
msgstr "Auch kannst Du gleich deinen Browser f&uuml;r die Nutzung von I2P einrichten."
msgid ""
"Just enter 127.0.0.1 (or localhost) port 4444 as a http proxy into your "
"browser settings."
msgstr ""
"Setze in den Einstellungen zum Browser ein HTTP Proxy ein mit 127.0.0.1 "
"(oder localhost) mit Port 4444 als Ziel."
msgstr "Setze in den Browsereinstellungen einen HTTP Proxy ein: 127.0.0.1 (oder localhost), Port 4444."
msgid "Do not use SOCKS for this."
msgstr "Benutze keine SOCKS dafür."
msgstr "Benutze kein SOCKS dafür."
#, java-format
msgid ""
"More information can be found on the {0}I2P browser proxy setup page{1}."
msgstr ""
"Mehr Informationen gibt es auf der {0}I2P browser proxy Setup Seite{1}."
msgstr "Mehr Informationen gibt es auf der {0}I2P-Browserproxysetup-Seite{1}."
#, java-format
msgid ""
"Once you have a \"shared clients\" destination listed on the left, please {0}"
"check out{1} our {2}FAQ{3}."
msgstr ""
"Sobald auf der linken Seite eine Verbindung namens \"versch. Klienten\" "
"aufgelistet ist, kannst Du unsere {0}{1} {2}FAQ{3} besuchen."
"Once you have a \"shared clients\" destination listed on the left, please "
"{0}check out{1} our {2}FAQ{3}."
msgstr "Sobald auf der linken Seite eine Verbindung namens \"versch. Klienten\" aufgelistet ist, kannst Du unsere {0}{1} {2}FAQ{3} besuchen."
#, java-format
msgid ""
"Point your IRC client to {0}localhost:6668{1} and say hi to us on {2}#i2p-"
"help{3} or {4}#i2p{5}."
msgstr ""
"Verbinde deinen IRC-Klienten mit dem Server auf {0}localhost:6668{1} und "
"schau bei uns im Kanal <a href=\"irc://127.0.0.1:6668/i2p-de\">#i2p-de</a>, "
"{2}#i2p-help{3} oder {4}#i2p{5} vorbei!"
"Point your IRC client to {0}localhost:6668{1} and say hi to us on "
"{2}#i2p{3}."
msgstr "Verbinde deinen IRC-Klienten mit {0}localhost:6668{1} und sag uns in {2}#i2p{3} Hallo!"

View File

@@ -58,6 +58,5 @@ msgstr ""
#, java-format
msgid ""
"Point your IRC client to {0}localhost:6668{1} and say hi to us on {2}#i2p-"
"help{3} or {4}#i2p{5}."
"Point your IRC client to {0}localhost:6668{1} and say hi to us on {2}#i2p{3}."
msgstr ""

View File

@@ -2,22 +2,23 @@
# Copyright (C) 2009 The I2P Project
# This file is distributed under the same license as the routerconsole package.
# To contribute translations, see http://www.i2p2.de/newdevelopers
#
#
# Translators:
# strel, 2014
# trolly, 2013
# trolly, 2013
msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-08-11 15:42+0000\n"
"PO-Revision-Date: 2013-07-25 09:30+0000\n"
"Last-Translator: trolly\n"
"Language-Team: Spanish (http://www.transifex.com/projects/p/I2P/language/"
"es/)\n"
"Language: es\n"
"POT-Creation-Date: 2013-07-13 21:46+0000\n"
"PO-Revision-Date: 2014-02-24 00:55+0000\n"
"Last-Translator: strel\n"
"Language-Team: Spanish (http://www.transifex.com/projects/p/I2P/language/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: es\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
msgid "Congratulations on getting I2P installed!"
@@ -28,29 +29,22 @@ msgstr "&iexcl;Bienvenido a I2P!"
#, java-format
msgid "Please {0}have patience{1} as I2P boots up and finds peers."
msgstr ""
"¡ Por favor, tenga {0}paciencia{1} mientras I2P se arranca y encuentra otros "
"pares!"
msgstr "¡ Por favor, tenga {0}paciencia{1} mientras I2P se arranca y encuentra otros pares!"
#, java-format
msgid ""
"While you are waiting, please {0}adjust your bandwidth settings{1} on the {2}"
"configuration page{3}."
msgstr ""
"Este es el momento ideal para adaptar tu {0}configuraci&oacute;n del ancho "
"de banda{1} en la {2}p&aacute;gina de configuraci&oacute;n{3}."
"While you are waiting, please {0}adjust your bandwidth settings{1} on the "
"{2}configuration page{3}."
msgstr "Este es el momento ideal para adaptar tu {0}configuraci&oacute;n del ancho de banda{1} en la {2}p&aacute;gina de configuraci&oacute;n{3}."
msgid "Also you can setup your browser to use the I2P proxy to reach eepsites."
msgstr ""
"También puede configurar su navegador para usar el proxy de I2P para ver las "
"eepsites."
msgid ""
"Also you can setup your browser to use the I2P proxy to reach eepsites."
msgstr "También puede configurar su navegador para usar el proxy de I2P para ver las eepsites."
msgid ""
"Just enter 127.0.0.1 (or localhost) port 4444 as a http proxy into your "
"browser settings."
msgstr ""
"Simplemente escriba 127.0.0.1 (o localhost) puerto 4444 en la configuración "
"de proxy de su navegador."
msgstr "Simplemente escriba 127.0.0.1 (o localhost) puerto 4444 en la configuración de proxy de su navegador."
msgid "Do not use SOCKS for this."
msgstr "No use SOCKS para esto."
@@ -58,23 +52,16 @@ msgstr "No use SOCKS para esto."
#, java-format
msgid ""
"More information can be found on the {0}I2P browser proxy setup page{1}."
msgstr ""
"Puede encontrarse más información en la web{1} de configuración del proxy "
"del navegador de {0}I2P"
msgstr "Puede encontrarse más información en la web{1} de configuración del proxy del navegador de {0}I2P"
#, java-format
msgid ""
"Once you have a \"shared clients\" destination listed on the left, please {0}"
"check out{1} our {2}FAQ{3}."
msgstr ""
"En cuanto veas a la izquierda una conexi&oacute;n llamada \"clientes "
"diferentes\", puedes visitar nuestros {0}{1} {2}FAQ{3}."
"Once you have a \"shared clients\" destination listed on the left, please "
"{0}check out{1} our {2}FAQ{3}."
msgstr "En cuanto veas a la izquierda una conexi&oacute;n llamada \"clientes diferentes\", puedes visitar nuestros {0}{1} {2}FAQ{3}."
#, java-format
msgid ""
"Point your IRC client to {0}localhost:6668{1} and say hi to us on {2}#i2p-"
"help{3} or {4}#i2p{5}."
msgstr ""
"&iexcl;Con&eacute;cta tu cliente IRC con el servidor {0}localhost:6668{1} y "
"ven a saludarnos en los canales <a href=\"irc://127.0.0.1:6668/i2p-es\">#i2p-"
"es</a>, {2}#i2p-help{3} o {4}#i2p{5}!"
"Point your IRC client to {0}localhost:6668{1} and say hi to us on "
"{2}#i2p{3}."
msgstr "Dirija su cliente de IRC hacia {0}localhost:6668{1} y salúdenos en {2}#i2p{3}."

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