Compare commits

...

597 Commits

Author SHA1 Message Date
zzz
1246e1c498 0.9.14 2014-07-26 20:32:26 +00:00
zzz
d6b0b1b93c refresh tweaks
another escape html
2014-07-26 20:14:01 +00:00
zzz
1e0c970c95 remove add client button 2014-07-26 19:31:36 +00:00
zzz
db9f49c7d4 updates after review:
Disable clients.config editing in UI
Strip single quotes too
Fix double-escaping in susimail folder page
2014-07-26 18:58:58 +00:00
zzz
1603353ae8 Susimail escaping from psi plus some more 2014-07-26 16:50:58 +00:00
zzz
6753d23309 Add filtering for getParameterMap()
Don't return null entries in getParameterValues() array
Log in getParameterValues() too
static
2014-07-26 15:09:40 +00:00
zzz
ca5755b0fd javadoc move new classes 2014-07-26 13:51:48 +00:00
zzz
2c8223274d filter pattern tweaks 2014-07-26 13:43:52 +00:00
zzz
f0dd09cf9c filter logging 2014-07-26 12:18:35 +00:00
zzz
4746d9eb80 Fix CSP to allow inline style and refresh
Add filter to all webapps
2014-07-26 11:01:16 +00:00
zzz
99401c5639 fix link 2014-07-26 10:51:42 +00:00
zzz
58578d9020 Console:
XSSFilter patch from str4d:
  XSSFilter and XSSRequestWrapper were from http://ricardozuasti.com/2012/stronger-anti-cross-site-scripting-xss-filter-for-java-web-apps/
  No provided license, but it is clearly intended for public consumption.
  But most of it is boilerplate provided by the Servlet Filter system.
  In fact, now that I have stripped out his JS-specific patterns and replaced it with the whitelist,
  it is effectively identical to what I would have written from scratch.
2014-07-26 09:39:31 +00:00
zzz
af575d6c95 * Console:
- Fix several XSS issues (thx Aaron Portnoy of Exodus Intel)
  - Add Content-Security-Policy and X-XSS-Protection headers
  - Disable changing news feed URL from UI
  - Disable plugin install from UI
  - Disable setting unsigned update URL from UI
  - Disable /configadvanced
* DataHelper: Disallow \r in storeProps() (thx joernchen of Phenoelit)
* ExecNamingService: Disable (thx joernchen of Phenoelit)
* Startup: Add susimail.config to migrated files
2014-07-26 09:32:26 +00:00
e9c8748c0b Updated Eclipse settings 2014-07-26 02:48:49 +00:00
08409d016b translation updates from Transifex 2014-07-23 13:55:58 +00:00
42bfbfc60b geoip database updates 2014-07-23 13:54:36 +00:00
c7c087d964 fix poupdate target 2014-07-23 13:49:09 +00:00
bd45d5483f Added new reseed host, thanks to Backup.
Notes: Only HTTPS and SU3 (v2) support.
2014-07-22 17:56:50 +00:00
zzz
ce4874d825 better logging of reseed su3 errors 2014-07-21 20:05:05 +00:00
9b408b67ef Adding Matt's SU3 reseed key. 2014-07-21 18:07:02 +00:00
zzz
c3bf100082 readme_fr.html thx hummingbird 2014-07-21 13:24:13 +00:00
zzz
b282ccd890 increment error count on exception 2014-07-21 13:23:14 +00:00
f38b741813 Adding sindu's reseed key. ( i2p-netdb.innovatio.no ) 2014-07-21 01:47:37 +00:00
3a899d52d1 Don't grab the ClientApp if we don't need to 2014-07-19 23:55:43 +00:00
zzz
a2567b0ee2 * SusiMail: Better error message on decode fail
http://forum.i2p/viewtopic.php?t=11469
2014-07-19 16:31:59 +00:00
zzz
4b0019c732 * SAM: Add support for RAW on the bridge socket in v3 (ticket #1334)
log fixes
2014-07-19 15:43:51 +00:00
zzz
5d21738410 * i2psnark: Don't prefer leeches during end game, to
prevent slowdowns or stalls
2014-07-19 12:48:16 +00:00
zzz
df81006b42 javadoc 2014-07-19 12:40:23 +00:00
zzz
2c7006e9bd Streaming; Disable fail-fast for now. It's failing on leaseset lookup
far too often. Need to fix that first.
2014-07-19 12:39:37 +00:00
b1caa8d5a3 fix URL in initialNews: It's i2p-projekt not i2p-project
(thanks to SeekingFor for the heads-up)
2014-07-15 23:46:08 +00:00
zzz
8b2ffada10 - fix test
- final
- last week's history
2014-07-15 14:30:19 +00:00
0998738e94 Updated history 2014-07-15 12:59:56 +00:00
c04062bbdf Forgot to update @since 2014-07-15 12:58:58 +00:00
0c7a3a3a39 Stubs for I2CP connections over Unix domain sockets 2014-07-15 12:54:22 +00:00
zzz
f364a83f4f mtn.i2p-projekt.i2p 2014-07-14 20:40:36 +00:00
zzz
9dabc75866 * SU3File: Disable the X.509 CN checking of local certs on Android,
as the javax.naming classes are not available.
   Any issues with local certs will be discovered in non-Android testing.
2014-07-13 13:29:55 +00:00
zzz
2c185ea76c * Datagrams:
- Redefine the repliable datagram signature for non-DSA_SHA1 sig types;
    was the sig of the SHA-256 of the payload, now the sig of the payload itself.
    This is an incompatible change but nobody is yet using the new
    sig types for datagram applications.
  - Don't pollute the hash cache with hashes of payloads
  - Check for too-big datagrams
  - Remove assertion check
  - Cleanups
2014-07-11 19:31:44 +00:00
zzz
39e859c368 javadoc 2014-07-11 19:29:44 +00:00
zzz
dfbe3c4eb1 signing key type check 2014-07-09 13:29:52 +00:00
zzz
b8170a544b add reseed cert 2014-07-09 13:27:57 +00:00
4e7f92ec89 Removing certificate + added it to delete list 2014-07-09 00:46:18 +00:00
292683268b Thanks for the past support in reseeding pkol!
Removing reseed host after request.


From: pkol <pkol@mail.i2p>
To: Meeh <meeh@mail.i2p>
Subject: Reseed server shutdown
X-Mailer: smtp.postman.i2p - Official I2P Mailer

Hi meeh,

I wanted to announce the discontinuation of my reseed server
(reseed.pkol.de) at the end of July/beginning of August.

Thanks for your support during the initial setup.

Cheers
pkol
2014-07-09 00:29:59 +00:00
zzz
dc14abd4d3 BFNS: Trim whitespace from hosts.txt when importing
DataStructureImpl: Throw unique exception on bad base 64
2014-07-05 21:58:48 +00:00
zzz
dd782f08f7 hosts.txt: Remove trailing whitespace causing test failure 2014-07-05 21:44:23 +00:00
zzz
d57dc9a8a2 * Reseed: Check su3 version as date code 2014-07-05 19:15:26 +00:00
zzz
4e463d57ce * Reseed: Send If-Modified-Since in fetches
* EepGet: Fixes for adding etag or lastmod headers before fetch
2014-07-05 18:41:09 +00:00
zzz
e0c0cc8b63 Avoid publishing null IP when using forced address config 2014-07-05 17:02:44 +00:00
zzz
cc50d47376 log warning on very low MTU 2014-07-05 17:01:29 +00:00
zzz
4da7548caa * Reseed:
- Fix URLs without trailing /
   - Cleanups of su3 code
2014-07-05 13:39:51 +00:00
zzz
91a676cb36 public constructors for SKM 2014-07-05 13:37:53 +00:00
zzz
48a32fb3b8 spacing 2014-07-05 13:37:35 +00:00
zzz
845b45a57d javadoc 2014-07-05 13:36:29 +00:00
zzz
7b7a620999 * Console: Add event log viewer (ticket #1117) 2014-07-03 13:13:57 +00:00
zzz
82217d5ebc increase default refresh on graphs page 2014-07-03 13:08:24 +00:00
zzz
b95ec70d7d Console: Check wrapper version before calling WrapperManager.getProperties() 2014-07-03 13:07:41 +00:00
zzz
aa3d3670a4 * PrivateKeyFile: Check for key type mismatch 2014-07-03 13:06:21 +00:00
zzz
8198c83982 * Base64:
- Catch numerous decoding errors that were previously misdecoded (ticket #1318)
  - Improve decoding efficiency, reduce copies
  - encode(String) now uses UTF-8 encoding
  - decode() now accepts short strings without trailing '='
  - whitespace in decode will now cause an error, was previously ignored
  - Cleanups
2014-07-03 13:03:56 +00:00
75ff7987b8 re-enable reseed.pkol.de:443 (ticket #1326) as it seems to be working again 2014-07-02 22:02:27 +00:00
9c87685c02 fix date in history.txt 2014-07-02 13:57:24 +00:00
ce2bb85440 Update Java Service Wrapper to v3.5.25
- Windows: x86 and x64 versions self-compiled with VS2010 in
  Windows 7. The icon has been changed from Tanuki's default to Itoopie.
- Linux ARMv6: Compiled on a RaspberryPi using gcc 4.6.3-14+rpi1,
  Oracle Java 1.7.0+update40 and stripped
- All other binaries are from the "community edition" deltapack offered by
  Tanuki.
2014-07-02 13:54:47 +00:00
43fdff2292 postinstall: remove some redundancy, update comments 2014-07-02 13:51:17 +00:00
zzz
06525adf3d Chinese eepsite help from xkimo 2014-06-30 13:23:06 +00:00
zzz
cff4210dfd merge of 'a88d14e53014d9ab4a5d6e156e3abe2e496284c2'
and 'bcf2bb5bf040195d80e26c4bf643ba0df8386f8a'
2014-06-29 11:44:37 +00:00
zzz
d855c5de50 * NetDB: Add more su3 checks
* SU3File: Improve CLI help
2014-06-29 11:43:57 +00:00
f1a738340f checkcerts.sh: remove unnecessary echos 2014-06-29 11:37:24 +00:00
9827c48527 checkremotecerts.sh: support for ports 2014-06-29 11:27:57 +00:00
367d68e552 Adding three reseed hosts, all with reseed-v2 support
* uk.reseed.i2p2.no
* us.reseed.i2p2.no
* jp.reseed.i2p2.no
2014-06-29 02:15:26 +00:00
1498ed361e Added my reseed key 2014-06-29 02:13:02 +00:00
zzz
91bc16ce05 * NetDB: Fix handling reseed URLs with ports (ticket #1278)
by fixing the dup host check
2014-06-29 00:44:31 +00:00
861a1e26d7 merge of '2542a527f53e4df3896ae26f5b0cf7d0a45128ff'
and '4944f31a9bec7dcacd3a97f6e451fd4eaf5f4096'
2014-06-28 21:58:50 +00:00
a5b2f9a5e9 temporarily disable reseed.pkol.de:443 (ticket #1326) 2014-06-28 21:55:24 +00:00
9550484037 checkremotecerts.sh: fix regex so that commented out hosts are not matched
(//" was needed and  // " would pass through)
2014-06-28 21:51:09 +00:00
b33284bb8e added echelon su3 reseed cert 2014-06-28 20:01:03 +00:00
zzz
ce2694e8fb * NetDB: Add support for reseeding with su3 files (ticket #934) 2014-06-28 19:37:59 +00:00
44073732e2 build.xml: copy built binaries to build/ in the build* targets
This will hopefully make it easier for apps to use bits of I2P as build-deps.
2014-06-28 16:51:38 +00:00
zzz
fef591412e SAM: Cherrypick from patch in ticket #1318:
- Add SIGNATURE_TYPE support to GENERATE and CREATE
   - Don't NPE checking dest+privkeys
   - Simplify HELLO checking
   - Don't require two params in HELLO message
   - Make MIN parameter optional too
   - Version checking fixes
   - Bump version to 3.1, only visible if requested
   - Cleanups, javadocs
2014-06-28 14:14:39 +00:00
f191e50b14 Custom target so I2P-Bote can be built against source 2014-06-28 05:57:34 +00:00
zzz
3379432e5f SAM: Cherrypick from patch in ticket #1318:
- Check for extra bytes in private key string
   - checkPrivateDestination() returns boolean instead of throws
2014-06-27 21:05:54 +00:00
zzz
bb9129b61b SAM: Cherrypick from patch in ticket #1318:
- Fix empty properties check
   - Overrides
   - Statics
2014-06-27 20:53:01 +00:00
zzz
0fc3029aaa SAM:
Version handling (ticket #1318)
   - MAX param now optional
   - 1-digit versions now accepted for MIN and MAX
   - Use VersionComparator for version tests
   - Don't require a minor version of 0
   - Fix empty properties check
   - Overrides
   - Prep for version 3.1
  Throw exception on null option key (ticket #1325)
2014-06-27 20:36:34 +00:00
zzz
d8c8586ccf SAM: No synch needed for finals;
Move fields to top
2014-06-27 16:53:05 +00:00
zzz
38a4728283 SAM: Use SAMHandler.writeString() where possible,
Use DataHelper.getASCII() for byte conversion
2014-06-27 16:46:57 +00:00
zzz
7888705b01 final 2014-06-27 16:31:24 +00:00
zzz
31938f49d6 SAM: Fix checkPrivateDestination() for key certs (ticket #1318) 2014-06-27 16:19:07 +00:00
zzz
c95ed2ea96 SAM: Rename exceptions, make serialVersionUID private,
add new SAMException constructor
2014-06-27 16:15:22 +00:00
zzz
b5ed247a53 SAM: more Log conditionals, javadocs 2014-06-27 15:55:12 +00:00
zzz
22aff49747 SAM: Log conditionals, javadocs 2014-06-27 15:53:16 +00:00
zzz
e4430f05e4 2 more pkg private 2014-06-27 15:32:56 +00:00
zzz
1047691c64 SAM: Make all classes package private except the SAMBridge entry point 2014-06-27 15:26:44 +00:00
zzz
f3180b3f6f SAM client logging cleanup 2014-06-27 15:14:21 +00:00
zzz
616866cc9e Build: Move remaining jars to Java 6, as we will require
API 9 in the next Android release.
2014-06-27 13:57:43 +00:00
58512b8230 build.xml: add new macros for use in the release target
Also move away from using external binaries when an ant task can do the job.
2014-06-26 20:01:07 +00:00
zzz
ca4555c496 lint redundant cast all over 2014-06-26 15:26:58 +00:00
zzz
bc99bc7206 javadoc fixes 2014-06-26 12:51:33 +00:00
zzz
1420c773a6 * Streaming; Drop the preliminary channel implementations,
as added by 'dream' in late 2011. Testing couldn't have happened,
   as they don't work and can't ever work as designed.
   Channels must have underlying file descriptors unless you implement
   your own Selector and that would probably require JNI.
   See http://zzz.i2p/topics/1229 for details.
   Also http://stackoverflow.com/questions/911780/how-do-i-define-my-own-selectablechannel
2014-06-24 12:49:18 +00:00
zzz
690b40ed77 * Tunnels: Reject participating tunnels when hidden (ticket #1314) 2014-06-23 20:23:32 +00:00
zzz
986de4c1d6 Streaming: Fix connection error message 2014-06-23 20:12:12 +00:00
zzz
01da32364f Streaming: Bundle I2PSocketException messages for translation 2014-06-23 20:10:11 +00:00
zzz
8b1abc08db Add Destination.toBase32() 2014-06-23 20:06:03 +00:00
69e56f8f6b 'Home': (temporarily?) disable salt.i2p.
At this point it's been offline for a month with no sign of returning.
2014-06-23 08:19:30 +00:00
b611d0238a build.xml: minor tweaks to comments, indentation 2014-06-22 00:45:50 +00:00
zzz
2dcc9b7a1e i2psnark:
- Display webapp name in html title (ticket #1311)
  - Use tracker from magnet link in display (ticket #1313)
  - Clarify auto-start (ticket #1293)
  - Include tracker in magnet link on details page (ticket #964)
  - Recognize .azw4 extension as ebook
  - Cleanups
2014-06-21 02:30:25 +00:00
zzz
3e54b5d544 New Spanish eepsite help page from 'lati2p' 2014-06-19 01:13:17 +00:00
zzz
8845ce6e1c Findbugs all over:
- Serializable
 - hashCode()
 - Make DataStructureImpl Serializable (removed from DataStructure in 2005)
2014-06-15 16:14:13 +00:00
ff189e796c slackbuild: minor changes to the comments 2014-06-14 09:15:55 +00:00
89c07ac969 slackbuild: remove gettext as a run-time requirement as it's not *strictly* req'd 2014-06-14 09:15:14 +00:00
a8e878f894 SlackBuild: version extraction using awk (thanks 'ihavei2p') (ticket #1310) 2014-06-14 00:08:49 +00:00
1f8f3eb4d9 Fix up the included SlackBuild (ticket #1310) 2014-06-13 22:44:42 +00:00
zzz
8fd2a05bf9 duh 2014-06-13 22:12:38 +00:00
zzz
002d057c92 findbugs all over 2014-06-13 21:37:18 +00:00
ab44488e4c i2prouter: don't use uname -p to determine the arch
- This came from the script from Tanuki but it does return useful information
  (as far as its use in the script) in my testing. uname -m is better for our
  needs. (The problem is only seen on certain CPUs when *all* available wrapper
  binaries are present and the script tries to resolve the correct binary to use..
2014-06-13 20:55:36 +00:00
653ffbc82e build.xml: add jbigi-linux-x86-only target 2014-06-13 20:28:02 +00:00
zzz
95fd0291e3 * Tunnels: Don't get stuck only building tunnels for an empty pool (ticket #1300) 2014-06-13 13:40:52 +00:00
zzz
2a269ff1a9 * Transports: Disallow Carrier Grade NAT (RFC 6598) addresses 2014-06-13 13:39:15 +00:00
zzz
83ccfb4596 * i2psnark: Fix NPE when fetching invalid torrent (ticket #1307) 2014-06-13 13:38:30 +00:00
e968828916 i2prouter: add amdfx* as an x64 CPU / move ldd check 2014-06-12 00:41:14 +00:00
ed85a2b82b Executables get 755, not 744
While this may be the primary cause of the problem mentioned in ticket #1310,
plenty of other fixes/changes will be forthcoming.
2014-06-11 19:27:54 +00:00
e692e21dc9 updates to SlackBuild READMEs 2014-06-11 19:24:58 +00:00
zzz
662fe3ebc2 * i2psnark: Fix decoding of negative numbers (ticket #1307) 2014-06-10 19:54:05 +00:00
zzz
1bf8fd92e4 * NewsFetcher: Only treat correct status codes as success
The last-modified date was getting updated even when
   the server returned e.g. 503, preventing routers from
   getting the latest file on a subsequent fetch.
2014-06-10 19:52:55 +00:00
zzz
4dd8a6421a Tomcat: Bundle a stripped tomcat-coyote.jar with the utils
required to precompile jsps with tags (SusiDNS and Bote).
As of 6.0.39, these utils are required but they are not bundled
in the Tomcat deployer package, the main package is required.
This checkin has only the classes required from the jar.
2014-06-10 00:17:19 +00:00
zzz
884b285bf5 * Jetty 8.1.15.v20140411
* Tomcat 6.0.41
2014-06-09 20:39:49 +00:00
zzz
cb340152df * i2psnark:
- Linkify all announce URLs on details page
   - Sanitize announce URLs
2014-06-09 14:14:01 +00:00
zzz
299a44e7eb i2psnark: display peer version when available 2014-06-07 17:07:44 +00:00
zzz
40e5bcbdbb * NetDB: Reduce negative lookup cache time
* OCMOSJ:
   - Increase timeout if we must lookup leaseset
 * Streaming:
   - Shorter expire time in TCBCache
   - Don't fail a connection once it is up
   - Log tweaks
2014-06-07 13:23:38 +00:00
zzz
d328e78727 * SusiMail: Extend times on background checker (still disabled by default) 2014-06-07 13:17:40 +00:00
zzz
1bcb9b24b6 * Console: Fix NPE in summary bar 2014-06-07 13:16:19 +00:00
zzz
3c1c130bf0 * i2psnark: Fix errors when checking read-only files 2014-06-07 13:15:13 +00:00
zzz
df3442563c * Eepsite: Updated French help page (thx hummingbird) 2014-06-07 13:13:33 +00:00
zzz
331b1fa742 fix test breakage 2014-06-01 18:04:04 +00:00
zzz
b97a53177e * i2psnark:
- Store seed/leech status in DHT tracker (ticket #1280)
   - Increase max received DHT nodes (Vuze sends more than K)
   - Recognize not-registered message from diftracker
   - Fix bug in DHT unannounce()
2014-06-01 17:13:00 +00:00
zzz
633b71ba19 history for prop, -2 2014-05-31 16:58:05 +00:00
zzz
f3dd42143d cleanups 2014-05-29 12:44:27 +00:00
zzz
7c79f5d5e5 propagate from branch 'i2p.i2p.zzz.test2' (head 9aee013cf961ba795a6b5333481634c52d43abc5)
to branch 'i2p.i2p' (head e439e67c49695a624fabdf6f3cd1a8f7a3fd7ea5)
2014-05-29 12:31:49 +00:00
zzz
af5c0bd8a7 Console, i2psnark, susimail: Recognize emacs-w3m as a text-mode browser
As reported at http://zzz.i2p/topics/1630
untested
2014-05-28 21:25:35 +00:00
c07bfe34ab s/www\.i2p2\.i2p/i2p-projekt.i2p/g 2014-05-27 12:55:53 +00:00
49681415e2 Change "view source" link from Trac to Github. 2014-05-27 12:54:46 +00:00
190e8c01b7 update irc servers mentioned in the router console
- remove freshcoffee, add dg and echelon
2014-05-27 12:48:01 +00:00
zzz
6ae86f7d81 * i2psnark: Support ports in announce URLs, 2nd try (ticket #1283) 2014-05-27 12:06:59 +00:00
0aeb3ca75e s/i2plugins/plugins/ since i2plugins hasn't existed for years 2014-05-26 14:28:41 +00:00
1d3e12abb7 router console: fix links to i2p project pages
Some pages, such as Arabic linked to the German version.
Most pages mentioned "i2p-projekt and its mirror i2p-projekt.i2p"
2014-05-26 14:27:55 +00:00
5e8428ef6c router console: s;forum\.i2p2\.de;forum.i2p;g 2014-05-26 14:18:59 +00:00
19e3064529 remove #i2p-help from the router console (merged into #i2p) 2014-05-26 14:10:47 +00:00
f9dbd74ad8 update links to syndie to point to its eepsite 2014-05-26 13:59:22 +00:00
zzz
ff837cf66e i2ptunnel: Define standard tunnel properties and types in one place 2014-05-26 13:36:41 +00:00
zzz
e0914c358e susimail: fix NPE (ticket #1296) 2014-05-25 23:17:19 +00:00
zzz
0e9bb23c7b i2psnark:
- Respond to get_peers with an empty peers list instead of
    a nodes list if the requester was the only peer (ticket #1279)
  - Fix sendError() (still unused)
2014-05-25 21:41:43 +00:00
zzz
7ff5d36f07 i2psnark DHT tweaks (ticket #1281)
- Extend DHT tracker expire time from 45m to 3h
  - Extend DHT announce interval from 10m to 40m
  - Increase announces from 1 peer to 4
2014-05-25 20:38:39 +00:00
zzz
5a3eab0c7c i2psnark:
- Change "private" value in infohash from string to number,
    to match what everybody else does
  - Send seed/leech status in DHT announces (ticket #1280)
2014-05-25 19:41:01 +00:00
zzz
c28f707f55 cleanup 2014-05-25 19:23:04 +00:00
zzz
ef96c88719 HTTP Client:
- Add GUI options for user-agent, referer, accept
  - Fix SSL (initial socket data in I2PTunnelRunner)
  - Disable SSL to i2p addresses by default, add GUI option
  - Fix NPE in error handler
2014-05-25 19:17:36 +00:00
faa2435e33 checkremotecerts: fail if CN doesn't match
Since all reseed hosts now have proper certificates with matching CNs, I'm
making this script enforce a stricter policy, requiring matching CNs.
2014-05-24 13:13:35 +00:00
0537a221d3 temporarily disabling uk.reseed.i2p2.no 2014-05-24 10:08:58 +00:00
99c5a1978f merge of 'be06d7987687efb0d6b027f04a2efbf702218677'
and 'f6541fdc88966f2e0e510c2291b33cf716a3a62a'
2014-05-22 18:09:55 +00:00
zzz
d106f483a1 0.9.13 2014-05-22 14:59:02 +00:00
dee84e70ae Eclipse project for entire routerconsole dir 2014-05-22 01:51:05 +00:00
09995b77b4 Eclipse project for entire installer dir 2014-05-21 02:02:36 +00:00
06894f9f0b Export jstl.jar and standard.jar in Eclipse 2014-05-20 21:34:45 +00:00
zzz
73943b1a08 javadocs 2014-05-20 13:23:31 +00:00
zzz
b573dab05f javadocs 2014-05-20 13:22:07 +00:00
zzz
a766eca283 Crypto: Don't start YK thread in constructor (ticket #973) 2014-05-20 13:14:55 +00:00
zzz
a65edbef92 SSU: Fix peer test deadlock (ticket #1286) 2014-05-20 12:35:48 +00:00
zzz
7479aa235e fixes after review 2014-05-20 12:03:19 +00:00
zzz
4167cd955b Console: Cheap workaround for old wrappers (ticket #1285) 2014-05-18 23:24:03 +00:00
zzz
d1bd893a7b * I2PTunnel:
- Display custom error pages for I2PSocketExceptions (ticket #788)
   - Tag I2PSocketException text for translation (no bundles yet)
   - Move methods from superclasses to I2PTunnelHTTPClientBase
   - Fix connect client error pages, but they aren't displayed anyway
   - Don't start I2PTunnelRunner threads in constructor (ticket #973)
   - Synch close() in I2PTunnelServer
   - Cleanups and javadocs
2014-05-18 21:13:22 +00:00
zzz
2467856011 * Streaming: Cleanup, don't fail hard on no tunnels (ticket #788) 2014-05-18 00:44:51 +00:00
zzz
d32b4e9f24 * I2CP: Per-message status codes back through streaming (ticket #788)
- New I2PSessionException
   - Streaming PacketQueue requests status for SYNs on outbound conns
   - PacketQueue throws I2PSessionException in streams
2014-05-18 00:05:13 +00:00
zzz
1acd5caaa8 * HTTP client: Fix 'connection reset' browser messages
after an error in the first line (ticket #1277)
   - A SocketException is an IOE
   - out can't be null
2014-05-17 23:44:16 +00:00
zzz
f69b757305 * i2psnark: Support ports in announce URLs (ticket #1283) 2014-05-17 22:10:10 +00:00
d2db41bc89 remove cert from delete list 2014-05-16 14:04:45 +00:00
f3b4377ee1 re-add netdb.i2p2.no.crt 2014-05-16 13:58:51 +00:00
551a8091a9 GeoIP db updates; Japanese Susimail translation, -21-rc 2014-05-15 23:22:40 +00:00
f994590ad7 Translation updates
sk, ja, de, fr, it zh, nl, uk, nb
2014-05-15 23:14:38 +00:00
zzz
8371b8f806 * I2CP: Client-side prep for asynch status for sent messages (ticket #788)
- Clean up and reuse MessageState for asynch notification
   - New I2PSession sendMessage() method and listener
   - Move VerifyUsage from SimpleScheduler to SimpleTimer2 for efficiency
   - Fix up javadocs
2014-05-15 20:11:21 +00:00
5d04f8db89 checkremotecerts.sh fix test logic
Script would return 0 even connecting to the remote host failed.
2014-05-15 03:38:29 +00:00
06de347373 -20-rc 2014-05-14 14:18:24 +00:00
2bf2eb482e update outbound UA to match TBB's 2014-05-14 14:14:23 +00:00
zzz
a93666cd36 * I2CP: Prep for per-message reliability settings (ticket #788)
Router side:
     Store message nonce in ClientMessage, so we may send
     a MessageStatusMessage with a failure code to the client
     without sending an ACCEPTED MessageStatusMessage first.
     All MessageStatusMessages sent in response to outbound messages will now have a valid nonce.
2014-05-14 13:49:42 +00:00
zzz
dbb7eb3d88 * I2CP: Prep for per-message reliability settings (ticket #788)
Add bounds checks for flags
2014-05-14 12:15:57 +00:00
zzz
39169f0450 reveal key cert settings in i2ptunnel 2014-05-14 12:13:43 +00:00
zzz
df71308664 Susimail: Don't let an exception on one mail break others 2014-05-13 21:36:06 +00:00
zzz
e393f82eb7 * i2psnark: Escaping fixes on details page 2014-05-13 21:35:12 +00:00
zzz
8480a204ea * BOB, SAM, i2psnark: Fix datagram NPE (ticket #1275)
This could only happen on an extremely overloaded router.
2014-05-13 18:45:54 +00:00
zzz
197be5f60f * SusiMail: AIOOBE fix 3nd try (ticket #1269) 2014-05-13 18:39:56 +00:00
zzz
5621e9b390 * SusiMail: AIOOBE fix 2nd try (ticket #1269) 2014-05-12 20:46:30 +00:00
485d785e0b merge of 'dcf98ef995380862d3e668685caaa0acd403f068'
and 'f9fdb1592f632ef5de78e3dc7dac3f75ce4e3c39'
2014-05-10 15:38:20 +00:00
8d71d496be new self signed certificate which fits to the host name reseed.i2p.projekt.de 2014-05-10 15:21:54 +00:00
zzz
738bae46d2 * SusiMail:
- Remove deleted messages from memory too
   - Disable delete button when really-delete button shown
2014-05-10 14:47:46 +00:00
zzz
d519228efb change exception type 2014-05-10 14:44:09 +00:00
zzz
72c404c4d4 * NTCP: Fix NPE (ticket #996)
(hopefully)
2014-05-10 14:42:13 +00:00
zzz
d2e3547a2e * Crypto: JVM AES only faster for larger data size 2014-05-09 19:13:28 +00:00
zzz
8d9790fd77 * CPUID:
- Add hasAES()
   - Fix bugs in unused hasSSE3(), hasSSE41(), hasSSE42()
 * Crypto: Use JVM AES when faster
 * SystemVersion: Add isJava7() and isX86()
2014-05-09 15:28:54 +00:00
zzz
cd91a6b2a4 * SusiMail: Add more locking (ticket #1269) 2014-05-09 12:15:12 +00:00
zzz
e165c1805d unnecessary cast 2014-05-09 12:14:19 +00:00
292b0a81c0 remove debugging cruft 2014-05-09 10:33:01 +00:00
b9e9c07d95 checkremotecerts.sh: clean-ups, compatibility updates
It now works with either gnutls or openssl, and both gnutls v2 and gnutls v3.
2014-05-09 10:21:15 +00:00
837bf9eafe add i2pdocs.str4d.i2p to hosts.txt
It's linked on the website but wasn't in any of the default lists.
2014-05-09 10:11:22 +00:00
zzz
cfdbef05c5 set GPG key ID in release target 2014-05-08 19:23:15 +00:00
47b10e9771 checkremotecerts.sh: explicit check that cert exists 2014-05-08 17:56:37 +00:00
1b5a2ddef3 updated cert for ieb9oopo per email in ticket #1266 2014-05-08 17:55:41 +00:00
c161649ed5 Add script to check reseeder host certificate validity 2014-05-08 13:31:32 +00:00
c9b5c03e1b remove certs that are no longer used 2014-05-08 12:47:46 +00:00
c4c04d7ec5 rename i2pproject cert
The other self-signed certs are named after the host that they're being used
for. Maintaining this naming scheme will make automated testing easier.
2014-05-08 12:46:44 +00:00
b4e03fa969 Removing netdb.i2p2.* certs
These have not been used for some time. netdb.i2p2.no is using an *.i2p2.de
cert from Commodo.
2014-05-08 12:45:31 +00:00
zzz
1cdcf1cb0a i2ptunnel: Display warning for duplicate client ports (ticket #1265) 2014-05-07 16:00:38 +00:00
zzz
56b6992ca8 i2psnark: Add log message if directory does not exist (ticket #1263) 2014-05-07 15:58:24 +00:00
zzz
2beaea4a86 Tunnels: Revert expl. OB default back to 2 + 0-1 for now 2014-05-07 14:50:45 +00:00
zzz
2dc97b160a i2psnark: Allow click on entire table cell for viewing torrent details 2014-05-07 14:48:42 +00:00
zzz
a014918c0d Transports: Use constant time method for HMAC verification 2014-05-07 14:47:15 +00:00
zzz
fb9a4eb87a SSU: Extend establishment phase retx timeout 2014-05-07 14:43:46 +00:00
zzz
cd83c48526 DSAEngine: Minor cleanup 2014-05-07 14:41:28 +00:00
zzz
5b2766ddfb Data: Use Arrays.equals() directly, same as DataHelper.eq() 2014-05-07 14:40:03 +00:00
zzz
f912b01137 Fix console getting disabled when saving client config (ticket #1260)
Router: Add warning at startup if console is disabled
2014-05-07 14:36:41 +00:00
zzz
b0db4e4fff * SusiMail:
- Don't fetch headers from folder sorters
   - Update debug setting when saving config
2014-05-07 14:34:51 +00:00
zzz
649f76fb06 add hiddengate.i2p 2014-05-07 14:33:20 +00:00
zzz
67ea2f3717 SusiMail: Remove dups in war 2014-05-01 17:05:57 +00:00
zzz
e9e535cb94 * SusiMail:
- Move js to resources
   - js for delete boxes in folder view
2014-05-01 14:34:02 +00:00
zzz
7822b5c3ac SusiMail: header padding 2014-05-01 13:13:20 +00:00
zzz
767bd05ce1 SusiMail: new sorter base class 2014-05-01 13:02:44 +00:00
zzz
36ebe19cd7 SusiMail po update for TX 2014-05-01 12:04:10 +00:00
zzz
943ea957a2 * Plugins: Retry deletion at restart if it fails (ticket #1257) 2014-04-30 14:22:25 +00:00
zzz
04a3673366 remove UTF8 in commented-out test 2014-04-30 11:28:13 +00:00
zzz
1dfbe73b73 * SusiMail:
- Add print css
   - Add some divs
   - Hide header and footer in mobile css
   - Fix 'from' address in compose
   - Boolean config parse cleanup
   - Config textarea row count
2014-04-29 19:50:28 +00:00
zzz
87889bb322 * UDP:
- Locking fixes on peer testing
   - More locking fixes on rebuilding address
   - Slow down peer test frequency, esp. when firewalled
* Transports:
   - Deprecate unused recheckReachability()
2014-04-27 18:46:11 +00:00
zzz
aa0616d7c5 * UDP:
- Locking fixes on rebuilding address
   - Don't rapidly churn address when we don't have enough introducers
2014-04-27 15:47:43 +00:00
zzz
611ff6357e * NTCP: Remove published NTCP address if SSU becomes firewalled,
to fix the "Firewalled with NTCP enabled" message
2014-04-27 15:01:01 +00:00
zzz
91d7a0ab98 * SusiMail:
- Add locking for disk cache
   - Remove cancel button from login page
   - New configuration page
   - Move set page form to configuration page
   - Theme and folder js enhancements
   - Wrench icon from Silk, same license as the others
2014-04-27 14:57:28 +00:00
zzz
f5661da595 * Router: Set killVMOnEnd before runRouter() (for azi2phelper)
* RoutingKeyGenerator: Don't assume UTC (for azi2phelper)
2014-04-27 14:53:15 +00:00
zzz
3f56ce206d * SusiMail:
- Subject sort enhancements
   - Tag Re: and Fwd:
2014-04-25 20:05:23 +00:00
zzz
8a2308b411 * SusiMail:
- Send delete to server for mails already downloaded
   - Fix idle closer waiting for deletions
   - Add tooltips for icons
   - Add new options to properties resource
   - Add feedback when reload config button pushed (ticket #1158)
   - Reset page size when config reloaded
   - Remove max page size limit
   - Show page nav buttons on bottom too if page is big
   - Set title to subject on message view
   - Log tweaks
2014-04-25 18:47:47 +00:00
zzz
04cabf40b5 * SusiMail:
- Move delete and confirmation button in folder view to bottom left,
     page size form to bottom right
   - Attachment finals and cleanup
   - Increase max size for full download again
   - Fix repeated re-saves of mail to disk
   - Enable auto-deletion of downloaded mails
   - Consolidate check box processing
   - Button spacing tweaks
2014-04-25 16:11:35 +00:00
zzz
4e0c4f6f98 * SusiMail:
- Tweak sort button display based on current sort
   - Secondary sort based on date
   - Ignore "Re:" in subject sort
2014-04-25 14:09:28 +00:00
zzz
75bd235eb2 * SusiMail:
- Add raw attachment download method
   - Display image attachments inline
   - Don't rezip certain attachment types, just offer link
   - Handle attachment sending directly, don't put ref in session
2014-04-25 13:04:04 +00:00
zzz
05236b093a * SusiMail:
- Fix sorting buttons, broken by POST check
2014-04-25 04:15:50 +00:00
zzz
260ebe512c * SusiMail:
- Add icon for new mail
     (from Silk icons, same license as others)
   - Attachment logic tweak
2014-04-25 04:09:14 +00:00
zzz
c2dab16c8c * SusiMail:
- Add icons for attachments and spam
     (from Silk icons, same license as others)
   - Add checks for POST for XSS prevention
2014-04-25 03:42:18 +00:00
zzz
945d455f33 * SusiMail:
- Different colors for new mail and spam
2014-04-24 21:33:43 +00:00
zzz
c8f8f6ff34 * SusiMail:
- Add background mail checker, not yet enabled
   - Add idle timeout connection closer
   - Rely on idle checker for most delayed deletions
   - Cleanup resources better when shutting down session
   - Don't add deleted mails to folder, caused errors after deletions
   - Set socket soTimeouts so things don't hang forever
   - Display errors after check mail button pushed
   - More IOE debug logging
2014-04-24 20:54:22 +00:00
zzz
0d4f597a59 SusiDNS: Fix subscription edit page, thx bubbles 2014-04-24 14:26:21 +00:00
zzz
775047fbc2 * SusiMail:
- Fix HeaderLine decoder going past the headers,
     which was causing corruption in forwarded mails
   - More efficient output buffer allocation in HeaderLine decoder
2014-04-24 01:25:50 +00:00
zzz
1e4b43314c * SusiMail:
- Fix fetching of new mail
   - More Folder cleanup
   - Prep for not leaving on server
   - Prep for background checker
2014-04-23 22:46:57 +00:00
zzz
b365817c99 * SusiMail:
- Queue deletions for a delayed background thread
   - Synch all folder access
   - NPE fixes
   - Javadoc fixes
2014-04-23 19:40:57 +00:00
zzz
bbb04774d1 compile fix 2014-04-22 20:52:08 +00:00
zzz
1823e5e641 * SusiMail:
- Load all mails from disk at startup
   - Add offline mode
   - MailCache now has the total UIDL view
   - Copy silk folder icon from snark to console for use by susimail
2014-04-22 20:01:24 +00:00
zzz
4d2dc1c8e8 * SusiMail:
- Show sender name in folder view
   - Add support for configured sender name
   - Add HTML escaping of '&'
   - Fix Folder sorting so UP is up and DOWN is down
   - Use replace() instead of replaceAll() where appropriate
   - Fix capture by show page after back button
2014-04-22 18:45:09 +00:00
zzz
6986f90bf8 * SusiMail:
- Fix encoding in sent mails on non-UTF8 platforms (thx cryptosynthesis)
   - Clean up all other getBytes() calls
   - Tweak spacing on up buttons
2014-04-22 11:48:45 +00:00
zzz
b43ebd2486 * SusiMail:
- Add persistent cache
   - Remove ID sorter
   - Mail size getter/setter
   - Set mail size when setting body
   - Only send CAPA once
   - Tagged string tweaks
2014-04-22 11:18:56 +00:00
zzz
7bf3ea5200 * SusiMail:
- Pipeline all deletes and quit
   - Don't reconnect after delete and quit
   - Verify connected before each POP3 operation
   - Null check in comparators
   - Don't clear messages if a reconnection fails
   - Use locale-based sorting for strings
   - Increase limit for full fetch again
   - Increase default page size back again
2014-04-21 23:00:46 +00:00
490727b401 fix i2ptunnel 2014-04-21 20:59:29 +00:00
zzz
49f4f3398d * SusiMail:
- Add MailPart constructor, make fields final
   - Add ReadBuffer constructor, make fields final
   - Move decoding to MailPart method
   - Setters/getters for Mail header, body, part
   - Classes package private
   - Finals, constructors
2014-04-21 20:17:08 +00:00
b84682fdc9 * findbugs: mostly stream closure fixes in router, apps, core 2014-04-21 10:54:52 +00:00
zzz
b9491b269b * SusiMail:
- Pipeline initial fetch of messages, huge speedup
2014-04-20 22:22:22 +00:00
zzz
b70cbb28b2 * SusiMail:
- Send CAPA
   - Pipeline STAT, UIDL, and LIST
2014-04-20 19:31:28 +00:00
zzz
673c14287a * SusiMail:
- Rework in POP3 in prep for more pipelining
2014-04-20 18:38:54 +00:00
zzz
b4a0ffdbbd * SusiMail:
- Don't require an attachment to be "uploaded" to send it
   - Move delete attachment button, hide if no attachments
   - Icon for delete attachment button
   - Fix html error in bccToSelf input
2014-04-20 17:12:21 +00:00
zzz
3b2e5bded2 * SusiMail:
- Don't store encoding class names in config
   - New susimail.debug setting in config
   - Use DataHelper to load config file
   - Close any open POP3 socket when session is unbound
   - Don't keep returning user to compose page (ticket #1252)
   - Add javascript capture of back button from compose page
2014-04-20 15:19:30 +00:00
67eb3cc140 unblocking USERS (ticket #1249) and various safe Inspircd commands 2014-04-20 11:53:39 +00:00
zzz
5a683149ab * SusiMail:
- New reply button icon (from Silk, same license as the others)
   - Save BCC-to-self preference in the session
   - Tweak the BCC-to-self layout
   - Fix date format in reply
2014-04-20 02:45:01 +00:00
zzz
b75ad1ca5a * SusiMail:
- Use pipelining in SMTP
   - Rewrite SMTP response processing
   - Translate SMTP error messages
   - Right-justify msg size in folder view
   - String.compareTo() cleanup
2014-04-20 01:26:11 +00:00
zzz
552ab31559 Console: Remove the classpath workarounds for SusiMail,
since it isn't using the jetty classes any more
2014-04-19 20:46:31 +00:00
zzz
4abfde4047 SusiMail:
- CSS padding in inputs
   - Flush writes in SMTP
   - Don't wait for SMTP response after QUIT
   - Translate the "login failed" message
   - Show "no messages" in folder view if none
   - Message view attachment cleanups
   - Fix the message view layout in CSS
   - Pipeline USER and PASS to save a round-trip at startup
   - Better synchronization in POP3
   - Properly de-byte-stuff in POP3
   - Flush writes in POP3 for speedup
   - Remove unnecessary caching in POP3, this is handled in MailCache
   - More efficient handling of POP3 server responses
   - Remove 60s timeout for fetching a message,
     so retrieval of large messages doesn't fail
   - Don't allow line breaks in date/time or size in folder view
   - Use DataHelper.formatSize2() for message size
   - Identify susimail log messages in wrapper
   - Debug log tweaks
2014-04-19 20:44:50 +00:00
zzz
6ecfedba37 SusiMail:
- Increase max size of mails that are fetched in full,
     previous limit was so small it never happened.
   - Move page nav to top of folder view, hide if only one page
   - Put message nav buttons on second line
   - Refuse to send mail with no "to"
   - Reduce default page size as it slows startup
   - Remove unnecessary casts
   - Right justify some input fields
2014-04-19 16:57:56 +00:00
zzz
43883a90d2 SusiMail: Successfully extend session expiration (ticket #1253)
by renaming the cookie, so we don't have a common session ID
with the base context and get it expired there.
2014-04-18 21:32:45 +00:00
zzz
3930113f00 I2PTunnel IRC Client: Prevent AIOOBE (ticket #1254) 2014-04-18 16:44:39 +00:00
zzz
029198c213 * SusiMail:
- Don't force reconnection on folder view (ticket #1253)
   - Only show logout button on folder view
   - Switch subject and date headers on message view
   - Button theme tweaks
   - Debug logging
   - Fix NPE when RELEASE=false
   - Synch tweaks
   - hellip
   - Footer tweak
2014-04-18 16:43:07 +00:00
zzz
493788f4f8 merge of '9f159df098940fb0feecf6eae0c990c62736bb9c'
and 'ba82e9e4c57bd8d9f567c9252fe7b5815972e370'
2014-04-18 01:50:14 +00:00
zzz
028776de88 * SusiMail:
- Extend session expiration (ticket #1253)
   - Handle non-UTF8 encoding on header lines (ticket #508)
   - Display dates in current locale and time zone
   - Display sender name on message view
   - Remove sort-by-ID buttons
   - Hide "reload config" button unless config file is present
   - Increase default page size
   - Add dependency tracking to build
2014-04-18 01:48:03 +00:00
705de68aa3 allow PROTOCTL and LINKS through the filter.
http://www.unrealircd.com/files/docs/technical/protoctl.txt

We already allow /MAP and /LINKS is pretty much the same.
2014-04-18 01:46:19 +00:00
zzz
eb96a74e32 configclients: Don't allow console disable 2014-04-18 01:14:23 +00:00
zzz
614f34c6b4 Stats: clean up addRateData() calls 2014-04-17 18:58:38 +00:00
zzz
f77a3c7f56 NTCP: Log tweaks to help on ticket #996 2014-04-17 18:54:58 +00:00
zzz
6de81d41d2 SSU: SessionRequest replay prevention (ticket #1212)
NTCP: Just use first 8 bytes of Hx^Hi for replay check
2014-04-17 18:52:40 +00:00
zzz
7ac9dc5542 Tunnels: Increase OBEP throttle limit for now 2014-04-17 18:50:24 +00:00
zzz
2195c2fe98 SusiMail: Button styling for prev,next,list 2014-04-17 18:48:52 +00:00
zzz
3f35e927dd SusiMail:
- Initializer cleanup, finals
   - Escape "--" inside HTML comments
   - Log errors to router log too
   - Notes on ticket #508 header line issues
2014-04-17 18:48:07 +00:00
zzz
5ec659513b SusiDNS:
- Move some methods to BaseBean
   - Locking on config file accesses
   - Remove static log and context
2014-04-17 18:39:52 +00:00
zzz
1039a4b7a0 i2psnark: Randomize announce list order and limit size 2014-04-17 18:36:37 +00:00
zzz
88899c1233 clean up unused router stuff 2014-04-06 18:28:34 +00:00
d429514a3a debian: remove dep on ${misc:Depends}
This causes the 'i2p' package to force the version of i2p-router to match.
2014-04-06 16:04:17 +00:00
zzz
b2c6fcbb73 merge of '0c93d925b9ac38f2475b39aa2b80eaa1454214d6'
and '97ec023f8ba85ebdabe5ee0bd3f9e107710f170f'
2014-04-06 15:19:30 +00:00
zzz
3b1e030b39 NetDB: Iterative search improvements
- Pass DSRM hashes through IMD to ILJ for client tunnels too
- Query unknown DRSM hashes in ILJ without looking up
  when using client tunnels; look up after querying
  when using expl. tunnels to speed things up
- Don't look up banlisted hashes
- Check 'from' hash in DSRM against list of peers sent to
- Don't query an unknown peer through a zero-hop OB tunnel
- Log tweaks
Extend expiration of returned message in IMD
2014-04-06 15:18:16 +00:00
zzz
e097a1caeb NetDB: Skip LS verifies when shutting down
remove unneeded null check
2014-04-06 15:15:23 +00:00
d6b09f8bab don't check launch4j xml 2014-04-06 14:36:36 +00:00
zzz
6d46344171 drop launch4j demos, docs, and source 2014-04-06 14:03:43 +00:00
zzz
24e807b238 Skip key cert LS verifies for floodfills that don't support them
Fix continuation after skipping key cert LS stores for floodfills
that don't support them; ditto big leasesets
2014-04-05 14:05:40 +00:00
zzz
fdf6f5d51f -2 2014-04-05 12:59:11 +00:00
zzz
4b938a02e7 log tweak 2014-04-05 12:33:53 +00:00
zzz
44a5740a04 Add server option for unique local address per-client
as suggested in https://lists.torproject.org/pipermail/tor-dev/2014-March/006576.html
2014-04-05 12:30:58 +00:00
zzz
8d73b2e838 Fix changing outproxy without stopping tunnel (ticket #1164) 2014-04-05 12:24:50 +00:00
zzz
e1fc6893b4 SocketErrorListener callback is unimplemented 2014-04-05 12:18:14 +00:00
7487ab8848 i2ptunnel: remove extraneous '>' from editClient 2014-04-02 01:25:47 +00:00
e675416b8c debian: re-enable javadocs pkgs, bump changelog 2014-04-01 21:27:49 +00:00
24a133fe67 add .pc/ to .*ignore 2014-04-01 21:22:41 +00:00
zzz
0570feda6f * NetDB: Handle RI response from non-floodfill router down a client tunnel 2014-04-01 13:05:51 +00:00
zzz
b206665c72 TunnelPoolSettings constructor tweak 2014-04-01 13:03:40 +00:00
zzz
8a6fb132f5 * Console: Fix summary bar html when displaying an update constraint 2014-04-01 13:01:13 +00:00
zzz
6992ca8b98 build path update 2014-04-01 13:00:28 +00:00
zzz
fd916a7646 test script updates 2014-04-01 12:59:27 +00:00
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
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
d28d6efb79 geoip updates 2014-03-28 12:21:52 +00:00
43d84a5f07 fr, nb, and ru translation updates 2014-03-28 12:21:32 +00:00
e4d57f62bb merge of '1202f5d3645add930a96dfa77cd2b2ebfb56ca95'
and '5c131297d763f8953029fea257681d55f2103aaa'
2014-03-24 11:57:46 +00:00
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
682c4cd0b8 remove extraneous '>' from editServer 2014-03-23 18:33:29 +00:00
0f6d039391 Console: Handle stopping plugin ClientApps 2014-03-23 10:55:00 +00:00
d6233a8798 add *.torrent to .gitignore 2014-03-21 11:35:37 +00:00
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
ab612d0088 cleanup of *clean targets, remove more generated files in distclean 2014-03-19 22:00:43 +00:00
3fa7bb9dc5 mtn-ignore: ignore .torrent 2014-03-19 21:59:27 +00:00
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
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
84e6991374 Add .su3 to .mtn-ignore, create new .gitignore file 2014-03-13 11:27:37 +00:00
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
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
e282491798 merge of '10a291d2283174a7527515a7448d220d5023ffc0'
and '6ace0f7ffbda402db7e1af21a74ca29ad54829c2'
2014-03-07 08:35:12 +00:00
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
17c80c29e6 Updated history.txt 2014-03-05 03:35:52 +00:00
5d0bfc63fa Updated readme.html files for new website paths 2014-03-05 03:34:53 +00:00
0c449f8b8e susimail: Removed remaining Jetty dependencies in susimail (ticket #1165)
Thanks for the patch, wockenfuss!
2014-03-05 03:02:08 +00:00
36b6baa33e Updated .mtn-ignore 2014-03-05 02:58:07 +00:00
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
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
6ec665db50 Br. Portugese, French, Japanese, Polish translation updates 2014-02-23 16:54:49 +00:00
7f4c52cf42 remove #i2p-help from initialNews 2014-02-23 16:40:28 +00:00
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
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
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
75fa2b1809 typo fix 2014-02-12 21:38:42 +00:00
zzz
66d9017d58 fix PingTest 2014-02-11 19:45:52 +00:00
53efb7119a merge of '12c51adcf9862cc57488b27ec00002b1bb399294'
and 'b870e2fda1291f95ae4e6e35cc5ded300578d92b'
2014-02-11 14:15:35 +00:00
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
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
f6d9a6917f Removed a comment line from french translation 2014-02-09 20:27:42 +00:00
zzz
2e91890401 Javadoc fixes to correct release number
Remove unused lock object
 Add irc.dg.i2p
 0.9.11
2014-02-08 18:09:46 +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
090a790a9d * Services:
- Move backup news to psi.i2p
   - Move default addressbook subscription to i2p-projekt.i2p
   - Remove www.i2p2.i2p from default update lists
   - Add psi.i2p to hosts.txt
   - Update links on help pages to avoid redirects on new website
     and select the correct language
 * SusiDNS: Fix whitespace issues
2014-02-07 12:52:54 +00:00
8ef3bb3d82 version number fix 2014-02-06 18:50:54 +00:00
388019249d -10-rc
Debian changelog update, Korean debconf translation, history.txt update
2014-02-06 18:45:11 +00:00
91d1364832 February 2014 geoip db updates 2014-02-06 18:43:45 +00:00
2ec1d8484f Brazilian Portuguese, Danish, French, Japanese, Polish, Russian, Ukrainian 2014-02-06 18:32:23 +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
c59603d31b fix swapped Dutch and Norwegian on /configui 2014-02-02 14:39:41 +00:00
zzz
3ab149a399 streaming javadoc fixes 2014-02-01 12:37:45 +00:00
zzz
99f28519fb * SOCKS: Remove static logs 2014-01-31 18:38:15 +00:00
zzz
05aa88b4e8 * /logs: Fix encoding of wrapper log section (ticket #1193)
- remove a cast in FileUtil
2014-01-31 18:34:27 +00:00
zzz
887f953efb * NetDB: Fix cases where corrupt RouterInfo files were not deleted (ticket #1190) 2014-01-31 18:32:22 +00:00
zzz
5e16c42e4e * InboundMessageDistributor: Set reply flag on LeaseSets 2014-01-30 13:02:16 +00:00
2cea7cdb30 fix 2014-01-29 21:41:52 +00:00
e60da8e8ff Added new https reseed, i2p-netdb.innovatio.no (Sindu) 2014-01-29 19:45:10 +00:00
zzz
be12995753 * Tunnels: Change expl. IB default to 2 + 0-1 2014-01-28 22:50:51 +00:00
zzz
c30419107f * /configclients: Add link to plugins.i2p; don't show delete button for console 2014-01-28 22:48:52 +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
434bf13be9 * I2PSnark: Make 'kitty.png' transparent. 2014-01-28 21:11:39 +00:00
236df32f30 volatiles 2014-01-28 17:42:14 +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
5b9d669d79 * I2CP: Use client tunnels for b32 lookups (ticket #1166)
- convert some calls to use getDestHash()
   - javadocs
2014-01-28 13:27:44 +00:00
zzz
b2f4fde7e5 history for prop, -6 2014-01-27 18:50:44 +00:00
zzz
9eefe1e935 propagate from branch 'i2p.i2p.zzz.i2cp' (head d4ac8162a4ba299ac912640f19076c3c90afdc67)
to branch 'i2p.i2p' (head adc5102c93383e01c74b87f04449dc9c307f6e75)
2014-01-27 16:47:22 +00:00
zzz
b91f041ad7 I2CP:
- Add missing session ID assignments in HostLookup/Reply constructors
2014-01-27 16:38:00 +00:00
zzz
ba96f72899 help tweak 2014-01-27 16:37:39 +00:00
5d322245d8 Ticket #1183 - move message serialization later in the SSU pipeline 2014-01-27 14:47:58 +00:00
zzz
6b16907e40 * i2ptunnel HTTP Proxy: Fix default enable for outproxy plugin 2014-01-27 13:32:24 +00:00
zzz
0c326f989e Remove outproxy hook vestiges in context, history for prop, -3 2014-01-25 18:23:46 +00:00
zzz
e0a499dd0f propagate from branch 'i2p.i2p.zzz.outproxy' (head 02da481346e0bf35b289f00b32f50871da202afb)
to branch 'i2p.i2p' (head eb2820957208e17c76e8c10a2c36e59e0da61895)
2014-01-25 18:16:38 +00:00
zzz
0f862124fe - Tweak display name of HTTP client tunnel
- Show outproxy plugin status on i2ptunnel index page
2014-01-25 17:56:35 +00:00
zzz
d00be4ceee update error pages for HTTPS 2014-01-25 15:52:04 +00:00
zzz
ec8354860e * NetDB: Fix NPE after client shutdown (ticket #1174) 2014-01-25 15:08:56 +00:00
zzz
f9144f2fbf * StatisticsManager: Lower frequency for publishing stats again 2014-01-25 15:07:57 +00:00
zzz
5d2ff5e648 * Installer: Update links
* Update release checklist
2014-01-25 15:06:51 +00:00
zzz
ce475d2cd6 sort imports 2014-01-25 15:05:43 +00:00
zzz
72bd1fe91b * i2psnark: Lower threshold for auto-stop
* Update: All updates via torrent
2014-01-25 14:58:34 +00:00
747d833392 Fix 2014-01-25 00:59:42 +00:00
3427464de6 Move OutNetMessage buffer preparation to the Writer threads
(Ticket #1184)
 Up version to -1
2014-01-25 00:46:30 +00:00
zzz
9ca625a64e - Fix up the header processing for SSL thru HTTP proxy
- Fix the CONNECT line output
- Set use-plugin default to true
- Log tweaks
- rename a variable
2014-01-24 16:52:29 +00:00
9e87fd9b13 Sync fix for NTCPConnection._currentOutbound 2014-01-24 15:35:55 +00:00
zzz
5b6ed48ec0 0.9.10 2014-01-22 01:30:33 +00:00
zzz
96f6865835 bump for review 2014-01-21 00:51:08 +00:00
fa50f9f246 * Adding http(s) uk.reseed.i2p2.no (Meeh)
* Adding http i2p-netdb.innovatio.no (Sindu)
2014-01-21 00:00:27 +00:00
538b4b10d7 Translation updates from Transifex 2014-01-20 17:00:24 +00:00
bdb3e26d07 geoip (v4 and v6) updates 2014-01-20 16:17:32 +00:00
ec87600e80 Chinese language update 2014-01-20 16:13:31 +00:00
zzz
0624f46e67 * Console: Change www.i2p2.i2p links to i2p-projekt.i2p
* Reseed: Remove netdb.i2p2.de
2014-01-20 15:52:14 +00:00
ece1198dd4 Fixed NPE 2014-01-15 02:31:07 +00:00
zzz
8bbab31872 * NetDB: Fix handling of DSM down client tunnels 2014-01-12 19:21:52 +00:00
zzz
8c6922ac5f * NetDB: Fix handling of DSRM down client tunnels
ISJ log tweak
2014-01-12 15:24:13 +00:00
zzz
6b67f399f6 * NetDB:
- Reduce min part tunnels for ffs to 35
   - Use client tunnels for LS lookups from OCMOSJ (ticket #1166)
2014-01-12 01:10:38 +00:00
a9598633b3 Missing file from BOB logging fix 2014-01-11 17:14:09 +00:00
1fb2672b67 BOB: Pass through I2CP host/port (ticket #827) 2014-01-11 04:30:59 +00:00
4308ce6347 Fixed logging for BOB-one.jar 2014-01-11 01:56:47 +00:00
32b095efbd BOB: Implement ClientApp interface (ticket #347) 2014-01-10 21:11:55 +00:00
zzz
eb4bdfcefb add i2pjump 2014-01-10 16:31:39 +00:00
fc6554cabc typo fix (a03adeb0, part 2) 2014-01-10 11:44:37 +00:00
058590f69b Fixed language names in routerconsole 2014-01-10 06:15:17 +00:00
zzz
576984badc I2CP:
- Add SessionID to HostLookup/Reply messages, for future
    use when we have multiple sessions
  - New SessionID constructor w/ value
  - Throw IAE on invalid SessionID values
  - Bump all comments from 0.9.10 to 0.9.11
2014-01-10 02:24:15 +00:00
9825fcf97b update of en source files, bump build 2014-01-09 19:33:54 +00:00
1ed96d72b2 i2prouter translation updates 2014-01-09 19:24:45 +00:00
a29935abb3 New Brazilian Portuguese translation
- New translation from Transifex
- Update langbox widths
2014-01-09 19:24:11 +00:00
e92a5da5a5 tx: update hostname in config, add pt_BR 2014-01-09 19:21:38 +00:00
f08e0299ef Updated translations from Transifex 2014-01-09 19:17:38 +00:00
zzz
9757435b09 NewsFetcher: Delay news fetch on new installs (ticket #1153) 2014-01-09 14:03:49 +00:00
zzz
80fadb4580 Kad: Fix NPE when removing yourself 2014-01-09 12:27:18 +00:00
8658c23974 susimail: Fixed pagination with zero entries (ticket #1168) 2014-01-09 04:31:30 +00:00
0264cc9030 susimail: UTF-8 support from wockenfuss (ticket #508) 2014-01-09 03:34:45 +00:00
bd5b6b32b5 Updated history 2014-01-09 03:33:57 +00:00
dc0a1281bf Migrated overlap fix from Fux (ticket #773) 2014-01-09 03:10:50 +00:00
zzz
c20c697126 RouterAppManager: Allow registration of untracked ClientApps,
required for orchid plugin
2014-01-08 15:17:09 +00:00
zzz
44e7110c9a Fix StandardServerSocket.isClosed() and close()
thx cacapo
ref: http://zzz.i2p/topics/1547
2014-01-08 00:32:51 +00:00
zzz
c860c49c6b Add jisko.i2p to home page
Icon source: http://jisko.i2p/wiki/File:Jisko_console_icon.png
Icon license: Copyleft: This work of art is free; you can redistribute it and/or modify it.
ref: http://zzz.i2p/topics/1539
2014-01-08 00:30:28 +00:00
zzz
b16e66d39a Add GUI outproxy plugin enable setting for all tunnel proxies
(only implemented in HTTP)
More SSL support in I2PTunnelHTTPClient
  - Add separate config for SSL outproxy
2014-01-06 16:56:00 +00:00
3b06f0b83c Change the test url to www.i2p-projekt.i2p 2014-01-06 16:06:20 +00:00
zzz
0bc6c23ac9 Remove outproxy hook in context, use ClientAppManager:
- Add clientAppManager() to I2PAppContext so it can be used there
  - Add routerAppManager() to RouterContext for convenience inside router

Start of SSL support in I2PTunnelHTTPClient
  - Add initialSocketData support back to I2PTunnelOutproxyRunner
  - Works for orchid (and in-net?)
  - TODO Doesn't work for in-net proxy
  - Need separate config for SSL proxy
2014-01-06 13:57:45 +00:00
zzz
17e63b054c add sigtype to i2ptunnel client gui too 2014-01-05 16:38:39 +00:00
zzz
0fae0640d6 missing file 2014-01-05 02:55:46 +00:00
zzz
d054e12952 New interface and context hooks for in-jvm outproxy
Support in HTTP client proxy
All preliminary, maybe better to use ClientAppManager?
2014-01-05 00:52:00 +00:00
dc60c2b478 * Console: Change /configclients 'advanced warning' to include 'toopie, no red 2014-01-04 23:40:41 +00:00
zzz
b59aa1fb69 move I2PSocketOptionsImpl from mini to impl 2014-01-04 22:10:10 +00:00
54a21bfa7b Fix compilation of non-JUnit tests (disabled by default) 2014-01-04 19:57:47 +00:00
50f55877f8 make public method protected 2014-01-04 19:56:55 +00:00
f9ff262318 Fix junit tests for streaming, thank you zab (and thank you zzz) for helping out. 2014-01-04 19:45:52 +00:00
91ba76f2a6 merge of '1fd43bf251a91d33bb1ea9b06f2b35a40be3b9c9'
and '766a92b57cdf82d3b1d1e3a71ef2a3109e883add'
2014-01-04 17:41:15 +00:00
ec97bc2f81 Stab at fixing streaming tests.
Add javadoc package.html
Fix import order
2014-01-04 17:39:32 +00:00
zzz
fba209ca7d restore method used by bote 2014-01-04 17:32:38 +00:00
zzz
b91b242a1a bump 2014-01-04 16:54:12 +00:00
zzz
38186c8f75 TunnelPoolSettings:
Split out the defaults for expl/client IB/OB.
  Client default now 3 hops.
  Expl default still 2 hops, with OB Expl + 0-1,
  en route to 3+0.
2014-01-04 16:48:45 +00:00
zzz
1b3aefbbce PeerManager: Remove small same-country bonus
This was done back when we were desperate for
 build improvement but it's bad for anonymity
 and probably a little slow also
2014-01-04 16:43:54 +00:00
zzz
c03511b971 exception causes 2014-01-04 16:40:06 +00:00
zzz
78e7599a8a better wording 2014-01-04 16:39:10 +00:00
zzz
dc871cf1eb XSS 2014-01-04 16:38:05 +00:00
e98b9d0af5 bump for testing 2014-01-04 14:27:51 +00:00
2a09d5baa6 * Streaming: Move streaming to new package (ticket #1135) 2014-01-04 14:09:33 +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
1feb317f8b typo 2013-12-25 09:39:19 +00:00
09668453d0 * Console: Add 'advanced warning' to /confgiclients
* SOCKS5Server: Remove redundant, commented out line from my previous findbugs
2013-12-25 09:37:46 +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
zzz
5219791673 I2CP:
- Add support for b64 conversion in destLookup()
  - Catch invalid message length sooner
I2Ping:
  - Extend I2PTunnelClientBase so non-shared-client,
    I2CP options, and other features will work
  - Fixes for fields and threading
Streaming:
  - Send LS with ping (broken since 0.9.2)
  - Set the NO_ACK flag on pings and pongs
2013-12-21 18:10:59 +00:00
zzz
bf485d8bce history update and date fixes 2013-12-21 18:01:04 +00:00
zzz
cc97a19d3c I2CP:
- Add support for hostname lookups over I2CP with new
    HostLookup and HostReply messages.
  - Move username / password from CreateSession
    to GetDate for early authentication;
    this is an incompatible chage.
    Outside router context with authentication enabled,
    new clients will not work with old routers.
    Early authentication is not yet enforced, enable with
    i2cp.strictAuth=true. Will change default to true in a later release.
  - Block all actions before authentication.
  - Better disconnect messages to clients for diagnostics
  - Improve lookup command, add auth command in i2ptunnel CLI for testing
  - Don't start ClientWriterRunner thread in constructor
  - Don't flush in ClientWriterRunner unless necessary
  - Send GetDate even in SimpleSession outside of RouterContext
  - Improve SetDate wait logic to reduce locks and break out when
    Disconnect received
  - Add Disconnect handler to SimpleSession
  - I2Ping cleanups
  - Javadocs
2013-12-21 00:21:48 +00:00
zzz
38c02b44b9 Streaming: final, volatile, logging 2013-12-19 12:24:51 +00:00
zzz
04a596899a NetDB: Fixes for ExpireRoutersJob
- Don't expire if too few routers
  - Don't expire if net is disconnected
  - Don't run in VMCommSystem
2013-12-19 12:23:29 +00:00
zzz
ee1ed1bb82 Nice message during graceful shutdown
May need to tweak the wording
2013-12-19 12:20:32 +00:00
zzz
2b39d28e99 fix comment 2013-12-19 12:16:39 +00:00
zzz
8cb503d8bb EepGet: Allow override of the User-Agent
i2psnark: Set User-Agent
2013-12-15 15:16:54 +00:00
zzz
efff25a87c NetDB:
- Just before midnight, flood to new location too so lookups
   don't fail after keyspace rotation (ticket #510)
 - Refactor RoutingKeyGenerator and UpdateRoutingKeyModifierJob
   in support of the above
 - Display next key on LS debug page
2013-12-14 14:38:00 +00:00
zzz
6e2583ad92 NetDB:
- Increase new kad size to K=24, B=4
 - Fix router count by counting in the data store, not the kbuckets
 - Randomize the order we load router infos at startup so we
   don't bias the kbuckets
2013-12-13 17:50:39 +00:00
zzz
af84bcf945 i2ptunnel:
- Show destination for persistent client key only if available;
   show b32 for the key as well
2013-12-13 17:45:35 +00:00
zzz
3dc429415b use advanced setting to show LS debug 2013-12-13 17:31:13 +00:00
zzz
ec9dd25631 sort i2ptunnel CLI help for sanity 2013-12-13 17:30:18 +00:00
zzz
2bda87d5a7 comment out main 2013-12-13 17:29:43 +00:00
a7a816e0a7 wrapper: 3.5.23 updates for win64 2013-12-10 23:23:06 +00:00
zzz
3d9d722cee history for props, -1 2013-12-10 11:39:45 +00:00
zzz
289a8e7b40 merge of '3f93d2c09c89b5c68487c33fd700ef7c2feeeb61'
and 'b2c58f8462ab5c08682b711436c387b421bdd0c2'
2013-12-10 11:11:08 +00:00
7d3aa33c25 Fixed type argument problem causing infinite recursion 2013-12-10 05:55:19 +00:00
zzz
0db1314595 propagate from branch 'i2p.i2p.zzz.netdbkad' (head bc7310e940f01e68bd6be0ed0681eb624dada332)
to branch 'i2p.i2p' (head 98569f30891693e6888913f50b88d1f37969fe45)
2013-12-10 02:31:08 +00:00
zzz
68641626aa propagate from branch 'i2p.i2p.zzz.test2' (head ec8e362ce8b93280b518c599a3cc075b89085d2b)
to branch 'i2p.i2p' (head c9b1eef91f61f4482ad11c4f2b2d01be67a17ad2)
2013-12-10 02:26:32 +00:00
zzz
5b9fb403c9 Jetty 7.6.14.v20131031 2013-12-10 02:26:00 +00:00
a4114b96fd Deprecation warning fixes 2013-12-09 20:45:11 +00:00
de184ed139 propagate from branch 'i2p.i2p.str4d.cleanup' (head 736423cc308e964bab55068e625f8a1852932ec5)
to branch 'i2p.i2p' (head 0ac335d5dc4ccaeb113af4fb5c0e993a6f42fdbe)
2013-12-09 19:51:39 +00:00
zzz
04c342ec6a PrivateKeyFile: Fix ISE (ticket #1145)
broken in 0.9.9
2013-12-09 16:38:00 +00:00
zzz
27ce28027d i2ptunnel: Disable streaming pings for clients (ticket #1142)
i2psnark: Disable streaming pings (ticket #1142)
2013-12-09 16:11:53 +00:00
zzz
3acfdbe8f7 i2ptunnel IRC client: Do not filter server PING or client PONG (ticket #1141) 2013-12-06 15:26:12 +00:00
zzz
d9fed57c89 more finals 2013-12-05 16:25:16 +00:00
zzz
46e7e9be82 finals 2013-12-05 16:21:36 +00:00
zzz
d87d4eb232 I2CP: Disconnect client on attempt to publish invalid leaseset 2013-12-05 16:14:51 +00:00
zzz
88ea451f81 propagate from branch 'i2p.i2p' (head 2634e424f06e58231c47f1ec318e9ae21c94a8b3)
to branch 'i2p.i2p.zzz.test2' (head 68ca880caf69a06c0fd01fc70675df795aef1de2)
2013-12-05 16:07:32 +00:00
zzz
7b0b07933f finals 2013-12-04 14:21:03 +00:00
c180292358 Style fix: leave brackets around for() one-liners 2013-12-04 03:51:02 +00:00
a3fa48dcbe Removed dead code 2013-12-04 03:50:26 +00:00
1112fc8544 Yes it's deprecated, it should still use proper generics 2013-11-30 12:52:50 +00:00
efe3bd2c05 Use for each when Iterator not needed 2013-11-28 11:56:54 +00:00
f112baac48 propagate from branch 'i2p.i2p' (head cbfe85d22c4d0b05c901db3fa751b57889d9b2d6)
to branch 'i2p.i2p.str4d.cleanup' (head 94fe1764f50b459da18222434034ad46d604c7a1)
2013-11-28 11:12:41 +00:00
ed2feb3ff7 Core: findbugs 2013-11-27 23:22:49 +00:00
a17b1b99c0 Moved StatLogSplitter to i2p.scripts/java-utils 2013-11-27 22:48:46 +00:00
27bc32f2f3 Core: findbugs exclusions (for use in Eclipse or Jenkins) 2013-11-27 11:17:17 +00:00
b535054e13 generics 2013-11-27 11:14:16 +00:00
97a9a6090a Use copy constructor instead of clone() 2013-11-27 01:55:29 +00:00
8b8e2c88c1 type argument 2013-11-27 01:55:14 +00:00
9d7ee30c15 More cleanups 2013-11-27 01:42:34 +00:00
4ee144533a Another warning suppression to be removed at Java6 2013-11-27 01:25:20 +00:00
0f2a983bb7 i2psnark: type arguments, warning suppression (to be removed at Java6) 2013-11-27 01:11:48 +00:00
8fd2f9090e propagate from branch 'i2p.i2p' (head 7903431c2a396fceb1e0428b2be3dde03ba24635)
to branch 'i2p.i2p.str4d.cleanup' (head cfbae7380c3fa106f578d5de399701cfb72d5747)
2013-11-27 00:57:19 +00:00
8770d7eae0 i2psnark: Comparable type arguments 2013-11-26 21:09:36 +00:00
c59ef24acf i2psnark: more type arguments 2013-11-26 20:16:45 +00:00
85aa2fb083 i2psnark: MetaInfo type arguments (thx zzz) 2013-11-26 19:54:53 +00:00
zzz
434b9fa0d1 GeoIP: Thread the periodic lookup so it doesn't clog the timer queue 2013-11-26 16:28:24 +00:00
zzz
56116ad8c2 PeerManager: Thread the periodic reorg so it doesn't clog the timer queue 2013-11-26 15:51:00 +00:00
9804e5b7d9 i2psnark: more type arguments 2013-11-26 01:34:08 +00:00
2f33186e58 i2psnark: type arguments, unused imports, for each 2013-11-26 00:20:03 +00:00
0347c56c96 Deprecation fixes 2013-11-25 23:29:48 +00:00
e77409e57a Close resources 2013-11-25 23:14:09 +00:00
615ba94559 propagate from branch 'i2p.i2p' (head d12a1fd746cd9314de5de5e1000c02cf4c59100d)
to branch 'i2p.i2p.str4d.cleanup' (head e20c143dd50a9c802999068a95e12198b07e4c36)
2013-11-25 22:36:27 +00:00
zzz
76925fa3bd console: add debug link if advanced config is set 2013-11-25 15:59:34 +00:00
c6f2d4948b Class generics 2013-11-24 23:41:06 +00:00
zzz
8699c82614 Kad unit tests:
- Port KBSTest from i2p.zzz.kademlia branch
  - Fix RandomTrimmer so it always returns true, so it may be used
    as the trimmer in the unit tests
2013-11-24 23:39:47 +00:00
zzz
1d7eedd463 Kad unit tests:
- Move KBucketSetTest to new directory
  - Fix testSelf() as new implementation will never include myself
  - Delete KBucketImplTest, not applicable/useful now
  Next todo: port KBSTest from i2p.zzz.kademlia branch
2013-11-24 21:58:42 +00:00
zzz
796a231f54 NetDB:
- Move net.i2p.kademlia package from i2psnark to core, and convert
    netdb to use it.
  - Delete old implementation in netdb
  - Fixups in netdb for generics
  - Add debug output to /debug

  This is the next step in the development plan, in which we previously:
    - Copied the code from netdb to the i2p.zzz.kademlia branch, fixed it,
      and made it generic for hash size (June 2012);
    - Moved it from the i2p.zzz.kademlia branch to the i2p.i2p.zzz.dhtsnark
      branch, and implemented KRPC with it (June 2012);
    - Propped it from i2p.i2p.zzz.dhtsnark to trunk for 0.9.2 (July-Sept. 2012);
    - Proved it out in 0.9.2 - 0.9.9 (Oct. 2012 - Nov. 2013)

  The plan was to maintain the KBucketSet public methods throughout the development
  so we could drop the new version back into netdb, so here we drop it in.

  Setting of K=16, B=3 is just an initial guess, to be reviewed.
  This moves about 18 KB from i2psnark.jar to i2p.jar and removes about 12 KB from router.jar.
  Unit test fixup: todo.
2013-11-24 16:38:51 +00:00
e1fcad686c propagate from branch 'i2p.i2p' (head 72c44737466e553fec443a79fffa7636894fe383)
to branch 'i2p.i2p.str4d.cleanup' (head 5a2425d7523b732840e55039f88cea5699f1aa83)
2013-11-24 01:20:11 +00:00
zzz
e498e2113f Snark: make a set of the default trackers so the config array
can be private and the lookup for the form is more efficient.
2013-11-23 14:45:38 +00:00
zzz
f42ac71fe0 UDP PeerState findbugs volatile/atomic/synch 2013-11-23 14:37:33 +00:00
zzz
74f2fd06cc Deprecate Signature.FAKE_SIGNATURE 2013-11-23 14:33:58 +00:00
zzz
143a0dfc47 Transport: Reduce target connections from 60% to 45% of limit.
This will improve network capacity.
   Apparent problems with lower limits were actually due to
   unrelated bugs that were fixed by 0.9.8.1-22.
   This can go lower still; I've been testing 33% without issues.
2013-11-23 14:29:23 +00:00
zzz
844bae18ba fixup after prop 2013-11-22 22:19:06 +00:00
zzz
9e4d5c0e61 propagate from branch 'i2p.i2p' (head da40262a8b7685de3877c1d7d6d16a155caa9e7c)
to branch 'i2p.i2p.zzz.test2' (head 6263bb149b8301059d0471bcc1d47caeca660f4e)
2013-11-22 17:29:45 +00:00
zzz
9b8d3eb688 Startup:
Wait a while and recheck if a recent ping file is there,
    so that a crashed router doesn't prevent a restart (ticket #633)
2013-11-22 17:27:49 +00:00
8478bfbddc BOB: for each 2013-11-22 11:46:39 +00:00
d6bb5f6a4d i2ptunnel: type arguments 2013-11-22 11:41:12 +00:00
e9fec9354b ministreaming: type arguments 2013-11-22 11:37:44 +00:00
f9f0e6d0a2 SAM: for each 2013-11-22 11:36:26 +00:00
3bc0be1cbe susidns: type arguments, for each 2013-11-22 11:25:22 +00:00
8d826cee93 susimail:
- Generics in Folder
- for each
- type arguments
2013-11-22 11:18:41 +00:00
e853d9a40b Router: more type arguments, for each 2013-11-22 10:16:34 +00:00
15bf94b479 Core: type arguments 2013-11-22 09:34:42 +00:00
6314f33d8f desktopgui: unused imports 2013-11-22 04:25:48 +00:00
5fa0376f58 SAM: type arguments, unused imports 2013-11-22 04:22:14 +00:00
552dd189a5 streaming: type arguments, unused imports 2013-11-22 04:18:26 +00:00
zzz
dbe0a8240e Translations:
- Add support for country variants (ticket #1133)
  - Refactor data in ConfigUIHelper
Config files: Allow empty values
2013-11-18 23:18:46 +00:00
1090 changed files with 95818 additions and 71113 deletions

48
.gitignore vendored Normal file
View File

@ -0,0 +1,48 @@
# 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
.pc/
# 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,13 +33,14 @@ web-out.xml
/build
/classes
/dist
/mo
^installer/resources/locale/mo
/tmp
^apps/jetty/jettylib
# Debian-related
^debian/copyright
^debian/changelog
^.pc/
# Build property overrides
override.properties

View File

@ -14,7 +14,9 @@ trans.nb = apps/i2ptunnel/locale/messages_nb.po
trans.nl = apps/i2ptunnel/locale/messages_nl.po
trans.pl = apps/i2ptunnel/locale/messages_pl.po
trans.pt = apps/i2ptunnel/locale/messages_pt.po
trans.pt_BR = apps/i2ptunnel/locale/messages_pt_BR.po
trans.ru_RU = apps/i2ptunnel/locale/messages_ru.po
trans.sk = apps/i2ptunnel/locale/messages_sk.po
trans.sv_SE = apps/i2ptunnel/locale/messages_sv.po
trans.uk_UA = apps/i2ptunnel/locale/messages_uk.po
trans.vi = apps/i2ptunnel/locale/messages_vi.po
@ -34,6 +36,7 @@ trans.nb = apps/i2ptunnel/locale-proxy/messages_nb.po
trans.nl = apps/i2ptunnel/locale-proxy/messages_nl.po
trans.pl = apps/i2ptunnel/locale-proxy/messages_pl.po
trans.pt = apps/i2ptunnel/locale-proxy/messages_pt.po
trans.pt_BR = apps/i2ptunnel/locale-proxy/messages_pt_BR.po
trans.ro = apps/i2ptunnel/locale-proxy/messages_ro.po
trans.ru_RU = apps/i2ptunnel/locale-proxy/messages_ru.po
trans.sv_SE = apps/i2ptunnel/locale-proxy/messages_sv.po
@ -60,6 +63,7 @@ trans.nb = apps/routerconsole/locale/messages_nb.po
trans.nl = apps/routerconsole/locale/messages_nl.po
trans.pl = apps/routerconsole/locale/messages_pl.po
trans.pt = apps/routerconsole/locale/messages_pt.po
trans.pt_BR = apps/routerconsole/locale/messages_pt_BR.po
trans.ro = apps/routerconsole/locale/messages_ro.po
trans.ru_RU = apps/routerconsole/locale/messages_ru.po
trans.sv_SE = apps/routerconsole/locale/messages_sv.po
@ -75,13 +79,16 @@ trans.ar = apps/routerconsole/locale-news/messages_ar.po
trans.de = apps/routerconsole/locale-news/messages_de.po
trans.es = apps/routerconsole/locale-news/messages_es.po
trans.fr = apps/routerconsole/locale-news/messages_fr.po
trans.he = apps/routerconsole/locale-news/messages_he.po
trans.ja = apps/routerconsole/locale-news/messages_ja.po
trans.it = apps/routerconsole/locale-news/messages_it.po
trans.nl = apps/routerconsole/locale-news/messages_nl.po
trans.pl = apps/routerconsole/locale-news/messages_pl.po
trans.pt = apps/routerconsole/locale-news/messages_pt.po
trans.pt_BR = apps/routerconsole/locale-news/messages_pt_BR.po
trans.ro = apps/routerconsole/locale-news/messages_ro.po
trans.ru_RU = apps/routerconsole/locale-news/messages_ru.po
trans.sk = apps/routerconsole/locale-news/messages_sk.po
trans.sv_SE = apps/routerconsole/locale-news/messages_sv.po
trans.tr_TR = apps/routerconsole/locale-news/messages_tr.po
trans.zh_CN = apps/routerconsole/locale-news/messages_zh.po
@ -104,8 +111,10 @@ trans.nb = apps/routerconsole/locale-countries/messages_nb.po
trans.nl = apps/routerconsole/locale-countries/messages_nl.po
trans.pl = apps/routerconsole/locale-countries/messages_pl.po
trans.pt = apps/routerconsole/locale-countries/messages_pt.po
trans.pt_BR = apps/routerconsole/locale-countries/messages_pt_BR.po
trans.ro = apps/routerconsole/locale-countries/messages_ro.po
trans.ru_RU = apps/routerconsole/locale-countries/messages_ru.po
trans.sk = apps/routerconsole/locale-countries/messages_sk.po
trans.sv_SE = apps/routerconsole/locale-countries/messages_sv.po
trans.tr_TR = apps/routerconsole/locale-countries/messages_tr.po
trans.vi = apps/routerconsole/locale-countries/messages_vi.po
@ -127,6 +136,7 @@ trans.pl = apps/i2psnark/locale/messages_pl.po
trans.pt = apps/i2psnark/locale/messages_pt.po
trans.ro = apps/i2psnark/locale/messages_ro.po
trans.ru_RU = apps/i2psnark/locale/messages_ru.po
trans.sk = apps/i2psnark/locale/messages_sk.po
trans.sv_SE = apps/i2psnark/locale/messages_sv.po
trans.vi = apps/i2psnark/locale/messages_vi.po
trans.zh_CN = apps/i2psnark/locale/messages_zh.po
@ -147,6 +157,7 @@ trans.ja = apps/susidns/locale/messages_ja.po
trans.nl = apps/susidns/locale/messages_nl.po
trans.pl = apps/susidns/locale/messages_pl.po
trans.pt = apps/susidns/locale/messages_pt.po
trans.pt_BR = apps/susidns/locale/messages_pt_BR.po
trans.ro = apps/susidns/locale/messages_ro.po
trans.ru_RU = apps/susidns/locale/messages_ru.po
trans.sv_SE = apps/susidns/locale/messages_sv.po
@ -169,8 +180,10 @@ trans.it = apps/desktopgui/locale/messages_it.po
trans.ja = apps/desktopgui/locale/messages_ja.po
trans.nl = apps/desktopgui/locale/messages_nl.po
trans.pl = apps/desktopgui/locale/messages_pl.po
trans.pt_BR = apps/desktopgui/locale/messages_pt_BR.po
trans.ro = apps/desktopgui/locale/messages_ro.po
trans.ru_RU = apps/desktopgui/locale/messages_ru.po
trans.sk = apps/desktopgui/locale/messages_sk.po
trans.sv_SE = apps/desktopgui/locale/messages_sv.po
trans.uk_UA = apps/desktopgui/locale/messages_uk.po
trans.tr_TR = apps/desktopgui/locale/messages_tr.po
@ -186,11 +199,13 @@ trans.es = apps/susimail/locale/messages_es.po
trans.fr = apps/susimail/locale/messages_fr.po
trans.hu = apps/susimail/locale/messages_hu.po
trans.it = apps/susimail/locale/messages_it.po
trans.ja = apps/susimail/locale/messages_ja.po
trans.nl = apps/susimail/locale/messages_nl.po
trans.ru_RU = apps/susimail/locale/messages_ru.po
trans.sv_SE = apps/susimail/locale/messages_sv.po
trans.pl = apps/susimail/locale/messages_pl.po
trans.pt = apps/susimail/locale/messages_pt.po
trans.pt_BR = apps/susimail/locale/messages_pt_BR.po
trans.ro = apps/susimail/locale/messages_ro.po
trans.uk_UA = apps/susimail/locale/messages_uk.po
trans.vi = apps/susimail/locale/messages_vi.po
@ -206,10 +221,13 @@ trans.es = debian/po/es.po
trans.fr = debian/po/fr.po
trans.it = debian/po/it.po
trans.hu = debian/po/hu.po
trans.ja = debian/po/ja.po
trans.ko = debian/po/ko.po
trans.pl = debian/po/pl.po
trans.pt = debian/po/pt.po
trans.ro = debian/po/ro.po
trans.ru_RU = debian/po/ru.po
trans.sk = debian/po/sk.po
trans.sv_SE = debian/po/sv.po
trans.uk_UA = debian/po/uk.po
trans.tr_TR = debian/po/tr.po
@ -222,13 +240,41 @@ trans.de = installer/resources/locale/po/messages_de.po
trans.es = installer/resources/locale/po/messages_es.po
trans.fr = installer/resources/locale/po/messages_fr.po
trans.it = installer/resources/locale/po/messages_it.po
trans.pl = installer/resources/locale/po/messages_pl.po
trans.ja = installer/resources/locale/po/messages_ja.po
trans.pt = installer/resources/locale/po/messages_pt.po
trans.pt_BR = installer/resources/locale/po/messages_pt_BR.po
trans.ro = installer/resources/locale/po/messages_ro.po
trans.sv_SE = installer/resources/locale/po/messages_sv.po
trans.ru_RU = installer/resources/locale/po/messages_ru.po
trans.sk = installer/resources/locale/po/messages_sk.po
trans.sv_SE = installer/resources/locale/po/messages_sv.po
trans.tr_TR = installer/resources/locale/po/messages_tr.po
trans.zh_CN = installer/resources/locale/po/messages_zh.po
[main]
host = http://www.transifex.net
[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.sk = core/java/src/gnu/getopt/MessagesBundle_sk.properties
trans.zh_CN = core/java/src/gnu/getopt/MessagesBundle_zh.properties
[I2P.streaming]
source_file = apps/ministreaming/locale/messages_en.po
source_lang = en
[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.13.v20130916:
Jetty 8.1.15.v20140411:
See licenses/ABOUT-Jetty.html
See licenses/NOTICE-Jetty.html
See licenses/LICENSE-Apache2.0.txt
@ -243,8 +248,8 @@ Applications:
Bundles systray4j-2.4.1:
See licenses/LICENSE-LGPLv2.1.txt
Tomcat 6.0.37:
Copyright 1999-2013 The Apache Software Foundation
Tomcat 6.0.41:
Copyright 1999-2014 The Apache Software Foundation
See licenses/LICENSE-Apache2.0.txt
See licenses/NOTICE-Tomcat.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

@ -1,30 +1,70 @@
ou will need atleast monotone > = 0.41 to get the most recent build source
and connect it to an already running i2p router.
Getting the sources
===================
OR:
Monotone
--------
You may download the actual "stable" source from
http://code.google.com/p/i2p/downloads/list
The bleeding-edge source code is available both within and outside of I2P. The
I2P project uses Monotone to maintain the codebase.
You will need to follwing tools to build the i2p and i2p-base packages:
Information on retrieving the source with monotone is available within I2P at
http://i2p-projekt.i2p/monotone and from the internet at https://geti2p.net/monotone.
bash >= 3.1.017
requiredbuilder >= 0.16.3 ( http://www.stabellini.net/requiredbuilder.html )
jre >= 6u11
jdk >= 6u11
apache-ant >= 1.7.1
perl >= 5.10.0
python >= 2.5.2
Monotone 1.0 Slackbuilds are available at http://slackbuilds.org/.
Reccomended:
monotone >= 0.41 ( http://pkgs.dr.ea.ms )
Git
---
See also:
Git is also an option to retrieve the I2P source code. That said, the I2P
Monotone servers are *the* authoritative source.
i2p/readme.txt
Public Git repositories hosting the I2P source and managed by I2P project team members include
AND
- https://github.com/i2p/i2p.i2p
- http://git.repo.i2p/w/i2p.i2p.git (mirrored from Github)
- http://sourceforge.net/p/i2p/code/
i2p-base/readme.txt
for information and handy tips.
Tarball
-------
The latest stable release is always available from the I2P homepage at
https://geti2p.net/get/.
This SlackBuild
===============
Requirements
-------------
The following are needed to build the i2p package:
* jre >= 6
* jdk >= 6
* gettext
* apache-ant >= 1.7.1
If you don't care about bundling the translations, the gettext requirement can
be avoided by adding -Drequire.gettext=false to the ant lines in
i2p/i2p.SlackBuild
A JRE >= v6 is the only requirement to run I2P.
Building
--------
As the root user, run either $I2PSRC/Slackware/i2p/i2p.SlackBuild or `ant slackpkg` to create a package
in $I2PSRC/Slackware/i2p which can be installed using the Slackware packaging tools.
See also
========
Please also take a look at
* i2p/README
* eepget(1)
* i2prouter(1)
* http://i2p-projekt.i2p / https://geti2p.net
for additional information and tips.

View File

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<project basedir="." default="slackpkg">
<target name="slackpkg">
<echo message="Building Slackware package." />
<exec executable="./i2p-base.SlackBuild">
</exec>
</target>
</project>

View File

@ -1,157 +0,0 @@
#!/bin/sh
#
#
# Now in the future we only need to look for '#I2P' and '#/I2P'
# for modifications to rc.local and rc.local_shutdown.
# I was a moron for not doing it this way in the first place :-) -- Sponge
#
#
touch /etc/rc.d/rc.local
touch /etc/rc.d/rc.local_shutdown
echo
echo -n "Check 1: /etc/rc.d/rc.local "
I2PRCA=`grep -c /etc/rc.d/rc.local -e '/etc/rc.d/rc.i2p'`
if [ $I2PRCA -eq 0 ] ; then
echo '#I2P' >> /etc/rc.d/rc.local
echo '( cd /tmp ; rm -Rf i2p-*.tmp )' >> /etc/rc.d/rc.local
echo "if [ -x /etc/rc.d/rc.i2p ] ; then" >> /etc/rc.d/rc.local
echo " sh /etc/rc.d/rc.i2p start" >> /etc/rc.d/rc.local
echo "fi" >> /etc/rc.d/rc.local
echo '#/I2P' >> /etc/rc.d/rc.local
echo "modified."
else
echo -n "looks OK so far,"
# Fix old installs, or where people have modified.
echo -n " Check 1A: "
I2PRCC=`grep -c /etc/rc.d/rc.local -e 'i2p-\*\.tmp'`
if [ $I2PRCC -eq 0 ] ; then
DATA=$(cat /etc/rc.d/rc.local | sed -re 's/if \[ -x \/etc\/rc\.d\/rc\.i2p \] ; then/#I2P\n\( cd \/tmp ; rm -Rf i2p-*.tmp \)\nif \[ -x \/etc\/rc.d\/rc.i2p \] ; then/')
echo "${DATA}" > /etc/rc.d/rc.local
echo -n "additional modifications applied,"
else
echo -n "looks OK so far,"
fi
echo -n " Check 1B: "
I2PRCE=`grep -c /etc/rc.d/rc.local -e 'i2p-\*\.tmp'`
if [ $I2PRCE -eq 0 ] ; then
DATATOP=$(cat /etc/rc.d/rc.local | sed -n '0,/i2p-\*\.tmp/p' | sed '$d' )
DATABOT=$(cat /etc/rc.d/rc.local | sed -n '/i2p-\*\.tmp/,$p' | sed -n '/^fi/,$p' | sed "1d")
echo "${DATATOP}" > /etc/rc.d/rc.local
echo '#I2P' >> /etc/rc.d/rc.local
echo '( cd /tmp ; rm -Rf i2p-*.tmp )' >> /etc/rc.d/rc.local
echo "if [ -x /etc/rc.d/rc.i2p ] ; then" >> /etc/rc.d/rc.local
echo " sh /etc/rc.d/rc.i2p start" >> /etc/rc.d/rc.local
echo "fi" >> /etc/rc.d/rc.local
echo '#/I2P' >> /etc/rc.d/rc.local
echo "${DATABOT}" >> /etc/rc.d/rc.local
echo -n "additional modifications applied,"
else
echo -n "looks ok so far,"
fi
echo -n " Check 1C: "
I2PRCF=`grep -c /etc/rc.d/rc.local -e '#/I2P'`
if [ $I2PRCF -eq 0 ] ; then
DATATOP=$(cat /etc/rc.d/rc.local | sed -n '0,/^#I2P/p' | sed '$d' )
DATABOT=$(cat /etc/rc.d/rc.local | sed -n '/^#I2P/,$p' | sed -n '/^fi/,$p' | sed "1d")
echo "${DATATOP}" > /etc/rc.d/rc.local
echo '#I2P' >> /etc/rc.d/rc.local
echo '( cd /tmp ; rm -Rf i2p-*.tmp )' >> /etc/rc.d/rc.local
echo "if [ -x /etc/rc.d/rc.i2p ] ; then" >> /etc/rc.d/rc.local
echo " sh /etc/rc.d/rc.i2p start" >> /etc/rc.d/rc.local
echo "fi" >> /etc/rc.d/rc.local
echo '#/I2P' >> /etc/rc.d/rc.local
echo "${DATABOT}" >> /etc/rc.d/rc.local
echo -n "additional modifications applied,"
else
echo -n "looks ok so far,"
fi
echo " Done."
fi
echo -n "Check 2: /etc/rc.d/rc.local_shutdown "
I2PRCB=`grep -c /etc/rc.d/rc.local_shutdown -e '/etc/rc.d/rc.i2p'`
if [ $I2PRCB -eq 0 ] ; then
echo "#I2P" >> /etc/rc.d/rc.local_shutdown
echo "if [ -x /etc/rc.d/rc.i2p ] ; then" >> /etc/rc.d/rc.local_shutdown
echo " sh /etc/rc.d/rc.i2p stop" >> /etc/rc.d/rc.local_shutdown
echo "fi" >> /etc/rc.d/rc.local_shutdown
echo "#/I2P" >> /etc/rc.d/rc.local_shutdown
echo "modified."
else
echo -n "looks OK so far,"
# Fix old installs
echo -n " Check 1A: "
I2PRCG=`grep -c /etc/rc.d/rc.local_shutdown -e '#I2P'`
if [ $I2PRCG -eq 0 ] ; then
DATATOP=$(cat /etc/rc.d/rc.local_shutdown | sed -n '0,/^if \[ -x \/etc\/rc\.d\/rc\.i2p \] ; then/p' | sed '$d' )
DATABOT=$(cat /etc/rc.d/rc.local_shutdown | sed -n '/^if \[ -x \/etc\/rc\.d\/rc\.i2p \] ; then/,$p' | sed -n '/^fi/,$p' | sed "1d")
echo "${DATATOP}" > /etc/rc.d/rc.local_shutdown
echo '#I2P' >> /etc/rc.d/rc.local_shutdown
echo "if [ -x /etc/rc.d/rc.i2p ] ; then" >> /etc/rc.d/rc.local_shutdown
echo " sh /etc/rc.d/rc.i2p stop" >> /etc/rc.d/rc.local_shutdown
echo "fi" >> /etc/rc.d/rc.local_shutdown
echo "#/I2P" >> /etc/rc.d/rc.local_shutdown
echo "${DATABOT}" >> /etc/rc.d/rc.local_shutdown
echo -n "additional modifications applied,"
else
echo -n "looks OK so far,"
fi
echo -n " Check 1B: "
I2PRCH=`grep -c /etc/rc.d/rc.local_shutdown -e '#/I2P'`
if [ $I2PRCH -eq 0 ] ; then
DATATOP=$(cat /etc/rc.d/rc.local_shutdown | sed -n '0,/^#I2P/p' | sed '$d' )
DATABOT=$(cat /etc/rc.d/rc.local_shutdown | sed -n '/^#I2P/,$p' | sed -n '/^fi/,$p' | sed "1d")
echo "${DATATOP}" > /etc/rc.d/rc.local_shutdown
echo '#I2P' >> /etc/rc.d/rc.local_shutdown
echo "if [ -x /etc/rc.d/rc.i2p ] ; then" >> /etc/rc.d/rc.local_shutdown
echo " sh /etc/rc.d/rc.i2p stop" >> /etc/rc.d/rc.local_shutdown
echo "fi" >> /etc/rc.d/rc.local_shutdown
echo "#/I2P" >> /etc/rc.d/rc.local_shutdown
echo "${DATABOT}" >> /etc/rc.d/rc.local_shutdown
echo -n "additional modifications applied,"
else
echo -n "looks OK so far,"
fi
echo " Done."
fi
if [ -f /etc/rc.d/rc.i2p ] ; then
if [ -x /etc/rc.d/rc.i2p ] ; then
chmod +x /etc/rc.d/rc.i2p.new
fi
# Hopefully get admin's attention.
echo -ne "\007" ; sleep 0.3
echo -ne "\007" ; sleep 0.3
echo -ne "\007" ; sleep 0.3
echo -ne "\007" ; sleep 0.3
echo -ne "\007" ; sleep 0.3
echo -ne "\007" ; sleep 0.3
echo -e "\007" ; sleep 0.3
echo "It apears that you already have /etc/rc.d/rc.i2p"
echo "You should replace it with /etc/rc.d/rc.i2p.new as soon as possible"
echo -ne "\007" ; sleep 0.3
echo -ne "\007" ; sleep 0.3
echo -ne "\007" ; sleep 0.3
echo -ne "\007" ; sleep 0.3
echo -ne "\007" ; sleep 0.3
echo -ne "\007" ; sleep 0.3
echo -e "\007" ; sleep 0.3
else
mv /etc/rc.d/rc.i2p.new /etc/rc.d/rc.i2p
echo
echo "Installation finished. The i2p start/stop script has been"
echo "installed in /etc/rc.d . You should chmod +x"
echo '/etc/rc.d/rc.i2p to start it on boot.'
echo
fi
exit

View File

@ -1,57 +0,0 @@
#!/bin/sh
#
# Heavily based on the Slackware 12.2 SlackBuild
# Slackware build script for I2P
#
# PLEASE READ THIS:
# How to start I2P:
# After installpkg command, doinst.sh will execute a post-installation script
# needed by I2P. After that you have to chmod +x /etc/rc.d/rc.i2p and start
# I2P service with /etc/rc.d/rc.i2p start.
#
# Now tell your browser to user this proxy: localhost on port 4444 and open
# this page: http://localhost:7657/index.jsp
#
# Here you can configure I2P, watch network status and navigate anonimously.
# It's suggested to subscribe to various dns host, like i2host.i2p
# For any additional information, visit i2host.i2p and forum.i2p
#
CWD=$(pwd)
TMP=/tmp
PKG=/$TMP/package-base-i2p
NAME=i2p-base
VERSION=0.0.4
BUILD=1sponge
ARCH=noarch
INSTALL_DIR=opt
# Less than slackware 13?
SLKPLT=$(cat /etc/slackware-version | sed -re "s/(Slackware )([0-9]*)(.*)/\2/")
if [ $SLKPLT -lt 13 ] ; then
EXT=tgz
else
EXT=txz
fi
rm -rf $PKG
mkdir -p $PKG
cd $PKG
chown -R root:root .
mkdir -p $PKG/etc/rc.d
mkdir -p $PKG/install
sed "s|directory|/$INSTALL_DIR/i2p/i2prouter|g" "$CWD/rc.i2p_def" > $PKG/etc/rc.d/rc.i2p.new
chmod 644 $PKG/etc/rc.d/rc.i2p.new
cat "$CWD/doinst.sh" > $PKG/install/doinst.sh
cat "$CWD/slack-desc" > $PKG/install/slack-desc
cd $PKG
#
# Not really that important to exec this
# as there aren't any deps we don't know.
#
# requiredbuilder -v -y -s $CWD $PKG
#
cat "$CWD/slack-required" > $PKG/install/slack-required
makepkg -l y -c n $CWD/${NAME}-$VERSION-$ARCH-$BUILD.$EXT

View File

@ -1,68 +0,0 @@
#!/bin/sh
# Start/stop i2p service.
i2p_start() {
# Check if router is up first!
/bin/su - -c "/bin/bash -l -c '( export PATH=\"$PATH:/usr/lib/java/bin:/usr/lib/java/jre/bin\" ; directory status )'" > /dev/null
if [ $? -eq 0 ] ; then {
# I2p is already running, so tell the user.
echo "I2P is already running..."
i2p_status
}
else
{
# Just in-case there are leftover junk in /tmp...
rm -Rf `grep /tmp/hsperfdata_root/* -le i2p` /tmp/i2p-*.tmp /tmp/router.ping
# Now that all junk is cleaned up, start.
/bin/su - -c "/bin/bash -l -c '( export PATH=\"$PATH:/usr/lib/java/bin:/usr/lib/java/jre/bin\" ; directory start )'"
}
fi
}
i2p_stop() {
/bin/su - -c "/bin/bash -l -c '( export PATH=\"$PATH:/usr/lib/java/bin:/usr/lib/java/jre/bin\" ; directory stop )'"
rm -Rf `grep /tmp/hsperfdata_root/* -le i2p` /tmp/i2p-*.tmp /tmp/router.ping
}
i2p_restart() {
# We want a FULL cycle here, not the wrappers idea of this!
i2p_stop
i2p_start
}
i2p_status() {
/bin/su - -c "/bin/bash -l -c '( export PATH=\"$PATH:/usr/lib/java/bin:/usr/lib/java/jre/bin\" ; directory status )'"
}
i2p_console() {
/bin/su - -c "/bin/bash -l -c '( export PATH=\"$PATH:/usr/lib/java/bin:/usr/lib/java/jre/bin\" ; directory console )'"
}
i2p_dump() {
/bin/su - -c "/bin/bash -l -c '( export PATH=\"$PATH:/usr/lib/java/bin:/usr/lib/java/jre/bin\" ; directory dump )'"
}
case "$1" in
'start')
i2p_start
;;
'stop')
i2p_stop
;;
'restart')
i2p_restart
;;
'status')
i2p_status
;;
'console')
i2p_console
;;
'dump')
i2p_dump
;;
*)
echo "usage $0 start|stop|restart|status|console|dump"
;;
esac

View File

@ -1,10 +0,0 @@
An rc file called rc.i2p has been placed into the /etc/rc.d directory.
If you want to change installation dir, change the variable INSTALL_DIR
on base-i2p.SlackBuild and rebuild the package. You also will need to do the
same for the i2p package.
The install script will insert everything needed into /etc/rc.d/rc.local and
into /etc/rc.d/rc.local_shutdown automatically.
If you want to start I2P at boot you have to chmod +x /etc/rc.d/rc.i2p

View File

@ -1,19 +0,0 @@
# HOW TO EDIT THIS FILE:
# The "handy ruler" below makes it easier to edit a package description. Line
# up the first '|' above the ':' following the base package name, and the '|' on
# the right side marks the last column you can put a character in. You must make
# exactly 11 lines for the formatting to be correct. It's also customary to
# leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
base-i2p: base-i2p (I2P anonymizing network base config files)
base-i2p:
base-i2p: I2P is an anonymizing network, offering a simple layer that
base-i2p: identity-sensitive applications can use to securely communicate. All
base-i2p: data is wrapped with several layers of encryption, and the network is
base-i2p: both distributed and dynamic, with no trusted parties.
base-i2p: Many applications are available that interface with I2P, including
base-i2p: mail, peer-peer file sharing, IRC chat, and others.
base-i2p:
base-i2p: This package provides the startup files.
base-i2p:

View File

@ -1 +0,0 @@
bash >= 3.1.017

89
Slackware/i2p/README Normal file
View File

@ -0,0 +1,89 @@
The I2P package will be installed to /opt/i2p.
To install to another location, set the variable INSTALL_DIR in i2p.SlackBuild
and rebuild the package.
Installing and Upgrading:
=========================
I2P has an auto-update function but generally speaking packages are managed by
packaging systems. Changing a package's files outside of the package system can
cause problems. To upgrade when there's a new I2P release, retrieve the new
source, re-run the SlackBuild, then use upgradepkg to update.
To ignore all this and upgrade "in-network", simply change the permissions of the installation
directory (/opt/i2p by default). Something like the following would suffice:
chown -R USERNAME /opt/i2p
Starting and using I2P
======================
Using the initscript
--------------------
To start I2P at boot, set the executable bit on /etc/rc.d/rc.i2p, add this
script to rc.local*, and set the variable "RUN_AS_USER" in /etc/rc.d/rc.i2p.
Optionally, create a new user/group with limited rights to run I2P.
Something like the following would work to start I2P at system boot, running under the
"i2p" account:
echo '[ -x /etc/rc.d/rc.i2p ] && /etc/rc.d/rc.i2p start' >> /etc/rc.d/rc.local
echo '[ -x /etc/rc.d/rc.i2p ] && /etc/rc.d/rc.i2p stop' >> /etc/.rc.d/rc.local_shutdown
sed -i .bak 's/^.*\(RUN_AS_USER\)=.*/\1=i2p/' /etc/rc.d/rc.i2p
chmod 755 /etc/rc.d/rc.i2p
Unless running as a user named "i2psvc", I2P's config directory defaults to
$HOME/.i2p. In the case of the "i2psvc" user, the default config directory is
/var/lib/i2p/i2p-config.
It should not need to be said that using the "root" account is not recommended.
When running using the initscript, I2P will write its logs to /var/log/i2p.
Starting I2P "on-demand"
------------------------
As with a normal installation, I2P can be started with "i2prouter start". The
i2prouter and eepget scripts hve been installed to /usr/bin so they'll be
accessible in the default system PATH.
When running using the i2prouter script, I2P will write its logs to $HOME/.i2p.
Configuring your browser
------------------------
In order to access eepSites (I2P-internal web sites) your web browser needs to
be configured. Set the HTTP Proxy to 127.0.0.1 and port 4444. For more information, see
https://geti2p.net/en/about/browser-config
The I2P router console is reachable at http://127.0.0.1:7657.
Addressbook subscriptions
-------------------------
Please see the FAQs at http://i2p-projekt.i2p/faq or https://geti2p.net/faq for information about
the various addressbook services.
Chatting on IRC
---------------
I2P comes preconfigured with a tunnel pointing to the I2P-only IRC network,
Irc2P. Signing on is easy, just connect to 127.0.0.1 on port 6668. Do not
configure a proxy in your IRC client.
Additional information
======================
Within I2P: http://i2p-projekt.i2p/, http://forum.i2p/, http://zzz.i2p/, http://trac.i2p2.i2p/
On the Internet: https://geti2p.net/, https://trac.i2p2.de
Manpages: i2prouter(1), eepget(1)

View File

@ -2,7 +2,7 @@
<project basedir="." default="slackpkg">
<target name="slackpkg">
<echo message="Building Slackware package." />
<exec executable="./i2p.SlackBuild">
</exec>
<chmod file="./i2p.Slackbuild" perm="755" />
<exec executable="./i2p.SlackBuild" failifexecutionfails="true" />
</target>
</project>

View File

@ -1,72 +1,60 @@
#!/bin/bash
#!/bin/sh
# Abort on error or unset variables
set -e
set -u
# This is changed by i2p.SlackBuild
INST_DIR=directory
PKGNAME="%pkg"
( cd install
config() {
NEW="$1"
OLD="$(dirname $NEW)/$(basename $NEW .new)"
if [ ! -r $NEW ]; then
# If we get here there's a flaw in the packaging. We'll just return so that
# we don't emit a spurious error for the user. (It's not the user's problem).
return
fi
echo
for i in *.config ; {
if [ -f $INST_DIR/$i ] ; then
echo "Please check ${INST_DIR}${i}, as there is a new version."
cp $i $INST_DIR/$i.new
else
cp $i $INST_DIR/$i
fi
# If this file doesn't exist yet, drop the .new extension.
if [ ! -r $OLD ]; then
mv $NEW $OLD
return
elif [ "$(md5sum $OLD | cut -d' ' -f1)" = "$(md5sum $NEW | cut -d' ' -f1)" ]; then
# If there are no differences in the files, remove the file with the .new extension.
rm $NEW
return
fi
# Alert the admin if they differ, but let's not be terribly obnoxious about it.
echo "WARNING: The files $OLD and $NEW differ." >&2
}
)
# Unlike previous versions of the package, we install i2prouter and eepget to /usr/bin
# to make them available within the system PATH.
( cd $INST_DIR
if [ -f blocklist.txt ] ; then
echo "Please check ${INST_DIR}blocklist.txt, as there is a new version."
else
mv blocklist.txt.new blocklist.txt
fi
)
# Users might still want to /opt/i2p/i2prouter or /opt/i2p/eepget so we'll create symlinks
# in the installation directory.
ln -sf /usr/bin/eepget $INST_DIR
ln -sf /usr/bin/i2prouter $INST_DIR
(cd /usr/doc/$PKGNAME; ln -sf $INST_DIR/history.txt changelog)
( cd $INST_DIR/eepsite
if [ -f jetty.xml ] ; then
echo "Please check ${INST_DIR}/eepsite, as there are new files."
else
find $PKG/$INSTALL_DIR/i2p -name "*.xml.new" -exec sh -c 'mv "$0" "${0/.new}"' {} \;
fi
)
( cd $INST_DIR/eepsite/docroot
if [ -f index.html ] ; then
rm index.html.new
else
mv index.html.new index.html
fi
if [ -f favicon.ico ] ; then
rm favicon.ico.new
else
mv favicon.ico.new favicon.ico
fi
)
echo
echo "FINISHING I2P INSTALLATION. PLEASE WAIT."
cd $INST_DIR
OS_ARCH=`uname -m`
X86_64=`echo "$OS_ARCH" | grep x86_64`
if [ "X$X86_64" = "X" ]; then
wrapperpath="./lib/wrapper/linux"
if $(uname -m | grep -q '64'); then
(cd $INST_DIR; ln -sf i2psvc-linux-x86-64 i2psvc)
else
wrapperpath="./lib/wrapper/linux64"
(cd $INST_DIR; ln -sf i2psvc-linux-x86-32 i2psvc)
fi
cp $wrapperpath/libwrapper.so ./lib/
cp $wrapperpath/wrapper.jar ./lib/
cp $wrapperpath/i2psvc .
rm -rf ./lib/wrapper
chmod 744 ./i2psvc
echo
echo "Installation finished."
echo
config /etc/rc.d/rc.i2p.new
config $INST_DIR/wrapper.config.new
exit
if [ -e /var/log/packages/i2p-base* ]; then
echo "Warning: This package supercedes the 'i2p-base' package." >&2
echo
echo "You may want to 'removepkg i2p-base'" >&2
echo "and check the contents of /etc/rc.d/rc.local*" >&2
echo "for correctness" >&2
fi
# Remove extraneous 'sh' from sponge's set-up
sed -i 's|sh /etc/rc\.d/rc\.i2p|/etc/rc.d/rc.i2p|g' /etc/rc.d/rc.local*

View File

@ -3,135 +3,124 @@
# Heavily based on the Slackware 12.2 SlackBuild
# Slackware build script for I2P
#
# PLEASE READ THIS:
# Probably you will never have to update I2P packages with upgradepkg,
# just because I2P has an auto-update function.
# Really you should not ever use any "upgrade" method.
#
# The correct way to upgrade is to:
# 1: install the upgrade
# 2: remove the old package
#
# It is a terrible shame that upgradepkg doesn't do this, infact,
# it would actually be the correct way for *any* package!
# Packages are generally prohibited from being updated outside
# of the package manager; this I2P SlackBuild is no different.
#
# If you'd like to use the I2P "in-network" updates anyway, you'll need to
# grant the user that I2P will run as write permission to the installation directory
# (/opt/i2p by default).
#
# For safety's sake, a user's I2P config files will *never* be overwritten by any upgrade method.
# In the future this SlackBuild may alert when a default config file is updated.
##
BUILD=1sponge
# Make sure makepkg and friends can be found
PATH=$PATH:/sbin
# abort on error and unset variables (same as set -e and set -u, respectively)
set -o errexit
set -o nounset
if [ $(id -ur) -ne 0 ]; then
echo "ERROR: SlackBuilds require root access." >&2
exit 1
fi
BUILD=1kytv
# INSTALL_DIR is referenced from /, don't prefix it with a '/'
INSTALL_DIR=opt
NAME=i2p
ARCH=noarch
# Less than slackware 13?
SLKPLT=$(cat /etc/slackware-version | sed -re "s/(Slackware )([0-9]*)(.*)/\2/")
if [ $SLKPLT -lt 13 ] ; then
EXT=tgz
else
EXT=txz
fi
#
# This mess is here due to the totally moronic way i2p does versioning.
# We correct it here.
#
ROUTER=$(echo -ne "_")$(cat ../../router/java/src/net/i2p/router/RouterVersion.java | grep -e "public final static long BUILD" | cut -f2 -d"=" | cut -f1 -d";" | sed -re "s/ //g")
if [ "$ROUTER" == "_" ] ; then
ROUTER="_0"
fi
#
# That was the easy one, now for the tough one.
#
CORE=$(cat ../../core/java/src/net/i2p/CoreVersion.java | grep -e "public final static String VERSION" | cut -f2 -d'"' | sed -re "s/ //g")
CORE1=$(echo -n $CORE.x.x | sed -re "s/(.*)\.(.*)\.(.*)\.(.*)/\1/")
CORE2=$(echo -n $CORE.x | sed -re "s/(.*)\.(.*)\.(.*)\.(.*)/\1/")
if [ "$CORE.x.x" == "$CORE1" ] ; then
CORE=$(echo -ne $CORE".0.0")
fi
if [ "$CORE.x" == "$CORE2" ] ; then
CORE=$(echo -ne $CORE".0")
fi
VERSION=$(echo $CORE$ROUTER)
#
# Whew!
# OK, let's build i2p
#
CWD=$(pwd)
CWD=$(readlink -m $(dirname $0))
I2PSRC=$(readlink -m $CWD/../../)
TMP=/tmp
PKG=$TMP/package-i2p
rm -rf $PKG
mkdir -p $PKG
cd $CWD/../../
if [ -e "/etc/slackware-version" ]; then
# Older than Slackware 13?
SLACKVER=$(sed -e "s/Slackware\s\+\([0-9]\+\)\.\?\([0-9]\+\)\?/\1/" /etc/slackware-version)
if [ $SLACKVER -lt 13 ] ; then
EXT=tgz
else
EXT=txz
fi
else
echo "ERROR: This script is only intended for use on Slackware systems.">&2
exit 1
fi
# Extract version strings
I2PBUILD=$(sed -e '/^.\+long\s\+BUILD/!d' -e 's/^.\+long\s\+BUILD\s\+=\s\+\([0-9]\+\);/\1/' $I2PSRC/router/java/src/net/i2p/router/RouterVersion.java)
# Thanks to user "ihavei2p" for the second awk statement
# If the version is x.y, it'll be set to x.y.0. Otherwise the version string will be unchanged
CORE=$(awk -F'"' '/static\s+String\s+VERSION/{print $2}' $I2PSRC/core/java/src/net/i2p/CoreVersion.java | \
awk -F. '{ if (NF > 3) { print; exit } else if ($3 == "") { $3=0; print $1"."$2"."$3 } else print }')
VERSION="${CORE}_${I2PBUILD}"
[ -d $PKG ] && rm -rf $PKG
mkdir -p $PKG/$INSTALL_DIR $PKG/install
cd "$I2PSRC"
ant distclean
#ant dist
ant tarball
ant jbigi-linux-x86-only preppkg-unix
tar xjvf i2p.tar.bz2 -C $TMP
chown -R root:root $I2PSRC/pkg-temp
cp -a $I2PSRC/pkg-temp $PKG/$INSTALL_DIR/i2p
cd $TMP/i2p
chown -R root:root .
mkdir -p $PKG/$INSTALL_DIR/
cp -a ../i2p $PKG/$INSTALL_DIR/
mkdir -p $PKG/install
#############################################################################
# Preconfigureation to make package smaller, and...
# we keep as much as reasonable in the installation directory.
# This makes the install map fairly well to the standard installation.
# It also makes it easier to find the log and pid files!
#############################################################################
# $INSTALL_DIR is used by this SlackBuild.
# [%$]INSTALL_PATH , [%$]SYSTEM_java_io_tmpdir, and [%$]USER_HOME have the correct paths set
# by the IzPack installer.
cd $PKG/$INSTALL_DIR/i2p
for file in wrapper.config eepget i2prouter runplain.sh; do
sed -i "s|[%$]INSTALL_PATH|/$INSTALL_DIR/i2p|g;s|[$%]SYSTEM_java_io_tmpdir|$TMP|g;s/[%$]USER_HOME/\$HOME/g" $file
done
mv wrapper.config wrapper.config.new
# wrapper.config $INSTALL_PATH and $SYSTEM_java_io_tmpdir
sed "s|\$INSTALL_PATH|/$INSTALL_DIR/i2p|g" wrapper.config > a
sed "s|\$SYSTEM_java_io_tmpdir|/$INSTALL_DIR/i2p|g" a > wrapper.config
# eepget %INSTALL_PATH
sed "s|\$INSTALL_PATH|/$INSTALL_DIR/i2p|g" eepget > a
rm eepget
mv a eepget
# runplain.sh %INSTALL_PATH and %SYSTEM_java_io_tmpdir
sed "s|%INSTALL_PATH|/$INSTALL_DIR/i2p|g" runplain.sh > a
sed "s|%SYSTEM_java_io_tmpdir|/$INSTALL_DIR/i2p|g" a > runplain.sh
# i2prouter %INSTALL_PATH and %SYSTEM_java_io_tmpdir
sed "s|%INSTALL_PATH|/$INSTALL_DIR/i2p|g" i2prouter > a
rm i2prouter
mv a i2prouter
sed "s|%SYSTEM_java_io_tmpdir|/$INSTALL_DIR/i2p|g" i2prouter > a
sed "s|#ALLOW_ROOT=true|ALLOW_ROOT=true|g" a > i2prouter
install -d $PKG/usr/bin
install -d $PKG/usr/doc/$NAME-$VERSION
install -d $PKG/etc/rc.d
mv licenses LICENSE.txt -t $PKG/usr/doc/$NAME-$VERSION
chmod 744 ./i2prouter
chmod 744 ./osid
chmod 744 ./runplain.sh
chmod 744 ./eepget
chmod 744 ./scripts/i2pbench.sh
chmod 744 ./scripts/i2ptest.sh
rm -Rf ./lib/*.dll ./*.bat ./*.exe ./installer ./icons ./a postinstall.sh
# runplain.sh will live in the installation directory. eepget and i2prouter will go to /usr/bin
# with symlinks in INST_DIR (created in doinst.sh)
install -m755 i2prouter $PKG/usr/bin
install -m755 eepget $PKG/usr/bin
chmod 755 ./runplain.sh
mv $PKG/$INSTALL_DIR/i2p/*.config $PKG/install
mv $PKG/$INSTALL_DIR/i2p/blocklist.txt $PKG/$INSTALL_DIR/i2p/blocklist.txt.new
find $PKG/$INSTALL_DIR/i2p -name "*.xml" -exec mv {} {}.new \;
mv $PKG/$INSTALL_DIR/i2p/eepsite/docroot/index.html $PKG/$INSTALL_DIR/i2p/eepsite/docroot/index.html.new
mv $PKG/$INSTALL_DIR/i2p/eepsite/docroot/favicon.ico $PKG/$INSTALL_DIR/i2p/eepsite/docroot/favicon.ico.new
sed "s|directory|/$INSTALL_DIR/i2p/|g" $CWD/doinst.sh > $PKG/install/doinst.sh
cat $CWD/slack-desc > $PKG/install/slack-desc
if [ $INSTALL_DIR != 'opt' ]; then
sed "s|\(The I2P package\)\s\+will be\s\+\(installed to\).+|\1 has been \2 $INSTALL_DIR/i2p|g" $CWD/README > $PKG/usr/doc/$NAME-$VERSION/README
else
sed "s|will be installed|has been installed|" $CWD/README > $PKG/usr/doc/$NAME-$VERSION/README
fi
install -d $PKG/usr/man/man1
gzip -9 man/*.1
install -m644 man/*.1.gz $PKG/usr/man/man1
rm -rf ./man
# We install all x86 wrapper binaries.
# The i2prouter script will try to determine the OS (linux), the bits (32 VS 64) and should be able
# to figure out the correct wrapper binary to use.
# However: In case the i2prouter script's detection fails, "$INST_DIR/i2psvc" will point to
# what 'we' think the correct binary is.
#
# A good reason for installing all binaries: in case the user, for whatever reason, switches from an
# x64 JRE to an x86 JRE, I2P should continue to work without needing to be reinstalled.
install -m755 $I2PSRC/installer/lib/wrapper/linux/i2psvc ./i2psvc-linux-x86-32
install -m644 $I2PSRC/installer/lib/wrapper/linux/libwrapper.so ./lib/libwrapper-linux-x86-32.so
install -m755 $I2PSRC/installer/lib/wrapper/linux64/i2psvc ./i2psvc-linux-x86-64
install -m644 $I2PSRC/installer/lib/wrapper/linux64/libwrapper.so ./lib/libwrapper-linux-x86-64.so
install -m644 $I2PSRC/installer/lib/wrapper/all/wrapper.jar ./lib/wrapper.jar
install -m644 $I2PSRC/build/jbigi.jar $PKG/$INSTALL_DIR/i2p/lib/jbigi.jar
rm -f ./postinstall.sh ./osid ./INSTALL-*.txt
sed "s|directory|/$INSTALL_DIR/i2p|" $CWD/doinst.sh > $PKG/install/doinst.sh
sed -i "s|%pkg|$NAME-$VERSION|" $PKG/install/doinst.sh
sed "s|%INST_DIR|/$INSTALL_DIR/i2p|" $CWD/rc.i2p> $PKG/etc/rc.d/rc.i2p.new
cp $CWD/slack-desc $PKG/install/slack-desc
cd $PKG
#
# requiredbuilder messes up REALLY bad, and thinks java is perl?!
# It also did not catch the shell requirements! BOOOOOOOOOOO! HISSSSSSSS!
#
# requiredbuilder -v -y -s $CWD $PKG
#
cat $CWD/slack-required > $PKG/install/slack-required
cp $CWD/slack-required $PKG/install/slack-required
makepkg -l y -c n $CWD/${NAME}-$VERSION-$ARCH-$BUILD.$EXT

185
Slackware/i2p/rc.i2p Normal file
View File

@ -0,0 +1,185 @@
#!/bin/sh
# Abort on errors
set -e
##
# This *must* be configured. Set this to the user that will run I2P.
# Note: If you don't want I2P to start automatically at boot,
# use "i2prouter start" as a non-root user to start I2P.
#RUN_AS_USER=
##
##
# Set the locale as desired.
# Note: this is not the same as the language shown in the I2P router console.
# This affects the locale used in wrapper.log. For best results, use a
# unicode enabled locale. This is especially important for foreign language torrents.
#
# If not set the user's configured locale will be used.
#RCLOCALE=
##
#####################################################
# Nothing below this point should need to be edited #
#####################################################
# %INST_DIR is set by i2p.SlackBuild
INSTALL_DIR="%INST_DIR"
# Make sure the package is installed and that the wrapper can be found
[ -d $INSTALL_DIR ] && [ -x $INSTALL_DIR/i2psvc ] || (echo "The I2P package is not installed" >&2 ; exit 1)
if [ -z $RUN_AS_USER ]; then
echo "ERROR: RUN_AS_USER not configured in $0" >&2
exit 1
fi
if [ $(id -ur) -ne 0 ]; then
echo 'ERROR: You must be root to start this service.' >&2
echo
exit 1
fi
if [ -z $RCLOCALE ]; then
if [ ! $(locale -a |grep -q "en_US\.utf8") ]; then
RCLOCALE="en_US.utf8"
fi
fi
# Abort this script if any referenced variables haven't been set
set -u
if $(uname -m |grep -q '64'); then
BITS='64'
else
BITS=''
fi
PATH="$PATH:/usr/lib$BITS/java/bin:/usr/lib$BITS/java/jre/bin"
RUN=/var/run/i2p
PIDFILE="$RUN/i2p.pid"
WRAPPER_CONF="$INSTALL_DIR/wrapper.config"
WRAPPERLOG=/var/log/i2p/wrapper.log
I2PTEMP="/tmp/i2p-daemon"
DESC="The I2P daemon"
JAVABINARY=$(awk -F'=' '/^ *wrapper\.java\.command/{print $2}' "$WRAPPER_CONF")
if [ ! $(which $JAVABINARY 2>/dev/null) ]; then
for rc in /etc/profile.d/*jdk*.sh /etc/profile.d/*java*.sh; do
[ -r $rc ] && . $rc
done
if [ ! $(which $JAVABINARY 2>/dev/null) ]; then
echo "ERROR: Cannot find java. Please set the path to java in $WRAPPER_CONF" >&2
exit 1
fi
fi
JAVA=$(which $JAVABINARY 2>/dev/null)
I2P_ARGS="$WRAPPER_CONF \
wrapper.java.additional.1=-DloggerFilenameOverride=/var/log/i2p/log-router-@.txt \
wrapper.java.additional.10=-Dwrapper.logfile=$WRAPPERLOG \
wrapper.java.additional.11=-Di2p.dir.pid=$RUN \
wrapper.java.additional.12=-Di2p.dir.temp=$I2PTEMP \
wrapper.java.command=$JAVA \
wrapper.logfile=$WRAPPERLOG \
wrapper.pidfile=$PIDFILE \
wrapper.daemonize=TRUE"
LC_ALL=$RCLOCALE
LANG=$RCLOCALE
export LC_ALL LANG
is_running() {
if [ -r $PIDFILE ]; then
PID="$(cat ${PIDFILE})" 2>/dev/null 2>&1
if ! kill -0 $PID >/dev/null 2>&1; then
rm "$PIDFILE"
return 1
else
return 0
fi
else
return 1
fi
}
start() {
if is_running; then
echo "ERROR: $DESC is already running." >&2
fi
for DIR in $RUN $I2PTEMP; do
test -d $DIR && rm -rf $DIR
mkdir -p $DIR
chown -R $RUN_AS_USER $DIR
done
[ -d /var/log/i2p ] || mkdir /var/log/i2p
chown -R $RUN_AS_USER /var/log/i2p
echo -n "Starting $DESC..."
TZ=UTC su $RUN_AS_USER -c "$INSTALL_DIR/i2psvc $I2P_ARGS"
is_running
echo "[pid: $PID]"
}
stop(){
if is_running; then
echo -n "Stopping $DESC [pid: $PID] (this could take a while)."
kill "$PID" >/dev/null 2>&1
while kill -0 "$PID" > /dev/null 2>&1; do
echo -n .
sleep 1
done
rm -rf "$RUN" "$I2PTEMP"
echo done.
return 0
else
echo "$DESC is not running." >&2
return 1
fi
}
# Unset +u to allow the 'usage' text to be displayed
set +u
case "$1" in
start)
start
;;
status)
if is_running; then
echo "$DESC is running [pid: $PID]" >&2
else
echo "$DESC is not running." >&2
fi
;;
stop)
stop
;;
graceful)
if is_running; then
kill -HUP $PID
echo "Graceful shutdown of $DESC initiated." >&2
echo "This may take up to 11 minutes." >&2
fi
;;
dump)
if is_running; then
kill -3 $PID
echo "Threads dumped to $WRAPPERLOG" >&2
else
echo "$DESC is not running." >&2
fi
;;
restart)
if is_running; then
stop
start
else
echo "$DESC is not running." >&2
fi
;;
*)
echo "usage: $0 start|stop|status|restart|graceful|dump"
;;
esac

View File

@ -1,47 +0,0 @@
Building:
The i2p package will be installed in /opt/i2p
If you want to change installation dir, change the variable INSTALL_DIR
on i2p.SlackBuild and rebuild the package. You will also need to do the same
in the base-i2p package.
Installation and Upgrade:
Probably you will never have to update i2p packages. However if you do,
be sure to installpkg first, then removepkg or custom config files can
be lost with upgradepkg. I2P has an auto-update function. However using
installpkg then removepkg lowers the demand on the I2P network as a
whole, and is by far faster.
After installpkg command, doinst.sh will execute a postinstallation script
needed by I2P. Be sure to also install the base-i2p package.
Optional:
chmod +x /etc/rc.d/rc.i2p only if you want it to start on boot and stop on
shutdown.
How to start I2P:
Start I2P service with-
sh /etc/rc.d/rc.i2p start
Now tell your browser to user this proxy: localhost on port 4444 and open
this page: http://localhost:7657/index.jsp
Here you can configure I2P, watch network status and navigate anonimously.
It's suggested to subscribe to various addressbook hosts so that you can
get to the many available eepsites and other service on I2P. These are not
set up by default for security reasons.
Please see the faqs on http://www.i2p2.i2p/ or http://www.i2p2.de/ on how
to subscribe to the various addressbook services.
To stop I2P:
/etc/rc.d/rc.i2p stop
For any additional information:
Within I2P- http://www.i2p2.i2p/, http://forum.i2p/, http://zzz.i2p
Internet (not reccomended!) - http://www.i2p2.de/, http://forum.i2p2.de/

View File

@ -6,7 +6,7 @@
# leave one space after the ':'.
|-----handy-ruler----------------------------------------------------------|
i2p: i2p (an anonymizing network)
i2p: I2P (an anonymizing network)
i2p:
i2p: I2P is an anonymizing network, offering a simple layer that
i2p: identity-sensitive applications can use to securely communicate. All
@ -14,6 +14,6 @@ i2p: data is wrapped with several layers of encryption, and the network is
i2p: both distributed and dynamic, with no trusted parties.
i2p: Many applications are available that interface with I2P, including
i2p: mail, peer-peer file sharing, IRC chat, and others.
i2p: WARNING: To upgrade installpkg FIRST _THEN_ removepkg.
i2p: For more information, see: http://www.i2p2.de/
i2p:
i2p: For more information, see: https://geti2p.net/
i2p:

View File

@ -1,4 +1 @@
jre >= 5
i2p-base >= 0.0.1
bash >= 3.1.017
jre >= 6

View File

@ -15,6 +15,8 @@
*/
package net.i2p.BOB;
import static net.i2p.app.ClientAppState.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
@ -25,12 +27,17 @@ import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketTimeoutException;
import java.net.URL;
import java.util.Arrays;
import java.util.Properties;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.jar.Attributes;
import java.util.jar.Manifest;
import net.i2p.I2PAppContext;
import net.i2p.app.*;
import net.i2p.client.I2PClient;
import net.i2p.util.Log;
import net.i2p.util.I2PAppThread;
import net.i2p.util.SimpleScheduler;
import net.i2p.util.SimpleTimer2;
@ -105,57 +112,76 @@ import net.i2p.util.SimpleTimer2;
*
* @author sponge
*/
public class BOB {
public class BOB implements Runnable, ClientApp {
public final static String PROP_CONFIG_LOCATION = "BOB.config";
public final static String PROP_BOB_PORT = "BOB.port";
public final static String PROP_BOB_HOST = "BOB.host";
public final static String PROP_CFG_VER = "BOB.CFG.VER";
private static NamedDB database;
private static Properties props = new Properties();
private static AtomicBoolean spin = new AtomicBoolean(true);
private static BOB _bob;
private NamedDB database;
private Properties props = new Properties();
private AtomicBoolean spin = new AtomicBoolean(true);
private static final String P_RUNNING = "RUNNING";
private static final String P_STARTING = "STARTING";
private static final String P_STOPPING = "STOPPING";
private static AtomicBoolean lock = new AtomicBoolean(false);
private AtomicBoolean lock = new AtomicBoolean(false);
// no longer used.
// private static int maxConnections = 0;
/**
* Log a warning
*
* @param arg
*/
public static void info(String arg) {
System.out.println("INFO:" + arg);
(new Log(BOB.class)).info(arg);
}
private final Logger _log;
private final ClientAppManager _mgr;
private final String[] _args;
private volatile ClientAppState _state = UNINITIALIZED;
/**
* Log a warning
*
* @param arg
*/
public static void warn(String arg) {
System.out.println("WARNING:" + arg);
(new Log(BOB.class)).warn(arg);
}
/**
* Log an error
*
* @param arg
*/
public static void error(String arg) {
System.out.println("ERROR: " + arg);
(new Log(BOB.class)).error(arg);
}
private volatile ServerSocket listener;
private volatile Thread _runner;
/**
* Stop BOB gracefully
* @deprecated unused
*/
public static void stop() {
spin.set(false);
_bob.shutdown(null);
}
/**
* For ClientApp interface.
* Does NOT open the listener socket or start threads; caller must call startup()
*
* @param mgr may be null
* @param args non-null
* @throws Exception on bad args
* @since 0.9.10
*/
public BOB(I2PAppContext context, ClientAppManager mgr, String[] args) {
// If we were run from command line, log to stdout
boolean logToStdout = false;
URL classResource = BOB.class.getResource("BOB.class");
if (classResource != null) {
String classPath = classResource.toString();
if (classPath.startsWith("jar")) {
String manifestPath = classPath.substring(0, classPath.lastIndexOf("!") + 1) +
"/META-INF/MANIFEST.MF";
try {
Manifest manifest = new Manifest(new URL(manifestPath).openStream());
Attributes attrs = manifest.getMainAttributes();
String mainClass = attrs.getValue("Main-Class");
if ("net.i2p.BOB.Main".equals(mainClass))
logToStdout = true;
} catch (IOException ioe) {}
}
}
_log = new Logger(context.logManager().getLog(BOB.class), logToStdout);
_mgr = mgr;
_args = args;
_state = INITIALIZED;
database = new NamedDB();
loadConfig();
}
/**
@ -164,8 +190,22 @@ public class BOB {
* @param args
*/
public static void main(String[] args) {
database = new NamedDB();
ServerSocket listener = null;
try {
_bob = new BOB(I2PAppContext.getGlobalContext(), null, args);
_bob.startup();
} catch (RuntimeException e) {
e.printStackTrace();
throw e;
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
/**
* @since 0.9.10
*/
private void loadConfig() {
int i = 0;
boolean save = false;
// Set up all defaults to be passed forward to other threads.
@ -176,116 +216,144 @@ public class BOB {
SimpleTimer2 Y2 = SimpleTimer2.getInstance();
i = Y1.hashCode();
i = Y2.hashCode();
Log _log = new Log(BOB.class);
try {
{
File cfg = new File(configLocation);
if (!cfg.isAbsolute()) {
cfg = new File(I2PAppContext.getGlobalContext().getConfigDir(), configLocation);
}
try {
FileInputStream fi = new FileInputStream(cfg);
props.load(fi);
fi.close();
} catch (FileNotFoundException fnfe) {
warn("Unable to load up the BOB config file " + cfg.getAbsolutePath() + ", Using defaults.");
warn(fnfe.toString());
save = true;
} catch (IOException ioe) {
warn("IOException on BOB config file " + cfg.getAbsolutePath() + ", using defaults.");
warn(ioe.toString());
}
{
File cfg = new File(configLocation);
if (!cfg.isAbsolute()) {
cfg = new File(I2PAppContext.getGlobalContext().getConfigDir(), configLocation);
}
// Global router and client API configurations that are missing are set to defaults here.
if (!props.containsKey(I2PClient.PROP_TCP_HOST)) {
props.setProperty(I2PClient.PROP_TCP_HOST, "localhost");
save = true;
}
if (!props.containsKey(I2PClient.PROP_TCP_PORT)) {
props.setProperty(I2PClient.PROP_TCP_PORT, "7654");
save = true;
}
if (!props.containsKey(PROP_BOB_PORT)) {
props.setProperty(PROP_BOB_PORT, "2827"); // 0xB0B
save = true;
}
if (!props.containsKey("inbound.length")) {
props.setProperty("inbound.length", "1");
save = true;
}
if (!props.containsKey("outbound.length")) {
props.setProperty("outbound.length", "1");
save = true;
}
if (!props.containsKey("inbound.lengthVariance")) {
props.setProperty("inbound.lengthVariance", "0");
save = true;
}
if (!props.containsKey("outbound.lengthVariance")) {
props.setProperty("outbound.lengthVariance", "0");
save = true;
}
if (!props.containsKey(PROP_BOB_HOST)) {
props.setProperty(PROP_BOB_HOST, "localhost");
save = true;
}
// PROP_RELIABILITY_NONE, PROP_RELIABILITY_BEST_EFFORT, PROP_RELIABILITY_GUARANTEED
if (!props.containsKey(PROP_CFG_VER)) {
props.setProperty(I2PClient.PROP_RELIABILITY, I2PClient.PROP_RELIABILITY_NONE);
props.setProperty(PROP_CFG_VER,"1");
save = true;
}
if (save) {
File cfg = new File(configLocation);
if (!cfg.isAbsolute()) {
cfg = new File(I2PAppContext.getGlobalContext().getConfigDir(), configLocation);
}
try {
warn("Writing new defaults file " + cfg.getAbsolutePath());
FileOutputStream fo = new FileOutputStream(cfg);
props.store(fo, cfg.getAbsolutePath());
fo.close();
} catch (IOException ioe) {
error("IOException on BOB config file " + cfg.getAbsolutePath() + ", " + ioe);
}
}
i = 0;
boolean g = false;
spin.set(true);
FileInputStream fi = null;
try {
info("BOB is now running.");
listener = new ServerSocket(Integer.parseInt(props.getProperty(PROP_BOB_PORT)), 10, InetAddress.getByName(props.getProperty(PROP_BOB_HOST)));
Socket server = null;
listener.setSoTimeout(500); // .5 sec
while (spin.get()) {
//DoCMDS connection;
try {
server = listener.accept();
server.setKeepAlive(true);
g = true;
} catch (ConnectException ce) {
g = false;
} catch (SocketTimeoutException ste) {
g = false;
}
if (g) {
DoCMDS conn_c = new DoCMDS(spin, lock, server, props, database, _log);
Thread t = new Thread(conn_c);
t.setName("BOB.DoCMDS " + i);
t.start();
i++;
}
}
fi = new FileInputStream(cfg);
props.load(fi);
} catch (FileNotFoundException fnfe) {
_log.warn("Unable to load up the BOB config file " + cfg.getAbsolutePath() + ", Using defaults.", fnfe);
save = true;
} catch (IOException ioe) {
error("IOException on socket listen: " + ioe);
ioe.printStackTrace();
_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.
if (!props.containsKey(I2PClient.PROP_TCP_HOST)) {
props.setProperty(I2PClient.PROP_TCP_HOST, "localhost");
save = true;
}
if (!props.containsKey(I2PClient.PROP_TCP_PORT)) {
props.setProperty(I2PClient.PROP_TCP_PORT, "7654");
save = true;
}
if (!props.containsKey(PROP_BOB_PORT)) {
props.setProperty(PROP_BOB_PORT, "2827"); // 0xB0B
save = true;
}
if (!props.containsKey("inbound.length")) {
props.setProperty("inbound.length", "1");
save = true;
}
if (!props.containsKey("outbound.length")) {
props.setProperty("outbound.length", "1");
save = true;
}
if (!props.containsKey("inbound.lengthVariance")) {
props.setProperty("inbound.lengthVariance", "0");
save = true;
}
if (!props.containsKey("outbound.lengthVariance")) {
props.setProperty("outbound.lengthVariance", "0");
save = true;
}
if (!props.containsKey(PROP_BOB_HOST)) {
props.setProperty(PROP_BOB_HOST, "localhost");
save = true;
}
// PROP_RELIABILITY_NONE, PROP_RELIABILITY_BEST_EFFORT, PROP_RELIABILITY_GUARANTEED
if (!props.containsKey(PROP_CFG_VER)) {
props.setProperty(I2PClient.PROP_RELIABILITY, I2PClient.PROP_RELIABILITY_NONE);
props.setProperty(PROP_CFG_VER,"1");
save = true;
}
if (save) {
File cfg = new File(configLocation);
if (!cfg.isAbsolute()) {
cfg = new File(I2PAppContext.getGlobalContext().getConfigDir(), configLocation);
}
FileOutputStream fo = null;
try {
_log.warn("Writing new defaults file " + cfg.getAbsolutePath());
fo = new FileOutputStream(cfg);
props.store(fo, cfg.getAbsolutePath());
} catch (IOException ioe) {
_log.error("IOException on BOB config file " + cfg.getAbsolutePath(), ioe);
} finally {
if (fo != null) try { fo.close(); } catch (IOException ioe) {}
}
}
}
/**
* @since 0.9.10
*/
private void startListener() throws IOException {
listener = new ServerSocket(Integer.parseInt(props.getProperty(PROP_BOB_PORT)), 10, InetAddress.getByName(props.getProperty(PROP_BOB_HOST)));
listener.setSoTimeout(500); // .5 sec
}
/**
* @since 0.9.10
*/
private void startThread() {
I2PAppThread t = new I2PAppThread(this, "BOBListener");
t.start();
_runner = t;
}
/**
* @since 0.9.10
*/
public void run() {
if (listener == null) return;
changeState(RUNNING);
_log.info("BOB is now running.");
if (_mgr != null)
_mgr.register(this);
int i = 0;
boolean g = false;
spin.set(true);
try {
Socket server = null;
while (spin.get()) {
//DoCMDS connection;
try {
server = listener.accept();
server.setKeepAlive(true);
g = true;
} catch (ConnectException ce) {
g = false;
} catch (SocketTimeoutException ste) {
g = false;
}
if (g) {
DoCMDS conn_c = new DoCMDS(spin, lock, server, props, database, _log);
Thread t = new Thread(conn_c);
t.setName("BOB.DoCMDS " + i);
t.start();
i++;
}
}
changeState(STOPPING);
} catch (Exception e) {
if (spin.get())
_log.error("Unexpected error while listening for connections", e);
else
e = null;
changeState(STOPPING, e);
} finally {
info("BOB is now shutting down...");
_log.info("BOB is now shutting down...");
// Clean up everything.
try {
listener.close();
@ -316,8 +384,8 @@ public class BOB {
database.releaseReadLock();
}
}
info("BOB is now stopped.");
changeState(STOPPED);
_log.info("BOB is now stopped.");
}
}
@ -369,4 +437,86 @@ public class BOB {
waitjoin(groups[i], level + 1, groups[i].getName());
}
}
////// begin ClientApp interface
/**
* @since 0.9.10
*/
@Override
public void startup() throws IOException {
if (_state != INITIALIZED)
return;
changeState(STARTING);
try {
startListener();
} catch (IOException e) {
_log.error("Error starting BOB on"
+ props.getProperty(PROP_BOB_HOST)
+ ":" + props.getProperty(PROP_BOB_PORT), e);
changeState(START_FAILED, e);
throw e;
}
startThread();
}
/**
* @since 0.9.10
*/
@Override
public void shutdown(String[] args) {
if (_state != RUNNING)
return;
changeState(STOPPING);
spin.set(false);
if (_runner != null)
_runner.interrupt();
else
changeState(STOPPED);
}
/**
* @since 0.9.10
*/
@Override
public ClientAppState getState() {
return _state;
}
/**
* @since 0.9.10
*/
@Override
public String getName() {
return "BOB";
}
/**
* @since 0.9.10
*/
@Override
public String getDisplayName() {
return "BOB " + Arrays.toString(_args);
}
////// end ClientApp interface
////// begin ClientApp helpers
/**
* @since 0.9.10
*/
private void changeState(ClientAppState state) {
changeState(state, null);
}
/**
* @since 0.9.10
*/
private synchronized void changeState(ClientAppState state, Exception e) {
_state = state;
if (_mgr != null)
_mgr.notify(this, state, null, e);
}
////// end ClientApp helpers
}

View File

@ -31,7 +31,6 @@ import net.i2p.client.I2PClientFactory;
//import net.i2p.data.DataFormatException;
import net.i2p.data.Destination;
//import net.i2p.i2ptunnel.I2PTunnel;
import net.i2p.util.Log;
// needed only for debugging.
// import java.util.logging.Level;
// import java.util.logging.Logger;
@ -56,7 +55,7 @@ public class DoCMDS implements Runnable {
private ByteArrayOutputStream prikey;
private boolean dk, ns, ip, op;
private NamedDB nickinfo;
private Log _log;
private Logger _log;
private AtomicBoolean LIVE;
private AtomicBoolean lock;
/* database strings */
@ -164,7 +163,7 @@ public class DoCMDS implements Runnable {
* @param database
* @param _log
*/
DoCMDS(AtomicBoolean LIVE, AtomicBoolean lock, Socket server, Properties props, NamedDB database, Log _log) {
DoCMDS(AtomicBoolean LIVE, AtomicBoolean lock, Socket server, Properties props, NamedDB database, Logger _log) {
this.lock = lock;
this.LIVE = LIVE;
this.server = server;
@ -606,7 +605,7 @@ public class DoCMDS implements Runnable {
break die;
}
} catch (I2PException ipe) {
BOB.error("Error generating keys" + ipe);
_log.error("Error generating keys", ipe);
out.println("ERROR generating keys");
}

View File

@ -22,7 +22,6 @@ import net.i2p.I2PException;
import net.i2p.client.streaming.I2PServerSocket;
import net.i2p.client.streaming.I2PSocket;
import net.i2p.client.streaming.I2PSocketManager;
import net.i2p.util.Log;
/**
* Listen on I2P and connect to TCP
@ -32,7 +31,7 @@ import net.i2p.util.Log;
public class I2Plistener implements Runnable {
private NamedDB info, database;
private Log _log;
private Logger _log;
public I2PSocketManager socketManager;
public I2PServerSocket serverSocket;
private AtomicBoolean lives;
@ -45,7 +44,7 @@ public class I2Plistener implements Runnable {
* @param database
* @param _log
*/
I2Plistener(I2PServerSocket SS, I2PSocketManager S, NamedDB info, NamedDB database, Log _log, AtomicBoolean lives) {
I2Plistener(I2PServerSocket SS, I2PSocketManager S, NamedDB info, NamedDB database, Logger _log, AtomicBoolean lives) {
this.database = database;
this.info = info;
this._log = _log;

View File

@ -15,7 +15,7 @@
*/
package net.i2p.BOB;
import java.util.Enumeration;
import java.util.Map;
import java.util.Properties;
/**
@ -39,10 +39,8 @@ public class Lifted {
*
**/
public static void copyProperties(Properties src_prop, Properties dest_prop) {
for (Enumeration propertyNames = src_prop.propertyNames();
propertyNames.hasMoreElements();) {
Object key = propertyNames.nextElement();
dest_prop.put(key, src_prop.get(key));
for (Map.Entry<Object, Object> e : src_prop.entrySet()) {
dest_prop.put((String)e.getKey(), (String)e.getValue());
}
}
}

View File

@ -0,0 +1,44 @@
package net.i2p.BOB;
import net.i2p.util.Log;
public class Logger {
public Log log;
private boolean logToStdout;
public Logger(Log log, boolean logToStdout) {
this.log = log;
this.logToStdout = logToStdout;
}
public void info(String msg) {
if (logToStdout)
System.out.println("INFO: " + msg);
if (log.shouldLog(Log.INFO))
log.info(msg);
}
public void warn(String msg) {
warn(msg, null);
}
public void warn(String msg, Throwable e) {
if (logToStdout) {
System.out.println("WARNING: " + msg);
if (e != null)
e.printStackTrace();
}
if (log.shouldLog(Log.WARN))
log.warn(msg, e);
}
public void error(String msg, Throwable e) {
if (logToStdout) {
System.out.println("ERROR: " + msg);
if (e != null)
e.printStackTrace();
}
if (log.shouldLog(Log.ERROR))
log.error(msg, e);
}
}

View File

@ -22,6 +22,7 @@ import java.net.ServerSocket;
import java.util.Properties;
import java.util.concurrent.atomic.AtomicBoolean;
import net.i2p.I2PException;
import net.i2p.client.I2PClient;
import net.i2p.client.streaming.I2PServerSocket;
import net.i2p.client.streaming.I2PSocketManager;
import net.i2p.client.streaming.I2PSocketManagerFactory;
@ -36,7 +37,7 @@ import net.i2p.util.Log;
public class MUXlisten implements Runnable {
private NamedDB database, info;
private Log _log;
private Logger _log;
private I2PSocketManager socketManager;
private ByteArrayInputStream prikey;
private ThreadGroup tg;
@ -57,7 +58,7 @@ public class MUXlisten implements Runnable {
* @throws net.i2p.I2PException
* @throws java.io.IOException
*/
MUXlisten(AtomicBoolean lock, NamedDB database, NamedDB info, Log _log) throws I2PException, IOException, RuntimeException {
MUXlisten(AtomicBoolean lock, NamedDB database, NamedDB info, Logger _log) throws I2PException, IOException, RuntimeException {
try {
int port = 0;
InetAddress host = null;
@ -96,10 +97,20 @@ public class MUXlisten implements Runnable {
this.database.releaseReadLock();
this.info.releaseReadLock();
String i2cpHost = Q.getProperty(I2PClient.PROP_TCP_HOST, "127.0.0.1");
int i2cpPort = 7654;
String i2cpPortStr = Q.getProperty(I2PClient.PROP_TCP_PORT, "7654");
try {
i2cpPort = Integer.parseInt(i2cpPortStr);
} catch (NumberFormatException nfe) {
throw new IllegalArgumentException("Invalid I2CP port specified [" + i2cpPortStr + "]");
}
if (this.come_in) {
this.listener = new ServerSocket(port, backlog, host);
}
socketManager = I2PSocketManagerFactory.createManager(prikey, Q);
socketManager = I2PSocketManagerFactory.createManager(
prikey, i2cpHost, i2cpPort, Q);
} catch (IOException e) {
// Something went bad.
this.database.getWriteLock();

View File

@ -22,7 +22,6 @@ import java.net.SocketTimeoutException;
import java.util.concurrent.atomic.AtomicBoolean;
import net.i2p.client.streaming.I2PServerSocket;
import net.i2p.client.streaming.I2PSocketManager;
import net.i2p.util.Log;
/**
* Listen on TCP port and connect to I2P
@ -32,7 +31,7 @@ import net.i2p.util.Log;
public class TCPlistener implements Runnable {
private NamedDB info, database;
private Log _log;
private Logger _log;
public I2PSocketManager socketManager;
public I2PServerSocket serverSocket;
private ServerSocket listener;
@ -45,7 +44,7 @@ public class TCPlistener implements Runnable {
* @param database
* @param _log
*/
TCPlistener(ServerSocket listener, I2PSocketManager S, NamedDB info, NamedDB database, Log _log, AtomicBoolean lives) {
TCPlistener(ServerSocket listener, I2PSocketManager S, NamedDB info, NamedDB database, Logger _log, AtomicBoolean lives) {
this.database = database;
this.info = info;
this._log = _log;

View File

@ -106,8 +106,10 @@ public class UDPIOthread implements I2PSessionListener, Runnable {
// _log.debug("Message available: id = " + msgId + " size = " + size);
try {
byte msg[] = session.receiveMessage(msgId);
out.write(msg);
out.flush();
if (msg != null) {
out.write(msg);
out.flush();
}
} catch (I2PSessionException ise) {
up = false;
} 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,22 @@
</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" />
</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" />
@ -48,11 +74,11 @@
</javac>
</target>
<!-- unused for now, as we oddly ship addressbook as a .war -->
<!-- unused for now (except for Android), 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 +90,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://www.i2p2.i2p/hosts.txt");
defaultSubs.add(DEFAULT_SUB);
SubscriptionList subscriptions = new SubscriptionList(subscriptionFile,
etagsFile, lastModifiedFile, lastFetchedFile, delay, defaultSubs, settings

View File

@ -41,7 +41,9 @@ import javax.servlet.http.HttpServletResponse;
*
*/
public class Servlet extends HttpServlet {
private DaemonThread thread;
private static final long serialVersionUID = 1L;
private transient DaemonThread thread;
//private String nonce;
//private static final String PROP_NONCE = "addressbook.nonce";

View File

@ -4,6 +4,15 @@
"http://java.sun.com/j2ee/dtds/web-app_2.2.dtd">
<web-app>
<filter>
<filter-name>XSSFilter</filter-name>
<filter-class>net.i2p.servlet.filters.XSSFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>XSSFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>addressbook</servlet-name>
<servlet-class>net.i2p.addressbook.Servlet</servlet-class>

View File

@ -3,7 +3,7 @@
<classpathentry kind="src" path="src"/>
<classpathentry combineaccessrules="false" kind="src" path="/i2p_router"/>
<classpathentry combineaccessrules="false" kind="src" path="/i2p_sdk"/>
<classpathentry kind="lib" path="/lib/wrapper/all/wrapper.jar"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry combineaccessrules="false" kind="src" path="/installer"/>
<classpathentry kind="output" path="build"/>
</classpath>

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

@ -3,19 +3,19 @@
# This file is distributed under the same license as the desktopgui package.
# To contribute translations, see http://www.i2p2.de/newdevelopers
# foo <foo@bar>, 2009.
#
#
msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: https://trac.i2p2.de/\n"
"POT-Creation-Date: 2011-03-03 18:29+0000\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-01-09 18:07+0000\n"
"PO-Revision-Date: 2011-03-22 15:49+0000\n"
"Last-Translator: blabla <blabla@trash-mail.com>\n"
"Language-Team: German <>\n"
"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"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
@ -46,10 +46,10 @@ msgstr "I2P neustarten"
msgid "Stop I2P"
msgstr "I2P beenden"
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:44
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:43
msgid "Tray icon configuration"
msgstr "Systemleistensymbol konfigurieren"
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:47
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:46
msgid "Should tray icon be enabled?"
msgstr "Systemleistensymbol aktivieren?"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: I2P desktopgui\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-03-03 18:29+0000\n"
"POT-Creation-Date: 2014-01-09 19:27+0000\n"
"PO-Revision-Date: 2010-06-15 14:09+0100\n"
"Last-Translator: duck <duck@mail.i2p>\n"
"Language-Team: duck <duck@mail.i2p>\n"
@ -46,10 +46,10 @@ msgstr ""
msgid "Stop I2P"
msgstr ""
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:44
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:43
msgid "Tray icon configuration"
msgstr ""
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:47
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:46
msgid "Should tray icon be enabled?"
msgstr ""

View File

@ -2,7 +2,7 @@
# Copyright (C) 2009 The I2P Project
# This file is distributed under the same license as the desktopgui package.
# To contribute translations, see http://www.i2p2.de/newdevelopers
#
#
# Translators:
# blabla <blabla@trash-mail.com>, 2011
# ducki2p <ducki2p@gmail.com>, 2011
@ -11,15 +11,16 @@
msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: https://trac.i2p2.de/\n"
"POT-Creation-Date: 2011-03-03 18:29+0000\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-01-09 19:14+0000\n"
"PO-Revision-Date: 2013-06-08 04:50+0000\n"
"Last-Translator: Boxoa590\n"
"Language-Team: French (http://www.transifex.com/projects/p/I2P/language/fr/)\n"
"Language-Team: French (http://www.transifex.com/projects/p/I2P/language/"
"fr/)\n"
"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"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
@ -50,10 +51,10 @@ msgstr "Redémarrer I2P"
msgid "Stop I2P"
msgstr "Arrêter I2P"
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:44
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:43
msgid "Tray icon configuration"
msgstr "Configuration de l'icône de notification"
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:47
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:46
msgid "Should tray icon be enabled?"
msgstr "Activer l'icône de notification ?"

View File

@ -0,0 +1,57 @@
# I2P
# Copyright (C) 2009 The I2P Project
# This file is distributed under the same license as the desktopgui package.
# To contribute translations, see http://www.i2p2.de/newdevelopers
#
# Translators:
# testsubject67 <deborinha97@hotmail.com>, 2014
# blueboy, 2013
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-07-05 17:40+0000\n"
"Last-Translator: testsubject67 <deborinha97@hotmail.com>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/I2P/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: pt_BR\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
msgid "Start I2P"
msgstr "Conectar-se à I2P"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
msgid "I2P is starting!"
msgstr "Conectando-se a I2P!"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
msgid "Starting"
msgstr "Conectando"
#: src/net/i2p/desktopgui/InternalTrayManager.java:26
msgid "Launch I2P Browser"
msgstr "Lançar o navegador I2P "
#: src/net/i2p/desktopgui/InternalTrayManager.java:50
msgid "Configure desktopgui"
msgstr "Configurar desktopgui"
#: src/net/i2p/desktopgui/InternalTrayManager.java:67
msgid "Restart I2P"
msgstr "Reinicializar o roteador I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:85
msgid "Stop I2P"
msgstr "Interromper o roteador I2P"
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:43
msgid "Tray icon configuration"
msgstr "Configuração de ícone de bandeja"
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:46
msgid "Should tray icon be enabled?"
msgstr "Ativar ícone de bandeja?"

View File

@ -2,21 +2,23 @@
# Copyright (C) 2009 The I2P Project
# This file is distributed under the same license as the desktopgui package.
# To contribute translations, see http://www.i2p2.de/newdevelopers
#
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-03-03 18:29+0000\n"
"POT-Creation-Date: 2014-01-09 19:03+0000\n"
"PO-Revision-Date: 2013-11-11 11:31+0000\n"
"Last-Translator: polearnik <polearnik@mail.ru>\n"
"Language-Team: Romanian (http://www.transifex.com/projects/p/I2P/language/ro/)\n"
"Language-Team: Romanian (http://www.transifex.com/projects/p/I2P/language/"
"ro/)\n"
"Language: ro\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ro\n"
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?"
"2:1));\n"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
msgid "Start I2P"
@ -46,10 +48,10 @@ msgstr "Restart I2P"
msgid "Stop I2P"
msgstr "Stop I2P"
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:44
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:43
msgid "Tray icon configuration"
msgstr "Configurare pictogramei din bara de sistem"
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:47
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:46
msgid "Should tray icon be enabled?"
msgstr "Ar trebui să fie activata pictograma din bara de sistem?"

View File

@ -6,14 +6,14 @@
# Translators:
# ducki2p <ducki2p@gmail.com>, 2011
# foo <foo@bar>, 2009
# Roman Azarenko <x12ozmouse@ya.ru>, 2013
# Роман Азаренко <transifex@basicxp.ru>, 2013
msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: https://trac.i2p2.de/\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-03-03 18:29+0000\n"
"PO-Revision-Date: 2013-07-07 11:44+0000\n"
"Last-Translator: Roman Azarenko <x12ozmouse@ya.ru>\n"
"PO-Revision-Date: 2013-12-04 11:46+0000\n"
"Last-Translator: Bergitte <alvina_alexandrova@mail.ru>\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"

View File

@ -0,0 +1,57 @@
# I2P
# Copyright (C) 2009 The I2P Project
# This file is distributed under the same license as the desktopgui package.
# To contribute translations, see http://www.i2p2.de/newdevelopers
#
# Translators:
# Krantišek <jaksrn@gmail.com>, 2014
# Svistwarrior273 <romanbeno273@gmail.com>, 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-04-20 09:56+0000\n"
"Last-Translator: Svistwarrior273 <romanbeno273@gmail.com>\n"
"Language-Team: Slovak (http://www.transifex.com/projects/p/I2P/language/sk/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: sk\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
msgid "Start I2P"
msgstr "Spustiť I2P"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
msgid "I2P is starting!"
msgstr "I2P sa spúšťa!"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
msgid "Starting"
msgstr "Spúšťa sa"
#: src/net/i2p/desktopgui/InternalTrayManager.java:26
msgid "Launch I2P Browser"
msgstr "Spustiť I2P prehliadač"
#: src/net/i2p/desktopgui/InternalTrayManager.java:50
msgid "Configure desktopgui"
msgstr "Nakonfigurovať desktopgui"
#: src/net/i2p/desktopgui/InternalTrayManager.java:67
msgid "Restart I2P"
msgstr "Reštartovať I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:85
msgid "Stop I2P"
msgstr "Zastaviť I2P"
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:43
msgid "Tray icon configuration"
msgstr "Konfigurácia ikony v lište"
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:46
msgid "Should tray icon be enabled?"
msgstr "Mala by byť ikona v lište povolená?"

View File

@ -3,20 +3,22 @@
# This file is distributed under the same license as the desktopgui package.
# To contribute translations, see http://www.i2p2.de/newdevelopers
#
# <gribua@gmail.com>, 2011.
# Translators:
# Denis Blank <gribua@gmail.com>, 2011
# LinuxChata, 2014
msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: https://trac.i2p2.de/\n"
"POT-Creation-Date: 2011-03-03 18:29+0000\n"
"PO-Revision-Date: 2011-06-19 14:01+0000\n"
"Last-Translator: Pharmasolin <gribua@gmail.com>\n"
"Language-Team: Ukrainian (Ukraine) (http://www.transifex.net/projects/p/I2P/team/uk_UA/)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-01-09 19:27+0000\n"
"PO-Revision-Date: 2014-06-22 10:20+0000\n"
"Last-Translator: LinuxChata\n"
"Language-Team: Ukrainian (Ukraine) (http://www.transifex.com/projects/p/I2P/language/uk_UA/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: uk_UA\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
"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"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
msgid "Start I2P"
@ -46,12 +48,10 @@ msgstr "Перезапустити I2P"
msgid "Stop I2P"
msgstr "Зупинити I2P"
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:44
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:43
msgid "Tray icon configuration"
msgstr "Настройка трей-іконки"
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:47
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:46
msgid "Should tray icon be enabled?"
msgstr "Чм повинна трей-іконка бути включена?"
msgstr "Чи повинна трей-іконка бути включена?"

View File

@ -7,9 +7,6 @@ package net.i2p.desktopgui;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import java.awt.GraphicsEnvironment;
import net.i2p.I2PAppContext;
import net.i2p.desktopgui.router.RouterManager;
import net.i2p.desktopgui.util.*;
import net.i2p.util.Log;

View File

@ -1,28 +1,15 @@
package net.i2p.desktopgui;
import java.awt.AWTException;
import java.awt.Desktop;
import java.awt.Image;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.Toolkit;
import java.awt.TrayIcon;
import java.awt.Desktop.Action;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import javax.swing.SwingWorker;
import net.i2p.desktopgui.i18n.DesktopguiTranslator;
import net.i2p.desktopgui.router.RouterManager;
import net.i2p.desktopgui.util.BrowseException;
import net.i2p.desktopgui.util.ConfigurationManager;
import net.i2p.desktopgui.util.I2PDesktop;
import net.i2p.util.Log;
/**

View File

@ -32,7 +32,6 @@ public class DesktopguiConfigurationFrame extends javax.swing.JFrame {
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
@ -115,7 +114,7 @@ public class DesktopguiConfigurationFrame extends javax.swing.JFrame {
System.out.println("Enabling desktopgui");
}
try {
RouterManager.getRouterContext().setProperty(property, value);
RouterManager.getRouterContext().router().saveConfig(property, value);
} catch (Exception ex) {
Logger.getLogger(DesktopguiConfigurationFrame.class.getName()).log(Level.SEVERE, null, ex);
}

View File

@ -5,8 +5,6 @@ import java.io.IOException;
import org.tanukisoftware.wrapper.WrapperManager;
import net.i2p.I2PAppContext;
import net.i2p.desktopgui.i18n.DesktopguiTranslator;
import net.i2p.desktopgui.util.ConfigurationManager;
import net.i2p.router.Router;
import net.i2p.router.RouterContext;
import net.i2p.util.Log;

View File

@ -78,7 +78,7 @@ public class ConfigurationManager {
* @return The value of a configuration: true if found, defaultValue if not found.
*/
public boolean getBooleanConfiguration(String arg, boolean defaultValue) {
Boolean value = ((Boolean) booleanConfigurations.get("startWithI2P"));
Boolean value = booleanConfigurations.get("startWithI2P");
System.out.println(value);
if(value != null) {
return value;

View File

@ -1,13 +1,8 @@
package net.i2p.desktopgui.util;
import java.awt.Desktop;
import java.awt.TrayIcon;
import java.awt.Desktop.Action;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import net.i2p.desktopgui.router.RouterManager;
import net.i2p.util.Log;
public class I2PDesktop {

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

@ -31,7 +31,7 @@ abstract class ExtensionHandler {
public static final int ID_DHT = 3;
/** not using the option bit since the compact format is different */
public static final String TYPE_DHT = "i2p_dht";
/** Pieces * SHA1 Hash length, + 25% extra for file names, benconding overhead, etc */
/** Pieces * SHA1 Hash length, + 25% extra for file names, bencoding overhead, etc */
private static final int MAX_METADATA_SIZE = Storage.MAX_PIECES * 20 * 5 / 4;
private static final int PARALLEL_REQUESTS = 3;

View File

@ -76,6 +76,7 @@ public class I2PSnarkUtil {
public static final int MAX_CONNECTIONS = 16; // per torrent
public static final String PROP_MAX_BW = "i2cp.outboundBytesPerSecond";
public static final boolean DEFAULT_USE_DHT = true;
public static final String EEPGET_USER_AGENT = "I2PSnark";
public I2PSnarkUtil(I2PAppContext ctx) {
this(ctx, "i2psnark");
@ -252,6 +253,8 @@ public class I2PSnarkUtil {
opts.setProperty("i2p.streaming.enforceProtocol", "true");
if (opts.getProperty("i2p.streaming.disableRejectLogging") == null)
opts.setProperty("i2p.streaming.disableRejectLogging", "true");
if (opts.getProperty("i2p.streaming.answerPings") == null)
opts.setProperty("i2p.streaming.answerPings", "false");
_manager = I2PSocketManagerFactory.createManager(_i2cpHost, _i2cpPort, opts);
_connecting = false;
}
@ -391,6 +394,7 @@ public class I2PSnarkUtil {
}
}
EepGet get = new I2PSocketEepGet(_context, _manager, retries, out.getAbsolutePath(), fetchURL);
get.addHeader("User-Agent", EEPGET_USER_AGENT);
if (get.fetch(timeout)) {
if (_log.shouldLog(Log.DEBUG))
_log.debug("Fetch successful [" + url + "]: size=" + out.length());
@ -432,6 +436,7 @@ public class I2PSnarkUtil {
}
ByteArrayOutputStream out = new ByteArrayOutputStream(initialSize);
EepGet get = new I2PSocketEepGet(_context, _manager, retries, -1, maxSize, null, out, fetchURL);
get.addHeader("User-Agent", EEPGET_USER_AGENT);
if (get.fetch(timeout)) {
if (_log.shouldLog(Log.DEBUG))
_log.debug("Fetch successful [" + url + "]: size=" + out.size());

View File

@ -187,7 +187,7 @@ class MagnetState {
* @return true if this was the last piece
* @throws NPE, IllegalArgumentException, IOException, ...
*/
public MetaInfo buildMetaInfo() throws Exception {
private MetaInfo buildMetaInfo() throws Exception {
// top map has nothing in it but the info map (no announce)
Map<String, BEValue> map = new HashMap<String, BEValue>();
InputStream is = new ByteArrayInputStream(metainfoBytes);

View File

@ -156,11 +156,11 @@ public class MetaInfo
if (val == null) {
this.announce_list = null;
} else {
this.announce_list = new ArrayList();
this.announce_list = new ArrayList<List<String>>();
List<BEValue> bl1 = val.getList();
for (BEValue bev : bl1) {
List<BEValue> bl2 = bev.getList();
List<String> sl2 = new ArrayList();
List<String> sl2 = new ArrayList<String>();
for (BEValue bev2 : bl2) {
sl2.add(bev2.getString());
}
@ -220,7 +220,9 @@ public class MetaInfo
Object o = val.getValue();
// Is it supposed to be a number or a string?
// i2psnark does it as a string. BEP 27 doesn't say.
// Transmission does numbers.
// Transmission does numbers. So does libtorrent.
// We handle both as of 0.9.9.
// We switch to storing as number as of 0.9.14.
privateTorrent = "1".equals(o) ||
((o instanceof Number) && ((Number) o).intValue() == 1);
} else {
@ -259,9 +261,9 @@ public class MetaInfo
if (size == 0)
throw new InvalidBEncodingException("zero size files list");
List<List<String>> m_files = new ArrayList(size);
List<List<String>> m_files_utf8 = new ArrayList(size);
List<Long> m_lengths = new ArrayList(size);
List<List<String>> m_files = new ArrayList<List<String>>(size);
List<List<String>> m_files_utf8 = new ArrayList<List<String>>(size);
List<Long> m_lengths = new ArrayList<Long>(size);
long l = 0;
for (int i = 0; i < list.size(); i++)
{
@ -287,7 +289,7 @@ public class MetaInfo
if (path_length == 0)
throw new InvalidBEncodingException("zero size file path list");
List<String> file = new ArrayList(path_length);
List<String> file = new ArrayList<String>(path_length);
Iterator<BEValue> it = path_list.iterator();
while (it.hasNext()) {
String s = it.next().getString();
@ -310,7 +312,7 @@ public class MetaInfo
path_list = val.getList();
path_length = path_list.size();
if (path_length > 0) {
file = new ArrayList(path_length);
file = new ArrayList<String>(path_length);
it = path_list.iterator();
while (it.hasNext())
file.add(it.next().getString());
@ -515,9 +517,10 @@ public class MetaInfo
sha1.update(bs, off, length);
byte[] hash = sha1.digest();
for (int i = 0; i < 20; i++)
for (int i = 0; i < 20; i++) {
if (hash[i] != piece_hashes[20 * piece + i])
return false;
}
return true;
}
@ -537,9 +540,10 @@ public class MetaInfo
_log.warn("Error checking", ioe);
return false;
}
for (int i = 0; i < 20; i++)
for (int i = 0; i < 20; i++) {
if (hash[i] != piece_hashes[20 * piece + i])
return false;
}
return true;
}
@ -573,10 +577,10 @@ public class MetaInfo
*/
public MetaInfo reannounce(String announce) throws InvalidBEncodingException
{
Map<String, BEValue> m = new HashMap();
Map<String, BEValue> m = new HashMap<String, BEValue>();
if (announce != null)
m.put("announce", new BEValue(DataHelper.getUTF8(announce)));
Map info = createInfoMap();
Map<String, BEValue> info = createInfoMap();
m.put("info", new BEValue(info));
return new MetaInfo(m);
}
@ -586,12 +590,12 @@ public class MetaInfo
*/
public synchronized byte[] getTorrentData()
{
Map m = new HashMap();
Map<String, Object> m = new HashMap<String, Object>();
if (announce != null)
m.put("announce", announce);
if (announce_list != null)
m.put("announce-list", announce_list);
Map info = createInfoMap();
Map<String, BEValue> info = createInfoMap();
m.put("info", info);
// don't save this locally, we should only do this once
return BEncoder.bencode(m);
@ -615,31 +619,44 @@ public class MetaInfo
if (_log.shouldLog(Log.WARN))
_log.warn("Creating new infomap", new Exception());
// otherwise we must create it
Map info = new HashMap();
info.put("name", name);
Map<String, BEValue> info = new HashMap<String, BEValue>();
info.put("name", new BEValue(DataHelper.getUTF8(name)));
if (name_utf8 != null)
info.put("name.utf-8", name_utf8);
info.put("name.utf-8", new BEValue(DataHelper.getUTF8(name_utf8)));
// BEP 27
if (privateTorrent)
info.put("private", "1");
// switched to number in 0.9.14
//info.put("private", new BEValue(DataHelper.getUTF8("1")));
info.put("private", new BEValue(Integer.valueOf(1)));
info.put("piece length", Integer.valueOf(piece_length));
info.put("pieces", piece_hashes);
info.put("piece length", new BEValue(Integer.valueOf(piece_length)));
info.put("pieces", new BEValue(piece_hashes));
if (files == null)
info.put("length", Long.valueOf(length));
info.put("length", new BEValue(Long.valueOf(length)));
else
{
List l = new ArrayList();
List<BEValue> l = new ArrayList<BEValue>();
for (int i = 0; i < files.size(); i++)
{
Map file = new HashMap();
file.put("path", files.get(i));
if ( (files_utf8 != null) && (files_utf8.size() > i) )
file.put("path.utf-8", files_utf8.get(i));
file.put("length", lengths.get(i));
l.add(file);
Map<String, BEValue> file = new HashMap<String, BEValue>();
List<String> fi = files.get(i);
List<BEValue> befiles = new ArrayList<BEValue>(fi.size());
for (int j = 0; j < fi.size(); j++) {
befiles.add(new BEValue(DataHelper.getUTF8(fi.get(j))));
}
file.put("path", new BEValue(befiles));
if ( (files_utf8 != null) && (files_utf8.size() > i) ) {
List<String> fiu = files_utf8.get(i);
List<BEValue> beufiles = new ArrayList<BEValue>(fiu.size());
for (int j = 0; j < fiu.size(); j++) {
beufiles.add(new BEValue(DataHelper.getUTF8(fiu.get(j))));
}
file.put("path.utf-8", new BEValue(beufiles));
}
file.put("length", new BEValue(lengths.get(i)));
l.add(new BEValue(file));
}
info.put("files", l);
info.put("files", new BEValue(l));
}
// TODO if we add the ability for other keys in the first constructor

View File

@ -31,7 +31,7 @@ import net.i2p.util.SecureFile;
*
* @since 0.8.2
*/
class PartialPiece implements Comparable {
class PartialPiece implements Comparable<PartialPiece> {
// we store the piece so we can use it in compareTo()
private final Piece piece;
@ -295,8 +295,7 @@ class PartialPiece implements Comparable {
* then rarest first,
* then highest downloaded first
*/
public int compareTo(Object o) throws ClassCastException {
PartialPiece opp = (PartialPiece)o;
public int compareTo(PartialPiece opp) {
int d = this.piece.compareTo(opp.piece);
if (d != 0)
return d;

View File

@ -39,7 +39,7 @@ import net.i2p.util.Log;
import org.klomp.snark.bencode.BEValue;
public class Peer implements Comparable
public class Peer implements Comparable<Peer>
{
private final Log _log = I2PAppContext.getGlobalContext().logManager().getLog(Peer.class);
// Identifying property, the peer id of the other side.
@ -194,9 +194,8 @@ public class Peer implements Comparable
* Compares the PeerIDs.
* @deprecated unused?
*/
public int compareTo(Object o)
public int compareTo(Peer p)
{
Peer p = (Peer)o;
int rv = peerID.compareTo(p.peerID);
if (rv == 0) {
if (_id > p._id) return 1;

View File

@ -221,7 +221,8 @@ class PeerCheckerTask implements Runnable
peer.keepAlive();
// announce them to local tracker (TrackerClient does this too)
if (dht != null && (_runCount % 5) == 0) {
dht.announce(coordinator.getInfoHash(), peer.getPeerID().getDestHash());
dht.announce(coordinator.getInfoHash(), peer.getPeerID().getDestHash(),
peer.isCompleted());
}
}
@ -270,7 +271,7 @@ class PeerCheckerTask implements Runnable
// announce ourselves to local tracker (TrackerClient does this too)
if (dht != null && (_runCount % 16) == 0) {
dht.announce(coordinator.getInfoHash());
dht.announce(coordinator.getInfoHash(), coordinator.completed());
}
}
}

View File

@ -135,7 +135,7 @@ class PeerConnectionOut implements Runnable
nm = null;
}
if (m == null && nm != null)
if (nm != null)
{
m = nm;
//SimpleTimer.getInstance().removeEvent(nm.expireEvent);

View File

@ -1202,22 +1202,23 @@ class PeerCoordinator implements PeerListener
boolean skipped = false;
for(Piece piece : wantedPieces) {
if (piece.getId() == savedPiece) {
if (peer.isCompleted() && piece.getPeerCount() > 1) {
if (peer.isCompleted() && piece.getPeerCount() > 1 &&
wantedPieces.size() > 2*END_GAME_THRESHOLD) {
// Try to preserve rarest-first
// by not requesting a partial piece that non-seeders also have
// by not requesting a partial piece that at least two non-seeders also have
// from a seeder
boolean nonSeeds = false;
int nonSeeds = 0;
for (Peer pr : peers) {
PeerState state = pr.state;
if (state == null) continue;
BitField bf = state.bitfield;
if (bf == null) continue;
if (bf.get(savedPiece) && !pr.isCompleted()) {
nonSeeds = true;
break;
if (++nonSeeds > 1)
break;
}
}
if (nonSeeds) {
if (nonSeeds > 1) {
skipped = true;
break;
}

View File

@ -42,7 +42,7 @@ import org.klomp.snark.bencode.InvalidBEncodingException;
* and the PeerID is not required.
* Equality is now determined solely by the dest hash.
*/
class PeerID implements Comparable
public class PeerID implements Comparable<PeerID>
{
private byte[] id;
private Destination address;
@ -52,6 +52,7 @@ class PeerID implements Comparable
private boolean triedDestLookup;
private final int hash;
private final I2PSnarkUtil util;
private String _toStringCache;
public PeerID(byte[] id, Destination address)
{
@ -76,15 +77,15 @@ class PeerID implements Comparable
* Creates a PeerID from a Map containing BEncoded peer id, ip and
* port.
*/
public PeerID(Map m)
public PeerID(Map<String, BEValue> m)
throws InvalidBEncodingException, UnknownHostException
{
BEValue bevalue = (BEValue)m.get("peer id");
BEValue bevalue = m.get("peer id");
if (bevalue == null)
throw new InvalidBEncodingException("peer id missing");
id = bevalue.getBytes();
bevalue = (BEValue)m.get("ip");
bevalue = m.get("ip");
if (bevalue == null)
throw new InvalidBEncodingException("ip missing");
address = I2PSnarkUtil.getDestinationFromBase64(bevalue.getString());
@ -195,10 +196,8 @@ class PeerID implements Comparable
* Compares port, address and id.
* @deprecated unused? and will NPE now that address can be null?
*/
public int compareTo(Object o)
public int compareTo(PeerID pid)
{
PeerID pid = (PeerID)o;
int result = port - pid.port;
if (result != 0)
return result;
@ -218,13 +217,15 @@ class PeerID implements Comparable
}
/**
* 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;
@ -234,7 +235,8 @@ class PeerID implements Comparable
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

@ -37,8 +37,8 @@ class PeerMonitorTask implements Runnable
private final PeerCoordinator coordinator;
private long lastDownloaded = 0;
private long lastUploaded = 0;
//private long lastDownloaded = 0;
//private long lastUploaded = 0;
PeerMonitorTask(PeerCoordinator coordinator)
{

View File

@ -7,7 +7,7 @@ import java.util.Set;
* This class is used solely by PeerCoordinator.
* Caller must synchronize on many of these methods.
*/
class Piece implements Comparable {
class Piece implements Comparable<Piece> {
private final int id;
private final Set<PeerID> peers;
@ -26,11 +26,11 @@ class Piece implements Comparable {
* Highest priority first,
* then rarest first
*/
public int compareTo(Object o) throws ClassCastException {
int pdiff = ((Piece)o).priority - this.priority; // reverse
public int compareTo(Piece op) {
int pdiff = op.priority - this.priority; // reverse
if (pdiff != 0)
return pdiff;
return this.peers.size() - ((Piece)o).peers.size();
return this.peers.size() - op.peers.size();
}
@Override

View File

@ -69,8 +69,6 @@ public class Snark
"Commands: 'info', 'list', 'quit'.";
****/
// String indicating main activity
String activity = "Not started";
/****
private static class OOMListener implements I2PThread.OOMEventListener {
@ -227,7 +225,7 @@ public class Snark
private final CompleteListener completeListener;
private volatile boolean stopped;
private volatile boolean starting;
private byte[] id;
private final byte[] id;
private final byte[] infoHash;
private String additionalTrackerURL;
protected final I2PSnarkUtil _util;
@ -236,6 +234,8 @@ public class Snark
private volatile String trackerProblems;
private volatile int trackerSeenPeers;
private volatile boolean _autoStoppable;
// String indicating main activity
private volatile String activity = "Not started";
/** from main() via parseArguments() single torrent */
@ -317,7 +317,6 @@ public class Snark
*/
// Figure out what the torrent argument represents.
meta = null;
File f = null;
InputStream in = null;
byte[] x_infoHash = null;
@ -1152,8 +1151,8 @@ public class Snark
// System.out.println(); // We have all the disk space we need.
}
private boolean allChecked = false;
private boolean checking = false;
private boolean allChecked;
private boolean checking;
//private boolean prechecking = true;
public void storageChecked(Storage storage, int num, boolean checked)
@ -1230,6 +1229,7 @@ public class Snark
*/
final static int MIN_TOTAL_UPLOADERS = 4;
final static int MAX_TOTAL_UPLOADERS = 10;
public boolean overUploadLimit(int uploaders) {
if (_peerCoordinatorSet == null || uploaders <= 0)
return false;

View File

@ -7,6 +7,7 @@ import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@ -24,6 +25,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.*;
@ -112,7 +114,7 @@ public class SnarkManager implements CompleteListener {
* "name", "announceURL=websiteURL" pairs
* '=' in announceURL must be escaped as &#44;
*/
public static final String DEFAULT_TRACKERS[] = {
private static final String DEFAULT_TRACKERS[] = {
// "Postman", "http://YRgrgTLGnbTq2aZOZDJQ~o6Uk5k6TK-OZtx0St9pb0G-5EGYURZioxqYG8AQt~LgyyI~NCj6aYWpPO-150RcEvsfgXLR~CxkkZcVpgt6pns8SRc3Bi-QSAkXpJtloapRGcQfzTtwllokbdC-aMGpeDOjYLd8b5V9Im8wdCHYy7LRFxhEtGb~RL55DA8aYOgEXcTpr6RPPywbV~Qf3q5UK55el6Kex-6VCxreUnPEe4hmTAbqZNR7Fm0hpCiHKGoToRcygafpFqDw5frLXToYiqs9d4liyVB-BcOb0ihORbo0nS3CLmAwZGvdAP8BZ7cIYE3Z9IU9D1G8JCMxWarfKX1pix~6pIA-sp1gKlL1HhYhPMxwyxvuSqx34o3BqU7vdTYwWiLpGM~zU1~j9rHL7x60pVuYaXcFQDR4-QVy26b6Pt6BlAZoFmHhPcAuWfu-SFhjyZYsqzmEmHeYdAwa~HojSbofg0TMUgESRXMw6YThK1KXWeeJVeztGTz25sL8AAAA.i2p/announce.php=http://tracker.postman.i2p/"
// , "eBook", "http://E71FRom6PZNEqTN2Lr8P-sr23b7HJVC32KoGnVQjaX6zJiXwhJy2HsXob36Qmj81TYFZdewFZa9mSJ533UZgGyQkXo2ahctg82JKYZfDe5uDxAn1E9YPjxZCWJaFJh0S~UwSs~9AZ7UcauSJIoNtpxrtbmRNVFLqnkEDdLZi26TeucfOmiFmIWnVblLniWv3tG1boE9Abd-6j3FmYVrRucYuepAILYt6katmVNOk6sXmno1Eynrp~~MBuFq0Ko6~jsc2E2CRVYXDhGHEMdt-j6JUz5D7S2RIVzDRqQyAZLKJ7OdQDmI31przzmne1vOqqqLC~1xUumZVIvF~yOeJUGNjJ1Vx0J8i2BQIusn1pQJ6UCB~ZtZZLQtEb8EPVCfpeRi2ri1M5CyOuxN0V5ekmPHrYIBNevuTCRC26NP7ZS5VDgx1~NaC3A-CzJAE6f1QXi0wMI9aywNG5KGzOPifcsih8eyGyytvgLtrZtV7ykzYpPCS-rDfITncpn5hliPUAAAA.i2p/pub/bt/announce.php=http://de-ebook-archiv.i2p/pub/bt/"
// , "Gaytorrents", "http://uxPWHbK1OIj9HxquaXuhMiIvi21iK0~ZiG9d8G0840ZXIg0r6CbiV71xlsqmdnU6wm0T2LySriM0doW2gUigo-5BNkUquHwOjLROiETnB3ZR0Ml4IGa6QBPn1aAq2d9~g1r1nVjLE~pcFnXB~cNNS7kIhX1d6nLgYVZf0C2cZopEow2iWVUggGGnAA9mHjE86zLEnTvAyhbAMTqDQJhEuLa0ZYSORqzJDMkQt90MV4YMjX1ICY6RfUSFmxEqu0yWTrkHsTtRw48l~dz9wpIgc0a0T9C~eeWvmBFTqlJPtQZwntpNeH~jF7nlYzB58olgV2HHFYpVYD87DYNzTnmNWxCJ5AfDorm6AIUCV2qaE7tZtI1h6fbmGpGlPyW~Kw5GXrRfJwNvr6ajwAVi~bPVnrBwDZezHkfW4slOO8FACPR28EQvaTu9nwhAbqESxV2hCTq6vQSGjuxHeOuzBOEvRWkLKOHWTC09t2DbJ94FSqETmZopTB1ukEmaxRWbKSIaAAAA.i2p/announce.php=http://gaytorrents.i2p/"
@ -129,6 +131,17 @@ public class SnarkManager implements CompleteListener {
// ,"Exotrack", "http://blbgywsjubw3d2zih2giokakhe3o2cko7jtte4risb3hohbcoyva.b32.i2p/announce.php=http://exotrack.i2p/"
};
public static final Set<String> DEFAULT_TRACKER_ANNOUNCES;
static {
Set<String> ann = new HashSet();
for (int i = 1; i < DEFAULT_TRACKERS.length; i += 2) {
String urls[] = DEFAULT_TRACKERS[i].split("=", 2);
ann.add(urls[0]);
}
DEFAULT_TRACKER_ANNOUNCES = Collections.unmodifiableSet(ann);
}
/** comma delimited list of name=announceURL=baseURL for the trackers to be displayed */
public static final String PROP_TRACKERS = "i2psnark.trackers";
@ -187,7 +200,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);
@ -424,7 +439,7 @@ public class SnarkManager implements CompleteListener {
String i2cpHost = _config.getProperty(PROP_I2CP_HOST);
int i2cpPort = getInt(PROP_I2CP_PORT, 7654);
String opts = _config.getProperty(PROP_I2CP_OPTS);
Map i2cpOpts = new HashMap();
Map<String, String> i2cpOpts = new HashMap<String, String>();
if (opts != null) {
StringTokenizer tok = new StringTokenizer(opts, " ");
while (tok.hasMoreTokens()) {
@ -1652,7 +1667,7 @@ public class SnarkManager implements CompleteListener {
*/
private void monitorTorrents(File dir) {
String fileNames[] = dir.list(TorrentFilenameFilter.instance());
List<String> foundNames = new ArrayList(0);
List<String> foundNames = new ArrayList<String>(0);
if (fileNames != null) {
for (int i = 0; i < fileNames.length; i++) {
try {
@ -1738,7 +1753,7 @@ public class SnarkManager implements CompleteListener {
* @since 0.9.1
*/
public List<Tracker> getSortedTrackers() {
List<Tracker> rv = new ArrayList(_trackerMap.values());
List<Tracker> rv = new ArrayList<Tracker>(_trackerMap.values());
Collections.sort(rv, new IgnoreCaseComparator());
return rv;
}
@ -1955,7 +1970,7 @@ public class SnarkManager implements CompleteListener {
* ignore case, current locale
* @since 0.9
*/
private static class IgnoreCaseComparator implements Comparator<Tracker> {
private static class IgnoreCaseComparator implements Comparator<Tracker>, Serializable {
public int compare(Tracker l, Tracker r) {
return l.name.toLowerCase().compareTo(r.name.toLowerCase());
}

View File

@ -518,7 +518,9 @@ public class Storage
// Create base as file.
if (_log.shouldLog(Log.INFO))
_log.info("Creating/Checking file: " + base);
if (!base.createNewFile() && !base.exists())
// createNewFile() can throw a "Permission denied" IOE even if the file exists???
// so do it second
if (!base.exists() && !base.createNewFile())
throw new IOException("Could not create file " + base);
_torrentFiles.add(new TorrentFile(base, base, metainfo.getTotalLength()));
@ -714,7 +716,9 @@ public class Storage
f = new File(base, name);
else
f = new SecureFile(base, name);
if (!f.createNewFile() && !f.exists())
// createNewFile() can throw a "Permission denied" IOE even if the file exists???
// so do it second
if (!f.exists() && !f.createNewFile())
throw new IOException("Could not create file " + f);
}
}

View File

@ -71,6 +71,7 @@ public class TrackerClient implements Runnable {
private static final String COMPLETED_EVENT = "completed";
private static final String STOPPED_EVENT = "stopped";
private static final String NOT_REGISTERED = "torrent not registered"; //bytemonsoon
private static final String NOT_REGISTERED_2 = "torrent not found"; // diftracker
/** this is our equivalent to router.utorrent.com for bootstrap */
private static final String DEFAULT_BACKUP_TRACKER = "http://tracker.welterde.i2p/a";
@ -82,8 +83,11 @@ public class TrackerClient implements Runnable {
private final static int MAX_CONSEC_FAILS = 5; // slow down after this
private final static int LONG_SLEEP = 30*60*1000; // sleep a while after lots of fails
private final static long MIN_TRACKER_ANNOUNCE_INTERVAL = 15*60*1000;
private final static long MIN_DHT_ANNOUNCE_INTERVAL = 10*60*1000;
private final static long MIN_DHT_ANNOUNCE_INTERVAL = 39*60*1000;
/** No guidance in BEP 5; standard practice is K (=8) */
private static final int DHT_ANNOUNCE_PEERS = 4;
public static final int PORT = 6881;
private static final int MAX_TRACKERS = 12;
private final I2PSnarkUtil _util;
private final MetaInfo meta;
@ -106,6 +110,8 @@ public class TrackerClient implements Runnable {
// these 2 used in loop()
private volatile boolean runStarted;
private volatile int consecutiveFails;
// if we don't want anything else.
// Not necessarily seeding, as we may have skipped some files.
private boolean completed;
private volatile boolean _fastUnannounce;
private long lastDHTAnnounce;
@ -288,6 +294,7 @@ public class TrackerClient implements Runnable {
}
// announce list
// We completely ignore the BEP 12 processing rules
if (meta != null && !meta.isPrivate()) {
List<List<String>> list = meta.getAnnounceList();
if (list != null) {
@ -300,6 +307,12 @@ public class TrackerClient implements Runnable {
_log.debug("Additional announce (list): [" + url + "] for infoHash: " + infoHash);
}
}
if (trackers.size() > 2) {
// shuffle everything but the primary
TCTracker pri = trackers.remove(0);
Collections.shuffle(trackers, _util.getContext().random());
trackers.add(0, pri);
}
}
}
@ -345,7 +358,13 @@ public class TrackerClient implements Runnable {
private boolean isNewValidTracker(Set<Hash> existing, String ann) {
Hash h = getHostHash(ann);
if (h == null) {
_log.error("Bad announce URL: [" + ann + ']');
if (_log.shouldLog(Log.WARN))
_log.warn("Bad announce URL: [" + ann + ']');
return false;
}
if (existing.size() >= MAX_TRACKERS) {
if (_log.shouldLog(Log.INFO))
_log.info("Not using announce URL, we have enough: [" + ann + ']');
return false;
}
boolean rv = existing.add(h);
@ -375,7 +394,7 @@ public class TrackerClient implements Runnable {
// Local DHT tracker announce
DHT dht = _util.getDHT();
if (dht != null && (meta == null || !meta.isPrivate()))
dht.announce(snark.getInfoHash());
dht.announce(snark.getInfoHash(), coordinator.completed());
int oldSeenPeers = snark.getTrackerSeenPeers();
int maxSeenPeers = 0;
@ -509,7 +528,7 @@ public class TrackerClient implements Runnable {
coordinator.getPeerCount() <= 0 &&
_util.getContext().clock().now() > _startedOn + 2*60*60*1000 &&
snark.getTotalLength() > 0 &&
uploaded >= 2 * snark.getTotalLength()) {
uploaded >= snark.getTotalLength() * 3 / 2) {
if (_log.shouldLog(Log.WARN))
_log.warn("Auto stopping " + snark.getBaseName());
snark.setAutoStoppable(false);
@ -523,7 +542,8 @@ public class TrackerClient implements Runnable {
DHT dht = _util.getDHT();
if (dht != null) {
for (Peer peer : peers) {
dht.announce(snark.getInfoHash(), peer.getPeerID().getDestHash());
dht.announce(snark.getInfoHash(), peer.getPeerID().getDestHash(),
false); // TODO actual seed/leech status
}
}
@ -556,13 +576,15 @@ public class TrackerClient implements Runnable {
// don't show secondary tracker problems to the user
if (tr.isPrimary)
snark.setTrackerProblems(tr.trackerProblems);
if (tr.trackerProblems.toLowerCase(Locale.US).startsWith(NOT_REGISTERED)) {
String tplc = tr.trackerProblems.toLowerCase(Locale.US);
if (tplc.startsWith(NOT_REGISTERED) || tplc.startsWith(NOT_REGISTERED_2)) {
// Give a guy some time to register it if using opentrackers too
//if (trckrs.size() == 1) {
// stop = true;
// snark.stopTorrent();
//} else { // hopefully each on the opentrackers list is really open
if (tr.registerFails++ > MAX_REGISTER_FAILS)
if (tr.registerFails++ > MAX_REGISTER_FAILS ||
(!tr.isPrimary && tr.registerFails > MAX_REGISTER_FAILS / 2))
tr.stop = true;
//
}
@ -636,7 +658,9 @@ public class TrackerClient implements Runnable {
numwant = 1;
else
numwant = _util.getMaxConnections();
Collection<Hash> hashes = dht.getPeersAndAnnounce(snark.getInfoHash(), numwant, 5*60*1000, 1, 3*60*1000);
Collection<Hash> hashes = dht.getPeersAndAnnounce(snark.getInfoHash(), numwant,
5*60*1000, DHT_ANNOUNCE_PEERS, 3*60*1000,
coordinator.completed(), numwant <= 1);
if (!hashes.isEmpty()) {
runStarted = true;
lastDHTAnnounce = _util.getContext().clock().now();
@ -836,8 +860,7 @@ public class TrackerClient implements Runnable {
return false;
}
return url.getProtocol().equals("http") &&
(url.getHost().endsWith(".i2p") || url.getHost().equals("i2p")) &&
url.getPort() < 0;
(url.getHost().endsWith(".i2p") || url.getHost().equals("i2p"));
}
/**
@ -852,7 +875,7 @@ public class TrackerClient implements Runnable {
} catch (MalformedURLException mue) {
return null;
}
if (url.getPort() >= 0 || !url.getProtocol().equals("http"))
if (!url.getProtocol().equals("http"))
return null;
String host = url.getHost();
if (host.endsWith(".i2p"))

View File

@ -62,7 +62,7 @@ class TrackerInfo
private TrackerInfo(Map<String, BEValue> m, byte[] my_id, byte[] infohash, MetaInfo metainfo, I2PSnarkUtil util)
throws IOException
{
BEValue reason = (BEValue)m.get("failure reason");
BEValue reason = m.get("failure reason");
if (reason != null)
{
failure_reason = reason.getString();
@ -72,13 +72,13 @@ class TrackerInfo
else
{
failure_reason = null;
BEValue beInterval = (BEValue)m.get("interval");
BEValue beInterval = m.get("interval");
if (beInterval == null)
throw new InvalidBEncodingException("No interval given");
else
interval = beInterval.getInt();
BEValue bePeers = (BEValue)m.get("peers");
BEValue bePeers = m.get("peers");
if (bePeers == null) {
peers = Collections.emptySet();
} else {
@ -93,14 +93,14 @@ class TrackerInfo
peers = p;
}
BEValue bev = (BEValue)m.get("complete");
BEValue bev = m.get("complete");
if (bev != null) try {
complete = bev.getInt();
if (complete < 0)
complete = 0;
} catch (InvalidBEncodingException ibe) {}
bev = (BEValue)m.get("incomplete");
bev = m.get("incomplete");
if (bev != null) try {
incomplete = bev.getInt();
if (incomplete < 0)

View File

@ -21,6 +21,7 @@
package org.klomp.snark.bencode;
import java.io.EOFException;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigInteger;
@ -232,10 +233,8 @@ public class BDecoder
if (c == '-')
{
c = read();
if (c == '0')
throw new InvalidBEncodingException("Negative zero not allowed");
chars.append((char)c);
c = read();
}
if (c < '1' || c > '9')
@ -281,7 +280,7 @@ public class BDecoder
+ (char)c + "'");
indicator = 0;
List result = new ArrayList();
List<BEValue> result = new ArrayList<BEValue>();
c = getNextIndicator();
while (c != 'e')
{
@ -308,7 +307,7 @@ public class BDecoder
+ (char)c + "'");
indicator = 0;
Map result = new HashMap();
Map<String, BEValue> result = new HashMap<String, BEValue>();
c = getNextIndicator();
while (c != 'e')
{
@ -376,4 +375,21 @@ public class BDecoder
return result;
}
/**
* prints out the decoded data
* @since 0.9.14
*/
public static void main(String[] args) {
if (args.length != 1) {
System.err.println("Usage: BDecoder file.torrent");
System.exit(1);
}
try {
BEValue bev = bdecode(new FileInputStream(args[0]));
System.out.println(bev.toString());
} catch (IOException ioe) {
ioe.printStackTrace();
System.exit(1);
}
}
}

View File

@ -49,12 +49,12 @@ public class BEValue
this.value = value;
}
public BEValue(List value)
public BEValue(List<BEValue> value)
{
this.value = value;
}
public BEValue(Map value)
public BEValue(Map<String, BEValue> value)
{
this.value = value;
}
@ -142,11 +142,12 @@ public class BEValue
* succeeds when the BEValue is actually a List, otherwise it will
* throw a InvalidBEncodingException.
*/
@SuppressWarnings("unchecked")
public List<BEValue> getList() throws InvalidBEncodingException
{
try
{
return (List)value;
return (List<BEValue>)value;
}
catch (ClassCastException cce)
{
@ -159,11 +160,12 @@ public class BEValue
* values. This operation only succeeds when the BEValue is actually
* a Map, otherwise it will throw a InvalidBEncodingException.
*/
@SuppressWarnings("unchecked")
public Map<String, BEValue> getMap() throws InvalidBEncodingException
{
try
{
return (Map)value;
return (Map<String, BEValue>)value;
}
catch (ClassCastException cce)
{

View File

@ -59,9 +59,9 @@ public class BEncoder
else if (o instanceof Number)
bencode((Number)o, out);
else if (o instanceof List)
bencode((List)o, out);
bencode((List<?>)o, out);
else if (o instanceof Map)
bencode((Map<String, Object>)o, out);
bencode((Map<?, ?>)o, out);
else if (o instanceof BEValue)
bencode(((BEValue)o).getValue(), out);
else
@ -110,7 +110,7 @@ public class BEncoder
out.write('e');
}
public static byte[] bencode(List l)
public static byte[] bencode(List<?> l)
{
try
{
@ -124,10 +124,10 @@ public class BEncoder
}
}
public static void bencode(List l, OutputStream out) throws IOException
public static void bencode(List<?> l, OutputStream out) throws IOException
{
out.write('l');
Iterator it = l.iterator();
Iterator<?> it = l.iterator();
while (it.hasNext())
bencode(it.next(), out);
out.write('e');
@ -155,7 +155,7 @@ public class BEncoder
out.write(bs);
}
public static byte[] bencode(Map<String, Object> m)
public static byte[] bencode(Map<?, ?> m)
{
try
{
@ -169,23 +169,29 @@ public class BEncoder
}
}
public static void bencode(Map<String, Object> m, OutputStream out) throws IOException
public static void bencode(Map<?, ?> m, OutputStream out)
throws IOException, IllegalArgumentException
{
out.write('d');
// Keys must be sorted. XXX - But is this the correct order?
Set<String> s = m.keySet();
List<String> l = new ArrayList(s);
Set<?> s = m.keySet();
List<String> l = new ArrayList<String>(s.size());
for (Object k : s) {
// Keys must be Strings.
if (String.class.isAssignableFrom(k.getClass()))
l.add((String) k);
else
throw new IllegalArgumentException("Cannot bencode map: contains non-String key of type " + k.getClass());
}
Collections.sort(l);
Iterator<String> it = l.iterator();
while(it.hasNext())
{
// Keys must be Strings.
String key = it.next();
Object value = m.get(key);
bencode(key, out);
bencode(value, out);
bencode(m.get(key), out);
}
out.write('e');

View File

@ -36,7 +36,7 @@ public interface DHT {
public void ping(Destination dest, int port);
/**
* Get peers for a torrent, and announce to the closest node we find.
* Get peers for a torrent, and announce to the closest annMax nodes we find.
* Blocking!
* Caller should run in a thread.
*
@ -45,9 +45,13 @@ public interface DHT {
* @param maxWait the maximum time to wait (ms) must be > 0
* @param annMax the number of peers to announce to
* @param annMaxWait the maximum total time to wait for announces, may be 0 to return immediately without waiting for acks
* @param isSeed true if seed, false if leech
* @param noSeeds true if we do not want seeds in the result
* @return possibly empty (never null)
*/
public Collection<Hash> getPeersAndAnnounce(byte[] ih, int max, long maxWait, int annMax, long annMaxWait);
public Collection<Hash> getPeersAndAnnounce(byte[] ih, int max, long maxWait,
int annMax, long annMaxWait,
boolean isSeed, boolean noSeeds);
/**
* Announce to ourselves.
@ -55,16 +59,16 @@ public interface DHT {
*
* @param ih the Info Hash (torrent)
*/
public void announce(byte[] ih);
public void announce(byte[] ih, boolean isSeed);
/**
* Announce somebody else we know about.
* Announce somebody else we know about to ourselves.
* Non-blocking.
*
* @param ih the Info Hash (torrent)
* @param peerHash the peer's Hash
*/
public void announce(byte[] ih, byte[] peerHash);
public void announce(byte[] ih, byte[] peerHash, boolean isSeed);
/**
* Remove reference to ourselves in the local tracker.
@ -84,9 +88,10 @@ public interface DHT {
*
* @param ih the Info Hash (torrent)
* @param maxWait the maximum total time to wait (ms) or 0 to do all in parallel and return immediately.
* @param isSeed true if seed, false if leech
* @return the number of successful announces, not counting ourselves.
*/
public int announce(byte[] ih, int max, long maxWait);
public int announce(byte[] ih, int max, long maxWait, boolean isSeed);
/**
* Stop everything.

View File

@ -34,7 +34,8 @@ class DHTTracker {
/** stagger with other cleaners */
private static final long CLEAN_TIME = 199*1000;
private static final long MAX_EXPIRE_TIME = 45*60*1000;
/** no guidance in BEP 5; Vuze is 8h */
private static final long MAX_EXPIRE_TIME = 3*60*60*1000L;
private static final long MIN_EXPIRE_TIME = 15*60*1000;
private static final long DELTA_EXPIRE_TIME = 3*60*1000;
private static final int MAX_PEERS = 2000;
@ -59,7 +60,7 @@ class DHTTracker {
_isRunning = false;
}
void announce(InfoHash ih, Hash hash) {
void announce(InfoHash ih, Hash hash, boolean isSeed) {
if (_log.shouldLog(Log.DEBUG))
_log.debug("Announce " + hash + " for " + ih);
Peers peers = _torrents.get(ih);
@ -78,6 +79,9 @@ class DHTTracker {
if (peer2 != null)
peer = peer2;
peer.setLastSeen(_context.clock().now());
// don't let false trump true, as not all sources know the seed status
if (isSeed)
peer.setSeed(true);
} else {
// We could update setLastSeen if he is already
// in there, but that would tend to keep
@ -93,26 +97,42 @@ class DHTTracker {
Peers peers = _torrents.get(ih);
if (peers == null)
return;
Peer peer = new Peer(hash.getData());
peers.remove(peer);
peers.remove(hash);
}
/**
* Caller's responsibility to remove himself from the list
*
* @param noSeeds true if we do not want seeds in the result
* @return list or empty list (never null)
*/
List<Hash> getPeers(InfoHash ih, int max) {
List<Hash> getPeers(InfoHash ih, int max, boolean noSeeds) {
Peers peers = _torrents.get(ih);
if (peers == null)
if (peers == null || max <= 0)
return Collections.emptyList();
int size = peers.size();
List<Hash> rv = new ArrayList<Hash>(peers.values());
if (max < size) {
Collections.shuffle(rv, _context.random());
List<Peer> rv = new ArrayList<Peer>(peers.values());
int size = rv.size();
if (max < size)
Collections.shuffle(rv, _context.random());
if (noSeeds) {
int i = 0;
for (Iterator<Peer> iter = rv.iterator(); iter.hasNext(); ) {
if (iter.next().isSeed())
iter.remove();
else if (++i >= max)
break;
}
if (max < rv.size())
rv = rv.subList(0, max);
} else {
if (max < size)
rv = rv.subList(0, max);
}
return rv;
// a Peer is a Hash
List rv1 = rv;
List<Hash> rv2 = rv1;
return rv2;
}
/**

View File

@ -10,6 +10,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
@ -305,7 +306,7 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
}
/**
* Get peers for a torrent, and announce to the closest node we find.
* Get peers for a torrent, and announce to the closest annMax nodes we find.
* This is an iterative lookup in the DHT.
* Blocking!
* Caller should run in a thread.
@ -315,12 +316,16 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
* @param maxWait the maximum time to wait (ms) must be > 0
* @param annMax the number of peers to announce to
* @param annMaxWait the maximum total time to wait for announces, may be 0 to return immediately without waiting for acks
* @param isSeed true if seed, false if leech
* @param noSeeds true if we do not want seeds in the result
* @return possibly empty (never null)
*/
public Collection<Hash> getPeersAndAnnounce(byte[] ih, int max, long maxWait, int annMax, long annMaxWait) {
public Collection<Hash> getPeersAndAnnounce(byte[] ih, int max, long maxWait,
int annMax, long annMaxWait,
boolean isSeed, boolean noSeeds) {
// check local tracker first
InfoHash iHash = new InfoHash(ih);
Collection<Hash> rv = _tracker.getPeers(iHash, max);
Collection<Hash> rv = _tracker.getPeers(iHash, max, noSeeds);
rv.remove(_myNodeInfo.getHash());
if (rv.size() >= max)
return rv;
@ -356,7 +361,7 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
if (_log.shouldLog(Log.DEBUG))
_log.debug("Try " + i + ": " + nInfo);
ReplyWaiter waiter = sendGetPeers(nInfo, iHash);
ReplyWaiter waiter = sendGetPeers(nInfo, iHash, noSeeds);
if (waiter == null)
continue;
synchronized(waiter) {
@ -415,7 +420,7 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
}
// now announce
if (!heardFrom.isEmpty()) {
announce(ih);
announce(ih, isSeed);
// announce to the closest we've heard from
int annCnt = 0;
long start = _context.clock().now();
@ -424,7 +429,7 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
if (_log.shouldLog(Log.INFO))
_log.info("Announcing to closest from get peers: " + annTo);
long toWait = annMaxWait > 0 ? Math.min(annMaxWait, 60*1000) : 0;
if (announce(ih, annTo, toWait))
if (announce(ih, annTo, toWait, isSeed))
annCnt++;
if (annMaxWait > 0) {
annMaxWait -= _context.clock().now() - start;
@ -437,7 +442,7 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
// so this is essentially just a retry
if (_log.shouldLog(Log.INFO))
_log.info("Announcing to closest in kbuckets after get peers failed");
announce(ih, annMax, annMaxWait);
announce(ih, annMax, annMaxWait, isSeed);
}
if (_log.shouldLog(Log.INFO)) {
_log.info("Finished get Peers, returning " + rv.size());
@ -454,21 +459,21 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
*
* @param ih the Info Hash (torrent)
*/
public void announce(byte[] ih) {
public void announce(byte[] ih, boolean isSeed) {
InfoHash iHash = new InfoHash(ih);
_tracker.announce(iHash, _myNodeInfo.getHash());
_tracker.announce(iHash, _myNodeInfo.getHash(), isSeed);
}
/**
* Announce somebody else we know about.
* Announce somebody else we know about to ourselves.
* Non-blocking.
*
* @param ih the Info Hash (torrent)
* @param peerHash the peer's Hash
*/
public void announce(byte[] ih, byte[] peerHash) {
public void announce(byte[] ih, byte[] peerHash, boolean isSeed) {
InfoHash iHash = new InfoHash(ih);
_tracker.announce(iHash, new Hash(peerHash));
_tracker.announce(iHash, new Hash(peerHash), isSeed);
// Do NOT do this, corrupts the Hash cache and the Peer ID
//_tracker.announce(iHash, Hash.create(peerHash));
}
@ -500,10 +505,11 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
* @param ih the Info Hash (torrent)
* @param max maximum number of peers to announce to
* @param maxWait the maximum total time to wait (ms) or 0 to do all in parallel and return immediately.
* @param isSeed true if seed, false if leech
* @return the number of successful announces, not counting ourselves.
*/
public int announce(byte[] ih, int max, long maxWait) {
announce(ih);
public int announce(byte[] ih, int max, long maxWait, boolean isSeed) {
announce(ih, isSeed);
int rv = 0;
long start = _context.clock().now();
InfoHash iHash = new InfoHash(ih);
@ -513,7 +519,7 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
for (NodeInfo nInfo : nodes) {
if (!_isRunning)
break;
if (announce(ih, nInfo, Math.min(maxWait, 60*1000)))
if (announce(ih, nInfo, Math.min(maxWait, 60*1000), isSeed))
rv++;
maxWait -= _context.clock().now() - start;
if (maxWait < 1000)
@ -531,9 +537,10 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
* @param ih the Info Hash (torrent)
* @param nInfo the peer to announce to
* @param maxWait the maximum time to wait (ms) or 0 to return immediately.
* @param isSeed true if seed, false if leech
* @return success
*/
private boolean announce(byte[] ih, NodeInfo nInfo, long maxWait) {
private boolean announce(byte[] ih, NodeInfo nInfo, long maxWait, boolean isSeed) {
InfoHash iHash = new InfoHash(ih);
// it isn't clear from BEP 5 if a token is bound to a single infohash?
// for now, just bind to the NID
@ -549,7 +556,7 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
return false;
if (_log.shouldLog(Log.INFO))
_log.info("No token for announce to " + nInfo + ", sending get_peers first");
ReplyWaiter waiter = sendGetPeers(nInfo, iHash);
ReplyWaiter waiter = sendGetPeers(nInfo, iHash, false);
if (waiter == null)
return false;
long start = _context.clock().now();
@ -580,7 +587,7 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
}
// send and wait on rcv msg lock unless maxWait <= 0
ReplyWaiter waiter = sendAnnouncePeer(nInfo, iHash, token);
ReplyWaiter waiter = sendAnnouncePeer(nInfo, iHash, token, isSeed);
if (waiter == null)
return false;
if (maxWait <= 0)
@ -722,15 +729,18 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
* Blocking if we have to look up the dest for the nodeinfo
*
* @param nInfo who to send it to
* @param noSeeds true if we do not want seeds in the result
* @return null on error
*/
private ReplyWaiter sendGetPeers(NodeInfo nInfo, InfoHash ih) {
private ReplyWaiter sendGetPeers(NodeInfo nInfo, InfoHash ih, boolean noSeeds) {
if (_log.shouldLog(Log.INFO))
_log.info("Sending get peers of " + ih + " to: " + nInfo);
_log.info("Sending get peers of " + ih + " to: " + nInfo + " noseeds? " + noSeeds);
Map<String, Object> map = new HashMap<String, Object>();
map.put("q", "get_peers");
Map<String, Object> args = new HashMap<String, Object>();
args.put("info_hash", ih.getData());
if (noSeeds)
args.put("noseed", Integer.valueOf(1));
map.put("a", args);
ReplyWaiter rv = sendQuery(nInfo, map, true);
// save the InfoHash so we can get it later
@ -743,11 +753,12 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
* Non-blocking, will fail if we don't have the dest for the nodeinfo
*
* @param nInfo who to send it to
* @param isSeed true if seed, false if leech
* @return null on error
*/
private ReplyWaiter sendAnnouncePeer(NodeInfo nInfo, InfoHash ih, Token token) {
private ReplyWaiter sendAnnouncePeer(NodeInfo nInfo, InfoHash ih, Token token, boolean isSeed) {
if (_log.shouldLog(Log.INFO))
_log.info("Sending announce of " + ih + " to: " + nInfo);
_log.info("Sending announce of " + ih + " to: " + nInfo + " seed? " + isSeed);
Map<String, Object> map = new HashMap<String, Object>();
map.put("q", "announce_peer");
Map<String, Object> args = new HashMap<String, Object>();
@ -755,6 +766,7 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
// port ignored
args.put("port", Integer.valueOf(TrackerClient.PORT));
args.put("token", token.getData());
args.put("seed", Integer.valueOf(isSeed ? 1 : 0));
map.put("a", args);
// an announce need not be signed, we have a token
ReplyWaiter rv = sendQuery(nInfo, map, false);
@ -814,16 +826,20 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
// All errors use the response port.
/**
* Unused
*
* @param nInfo who to send it to
* @return success
*/
private boolean sendError(NodeInfo nInfo, MsgID msgID, int err, String msg) {
if (_log.shouldLog(Log.INFO))
_log.info("Sending error " + msg + " to: " + nInfo);
Map<String, Object> map = new HashMap<String, Object>();
Map<String, Object> resps = new HashMap<String, Object>();
map.put("r", resps);
return sendResponse(nInfo, msgID, map);
Map<String, Object> map = new HashMap<String, Object>(4);
List<Object> error = new ArrayList(2);
error.add(Integer.valueOf(err));
error.add(msg);
map.put("e", error);
return sendError(nInfo, msgID, map);
}
// Low-level send methods
@ -910,7 +926,8 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
}
/**
* @param toPort the query port, we will increment here
* Unused
*
* @return success
*/
private boolean sendError(NodeInfo nInfo, MsgID msgID, Map<String, Object> map) {
@ -1113,14 +1130,22 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
} else if (method.equals("get_peers")) {
byte[] hash = args.get("info_hash").getBytes();
InfoHash ih = new InfoHash(hash);
receiveGetPeers(msgID, nInfo, ih);
boolean noSeeds = false;
BEValue nos = args.get("noseed");
if (nos != null)
noSeeds = nos.getInt() == 1;
receiveGetPeers(msgID, nInfo, ih, noSeeds);
} else if (method.equals("announce_peer")) {
byte[] hash = args.get("info_hash").getBytes();
InfoHash ih = new InfoHash(hash);
// this is the "TCP" port, we don't care
//int port = args.get("port").getInt();
byte[] token = args.get("token").getBytes();
receiveAnnouncePeer(msgID, ih, token);
boolean isSeed = false;
BEValue iss = args.get("seed");
if (iss != null)
isSeed = iss.getInt() == 1;
receiveAnnouncePeer(msgID, ih, token, isSeed);
} else {
if (_log.shouldLog(Log.WARN))
_log.warn("Unknown query method rcvd: " + method);
@ -1233,18 +1258,22 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
/**
* Handle and respond to the query
*/
private void receiveGetPeers(MsgID msgID, NodeInfo nInfo, InfoHash ih) throws InvalidBEncodingException {
private void receiveGetPeers(MsgID msgID, NodeInfo nInfo,
InfoHash ih, boolean noSeeds) throws InvalidBEncodingException {
if (_log.shouldLog(Log.INFO))
_log.info("Rcvd get_peers from: " + nInfo + " for: " + ih);
_log.info("Rcvd get_peers from: " + nInfo + " for: " + ih + " noseeds? " + noSeeds);
// generate and save random token
Token token = new Token(_context);
_outgoingTokens.put(token, nInfo);
if (_log.shouldLog(Log.INFO))
_log.info("Stored new OB token: " + token + " for: " + nInfo);
List<Hash> peers = _tracker.getPeers(ih, MAX_WANT);
List<Hash> peers = _tracker.getPeers(ih, MAX_WANT, noSeeds);
// Check this before removing him, so we don't needlessly send nodes
// if he's the only one on the torrent.
boolean noPeers = peers.isEmpty();
peers.remove(nInfo.getHash()); // him
if (peers.isEmpty()) {
if (noPeers) {
// similar to find node, but with token
// get closest from DHT
List<NodeInfo> nodes = _knownNodes.findClosest(ih, K);
@ -1256,9 +1285,14 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
}
sendNodes(nInfo, msgID, token, nodeArray);
} else {
List<byte[]> hashes = new ArrayList<byte[]>(peers.size());
for (Hash peer : peers) {
hashes.add(peer.getData());
List<byte[]> hashes;
if (peers.isEmpty()) {
hashes = Collections.EMPTY_LIST;
} else {
hashes = new ArrayList<byte[]>(peers.size());
for (Hash peer : peers) {
hashes.add(peer.getData());
}
}
sendPeers(nInfo, msgID, token, hashes);
}
@ -1269,7 +1303,8 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
* We have no node info here, it came on response port, we have to get it from the token.
* So we can't verify that it came from the same peer, as BEP 5 specifies.
*/
private void receiveAnnouncePeer(MsgID msgID, InfoHash ih, byte[] tok) throws InvalidBEncodingException {
private void receiveAnnouncePeer(MsgID msgID, InfoHash ih,
byte[] tok, boolean isSeed) throws InvalidBEncodingException {
Token token = new Token(tok);
NodeInfo nInfo = _outgoingTokens.get(token);
if (nInfo == null) {
@ -1280,9 +1315,9 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
return;
}
if (_log.shouldLog(Log.INFO))
_log.info("Rcvd announce from: " + nInfo + " for: " + ih);
_log.info("Rcvd announce from: " + nInfo + " for: " + ih + " seed? " + isSeed);
_tracker.announce(ih, nInfo.getHash());
_tracker.announce(ih, nInfo.getHash(), isSeed);
// the reply for an announce is the same as the reply for a ping
sendPong(nInfo, msgID);
}
@ -1341,7 +1376,8 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
* @throws NPE, IllegalArgumentException, and others too
*/
private List<NodeInfo> receiveNodes(NodeInfo nInfo, byte[] ids) throws InvalidBEncodingException {
int max = Math.min(K, ids.length / NodeInfo.LENGTH);
// Azureus sends 20
int max = Math.min(3 * K, ids.length / NodeInfo.LENGTH);
List<NodeInfo> rv = new ArrayList<NodeInfo>(max);
for (int off = 0; off < ids.length && rv.size() < max; off += NodeInfo.LENGTH) {
NodeInfo nInf = new NodeInfo(ids, off);
@ -1399,6 +1435,7 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
// Errors.....
/**
* @param error 1st item is error code, 2nd is message string
* @throws NPE, and others too
*/
private void receiveError(ReplyWaiter waiter, List<BEValue> error) throws InvalidBEncodingException {
@ -1536,6 +1573,8 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
// TODO throttle
try {
byte[] payload = session.receiveMessage(msgId);
if (payload == null)
return;
_rxPkts.incrementAndGet();
_rxBytes.addAndGet(payload.length);
if (toPort == _qPort) {

View File

@ -3,6 +3,7 @@ package org.klomp.snark.dht;
* From zzzot, modded and relicensed to GPLv2
*/
import java.io.Serializable;
import java.util.Comparator;
import net.i2p.crypto.SHA1Hash;
@ -15,7 +16,7 @@ import net.i2p.data.DataHelper;
* @since 0.9.2
* @author zzz
*/
class NodeInfoComparator implements Comparator<NodeInfo> {
class NodeInfoComparator implements Comparator<NodeInfo>, Serializable {
private final byte[] _base;
public NodeInfoComparator(SHA1Hash h) {

View File

@ -14,7 +14,9 @@ import net.i2p.data.Hash;
*/
class Peer extends Hash {
private long lastSeen;
private volatile long lastSeen;
// todo we could pack this into the upper bit of lastSeen
private volatile boolean isSeed;
public Peer(byte[] data) {
super(data);
@ -27,4 +29,14 @@ class Peer extends Hash {
public void setLastSeen(long now) {
lastSeen = now;
}
/** @since 0.9.14 */
public boolean isSeed() {
return isSeed;
}
/** @since 0.9.14 */
public void setSeed(boolean isSeed) {
this.isSeed = isSeed;
}
}

View File

@ -37,10 +37,10 @@ abstract class PersistDHT {
public static synchronized void loadDHT(KRPC krpc, File file) {
Log log = I2PAppContext.getGlobalContext().logManager().getLog(PersistDHT.class);
int count = 0;
FileInputStream in = null;
BufferedReader br = null;
try {
in = new FileInputStream(file);
BufferedReader br = new BufferedReader(new InputStreamReader(in, "ISO-8859-1"));
br = new BufferedReader(new InputStreamReader(
new FileInputStream(file), "ISO-8859-1"));
String line = null;
while ( (line = br.readLine()) != null) {
if (line.startsWith("#"))
@ -61,7 +61,7 @@ abstract class PersistDHT {
if (log.shouldLog(Log.WARN) && file.exists())
log.warn("Error reading the DHT File", ioe);
} finally {
if (in != null) try { in.close(); } catch (IOException ioe) {}
if (br != null) try { br.close(); } catch (IOException ioe) {}
}
if (log.shouldLog(Log.INFO))
log.info("Loaded " + count + " nodes from " + file);

View File

@ -27,7 +27,6 @@ import java.util.Enumeration;
import java.util.List;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.UnavailableException;
import javax.servlet.http.HttpServlet;
@ -85,16 +84,17 @@ import net.i2p.util.SystemVersion;
*/
class BasicServlet extends HttpServlet
{
protected final I2PAppContext _context;
protected final Log _log;
private static final long serialVersionUID = 1L;
protected transient final I2PAppContext _context;
protected transient final Log _log;
protected File _resourceBase;
private String _warBase;
private final MimeTypes _mimeTypes;
private transient final MimeTypes _mimeTypes;
/** same as PeerState.PARTSIZE */
private static final int BUFSIZE = 16*1024;
private ByteCache _cache = ByteCache.getInstance(16, BUFSIZE);
private transient ByteCache _cache = ByteCache.getInstance(16, BUFSIZE);
private static final int WAR_CACHE_CONTROL_SECS = 24*60*60;
private static final int FILE_CACHE_CONTROL_SECS = 24*60*60;
@ -124,8 +124,10 @@ class BasicServlet extends HttpServlet
* Files are served from here
*/
protected void setResourceBase(File base) throws UnavailableException {
if (!base.isDirectory())
if (!base.isDirectory()) {
_log.log(Log.CRIT, "Configured i2psnark directory " + base + " does not exist");
throw new UnavailableException("Resource base does not exist: " + base);
}
_resourceBase = base;
if (_log.shouldLog(Log.INFO))
_log.info("Resource base is " + _resourceBase);
@ -325,7 +327,7 @@ class BasicServlet extends HttpServlet
long content_length = content.getContentLength();
// see if there are any range headers
Enumeration reqRanges = request.getHeaders("Range");
Enumeration<?> reqRanges = request.getHeaders("Range");
if (reqRanges == null || !reqRanges.hasMoreElements()) {
// if there were no ranges, send entire entity

View File

@ -13,11 +13,13 @@ import net.i2p.I2PAppContext;
import net.i2p.client.streaming.I2PSocketEepGet;
import net.i2p.client.streaming.I2PSocketManager;
import net.i2p.crypto.SHA1;
import net.i2p.data.DataHelper;
import net.i2p.util.EepGet;
import net.i2p.util.I2PAppThread;
import net.i2p.util.Log;
import net.i2p.util.SecureFile;
import org.klomp.snark.I2PSnarkUtil;
import org.klomp.snark.MetaInfo;
import org.klomp.snark.Snark;
import org.klomp.snark.SnarkManager;
@ -95,7 +97,7 @@ public class FetchAndAdd extends Snark implements EepGet.StatusListener, Runnabl
add(file);
} else {
_mgr.addMessage(_("Torrent was not retrieved from {0}", urlify(_url)) +
((_failCause != null) ? (": " + _failCause) : ""));
((_failCause != null) ? (": " + DataHelper.stripHTML(_failCause)) : ""));
}
if (file != null)
file.delete();
@ -130,6 +132,7 @@ public class FetchAndAdd extends Snark implements EepGet.StatusListener, Runnabl
return null;
_eepGet = new I2PSocketEepGet(_ctx, manager, RETRIES, out.getAbsolutePath(), _url);
_eepGet.addStatusListener(this);
_eepGet.addHeader("User-Agent", I2PSnarkUtil.EEPGET_USER_AGENT);
if (_eepGet.fetch()) {
if (_log.shouldLog(Log.DEBUG))
_log.debug("Fetch successful [" + _url + "]: size=" + out.length());
@ -175,7 +178,10 @@ public class FetchAndAdd extends Snark implements EepGet.StatusListener, Runnabl
// This may take a LONG time to create the storage.
_mgr.copyAndAddTorrent(file, canonical);
snark = _mgr.getTorrentByBaseName(originalName);
snark.startTorrent();
if (snark != null)
snark.startTorrent();
else
throw new IOException("Unknown error - check logs");
}
} catch (IOException ioe) {
_mgr.addMessage(_("Torrent at {0} was not valid", urlify(_url)) + ": " + ioe.getMessage());

View File

@ -1,12 +1,9 @@
package org.klomp.snark.web;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.net.URISyntaxException;
import java.io.Serializable;
import java.text.Collator;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
@ -16,7 +13,6 @@ import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
@ -26,20 +22,18 @@ import java.util.TreeSet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.i2p.I2PAppContext;
import net.i2p.data.Base64;
import net.i2p.data.DataHelper;
import net.i2p.util.I2PAppThread;
import net.i2p.util.Log;
import org.klomp.snark.I2PSnarkUtil;
import org.klomp.snark.MagnetURI;
import org.klomp.snark.MetaInfo;
import org.klomp.snark.Peer;
import org.klomp.snark.PeerID;
import org.klomp.snark.Snark;
import org.klomp.snark.SnarkManager;
import org.klomp.snark.Storage;
@ -51,12 +45,14 @@ import org.klomp.snark.dht.DHT;
* Refactored to eliminate Jetty dependencies.
*/
public class I2PSnarkServlet extends BasicServlet {
private static final long serialVersionUID = 1L;
/** generally "/i2psnark" */
private String _contextPath;
/** generally "i2psnark" */
private String _contextName;
private SnarkManager _manager;
private static long _nonce;
private transient SnarkManager _manager;
private long _nonce;
private String _themePath;
private String _imgPath;
private String _lastAnnounceURL;
@ -163,6 +159,8 @@ public class I2PSnarkServlet extends BasicServlet {
// this is the part after /i2psnark
String path = req.getServletPath();
resp.setHeader("X-Frame-Options", "SAMEORIGIN");
resp.setHeader("Content-Security-Policy", "default-src 'self'; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline'");
resp.setHeader("X-XSS-Protection", "1; mode=block");
String peerParam = req.getParameter("p");
String stParam = req.getParameter("st");
@ -171,9 +169,10 @@ public class I2PSnarkServlet extends BasicServlet {
peerParam.replaceAll("[a-zA-Z0-9~=-]", "").length() > 0) { // XSS
peerString = "";
} else {
peerString = "?p=" + peerParam;
peerString = "?p=" + DataHelper.stripHTML(peerParam);
}
if (stParam != null && !stParam.equals("0")) {
stParam = DataHelper.stripHTML(stParam);
if (peerString.length() > 0)
peerString += "&amp;st=" + stParam;
else
@ -251,7 +250,15 @@ public class I2PSnarkServlet extends BasicServlet {
out.write(DOCTYPE + "<html>\n" +
"<head><link rel=\"shortcut icon\" href=\"" + _themePath + "favicon.ico\">\n" +
"<title>");
out.write(_("I2PSnark - Anonymous BitTorrent Client"));
if (_contextName.equals(DEFAULT_NAME))
out.write(_("I2PSnark"));
else
out.write(_contextName);
out.write(" - ");
if (isConfigure)
out.write(_("Configuration"));
else
out.write(_("Anonymous BitTorrent Client"));
if ("2".equals(peerParam))
out.write(" | Debug Mode");
out.write("</title>\n");
@ -388,7 +395,7 @@ public class I2PSnarkServlet extends BasicServlet {
String ua = req.getHeader("User-Agent");
boolean isDegraded = ua != null && (ua.startsWith("Lynx") || ua.startsWith("w3m") ||
ua.startsWith("ELinks") || ua.startsWith("Links") ||
ua.startsWith("Dillo"));
ua.startsWith("Dillo") || ua.startsWith("Emacs-w3m"));
boolean noThinsp = isDegraded || (ua != null && ua.startsWith("Opera"));
// pages
@ -542,7 +549,7 @@ public class I2PSnarkServlet extends BasicServlet {
String stParamStr = stParam == null ? "" : "&amp;st=" + stParam;
for (int i = 0; i < total; i++) {
Snark snark = (Snark)snarks.get(i);
Snark snark = snarks.get(i);
boolean showPeers = showDebug || "1".equals(peerParam) || Base64.encode(snark.getInfoHash()).equals(peerParam);
boolean hide = i < start || i >= start + pageSize;
displaySnark(out, snark, uri, i, stats, showPeers, isDegraded, noThinsp, showDebug, hide, stParamStr);
@ -684,7 +691,8 @@ public class I2PSnarkServlet extends BasicServlet {
String action = req.getParameter("action");
if (action == null) {
// http://www.onenaught.com/posts/382/firefox-4-change-input-type-image-only-submits-x-and-y-not-name
Map params = req.getParameterMap();
@SuppressWarnings("unchecked") // TODO-Java6: Remove cast, return type is correct
Map<String, String[]> params = req.getParameterMap();
for (Object o : params.keySet()) {
String key = (String) o;
if (key.startsWith("action_") && key.endsWith(".x")) {
@ -758,8 +766,7 @@ public class I2PSnarkServlet extends BasicServlet {
if (torrent != null) {
byte infoHash[] = Base64.decode(torrent);
if ( (infoHash != null) && (infoHash.length == 20) ) { // valid sha1
for (Iterator iter = _manager.listTorrentFiles().iterator(); iter.hasNext(); ) {
String name = (String)iter.next();
for (String name : _manager.listTorrentFiles() ) {
Snark snark = _manager.getTorrent(name);
if ( (snark != null) && (DataHelper.eq(infoHash, snark.getInfoHash())) ) {
_manager.stopTorrent(snark, false);
@ -781,8 +788,7 @@ public class I2PSnarkServlet extends BasicServlet {
if (torrent != null) {
byte infoHash[] = Base64.decode(torrent);
if ( (infoHash != null) && (infoHash.length == 20) ) { // valid sha1
for (Iterator iter = _manager.listTorrentFiles().iterator(); iter.hasNext(); ) {
String name = (String)iter.next();
for (String name : _manager.listTorrentFiles() ) {
Snark snark = _manager.getTorrent(name);
if ( (snark != null) && (DataHelper.eq(infoHash, snark.getInfoHash())) ) {
MetaInfo meta = snark.getMetaInfo();
@ -809,8 +815,7 @@ public class I2PSnarkServlet extends BasicServlet {
if (torrent != null) {
byte infoHash[] = Base64.decode(torrent);
if ( (infoHash != null) && (infoHash.length == 20) ) { // valid sha1
for (Iterator iter = _manager.listTorrentFiles().iterator(); iter.hasNext(); ) {
String name = (String)iter.next();
for (String name : _manager.listTorrentFiles() ) {
Snark snark = _manager.getTorrent(name);
if ( (snark != null) && (DataHelper.eq(infoHash, snark.getInfoHash())) ) {
MetaInfo meta = snark.getMetaInfo();
@ -849,7 +854,7 @@ public class I2PSnarkServlet extends BasicServlet {
}
}
// step 2 make Set of dirs with reverse sort
Set<File> dirs = new TreeSet(Collections.reverseOrder());
Set<File> dirs = new TreeSet<File>(Collections.reverseOrder());
for (List<String> list : files) {
for (int i = 1; i < list.size(); i++) {
dirs.add(Storage.getFileFromNames(f, list.subList(0, i)));
@ -922,8 +927,8 @@ public class I2PSnarkServlet extends BasicServlet {
if (announceURL.equals("none"))
announceURL = null;
_lastAnnounceURL = announceURL;
List<String> backupURLs = new ArrayList();
Enumeration e = req.getParameterNames();
List<String> backupURLs = new ArrayList<String>();
Enumeration<?> e = req.getParameterNames();
while (e.hasMoreElements()) {
Object o = e.nextElement();
if (!(o instanceof String))
@ -955,7 +960,7 @@ public class I2PSnarkServlet extends BasicServlet {
_manager.addMessage(_("Error - Cannot mix private and public trackers in a torrent"));
return;
}
announceList = new ArrayList(backupURLs.size());
announceList = new ArrayList<List<String>>(backupURLs.size());
for (String url : backupURLs) {
announceList.add(Collections.singletonList(url));
}
@ -1017,10 +1022,10 @@ public class I2PSnarkServlet extends BasicServlet {
if (action.equals(_("Delete selected")) || action.equals(_("Save tracker configuration"))) {
boolean changed = false;
Map<String, Tracker> trackers = _manager.getTrackerMap();
List<String> removed = new ArrayList();
List<String> open = new ArrayList();
List<String> priv = new ArrayList();
Enumeration e = req.getParameterNames();
List<String> removed = new ArrayList<String>();
List<String> open = new ArrayList<String>();
List<String> priv = new ArrayList<String>();
Enumeration<?> e = req.getParameterNames();
while (e.hasMoreElements()) {
Object o = e.nextElement();
if (!(o instanceof String))
@ -1045,7 +1050,7 @@ public class I2PSnarkServlet extends BasicServlet {
}
open.removeAll(removed);
List<String> oldOpen = new ArrayList(_manager.util().getOpenTrackers());
List<String> oldOpen = new ArrayList<String>(_manager.util().getOpenTrackers());
Collections.sort(oldOpen);
Collections.sort(open);
if (!open.equals(oldOpen))
@ -1054,7 +1059,7 @@ public class I2PSnarkServlet extends BasicServlet {
priv.removeAll(removed);
// open trumps private
priv.removeAll(open);
List<String> oldPriv = new ArrayList(_manager.getPrivateTrackers());
List<String> oldPriv = new ArrayList<String>(_manager.getPrivateTrackers());
Collections.sort(oldPriv);
Collections.sort(priv);
if (!priv.equals(oldPriv))
@ -1074,11 +1079,11 @@ public class I2PSnarkServlet extends BasicServlet {
_manager.saveTrackerMap();
// open trumps private
if (req.getParameter("_add_open_") != null) {
List newOpen = new ArrayList(_manager.util().getOpenTrackers());
List<String> newOpen = new ArrayList<String>(_manager.util().getOpenTrackers());
newOpen.add(aurl);
_manager.saveOpenTrackers(newOpen);
} else if (req.getParameter("_add_private_") != null) {
List newPriv = new ArrayList(_manager.getPrivateTrackers());
List<String> newPriv = new ArrayList<String>(_manager.getPrivateTrackers());
newPriv.add(aurl);
_manager.savePrivateTrackers(newPriv);
}
@ -1119,8 +1124,7 @@ public class I2PSnarkServlet extends BasicServlet {
* (I guess this is worth it, a lot of torrents start with "The "
* @since 0.7.14
*/
private static class TorrentNameComparator implements Comparator<Snark> {
private final Comparator collator = Collator.getInstance();
private static class TorrentNameComparator implements Comparator<Snark>, Serializable {
public int compare(Snark l, Snark r) {
// put downloads and magnets first
@ -1136,12 +1140,12 @@ public class I2PSnarkServlet extends BasicServlet {
String rlc = rs.toLowerCase(Locale.US);
if (rlc.startsWith("the ") || rlc.startsWith("the.") || rlc.startsWith("the_"))
rs = rs.substring(4);
return collator.compare(ls, rs);
return Collator.getInstance().compare(ls, rs);
}
}
private List<Snark> getSortedSnarks(HttpServletRequest req) {
ArrayList<Snark> rv = new ArrayList(_manager.getTorrents());
ArrayList<Snark> rv = new ArrayList<Snark>(_manager.getTorrents());
Collections.sort(rv, new TorrentNameComparator());
return rv;
}
@ -1311,20 +1315,16 @@ public class I2PSnarkServlet extends BasicServlet {
// (i) icon column
out.write("<td>");
if (isValid && meta.getAnnounce() != null) {
// Link to local details page - note that trailing slash on a single-file torrent
// gets us to the details page instead of the file.
//StringBuilder buf = new StringBuilder(128);
//buf.append("<a href=\"").append(snark.getBaseName())
// .append("/\" title=\"").append(_("Torrent details"))
// .append("\"><img alt=\"").append(_("Info")).append("\" border=\"0\" src=\"")
// .append(_imgPath).append("details.png\"></a>");
//out.write(buf.toString());
// Link to tracker details page
String trackerLink = getTrackerLink(meta.getAnnounce(), snark.getInfoHash());
if (trackerLink != null)
out.write(trackerLink);
if (isValid) {
String announce = meta.getAnnounce();
if (announce == null)
announce = snark.getTrackerURL();
if (announce != null) {
// Link to tracker details page
String trackerLink = getTrackerLink(announce, snark.getInfoHash());
if (trackerLink != null)
out.write(trackerLink);
}
}
String encodedBaseName = urlEncode(fullBasename);
@ -1356,7 +1356,14 @@ public class I2PSnarkServlet extends BasicServlet {
}
// Torrent name column
out.write("</td><td class=\"snarkTorrentName\">");
out.write("</td><td class=\"snarkTorrentName\"");
if (isMultiFile) {
// link on the whole td
String jsec = encodedBaseName.replace("'", "\\'");
out.write(" onclick=\"document.location='" + jsec + "/';\">");
} else {
out.write('>');
}
if (remaining == 0 || isMultiFile) {
StringBuilder buf = new StringBuilder(128);
buf.append("<a href=\"").append(encodedBaseName);
@ -1480,7 +1487,8 @@ public class I2PSnarkServlet extends BasicServlet {
continue;
out.write("<tr class=\"" + rowClass + "\"><td></td>");
out.write("<td colspan=\"4\" align=\"right\">");
String ch = peer.toString().substring(0, 4);
PeerID pid = peer.getPeerID();
String ch = pid != null ? pid.toString().substring(0, 4) : "????";
String client;
if ("AwMD".equals(ch))
client = _("I2PSnark");
@ -1489,15 +1497,15 @@ public class I2PSnarkServlet extends BasicServlet {
else if ("TTMt".equals(ch))
client = "I2P-BT";
else if ("LUFa".equals(ch))
client = "Azureus";
client = "Vuze" + getAzVersion(pid.getID());
else if ("CwsL".equals(ch))
client = "I2PSnarkXL";
else if ("ZV".equals(ch.substring(2,4)) || "VUZP".equals(ch))
client = "Robert";
client = "Robert" + getRobtVersion(pid.getID());
else if (ch.startsWith("LV")) // LVCS 1.0.2?; LVRS 1.0.4
client = "Transmission";
client = "Transmission" + getAzVersion(pid.getID());
else if ("LUtU".equals(ch))
client = "KTorrent";
client = "KTorrent" + getAzVersion(pid.getID());
else
client = _("Unknown") + " (" + ch + ')';
out.write(client + "&nbsp;&nbsp;<tt>" + peer.toString().substring(5, 9)+ "</tt>");
@ -1571,6 +1579,50 @@ public class I2PSnarkServlet extends BasicServlet {
}
}
}
/**
* Get version from bytes 3-6
* @return " w.x.y.z" or ""
* @since 0.9.14
*/
private static String getAzVersion(byte[] id) {
if (id[7] != '-')
return "";
StringBuilder buf = new StringBuilder(16);
buf.append(' ');
for (int i = 3; i <= 6; i++) {
int val = id[i] - '0';
if (val < 0)
return "";
if (val > 9)
val = id[i] - 'A';
if (i != 6 || val != 0) {
if (i != 3)
buf.append('.');
buf.append(val);
}
}
return buf.toString();
}
/**
* Get version from bytes 3-5
* @return " w.x.y" or ""
* @since 0.9.14
*/
private static String getRobtVersion(byte[] id) {
StringBuilder buf = new StringBuilder(8);
buf.append(' ');
for (int i = 3; i <= 5; i++) {
int val = id[i];
if (val < 0)
return "";
if (i != 3)
buf.append('.');
buf.append(val);
}
return buf.toString();
}
/** @since 0.8.2 */
private static String thinsp(boolean disable) {
@ -1583,7 +1635,8 @@ public class I2PSnarkServlet extends BasicServlet {
* Sort by completeness (seeds first), then by ID
* @since 0.8.1
*/
private static class PeerComparator implements Comparator<Peer> {
private static class PeerComparator implements Comparator<Peer>, Serializable {
public int compare(Peer l, Peer r) {
int diff = r.completed() - l.completed(); // reverse
if (diff != 0)
@ -1645,18 +1698,19 @@ public class I2PSnarkServlet extends BasicServlet {
private String getShortTrackerLink(String announce, byte[] infohash) {
StringBuilder buf = new StringBuilder(128);
String trackerLinkUrl = getTrackerLinkUrl(announce, infohash);
if (trackerLinkUrl != null)
buf.append(trackerLinkUrl);
if (announce.startsWith("http://"))
announce = announce.substring(7);
int slsh = announce.indexOf('/');
if (slsh > 0)
announce = announce.substring(0, slsh);
if (trackerLinkUrl != null)
buf.append(trackerLinkUrl);
else
buf.append("<a href=\"http://").append(announce).append("/\">");
if (announce.length() > 67)
announce = announce.substring(0, 40) + "&hellip;" + announce.substring(announce.length() - 8);
buf.append(announce);
if (trackerLinkUrl != null)
buf.append("</a>");
buf.append("</a>");
return buf.toString();
}
@ -1802,7 +1856,7 @@ public class I2PSnarkServlet extends BasicServlet {
out.write("\" >" +
"<tr><td>");
out.write(_("Auto start"));
out.write(_("Auto start torrents"));
out.write(": <td><input type=\"checkbox\" class=\"optbox\" name=\"autoStart\" value=\"true\" "
+ (autoStart ? "checked " : "")
+ "title=\"");
@ -1916,7 +1970,7 @@ public class I2PSnarkServlet extends BasicServlet {
//out.write("port: <input type=\"text\" name=\"eepPort\" value=\""
// + _manager.util().getEepProxyPort() + "\" size=\"5\" maxlength=\"5\" /><br>\n");
Map<String, String> options = new TreeMap(_manager.util().getI2CPOptions());
Map<String, String> options = new TreeMap<String, String>(_manager.util().getI2CPOptions());
out.write("<tr><td>");
out.write(_("Inbound Settings"));
out.write(":<td>");
@ -2007,12 +2061,8 @@ public class I2PSnarkServlet extends BasicServlet {
if (privateTrackers.contains(t.announceURL)) {
buf.append(" checked=\"checked\"");
} else {
for (int i = 1; i < SnarkManager.DEFAULT_TRACKERS.length; i += 2) {
if (SnarkManager.DEFAULT_TRACKERS[i].contains(t.announceURL)) {
buf.append(" disabled=\"disabled\"");
break;
}
}
if (SnarkManager.DEFAULT_TRACKER_ANNOUNCES.contains(t.announceURL))
buf.append(" disabled=\"disabled\"");
}
buf.append(">" +
"</td><td>").append(urlify(announceURL, 35))
@ -2170,15 +2220,14 @@ public class I2PSnarkServlet extends BasicServlet {
* directories first
* @since 0.9.6
*/
private static class ListingComparator implements Comparator<File> {
private final Comparator collator = Collator.getInstance();
private static class ListingComparator implements Comparator<File>, Serializable {
public int compare(File l, File r) {
if (l.isDirectory() && !r.isDirectory())
return -1;
if (r.isDirectory() && !l.isDirectory())
return 1;
return collator.compare(l.getName(), r.getName());
return Collator.getInstance().compare(l.getName(), r.getName());
}
}
@ -2212,7 +2261,7 @@ public class I2PSnarkServlet extends BasicServlet {
* @return String of HTML or null if postParams != null
* @since 0.7.14
*/
private String getListHTML(File r, String base, boolean parent, Map postParams)
private String getListHTML(File r, String base, boolean parent, Map<String, String[]> postParams)
throws IOException
{
File[] ls = null;
@ -2280,10 +2329,14 @@ public class I2PSnarkServlet extends BasicServlet {
.append(fullPath)
.append("</a></td></tr>\n");
String announce = null;
MetaInfo meta = snark.getMetaInfo();
if (meta != null) {
String announce = meta.getAnnounce();
announce = meta.getAnnounce();
if (announce == null)
announce = snark.getTrackerURL();
if (announce != null) {
announce = DataHelper.stripHTML(announce);
buf.append("<tr><td>");
String trackerLink = getTrackerLink(announce, snark.getInfoHash());
if (trackerLink != null)
@ -2306,7 +2359,7 @@ public class I2PSnarkServlet extends BasicServlet {
buf.append(' ');
else
more = true;
buf.append(getShortTrackerLink(s, snark.getInfoHash()));
buf.append(getShortTrackerLink(DataHelper.stripHTML(s), snark.getInfoHash()));
}
buf.append("] ");
}
@ -2349,11 +2402,20 @@ public class I2PSnarkServlet extends BasicServlet {
String hex = I2PSnarkUtil.toHex(snark.getInfoHash());
if (meta == null || !meta.isPrivate()) {
buf.append("<tr><td><a href=\"")
.append(MagnetURI.MAGNET_FULL).append(hex).append("\">")
.append(MagnetURI.MAGNET_FULL).append(hex);
if (announce != null)
buf.append("&amp;tr=").append(announce);
buf.append("\">")
.append(toImg("magnet", _("Magnet link")))
.append("</a> <b>Magnet:</b> <a href=\"")
.append(MagnetURI.MAGNET_FULL).append(hex).append("\">")
.append(MagnetURI.MAGNET_FULL).append(hex).append("</a>")
.append(MagnetURI.MAGNET_FULL).append(hex);
if (announce != null)
buf.append("&amp;tr=").append(announce);
buf.append("\">")
.append(MagnetURI.MAGNET_FULL).append(hex);
if (announce != null)
buf.append("&amp;tr=").append(announce);
buf.append("</a>")
.append("</td></tr>\n");
} else {
buf.append("<tr><td>")
@ -2388,7 +2450,7 @@ public class I2PSnarkServlet extends BasicServlet {
.append(":</b> ")
.append(formatSize(needed));
if (meta != null) {
List files = meta.getFiles();
List<List<String>> files = meta.getFiles();
int fileCount = files != null ? files.size() : 1;
buf.append("&nbsp;<img alt=\"\" border=\"0\" src=\"" + _imgPath + "file.png\" >&nbsp;<b>")
.append(_("Files"))
@ -2515,6 +2577,7 @@ public class I2PSnarkServlet extends BasicServlet {
String path=addPaths(base,encoded);
if (item.isDirectory() && !path.endsWith("/"))
path=addPaths(path,"/");
path = urlEncode(path);
String icon = toIcon(item);
buf.append("<TD class=\"snarkFileIcon\">");
@ -2535,7 +2598,7 @@ public class I2PSnarkServlet extends BasicServlet {
buf.append("</TD><TD class=\"snarkFileName\">");
if (complete)
buf.append("<a href=\"").append(path).append("\">");
buf.append(item.getName());
buf.append(item.getName().replace("&", "&amp;"));
if (complete)
buf.append("</a>");
buf.append("</TD><TD ALIGN=right class=\"snarkFileSize\">");
@ -2608,7 +2671,8 @@ public class I2PSnarkServlet extends BasicServlet {
mime.equals("text/x-sfv") ||
mime.equals("application/rtf") ||
mime.equals("application/epub+zip") ||
mime.equals("application/x-mobipocket-ebook"))
mime.equals("application/x-mobipocket-ebook") ||
plc.endsWith(".azw4"))
icon = "page";
else if (mime.equals("application/java-archive") ||
plc.endsWith(".deb"))
@ -2648,17 +2712,16 @@ public class I2PSnarkServlet extends BasicServlet {
}
/** @since 0.8.1 */
private void savePriorities(Snark snark, Map postParams) {
private void savePriorities(Snark snark, Map<String, String[]> postParams) {
Storage storage = snark.getStorage();
if (storage == null)
return;
Set<Map.Entry> entries = postParams.entrySet();
for (Map.Entry entry : entries) {
String key = (String)entry.getKey();
for (Map.Entry<String, String[]> entry : postParams.entrySet()) {
String key = entry.getKey();
if (key.startsWith("pri.")) {
try {
String file = key.substring(4);
String val = ((String[])entry.getValue())[0]; // jetty arrays
String val = entry.getValue()[0]; // jetty arrays
int pri = Integer.parseInt(val);
storage.setPriority(file, pri);
//System.err.println("Priority now " + pri + " for " + file);

View File

@ -73,7 +73,7 @@ public class InclusiveByteRange
* @param size Size of the resource.
* @return List of satisfiable ranges
*/
public static List<InclusiveByteRange> satisfiableRanges(Enumeration headers, long size)
public static List<InclusiveByteRange> satisfiableRanges(Enumeration<?> headers, long size)
{
List<InclusiveByteRange> satRanges = null;
@ -128,7 +128,7 @@ public class InclusiveByteRange
if (first < size)
{
if (satRanges == null)
satRanges = new ArrayList(4);
satRanges = new ArrayList<InclusiveByteRange>(4);
InclusiveByteRange range = new InclusiveByteRange(first,last);
satRanges.add(range);
}

View File

@ -21,8 +21,6 @@ import java.util.MissingResourceException;
import java.util.ResourceBundle;
import java.util.concurrent.ConcurrentHashMap;
import javax.servlet.ServletContext;
/* ------------------------------------------------------------ */
/**
@ -48,7 +46,7 @@ class MimeTypes
private final Map<String, String> _mimeMap;
public MimeTypes() {
_mimeMap = new ConcurrentHashMap();
_mimeMap = new ConcurrentHashMap<String, String>();
}
/* ------------------------------------------------------------ */

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

@ -2,7 +2,7 @@
# Copyright (C) 2009 The I2P Project
# This file is distributed under the same license as the i2psnark package.
# To contribute translations, see http://www.i2p2.de/newdevelopers
#
#
# Translators:
# ducki2p <ducki2p@gmail.com>, 2011
# foo <foo@bar>, 2009
@ -10,409 +10,410 @@ msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-11-19 22:52+0000\n"
"PO-Revision-Date: 2013-11-19 16:49+0000\n"
"POT-Creation-Date: 2013-12-01 20:06+0000\n"
"PO-Revision-Date: 2013-11-19 23:52+0000\n"
"Last-Translator: kytv <killyourtv@i2pmail.org>\n"
"Language-Team: Arabic (http://www.transifex.com/projects/p/I2P/language/"
"ar/)\n"
"Language: ar\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 && n%100<=99 ? 4 : 5;\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"
#: ../java/src/org/klomp/snark/IdleChecker.java:69
#: ../java/src/org/klomp/snark/SnarkManager.java:1941
#: ../java/src/org/klomp/snark/SnarkManager.java:1952
#: ../java/src/org/klomp/snark/SnarkManager.java:1938
#: ../java/src/org/klomp/snark/SnarkManager.java:1949
msgid "I2P tunnel closed."
msgstr "تم قفل النفق"
#: ../java/src/org/klomp/snark/MagnetURI.java:42
#: ../java/src/org/klomp/snark/MagnetURI.java:52
#: ../java/src/org/klomp/snark/SnarkManager.java:1646
#: ../java/src/org/klomp/snark/SnarkManager.java:1644
msgid "Magnet"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:506
#: ../java/src/org/klomp/snark/SnarkManager.java:504
#, java-format
msgid "Total uploaders limit changed to {0}"
msgstr "تم تغببر مجموع حد الرفع الى {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:508
#: ../java/src/org/klomp/snark/SnarkManager.java:506
#, java-format
msgid "Minimum total uploaders limit is {0}"
msgstr "اقل حد الرفع الى {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:520
#: ../java/src/org/klomp/snark/SnarkManager.java:518
#, java-format
msgid "Up BW limit changed to {0}KBps"
msgstr "حولت سرعة الرفع الى {0}KBps"
#: ../java/src/org/klomp/snark/SnarkManager.java:522
#: ../java/src/org/klomp/snark/SnarkManager.java:520
#, java-format
msgid "Minimum up bandwidth limit is {0}KBps"
msgstr "اقل سرعة رفع هي{0}KBps"
#: ../java/src/org/klomp/snark/SnarkManager.java:534
#: ../java/src/org/klomp/snark/SnarkManager.java:532
#, java-format
msgid "Startup delay changed to {0}"
msgstr "تغير تأخير البداية الى {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:545
#: ../java/src/org/klomp/snark/SnarkManager.java:543
#, java-format
msgid "Refresh time changed to {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:547
#: ../java/src/org/klomp/snark/SnarkManager.java:545
msgid "Refresh disabled"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:563
#: ../java/src/org/klomp/snark/SnarkManager.java:561
#, java-format
msgid "Page size changed to {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:572
#: ../java/src/org/klomp/snark/SnarkManager.java:570
msgid "Data directory must be an absolute path"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:574
#: ../java/src/org/klomp/snark/SnarkManager.java:572
msgid "Data directory does not exist"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:576
#: ../java/src/org/klomp/snark/SnarkManager.java:574
msgid "Not a directory"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:578
#: ../java/src/org/klomp/snark/SnarkManager.java:576
msgid "Unreadable"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:583
#: ../java/src/org/klomp/snark/SnarkManager.java:581
#, java-format
msgid "Data directory changed to {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:638
#: ../java/src/org/klomp/snark/SnarkManager.java:636
msgid "I2CP and tunnel changes will take effect after stopping all torrents"
msgstr "سيتم تفعيل التغيير بعد اعادة التشغيل"
#: ../java/src/org/klomp/snark/SnarkManager.java:642
#: ../java/src/org/klomp/snark/SnarkManager.java:640
#, java-format
msgid "I2CP options changed to {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:648
#: ../java/src/org/klomp/snark/SnarkManager.java:646
msgid "Disconnecting old I2CP destination"
msgstr "فك الاتصال"
#: ../java/src/org/klomp/snark/SnarkManager.java:650
#: ../java/src/org/klomp/snark/SnarkManager.java:648
#, java-format
msgid "I2CP settings changed to {0}"
msgstr " تغيرت الاعدادات الى {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:655
#: ../java/src/org/klomp/snark/SnarkManager.java:653
msgid ""
"Unable to connect with the new settings, reverting to the old I2CP settings"
msgstr "فشل في الاتصال بالاعدادات الجديدة، سيتم الرجوع الى الاعدادات القديمة"
#: ../java/src/org/klomp/snark/SnarkManager.java:659
#: ../java/src/org/klomp/snark/SnarkManager.java:657
msgid "Unable to reconnect with the old settings!"
msgstr "فشل في اعادة الاتصال بالاعدادات القديمة!"
#: ../java/src/org/klomp/snark/SnarkManager.java:661
#: ../java/src/org/klomp/snark/SnarkManager.java:659
msgid "Reconnected on the new I2CP destination"
msgstr "اتصال بوجهة جديدة"
#: ../java/src/org/klomp/snark/SnarkManager.java:668
#: ../java/src/org/klomp/snark/SnarkManager.java:666
#, java-format
msgid "I2CP listener restarted for \"{0}\""
msgstr "اعادة التشغيل \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:682
#: ../java/src/org/klomp/snark/SnarkManager.java:680
msgid "New files will be publicly readable"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:684
#: ../java/src/org/klomp/snark/SnarkManager.java:682
msgid "New files will not be publicly readable"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:691
#: ../java/src/org/klomp/snark/SnarkManager.java:689
msgid "Enabled autostart"
msgstr "تشغيل عند البداية"
#: ../java/src/org/klomp/snark/SnarkManager.java:693
#: ../java/src/org/klomp/snark/SnarkManager.java:691
msgid "Disabled autostart"
msgstr "الغاء التشغيل عند البداية"
#: ../java/src/org/klomp/snark/SnarkManager.java:699
#: ../java/src/org/klomp/snark/SnarkManager.java:697
msgid "Enabled open trackers - torrent restart required to take effect."
msgstr "تفعيل open trackers - يجب اعادة تشغيل التورنت لتفعيل التغيير."
#: ../java/src/org/klomp/snark/SnarkManager.java:701
#: ../java/src/org/klomp/snark/SnarkManager.java:699
msgid "Disabled open trackers - torrent restart required to take effect."
msgstr "الغاء تفعيل open trackers - يجب اعادة تشغيل التورنت لتفعيل التغيير."
#: ../java/src/org/klomp/snark/SnarkManager.java:708
#: ../java/src/org/klomp/snark/SnarkManager.java:706
msgid "Enabled DHT."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:710
#: ../java/src/org/klomp/snark/SnarkManager.java:708
msgid "Disabled DHT."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:712
#: ../java/src/org/klomp/snark/SnarkManager.java:710
msgid "DHT change requires tunnel shutdown and reopen"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:719
#: ../java/src/org/klomp/snark/SnarkManager.java:717
#, java-format
msgid "{0} theme loaded, return to main i2psnark page to view."
msgstr "{0} تم تحميل التيمة ارجع الى صفحة للمشاهدة i2psnark."
#: ../java/src/org/klomp/snark/SnarkManager.java:729
#: ../java/src/org/klomp/snark/SnarkManager.java:727
msgid "Configuration unchanged."
msgstr "لم تتغير الاعدادات"
#: ../java/src/org/klomp/snark/SnarkManager.java:761
#: ../java/src/org/klomp/snark/SnarkManager.java:759
msgid "Open Tracker list changed - torrent restart required to take effect."
msgstr "تغيير open trackers - يجب اعادة تشغيل التورنت لتفعيل التغيير."
#: ../java/src/org/klomp/snark/SnarkManager.java:771
#: ../java/src/org/klomp/snark/SnarkManager.java:769
msgid "Private tracker list changed - affects newly created torrents only."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:817
#: ../java/src/org/klomp/snark/SnarkManager.java:815
#, java-format
msgid "Unable to save the config to {0}"
msgstr "فشل في حفظ الاعدادات {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:895
#: ../java/src/org/klomp/snark/SnarkManager.java:893
msgid "Connecting to I2P"
msgstr "جاري الاتصال بشبكة I2P"
#: ../java/src/org/klomp/snark/SnarkManager.java:898
#: ../java/src/org/klomp/snark/SnarkManager.java:896
msgid "Error connecting to I2P - check your I2CP settings!"
msgstr "فشل في الاتصال ب I2P - تخقق من اعدادات I2CP !"
#: ../java/src/org/klomp/snark/SnarkManager.java:907
#: ../java/src/org/klomp/snark/SnarkManager.java:1683
#: ../java/src/org/klomp/snark/SnarkManager.java:905
#: ../java/src/org/klomp/snark/SnarkManager.java:1681
#, java-format
msgid "Error: Could not add the torrent {0}"
msgstr "خطأ: فشل في اضافة التورنت {0}"
#. catch this here so we don't try do delete it below
#: ../java/src/org/klomp/snark/SnarkManager.java:929
#: ../java/src/org/klomp/snark/SnarkManager.java:927
#, java-format
msgid "Cannot open \"{0}\""
msgstr "فشل في فتح \"{0}\""
#. TODO - if the existing one is a magnet, delete it and add the metainfo instead?
#: ../java/src/org/klomp/snark/SnarkManager.java:948
#: ../java/src/org/klomp/snark/SnarkManager.java:1049
#: ../java/src/org/klomp/snark/SnarkManager.java:1131
#. TODO - if the existing one is a magnet, delete it and add the metainfo
#. instead?
#: ../java/src/org/klomp/snark/SnarkManager.java:946
#: ../java/src/org/klomp/snark/SnarkManager.java:1047
#: ../java/src/org/klomp/snark/SnarkManager.java:1129
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:159
#, java-format
msgid "Torrent with this info hash is already running: {0}"
msgstr "تورنت بهذه المعلومات مشغل: {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:954
#: ../java/src/org/klomp/snark/SnarkManager.java:952
#, java-format
msgid "ERROR - No I2P trackers in private torrent \"{0}\""
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:956
#: ../java/src/org/klomp/snark/SnarkManager.java:954
#, java-format
msgid ""
"Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers and "
"DHT only."
"Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers and"
" DHT only."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:959
#: ../java/src/org/klomp/snark/SnarkManager.java:957
#, java-format
msgid ""
"Warning - No I2P trackers in \"{0}\", and open trackers are disabled, will "
"announce to DHT only."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:961
#: ../java/src/org/klomp/snark/SnarkManager.java:959
#, java-format
msgid ""
"Warning - No I2P trackers in \"{0}\", and DHT and open trackers are "
"disabled, you should enable open trackers or DHT before starting the torrent."
"disabled, you should enable open trackers or DHT before starting the "
"torrent."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:983
#: ../java/src/org/klomp/snark/SnarkManager.java:981
#, java-format
msgid "Torrent in \"{0}\" is invalid"
msgstr "تورنت في \"{0}\"غير صحيح"
#: ../java/src/org/klomp/snark/SnarkManager.java:990
#: ../java/src/org/klomp/snark/SnarkManager.java:988
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:183
#, java-format
msgid "ERROR - Out of memory, cannot create torrent from {0}"
msgstr "خطأ - لا توجد ذاكرة كافية، لا يمكن انشاء تورنت {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1002
#: ../java/src/org/klomp/snark/SnarkManager.java:1000
#, java-format
msgid "Torrent added and started: \"{0}\""
msgstr "تم اضافة وتشغيل التورنت: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:1004
#: ../java/src/org/klomp/snark/SnarkManager.java:1002
#, java-format
msgid "Torrent added: \"{0}\""
msgstr "تمت اضافة: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:1060
#: ../java/src/org/klomp/snark/SnarkManager.java:1058
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:87
#, java-format
msgid "Fetching {0}"
msgstr "يحمل {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1066
#: ../java/src/org/klomp/snark/SnarkManager.java:1064
#, java-format
msgid ""
"Open trackers are disabled and we have no DHT peers. Fetch of {0} may not "
"succeed until you start another torrent, enable open trackers, or enable DHT."
"succeed until you start another torrent, enable open trackers, or enable "
"DHT."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1070
#: ../java/src/org/klomp/snark/SnarkManager.java:1068
#, java-format
msgid "Adding {0}"
msgstr "اضافة {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1102
#: ../java/src/org/klomp/snark/SnarkManager.java:1100
#, java-format
msgid "Download already running: {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1141
#: ../java/src/org/klomp/snark/SnarkManager.java:1164
#: ../java/src/org/klomp/snark/SnarkManager.java:1602
#: ../java/src/org/klomp/snark/SnarkManager.java:1139
#: ../java/src/org/klomp/snark/SnarkManager.java:1162
#: ../java/src/org/klomp/snark/SnarkManager.java:1600
#, java-format
msgid "Failed to copy torrent file to {0}"
msgstr "فشل في نسخ التورنت الى {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1391
#: ../java/src/org/klomp/snark/SnarkManager.java:1389
#, java-format
msgid "Too many files in \"{0}\" ({1}), deleting it!"
msgstr "ملفات كثيرة في \"{0}\" ({1}) تم حذف"
#: ../java/src/org/klomp/snark/SnarkManager.java:1393
#: ../java/src/org/klomp/snark/SnarkManager.java:1391
#, java-format
msgid "Torrent file \"{0}\" cannot end in \".torrent\", deleting it!"
msgstr "ملف التورنت \"{0}\" لا يمكنه الانتهاء ب \".torrent\", سيتم حذفه!"
#: ../java/src/org/klomp/snark/SnarkManager.java:1395
#: ../java/src/org/klomp/snark/SnarkManager.java:1393
#, java-format
msgid "No pieces in \"{0}\", deleting it!"
msgstr "ﻻ أجزاء في \"{0}\", حذف!"
#: ../java/src/org/klomp/snark/SnarkManager.java:1397
#: ../java/src/org/klomp/snark/SnarkManager.java:1395
#, java-format
msgid "Too many pieces in \"{0}\", limit is {1}, deleting it!"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1399
#: ../java/src/org/klomp/snark/SnarkManager.java:1397
#, java-format
msgid "Pieces are too large in \"{0}\" ({1}B), deleting it."
msgstr "الأجزاء كبيرة في \"{0}\" ({1}B), حذف."
#: ../java/src/org/klomp/snark/SnarkManager.java:1400
#: ../java/src/org/klomp/snark/SnarkManager.java:1398
#, java-format
msgid "Limit is {0}B"
msgstr "حدود {0}B"
#: ../java/src/org/klomp/snark/SnarkManager.java:1402
#: ../java/src/org/klomp/snark/SnarkManager.java:1400
#, java-format
msgid "Torrent \"{0}\" has no data, deleting it!"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1410
#: ../java/src/org/klomp/snark/SnarkManager.java:1408
#, java-format
msgid "Torrents larger than {0}B are not supported yet, deleting \"{1}\""
msgstr "تورنت أكبر من {0}B غير مدعومة سيحذف \"{1}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:1426
#: ../java/src/org/klomp/snark/SnarkManager.java:1424
#, java-format
msgid "Error: Could not remove the torrent {0}"
msgstr "خطأ: ﻻيمكن حذف التورنت {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1447
#: ../java/src/org/klomp/snark/SnarkManager.java:1465
#: ../java/src/org/klomp/snark/SnarkManager.java:1445
#: ../java/src/org/klomp/snark/SnarkManager.java:1463
#, java-format
msgid "Torrent stopped: \"{0}\""
msgstr "تورنت متوقف: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:1486
#: ../java/src/org/klomp/snark/SnarkManager.java:1484
#, java-format
msgid "Torrent removed: \"{0}\""
msgstr "تورنت محذوف: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:1494
#: ../java/src/org/klomp/snark/SnarkManager.java:1492
#, java-format
msgid "Adding torrents in {0}"
msgstr "اضف تورنت في {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1525
#: ../java/src/org/klomp/snark/SnarkManager.java:1523
#, java-format
msgid "Up bandwidth limit is {0} KBps"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1547
#: ../java/src/org/klomp/snark/SnarkManager.java:1545
#, java-format
msgid "Download finished: {0}"
msgstr "انتهى التحميل: {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1598
#: ../java/src/org/klomp/snark/SnarkManager.java:1596
#, java-format
msgid "Metainfo received for {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1599
#: ../java/src/org/klomp/snark/SnarkManager.java:1829
#: ../java/src/org/klomp/snark/SnarkManager.java:1597
#: ../java/src/org/klomp/snark/SnarkManager.java:1826
#, java-format
msgid "Starting up torrent {0}"
msgstr "بداية التورنت {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1614
#: ../java/src/org/klomp/snark/SnarkManager.java:1612
#, java-format
msgid "Error on torrent {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1677
#: ../java/src/org/klomp/snark/SnarkManager.java:1675
msgid "Unable to connect to I2P!"
msgstr "فشل في اضافة I2P!"
#: ../java/src/org/klomp/snark/SnarkManager.java:1828
#: ../java/src/org/klomp/snark/SnarkManager.java:1825
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:124
msgid "Opening the I2P tunnel"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1852
#: ../java/src/org/klomp/snark/SnarkManager.java:1849
msgid "Opening the I2P tunnel and starting all torrents."
msgstr "فتح النفق واطلاق جميع التورنت"
#: ../java/src/org/klomp/snark/SnarkManager.java:1915
#: ../java/src/org/klomp/snark/SnarkManager.java:1912
msgid "Stopping all torrents and closing the I2P tunnel."
msgstr "توقيف جميع التورنت و قفل النفق I2P"
#: ../java/src/org/klomp/snark/SnarkManager.java:1934
#: ../java/src/org/klomp/snark/SnarkManager.java:1931
msgid "Closing I2P tunnel after notifying trackers."
msgstr ""
#: ../java/src/org/klomp/snark/TrackerClient.java:237
#: ../java/src/org/klomp/snark/TrackerClient.java:234
#, java-format
msgid "No valid trackers for {0} - enable opentrackers or DHT?"
msgstr ""
#: ../java/src/org/klomp/snark/UpdateHandler.java:49
#: ../java/src/org/klomp/snark/UpdateRunner.java:229
#: ../java/src/org/klomp/snark/UpdateRunner.java:227
msgid "Updating"
msgstr ""
#: ../java/src/org/klomp/snark/UpdateRunner.java:116
#: ../java/src/org/klomp/snark/UpdateRunner.java:114
#, java-format
msgid "Updating from {0}"
msgstr ""
@ -708,8 +709,7 @@ msgstr "تم انشاء تورنت لـ \"{0}\""
msgid ""
"Many I2P trackers require you to register new torrents before seeding - "
"please do so before starting \"{0}\""
msgstr ""
"العديد من trackers يطلبون تسجيل التورنت قبل مشاركتها، قم بذلك قبل البداية {0}"
msgstr "العديد من trackers يطلبون تسجيل التورنت قبل مشاركتها، قم بذلك قبل البداية {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:979
#, java-format
@ -750,7 +750,8 @@ msgstr ""
msgid "Enter valid tracker name and URLs"
msgstr ""
#. "<input type=\"reset\" class=\"cancel\" value=\"").append(_("Cancel")).append("\">\n" +
#. "<input type=\"reset\" class=\"cancel\"
#. value=\"").append(_("Cancel")).append("\">\n" +
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1091
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2034
msgid "Restore defaults"
@ -871,13 +872,11 @@ msgstr "حذف التورنت من القائمة، حذف ملف .torrent"
#. Single quotes in translate strings with parameters must be doubled.
#. Then the remaining single quote must be escaped
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1444
#, fuzzy, java-format
#, java-format
msgid ""
"Are you sure you want to delete the file \\''{0}\\'' (downloaded data will "
"not be deleted) ?"
msgstr ""
"هل أنت متأكد من حذف الملف \\''{0}.تورنت\\'' (سيتم خذف ايضا الملفات التي تم "
"تحميلها) ?"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1447
msgid "Remove"
@ -945,8 +944,8 @@ msgstr "من عنوان"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1689
msgid ""
"Enter the torrent file download URL (I2P only), magnet link, maggot link, or "
"info hash"
"Enter the torrent file download URL (I2P only), magnet link, maggot link, or"
" info hash"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1694
@ -966,7 +965,8 @@ msgstr "سيتم القاف التورنت عند حذف الملف torrent."
msgid "Create Torrent"
msgstr "أنشئ تورنت"
#. out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\" value=\"" + newFile + "\" /><br>\n");
#. out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\"
#. value=\"" + newFile + "\" /><br>\n");
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1725
msgid "Data to seed"
msgstr "البيانات المشاركة"
@ -1075,8 +1075,8 @@ msgstr "استعمال open trackers ايضا"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1897
msgid ""
"If checked, announce torrents to open trackers as well as the tracker listed "
"in the torrent file"
"If checked, announce torrents to open trackers as well as the tracker listed"
" in the torrent file"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1901
@ -1267,6 +1267,3 @@ msgstr "تجاوز"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2575
msgid "Save priorities"
msgstr "حفظ الأولويات"
#~ msgid "Unable to add {0}"
#~ msgstr "فشل في اضافة {0}"

View File

@ -2,418 +2,416 @@
# Copyright (C) 2009 The I2P Project
# This file is distributed under the same license as the i2psnark package.
# To contribute translations, see http://www.i2p2.de/newdevelopers
#
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-11-19 22:52+0000\n"
"PO-Revision-Date: 2013-11-19 16:49+0000\n"
"POT-Creation-Date: 2013-12-01 20:06+0000\n"
"PO-Revision-Date: 2013-11-19 23:52+0000\n"
"Last-Translator: kytv <killyourtv@i2pmail.org>\n"
"Language-Team: Czech (http://www.transifex.com/projects/p/I2P/language/cs/)\n"
"Language: cs\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: cs\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
#: ../java/src/org/klomp/snark/IdleChecker.java:69
#: ../java/src/org/klomp/snark/SnarkManager.java:1941
#: ../java/src/org/klomp/snark/SnarkManager.java:1952
#: ../java/src/org/klomp/snark/SnarkManager.java:1938
#: ../java/src/org/klomp/snark/SnarkManager.java:1949
msgid "I2P tunnel closed."
msgstr ""
#: ../java/src/org/klomp/snark/MagnetURI.java:42
#: ../java/src/org/klomp/snark/MagnetURI.java:52
#: ../java/src/org/klomp/snark/SnarkManager.java:1646
#: ../java/src/org/klomp/snark/SnarkManager.java:1644
msgid "Magnet"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:506
#: ../java/src/org/klomp/snark/SnarkManager.java:504
#, java-format
msgid "Total uploaders limit changed to {0}"
msgstr "Celkový limit sdílečů změněn na {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:508
#: ../java/src/org/klomp/snark/SnarkManager.java:506
#, java-format
msgid "Minimum total uploaders limit is {0}"
msgstr "Nejmenší celkový limit sdílečů je {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:520
#: ../java/src/org/klomp/snark/SnarkManager.java:518
#, java-format
msgid "Up BW limit changed to {0}KBps"
msgstr "Horní BW limit změněn na {0}KBps"
#: ../java/src/org/klomp/snark/SnarkManager.java:522
#: ../java/src/org/klomp/snark/SnarkManager.java:520
#, java-format
msgid "Minimum up bandwidth limit is {0}KBps"
msgstr "Nejmenší horní limit přenosové rychlist je {0}KBps"
#: ../java/src/org/klomp/snark/SnarkManager.java:534
#: ../java/src/org/klomp/snark/SnarkManager.java:532
#, java-format
msgid "Startup delay changed to {0}"
msgstr "Prodleva při startu změněna na {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:545
#: ../java/src/org/klomp/snark/SnarkManager.java:543
#, java-format
msgid "Refresh time changed to {0}"
msgstr "Doba aktualizace stavu (refresh time) změněna na {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:547
#: ../java/src/org/klomp/snark/SnarkManager.java:545
msgid "Refresh disabled"
msgstr "Aktualizace stavu vypnuta"
#: ../java/src/org/klomp/snark/SnarkManager.java:563
#: ../java/src/org/klomp/snark/SnarkManager.java:561
#, java-format
msgid "Page size changed to {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:572
#: ../java/src/org/klomp/snark/SnarkManager.java:570
msgid "Data directory must be an absolute path"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:574
#: ../java/src/org/klomp/snark/SnarkManager.java:572
msgid "Data directory does not exist"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:576
#: ../java/src/org/klomp/snark/SnarkManager.java:574
msgid "Not a directory"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:578
#: ../java/src/org/klomp/snark/SnarkManager.java:576
msgid "Unreadable"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:583
#: ../java/src/org/klomp/snark/SnarkManager.java:581
#, java-format
msgid "Data directory changed to {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:638
#: ../java/src/org/klomp/snark/SnarkManager.java:636
msgid "I2CP and tunnel changes will take effect after stopping all torrents"
msgstr "Změny I2CP a tunelu se projeví až po zastavení všech torrentů"
#: ../java/src/org/klomp/snark/SnarkManager.java:642
#: ../java/src/org/klomp/snark/SnarkManager.java:640
#, java-format
msgid "I2CP options changed to {0}"
msgstr "Nastavení (options) I2CP změněno na {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:648
#: ../java/src/org/klomp/snark/SnarkManager.java:646
msgid "Disconnecting old I2CP destination"
msgstr "Odpojuji se od starého I2CP cíle"
#: ../java/src/org/klomp/snark/SnarkManager.java:650
#: ../java/src/org/klomp/snark/SnarkManager.java:648
#, java-format
msgid "I2CP settings changed to {0}"
msgstr "Nastavení (settings) I2CP změněno na {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:655
#: ../java/src/org/klomp/snark/SnarkManager.java:653
msgid ""
"Unable to connect with the new settings, reverting to the old I2CP settings"
msgstr "Nemůžu se připojit s novým nastavením I2CP, vracím se k předhozímu."
#: ../java/src/org/klomp/snark/SnarkManager.java:659
#: ../java/src/org/klomp/snark/SnarkManager.java:657
msgid "Unable to reconnect with the old settings!"
msgstr "Nemohu se opětovně připojit ani s předchozím nastavením!"
#: ../java/src/org/klomp/snark/SnarkManager.java:661
#: ../java/src/org/klomp/snark/SnarkManager.java:659
msgid "Reconnected on the new I2CP destination"
msgstr "Opětovně připojeno k novému I2CP cíli"
#: ../java/src/org/klomp/snark/SnarkManager.java:668
#: ../java/src/org/klomp/snark/SnarkManager.java:666
#, java-format
msgid "I2CP listener restarted for \"{0}\""
msgstr "I2CP listener restartován pro \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:682
#: ../java/src/org/klomp/snark/SnarkManager.java:680
msgid "New files will be publicly readable"
msgstr "Nové soubory budou veřejně přístupné"
#: ../java/src/org/klomp/snark/SnarkManager.java:684
#: ../java/src/org/klomp/snark/SnarkManager.java:682
msgid "New files will not be publicly readable"
msgstr "Nové soubory nebudou veřejně přístupné"
#: ../java/src/org/klomp/snark/SnarkManager.java:691
#: ../java/src/org/klomp/snark/SnarkManager.java:689
msgid "Enabled autostart"
msgstr "Automatické spuštění zapnuto"
#: ../java/src/org/klomp/snark/SnarkManager.java:693
#: ../java/src/org/klomp/snark/SnarkManager.java:691
msgid "Disabled autostart"
msgstr "Automatické spuštění vypnuto"
#: ../java/src/org/klomp/snark/SnarkManager.java:699
#: ../java/src/org/klomp/snark/SnarkManager.java:697
msgid "Enabled open trackers - torrent restart required to take effect."
msgstr "Zapnuto automatické spuštění"
#: ../java/src/org/klomp/snark/SnarkManager.java:701
#: ../java/src/org/klomp/snark/SnarkManager.java:699
msgid "Disabled open trackers - torrent restart required to take effect."
msgstr ""
"Otevřené trackery vypnuty - aby se změna projevila je nutné restartovat "
"všechny torrenty"
msgstr "Otevřené trackery vypnuty - aby se změna projevila je nutné restartovat všechny torrenty"
#: ../java/src/org/klomp/snark/SnarkManager.java:708
#: ../java/src/org/klomp/snark/SnarkManager.java:706
msgid "Enabled DHT."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:710
#: ../java/src/org/klomp/snark/SnarkManager.java:708
msgid "Disabled DHT."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:712
#: ../java/src/org/klomp/snark/SnarkManager.java:710
msgid "DHT change requires tunnel shutdown and reopen"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:719
#: ../java/src/org/klomp/snark/SnarkManager.java:717
#, java-format
msgid "{0} theme loaded, return to main i2psnark page to view."
msgstr "Téma {0} bylo nahráno, přejděte prosím na hlavní stránku i2snark"
#: ../java/src/org/klomp/snark/SnarkManager.java:729
#: ../java/src/org/klomp/snark/SnarkManager.java:727
msgid "Configuration unchanged."
msgstr "Nastavení nebylo změněno."
#: ../java/src/org/klomp/snark/SnarkManager.java:761
#: ../java/src/org/klomp/snark/SnarkManager.java:759
msgid "Open Tracker list changed - torrent restart required to take effect."
msgstr ""
"Seznam otevřených trackerů změněn - aby se změna projevila je nutné "
"restartovat všechny torrenty"
msgstr "Seznam otevřených trackerů změněn - aby se změna projevila je nutné restartovat všechny torrenty"
#: ../java/src/org/klomp/snark/SnarkManager.java:771
#: ../java/src/org/klomp/snark/SnarkManager.java:769
msgid "Private tracker list changed - affects newly created torrents only."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:817
#: ../java/src/org/klomp/snark/SnarkManager.java:815
#, java-format
msgid "Unable to save the config to {0}"
msgstr "Nemůžu uložit soubor s nastavením do souboru {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:895
#: ../java/src/org/klomp/snark/SnarkManager.java:893
msgid "Connecting to I2P"
msgstr "Připojuji se k I2P"
#: ../java/src/org/klomp/snark/SnarkManager.java:898
#: ../java/src/org/klomp/snark/SnarkManager.java:896
msgid "Error connecting to I2P - check your I2CP settings!"
msgstr ""
"Při připojování k I2P nastala chyba, zkontrolujte prosím nastavení I2CP!"
msgstr "Při připojování k I2P nastala chyba, zkontrolujte prosím nastavení I2CP!"
#: ../java/src/org/klomp/snark/SnarkManager.java:907
#: ../java/src/org/klomp/snark/SnarkManager.java:1683
#: ../java/src/org/klomp/snark/SnarkManager.java:905
#: ../java/src/org/klomp/snark/SnarkManager.java:1681
#, java-format
msgid "Error: Could not add the torrent {0}"
msgstr "Chyba: nepodařilo se přidat torrent {0}"
#. catch this here so we don't try do delete it below
#: ../java/src/org/klomp/snark/SnarkManager.java:929
#: ../java/src/org/klomp/snark/SnarkManager.java:927
#, java-format
msgid "Cannot open \"{0}\""
msgstr "Nejde otevřít \"{0}\""
#. TODO - if the existing one is a magnet, delete it and add the metainfo instead?
#: ../java/src/org/klomp/snark/SnarkManager.java:948
#: ../java/src/org/klomp/snark/SnarkManager.java:1049
#: ../java/src/org/klomp/snark/SnarkManager.java:1131
#. TODO - if the existing one is a magnet, delete it and add the metainfo
#. instead?
#: ../java/src/org/klomp/snark/SnarkManager.java:946
#: ../java/src/org/klomp/snark/SnarkManager.java:1047
#: ../java/src/org/klomp/snark/SnarkManager.java:1129
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:159
#, java-format
msgid "Torrent with this info hash is already running: {0}"
msgstr "Torrent s tímto infohašišem již běží: {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:954
#: ../java/src/org/klomp/snark/SnarkManager.java:952
#, java-format
msgid "ERROR - No I2P trackers in private torrent \"{0}\""
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:956
#: ../java/src/org/klomp/snark/SnarkManager.java:954
#, java-format
msgid ""
"Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers and "
"DHT only."
"Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers and"
" DHT only."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:959
#: ../java/src/org/klomp/snark/SnarkManager.java:957
#, java-format
msgid ""
"Warning - No I2P trackers in \"{0}\", and open trackers are disabled, will "
"announce to DHT only."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:961
#: ../java/src/org/klomp/snark/SnarkManager.java:959
#, java-format
msgid ""
"Warning - No I2P trackers in \"{0}\", and DHT and open trackers are "
"disabled, you should enable open trackers or DHT before starting the torrent."
"disabled, you should enable open trackers or DHT before starting the "
"torrent."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:983
#: ../java/src/org/klomp/snark/SnarkManager.java:981
#, java-format
msgid "Torrent in \"{0}\" is invalid"
msgstr "Torrent v \"{0}\" je chybný"
#: ../java/src/org/klomp/snark/SnarkManager.java:990
#: ../java/src/org/klomp/snark/SnarkManager.java:988
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:183
#, java-format
msgid "ERROR - Out of memory, cannot create torrent from {0}"
msgstr "CHYBA - nedostatek paměti, nemohu vytvořit torrent z {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1002
#: ../java/src/org/klomp/snark/SnarkManager.java:1000
#, java-format
msgid "Torrent added and started: \"{0}\""
msgstr "Torrent přidán a spuštěn: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:1004
#: ../java/src/org/klomp/snark/SnarkManager.java:1002
#, java-format
msgid "Torrent added: \"{0}\""
msgstr "Torrent přidán: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:1060
#: ../java/src/org/klomp/snark/SnarkManager.java:1058
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:87
#, java-format
msgid "Fetching {0}"
msgstr "Získávám {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1066
#: ../java/src/org/klomp/snark/SnarkManager.java:1064
#, java-format
msgid ""
"Open trackers are disabled and we have no DHT peers. Fetch of {0} may not "
"succeed until you start another torrent, enable open trackers, or enable DHT."
"succeed until you start another torrent, enable open trackers, or enable "
"DHT."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1070
#: ../java/src/org/klomp/snark/SnarkManager.java:1068
#, java-format
msgid "Adding {0}"
msgstr "Přídávám {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1102
#: ../java/src/org/klomp/snark/SnarkManager.java:1100
#, java-format
msgid "Download already running: {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1141
#: ../java/src/org/klomp/snark/SnarkManager.java:1164
#: ../java/src/org/klomp/snark/SnarkManager.java:1602
#: ../java/src/org/klomp/snark/SnarkManager.java:1139
#: ../java/src/org/klomp/snark/SnarkManager.java:1162
#: ../java/src/org/klomp/snark/SnarkManager.java:1600
#, java-format
msgid "Failed to copy torrent file to {0}"
msgstr "Chyba: nepodařilo se zkopírovat soubor torrentu do {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1391
#: ../java/src/org/klomp/snark/SnarkManager.java:1389
#, java-format
msgid "Too many files in \"{0}\" ({1}), deleting it!"
msgstr "V \"{0}\" ({1}) je příliš mnoho souborů, mažu je!"
#: ../java/src/org/klomp/snark/SnarkManager.java:1393
#: ../java/src/org/klomp/snark/SnarkManager.java:1391
#, java-format
msgid "Torrent file \"{0}\" cannot end in \".torrent\", deleting it!"
msgstr "Jméno souboru torrentu \"{0}\" nemůže končit na \".torrent\", mažu ho!"
#: ../java/src/org/klomp/snark/SnarkManager.java:1395
#: ../java/src/org/klomp/snark/SnarkManager.java:1393
#, java-format
msgid "No pieces in \"{0}\", deleting it!"
msgstr "\"{0}\" neobsahuje žádné části, mažu to!"
#: ../java/src/org/klomp/snark/SnarkManager.java:1397
#: ../java/src/org/klomp/snark/SnarkManager.java:1395
#, java-format
msgid "Too many pieces in \"{0}\", limit is {1}, deleting it!"
msgstr "Příliš mnoho částí v \"{0}\", maximum je {1}, mažu to!"
#: ../java/src/org/klomp/snark/SnarkManager.java:1399
#: ../java/src/org/klomp/snark/SnarkManager.java:1397
#, java-format
msgid "Pieces are too large in \"{0}\" ({1}B), deleting it."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1400
#: ../java/src/org/klomp/snark/SnarkManager.java:1398
#, java-format
msgid "Limit is {0}B"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1402
#: ../java/src/org/klomp/snark/SnarkManager.java:1400
#, java-format
msgid "Torrent \"{0}\" has no data, deleting it!"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1410
#: ../java/src/org/klomp/snark/SnarkManager.java:1408
#, java-format
msgid "Torrents larger than {0}B are not supported yet, deleting \"{1}\""
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1426
#: ../java/src/org/klomp/snark/SnarkManager.java:1424
#, java-format
msgid "Error: Could not remove the torrent {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1447
#: ../java/src/org/klomp/snark/SnarkManager.java:1465
#: ../java/src/org/klomp/snark/SnarkManager.java:1445
#: ../java/src/org/klomp/snark/SnarkManager.java:1463
#, java-format
msgid "Torrent stopped: \"{0}\""
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1486
#: ../java/src/org/klomp/snark/SnarkManager.java:1484
#, java-format
msgid "Torrent removed: \"{0}\""
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1494
#: ../java/src/org/klomp/snark/SnarkManager.java:1492
#, java-format
msgid "Adding torrents in {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1525
#: ../java/src/org/klomp/snark/SnarkManager.java:1523
#, java-format
msgid "Up bandwidth limit is {0} KBps"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1547
#: ../java/src/org/klomp/snark/SnarkManager.java:1545
#, java-format
msgid "Download finished: {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1598
#: ../java/src/org/klomp/snark/SnarkManager.java:1596
#, java-format
msgid "Metainfo received for {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1599
#: ../java/src/org/klomp/snark/SnarkManager.java:1829
#: ../java/src/org/klomp/snark/SnarkManager.java:1597
#: ../java/src/org/klomp/snark/SnarkManager.java:1826
#, java-format
msgid "Starting up torrent {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1614
#: ../java/src/org/klomp/snark/SnarkManager.java:1612
#, java-format
msgid "Error on torrent {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1677
#: ../java/src/org/klomp/snark/SnarkManager.java:1675
msgid "Unable to connect to I2P!"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1828
#: ../java/src/org/klomp/snark/SnarkManager.java:1825
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:124
msgid "Opening the I2P tunnel"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1852
#: ../java/src/org/klomp/snark/SnarkManager.java:1849
msgid "Opening the I2P tunnel and starting all torrents."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1915
#: ../java/src/org/klomp/snark/SnarkManager.java:1912
msgid "Stopping all torrents and closing the I2P tunnel."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1934
#: ../java/src/org/klomp/snark/SnarkManager.java:1931
msgid "Closing I2P tunnel after notifying trackers."
msgstr ""
#: ../java/src/org/klomp/snark/TrackerClient.java:237
#: ../java/src/org/klomp/snark/TrackerClient.java:234
#, java-format
msgid "No valid trackers for {0} - enable opentrackers or DHT?"
msgstr ""
#: ../java/src/org/klomp/snark/UpdateHandler.java:49
#: ../java/src/org/klomp/snark/UpdateRunner.java:229
#: ../java/src/org/klomp/snark/UpdateRunner.java:227
msgid "Updating"
msgstr ""
#: ../java/src/org/klomp/snark/UpdateRunner.java:116
#: ../java/src/org/klomp/snark/UpdateRunner.java:114
#, java-format
msgid "Updating from {0}"
msgstr ""
@ -741,7 +739,8 @@ msgstr ""
msgid "Enter valid tracker name and URLs"
msgstr ""
#. "<input type=\"reset\" class=\"cancel\" value=\"").append(_("Cancel")).append("\">\n" +
#. "<input type=\"reset\" class=\"cancel\"
#. value=\"").append(_("Cancel")).append("\">\n" +
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1091
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2034
msgid "Restore defaults"
@ -931,8 +930,8 @@ msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1689
msgid ""
"Enter the torrent file download URL (I2P only), magnet link, maggot link, or "
"info hash"
"Enter the torrent file download URL (I2P only), magnet link, maggot link, or"
" info hash"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1694
@ -952,7 +951,8 @@ msgstr ""
msgid "Create Torrent"
msgstr ""
#. out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\" value=\"" + newFile + "\" /><br>\n");
#. out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\"
#. value=\"" + newFile + "\" /><br>\n");
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1725
msgid "Data to seed"
msgstr ""
@ -1061,8 +1061,8 @@ msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1897
msgid ""
"If checked, announce torrents to open trackers as well as the tracker listed "
"in the torrent file"
"If checked, announce torrents to open trackers as well as the tracker listed"
" in the torrent file"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1901

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -2,433 +2,417 @@
# Copyright (C) 2009 The I2P Project
# This file is distributed under the same license as the i2psnark package.
# To contribute translations, see http://www.i2p2.de/newdevelopers
#
#
# Translators:
# omgitsadalek <mihalymokus76@gmail.com>, 2013
msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-11-19 22:57+0000\n"
"PO-Revision-Date: 2013-11-19 16:49+0000\n"
"POT-Creation-Date: 2013-12-01 20:06+0000\n"
"PO-Revision-Date: 2013-11-19 23:52+0000\n"
"Last-Translator: kytv <killyourtv@i2pmail.org>\n"
"Language-Team: Hungarian (http://www.transifex.com/projects/p/I2P/language/"
"hu/)\n"
"Language: hu\n"
"Language-Team: Hungarian (http://www.transifex.com/projects/p/I2P/language/hu/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: hu\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: ../java/src/org/klomp/snark/IdleChecker.java:69
#: ../java/src/org/klomp/snark/SnarkManager.java:1941
#: ../java/src/org/klomp/snark/SnarkManager.java:1952
#: ../java/src/org/klomp/snark/SnarkManager.java:1938
#: ../java/src/org/klomp/snark/SnarkManager.java:1949
msgid "I2P tunnel closed."
msgstr "I2P alagút lezárva."
#: ../java/src/org/klomp/snark/MagnetURI.java:42
#: ../java/src/org/klomp/snark/MagnetURI.java:52
#: ../java/src/org/klomp/snark/SnarkManager.java:1646
#: ../java/src/org/klomp/snark/SnarkManager.java:1644
msgid "Magnet"
msgstr "Mágnes"
#: ../java/src/org/klomp/snark/SnarkManager.java:506
#: ../java/src/org/klomp/snark/SnarkManager.java:504
#, java-format
msgid "Total uploaders limit changed to {0}"
msgstr "Teljes feltöltők korlátja megváltoztatva a következőre: {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:508
#: ../java/src/org/klomp/snark/SnarkManager.java:506
#, java-format
msgid "Minimum total uploaders limit is {0}"
msgstr "Teljes feltöltők minimum korlátja a következő: {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:520
#: ../java/src/org/klomp/snark/SnarkManager.java:518
#, java-format
msgid "Up BW limit changed to {0}KBps"
msgstr ""
"Feltöltési sávszélesség korlátja megváltoztatva a következőre: {0} KBps"
msgstr "Feltöltési sávszélesség korlátja megváltoztatva a következőre: {0} KBps"
#: ../java/src/org/klomp/snark/SnarkManager.java:522
#: ../java/src/org/klomp/snark/SnarkManager.java:520
#, java-format
msgid "Minimum up bandwidth limit is {0}KBps"
msgstr "A minimum feltöltési sávszélesség korlátja {0} KBps"
#: ../java/src/org/klomp/snark/SnarkManager.java:534
#: ../java/src/org/klomp/snark/SnarkManager.java:532
#, java-format
msgid "Startup delay changed to {0}"
msgstr "Késleltetés indításkor megváltoztatva a következőre: {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:545
#: ../java/src/org/klomp/snark/SnarkManager.java:543
#, java-format
msgid "Refresh time changed to {0}"
msgstr "Frissítési idő a következőre változott: {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:547
#: ../java/src/org/klomp/snark/SnarkManager.java:545
msgid "Refresh disabled"
msgstr "Frissítés kikapcsolva"
#: ../java/src/org/klomp/snark/SnarkManager.java:563
#: ../java/src/org/klomp/snark/SnarkManager.java:561
#, java-format
msgid "Page size changed to {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:572
#: ../java/src/org/klomp/snark/SnarkManager.java:570
msgid "Data directory must be an absolute path"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:574
#: ../java/src/org/klomp/snark/SnarkManager.java:572
msgid "Data directory does not exist"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:576
#: ../java/src/org/klomp/snark/SnarkManager.java:574
msgid "Not a directory"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:578
#: ../java/src/org/klomp/snark/SnarkManager.java:576
msgid "Unreadable"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:583
#: ../java/src/org/klomp/snark/SnarkManager.java:581
#, java-format
msgid "Data directory changed to {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:638
#: ../java/src/org/klomp/snark/SnarkManager.java:636
msgid "I2CP and tunnel changes will take effect after stopping all torrents"
msgstr ""
"Az I2CP-re és alagutakra vonatkozó változtatások az összes torrent "
"leállítása után lépnek érvénybe"
msgstr "Az I2CP-re és alagutakra vonatkozó változtatások az összes torrent leállítása után lépnek érvénybe"
#: ../java/src/org/klomp/snark/SnarkManager.java:642
#: ../java/src/org/klomp/snark/SnarkManager.java:640
#, java-format
msgid "I2CP options changed to {0}"
msgstr "I2CP opciók a következőre lettek változtatva: {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:648
#: ../java/src/org/klomp/snark/SnarkManager.java:646
msgid "Disconnecting old I2CP destination"
msgstr "Lekapcsolódás a régi I2CP célállomásról"
#: ../java/src/org/klomp/snark/SnarkManager.java:650
#: ../java/src/org/klomp/snark/SnarkManager.java:648
#, java-format
msgid "I2CP settings changed to {0}"
msgstr "I2CP beállítások a következőre változtak: {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:655
#: ../java/src/org/klomp/snark/SnarkManager.java:653
msgid ""
"Unable to connect with the new settings, reverting to the old I2CP settings"
msgstr ""
"Sikertelen kapcsolódás az új beállításokat használva, visszatérés a régi "
"I2CP beállításokhoz"
msgstr "Sikertelen kapcsolódás az új beállításokat használva, visszatérés a régi I2CP beállításokhoz"
#: ../java/src/org/klomp/snark/SnarkManager.java:659
#: ../java/src/org/klomp/snark/SnarkManager.java:657
msgid "Unable to reconnect with the old settings!"
msgstr "Sikertelen újrakapcsolódás a régi beállításokat használva!"
#: ../java/src/org/klomp/snark/SnarkManager.java:661
#: ../java/src/org/klomp/snark/SnarkManager.java:659
msgid "Reconnected on the new I2CP destination"
msgstr "Újracsatlakozva az új I2CP célállomásra"
#: ../java/src/org/klomp/snark/SnarkManager.java:668
#: ../java/src/org/klomp/snark/SnarkManager.java:666
#, java-format
msgid "I2CP listener restarted for \"{0}\""
msgstr "I2CP figyelő újraindítva a következőhöz: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:682
#: ../java/src/org/klomp/snark/SnarkManager.java:680
msgid "New files will be publicly readable"
msgstr "Az új fájlok nyilvánosan olvashatók lesznek"
#: ../java/src/org/klomp/snark/SnarkManager.java:684
#: ../java/src/org/klomp/snark/SnarkManager.java:682
msgid "New files will not be publicly readable"
msgstr "Az új fájlok nyilvánosan nem lesznek olvashatók"
#: ../java/src/org/klomp/snark/SnarkManager.java:691
#: ../java/src/org/klomp/snark/SnarkManager.java:689
msgid "Enabled autostart"
msgstr "Automatikus indítás engedélyezve"
#: ../java/src/org/klomp/snark/SnarkManager.java:693
#: ../java/src/org/klomp/snark/SnarkManager.java:691
msgid "Disabled autostart"
msgstr "Automatikus indítás kikapcsolva"
#: ../java/src/org/klomp/snark/SnarkManager.java:699
#: ../java/src/org/klomp/snark/SnarkManager.java:697
msgid "Enabled open trackers - torrent restart required to take effect."
msgstr ""
"Nyílt követők (tracker) engedélyezve - az érvénybe lépéshez a torrent "
"újraindítása szükséges."
msgstr "Nyílt követők (tracker) engedélyezve - az érvénybe lépéshez a torrent újraindítása szükséges."
#: ../java/src/org/klomp/snark/SnarkManager.java:701
#: ../java/src/org/klomp/snark/SnarkManager.java:699
msgid "Disabled open trackers - torrent restart required to take effect."
msgstr ""
"Nyílt követők (tracker) kikapcsolva - az érvénybe lépéshez a torrent "
"újraindítása szükséges."
msgstr "Nyílt követők (tracker) kikapcsolva - az érvénybe lépéshez a torrent újraindítása szükséges."
#: ../java/src/org/klomp/snark/SnarkManager.java:708
#: ../java/src/org/klomp/snark/SnarkManager.java:706
msgid "Enabled DHT."
msgstr "DHT engedélyezve."
#: ../java/src/org/klomp/snark/SnarkManager.java:710
#: ../java/src/org/klomp/snark/SnarkManager.java:708
msgid "Disabled DHT."
msgstr "DHT letiltva."
#: ../java/src/org/klomp/snark/SnarkManager.java:712
#: ../java/src/org/klomp/snark/SnarkManager.java:710
msgid "DHT change requires tunnel shutdown and reopen"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:719
#: ../java/src/org/klomp/snark/SnarkManager.java:717
#, java-format
msgid "{0} theme loaded, return to main i2psnark page to view."
msgstr "{0} téma betöltve, megtekintéséhez térj vissza az i2psnark főoldalára."
#: ../java/src/org/klomp/snark/SnarkManager.java:729
#: ../java/src/org/klomp/snark/SnarkManager.java:727
msgid "Configuration unchanged."
msgstr "Beállítások nem lettek megváltoztatva."
#: ../java/src/org/klomp/snark/SnarkManager.java:761
#: ../java/src/org/klomp/snark/SnarkManager.java:759
msgid "Open Tracker list changed - torrent restart required to take effect."
msgstr ""
"Nyílt Követők (tracker) listája megváltozott - az érvénybe lépéshez a "
"torrent újraindítása szükséges."
msgstr "Nyílt Követők (tracker) listája megváltozott - az érvénybe lépéshez a torrent újraindítása szükséges."
#: ../java/src/org/klomp/snark/SnarkManager.java:771
#: ../java/src/org/klomp/snark/SnarkManager.java:769
msgid "Private tracker list changed - affects newly created torrents only."
msgstr ""
"Megváltozott a privát tracker lista - csak az újonnan létrehozott "
"torrentekre vonatkozik."
msgstr "Megváltozott a privát tracker lista - csak az újonnan létrehozott torrentekre vonatkozik."
#: ../java/src/org/klomp/snark/SnarkManager.java:817
#: ../java/src/org/klomp/snark/SnarkManager.java:815
#, java-format
msgid "Unable to save the config to {0}"
msgstr "Nem sikerült a beállítások mentése a következőre: {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:895
#: ../java/src/org/klomp/snark/SnarkManager.java:893
msgid "Connecting to I2P"
msgstr "Kapcsolódás az I2P-hez"
#: ../java/src/org/klomp/snark/SnarkManager.java:898
#: ../java/src/org/klomp/snark/SnarkManager.java:896
msgid "Error connecting to I2P - check your I2CP settings!"
msgstr "Hiba az I2P-hez való csatlakozáskor - ellenőrizd az I2CP beállításait!"
#: ../java/src/org/klomp/snark/SnarkManager.java:907
#: ../java/src/org/klomp/snark/SnarkManager.java:1683
#: ../java/src/org/klomp/snark/SnarkManager.java:905
#: ../java/src/org/klomp/snark/SnarkManager.java:1681
#, java-format
msgid "Error: Could not add the torrent {0}"
msgstr "Hiba: a következő torrent hozzáadása sikertelen: {0}"
#. catch this here so we don't try do delete it below
#: ../java/src/org/klomp/snark/SnarkManager.java:929
#: ../java/src/org/klomp/snark/SnarkManager.java:927
#, java-format
msgid "Cannot open \"{0}\""
msgstr "\"{0}\" megnyitása sikertelen"
#. TODO - if the existing one is a magnet, delete it and add the metainfo instead?
#: ../java/src/org/klomp/snark/SnarkManager.java:948
#: ../java/src/org/klomp/snark/SnarkManager.java:1049
#: ../java/src/org/klomp/snark/SnarkManager.java:1131
#. TODO - if the existing one is a magnet, delete it and add the metainfo
#. instead?
#: ../java/src/org/klomp/snark/SnarkManager.java:946
#: ../java/src/org/klomp/snark/SnarkManager.java:1047
#: ../java/src/org/klomp/snark/SnarkManager.java:1129
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:159
#, java-format
msgid "Torrent with this info hash is already running: {0}"
msgstr "A torrent már fut ezzel az infó hash-el: {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:954
#: ../java/src/org/klomp/snark/SnarkManager.java:952
#, java-format
msgid "ERROR - No I2P trackers in private torrent \"{0}\""
msgstr ""
"HIBA - Nincsenek I2P követők (trackerek) a következő privát torrentben: "
"\"{0}\""
msgstr "HIBA - Nincsenek I2P követők (trackerek) a következő privát torrentben: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:956
#: ../java/src/org/klomp/snark/SnarkManager.java:954
#, java-format
msgid ""
"Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers and "
"DHT only."
"Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers and"
" DHT only."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:959
#: ../java/src/org/klomp/snark/SnarkManager.java:957
#, java-format
msgid ""
"Warning - No I2P trackers in \"{0}\", and open trackers are disabled, will "
"announce to DHT only."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:961
#: ../java/src/org/klomp/snark/SnarkManager.java:959
#, java-format
msgid ""
"Warning - No I2P trackers in \"{0}\", and DHT and open trackers are "
"disabled, you should enable open trackers or DHT before starting the torrent."
"disabled, you should enable open trackers or DHT before starting the "
"torrent."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:983
#: ../java/src/org/klomp/snark/SnarkManager.java:981
#, java-format
msgid "Torrent in \"{0}\" is invalid"
msgstr "Érvénytelen torrent a következőben: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:990
#: ../java/src/org/klomp/snark/SnarkManager.java:988
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:183
#, java-format
msgid "ERROR - Out of memory, cannot create torrent from {0}"
msgstr ""
"HIBA - nincs több memória, torrent létrehozása sikertelen a következőből: {0}"
msgstr "HIBA - nincs több memória, torrent létrehozása sikertelen a következőből: {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1002
#: ../java/src/org/klomp/snark/SnarkManager.java:1000
#, java-format
msgid "Torrent added and started: \"{0}\""
msgstr "Torrent hozzáadva és elindítva: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:1004
#: ../java/src/org/klomp/snark/SnarkManager.java:1002
#, java-format
msgid "Torrent added: \"{0}\""
msgstr "Torrent hozzáadva: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:1060
#: ../java/src/org/klomp/snark/SnarkManager.java:1058
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:87
#, java-format
msgid "Fetching {0}"
msgstr "Leszedés: {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1066
#: ../java/src/org/klomp/snark/SnarkManager.java:1064
#, java-format
msgid ""
"Open trackers are disabled and we have no DHT peers. Fetch of {0} may not "
"succeed until you start another torrent, enable open trackers, or enable DHT."
"succeed until you start another torrent, enable open trackers, or enable "
"DHT."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1070
#: ../java/src/org/klomp/snark/SnarkManager.java:1068
#, java-format
msgid "Adding {0}"
msgstr "{0} Hozzáadása"
#: ../java/src/org/klomp/snark/SnarkManager.java:1102
#: ../java/src/org/klomp/snark/SnarkManager.java:1100
#, java-format
msgid "Download already running: {0}"
msgstr "Futó letöltés: {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1141
#: ../java/src/org/klomp/snark/SnarkManager.java:1164
#: ../java/src/org/klomp/snark/SnarkManager.java:1602
#: ../java/src/org/klomp/snark/SnarkManager.java:1139
#: ../java/src/org/klomp/snark/SnarkManager.java:1162
#: ../java/src/org/klomp/snark/SnarkManager.java:1600
#, java-format
msgid "Failed to copy torrent file to {0}"
msgstr "Nem sikerült a torrent fájl másolása a következőre: {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1391
#: ../java/src/org/klomp/snark/SnarkManager.java:1389
#, java-format
msgid "Too many files in \"{0}\" ({1}), deleting it!"
msgstr "Túl sok fájl a következőben: \"{0}\" ({1}), törlésre kerül!"
#: ../java/src/org/klomp/snark/SnarkManager.java:1393
#: ../java/src/org/klomp/snark/SnarkManager.java:1391
#, java-format
msgid "Torrent file \"{0}\" cannot end in \".torrent\", deleting it!"
msgstr "Torrent fájl \"{0}\" nem végződhet így: \".torrent\", törlésre kerül!"
#: ../java/src/org/klomp/snark/SnarkManager.java:1395
#: ../java/src/org/klomp/snark/SnarkManager.java:1393
#, java-format
msgid "No pieces in \"{0}\", deleting it!"
msgstr "Nincsenek részek a következőben: \"{0}\", törlésre kerül!"
#: ../java/src/org/klomp/snark/SnarkManager.java:1397
#: ../java/src/org/klomp/snark/SnarkManager.java:1395
#, java-format
msgid "Too many pieces in \"{0}\", limit is {1}, deleting it!"
msgstr "Túl sok rész a következőben: \"{0}\", a határ {1}, törlésre kerül!"
#: ../java/src/org/klomp/snark/SnarkManager.java:1399
#: ../java/src/org/klomp/snark/SnarkManager.java:1397
#, java-format
msgid "Pieces are too large in \"{0}\" ({1}B), deleting it."
msgstr "A részek túl nagyok a következőben: \"{0}\" ({1}B), törlésre kerül."
#: ../java/src/org/klomp/snark/SnarkManager.java:1400
#: ../java/src/org/klomp/snark/SnarkManager.java:1398
#, java-format
msgid "Limit is {0}B"
msgstr "A határ {0}B"
#: ../java/src/org/klomp/snark/SnarkManager.java:1402
#: ../java/src/org/klomp/snark/SnarkManager.java:1400
#, java-format
msgid "Torrent \"{0}\" has no data, deleting it!"
msgstr "\"{0}\" torrent nem tartalmaz adatot, törlésre kerül!"
#: ../java/src/org/klomp/snark/SnarkManager.java:1410
#: ../java/src/org/klomp/snark/SnarkManager.java:1408
#, java-format
msgid "Torrents larger than {0}B are not supported yet, deleting \"{1}\""
msgstr ""
"Nincsenek támogatva torrentek, melyek nagyobbak, mint {0}B, \"{1}\" törlésre "
"kerül"
msgstr "Nincsenek támogatva torrentek, melyek nagyobbak, mint {0}B, \"{1}\" törlésre kerül"
#: ../java/src/org/klomp/snark/SnarkManager.java:1426
#: ../java/src/org/klomp/snark/SnarkManager.java:1424
#, java-format
msgid "Error: Could not remove the torrent {0}"
msgstr "Hiba: a következő torrent eltávolítása sikertelen: {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1447
#: ../java/src/org/klomp/snark/SnarkManager.java:1465
#: ../java/src/org/klomp/snark/SnarkManager.java:1445
#: ../java/src/org/klomp/snark/SnarkManager.java:1463
#, java-format
msgid "Torrent stopped: \"{0}\""
msgstr "Torrent leállítva: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:1486
#: ../java/src/org/klomp/snark/SnarkManager.java:1484
#, java-format
msgid "Torrent removed: \"{0}\""
msgstr "Torrent eltávolítva: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:1494
#: ../java/src/org/klomp/snark/SnarkManager.java:1492
#, java-format
msgid "Adding torrents in {0}"
msgstr "Torrentek hozzáadása a következőben: {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1525
#: ../java/src/org/klomp/snark/SnarkManager.java:1523
#, java-format
msgid "Up bandwidth limit is {0} KBps"
msgstr "Feltöltési sebesség korlát {0} KBps"
#: ../java/src/org/klomp/snark/SnarkManager.java:1547
#: ../java/src/org/klomp/snark/SnarkManager.java:1545
#, java-format
msgid "Download finished: {0}"
msgstr "A letöltés befejeződött: {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1598
#: ../java/src/org/klomp/snark/SnarkManager.java:1596
#, java-format
msgid "Metainfo received for {0}"
msgstr "Metainformáció letöltve a következőhöz: {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1599
#: ../java/src/org/klomp/snark/SnarkManager.java:1829
#: ../java/src/org/klomp/snark/SnarkManager.java:1597
#: ../java/src/org/klomp/snark/SnarkManager.java:1826
#, java-format
msgid "Starting up torrent {0}"
msgstr "{0} torrent indítása"
#: ../java/src/org/klomp/snark/SnarkManager.java:1614
#: ../java/src/org/klomp/snark/SnarkManager.java:1612
#, java-format
msgid "Error on torrent {0}"
msgstr "Hiba a következő torrenten: {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1677
#: ../java/src/org/klomp/snark/SnarkManager.java:1675
msgid "Unable to connect to I2P!"
msgstr "Sikertelen csatlakozás az I2P-hez!"
#: ../java/src/org/klomp/snark/SnarkManager.java:1828
#: ../java/src/org/klomp/snark/SnarkManager.java:1825
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:124
msgid "Opening the I2P tunnel"
msgstr "Az I2P alagút megnyitása"
#: ../java/src/org/klomp/snark/SnarkManager.java:1852
#: ../java/src/org/klomp/snark/SnarkManager.java:1849
msgid "Opening the I2P tunnel and starting all torrents."
msgstr "Az I2P alagút megnyitás, minden torrent indítás alatt."
#: ../java/src/org/klomp/snark/SnarkManager.java:1915
#: ../java/src/org/klomp/snark/SnarkManager.java:1912
msgid "Stopping all torrents and closing the I2P tunnel."
msgstr "Az összes torrent leállítás és az I2P alagút lezárás alatt."
#: ../java/src/org/klomp/snark/SnarkManager.java:1934
#: ../java/src/org/klomp/snark/SnarkManager.java:1931
msgid "Closing I2P tunnel after notifying trackers."
msgstr ""
#: ../java/src/org/klomp/snark/TrackerClient.java:237
#: ../java/src/org/klomp/snark/TrackerClient.java:234
#, java-format
msgid "No valid trackers for {0} - enable opentrackers or DHT?"
msgstr ""
#: ../java/src/org/klomp/snark/UpdateHandler.java:49
#: ../java/src/org/klomp/snark/UpdateRunner.java:229
#: ../java/src/org/klomp/snark/UpdateRunner.java:227
msgid "Updating"
msgstr "Frissítés"
#: ../java/src/org/klomp/snark/UpdateRunner.java:116
#: ../java/src/org/klomp/snark/UpdateRunner.java:114
#, java-format
msgid "Updating from {0}"
msgstr ""
@ -712,10 +696,7 @@ msgstr "Torrent létrehozva a következőnek: \"{0}\""
msgid ""
"Many I2P trackers require you to register new torrents before seeding - "
"please do so before starting \"{0}\""
msgstr ""
"Sok I2P követő (tracker) megköveteli az új torrentek regisztrációját "
"táplálás (seed) előtt - kérlek, regisztrálj, mielőtt elindítod a "
"következőt: \"{0}\""
msgstr "Sok I2P követő (tracker) megköveteli az új torrentek regisztrációját táplálás (seed) előtt - kérlek, regisztrálj, mielőtt elindítod a következőt: \"{0}\""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:979
#, java-format
@ -756,7 +737,8 @@ msgstr "Követő (tracker) hozzáadása"
msgid "Enter valid tracker name and URLs"
msgstr "Adj meg érvényes követő (tracker) nevet és URL címeket"
#. "<input type=\"reset\" class=\"cancel\" value=\"").append(_("Cancel")).append("\">\n" +
#. "<input type=\"reset\" class=\"cancel\"
#. value=\"").append(_("Cancel")).append("\">\n" +
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1091
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2034
msgid "Restore defaults"
@ -873,13 +855,11 @@ msgstr "Torrent eltávolítása az aktív listáról, a .torrent fájl törlés
#. Single quotes in translate strings with parameters must be doubled.
#. Then the remaining single quote must be escaped
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1444
#, fuzzy, java-format
#, java-format
msgid ""
"Are you sure you want to delete the file \\''{0}\\'' (downloaded data will "
"not be deleted) ?"
msgstr ""
"Biztos, hogy törölni akarod a következő fájlt: \\''{0}.torrent\\'' (a "
"letöltött adat nem kerül törlésre) ?"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1447
msgid "Remove"
@ -897,9 +877,7 @@ msgstr ".torrent fájl törlése a hozzá tartozó adatfájlokkal együtt"
msgid ""
"Are you sure you want to delete the torrent \\''{0}\\'' and all downloaded "
"data?"
msgstr ""
"Biztos, hogy törlöd a következő torrentet és az összes letöltött adatot: "
"\\''{0}\\'' ?"
msgstr "Biztos, hogy törlöd a következő torrentet és az összes letöltött adatot: \\''{0}\\'' ?"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1467
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1997
@ -949,11 +927,9 @@ msgstr "URL címről"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1689
msgid ""
"Enter the torrent file download URL (I2P only), magnet link, maggot link, or "
"info hash"
msgstr ""
"Add meg a torrent fájl letöltési URL-jét (csak I2P), mágnes linket, maggot "
"linket vagy infó hash-t"
"Enter the torrent file download URL (I2P only), magnet link, maggot link, or"
" info hash"
msgstr "Add meg a torrent fájl letöltési URL-jét (csak I2P), mágnes linket, maggot linket vagy infó hash-t"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1694
msgid "Add torrent"
@ -972,7 +948,8 @@ msgstr "A .torrent fájl eltávolításával meg fog állni."
msgid "Create Torrent"
msgstr "Torrent létrehozása"
#. out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\" value=\"" + newFile + "\" /><br>\n");
#. out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\"
#. value=\"" + newFile + "\" /><br>\n");
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1725
msgid "Data to seed"
msgstr "Adat táplálásra (seed)"
@ -1081,11 +1058,9 @@ msgstr "Nyílt követőket (tracker) is használjon"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1897
msgid ""
"If checked, announce torrents to open trackers as well as the tracker listed "
"in the torrent file"
msgstr ""
"Ha be van jelölve, bejelenti a torrenteket a nyílt követőkre (tracker) és "
"torrent fájlban feltüntetett követőre is"
"If checked, announce torrents to open trackers as well as the tracker listed"
" in the torrent file"
msgstr "Ha be van jelölve, bejelenti a torrenteket a nyílt követőkre (tracker) és torrent fájlban feltüntetett követőre is"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1901
msgid "Enable DHT"
@ -1267,6 +1242,3 @@ msgstr "Kihagy"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2575
msgid "Save priorities"
msgstr "Tulajdonságok mentése"
#~ msgid "Unable to add {0}"
#~ msgstr "{0} hozzáadása sikertelen"

File diff suppressed because it is too large Load Diff

View File

@ -2,7 +2,7 @@
# Copyright (C) 2009 The I2P Project
# This file is distributed under the same license as the i2psnark package.
# To contribute translations, see http://www.i2p2.de/newdevelopers
#
#
# Translators:
# ducki2p <ducki2p@gmail.com>, 2011
# foo <foo@bar>, 2009
@ -10,413 +10,410 @@ msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-11-19 23:00+0000\n"
"PO-Revision-Date: 2013-11-19 16:49+0000\n"
"POT-Creation-Date: 2013-12-01 20:06+0000\n"
"PO-Revision-Date: 2013-11-19 23:52+0000\n"
"Last-Translator: kytv <killyourtv@i2pmail.org>\n"
"Language-Team: Dutch (http://www.transifex.com/projects/p/I2P/language/nl/)\n"
"Language: nl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: nl\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: ../java/src/org/klomp/snark/IdleChecker.java:69
#: ../java/src/org/klomp/snark/SnarkManager.java:1941
#: ../java/src/org/klomp/snark/SnarkManager.java:1952
#: ../java/src/org/klomp/snark/SnarkManager.java:1938
#: ../java/src/org/klomp/snark/SnarkManager.java:1949
msgid "I2P tunnel closed."
msgstr "I2P tunnel gesloten."
#: ../java/src/org/klomp/snark/MagnetURI.java:42
#: ../java/src/org/klomp/snark/MagnetURI.java:52
#: ../java/src/org/klomp/snark/SnarkManager.java:1646
#: ../java/src/org/klomp/snark/SnarkManager.java:1644
msgid "Magnet"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:506
#: ../java/src/org/klomp/snark/SnarkManager.java:504
#, java-format
msgid "Total uploaders limit changed to {0}"
msgstr "Totale uploaders limiet gewijzigd in {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:508
#: ../java/src/org/klomp/snark/SnarkManager.java:506
#, java-format
msgid "Minimum total uploaders limit is {0}"
msgstr "Minimum totale uploaders limiet is {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:520
#: ../java/src/org/klomp/snark/SnarkManager.java:518
#, java-format
msgid "Up BW limit changed to {0}KBps"
msgstr "Up bandbreedte limiet gewijzigd in {0}KBps"
#: ../java/src/org/klomp/snark/SnarkManager.java:522
#: ../java/src/org/klomp/snark/SnarkManager.java:520
#, java-format
msgid "Minimum up bandwidth limit is {0}KBps"
msgstr "Minimum up bandbreedte limiet is {0}KBps"
#: ../java/src/org/klomp/snark/SnarkManager.java:534
#: ../java/src/org/klomp/snark/SnarkManager.java:532
#, java-format
msgid "Startup delay changed to {0}"
msgstr "Opstartvertraging gewijzigd in {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:545
#: ../java/src/org/klomp/snark/SnarkManager.java:543
#, java-format
msgid "Refresh time changed to {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:547
#: ../java/src/org/klomp/snark/SnarkManager.java:545
msgid "Refresh disabled"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:563
#: ../java/src/org/klomp/snark/SnarkManager.java:561
#, java-format
msgid "Page size changed to {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:572
#: ../java/src/org/klomp/snark/SnarkManager.java:570
msgid "Data directory must be an absolute path"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:574
#: ../java/src/org/klomp/snark/SnarkManager.java:572
msgid "Data directory does not exist"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:576
#: ../java/src/org/klomp/snark/SnarkManager.java:574
msgid "Not a directory"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:578
#: ../java/src/org/klomp/snark/SnarkManager.java:576
msgid "Unreadable"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:583
#: ../java/src/org/klomp/snark/SnarkManager.java:581
#, java-format
msgid "Data directory changed to {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:638
#: ../java/src/org/klomp/snark/SnarkManager.java:636
msgid "I2CP and tunnel changes will take effect after stopping all torrents"
msgstr ""
"I2CP en tunnel wijzigingen hebben pas effect na het stoppen van alle torrents"
msgstr "I2CP en tunnel wijzigingen hebben pas effect na het stoppen van alle torrents"
#: ../java/src/org/klomp/snark/SnarkManager.java:642
#: ../java/src/org/klomp/snark/SnarkManager.java:640
#, java-format
msgid "I2CP options changed to {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:648
#: ../java/src/org/klomp/snark/SnarkManager.java:646
msgid "Disconnecting old I2CP destination"
msgstr "Oude I2CP destination wordt afgesloten"
#: ../java/src/org/klomp/snark/SnarkManager.java:650
#: ../java/src/org/klomp/snark/SnarkManager.java:648
#, java-format
msgid "I2CP settings changed to {0}"
msgstr "I2CP instellingen gewijzigd in {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:655
#: ../java/src/org/klomp/snark/SnarkManager.java:653
msgid ""
"Unable to connect with the new settings, reverting to the old I2CP settings"
msgstr ""
"Kan geen connectie maken met de nieuwe instellingen, we keren terug naar "
"oude I2CP instellingen"
msgstr "Kan geen connectie maken met de nieuwe instellingen, we keren terug naar oude I2CP instellingen"
#: ../java/src/org/klomp/snark/SnarkManager.java:659
#: ../java/src/org/klomp/snark/SnarkManager.java:657
msgid "Unable to reconnect with the old settings!"
msgstr "Kan niet opnieuw verbinden met de oude instellingen!"
#: ../java/src/org/klomp/snark/SnarkManager.java:661
#: ../java/src/org/klomp/snark/SnarkManager.java:659
msgid "Reconnected on the new I2CP destination"
msgstr "Opnieuw verbonden met de nieuwe I2CP destination"
#: ../java/src/org/klomp/snark/SnarkManager.java:668
#: ../java/src/org/klomp/snark/SnarkManager.java:666
#, java-format
msgid "I2CP listener restarted for \"{0}\""
msgstr "I2CP listener herstart voor \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:682
#: ../java/src/org/klomp/snark/SnarkManager.java:680
msgid "New files will be publicly readable"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:684
#: ../java/src/org/klomp/snark/SnarkManager.java:682
msgid "New files will not be publicly readable"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:691
#: ../java/src/org/klomp/snark/SnarkManager.java:689
msgid "Enabled autostart"
msgstr "Autostart ingeschakeld"
#: ../java/src/org/klomp/snark/SnarkManager.java:693
#: ../java/src/org/klomp/snark/SnarkManager.java:691
msgid "Disabled autostart"
msgstr "Autostart uitgeschakeld"
#: ../java/src/org/klomp/snark/SnarkManager.java:699
#: ../java/src/org/klomp/snark/SnarkManager.java:697
msgid "Enabled open trackers - torrent restart required to take effect."
msgstr "Open Trackers ingeschakeld - torrent herstart nodig."
#: ../java/src/org/klomp/snark/SnarkManager.java:701
#: ../java/src/org/klomp/snark/SnarkManager.java:699
msgid "Disabled open trackers - torrent restart required to take effect."
msgstr "Open Trackers uitgeschakeld - torrent herstart nodig."
#: ../java/src/org/klomp/snark/SnarkManager.java:708
#: ../java/src/org/klomp/snark/SnarkManager.java:706
msgid "Enabled DHT."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:710
#: ../java/src/org/klomp/snark/SnarkManager.java:708
msgid "Disabled DHT."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:712
#: ../java/src/org/klomp/snark/SnarkManager.java:710
msgid "DHT change requires tunnel shutdown and reopen"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:719
#: ../java/src/org/klomp/snark/SnarkManager.java:717
#, java-format
msgid "{0} theme loaded, return to main i2psnark page to view."
msgstr ""
"{0} thema geladen, ga naar de hoofd i2psnark pagina om deze te bekijken."
msgstr "{0} thema geladen, ga naar de hoofd i2psnark pagina om deze te bekijken."
#: ../java/src/org/klomp/snark/SnarkManager.java:729
#: ../java/src/org/klomp/snark/SnarkManager.java:727
msgid "Configuration unchanged."
msgstr "Configuratie ongewijzigd."
#: ../java/src/org/klomp/snark/SnarkManager.java:761
#: ../java/src/org/klomp/snark/SnarkManager.java:759
msgid "Open Tracker list changed - torrent restart required to take effect."
msgstr "Open Tracker lijst gewijzigd - torrent herstart nodig."
#: ../java/src/org/klomp/snark/SnarkManager.java:771
#: ../java/src/org/klomp/snark/SnarkManager.java:769
msgid "Private tracker list changed - affects newly created torrents only."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:817
#: ../java/src/org/klomp/snark/SnarkManager.java:815
#, java-format
msgid "Unable to save the config to {0}"
msgstr "Kan de configuratie niet opslaan in {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:895
#: ../java/src/org/klomp/snark/SnarkManager.java:893
msgid "Connecting to I2P"
msgstr "Verbinden met I2P"
#: ../java/src/org/klomp/snark/SnarkManager.java:898
#: ../java/src/org/klomp/snark/SnarkManager.java:896
msgid "Error connecting to I2P - check your I2CP settings!"
msgstr "Fout bij verbinden met I2P - controlleer je I2CP instellingen!"
#: ../java/src/org/klomp/snark/SnarkManager.java:907
#: ../java/src/org/klomp/snark/SnarkManager.java:1683
#: ../java/src/org/klomp/snark/SnarkManager.java:905
#: ../java/src/org/klomp/snark/SnarkManager.java:1681
#, java-format
msgid "Error: Could not add the torrent {0}"
msgstr "Fout: Kan de torrent {0} niet toevoegen"
#. catch this here so we don't try do delete it below
#: ../java/src/org/klomp/snark/SnarkManager.java:929
#: ../java/src/org/klomp/snark/SnarkManager.java:927
#, java-format
msgid "Cannot open \"{0}\""
msgstr "Kan \"{0}\" niet openen"
#. TODO - if the existing one is a magnet, delete it and add the metainfo instead?
#: ../java/src/org/klomp/snark/SnarkManager.java:948
#: ../java/src/org/klomp/snark/SnarkManager.java:1049
#: ../java/src/org/klomp/snark/SnarkManager.java:1131
#. TODO - if the existing one is a magnet, delete it and add the metainfo
#. instead?
#: ../java/src/org/klomp/snark/SnarkManager.java:946
#: ../java/src/org/klomp/snark/SnarkManager.java:1047
#: ../java/src/org/klomp/snark/SnarkManager.java:1129
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:159
#, java-format
msgid "Torrent with this info hash is already running: {0}"
msgstr "Torrent met deze info hash is al actief: {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:954
#: ../java/src/org/klomp/snark/SnarkManager.java:952
#, java-format
msgid "ERROR - No I2P trackers in private torrent \"{0}\""
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:956
#: ../java/src/org/klomp/snark/SnarkManager.java:954
#, java-format
msgid ""
"Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers and "
"DHT only."
"Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers and"
" DHT only."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:959
#: ../java/src/org/klomp/snark/SnarkManager.java:957
#, java-format
msgid ""
"Warning - No I2P trackers in \"{0}\", and open trackers are disabled, will "
"announce to DHT only."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:961
#: ../java/src/org/klomp/snark/SnarkManager.java:959
#, java-format
msgid ""
"Warning - No I2P trackers in \"{0}\", and DHT and open trackers are "
"disabled, you should enable open trackers or DHT before starting the torrent."
"disabled, you should enable open trackers or DHT before starting the "
"torrent."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:983
#: ../java/src/org/klomp/snark/SnarkManager.java:981
#, java-format
msgid "Torrent in \"{0}\" is invalid"
msgstr "Torrent in \"{0}\" is ongeldig"
#: ../java/src/org/klomp/snark/SnarkManager.java:990
#: ../java/src/org/klomp/snark/SnarkManager.java:988
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:183
#, java-format
msgid "ERROR - Out of memory, cannot create torrent from {0}"
msgstr "ERROR - Geen geheugen meer, kan geen torrent maken van {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1002
#: ../java/src/org/klomp/snark/SnarkManager.java:1000
#, java-format
msgid "Torrent added and started: \"{0}\""
msgstr "Torrent toegevoegd en gestart: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:1004
#: ../java/src/org/klomp/snark/SnarkManager.java:1002
#, java-format
msgid "Torrent added: \"{0}\""
msgstr "Torrent toegevoegd: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:1060
#: ../java/src/org/klomp/snark/SnarkManager.java:1058
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:87
#, java-format
msgid "Fetching {0}"
msgstr "Downloaden {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1066
#: ../java/src/org/klomp/snark/SnarkManager.java:1064
#, java-format
msgid ""
"Open trackers are disabled and we have no DHT peers. Fetch of {0} may not "
"succeed until you start another torrent, enable open trackers, or enable DHT."
"succeed until you start another torrent, enable open trackers, or enable "
"DHT."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1070
#: ../java/src/org/klomp/snark/SnarkManager.java:1068
#, java-format
msgid "Adding {0}"
msgstr "Toevoegen van {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1102
#: ../java/src/org/klomp/snark/SnarkManager.java:1100
#, java-format
msgid "Download already running: {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1141
#: ../java/src/org/klomp/snark/SnarkManager.java:1164
#: ../java/src/org/klomp/snark/SnarkManager.java:1602
#: ../java/src/org/klomp/snark/SnarkManager.java:1139
#: ../java/src/org/klomp/snark/SnarkManager.java:1162
#: ../java/src/org/klomp/snark/SnarkManager.java:1600
#, java-format
msgid "Failed to copy torrent file to {0}"
msgstr "Kan het torrent bestand niet kopieren naar {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1391
#: ../java/src/org/klomp/snark/SnarkManager.java:1389
#, java-format
msgid "Too many files in \"{0}\" ({1}), deleting it!"
msgstr "Te veel bestanden in \"{0}\" ({1}), wordt verwijderd!"
#: ../java/src/org/klomp/snark/SnarkManager.java:1393
#: ../java/src/org/klomp/snark/SnarkManager.java:1391
#, java-format
msgid "Torrent file \"{0}\" cannot end in \".torrent\", deleting it!"
msgstr ""
"Torrent bestand \"{0}\" kan niet eindigen in \".torrent\", wordt verwijderd!"
msgstr "Torrent bestand \"{0}\" kan niet eindigen in \".torrent\", wordt verwijderd!"
#: ../java/src/org/klomp/snark/SnarkManager.java:1395
#: ../java/src/org/klomp/snark/SnarkManager.java:1393
#, java-format
msgid "No pieces in \"{0}\", deleting it!"
msgstr "Geen stukken in \"{0}\", wordt verwijderd!"
#: ../java/src/org/klomp/snark/SnarkManager.java:1397
#: ../java/src/org/klomp/snark/SnarkManager.java:1395
#, java-format
msgid "Too many pieces in \"{0}\", limit is {1}, deleting it!"
msgstr "Te veel stukken in \"{0}\", limiet is {1}, wordt verwijderd!"
#: ../java/src/org/klomp/snark/SnarkManager.java:1399
#: ../java/src/org/klomp/snark/SnarkManager.java:1397
#, java-format
msgid "Pieces are too large in \"{0}\" ({1}B), deleting it."
msgstr "Stukken zijn te groot in \"{0}\" ({1}B), wordt verwijderd."
#: ../java/src/org/klomp/snark/SnarkManager.java:1400
#: ../java/src/org/klomp/snark/SnarkManager.java:1398
#, java-format
msgid "Limit is {0}B"
msgstr "Limiet is {0}B"
#: ../java/src/org/klomp/snark/SnarkManager.java:1402
#: ../java/src/org/klomp/snark/SnarkManager.java:1400
#, java-format
msgid "Torrent \"{0}\" has no data, deleting it!"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1410
#: ../java/src/org/klomp/snark/SnarkManager.java:1408
#, java-format
msgid "Torrents larger than {0}B are not supported yet, deleting \"{1}\""
msgstr ""
"Torrents groter dan {0}B worden nog niet ondersteund, verwijder \"{1}\""
msgstr "Torrents groter dan {0}B worden nog niet ondersteund, verwijder \"{1}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:1426
#: ../java/src/org/klomp/snark/SnarkManager.java:1424
#, java-format
msgid "Error: Could not remove the torrent {0}"
msgstr "Fout: Kan de torrent {0} niet verwijderen"
#: ../java/src/org/klomp/snark/SnarkManager.java:1447
#: ../java/src/org/klomp/snark/SnarkManager.java:1465
#: ../java/src/org/klomp/snark/SnarkManager.java:1445
#: ../java/src/org/klomp/snark/SnarkManager.java:1463
#, java-format
msgid "Torrent stopped: \"{0}\""
msgstr "Torrent gestopt: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:1486
#: ../java/src/org/klomp/snark/SnarkManager.java:1484
#, java-format
msgid "Torrent removed: \"{0}\""
msgstr "Torrent verwijderd: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:1494
#: ../java/src/org/klomp/snark/SnarkManager.java:1492
#, java-format
msgid "Adding torrents in {0}"
msgstr "Toevoegen van torrents in {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1525
#: ../java/src/org/klomp/snark/SnarkManager.java:1523
#, java-format
msgid "Up bandwidth limit is {0} KBps"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1547
#: ../java/src/org/klomp/snark/SnarkManager.java:1545
#, java-format
msgid "Download finished: {0}"
msgstr "Download gereed: {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1598
#: ../java/src/org/klomp/snark/SnarkManager.java:1596
#, java-format
msgid "Metainfo received for {0}"
msgstr "Metainfo ontvangen voor {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1599
#: ../java/src/org/klomp/snark/SnarkManager.java:1829
#: ../java/src/org/klomp/snark/SnarkManager.java:1597
#: ../java/src/org/klomp/snark/SnarkManager.java:1826
#, java-format
msgid "Starting up torrent {0}"
msgstr "Starten met torrent {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1614
#: ../java/src/org/klomp/snark/SnarkManager.java:1612
#, java-format
msgid "Error on torrent {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1677
#: ../java/src/org/klomp/snark/SnarkManager.java:1675
msgid "Unable to connect to I2P!"
msgstr "Kan niet verbinden met I2P!"
#: ../java/src/org/klomp/snark/SnarkManager.java:1828
#: ../java/src/org/klomp/snark/SnarkManager.java:1825
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:124
msgid "Opening the I2P tunnel"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1852
#: ../java/src/org/klomp/snark/SnarkManager.java:1849
msgid "Opening the I2P tunnel and starting all torrents."
msgstr "Openen van de I2P tunnel en starten van alle torrents."
#: ../java/src/org/klomp/snark/SnarkManager.java:1915
#: ../java/src/org/klomp/snark/SnarkManager.java:1912
msgid "Stopping all torrents and closing the I2P tunnel."
msgstr "Stoppen van alle torrents en sluiten van I2P tunnel."
#: ../java/src/org/klomp/snark/SnarkManager.java:1934
#: ../java/src/org/klomp/snark/SnarkManager.java:1931
msgid "Closing I2P tunnel after notifying trackers."
msgstr ""
#: ../java/src/org/klomp/snark/TrackerClient.java:237
#: ../java/src/org/klomp/snark/TrackerClient.java:234
#, java-format
msgid "No valid trackers for {0} - enable opentrackers or DHT?"
msgstr ""
#: ../java/src/org/klomp/snark/UpdateHandler.java:49
#: ../java/src/org/klomp/snark/UpdateRunner.java:229
#: ../java/src/org/klomp/snark/UpdateRunner.java:227
msgid "Updating"
msgstr ""
#: ../java/src/org/klomp/snark/UpdateRunner.java:116
#: ../java/src/org/klomp/snark/UpdateRunner.java:114
#, java-format
msgid "Updating from {0}"
msgstr ""
@ -700,9 +697,7 @@ msgstr "Torrent gemaakt voor \"{0}\""
msgid ""
"Many I2P trackers require you to register new torrents before seeding - "
"please do so before starting \"{0}\""
msgstr ""
"Veel I2P trackers vereisen dat je de nieuwe torrent registreert voor het "
"seeden - doe dit voordat je \"{0}\" start"
msgstr "Veel I2P trackers vereisen dat je de nieuwe torrent registreert voor het seeden - doe dit voordat je \"{0}\" start"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:979
#, java-format
@ -716,8 +711,7 @@ msgstr "Kan geen torrent maken voor niet-bestaande data: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:986
msgid "Error creating torrent - you must enter a file or directory"
msgstr ""
"Fout bij het maken van de torrent - je moet een bestand of directory invullen"
msgstr "Fout bij het maken van de torrent - je moet een bestand of directory invullen"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1017
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2031
@ -744,7 +738,8 @@ msgstr ""
msgid "Enter valid tracker name and URLs"
msgstr ""
#. "<input type=\"reset\" class=\"cancel\" value=\"").append(_("Cancel")).append("\">\n" +
#. "<input type=\"reset\" class=\"cancel\"
#. value=\"").append(_("Cancel")).append("\">\n" +
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1091
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2034
msgid "Restore defaults"
@ -855,21 +850,17 @@ msgstr "Start"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1439
msgid "Remove the torrent from the active list, deleting the .torrent file"
msgstr ""
"Verwijder de torrent van de actieve lijst, het .torrent bestand wordt "
"verwijderd"
msgstr "Verwijder de torrent van de actieve lijst, het .torrent bestand wordt verwijderd"
#. Can't figure out how to escape double quotes inside the onclick string.
#. Single quotes in translate strings with parameters must be doubled.
#. Then the remaining single quote must be escaped
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1444
#, fuzzy, java-format
#, java-format
msgid ""
"Are you sure you want to delete the file \\''{0}\\'' (downloaded data will "
"not be deleted) ?"
msgstr ""
"Weet je zeker dat je het bestand \\''{0}.torrent\\'' wilt verwijderen "
"(gedownloade data zal niet worden verwijderd) ?"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1447
msgid "Remove"
@ -887,9 +878,7 @@ msgstr "Verwijder het .torrent bestand en de gerelateerde data bestand(en)"
msgid ""
"Are you sure you want to delete the torrent \\''{0}\\'' and all downloaded "
"data?"
msgstr ""
"Weet je zeker dat je de torrent \\''{0}\\'' en alle gedownloade data wilt "
"verwijderen?"
msgstr "Weet je zeker dat je de torrent \\''{0}\\'' en alle gedownloade data wilt verwijderen?"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1467
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1997
@ -939,8 +928,8 @@ msgstr "Van URL"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1689
msgid ""
"Enter the torrent file download URL (I2P only), magnet link, maggot link, or "
"info hash"
"Enter the torrent file download URL (I2P only), magnet link, maggot link, or"
" info hash"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1694
@ -960,15 +949,15 @@ msgstr "Verwijderen van een .torrent zorgt dat deze stopt."
msgid "Create Torrent"
msgstr "Creëer Torrent"
#. out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\" value=\"" + newFile + "\" /><br>\n");
#. out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\"
#. value=\"" + newFile + "\" /><br>\n");
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1725
msgid "Data to seed"
msgstr "Data om te seeden"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1729
msgid "File or directory to seed (must be within the specified path)"
msgstr ""
"Bestand of directory om te seeden (moet binnen het gespecificeerde pad zijn)"
msgstr "Bestand of directory om te seeden (moet binnen het gespecificeerde pad zijn)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1731
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1975
@ -1070,11 +1059,9 @@ msgstr "Gebruik ook open trackers"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1897
msgid ""
"If checked, announce torrents to open trackers as well as the tracker listed "
"in the torrent file"
msgstr ""
"Indien aangevinkt, kondig torrents ook aan bij de tracker uit het torrent "
"bestand"
"If checked, announce torrents to open trackers as well as the tracker listed"
" in the torrent file"
msgstr "Indien aangevinkt, kondig torrents ook aan bij de tracker uit het torrent bestand"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1901
msgid "Enable DHT"
@ -1256,6 +1243,3 @@ msgstr "Overslaan"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2575
msgid "Save priorities"
msgstr "Prioriteiten opslaan"
#~ msgid "Unable to add {0}"
#~ msgstr "Kan {0} niet toevoegen"

View File

@ -2,433 +2,422 @@
# Copyright (C) 2009 The I2P Project
# This file is distributed under the same license as the i2psnark package.
# To contribute translations, see http://www.i2p2.de/newdevelopers
#
#
# Translators:
# PolishAnon <b790979@klzlk.com>, 2011
# Warton <businesshehe@yahoo.com>, 2012
# foo <foo@bar>, 2009
# polacco <polacco@i2pmail.org>, 2012
# sebx, 2014
# Smert <Smert@safe-mail.net>, 2013
msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-11-19 23:01+0000\n"
"PO-Revision-Date: 2013-11-19 16:49+0000\n"
"Last-Translator: kytv <killyourtv@i2pmail.org>\n"
"Language-Team: Polish (http://www.transifex.com/projects/p/I2P/language/"
"pl/)\n"
"Language: pl\n"
"POT-Creation-Date: 2013-12-01 20:06+0000\n"
"PO-Revision-Date: 2014-01-01 12:32+0000\n"
"Last-Translator: sebx\n"
"Language-Team: Polish (http://www.transifex.com/projects/p/I2P/language/pl/)\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==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2);\n"
"Language: pl\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#: ../java/src/org/klomp/snark/IdleChecker.java:69
#: ../java/src/org/klomp/snark/SnarkManager.java:1941
#: ../java/src/org/klomp/snark/SnarkManager.java:1952
#: ../java/src/org/klomp/snark/SnarkManager.java:1938
#: ../java/src/org/klomp/snark/SnarkManager.java:1949
msgid "I2P tunnel closed."
msgstr "Zamknięto tunel I2P."
#: ../java/src/org/klomp/snark/MagnetURI.java:42
#: ../java/src/org/klomp/snark/MagnetURI.java:52
#: ../java/src/org/klomp/snark/SnarkManager.java:1646
#: ../java/src/org/klomp/snark/SnarkManager.java:1644
msgid "Magnet"
msgstr "Magnet"
#: ../java/src/org/klomp/snark/SnarkManager.java:506
#: ../java/src/org/klomp/snark/SnarkManager.java:504
#, java-format
msgid "Total uploaders limit changed to {0}"
msgstr "Ograniczenie liczby uploaderów zmieniono do {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:508
#: ../java/src/org/klomp/snark/SnarkManager.java:506
#, java-format
msgid "Minimum total uploaders limit is {0}"
msgstr "Minimalny całkowity limit uploadera: {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:520
#: ../java/src/org/klomp/snark/SnarkManager.java:518
#, java-format
msgid "Up BW limit changed to {0}KBps"
msgstr "Ograniczenie pasma WY zmieniono na: {0} KB/s"
#: ../java/src/org/klomp/snark/SnarkManager.java:522
#: ../java/src/org/klomp/snark/SnarkManager.java:520
#, java-format
msgid "Minimum up bandwidth limit is {0}KBps"
msgstr "Minimalne pasmo WY to: {0} KB/s"
#: ../java/src/org/klomp/snark/SnarkManager.java:534
#: ../java/src/org/klomp/snark/SnarkManager.java:532
#, java-format
msgid "Startup delay changed to {0}"
msgstr "Opóźnienia startu zmieniono na {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:545
#: ../java/src/org/klomp/snark/SnarkManager.java:543
#, java-format
msgid "Refresh time changed to {0}"
msgstr "Czas odświerzania zmieniony na {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:547
#: ../java/src/org/klomp/snark/SnarkManager.java:545
msgid "Refresh disabled"
msgstr "Odświeżanie wyłączone"
#: ../java/src/org/klomp/snark/SnarkManager.java:563
#: ../java/src/org/klomp/snark/SnarkManager.java:561
#, java-format
msgid "Page size changed to {0}"
msgstr ""
msgstr "Rozmiar strony zmieniony do {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:570
msgid "Data directory must be an absolute path"
msgstr "Katalog danych musi być pełna ścieżką"
#: ../java/src/org/klomp/snark/SnarkManager.java:572
msgid "Data directory must be an absolute path"
msgstr ""
msgid "Data directory does not exist"
msgstr "Katalog danych nie istnieje"
#: ../java/src/org/klomp/snark/SnarkManager.java:574
msgid "Data directory does not exist"
msgstr ""
msgid "Not a directory"
msgstr "To nie jest katalog"
#: ../java/src/org/klomp/snark/SnarkManager.java:576
msgid "Not a directory"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:578
msgid "Unreadable"
msgstr ""
msgstr "Nieczytelne"
#: ../java/src/org/klomp/snark/SnarkManager.java:583
#: ../java/src/org/klomp/snark/SnarkManager.java:581
#, java-format
msgid "Data directory changed to {0}"
msgstr ""
msgstr "Katalog danych zmieniony do {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:638
#: ../java/src/org/klomp/snark/SnarkManager.java:636
msgid "I2CP and tunnel changes will take effect after stopping all torrents"
msgstr ""
"Zmiany dotyczące I2CP i tuneli będą wprowadzone po zatrzymaniu wszystkich "
"torrentów."
msgstr "Zmiany dotyczące I2CP i tuneli będą wprowadzone po zatrzymaniu wszystkich torrentów."
#: ../java/src/org/klomp/snark/SnarkManager.java:642
#: ../java/src/org/klomp/snark/SnarkManager.java:640
#, java-format
msgid "I2CP options changed to {0}"
msgstr "Opcje I2CP zmienione na {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:648
#: ../java/src/org/klomp/snark/SnarkManager.java:646
msgid "Disconnecting old I2CP destination"
msgstr "Rozłączanie starych celów I2CP"
#: ../java/src/org/klomp/snark/SnarkManager.java:650
#: ../java/src/org/klomp/snark/SnarkManager.java:648
#, java-format
msgid "I2CP settings changed to {0}"
msgstr "Ustawienia I2CP zmienione do: {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:655
#: ../java/src/org/klomp/snark/SnarkManager.java:653
msgid ""
"Unable to connect with the new settings, reverting to the old I2CP settings"
msgstr ""
"Nie można połączyć się z nowymi ustawieniami, powrót do starych ustawień I2CP"
msgstr "Nie można połączyć się z nowymi ustawieniami, powrót do starych ustawień I2CP"
#: ../java/src/org/klomp/snark/SnarkManager.java:659
#: ../java/src/org/klomp/snark/SnarkManager.java:657
msgid "Unable to reconnect with the old settings!"
msgstr "Nie można się połączyć ze starymi ustawieniami!"
#: ../java/src/org/klomp/snark/SnarkManager.java:661
#: ../java/src/org/klomp/snark/SnarkManager.java:659
msgid "Reconnected on the new I2CP destination"
msgstr "Ponowne podłączanie do nowych celów I2CP"
#: ../java/src/org/klomp/snark/SnarkManager.java:668
#: ../java/src/org/klomp/snark/SnarkManager.java:666
#, java-format
msgid "I2CP listener restarted for \"{0}\""
msgstr "Nasłuch I2CP zrestartowany dla \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:682
#: ../java/src/org/klomp/snark/SnarkManager.java:680
msgid "New files will be publicly readable"
msgstr "Nowe pliki będą publicznie dostępne"
#: ../java/src/org/klomp/snark/SnarkManager.java:684
#: ../java/src/org/klomp/snark/SnarkManager.java:682
msgid "New files will not be publicly readable"
msgstr "Nowe pliki nie będą publicznie dostępne"
#: ../java/src/org/klomp/snark/SnarkManager.java:691
#: ../java/src/org/klomp/snark/SnarkManager.java:689
msgid "Enabled autostart"
msgstr "Włącz automatycznie uruchamianie"
#: ../java/src/org/klomp/snark/SnarkManager.java:693
#: ../java/src/org/klomp/snark/SnarkManager.java:691
msgid "Disabled autostart"
msgstr "Wyłącz automatycznie uruchamianie"
#: ../java/src/org/klomp/snark/SnarkManager.java:699
#: ../java/src/org/klomp/snark/SnarkManager.java:697
msgid "Enabled open trackers - torrent restart required to take effect."
msgstr "Włączono otwarte trackery - wymagane ponowne uruchomienie torrenta."
#: ../java/src/org/klomp/snark/SnarkManager.java:701
#: ../java/src/org/klomp/snark/SnarkManager.java:699
msgid "Disabled open trackers - torrent restart required to take effect."
msgstr "Wyłączono otwarte trackery - wymagane ponowne uruchomienie torrenta."
#: ../java/src/org/klomp/snark/SnarkManager.java:708
#: ../java/src/org/klomp/snark/SnarkManager.java:706
msgid "Enabled DHT."
msgstr "DHT włączone."
#: ../java/src/org/klomp/snark/SnarkManager.java:710
#: ../java/src/org/klomp/snark/SnarkManager.java:708
msgid "Disabled DHT."
msgstr "DHT wyłączone."
#: ../java/src/org/klomp/snark/SnarkManager.java:712
#: ../java/src/org/klomp/snark/SnarkManager.java:710
msgid "DHT change requires tunnel shutdown and reopen"
msgstr ""
msgstr "Zmiana DHT wymaga zamknięcia tunelu i jego ponownego otwarcia"
#: ../java/src/org/klomp/snark/SnarkManager.java:719
#: ../java/src/org/klomp/snark/SnarkManager.java:717
#, java-format
msgid "{0} theme loaded, return to main i2psnark page to view."
msgstr "{0} temat załadowany, powrót do strony głównej i2psnark by zobaczyć."
#: ../java/src/org/klomp/snark/SnarkManager.java:729
#: ../java/src/org/klomp/snark/SnarkManager.java:727
msgid "Configuration unchanged."
msgstr "Ustawienia niezmienione."
#: ../java/src/org/klomp/snark/SnarkManager.java:761
#: ../java/src/org/klomp/snark/SnarkManager.java:759
msgid "Open Tracker list changed - torrent restart required to take effect."
msgstr ""
"Zmieniła się lista otwartych trackerów - wymagane ponowne uruchomienie "
"torrenta."
msgstr "Zmieniła się lista otwartych trackerów - wymagane ponowne uruchomienie torrenta."
#: ../java/src/org/klomp/snark/SnarkManager.java:771
#: ../java/src/org/klomp/snark/SnarkManager.java:769
msgid "Private tracker list changed - affects newly created torrents only."
msgstr ""
"Prywatna lista trackerów została zmieniona - dotyczy tylko nowo utworzonych "
"torrentów. "
msgstr "Prywatna lista trackerów została zmieniona - dotyczy tylko nowo utworzonych torrentów. "
#: ../java/src/org/klomp/snark/SnarkManager.java:817
#: ../java/src/org/klomp/snark/SnarkManager.java:815
#, java-format
msgid "Unable to save the config to {0}"
msgstr "Nie można zapisać konfiguracji do {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:895
#: ../java/src/org/klomp/snark/SnarkManager.java:893
msgid "Connecting to I2P"
msgstr "Łączenie z I2P"
#: ../java/src/org/klomp/snark/SnarkManager.java:898
#: ../java/src/org/klomp/snark/SnarkManager.java:896
msgid "Error connecting to I2P - check your I2CP settings!"
msgstr "Nie można się połączyć z I2P, sprawdź swoje ustawienia I2CP!"
#: ../java/src/org/klomp/snark/SnarkManager.java:907
#: ../java/src/org/klomp/snark/SnarkManager.java:1683
#: ../java/src/org/klomp/snark/SnarkManager.java:905
#: ../java/src/org/klomp/snark/SnarkManager.java:1681
#, java-format
msgid "Error: Could not add the torrent {0}"
msgstr "Błąd: Nie można dodać torrenta {0}"
#. catch this here so we don't try do delete it below
#: ../java/src/org/klomp/snark/SnarkManager.java:929
#: ../java/src/org/klomp/snark/SnarkManager.java:927
#, java-format
msgid "Cannot open \"{0}\""
msgstr "Nie można otworzyć \"{0}\""
#. TODO - if the existing one is a magnet, delete it and add the metainfo instead?
#: ../java/src/org/klomp/snark/SnarkManager.java:948
#: ../java/src/org/klomp/snark/SnarkManager.java:1049
#: ../java/src/org/klomp/snark/SnarkManager.java:1131
#. TODO - if the existing one is a magnet, delete it and add the metainfo
#. instead?
#: ../java/src/org/klomp/snark/SnarkManager.java:946
#: ../java/src/org/klomp/snark/SnarkManager.java:1047
#: ../java/src/org/klomp/snark/SnarkManager.java:1129
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:159
#, java-format
msgid "Torrent with this info hash is already running: {0}"
msgstr "Torrent o tym hashu jest już uruchomiony: {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:954
#: ../java/src/org/klomp/snark/SnarkManager.java:952
#, java-format
msgid "ERROR - No I2P trackers in private torrent \"{0}\""
msgstr "BŁĄD brak trackerów w prywatnym torrencie \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:956
#: ../java/src/org/klomp/snark/SnarkManager.java:954
#, java-format
msgid ""
"Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers and "
"DHT only."
msgstr ""
"Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers and"
" DHT only."
msgstr "Uwaga - Nie ma trackerów I2P w \"{0}\", zostanie to zameldowane tylko do otwartych I2P trackerów i DHT."
#: ../java/src/org/klomp/snark/SnarkManager.java:959
#: ../java/src/org/klomp/snark/SnarkManager.java:957
#, java-format
msgid ""
"Warning - No I2P trackers in \"{0}\", and open trackers are disabled, will "
"announce to DHT only."
msgstr ""
"Ostrzeżenie - Brak Trackerów I2P w \"{0}\", i DHT również otwarte trackery "
"są wyłączone, w odniesieniu do DHT tylko."
msgstr "Ostrzeżenie - Brak Trackerów I2P w \"{0}\", i DHT również otwarte trackery są wyłączone, w odniesieniu do DHT tylko."
#: ../java/src/org/klomp/snark/SnarkManager.java:961
#: ../java/src/org/klomp/snark/SnarkManager.java:959
#, java-format
msgid ""
"Warning - No I2P trackers in \"{0}\", and DHT and open trackers are "
"disabled, you should enable open trackers or DHT before starting the torrent."
msgstr ""
"Ostrzeżenie - Brak Trackerów I2P w \"{0}\", i DHT również otwarte trackery "
"są wyłączone, należy włączyć otwarte trackery lub DHT przed rozpoczęciem "
"torrenta. "
"disabled, you should enable open trackers or DHT before starting the "
"torrent."
msgstr "Ostrzeżenie - Brak Trackerów I2P w \"{0}\", i DHT również otwarte trackery są wyłączone, należy włączyć otwarte trackery lub DHT przed rozpoczęciem torrenta. "
#: ../java/src/org/klomp/snark/SnarkManager.java:983
#: ../java/src/org/klomp/snark/SnarkManager.java:981
#, java-format
msgid "Torrent in \"{0}\" is invalid"
msgstr "Torrent w \"{0}\" jest niepoprawny"
#: ../java/src/org/klomp/snark/SnarkManager.java:990
#: ../java/src/org/klomp/snark/SnarkManager.java:988
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:183
#, java-format
msgid "ERROR - Out of memory, cannot create torrent from {0}"
msgstr "BŁĄD - Brak pamięci, nie można utworzyć pliku torrent z {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1002
#: ../java/src/org/klomp/snark/SnarkManager.java:1000
#, java-format
msgid "Torrent added and started: \"{0}\""
msgstr "Torrent dodany i uruchomiony: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:1004
#: ../java/src/org/klomp/snark/SnarkManager.java:1002
#, java-format
msgid "Torrent added: \"{0}\""
msgstr "Torrent dodany: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:1060
#: ../java/src/org/klomp/snark/SnarkManager.java:1058
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:87
#, java-format
msgid "Fetching {0}"
msgstr "Pobieranie: {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1066
#: ../java/src/org/klomp/snark/SnarkManager.java:1064
#, java-format
msgid ""
"Open trackers are disabled and we have no DHT peers. Fetch of {0} may not "
"succeed until you start another torrent, enable open trackers, or enable DHT."
msgstr ""
"succeed until you start another torrent, enable open trackers, or enable "
"DHT."
msgstr "Otwarte trackery są wyłączone i nie mamy żadnych DHT peerów. Pobranie z {0} może się nie udać dopóki nie uruchomisz innego torrenta, włączysz otwarte trackery, lub włączysz DHT."
#: ../java/src/org/klomp/snark/SnarkManager.java:1070
#: ../java/src/org/klomp/snark/SnarkManager.java:1068
#, java-format
msgid "Adding {0}"
msgstr "Dodawanie {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1102
#: ../java/src/org/klomp/snark/SnarkManager.java:1100
#, java-format
msgid "Download already running: {0}"
msgstr "Pobieranie już zostało uruchomione: {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1141
#: ../java/src/org/klomp/snark/SnarkManager.java:1164
#: ../java/src/org/klomp/snark/SnarkManager.java:1602
#: ../java/src/org/klomp/snark/SnarkManager.java:1139
#: ../java/src/org/klomp/snark/SnarkManager.java:1162
#: ../java/src/org/klomp/snark/SnarkManager.java:1600
#, java-format
msgid "Failed to copy torrent file to {0}"
msgstr "Nie udało się skopiować pliku torrent do {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1391
#: ../java/src/org/klomp/snark/SnarkManager.java:1389
#, java-format
msgid "Too many files in \"{0}\" ({1}), deleting it!"
msgstr "Za dużo plików w \"{0}\" ({1}), usuwanie go!"
#: ../java/src/org/klomp/snark/SnarkManager.java:1393
#: ../java/src/org/klomp/snark/SnarkManager.java:1391
#, java-format
msgid "Torrent file \"{0}\" cannot end in \".torrent\", deleting it!"
msgstr "Torrent \"{0}\" nie może się kończyć w \".torrent\", usuwanie go!"
#: ../java/src/org/klomp/snark/SnarkManager.java:1395
#: ../java/src/org/klomp/snark/SnarkManager.java:1393
#, java-format
msgid "No pieces in \"{0}\", deleting it!"
msgstr "W torrencie \"{0}\" nie ma piece'ów, usuwanie go!"
#: ../java/src/org/klomp/snark/SnarkManager.java:1397
#: ../java/src/org/klomp/snark/SnarkManager.java:1395
#, java-format
msgid "Too many pieces in \"{0}\", limit is {1}, deleting it!"
msgstr "Za dużo piece''ów w \"{0}\" (limit to {1}), usuwanie go!"
#: ../java/src/org/klomp/snark/SnarkManager.java:1399
#: ../java/src/org/klomp/snark/SnarkManager.java:1397
#, java-format
msgid "Pieces are too large in \"{0}\" ({1}B), deleting it."
msgstr "Za duże piece''y w torrencie \"{0}\" ({1}B), usuwanie go."
#: ../java/src/org/klomp/snark/SnarkManager.java:1400
#: ../java/src/org/klomp/snark/SnarkManager.java:1398
#, java-format
msgid "Limit is {0}B"
msgstr "Granica to {0}B"
#: ../java/src/org/klomp/snark/SnarkManager.java:1402
#: ../java/src/org/klomp/snark/SnarkManager.java:1400
#, java-format
msgid "Torrent \"{0}\" has no data, deleting it!"
msgstr "cTorrent \"{0}\" nie zawiera danych, usuwanie!"
#: ../java/src/org/klomp/snark/SnarkManager.java:1410
#: ../java/src/org/klomp/snark/SnarkManager.java:1408
#, java-format
msgid "Torrents larger than {0}B are not supported yet, deleting \"{1}\""
msgstr "Torrenty większe niż {0}B nie są jeszcze wspierane, usunięcie \"{1}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:1426
#: ../java/src/org/klomp/snark/SnarkManager.java:1424
#, java-format
msgid "Error: Could not remove the torrent {0}"
msgstr "Błąd: nie można usunąć torrenta {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1447
#: ../java/src/org/klomp/snark/SnarkManager.java:1465
#: ../java/src/org/klomp/snark/SnarkManager.java:1445
#: ../java/src/org/klomp/snark/SnarkManager.java:1463
#, java-format
msgid "Torrent stopped: \"{0}\""
msgstr "Torrent zatrzymany: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:1486
#: ../java/src/org/klomp/snark/SnarkManager.java:1484
#, java-format
msgid "Torrent removed: \"{0}\""
msgstr "Torrent usunięty: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:1494
#: ../java/src/org/klomp/snark/SnarkManager.java:1492
#, java-format
msgid "Adding torrents in {0}"
msgstr "Dodawanie torrentów w {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1525
#: ../java/src/org/klomp/snark/SnarkManager.java:1523
#, java-format
msgid "Up bandwidth limit is {0} KBps"
msgstr "limit transferu połczeń wychodzcych to {0} KBps"
#: ../java/src/org/klomp/snark/SnarkManager.java:1547
#: ../java/src/org/klomp/snark/SnarkManager.java:1545
#, java-format
msgid "Download finished: {0}"
msgstr "Pobieranie ukończone: {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1598
#: ../java/src/org/klomp/snark/SnarkManager.java:1596
#, java-format
msgid "Metainfo received for {0}"
msgstr "Metainfo otrzymane dla {0} "
#: ../java/src/org/klomp/snark/SnarkManager.java:1599
#: ../java/src/org/klomp/snark/SnarkManager.java:1829
#: ../java/src/org/klomp/snark/SnarkManager.java:1597
#: ../java/src/org/klomp/snark/SnarkManager.java:1826
#, java-format
msgid "Starting up torrent {0}"
msgstr "Uruchamianie torrenta: {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1614
#: ../java/src/org/klomp/snark/SnarkManager.java:1612
#, java-format
msgid "Error on torrent {0}"
msgstr "Błąd w torrencie {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1677
#: ../java/src/org/klomp/snark/SnarkManager.java:1675
msgid "Unable to connect to I2P!"
msgstr "Nie można podłączyć się do I2P!"
#: ../java/src/org/klomp/snark/SnarkManager.java:1828
#: ../java/src/org/klomp/snark/SnarkManager.java:1825
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:124
msgid "Opening the I2P tunnel"
msgstr "Otwieranie tunelu I2P"
#: ../java/src/org/klomp/snark/SnarkManager.java:1852
#: ../java/src/org/klomp/snark/SnarkManager.java:1849
msgid "Opening the I2P tunnel and starting all torrents."
msgstr "Otwieranie tunelu I2P i uruchamianie wszystkich torrentów."
#: ../java/src/org/klomp/snark/SnarkManager.java:1915
#: ../java/src/org/klomp/snark/SnarkManager.java:1912
msgid "Stopping all torrents and closing the I2P tunnel."
msgstr "Zatrzymywanie wszystkich torrentów i zamykanie tunelu I2P"
#: ../java/src/org/klomp/snark/SnarkManager.java:1934
#: ../java/src/org/klomp/snark/SnarkManager.java:1931
msgid "Closing I2P tunnel after notifying trackers."
msgstr "Zamknięcie tunelu I2P po powiadomieniu trackerów."
#: ../java/src/org/klomp/snark/TrackerClient.java:237
#: ../java/src/org/klomp/snark/TrackerClient.java:234
#, java-format
msgid "No valid trackers for {0} - enable opentrackers or DHT?"
msgstr ""
"Brak prawidłowych trackerów dla {0} włączyć otwarte trackery lub DHT?"
msgstr "Brak prawidłowych trackerów dla {0} włączyć otwarte trackery lub DHT?"
#: ../java/src/org/klomp/snark/UpdateHandler.java:49
#: ../java/src/org/klomp/snark/UpdateRunner.java:229
#: ../java/src/org/klomp/snark/UpdateRunner.java:227
msgid "Updating"
msgstr "Aktualizacja"
#: ../java/src/org/klomp/snark/UpdateRunner.java:116
#: ../java/src/org/klomp/snark/UpdateRunner.java:114
#, java-format
msgid "Updating from {0}"
msgstr "Aktualizacja z {0}"
@ -557,7 +546,7 @@ msgstr "Prędkość pobierania"
#. Translators: Please keep short or translate as " "
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:477
msgid "RX Rate"
msgstr ""
msgstr "Ocena RX"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:483
msgid "Up Rate"
@ -566,7 +555,7 @@ msgstr "Prędkość wysyłania"
#. Translators: Please keep short or translate as " "
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:486
msgid "TX Rate"
msgstr ""
msgstr "Ocena TX"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:501
msgid "Stop all torrents and the I2P tunnel"
@ -578,7 +567,7 @@ msgstr "Zatrzymaj wszystkie"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:515
msgid "Start all stopped torrents"
msgstr ""
msgstr "Uruchom wszystkie zatrzymane torrenty"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:517
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:531
@ -623,41 +612,40 @@ msgstr[2] "{0} peerów DHT"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:611
msgid "First"
msgstr ""
msgstr "Pierwszy"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:611
msgid "First page"
msgstr ""
msgstr "Pierwsza strona"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:622
msgid "Prev"
msgstr ""
msgstr "Poprzedni"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:622
msgid "Previous page"
msgstr ""
msgstr "Poprzednia strona"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:657
msgid "Next"
msgstr ""
msgstr "Następny"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:657
msgid "Next page"
msgstr ""
msgstr "Następna strona"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:667
msgid "Last"
msgstr ""
msgstr "Ostatnia"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:667
msgid "Last page"
msgstr ""
msgstr "Ostatnia strona"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:750
#, java-format
msgid "Invalid URL: Must start with \"http://\", \"{0}\", or \"{1}\""
msgstr ""
"Nieprawidłowy URL: musi zaczynać się od \"http://\", \"{0}\" lub \"{1}\""
msgstr "Nieprawidłowy URL: musi zaczynać się od \"http://\", \"{0}\" lub \"{1}\""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:793
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:823
@ -700,11 +688,11 @@ msgstr "Usunięto katalog: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:942
msgid "Error - Cannot include alternate trackers without a primary tracker"
msgstr ""
msgstr "Błąd - Nie można dodać alternatywnych trackerów bez głównego trackera"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:955
msgid "Error - Cannot mix private and public trackers in a torrent"
msgstr ""
msgstr "Błąd - Nie można mieszać prywatnych i publicznych trackerów w torrencie"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:975
#, java-format
@ -716,9 +704,7 @@ msgstr "Utworzono torrent dla \"{0}\""
msgid ""
"Many I2P trackers require you to register new torrents before seeding - "
"please do so before starting \"{0}\""
msgstr ""
"Wiele trackerów w I2P wymaga zarejestrowania torrenta przed seedowaniem - "
"proszę, zrób tak przed uruchomieniem \"{0}\""
msgstr "Wiele trackerów w I2P wymaga zarejestrowania torrenta przed seedowaniem - proszę, zrób tak przed uruchomieniem \"{0}\""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:979
#, java-format
@ -759,7 +745,8 @@ msgstr "Dodaj tracker"
msgid "Enter valid tracker name and URLs"
msgstr "Podaj prawidłową nazwę trackera i URL"
#. "<input type=\"reset\" class=\"cancel\" value=\"").append(_("Cancel")).append("\">\n" +
#. "<input type=\"reset\" class=\"cancel\"
#. value=\"").append(_("Cancel")).append("\">\n" +
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1091
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2034
msgid "Restore defaults"
@ -877,13 +864,11 @@ msgstr "Usuń torrent z aktywnej listy, usuwając plik .torrent"
#. Single quotes in translate strings with parameters must be doubled.
#. Then the remaining single quote must be escaped
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1444
#, fuzzy, java-format
#, java-format
msgid ""
"Are you sure you want to delete the file \\''{0}\\'' (downloaded data will "
"not be deleted) ?"
msgstr ""
"Czy na pewno chcesz usunąć plik \\''{0}.torrent\\''? (pobrane dane nie "
"zostaną usunięte)"
msgstr "Czy jesteś pewnien, że chcesz usunąć plik \\''{0}\\'' (pobrane dane nie będą usunięte) ?"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1447
msgid "Remove"
@ -951,11 +936,9 @@ msgstr "Z adresu URL"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1689
msgid ""
"Enter the torrent file download URL (I2P only), magnet link, maggot link, or "
"info hash"
msgstr ""
"Wpisz adres URL pliku torrent (I2P tylko), Magnet link, link maggot, lub "
"info hash"
"Enter the torrent file download URL (I2P only), magnet link, maggot link, or"
" info hash"
msgstr "Wpisz adres URL pliku torrent (I2P tylko), Magnet link, link maggot, lub info hash"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1694
msgid "Add torrent"
@ -974,15 +957,15 @@ msgstr "Usunięcie pliku .torrent spowoduje jego zatrzymanie."
msgid "Create Torrent"
msgstr "Utwórz torrent"
#. out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\" value=\"" + newFile + "\" /><br>\n");
#. out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\"
#. value=\"" + newFile + "\" /><br>\n");
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1725
msgid "Data to seed"
msgstr "Dane do seedowania"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1729
msgid "File or directory to seed (must be within the specified path)"
msgstr ""
"Plik lub katalog do seedowania (musi się znajdować wewnątrz podanej ścieżki)"
msgstr "Plik lub katalog do seedowania (musi się znajdować wewnątrz podanej ścieżki)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1731
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1975
@ -991,11 +974,11 @@ msgstr "Trackery"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1733
msgid "Primary"
msgstr ""
msgstr "Główne"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1735
msgid "Alternates"
msgstr ""
msgstr "Alternatywne"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1738
msgid "Create torrent"
@ -1003,7 +986,7 @@ msgstr "Utwórz torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1756
msgid "none"
msgstr ""
msgstr "brak"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1789
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2046
@ -1020,8 +1003,7 @@ msgstr "Pliki dostępne dla wszystkich"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1801
msgid "If checked, other users may access the downloaded files"
msgstr ""
"Jeśli zaznaczone, inni użytkownicy mogą mieć dostęp do pobranych plików"
msgstr "Jeśli zaznaczone, inni użytkownicy mogą mieć dostęp do pobranych plików"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1805
msgid "Auto start"
@ -1053,11 +1035,11 @@ msgstr "minuty"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1851
msgid "Page size"
msgstr ""
msgstr "Rozmiar strony"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1853
msgid "torrents"
msgstr ""
msgstr "torrenty"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1877
msgid "Total uploader limit"
@ -1085,11 +1067,9 @@ msgstr "Używaj również otwartych trackerów"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1897
msgid ""
"If checked, announce torrents to open trackers as well as the tracker listed "
"in the torrent file"
msgstr ""
"Jeśli zaznaczone, zgłaszaj torrenty do otwartych trackerów, jak również do "
"trackerów podanych w pliku torrent"
"If checked, announce torrents to open trackers as well as the tracker listed"
" in the torrent file"
msgstr "Jeśli zaznaczone, zgłaszaj torrenty do otwartych trackerów, jak również do trackerów podanych w pliku torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1901
msgid "Enable DHT"
@ -1176,23 +1156,23 @@ msgstr "Plik torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2291
msgid "Primary Tracker"
msgstr ""
msgstr "Główne Trackery"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2300
msgid "Tracker List"
msgstr ""
msgstr "Lista Trackerów"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2324
msgid "Comment"
msgstr ""
msgstr "Komentarz"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2333
msgid "Created"
msgstr ""
msgstr "Utworzony"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2343
msgid "Created By"
msgstr ""
msgstr "Utworzony przez"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2353
msgid "Magnet link"
@ -1273,6 +1253,3 @@ msgstr "Pomiń"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2575
msgid "Save priorities"
msgstr "Zapisz priorytety"
#~ msgid "Unable to add {0}"
#~ msgstr "Nie można dodać {0}"

File diff suppressed because it is too large Load Diff

View File

@ -2,23 +2,21 @@
# Copyright (C) 2009 The I2P Project
# This file is distributed under the same license as the i2psnark package.
# To contribute translations, see http://www.i2p2.de/newdevelopers
#
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-12-01 20:03+0000\n"
"PO-Revision-Date: 2013-11-27 18:49+0000\n"
"POT-Creation-Date: 2013-12-01 20:06+0000\n"
"PO-Revision-Date: 2013-12-05 15:04+0000\n"
"Last-Translator: polearnik <polearnik@mail.ru>\n"
"Language-Team: Romanian (http://www.transifex.com/projects/p/I2P/language/"
"ro/)\n"
"Language: ro\n"
"Language-Team: Romanian (http://www.transifex.com/projects/p/I2P/language/ro/)\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==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?"
"2:1));\n"
"Language: ro\n"
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"
#: ../java/src/org/klomp/snark/IdleChecker.java:69
#: ../java/src/org/klomp/snark/SnarkManager.java:1938
@ -30,127 +28,127 @@ msgstr "Tunel I2P închis."
#: ../java/src/org/klomp/snark/MagnetURI.java:52
#: ../java/src/org/klomp/snark/SnarkManager.java:1644
msgid "Magnet"
msgstr ""
msgstr "Magnet"
#: ../java/src/org/klomp/snark/SnarkManager.java:504
#, java-format
msgid "Total uploaders limit changed to {0}"
msgstr ""
msgstr "Limita totala de incarcare schimbat la {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:506
#, java-format
msgid "Minimum total uploaders limit is {0}"
msgstr ""
msgstr "Limita totala minimă de incarcare este {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:518
#, java-format
msgid "Up BW limit changed to {0}KBps"
msgstr ""
msgstr "Limita de incarcare BW schimbat la {0} Kbps"
#: ../java/src/org/klomp/snark/SnarkManager.java:520
#, java-format
msgid "Minimum up bandwidth limit is {0}KBps"
msgstr ""
msgstr "Limita de lățime de bandă minima la incarcarea este {0} Kbps"
#: ../java/src/org/klomp/snark/SnarkManager.java:532
#, java-format
msgid "Startup delay changed to {0}"
msgstr ""
msgstr "Întârziere de pornire schimbat la {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:543
#, java-format
msgid "Refresh time changed to {0}"
msgstr ""
msgstr "Actualizarea timpului schimbat la {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:545
msgid "Refresh disabled"
msgstr ""
msgstr "Refresh dezactivat"
#: ../java/src/org/klomp/snark/SnarkManager.java:561
#, java-format
msgid "Page size changed to {0}"
msgstr ""
msgstr "Schimbat dimensiunea paginii la {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:570
msgid "Data directory must be an absolute path"
msgstr ""
msgstr "Dosarul de data de lucru trebuie să fie o cale absolută"
#: ../java/src/org/klomp/snark/SnarkManager.java:572
msgid "Data directory does not exist"
msgstr ""
msgstr "Dosarul de date nu există"
#: ../java/src/org/klomp/snark/SnarkManager.java:574
msgid "Not a directory"
msgstr ""
msgstr "Nu e un dosar"
#: ../java/src/org/klomp/snark/SnarkManager.java:576
msgid "Unreadable"
msgstr ""
msgstr "necitibil"
#: ../java/src/org/klomp/snark/SnarkManager.java:581
#, java-format
msgid "Data directory changed to {0}"
msgstr ""
msgstr "Dosarul de date s-a schimbat la {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:636
msgid "I2CP and tunnel changes will take effect after stopping all torrents"
msgstr ""
msgstr "I2CP și tunel modificările vor intra în vigoare după oprirea tuturor torrentele"
#: ../java/src/org/klomp/snark/SnarkManager.java:640
#, java-format
msgid "I2CP options changed to {0}"
msgstr ""
msgstr "Opțiuni I2CP schimbat la {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:646
msgid "Disconnecting old I2CP destination"
msgstr ""
msgstr "Deconectarea destinației vechi I2CP"
#: ../java/src/org/klomp/snark/SnarkManager.java:648
#, java-format
msgid "I2CP settings changed to {0}"
msgstr ""
msgstr "Opțiuni I2CP schimbat la {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:653
msgid ""
"Unable to connect with the new settings, reverting to the old I2CP settings"
msgstr ""
msgstr "Imposibil de a se conecta cu noile setări, revenirea la vechile setări I2CP"
#: ../java/src/org/klomp/snark/SnarkManager.java:657
msgid "Unable to reconnect with the old settings!"
msgstr ""
msgstr "Nu pot să se reconectez cu setările vechi!"
#: ../java/src/org/klomp/snark/SnarkManager.java:659
msgid "Reconnected on the new I2CP destination"
msgstr ""
msgstr "Reconectat la destinație noua I2CP"
#: ../java/src/org/klomp/snark/SnarkManager.java:666
#, java-format
msgid "I2CP listener restarted for \"{0}\""
msgstr ""
msgstr "I2CP ascultător repornit pentru \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:680
msgid "New files will be publicly readable"
msgstr ""
msgstr "Fișiere noi vor putea fi citite public"
#: ../java/src/org/klomp/snark/SnarkManager.java:682
msgid "New files will not be publicly readable"
msgstr ""
msgstr "Fișiere noi nu vor putea fi citite public"
#: ../java/src/org/klomp/snark/SnarkManager.java:689
msgid "Enabled autostart"
msgstr ""
msgstr "Activeaza autopornirea"
#: ../java/src/org/klomp/snark/SnarkManager.java:691
msgid "Disabled autostart"
msgstr ""
msgstr "Dezactivează autopornirea"
#: ../java/src/org/klomp/snark/SnarkManager.java:697
msgid "Enabled open trackers - torrent restart required to take effect."
msgstr ""
msgstr "Trackere deschise activat - repornirea torrentui este necesara să aibă efect."
#: ../java/src/org/klomp/snark/SnarkManager.java:699
msgid "Disabled open trackers - torrent restart required to take effect."
msgstr ""
msgstr "Trackere deschise dezactivat - repornirea torrentui este necesara să aibă efect."
#: ../java/src/org/klomp/snark/SnarkManager.java:706
msgid "Enabled DHT."
@ -162,51 +160,52 @@ msgstr "DHT dezactivat."
#: ../java/src/org/klomp/snark/SnarkManager.java:710
msgid "DHT change requires tunnel shutdown and reopen"
msgstr ""
msgstr "Schimbare DHT necesită oprirea tunel și redeschiderea lui"
#: ../java/src/org/klomp/snark/SnarkManager.java:717
#, java-format
msgid "{0} theme loaded, return to main i2psnark page to view."
msgstr ""
msgstr "{0} temă încărcata, a reveni la pagina principală i2psnark pentru a vizualiza."
#: ../java/src/org/klomp/snark/SnarkManager.java:727
msgid "Configuration unchanged."
msgstr ""
msgstr "Configuraţia neschimbată"
#: ../java/src/org/klomp/snark/SnarkManager.java:759
msgid "Open Tracker list changed - torrent restart required to take effect."
msgstr ""
msgstr "Trackere deschise schimbat - repornirea torrentui este necesara să aibă efect."
#: ../java/src/org/klomp/snark/SnarkManager.java:769
msgid "Private tracker list changed - affects newly created torrents only."
msgstr ""
msgstr "Lista trackerilor private schimbat - afectează doar nou-create torrente."
#: ../java/src/org/klomp/snark/SnarkManager.java:815
#, java-format
msgid "Unable to save the config to {0}"
msgstr ""
msgstr "Imposibil de a salva configurarea {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:893
msgid "Connecting to I2P"
msgstr ""
msgstr "Conectarea la I2P"
#: ../java/src/org/klomp/snark/SnarkManager.java:896
msgid "Error connecting to I2P - check your I2CP settings!"
msgstr ""
msgstr "Eroare la conectarea la I2P - verificați setările I2CP!"
#: ../java/src/org/klomp/snark/SnarkManager.java:905
#: ../java/src/org/klomp/snark/SnarkManager.java:1681
#, java-format
msgid "Error: Could not add the torrent {0}"
msgstr ""
msgstr "Eroare: Nu sa putut adăuga torentul {0}"
#. catch this here so we don't try do delete it below
#: ../java/src/org/klomp/snark/SnarkManager.java:927
#, java-format
msgid "Cannot open \"{0}\""
msgstr ""
msgstr "Nu se poate deschide \"{0}\"."
#. TODO - if the existing one is a magnet, delete it and add the metainfo instead?
#. TODO - if the existing one is a magnet, delete it and add the metainfo
#. instead?
#: ../java/src/org/klomp/snark/SnarkManager.java:946
#: ../java/src/org/klomp/snark/SnarkManager.java:1047
#: ../java/src/org/klomp/snark/SnarkManager.java:1129
@ -223,23 +222,24 @@ msgstr "EROARE - Nu sunt trackere I2P in torrent privat \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:954
#, java-format
msgid ""
"Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers and "
"DHT only."
msgstr ""
"Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers and"
" DHT only."
msgstr "Avertisment - Nu sunt trackere I2P în \"{0}\", va anunța numai la I2P trackers deschise și DHT ."
#: ../java/src/org/klomp/snark/SnarkManager.java:957
#, java-format
msgid ""
"Warning - No I2P trackers in \"{0}\", and open trackers are disabled, will "
"announce to DHT only."
msgstr ""
msgstr "Avertisment - Nu sunt trackere I2P în \"{0}\", și trackere deschise sunt dezactivate, se va anunța numai prin DHT."
#: ../java/src/org/klomp/snark/SnarkManager.java:959
#, java-format
msgid ""
"Warning - No I2P trackers in \"{0}\", and DHT and open trackers are "
"disabled, you should enable open trackers or DHT before starting the torrent."
msgstr ""
"disabled, you should enable open trackers or DHT before starting the "
"torrent."
msgstr "Avertisment - Nu sunt trackere I2P în \"{0}\", și DHT și trackere deschise sunt dezactivate, ar trebui să permiteti trackere deschise sau DHT înainte de a începe torrent."
#: ../java/src/org/klomp/snark/SnarkManager.java:981
#, java-format
@ -272,8 +272,9 @@ msgstr "Preluarea {0}"
#, java-format
msgid ""
"Open trackers are disabled and we have no DHT peers. Fetch of {0} may not "
"succeed until you start another torrent, enable open trackers, or enable DHT."
msgstr ""
"succeed until you start another torrent, enable open trackers, or enable "
"DHT."
msgstr "Trackere deschise sunt dezactivate și nu avem colegii DHT. Descarcarea din{0} nu poate reuși până când veți începe un alt torrent, permite trackere deschise, sau permite DHT."
#: ../java/src/org/klomp/snark/SnarkManager.java:1068
#, java-format
@ -283,7 +284,7 @@ msgstr "Adăugarea {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1100
#, java-format
msgid "Download already running: {0}"
msgstr ""
msgstr "Descarcarea deja rulează: {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1139
#: ../java/src/org/klomp/snark/SnarkManager.java:1162
@ -325,14 +326,12 @@ msgstr "Limita este de {0} B"
#: ../java/src/org/klomp/snark/SnarkManager.java:1400
#, java-format
msgid "Torrent \"{0}\" has no data, deleting it!"
msgstr ""
msgstr "Torrent \"{0}\" nu dispune de date, șterge-o!"
#: ../java/src/org/klomp/snark/SnarkManager.java:1408
#, java-format
msgid "Torrents larger than {0}B are not supported yet, deleting \"{1}\""
msgstr ""
"Torrents mai mari de {0} B nu sunt acceptate încă, ștergerea \"{1}\"Torrents "
"mai mari de {0} B nu sunt acceptate încă, ștergerea \"{1}\""
msgstr "Torrents mai mari de {0} B nu sunt acceptate încă, ștergerea \"{1}\"Torrents mai mari de {0} B nu sunt acceptate încă, ștergerea \"{1}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:1424
#, java-format
@ -358,7 +357,7 @@ msgstr "Adăugarea torrente în {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1523
#, java-format
msgid "Up bandwidth limit is {0} KBps"
msgstr ""
msgstr "Limita de lățime de bandă la incarcarea este {0} Kbps"
#: ../java/src/org/klomp/snark/SnarkManager.java:1545
#, java-format
@ -379,7 +378,7 @@ msgstr "Pornirea torrent {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1612
#, java-format
msgid "Error on torrent {0}"
msgstr ""
msgstr "Eroare pe torrent {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1675
msgid "Unable to connect to I2P!"
@ -400,52 +399,52 @@ msgstr "Oprirea tuturor torrentelor și inchiderea tunelului I2P"
#: ../java/src/org/klomp/snark/SnarkManager.java:1931
msgid "Closing I2P tunnel after notifying trackers."
msgstr ""
msgstr "Închiderea tunelului I2P după notificarea trackere."
#: ../java/src/org/klomp/snark/TrackerClient.java:234
#, java-format
msgid "No valid trackers for {0} - enable opentrackers or DHT?"
msgstr ""
msgstr "Nu sunt trackere valabile pentru {0} - permite opentrackers sau DHT?"
#: ../java/src/org/klomp/snark/UpdateHandler.java:49
#: ../java/src/org/klomp/snark/UpdateRunner.java:227
msgid "Updating"
msgstr ""
msgstr "Actualizare"
#: ../java/src/org/klomp/snark/UpdateRunner.java:114
#, java-format
msgid "Updating from {0}"
msgstr ""
msgstr "Actualizarea din {0}"
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:75
#, java-format
msgid "Download torrent file from {0}"
msgstr ""
msgstr "Descărca fișierul torrent de la {0}"
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:97
#, java-format
msgid "Torrent was not retrieved from {0}"
msgstr ""
msgstr "Torrent nu a fost preluat de la {0}"
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:150
#, java-format
msgid "Torrent fetched from {0}"
msgstr ""
msgstr "Torrent preluat de la {0}"
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:171
#, java-format
msgid "Torrent already running: {0}"
msgstr ""
msgstr "Torrent deja rulează: {0}"
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:173
#, java-format
msgid "Torrent already in the queue: {0}"
msgstr ""
msgstr "Torrent deja în coada de așteptare: {0}"
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:181
#, java-format
msgid "Torrent at {0} was not valid"
msgstr ""
msgstr "Torrent la {0} nu a fost valid"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:254
msgid "I2PSnark - Anonymous BitTorrent Client"
@ -453,7 +452,7 @@ msgstr "I2PSnark - BitTorrent Client Anonim"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:267
msgid "Router is down"
msgstr ""
msgstr "Router-ul este deactivat"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:284
msgid "Torrents"
@ -481,7 +480,7 @@ msgstr "Faceți clic pe \"Adauga torrent\" pentru a aduce torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:352
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:353
msgid "clear messages"
msgstr ""
msgstr "stergerea mesajelor"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:405
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:407
@ -541,7 +540,7 @@ msgstr "Rata de descarcare "
#. Translators: Please keep short or translate as " "
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:477
msgid "RX Rate"
msgstr ""
msgstr "RX Rate"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:483
msgid "Up Rate"
@ -550,7 +549,7 @@ msgstr "Rata de incarcare "
#. Translators: Please keep short or translate as " "
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:486
msgid "TX Rate"
msgstr ""
msgstr "TX Rate"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:501
msgid "Stop all torrents and the I2P tunnel"
@ -562,7 +561,7 @@ msgstr "Oprește toate"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:515
msgid "Start all stopped torrents"
msgstr ""
msgstr "Începeți toate torrentele oprite"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:517
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:531
@ -593,7 +592,7 @@ msgstr[2] "{0} torrentу"
#, java-format
msgid "1 connected peer"
msgid_plural "{0} connected peers"
msgstr[0] "{0} utilizator conectat"
msgstr[0] "{0} utilizator conectat "
msgstr[1] "{0} utilizatori conectati"
msgstr[2] "{0} utilizatori conectati"
@ -601,41 +600,41 @@ msgstr[2] "{0} utilizatori conectati"
#, java-format
msgid "1 DHT peer"
msgid_plural "{0} DHT peers"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
msgstr[0] "1 partener DHT"
msgstr[1] "{0} parteneri DHT"
msgstr[2] "{0} parteneri DHT"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:611
msgid "First"
msgstr ""
msgstr "Primul"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:611
msgid "First page"
msgstr ""
msgstr "P&rima pagină"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:622
msgid "Prev"
msgstr ""
msgstr "Prev"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:622
msgid "Previous page"
msgstr ""
msgstr "Pagina anterioară"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:657
msgid "Next"
msgstr ""
msgstr "Următorul"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:657
msgid "Next page"
msgstr ""
msgstr "Pagina următoare"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:667
msgid "Last"
msgstr ""
msgstr "Ultimul"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:667
msgid "Last page"
msgstr ""
msgstr "Ultima pagină"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:750
#, java-format
@ -657,7 +656,7 @@ msgstr "Fișier torrent șters: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:821
#, java-format
msgid "Download deleted: {0}"
msgstr ""
msgstr "Descarcă șterse: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:835
#, java-format
@ -674,20 +673,20 @@ msgstr "Fișier de date nu a putut fi șters: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:872
#, java-format
msgid "Directory could not be deleted: {0}"
msgstr ""
msgstr "Dosarul nu a putut fi sters {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:870
#, java-format
msgid "Directory deleted: {0}"
msgstr ""
msgstr "Directorii șterse: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:942
msgid "Error - Cannot include alternate trackers without a primary tracker"
msgstr ""
msgstr "Eroare - Nu pot conține trackere alternative fără un tracker primar"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:955
msgid "Error - Cannot mix private and public trackers in a torrent"
msgstr ""
msgstr "Eroare - Nu se poate amesteca trackere publice și private într-un torent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:975
#, java-format
@ -699,38 +698,35 @@ msgstr "Torrent creat pentru \"{0}\""
msgid ""
"Many I2P trackers require you to register new torrents before seeding - "
"please do so before starting \"{0}\""
msgstr ""
"Multe trackere I2P cer să vă înregistrați torrentele noi înainte de seedat - "
"vă rugăm să faceți acest lucru înainte de a începe \"{0}\""
msgstr "Multe trackere I2P cer să vă înregistrați torrentele noi înainte de seedat - vă rugăm să faceți acest lucru înainte de a începe \"{0}\""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:979
#, java-format
msgid "Error creating a torrent for \"{0}\""
msgstr ""
msgstr "Eroare la crearea unui torrent pentru \"{0}\""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:983
#, java-format
msgid "Cannot create a torrent for the nonexistent data: {0}"
msgstr ""
msgstr "Nu se poate crea un torrent pentru datele inexistente: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:986
msgid "Error creating torrent - you must enter a file or directory"
msgstr ""
"Eroare la crearea torrent - trebuie să introduceți un fișier sau director"
msgstr "Eroare la crearea torrent - trebuie să introduceți un fișier sau director"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1017
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2031
msgid "Delete selected"
msgstr ""
msgstr "Șterge pe cel ales"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1017
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2032
msgid "Save tracker configuration"
msgstr ""
msgstr "Salvați configurația tracker"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1034
msgid "Removed"
msgstr ""
msgstr "Șters"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1063
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2030
@ -743,25 +739,26 @@ msgstr "Adaugă tracker"
msgid "Enter valid tracker name and URLs"
msgstr "Introduceți numele tracker valid și URL-uri"
#. "<input type=\"reset\" class=\"cancel\" value=\"").append(_("Cancel")).append("\">\n" +
#. "<input type=\"reset\" class=\"cancel\"
#. value=\"").append(_("Cancel")).append("\">\n" +
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1091
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2034
msgid "Restore defaults"
msgstr ""
msgstr "Restabileşte implicitele"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1094
msgid "Restored default trackers"
msgstr ""
msgstr "Trackers implicite restaurate"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1215
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1216
msgid "Checking"
msgstr ""
msgstr "Se verifică"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1218
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1219
msgid "Allocating"
msgstr ""
msgstr "Alocare"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1233
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1240
@ -780,12 +777,12 @@ msgid "1 peer"
msgid_plural "{0} peers"
msgstr[0] "1 partener"
msgstr[1] "{0} parteneri"
msgstr[2] "{0} parteneri "
msgstr[2] "{0} parteneri"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1243
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1244
msgid "Starting"
msgstr ""
msgstr "Începere"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1252
msgid "Seeding"
@ -855,8 +852,7 @@ msgstr "Start"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1439
msgid "Remove the torrent from the active list, deleting the .torrent file"
msgstr ""
"Scoateți torrent din lista torentelor activi, ștergem fișierul torrent."
msgstr "Scoateți torrent din lista torentelor activi, ștergem fișierul torrent."
#. Can't figure out how to escape double quotes inside the onclick string.
#. Single quotes in translate strings with parameters must be doubled.
@ -866,9 +862,7 @@ msgstr ""
msgid ""
"Are you sure you want to delete the file \\''{0}\\'' (downloaded data will "
"not be deleted) ?"
msgstr ""
"Sigur doriți să ștergeți dosarul \\'' {0} \\'' (datele descărcate nu vor fi "
"șterse)?"
msgstr "Sigur doriți să ștergeți dosarul \\'' {0} \\'' (datele descărcate nu vor fi șterse)?"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1447
msgid "Remove"
@ -886,8 +880,7 @@ msgstr "Ștergeți fișierul torrent. Și fișier(e) de date asociat(e)"
msgid ""
"Are you sure you want to delete the torrent \\''{0}\\'' and all downloaded "
"data?"
msgstr ""
"Sigur doriți să ștergeți torrent \\'' {0} \\'' și toate datele descărcate?"
msgstr "Sigur doriți să ștergeți torrent \\'' {0} \\'' și toate datele descărcate?"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1467
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1997
@ -937,9 +930,9 @@ msgstr "Din URL"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1689
msgid ""
"Enter the torrent file download URL (I2P only), magnet link, maggot link, or "
"info hash"
msgstr ""
"Enter the torrent file download URL (I2P only), magnet link, maggot link, or"
" info hash"
msgstr "Introduceți URL-ul de descarcare fișierilor torrent (I2P numai), link-ul magnet, maggot-link, sau info hash"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1694
msgid "Add torrent"
@ -958,7 +951,8 @@ msgstr "Stergerea .torrent va face ca acesta să se oprească."
msgid "Create Torrent"
msgstr "Creează un torent"
#. out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\" value=\"" + newFile + "\" /><br>\n");
#. out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\"
#. value=\"" + newFile + "\" /><br>\n");
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1725
msgid "Data to seed"
msgstr "Date pentru seedare"
@ -970,15 +964,15 @@ msgstr "Fișier sau director de seedare (trebuie să fie în calea specificată)
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1731
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1975
msgid "Trackers"
msgstr ""
msgstr "Trackere"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1733
msgid "Primary"
msgstr ""
msgstr "Primar"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1735
msgid "Alternates"
msgstr ""
msgstr "Alternativă"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1738
msgid "Create torrent"
@ -986,7 +980,7 @@ msgstr "Creează un torent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1756
msgid "none"
msgstr ""
msgstr "nici unul"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1789
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2046
@ -999,11 +993,11 @@ msgstr "Dosar cu date"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1797
msgid "Files readable by all"
msgstr ""
msgstr "Fișiere lizibile de către toți"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1801
msgid "If checked, other users may access the downloaded files"
msgstr ""
msgstr "Dacă este bifată, utilizatorii pot accesa fișierele descărcate"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1805
msgid "Auto start"
@ -1019,11 +1013,11 @@ msgstr "Teme"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1826
msgid "Refresh time"
msgstr ""
msgstr "Timp de reîmprospătare"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1839
msgid "Never"
msgstr ""
msgstr "Niciodată"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1845
msgid "Startup delay"
@ -1035,11 +1029,11 @@ msgstr "minute"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1851
msgid "Page size"
msgstr ""
msgstr "Mărimea paginii"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1853
msgid "torrents"
msgstr ""
msgstr "Torente"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1877
msgid "Total uploader limit"
@ -1067,19 +1061,17 @@ msgstr "Utilizați trackere deschise, de asemenea,"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1897
msgid ""
"If checked, announce torrents to open trackers as well as the tracker listed "
"in the torrent file"
msgstr ""
"Dacă este bifată, anunta torrente pentru a urmări trackere deschise , precum "
"și trackere listate în fișierul torrent"
"If checked, announce torrents to open trackers as well as the tracker listed"
" in the torrent file"
msgstr "Dacă este bifată, anunta torrente pentru a urmări trackere deschise , precum și trackere listate în fișierul torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1901
msgid "Enable DHT"
msgstr ""
msgstr "Activează DHT"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1905
msgid "If checked, use DHT"
msgstr ""
msgstr "Dacă este bifată, utilizați DHT"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1921
msgid "Inbound Settings"
@ -1091,19 +1083,19 @@ msgstr "Setări de ieșire"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1935
msgid "I2CP host"
msgstr ""
msgstr "Portul I2CP"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1940
msgid "I2CP port"
msgstr ""
msgstr "Portul I2CP"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1955
msgid "I2CP options"
msgstr ""
msgstr "Opțiuni I2CP"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1960
msgid "Save configuration"
msgstr ""
msgstr "Salvare configurări"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1980
msgid "Name"
@ -1111,7 +1103,7 @@ msgstr "Nume"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1982
msgid "Website URL"
msgstr ""
msgstr "URL website"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1984
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2530
@ -1120,11 +1112,11 @@ msgstr "Deschis"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1986
msgid "Private"
msgstr ""
msgstr "Privat"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1988
msgid "Announce URL"
msgstr ""
msgstr "URL de anuntare"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2022
msgid "Add"
@ -1133,125 +1125,125 @@ msgstr "Adaugă"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2062
#, java-format
msgid "Invalid magnet URL {0}"
msgstr ""
msgstr "URL-ul magnet invalid {0}"
#. * dummies for translation
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2070
#, java-format
msgid "1 hop"
msgid_plural "{0} hops"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
msgstr[0] "1 hop"
msgstr[1] "{0} hop-uri"
msgstr[2] "{0} hop-uri"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2071
#, java-format
msgid "1 tunnel"
msgid_plural "{0} tunnels"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
msgstr[0] "1 tunel"
msgstr[1] "{0} tunele"
msgstr[2] "{0} tunele"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2278
msgid "Torrent file"
msgstr ""
msgstr "Fișier torent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2291
msgid "Primary Tracker"
msgstr ""
msgstr "Tracker primar"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2300
msgid "Tracker List"
msgstr ""
msgstr "Lista Tracker"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2324
msgid "Comment"
msgstr ""
msgstr "Comentariu"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2333
msgid "Created"
msgstr ""
msgstr "Creat"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2343
msgid "Created By"
msgstr ""
msgstr "Creat de"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2353
msgid "Magnet link"
msgstr ""
msgstr "Legătură Magnet"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2360
msgid "Private torrent"
msgstr ""
msgstr "Torrent privat"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2370
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2434
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2436
msgid "Size"
msgstr ""
msgstr "Dimensiune"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2377
msgid "Completion"
msgstr ""
msgstr "Completare"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2387
msgid "Remaining"
msgstr ""
msgstr "Rămas"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2394
msgid "Files"
msgstr ""
msgstr "Fișiere"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2399
msgid "Pieces"
msgstr ""
msgstr "Piese:"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2403
msgid "Piece size"
msgstr ""
msgstr "Dimensiune piesei"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2426
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2430
msgid "Directory"
msgstr ""
msgstr "Dosar"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2447
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2449
msgid "Priority"
msgstr ""
msgstr "Prioritate"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2455
msgid "Up to higher level directory"
msgstr ""
msgstr "Spre dosarul de nivel superior"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2485
msgid "Torrent not found?"
msgstr ""
msgstr "Torrent nu a fost găsit?"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2493
msgid "File not found in torrent?"
msgstr ""
msgstr "Fișierul nu a fost găsit în torrent?"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2506
msgid "complete"
msgstr ""
msgstr "încheiat"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2507
msgid "remaining"
msgstr ""
msgstr "Rămas"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2556
msgid "High"
msgstr ""
msgstr "Ridicat"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2561
msgid "Normal"
msgstr ""
msgstr "Normal"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2566
msgid "Skip"
msgstr ""
msgstr "Omitere"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2575
msgid "Save priorities"
msgstr ""
msgstr "Salvați priorități"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -2,415 +2,417 @@
# Copyright (C) 2009 The I2P Project
# This file is distributed under the same license as the i2psnark package.
# To contribute translations, see http://www.i2p2.de/newdevelopers
#
#
# Translators:
# dich_tran <tran.nathan@gmail.com>, 2011
# dich_tran <thnhan@gmail.com>, 2011
msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-11-19 23:06+0000\n"
"PO-Revision-Date: 2013-11-19 16:49+0000\n"
"POT-Creation-Date: 2013-12-01 20:06+0000\n"
"PO-Revision-Date: 2013-11-19 23:52+0000\n"
"Last-Translator: kytv <killyourtv@i2pmail.org>\n"
"Language-Team: Vietnamese (http://www.transifex.com/projects/p/I2P/language/"
"vi/)\n"
"Language: vi\n"
"Language-Team: Vietnamese (http://www.transifex.com/projects/p/I2P/language/vi/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: vi\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: ../java/src/org/klomp/snark/IdleChecker.java:69
#: ../java/src/org/klomp/snark/SnarkManager.java:1941
#: ../java/src/org/klomp/snark/SnarkManager.java:1952
#: ../java/src/org/klomp/snark/SnarkManager.java:1938
#: ../java/src/org/klomp/snark/SnarkManager.java:1949
msgid "I2P tunnel closed."
msgstr "Đường hầm I2P đóng lại."
#: ../java/src/org/klomp/snark/MagnetURI.java:42
#: ../java/src/org/klomp/snark/MagnetURI.java:52
#: ../java/src/org/klomp/snark/SnarkManager.java:1646
#: ../java/src/org/klomp/snark/SnarkManager.java:1644
msgid "Magnet"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:506
#: ../java/src/org/klomp/snark/SnarkManager.java:504
#, java-format
msgid "Total uploaders limit changed to {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:508
#: ../java/src/org/klomp/snark/SnarkManager.java:506
#, java-format
msgid "Minimum total uploaders limit is {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:520
#: ../java/src/org/klomp/snark/SnarkManager.java:518
#, java-format
msgid "Up BW limit changed to {0}KBps"
msgstr "Giới hạn băng thông lên đổi thành {0}KBps"
#: ../java/src/org/klomp/snark/SnarkManager.java:522
#: ../java/src/org/klomp/snark/SnarkManager.java:520
#, java-format
msgid "Minimum up bandwidth limit is {0}KBps"
msgstr "Tối thiểu băng thông lên là {0}KBps"
#: ../java/src/org/klomp/snark/SnarkManager.java:534
#: ../java/src/org/klomp/snark/SnarkManager.java:532
#, java-format
msgid "Startup delay changed to {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:545
#: ../java/src/org/klomp/snark/SnarkManager.java:543
#, java-format
msgid "Refresh time changed to {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:547
#: ../java/src/org/klomp/snark/SnarkManager.java:545
msgid "Refresh disabled"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:563
#: ../java/src/org/klomp/snark/SnarkManager.java:561
#, java-format
msgid "Page size changed to {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:572
#: ../java/src/org/klomp/snark/SnarkManager.java:570
msgid "Data directory must be an absolute path"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:574
#: ../java/src/org/klomp/snark/SnarkManager.java:572
msgid "Data directory does not exist"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:576
#: ../java/src/org/klomp/snark/SnarkManager.java:574
msgid "Not a directory"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:578
#: ../java/src/org/klomp/snark/SnarkManager.java:576
msgid "Unreadable"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:583
#: ../java/src/org/klomp/snark/SnarkManager.java:581
#, java-format
msgid "Data directory changed to {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:638
#: ../java/src/org/klomp/snark/SnarkManager.java:636
msgid "I2CP and tunnel changes will take effect after stopping all torrents"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:642
#: ../java/src/org/klomp/snark/SnarkManager.java:640
#, java-format
msgid "I2CP options changed to {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:648
#: ../java/src/org/klomp/snark/SnarkManager.java:646
msgid "Disconnecting old I2CP destination"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:650
#: ../java/src/org/klomp/snark/SnarkManager.java:648
#, java-format
msgid "I2CP settings changed to {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:655
#: ../java/src/org/klomp/snark/SnarkManager.java:653
msgid ""
"Unable to connect with the new settings, reverting to the old I2CP settings"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:659
#: ../java/src/org/klomp/snark/SnarkManager.java:657
msgid "Unable to reconnect with the old settings!"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:661
#: ../java/src/org/klomp/snark/SnarkManager.java:659
msgid "Reconnected on the new I2CP destination"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:668
#: ../java/src/org/klomp/snark/SnarkManager.java:666
#, java-format
msgid "I2CP listener restarted for \"{0}\""
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:682
#: ../java/src/org/klomp/snark/SnarkManager.java:680
msgid "New files will be publicly readable"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:684
#: ../java/src/org/klomp/snark/SnarkManager.java:682
msgid "New files will not be publicly readable"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:691
#: ../java/src/org/klomp/snark/SnarkManager.java:689
msgid "Enabled autostart"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:693
#: ../java/src/org/klomp/snark/SnarkManager.java:691
msgid "Disabled autostart"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:699
#: ../java/src/org/klomp/snark/SnarkManager.java:697
msgid "Enabled open trackers - torrent restart required to take effect."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:701
#: ../java/src/org/klomp/snark/SnarkManager.java:699
msgid "Disabled open trackers - torrent restart required to take effect."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:708
#: ../java/src/org/klomp/snark/SnarkManager.java:706
msgid "Enabled DHT."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:710
#: ../java/src/org/klomp/snark/SnarkManager.java:708
msgid "Disabled DHT."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:712
#: ../java/src/org/klomp/snark/SnarkManager.java:710
msgid "DHT change requires tunnel shutdown and reopen"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:719
#: ../java/src/org/klomp/snark/SnarkManager.java:717
#, java-format
msgid "{0} theme loaded, return to main i2psnark page to view."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:729
#: ../java/src/org/klomp/snark/SnarkManager.java:727
msgid "Configuration unchanged."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:761
#: ../java/src/org/klomp/snark/SnarkManager.java:759
msgid "Open Tracker list changed - torrent restart required to take effect."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:771
#: ../java/src/org/klomp/snark/SnarkManager.java:769
msgid "Private tracker list changed - affects newly created torrents only."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:817
#: ../java/src/org/klomp/snark/SnarkManager.java:815
#, java-format
msgid "Unable to save the config to {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:895
#: ../java/src/org/klomp/snark/SnarkManager.java:893
msgid "Connecting to I2P"
msgstr "Nối kết vào I2P"
#: ../java/src/org/klomp/snark/SnarkManager.java:898
#: ../java/src/org/klomp/snark/SnarkManager.java:896
msgid "Error connecting to I2P - check your I2CP settings!"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:907
#: ../java/src/org/klomp/snark/SnarkManager.java:1683
#: ../java/src/org/klomp/snark/SnarkManager.java:905
#: ../java/src/org/klomp/snark/SnarkManager.java:1681
#, java-format
msgid "Error: Could not add the torrent {0}"
msgstr ""
#. catch this here so we don't try do delete it below
#: ../java/src/org/klomp/snark/SnarkManager.java:929
#: ../java/src/org/klomp/snark/SnarkManager.java:927
#, java-format
msgid "Cannot open \"{0}\""
msgstr ""
#. TODO - if the existing one is a magnet, delete it and add the metainfo instead?
#: ../java/src/org/klomp/snark/SnarkManager.java:948
#: ../java/src/org/klomp/snark/SnarkManager.java:1049
#: ../java/src/org/klomp/snark/SnarkManager.java:1131
#. TODO - if the existing one is a magnet, delete it and add the metainfo
#. instead?
#: ../java/src/org/klomp/snark/SnarkManager.java:946
#: ../java/src/org/klomp/snark/SnarkManager.java:1047
#: ../java/src/org/klomp/snark/SnarkManager.java:1129
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:159
#, java-format
msgid "Torrent with this info hash is already running: {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:954
#: ../java/src/org/klomp/snark/SnarkManager.java:952
#, java-format
msgid "ERROR - No I2P trackers in private torrent \"{0}\""
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:956
#: ../java/src/org/klomp/snark/SnarkManager.java:954
#, java-format
msgid ""
"Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers and "
"DHT only."
"Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers and"
" DHT only."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:959
#: ../java/src/org/klomp/snark/SnarkManager.java:957
#, java-format
msgid ""
"Warning - No I2P trackers in \"{0}\", and open trackers are disabled, will "
"announce to DHT only."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:961
#: ../java/src/org/klomp/snark/SnarkManager.java:959
#, java-format
msgid ""
"Warning - No I2P trackers in \"{0}\", and DHT and open trackers are "
"disabled, you should enable open trackers or DHT before starting the torrent."
"disabled, you should enable open trackers or DHT before starting the "
"torrent."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:983
#: ../java/src/org/klomp/snark/SnarkManager.java:981
#, java-format
msgid "Torrent in \"{0}\" is invalid"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:990
#: ../java/src/org/klomp/snark/SnarkManager.java:988
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:183
#, java-format
msgid "ERROR - Out of memory, cannot create torrent from {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1002
#: ../java/src/org/klomp/snark/SnarkManager.java:1000
#, java-format
msgid "Torrent added and started: \"{0}\""
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1004
#: ../java/src/org/klomp/snark/SnarkManager.java:1002
#, java-format
msgid "Torrent added: \"{0}\""
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1060
#: ../java/src/org/klomp/snark/SnarkManager.java:1058
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:87
#, java-format
msgid "Fetching {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1066
#: ../java/src/org/klomp/snark/SnarkManager.java:1064
#, java-format
msgid ""
"Open trackers are disabled and we have no DHT peers. Fetch of {0} may not "
"succeed until you start another torrent, enable open trackers, or enable DHT."
"succeed until you start another torrent, enable open trackers, or enable "
"DHT."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1070
#: ../java/src/org/klomp/snark/SnarkManager.java:1068
#, java-format
msgid "Adding {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1102
#: ../java/src/org/klomp/snark/SnarkManager.java:1100
#, java-format
msgid "Download already running: {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1141
#: ../java/src/org/klomp/snark/SnarkManager.java:1164
#: ../java/src/org/klomp/snark/SnarkManager.java:1602
#: ../java/src/org/klomp/snark/SnarkManager.java:1139
#: ../java/src/org/klomp/snark/SnarkManager.java:1162
#: ../java/src/org/klomp/snark/SnarkManager.java:1600
#, java-format
msgid "Failed to copy torrent file to {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1391
#: ../java/src/org/klomp/snark/SnarkManager.java:1389
#, java-format
msgid "Too many files in \"{0}\" ({1}), deleting it!"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1393
#: ../java/src/org/klomp/snark/SnarkManager.java:1391
#, java-format
msgid "Torrent file \"{0}\" cannot end in \".torrent\", deleting it!"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1395
#: ../java/src/org/klomp/snark/SnarkManager.java:1393
#, java-format
msgid "No pieces in \"{0}\", deleting it!"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1397
#: ../java/src/org/klomp/snark/SnarkManager.java:1395
#, java-format
msgid "Too many pieces in \"{0}\", limit is {1}, deleting it!"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1399
#: ../java/src/org/klomp/snark/SnarkManager.java:1397
#, java-format
msgid "Pieces are too large in \"{0}\" ({1}B), deleting it."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1400
#: ../java/src/org/klomp/snark/SnarkManager.java:1398
#, java-format
msgid "Limit is {0}B"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1402
#: ../java/src/org/klomp/snark/SnarkManager.java:1400
#, java-format
msgid "Torrent \"{0}\" has no data, deleting it!"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1410
#: ../java/src/org/klomp/snark/SnarkManager.java:1408
#, java-format
msgid "Torrents larger than {0}B are not supported yet, deleting \"{1}\""
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1426
#: ../java/src/org/klomp/snark/SnarkManager.java:1424
#, java-format
msgid "Error: Could not remove the torrent {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1447
#: ../java/src/org/klomp/snark/SnarkManager.java:1465
#: ../java/src/org/klomp/snark/SnarkManager.java:1445
#: ../java/src/org/klomp/snark/SnarkManager.java:1463
#, java-format
msgid "Torrent stopped: \"{0}\""
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1486
#: ../java/src/org/klomp/snark/SnarkManager.java:1484
#, java-format
msgid "Torrent removed: \"{0}\""
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1494
#: ../java/src/org/klomp/snark/SnarkManager.java:1492
#, java-format
msgid "Adding torrents in {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1525
#: ../java/src/org/klomp/snark/SnarkManager.java:1523
#, java-format
msgid "Up bandwidth limit is {0} KBps"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1547
#: ../java/src/org/klomp/snark/SnarkManager.java:1545
#, java-format
msgid "Download finished: {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1598
#: ../java/src/org/klomp/snark/SnarkManager.java:1596
#, java-format
msgid "Metainfo received for {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1599
#: ../java/src/org/klomp/snark/SnarkManager.java:1829
#: ../java/src/org/klomp/snark/SnarkManager.java:1597
#: ../java/src/org/klomp/snark/SnarkManager.java:1826
#, java-format
msgid "Starting up torrent {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1614
#: ../java/src/org/klomp/snark/SnarkManager.java:1612
#, java-format
msgid "Error on torrent {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1677
#: ../java/src/org/klomp/snark/SnarkManager.java:1675
msgid "Unable to connect to I2P!"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1828
#: ../java/src/org/klomp/snark/SnarkManager.java:1825
#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:124
msgid "Opening the I2P tunnel"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1852
#: ../java/src/org/klomp/snark/SnarkManager.java:1849
msgid "Opening the I2P tunnel and starting all torrents."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1915
#: ../java/src/org/klomp/snark/SnarkManager.java:1912
msgid "Stopping all torrents and closing the I2P tunnel."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1934
#: ../java/src/org/klomp/snark/SnarkManager.java:1931
msgid "Closing I2P tunnel after notifying trackers."
msgstr ""
#: ../java/src/org/klomp/snark/TrackerClient.java:237
#: ../java/src/org/klomp/snark/TrackerClient.java:234
#, java-format
msgid "No valid trackers for {0} - enable opentrackers or DHT?"
msgstr ""
#: ../java/src/org/klomp/snark/UpdateHandler.java:49
#: ../java/src/org/klomp/snark/UpdateRunner.java:229
#: ../java/src/org/klomp/snark/UpdateRunner.java:227
msgid "Updating"
msgstr ""
#: ../java/src/org/klomp/snark/UpdateRunner.java:116
#: ../java/src/org/klomp/snark/UpdateRunner.java:114
#, java-format
msgid "Updating from {0}"
msgstr ""
@ -732,7 +734,8 @@ msgstr ""
msgid "Enter valid tracker name and URLs"
msgstr ""
#. "<input type=\"reset\" class=\"cancel\" value=\"").append(_("Cancel")).append("\">\n" +
#. "<input type=\"reset\" class=\"cancel\"
#. value=\"").append(_("Cancel")).append("\">\n" +
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1091
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2034
msgid "Restore defaults"
@ -920,8 +923,8 @@ msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1689
msgid ""
"Enter the torrent file download URL (I2P only), magnet link, maggot link, or "
"info hash"
"Enter the torrent file download URL (I2P only), magnet link, maggot link, or"
" info hash"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1694
@ -941,7 +944,8 @@ msgstr ""
msgid "Create Torrent"
msgstr ""
#. out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\" value=\"" + newFile + "\" /><br>\n");
#. out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\"
#. value=\"" + newFile + "\" /><br>\n");
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1725
msgid "Data to seed"
msgstr ""
@ -1050,8 +1054,8 @@ msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1897
msgid ""
"If checked, announce torrents to open trackers as well as the tracker listed "
"in the torrent file"
"If checked, announce torrents to open trackers as well as the tracker listed"
" in the torrent file"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1901

View File

@ -4,6 +4,15 @@
"http://java.sun.com/j2ee/dtds/web-app_2.2.dtd">
<web-app>
<filter>
<filter-name>XSSFilter</filter-name>
<filter-class>net.i2p.servlet.filters.XSSFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>XSSFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>org.klomp.snark.web.I2PSnarkServlet</servlet-name>
<servlet-class>org.klomp.snark.web.I2PSnarkServlet</servlet-class>

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